diff options
Diffstat (limited to 'drivers/net/igb')
| -rw-r--r-- | drivers/net/igb/e1000_82575.c | 1 | ||||
| -rw-r--r-- | drivers/net/igb/e1000_hw.h | 1 | ||||
| -rw-r--r-- | drivers/net/igb/igb_ethtool.c | 17 | ||||
| -rw-r--r-- | drivers/net/igb/igb_main.c | 25 |
4 files changed, 17 insertions, 27 deletions
diff --git a/drivers/net/igb/e1000_82575.c b/drivers/net/igb/e1000_82575.c index bb823acc7443..f5e2e7235fcb 100644 --- a/drivers/net/igb/e1000_82575.c +++ b/drivers/net/igb/e1000_82575.c | |||
| @@ -87,7 +87,6 @@ static s32 igb_get_invariants_82575(struct e1000_hw *hw) | |||
| 87 | case E1000_DEV_ID_82576: | 87 | case E1000_DEV_ID_82576: |
| 88 | case E1000_DEV_ID_82576_FIBER: | 88 | case E1000_DEV_ID_82576_FIBER: |
| 89 | case E1000_DEV_ID_82576_SERDES: | 89 | case E1000_DEV_ID_82576_SERDES: |
| 90 | case E1000_DEV_ID_82576_QUAD_COPPER: | ||
| 91 | mac->type = e1000_82576; | 90 | mac->type = e1000_82576; |
| 92 | break; | 91 | break; |
| 93 | default: | 92 | default: |
diff --git a/drivers/net/igb/e1000_hw.h b/drivers/net/igb/e1000_hw.h index a65ccc3095c3..99504a600a80 100644 --- a/drivers/net/igb/e1000_hw.h +++ b/drivers/net/igb/e1000_hw.h | |||
| @@ -41,7 +41,6 @@ struct e1000_hw; | |||
| 41 | #define E1000_DEV_ID_82576 0x10C9 | 41 | #define E1000_DEV_ID_82576 0x10C9 |
| 42 | #define E1000_DEV_ID_82576_FIBER 0x10E6 | 42 | #define E1000_DEV_ID_82576_FIBER 0x10E6 |
| 43 | #define E1000_DEV_ID_82576_SERDES 0x10E7 | 43 | #define E1000_DEV_ID_82576_SERDES 0x10E7 |
| 44 | #define E1000_DEV_ID_82576_QUAD_COPPER 0x10E8 | ||
| 45 | #define E1000_DEV_ID_82575EB_COPPER 0x10A7 | 44 | #define E1000_DEV_ID_82575EB_COPPER 0x10A7 |
| 46 | #define E1000_DEV_ID_82575EB_FIBER_SERDES 0x10A9 | 45 | #define E1000_DEV_ID_82575EB_FIBER_SERDES 0x10A9 |
| 47 | #define E1000_DEV_ID_82575GB_QUAD_COPPER 0x10D6 | 46 | #define E1000_DEV_ID_82575GB_QUAD_COPPER 0x10D6 |
diff --git a/drivers/net/igb/igb_ethtool.c b/drivers/net/igb/igb_ethtool.c index 11aee1309951..58906c984be9 100644 --- a/drivers/net/igb/igb_ethtool.c +++ b/drivers/net/igb/igb_ethtool.c | |||
| @@ -373,13 +373,17 @@ static void igb_get_regs(struct net_device *netdev, | |||
| 373 | regs_buff[12] = rd32(E1000_EECD); | 373 | regs_buff[12] = rd32(E1000_EECD); |
| 374 | 374 | ||
| 375 | /* Interrupt */ | 375 | /* Interrupt */ |
| 376 | regs_buff[13] = rd32(E1000_EICR); | 376 | /* Reading EICS for EICR because they read the |
| 377 | * same but EICS does not clear on read */ | ||
| 378 | regs_buff[13] = rd32(E1000_EICS); | ||
| 377 | regs_buff[14] = rd32(E1000_EICS); | 379 | regs_buff[14] = rd32(E1000_EICS); |
| 378 | regs_buff[15] = rd32(E1000_EIMS); | 380 | regs_buff[15] = rd32(E1000_EIMS); |
| 379 | regs_buff[16] = rd32(E1000_EIMC); | 381 | regs_buff[16] = rd32(E1000_EIMC); |
| 380 | regs_buff[17] = rd32(E1000_EIAC); | 382 | regs_buff[17] = rd32(E1000_EIAC); |
| 381 | regs_buff[18] = rd32(E1000_EIAM); | 383 | regs_buff[18] = rd32(E1000_EIAM); |
| 382 | regs_buff[19] = rd32(E1000_ICR); | 384 | /* Reading ICS for ICR because they read the |
| 385 | * same but ICS does not clear on read */ | ||
| 386 | regs_buff[19] = rd32(E1000_ICS); | ||
| 383 | regs_buff[20] = rd32(E1000_ICS); | 387 | regs_buff[20] = rd32(E1000_ICS); |
| 384 | regs_buff[21] = rd32(E1000_IMS); | 388 | regs_buff[21] = rd32(E1000_IMS); |
| 385 | regs_buff[22] = rd32(E1000_IMC); | 389 | regs_buff[22] = rd32(E1000_IMC); |
| @@ -1746,15 +1750,6 @@ static int igb_wol_exclusion(struct igb_adapter *adapter, | |||
| 1746 | /* return success for non excluded adapter ports */ | 1750 | /* return success for non excluded adapter ports */ |
| 1747 | retval = 0; | 1751 | retval = 0; |
| 1748 | break; | 1752 | break; |
| 1749 | case E1000_DEV_ID_82576_QUAD_COPPER: | ||
| 1750 | /* quad port adapters only support WoL on port A */ | ||
| 1751 | if (!(adapter->flags & IGB_FLAG_QUAD_PORT_A)) { | ||
| 1752 | wol->supported = 0; | ||
| 1753 | break; | ||
| 1754 | } | ||
| 1755 | /* return success for non excluded adapter ports */ | ||
| 1756 | retval = 0; | ||
| 1757 | break; | ||
| 1758 | default: | 1753 | default: |
| 1759 | /* dual port cards only support WoL on port A from now on | 1754 | /* dual port cards only support WoL on port A from now on |
| 1760 | * unless it was enabled in the eeprom for port B | 1755 | * unless it was enabled in the eeprom for port B |
diff --git a/drivers/net/igb/igb_main.c b/drivers/net/igb/igb_main.c index 8f66e15ec8d6..634c4c9d87be 100644 --- a/drivers/net/igb/igb_main.c +++ b/drivers/net/igb/igb_main.c | |||
| @@ -61,7 +61,6 @@ static struct pci_device_id igb_pci_tbl[] = { | |||
| 61 | { PCI_VDEVICE(INTEL, E1000_DEV_ID_82576), board_82575 }, | 61 | { PCI_VDEVICE(INTEL, E1000_DEV_ID_82576), board_82575 }, |
| 62 | { PCI_VDEVICE(INTEL, E1000_DEV_ID_82576_FIBER), board_82575 }, | 62 | { PCI_VDEVICE(INTEL, E1000_DEV_ID_82576_FIBER), board_82575 }, |
| 63 | { PCI_VDEVICE(INTEL, E1000_DEV_ID_82576_SERDES), board_82575 }, | 63 | { PCI_VDEVICE(INTEL, E1000_DEV_ID_82576_SERDES), board_82575 }, |
| 64 | { PCI_VDEVICE(INTEL, E1000_DEV_ID_82576_QUAD_COPPER), board_82575 }, | ||
| 65 | { PCI_VDEVICE(INTEL, E1000_DEV_ID_82575EB_COPPER), board_82575 }, | 64 | { PCI_VDEVICE(INTEL, E1000_DEV_ID_82575EB_COPPER), board_82575 }, |
| 66 | { PCI_VDEVICE(INTEL, E1000_DEV_ID_82575EB_FIBER_SERDES), board_82575 }, | 65 | { PCI_VDEVICE(INTEL, E1000_DEV_ID_82575EB_FIBER_SERDES), board_82575 }, |
| 67 | { PCI_VDEVICE(INTEL, E1000_DEV_ID_82575GB_QUAD_COPPER), board_82575 }, | 66 | { PCI_VDEVICE(INTEL, E1000_DEV_ID_82575GB_QUAD_COPPER), board_82575 }, |
| @@ -521,7 +520,7 @@ static void igb_set_interrupt_capability(struct igb_adapter *adapter) | |||
| 521 | adapter->msix_entries, | 520 | adapter->msix_entries, |
| 522 | numvecs); | 521 | numvecs); |
| 523 | if (err == 0) | 522 | if (err == 0) |
| 524 | return; | 523 | goto out; |
| 525 | 524 | ||
| 526 | igb_reset_interrupt_capability(adapter); | 525 | igb_reset_interrupt_capability(adapter); |
| 527 | 526 | ||
| @@ -531,7 +530,7 @@ msi_only: | |||
| 531 | adapter->num_tx_queues = 1; | 530 | adapter->num_tx_queues = 1; |
| 532 | if (!pci_enable_msi(adapter->pdev)) | 531 | if (!pci_enable_msi(adapter->pdev)) |
| 533 | adapter->flags |= IGB_FLAG_HAS_MSI; | 532 | adapter->flags |= IGB_FLAG_HAS_MSI; |
| 534 | 533 | out: | |
| 535 | /* Notify the stack of the (possibly) reduced Tx Queue count. */ | 534 | /* Notify the stack of the (possibly) reduced Tx Queue count. */ |
| 536 | adapter->netdev->real_num_tx_queues = adapter->num_tx_queues; | 535 | adapter->netdev->real_num_tx_queues = adapter->num_tx_queues; |
| 537 | return; | 536 | return; |
| @@ -1217,16 +1216,6 @@ static int __devinit igb_probe(struct pci_dev *pdev, | |||
| 1217 | if (rd32(E1000_STATUS) & E1000_STATUS_FUNC_1) | 1216 | if (rd32(E1000_STATUS) & E1000_STATUS_FUNC_1) |
| 1218 | adapter->eeprom_wol = 0; | 1217 | adapter->eeprom_wol = 0; |
| 1219 | break; | 1218 | break; |
| 1220 | case E1000_DEV_ID_82576_QUAD_COPPER: | ||
| 1221 | /* if quad port adapter, disable WoL on all but port A */ | ||
| 1222 | if (global_quad_port_a != 0) | ||
| 1223 | adapter->eeprom_wol = 0; | ||
| 1224 | else | ||
| 1225 | adapter->flags |= IGB_FLAG_QUAD_PORT_A; | ||
| 1226 | /* Reset for multiple quad port adapters */ | ||
| 1227 | if (++global_quad_port_a == 4) | ||
| 1228 | global_quad_port_a = 0; | ||
| 1229 | break; | ||
| 1230 | } | 1219 | } |
| 1231 | 1220 | ||
| 1232 | /* initialize the wol settings based on the eeprom settings */ | 1221 | /* initialize the wol settings based on the eeprom settings */ |
| @@ -2290,7 +2279,9 @@ static void igb_watchdog_task(struct work_struct *work) | |||
| 2290 | struct igb_ring *tx_ring = adapter->tx_ring; | 2279 | struct igb_ring *tx_ring = adapter->tx_ring; |
| 2291 | struct e1000_mac_info *mac = &adapter->hw.mac; | 2280 | struct e1000_mac_info *mac = &adapter->hw.mac; |
| 2292 | u32 link; | 2281 | u32 link; |
| 2282 | u32 eics = 0; | ||
| 2293 | s32 ret_val; | 2283 | s32 ret_val; |
| 2284 | int i; | ||
| 2294 | 2285 | ||
| 2295 | if ((netif_carrier_ok(netdev)) && | 2286 | if ((netif_carrier_ok(netdev)) && |
| 2296 | (rd32(E1000_STATUS) & E1000_STATUS_LU)) | 2287 | (rd32(E1000_STATUS) & E1000_STATUS_LU)) |
| @@ -2392,7 +2383,13 @@ link_up: | |||
| 2392 | } | 2383 | } |
| 2393 | 2384 | ||
| 2394 | /* Cause software interrupt to ensure rx ring is cleaned */ | 2385 | /* Cause software interrupt to ensure rx ring is cleaned */ |
| 2395 | wr32(E1000_ICS, E1000_ICS_RXDMT0); | 2386 | if (adapter->msix_entries) { |
| 2387 | for (i = 0; i < adapter->num_rx_queues; i++) | ||
| 2388 | eics |= adapter->rx_ring[i].eims_value; | ||
| 2389 | wr32(E1000_EICS, eics); | ||
| 2390 | } else { | ||
| 2391 | wr32(E1000_ICS, E1000_ICS_RXDMT0); | ||
| 2392 | } | ||
| 2396 | 2393 | ||
| 2397 | /* Force detection of hung controller every watchdog period */ | 2394 | /* Force detection of hung controller every watchdog period */ |
| 2398 | tx_ring->detect_tx_hung = true; | 2395 | tx_ring->detect_tx_hung = true; |
