aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/net/igb/igb.h2
-rw-r--r--drivers/net/igb/igb_ethtool.c8
-rw-r--r--drivers/net/igb/igb_main.c12
3 files changed, 12 insertions, 10 deletions
diff --git a/drivers/net/igb/igb.h b/drivers/net/igb/igb.h
index 4e8464b9df2e..154c5acc6fce 100644
--- a/drivers/net/igb/igb.h
+++ b/drivers/net/igb/igb.h
@@ -238,7 +238,6 @@ struct igb_adapter {
238 u64 hw_csum_err; 238 u64 hw_csum_err;
239 u64 hw_csum_good; 239 u64 hw_csum_good;
240 u32 alloc_rx_buff_failed; 240 u32 alloc_rx_buff_failed;
241 bool rx_csum;
242 u32 gorc; 241 u32 gorc;
243 u64 gorc_old; 242 u64 gorc_old;
244 u16 rx_ps_hdr_size; 243 u16 rx_ps_hdr_size;
@@ -286,6 +285,7 @@ struct igb_adapter {
286#define IGB_FLAG_DCA_ENABLED (1 << 1) 285#define IGB_FLAG_DCA_ENABLED (1 << 1)
287#define IGB_FLAG_QUAD_PORT_A (1 << 2) 286#define IGB_FLAG_QUAD_PORT_A (1 << 2)
288#define IGB_FLAG_NEED_CTX_IDX (1 << 3) 287#define IGB_FLAG_NEED_CTX_IDX (1 << 3)
288#define IGB_FLAG_RX_CSUM_DISABLED (1 << 4)
289 289
290enum e1000_state_t { 290enum e1000_state_t {
291 __IGB_TESTING, 291 __IGB_TESTING,
diff --git a/drivers/net/igb/igb_ethtool.c b/drivers/net/igb/igb_ethtool.c
index b1367ce6586e..b8551a57dd3f 100644
--- a/drivers/net/igb/igb_ethtool.c
+++ b/drivers/net/igb/igb_ethtool.c
@@ -275,13 +275,17 @@ static int igb_set_pauseparam(struct net_device *netdev,
275static u32 igb_get_rx_csum(struct net_device *netdev) 275static u32 igb_get_rx_csum(struct net_device *netdev)
276{ 276{
277 struct igb_adapter *adapter = netdev_priv(netdev); 277 struct igb_adapter *adapter = netdev_priv(netdev);
278 return adapter->rx_csum; 278 return !(adapter->flags & IGB_FLAG_RX_CSUM_DISABLED);
279} 279}
280 280
281static int igb_set_rx_csum(struct net_device *netdev, u32 data) 281static int igb_set_rx_csum(struct net_device *netdev, u32 data)
282{ 282{
283 struct igb_adapter *adapter = netdev_priv(netdev); 283 struct igb_adapter *adapter = netdev_priv(netdev);
284 adapter->rx_csum = data; 284
285 if (data)
286 adapter->flags &= ~IGB_FLAG_RX_CSUM_DISABLED;
287 else
288 adapter->flags |= IGB_FLAG_RX_CSUM_DISABLED;
285 289
286 return 0; 290 return 0;
287} 291}
diff --git a/drivers/net/igb/igb_main.c b/drivers/net/igb/igb_main.c
index bca7e9f76be4..8de8629b07ec 100644
--- a/drivers/net/igb/igb_main.c
+++ b/drivers/net/igb/igb_main.c
@@ -1395,8 +1395,6 @@ static int __devinit igb_probe(struct pci_dev *pdev,
1395 1395
1396 igb_validate_mdi_setting(hw); 1396 igb_validate_mdi_setting(hw);
1397 1397
1398 adapter->rx_csum = 1;
1399
1400 /* Initial Wake on LAN setting If APM wake is enabled in the EEPROM, 1398 /* Initial Wake on LAN setting If APM wake is enabled in the EEPROM,
1401 * enable the ACPI Magic Packet filter 1399 * enable the ACPI Magic Packet filter
1402 */ 1400 */
@@ -2249,13 +2247,12 @@ static void igb_configure_rx(struct igb_adapter *adapter)
2249 rxcsum = rd32(E1000_RXCSUM); 2247 rxcsum = rd32(E1000_RXCSUM);
2250 /* Disable raw packet checksumming */ 2248 /* Disable raw packet checksumming */
2251 rxcsum |= E1000_RXCSUM_PCSD; 2249 rxcsum |= E1000_RXCSUM_PCSD;
2252 /* Don't need to set TUOFL or IPOFL, they default to 1 */ 2250
2253 if (!adapter->rx_csum) 2251 if (adapter->hw.mac.type == e1000_82576)
2254 rxcsum &= ~(E1000_RXCSUM_TUOFL | E1000_RXCSUM_IPOFL);
2255 else if (adapter->hw.mac.type == e1000_82576)
2256 /* Enable Receive Checksum Offload for SCTP */ 2252 /* Enable Receive Checksum Offload for SCTP */
2257 rxcsum |= E1000_RXCSUM_CRCOFL; 2253 rxcsum |= E1000_RXCSUM_CRCOFL;
2258 2254
2255 /* Don't need to set TUOFL or IPOFL, they default to 1 */
2259 wr32(E1000_RXCSUM, rxcsum); 2256 wr32(E1000_RXCSUM, rxcsum);
2260 2257
2261 /* Set the default pool for the PF's first queue */ 2258 /* Set the default pool for the PF's first queue */
@@ -4455,7 +4452,8 @@ static inline void igb_rx_checksum_adv(struct igb_adapter *adapter,
4455 skb->ip_summed = CHECKSUM_NONE; 4452 skb->ip_summed = CHECKSUM_NONE;
4456 4453
4457 /* Ignore Checksum bit is set or checksum is disabled through ethtool */ 4454 /* Ignore Checksum bit is set or checksum is disabled through ethtool */
4458 if ((status_err & E1000_RXD_STAT_IXSM) || !adapter->rx_csum) 4455 if ((status_err & E1000_RXD_STAT_IXSM) ||
4456 (adapter->flags & IGB_FLAG_RX_CSUM_DISABLED))
4459 return; 4457 return;
4460 /* TCP/UDP checksum error bit is set */ 4458 /* TCP/UDP checksum error bit is set */
4461 if (status_err & 4459 if (status_err &