diff options
author | Alexander Duyck <alexander.h.duyck@intel.com> | 2010-03-22 10:08:06 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2010-03-22 21:30:05 -0400 |
commit | d2ba2ed8fe3aa796a671a6922119d7171bb49515 (patch) | |
tree | 8265da058e55fb264bdd94b1e41ed6ac9d8cbf03 /drivers/net/igb/igb_main.c | |
parent | 52a1dd4d15cc28da5d3e9bfb1526c314d65fdff8 (diff) |
igb: add support for Intel I350 Gigabit Network Connection
This patch adds support for the the I350 Gigabit network connection which
is the follow-on part to the 82580.
Signed-off-by: Alexander Duyck <alexander.h.duyck@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
CC: James Hearn <james.r.hearn@intel.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/igb/igb_main.c')
-rw-r--r-- | drivers/net/igb/igb_main.c | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/drivers/net/igb/igb_main.c b/drivers/net/igb/igb_main.c index 3664915e3f7d..2501c5d580b8 100644 --- a/drivers/net/igb/igb_main.c +++ b/drivers/net/igb/igb_main.c | |||
@@ -61,6 +61,10 @@ static const struct e1000_info *igb_info_tbl[] = { | |||
61 | }; | 61 | }; |
62 | 62 | ||
63 | static DEFINE_PCI_DEVICE_TABLE(igb_pci_tbl) = { | 63 | static DEFINE_PCI_DEVICE_TABLE(igb_pci_tbl) = { |
64 | { PCI_VDEVICE(INTEL, E1000_DEV_ID_I350_COPPER), board_82575 }, | ||
65 | { PCI_VDEVICE(INTEL, E1000_DEV_ID_I350_FIBER), board_82575 }, | ||
66 | { PCI_VDEVICE(INTEL, E1000_DEV_ID_I350_SERDES), board_82575 }, | ||
67 | { PCI_VDEVICE(INTEL, E1000_DEV_ID_I350_SGMII), board_82575 }, | ||
64 | { PCI_VDEVICE(INTEL, E1000_DEV_ID_82580_COPPER), board_82575 }, | 68 | { PCI_VDEVICE(INTEL, E1000_DEV_ID_82580_COPPER), board_82575 }, |
65 | { PCI_VDEVICE(INTEL, E1000_DEV_ID_82580_FIBER), board_82575 }, | 69 | { PCI_VDEVICE(INTEL, E1000_DEV_ID_82580_FIBER), board_82575 }, |
66 | { PCI_VDEVICE(INTEL, E1000_DEV_ID_82580_SERDES), board_82575 }, | 70 | { PCI_VDEVICE(INTEL, E1000_DEV_ID_82580_SERDES), board_82575 }, |
@@ -327,6 +331,7 @@ static void igb_cache_ring_register(struct igb_adapter *adapter) | |||
327 | } | 331 | } |
328 | case e1000_82575: | 332 | case e1000_82575: |
329 | case e1000_82580: | 333 | case e1000_82580: |
334 | case e1000_i350: | ||
330 | default: | 335 | default: |
331 | for (; i < adapter->num_rx_queues; i++) | 336 | for (; i < adapter->num_rx_queues; i++) |
332 | adapter->rx_ring[i]->reg_idx = rbase_offset + i; | 337 | adapter->rx_ring[i]->reg_idx = rbase_offset + i; |
@@ -470,6 +475,7 @@ static void igb_assign_vector(struct igb_q_vector *q_vector, int msix_vector) | |||
470 | q_vector->eims_value = 1 << msix_vector; | 475 | q_vector->eims_value = 1 << msix_vector; |
471 | break; | 476 | break; |
472 | case e1000_82580: | 477 | case e1000_82580: |
478 | case e1000_i350: | ||
473 | /* 82580 uses the same table-based approach as 82576 but has fewer | 479 | /* 82580 uses the same table-based approach as 82576 but has fewer |
474 | entries as a result we carry over for queues greater than 4. */ | 480 | entries as a result we carry over for queues greater than 4. */ |
475 | if (rx_queue > IGB_N0_QUEUE) { | 481 | if (rx_queue > IGB_N0_QUEUE) { |
@@ -550,6 +556,7 @@ static void igb_configure_msix(struct igb_adapter *adapter) | |||
550 | 556 | ||
551 | case e1000_82576: | 557 | case e1000_82576: |
552 | case e1000_82580: | 558 | case e1000_82580: |
559 | case e1000_i350: | ||
553 | /* Turn on MSI-X capability first, or our settings | 560 | /* Turn on MSI-X capability first, or our settings |
554 | * won't stick. And it will take days to debug. */ | 561 | * won't stick. And it will take days to debug. */ |
555 | wr32(E1000_GPIE, E1000_GPIE_MSIX_MODE | | 562 | wr32(E1000_GPIE, E1000_GPIE_MSIX_MODE | |
@@ -1256,6 +1263,7 @@ void igb_reset(struct igb_adapter *adapter) | |||
1256 | * To take effect CTRL.RST is required. | 1263 | * To take effect CTRL.RST is required. |
1257 | */ | 1264 | */ |
1258 | switch (mac->type) { | 1265 | switch (mac->type) { |
1266 | case e1000_i350: | ||
1259 | case e1000_82580: | 1267 | case e1000_82580: |
1260 | pba = rd32(E1000_RXPBS); | 1268 | pba = rd32(E1000_RXPBS); |
1261 | pba = igb_rxpbs_adjust_82580(pba); | 1269 | pba = igb_rxpbs_adjust_82580(pba); |
@@ -1828,6 +1836,7 @@ static void igb_init_hw_timer(struct igb_adapter *adapter) | |||
1828 | struct e1000_hw *hw = &adapter->hw; | 1836 | struct e1000_hw *hw = &adapter->hw; |
1829 | 1837 | ||
1830 | switch (hw->mac.type) { | 1838 | switch (hw->mac.type) { |
1839 | case e1000_i350: | ||
1831 | case e1000_82580: | 1840 | case e1000_82580: |
1832 | memset(&adapter->cycles, 0, sizeof(adapter->cycles)); | 1841 | memset(&adapter->cycles, 0, sizeof(adapter->cycles)); |
1833 | adapter->cycles.read = igb_read_clock; | 1842 | adapter->cycles.read = igb_read_clock; |
@@ -2341,6 +2350,7 @@ static void igb_setup_mrqc(struct igb_adapter *adapter) | |||
2341 | if (adapter->vfs_allocated_count) { | 2350 | if (adapter->vfs_allocated_count) { |
2342 | /* 82575 and 82576 supports 2 RSS queues for VMDq */ | 2351 | /* 82575 and 82576 supports 2 RSS queues for VMDq */ |
2343 | switch (hw->mac.type) { | 2352 | switch (hw->mac.type) { |
2353 | case e1000_i350: | ||
2344 | case e1000_82580: | 2354 | case e1000_82580: |
2345 | num_rx_queues = 1; | 2355 | num_rx_queues = 1; |
2346 | shift = 0; | 2356 | shift = 0; |
@@ -6152,6 +6162,8 @@ static void igb_vmm_control(struct igb_adapter *adapter) | |||
6152 | reg = rd32(E1000_RPLOLR); | 6162 | reg = rd32(E1000_RPLOLR); |
6153 | reg |= E1000_RPLOLR_STRVLAN; | 6163 | reg |= E1000_RPLOLR_STRVLAN; |
6154 | wr32(E1000_RPLOLR, reg); | 6164 | wr32(E1000_RPLOLR, reg); |
6165 | case e1000_i350: | ||
6166 | /* none of the above registers are supported by i350 */ | ||
6155 | break; | 6167 | break; |
6156 | } | 6168 | } |
6157 | 6169 | ||