aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlexander Duyck <alexander.h.duyck@intel.com>2009-03-13 16:42:35 -0400
committerDavid S. Miller <davem@davemloft.net>2009-03-14 15:41:06 -0400
commitc8ea5ea9da338d6af015148105f07fc35eda8a92 (patch)
treed2f9b79a3ae37836a0e2f500af62bddebc1676d6
parent9eb2341d0df6e5d33508008879987bf5bb146804 (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>
-rw-r--r--drivers/net/igb/e1000_82575.c1
-rw-r--r--drivers/net/igb/e1000_hw.h1
-rw-r--r--drivers/net/igb/igb_ethtool.c9
-rw-r--r--drivers/net/igb/igb_main.c11
4 files changed, 22 insertions, 0 deletions
diff --git a/drivers/net/igb/e1000_82575.c b/drivers/net/igb/e1000_82575.c
index adfe2e18ede..efd9be21488 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 4db36026f82..68aac20c31c 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 34a8a0fadf2..fb09c8ad9f0 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 e464dc024ee..7124f59fb99 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 */