diff options
Diffstat (limited to 'drivers/net/ethernet/broadcom')
| -rw-r--r-- | drivers/net/ethernet/broadcom/bnx2x/bnx2x.h | 15 | ||||
| -rw-r--r-- | drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c | 27 | ||||
| -rw-r--r-- | drivers/net/ethernet/broadcom/tg3.c | 3 | 
3 files changed, 23 insertions, 22 deletions
diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x.h b/drivers/net/ethernet/broadcom/bnx2x/bnx2x.h index e30e2a2f354..7de82418497 100644 --- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x.h +++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x.h @@ -747,21 +747,6 @@ struct bnx2x_fastpath {  #define ETH_RX_ERROR_FALGS		ETH_FAST_PATH_RX_CQE_PHY_DECODE_ERR_FLG -#define BNX2X_IP_CSUM_ERR(cqe) \ -			(!((cqe)->fast_path_cqe.status_flags & \ -			   ETH_FAST_PATH_RX_CQE_IP_XSUM_NO_VALIDATION_FLG) && \ -			 ((cqe)->fast_path_cqe.type_error_flags & \ -			  ETH_FAST_PATH_RX_CQE_IP_BAD_XSUM_FLG)) - -#define BNX2X_L4_CSUM_ERR(cqe) \ -			(!((cqe)->fast_path_cqe.status_flags & \ -			   ETH_FAST_PATH_RX_CQE_L4_XSUM_NO_VALIDATION_FLG) && \ -			 ((cqe)->fast_path_cqe.type_error_flags & \ -			  ETH_FAST_PATH_RX_CQE_L4_BAD_XSUM_FLG)) - -#define BNX2X_RX_CSUM_OK(cqe) \ -			(!(BNX2X_L4_CSUM_ERR(cqe) || BNX2X_IP_CSUM_ERR(cqe))) -  #define BNX2X_PRS_FLAG_OVERETH_IPV4(flags) \  				(((le16_to_cpu(flags) & \  				   PARSING_FLAGS_OVER_ETHERNET_PROTOCOL) >> \ diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c index ad0743bf4bd..cbc56f274e0 100644 --- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c +++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c @@ -617,6 +617,25 @@ static int bnx2x_alloc_rx_data(struct bnx2x *bp,  	return 0;  } +static void bnx2x_csum_validate(struct sk_buff *skb, union eth_rx_cqe *cqe, +				struct bnx2x_fastpath *fp) +{ +	/* Do nothing if no IP/L4 csum validation was done */ + +	if (cqe->fast_path_cqe.status_flags & +	    (ETH_FAST_PATH_RX_CQE_IP_XSUM_NO_VALIDATION_FLG | +	     ETH_FAST_PATH_RX_CQE_L4_XSUM_NO_VALIDATION_FLG)) +		return; + +	/* If both IP/L4 validation were done, check if an error was found. */ + +	if (cqe->fast_path_cqe.type_error_flags & +	    (ETH_FAST_PATH_RX_CQE_IP_BAD_XSUM_FLG | +	     ETH_FAST_PATH_RX_CQE_L4_BAD_XSUM_FLG)) +		fp->eth_q_stats.hw_csum_err++; +	else +		skb->ip_summed = CHECKSUM_UNNECESSARY; +}  int bnx2x_rx_int(struct bnx2x_fastpath *fp, int budget)  { @@ -806,13 +825,9 @@ reuse_rx:  		skb_checksum_none_assert(skb); -		if (bp->dev->features & NETIF_F_RXCSUM) { +		if (bp->dev->features & NETIF_F_RXCSUM) +			bnx2x_csum_validate(skb, cqe, fp); -			if (likely(BNX2X_RX_CSUM_OK(cqe))) -				skb->ip_summed = CHECKSUM_UNNECESSARY; -			else -				fp->eth_q_stats.hw_csum_err++; -		}  		skb_record_rx_queue(skb, fp->rx_queue); diff --git a/drivers/net/ethernet/broadcom/tg3.c b/drivers/net/ethernet/broadcom/tg3.c index edeeb516807..e47ff8be1d7 100644 --- a/drivers/net/ethernet/broadcom/tg3.c +++ b/drivers/net/ethernet/broadcom/tg3.c @@ -14275,7 +14275,8 @@ static int __devinit tg3_get_invariants(struct tg3 *tp)  		}  	} -	if (tg3_flag(tp, 5755_PLUS)) +	if (tg3_flag(tp, 5755_PLUS) || +	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906)  		tg3_flag_set(tp, SHORT_DMA_BUG);  	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5719)  |