diff options
author | Alexander Duyck <alexander.h.duyck@intel.com> | 2009-03-13 16:42:35 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2009-03-14 15:41:06 -0400 |
commit | c8ea5ea9da338d6af015148105f07fc35eda8a92 (patch) | |
tree | d2f9b79a3ae37836a0e2f500af62bddebc1676d6 /drivers | |
parent | 9eb2341d0df6e5d33508008879987bf5bb146804 (diff) |
igb: add support for 82576 quad copper adapter
Add support for 82576 copper adapter and necessary code to restrict wol for
quad port adapter to first port.
Signed-off-by: Alexander Duyck <alexander.h.duyck@intel.com>
Acked-by: Jesse Brandeburg <jesse.brandeburg@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers')
-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 | 9 | ||||
-rw-r--r-- | drivers/net/igb/igb_main.c | 11 |
4 files changed, 22 insertions, 0 deletions
diff --git a/drivers/net/igb/e1000_82575.c b/drivers/net/igb/e1000_82575.c index adfe2e18ede8..efd9be214885 100644 --- a/drivers/net/igb/e1000_82575.c +++ b/drivers/net/igb/e1000_82575.c | |||
@@ -83,6 +83,7 @@ static s32 igb_get_invariants_82575(struct e1000_hw *hw) | |||
83 | case E1000_DEV_ID_82576_NS: | 83 | case E1000_DEV_ID_82576_NS: |
84 | case E1000_DEV_ID_82576_FIBER: | 84 | case E1000_DEV_ID_82576_FIBER: |
85 | case E1000_DEV_ID_82576_SERDES: | 85 | case E1000_DEV_ID_82576_SERDES: |
86 | case E1000_DEV_ID_82576_QUAD_COPPER: | ||
86 | mac->type = e1000_82576; | 87 | mac->type = e1000_82576; |
87 | break; | 88 | break; |
88 | default: | 89 | default: |
diff --git a/drivers/net/igb/e1000_hw.h b/drivers/net/igb/e1000_hw.h index 4db36026f82b..68aac20c31ca 100644 --- a/drivers/net/igb/e1000_hw.h +++ b/drivers/net/igb/e1000_hw.h | |||
@@ -40,6 +40,7 @@ struct e1000_hw; | |||
40 | #define E1000_DEV_ID_82576 0x10C9 | 40 | #define E1000_DEV_ID_82576 0x10C9 |
41 | #define E1000_DEV_ID_82576_FIBER 0x10E6 | 41 | #define E1000_DEV_ID_82576_FIBER 0x10E6 |
42 | #define E1000_DEV_ID_82576_SERDES 0x10E7 | 42 | #define E1000_DEV_ID_82576_SERDES 0x10E7 |
43 | #define E1000_DEV_ID_82576_QUAD_COPPER 0x10E8 | ||
43 | #define E1000_DEV_ID_82576_NS 0x150A | 44 | #define E1000_DEV_ID_82576_NS 0x150A |
44 | #define E1000_DEV_ID_82575EB_COPPER 0x10A7 | 45 | #define E1000_DEV_ID_82575EB_COPPER 0x10A7 |
45 | #define E1000_DEV_ID_82575EB_FIBER_SERDES 0x10A9 | 46 | #define E1000_DEV_ID_82575EB_FIBER_SERDES 0x10A9 |
diff --git a/drivers/net/igb/igb_ethtool.c b/drivers/net/igb/igb_ethtool.c index 34a8a0fadf2d..fb09c8ad9f0d 100644 --- a/drivers/net/igb/igb_ethtool.c +++ b/drivers/net/igb/igb_ethtool.c | |||
@@ -1779,6 +1779,15 @@ static int igb_wol_exclusion(struct igb_adapter *adapter, | |||
1779 | /* return success for non excluded adapter ports */ | 1779 | /* return success for non excluded adapter ports */ |
1780 | retval = 0; | 1780 | retval = 0; |
1781 | break; | 1781 | break; |
1782 | case E1000_DEV_ID_82576_QUAD_COPPER: | ||
1783 | /* quad port adapters only support WoL on port A */ | ||
1784 | if (!(adapter->flags & IGB_FLAG_QUAD_PORT_A)) { | ||
1785 | wol->supported = 0; | ||
1786 | break; | ||
1787 | } | ||
1788 | /* return success for non excluded adapter ports */ | ||
1789 | retval = 0; | ||
1790 | break; | ||
1782 | default: | 1791 | default: |
1783 | /* dual port cards only support WoL on port A from now on | 1792 | /* dual port cards only support WoL on port A from now on |
1784 | * unless it was enabled in the eeprom for port B | 1793 | * 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 e464dc024ee6..7124f59fb99f 100644 --- a/drivers/net/igb/igb_main.c +++ b/drivers/net/igb/igb_main.c | |||
@@ -65,6 +65,7 @@ static struct pci_device_id igb_pci_tbl[] = { | |||
65 | { PCI_VDEVICE(INTEL, E1000_DEV_ID_82576_NS), board_82575 }, | 65 | { PCI_VDEVICE(INTEL, E1000_DEV_ID_82576_NS), board_82575 }, |
66 | { PCI_VDEVICE(INTEL, E1000_DEV_ID_82576_FIBER), board_82575 }, | 66 | { PCI_VDEVICE(INTEL, E1000_DEV_ID_82576_FIBER), board_82575 }, |
67 | { PCI_VDEVICE(INTEL, E1000_DEV_ID_82576_SERDES), board_82575 }, | 67 | { PCI_VDEVICE(INTEL, E1000_DEV_ID_82576_SERDES), board_82575 }, |
68 | { PCI_VDEVICE(INTEL, E1000_DEV_ID_82576_QUAD_COPPER), board_82575 }, | ||
68 | { PCI_VDEVICE(INTEL, E1000_DEV_ID_82575EB_COPPER), board_82575 }, | 69 | { PCI_VDEVICE(INTEL, E1000_DEV_ID_82575EB_COPPER), board_82575 }, |
69 | { PCI_VDEVICE(INTEL, E1000_DEV_ID_82575EB_FIBER_SERDES), board_82575 }, | 70 | { PCI_VDEVICE(INTEL, E1000_DEV_ID_82575EB_FIBER_SERDES), board_82575 }, |
70 | { PCI_VDEVICE(INTEL, E1000_DEV_ID_82575GB_QUAD_COPPER), board_82575 }, | 71 | { PCI_VDEVICE(INTEL, E1000_DEV_ID_82575GB_QUAD_COPPER), board_82575 }, |
@@ -1375,6 +1376,16 @@ static int __devinit igb_probe(struct pci_dev *pdev, | |||
1375 | if (rd32(E1000_STATUS) & E1000_STATUS_FUNC_1) | 1376 | if (rd32(E1000_STATUS) & E1000_STATUS_FUNC_1) |
1376 | adapter->eeprom_wol = 0; | 1377 | adapter->eeprom_wol = 0; |
1377 | break; | 1378 | break; |
1379 | case E1000_DEV_ID_82576_QUAD_COPPER: | ||
1380 | /* if quad port adapter, disable WoL on all but port A */ | ||
1381 | if (global_quad_port_a != 0) | ||
1382 | adapter->eeprom_wol = 0; | ||
1383 | else | ||
1384 | adapter->flags |= IGB_FLAG_QUAD_PORT_A; | ||
1385 | /* Reset for multiple quad port adapters */ | ||
1386 | if (++global_quad_port_a == 4) | ||
1387 | global_quad_port_a = 0; | ||
1388 | break; | ||
1378 | } | 1389 | } |
1379 | 1390 | ||
1380 | /* initialize the wol settings based on the eeprom settings */ | 1391 | /* initialize the wol settings based on the eeprom settings */ |