diff options
| author | Jesse Brandeburg <jesse.brandeburg@intel.com> | 2008-10-31 03:46:40 -0400 |
|---|---|---|
| committer | Jeff Garzik <jgarzik@redhat.com> | 2008-11-02 08:00:32 -0500 |
| commit | 0befdb3e0a26a8949063915274e1bec8873c526b (patch) | |
| tree | a0b0b94919131a3e1952136f3c93b0c52a211fea | |
| parent | e053b628d367cd7b39ae2c4bb0124edc2e058a41 (diff) | |
ixgbe: add device support for 82598AT (copper 10GbE) adapters
Intel is currently shipping support for adapters with a phy
that does 10GBase-T (copper), which is 10 Gigabit ethernet
over standard Category 6 cabling.
Signed-off-by: Jesse Brandeburg <jesse.brandeburg@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
Signed-off-by: Jeff Garzik <jgarzik@redhat.com>
| -rw-r--r-- | drivers/net/ixgbe/ixgbe.h | 1 | ||||
| -rw-r--r-- | drivers/net/ixgbe/ixgbe_82598.c | 12 | ||||
| -rw-r--r-- | drivers/net/ixgbe/ixgbe_ethtool.c | 27 | ||||
| -rw-r--r-- | drivers/net/ixgbe/ixgbe_main.c | 33 | ||||
| -rw-r--r-- | drivers/net/ixgbe/ixgbe_phy.c | 68 | ||||
| -rw-r--r-- | drivers/net/ixgbe/ixgbe_phy.h | 7 | ||||
| -rw-r--r-- | drivers/net/ixgbe/ixgbe_type.h | 6 |
7 files changed, 154 insertions, 0 deletions
diff --git a/drivers/net/ixgbe/ixgbe.h b/drivers/net/ixgbe/ixgbe.h index e116d340dcc6..132854f646ba 100644 --- a/drivers/net/ixgbe/ixgbe.h +++ b/drivers/net/ixgbe/ixgbe.h | |||
| @@ -267,6 +267,7 @@ struct ixgbe_adapter { | |||
| 267 | #define IXGBE_FLAG_RSS_CAPABLE (u32)(1 << 17) | 267 | #define IXGBE_FLAG_RSS_CAPABLE (u32)(1 << 17) |
| 268 | #define IXGBE_FLAG_VMDQ_CAPABLE (u32)(1 << 18) | 268 | #define IXGBE_FLAG_VMDQ_CAPABLE (u32)(1 << 18) |
| 269 | #define IXGBE_FLAG_VMDQ_ENABLED (u32)(1 << 19) | 269 | #define IXGBE_FLAG_VMDQ_ENABLED (u32)(1 << 19) |
| 270 | #define IXGBE_FLAG_FAN_FAIL_CAPABLE (u32)(1 << 20) | ||
| 270 | #define IXGBE_FLAG_NEED_LINK_UPDATE (u32)(1 << 22) | 271 | #define IXGBE_FLAG_NEED_LINK_UPDATE (u32)(1 << 22) |
| 271 | #define IXGBE_FLAG_IN_WATCHDOG_TASK (u32)(1 << 23) | 272 | #define IXGBE_FLAG_IN_WATCHDOG_TASK (u32)(1 << 23) |
| 272 | 273 | ||
diff --git a/drivers/net/ixgbe/ixgbe_82598.c b/drivers/net/ixgbe/ixgbe_82598.c index 7cddcfba809e..c2cdb042c481 100644 --- a/drivers/net/ixgbe/ixgbe_82598.c +++ b/drivers/net/ixgbe/ixgbe_82598.c | |||
| @@ -59,6 +59,11 @@ static s32 ixgbe_get_invariants_82598(struct ixgbe_hw *hw) | |||
| 59 | 59 | ||
| 60 | /* PHY Init */ | 60 | /* PHY Init */ |
| 61 | switch (phy->type) { | 61 | switch (phy->type) { |
| 62 | case ixgbe_phy_tn: | ||
| 63 | phy->ops.check_link = &ixgbe_check_phy_link_tnx; | ||
| 64 | phy->ops.get_firmware_version = | ||
| 65 | &ixgbe_get_phy_firmware_version_tnx; | ||
| 66 | break; | ||
| 62 | default: | 67 | default: |
| 63 | break; | 68 | break; |
| 64 | } | 69 | } |
| @@ -189,6 +194,9 @@ static enum ixgbe_media_type ixgbe_get_media_type_82598(struct ixgbe_hw *hw) | |||
| 189 | case IXGBE_DEV_ID_82598EB_XF_LR: | 194 | case IXGBE_DEV_ID_82598EB_XF_LR: |
| 190 | media_type = ixgbe_media_type_fiber; | 195 | media_type = ixgbe_media_type_fiber; |
| 191 | break; | 196 | break; |
| 197 | case IXGBE_DEV_ID_82598AT: | ||
| 198 | media_type = ixgbe_media_type_copper; | ||
| 199 | break; | ||
| 192 | default: | 200 | default: |
| 193 | media_type = ixgbe_media_type_unknown; | 201 | media_type = ixgbe_media_type_unknown; |
| 194 | break; | 202 | break; |
| @@ -872,6 +880,10 @@ s32 ixgbe_get_supported_physical_layer_82598(struct ixgbe_hw *hw) | |||
| 872 | case IXGBE_DEV_ID_82598EB_XF_LR: | 880 | case IXGBE_DEV_ID_82598EB_XF_LR: |
| 873 | physical_layer = IXGBE_PHYSICAL_LAYER_10GBASE_LR; | 881 | physical_layer = IXGBE_PHYSICAL_LAYER_10GBASE_LR; |
| 874 | break; | 882 | break; |
| 883 | case IXGBE_DEV_ID_82598AT: | ||
| 884 | physical_layer = (IXGBE_PHYSICAL_LAYER_10GBASE_T | | ||
| 885 | IXGBE_PHYSICAL_LAYER_1000BASE_T); | ||
| 886 | break; | ||
| 875 | 887 | ||
| 876 | default: | 888 | default: |
| 877 | physical_layer = IXGBE_PHYSICAL_LAYER_UNKNOWN; | 889 | physical_layer = IXGBE_PHYSICAL_LAYER_UNKNOWN; |
diff --git a/drivers/net/ixgbe/ixgbe_ethtool.c b/drivers/net/ixgbe/ixgbe_ethtool.c index 81a9c4b86726..fee56a383819 100644 --- a/drivers/net/ixgbe/ixgbe_ethtool.c +++ b/drivers/net/ixgbe/ixgbe_ethtool.c | |||
| @@ -149,6 +149,8 @@ static int ixgbe_set_settings(struct net_device *netdev, | |||
| 149 | { | 149 | { |
| 150 | struct ixgbe_adapter *adapter = netdev_priv(netdev); | 150 | struct ixgbe_adapter *adapter = netdev_priv(netdev); |
| 151 | struct ixgbe_hw *hw = &adapter->hw; | 151 | struct ixgbe_hw *hw = &adapter->hw; |
| 152 | u32 advertised, old; | ||
| 153 | s32 err; | ||
| 152 | 154 | ||
| 153 | switch (hw->phy.media_type) { | 155 | switch (hw->phy.media_type) { |
| 154 | case ixgbe_media_type_fiber: | 156 | case ixgbe_media_type_fiber: |
| @@ -157,6 +159,31 @@ static int ixgbe_set_settings(struct net_device *netdev, | |||
| 157 | return -EINVAL; | 159 | return -EINVAL; |
| 158 | /* in this case we currently only support 10Gb/FULL */ | 160 | /* in this case we currently only support 10Gb/FULL */ |
| 159 | break; | 161 | break; |
| 162 | case ixgbe_media_type_copper: | ||
| 163 | /* 10000/copper and 1000/copper must autoneg | ||
| 164 | * this function does not support any duplex forcing, but can | ||
| 165 | * limit the advertising of the adapter to only 10000 or 1000 */ | ||
| 166 | if (ecmd->autoneg == AUTONEG_DISABLE) | ||
| 167 | return -EINVAL; | ||
| 168 | |||
| 169 | old = hw->phy.autoneg_advertised; | ||
| 170 | advertised = 0; | ||
| 171 | if (ecmd->advertising & ADVERTISED_10000baseT_Full) | ||
| 172 | advertised |= IXGBE_LINK_SPEED_10GB_FULL; | ||
| 173 | |||
| 174 | if (ecmd->advertising & ADVERTISED_1000baseT_Full) | ||
| 175 | advertised |= IXGBE_LINK_SPEED_1GB_FULL; | ||
| 176 | |||
| 177 | if (old == advertised) | ||
| 178 | break; | ||
| 179 | /* this sets the link speed and restarts auto-neg */ | ||
| 180 | err = hw->mac.ops.setup_link_speed(hw, advertised, true, true); | ||
| 181 | if (err) { | ||
| 182 | DPRINTK(PROBE, INFO, | ||
| 183 | "setup link failed with code %d\n", err); | ||
| 184 | hw->mac.ops.setup_link_speed(hw, old, true, true); | ||
| 185 | } | ||
| 186 | break; | ||
| 160 | default: | 187 | default: |
| 161 | break; | 188 | break; |
| 162 | } | 189 | } |
diff --git a/drivers/net/ixgbe/ixgbe_main.c b/drivers/net/ixgbe/ixgbe_main.c index 028bfb20412c..2a12e97d5efe 100644 --- a/drivers/net/ixgbe/ixgbe_main.c +++ b/drivers/net/ixgbe/ixgbe_main.c | |||
| @@ -68,6 +68,8 @@ static struct pci_device_id ixgbe_pci_tbl[] = { | |||
| 68 | board_82598 }, | 68 | board_82598 }, |
| 69 | {PCI_VDEVICE(INTEL, IXGBE_DEV_ID_82598AF_SINGLE_PORT), | 69 | {PCI_VDEVICE(INTEL, IXGBE_DEV_ID_82598AF_SINGLE_PORT), |
| 70 | board_82598 }, | 70 | board_82598 }, |
| 71 | {PCI_VDEVICE(INTEL, IXGBE_DEV_ID_82598AT), | ||
| 72 | board_82598 }, | ||
| 71 | {PCI_VDEVICE(INTEL, IXGBE_DEV_ID_82598EB_CX4), | 73 | {PCI_VDEVICE(INTEL, IXGBE_DEV_ID_82598EB_CX4), |
| 72 | board_82598 }, | 74 | board_82598 }, |
| 73 | {PCI_VDEVICE(INTEL, IXGBE_DEV_ID_82598_CX4_DUAL_PORT), | 75 | {PCI_VDEVICE(INTEL, IXGBE_DEV_ID_82598_CX4_DUAL_PORT), |
| @@ -904,6 +906,17 @@ static void ixgbe_set_itr_msix(struct ixgbe_q_vector *q_vector) | |||
| 904 | return; | 906 | return; |
| 905 | } | 907 | } |
| 906 | 908 | ||
| 909 | static void ixgbe_check_fan_failure(struct ixgbe_adapter *adapter, u32 eicr) | ||
| 910 | { | ||
| 911 | struct ixgbe_hw *hw = &adapter->hw; | ||
| 912 | |||
| 913 | if ((adapter->flags & IXGBE_FLAG_FAN_FAIL_CAPABLE) && | ||
| 914 | (eicr & IXGBE_EICR_GPI_SDP1)) { | ||
| 915 | DPRINTK(PROBE, CRIT, "Fan has stopped, replace the adapter\n"); | ||
| 916 | /* write to clear the interrupt */ | ||
| 917 | IXGBE_WRITE_REG(hw, IXGBE_EICR, IXGBE_EICR_GPI_SDP1); | ||
| 918 | } | ||
| 919 | } | ||
| 907 | 920 | ||
| 908 | static void ixgbe_check_lsc(struct ixgbe_adapter *adapter) | 921 | static void ixgbe_check_lsc(struct ixgbe_adapter *adapter) |
| 909 | { | 922 | { |
| @@ -928,6 +941,8 @@ static irqreturn_t ixgbe_msix_lsc(int irq, void *data) | |||
| 928 | if (eicr & IXGBE_EICR_LSC) | 941 | if (eicr & IXGBE_EICR_LSC) |
| 929 | ixgbe_check_lsc(adapter); | 942 | ixgbe_check_lsc(adapter); |
| 930 | 943 | ||
| 944 | ixgbe_check_fan_failure(adapter, eicr); | ||
| 945 | |||
| 931 | if (!test_bit(__IXGBE_DOWN, &adapter->state)) | 946 | if (!test_bit(__IXGBE_DOWN, &adapter->state)) |
| 932 | IXGBE_WRITE_REG(hw, IXGBE_EIMS, IXGBE_EIMS_OTHER); | 947 | IXGBE_WRITE_REG(hw, IXGBE_EIMS, IXGBE_EIMS_OTHER); |
| 933 | 948 | ||
| @@ -1316,6 +1331,8 @@ static irqreturn_t ixgbe_intr(int irq, void *data) | |||
| 1316 | if (eicr & IXGBE_EICR_LSC) | 1331 | if (eicr & IXGBE_EICR_LSC) |
| 1317 | ixgbe_check_lsc(adapter); | 1332 | ixgbe_check_lsc(adapter); |
| 1318 | 1333 | ||
| 1334 | ixgbe_check_fan_failure(adapter, eicr); | ||
| 1335 | |||
| 1319 | if (netif_rx_schedule_prep(netdev, &adapter->q_vector[0].napi)) { | 1336 | if (netif_rx_schedule_prep(netdev, &adapter->q_vector[0].napi)) { |
| 1320 | adapter->tx_ring[0].total_packets = 0; | 1337 | adapter->tx_ring[0].total_packets = 0; |
| 1321 | adapter->tx_ring[0].total_bytes = 0; | 1338 | adapter->tx_ring[0].total_bytes = 0; |
| @@ -1418,6 +1435,8 @@ static inline void ixgbe_irq_enable(struct ixgbe_adapter *adapter) | |||
| 1418 | { | 1435 | { |
| 1419 | u32 mask; | 1436 | u32 mask; |
| 1420 | mask = IXGBE_EIMS_ENABLE_MASK; | 1437 | mask = IXGBE_EIMS_ENABLE_MASK; |
| 1438 | if (adapter->flags & IXGBE_FLAG_FAN_FAIL_CAPABLE) | ||
| 1439 | mask |= IXGBE_EIMS_GPI_SDP1; | ||
| 1421 | IXGBE_WRITE_REG(&adapter->hw, IXGBE_EIMS, mask); | 1440 | IXGBE_WRITE_REG(&adapter->hw, IXGBE_EIMS, mask); |
| 1422 | IXGBE_WRITE_FLUSH(&adapter->hw); | 1441 | IXGBE_WRITE_FLUSH(&adapter->hw); |
| 1423 | } | 1442 | } |
| @@ -1927,6 +1946,13 @@ static int ixgbe_up_complete(struct ixgbe_adapter *adapter) | |||
| 1927 | IXGBE_WRITE_REG(hw, IXGBE_EIAM, IXGBE_EICS_RTX_QUEUE); | 1946 | IXGBE_WRITE_REG(hw, IXGBE_EIAM, IXGBE_EICS_RTX_QUEUE); |
| 1928 | } | 1947 | } |
| 1929 | 1948 | ||
| 1949 | /* Enable fan failure interrupt if media type is copper */ | ||
| 1950 | if (adapter->flags & IXGBE_FLAG_FAN_FAIL_CAPABLE) { | ||
| 1951 | gpie = IXGBE_READ_REG(hw, IXGBE_GPIE); | ||
| 1952 | gpie |= IXGBE_SDP1_GPIEN; | ||
| 1953 | IXGBE_WRITE_REG(hw, IXGBE_GPIE, gpie); | ||
| 1954 | } | ||
| 1955 | |||
| 1930 | mhadd = IXGBE_READ_REG(hw, IXGBE_MHADD); | 1956 | mhadd = IXGBE_READ_REG(hw, IXGBE_MHADD); |
| 1931 | if (max_frame != (mhadd >> IXGBE_MHADD_MFS_SHIFT)) { | 1957 | if (max_frame != (mhadd >> IXGBE_MHADD_MFS_SHIFT)) { |
| 1932 | mhadd &= ~IXGBE_MHADD_MFS_MASK; | 1958 | mhadd &= ~IXGBE_MHADD_MFS_MASK; |
| @@ -2564,6 +2590,9 @@ static int __devinit ixgbe_sw_init(struct ixgbe_adapter *adapter) | |||
| 2564 | rss = min(IXGBE_MAX_RSS_INDICES, (int)num_online_cpus()); | 2590 | rss = min(IXGBE_MAX_RSS_INDICES, (int)num_online_cpus()); |
| 2565 | adapter->ring_feature[RING_F_RSS].indices = rss; | 2591 | adapter->ring_feature[RING_F_RSS].indices = rss; |
| 2566 | adapter->flags |= IXGBE_FLAG_RSS_ENABLED; | 2592 | adapter->flags |= IXGBE_FLAG_RSS_ENABLED; |
| 2593 | if (hw->mac.ops.get_media_type && | ||
| 2594 | (hw->mac.ops.get_media_type(hw) == ixgbe_media_type_copper)) | ||
| 2595 | adapter->flags |= IXGBE_FLAG_FAN_FAIL_CAPABLE; | ||
| 2567 | 2596 | ||
| 2568 | /* default flow control settings */ | 2597 | /* default flow control settings */ |
| 2569 | hw->fc.original_type = ixgbe_fc_none; | 2598 | hw->fc.original_type = ixgbe_fc_none; |
| @@ -3691,6 +3720,10 @@ static int ixgbe_link_config(struct ixgbe_hw *hw) | |||
| 3691 | /* must always autoneg for both 1G and 10G link */ | 3720 | /* must always autoneg for both 1G and 10G link */ |
| 3692 | hw->mac.autoneg = true; | 3721 | hw->mac.autoneg = true; |
| 3693 | 3722 | ||
| 3723 | if ((hw->mac.type == ixgbe_mac_82598EB) && | ||
| 3724 | (hw->phy.media_type == ixgbe_media_type_copper)) | ||
| 3725 | autoneg = IXGBE_LINK_SPEED_82598_AUTONEG; | ||
| 3726 | |||
| 3694 | return hw->mac.ops.setup_link_speed(hw, autoneg, true, true); | 3727 | return hw->mac.ops.setup_link_speed(hw, autoneg, true, true); |
| 3695 | } | 3728 | } |
| 3696 | 3729 | ||
diff --git a/drivers/net/ixgbe/ixgbe_phy.c b/drivers/net/ixgbe/ixgbe_phy.c index 764035a8c9a1..981e6d849592 100644 --- a/drivers/net/ixgbe/ixgbe_phy.c +++ b/drivers/net/ixgbe/ixgbe_phy.c | |||
| @@ -121,6 +121,9 @@ static enum ixgbe_phy_type ixgbe_get_phy_type_from_id(u32 phy_id) | |||
| 121 | enum ixgbe_phy_type phy_type; | 121 | enum ixgbe_phy_type phy_type; |
| 122 | 122 | ||
| 123 | switch (phy_id) { | 123 | switch (phy_id) { |
| 124 | case TN1010_PHY_ID: | ||
| 125 | phy_type = ixgbe_phy_tn; | ||
| 126 | break; | ||
| 124 | case QT2022_PHY_ID: | 127 | case QT2022_PHY_ID: |
| 125 | phy_type = ixgbe_phy_qt; | 128 | phy_type = ixgbe_phy_qt; |
| 126 | break; | 129 | break; |
| @@ -426,3 +429,68 @@ s32 ixgbe_setup_phy_link_speed_generic(struct ixgbe_hw *hw, | |||
| 426 | return 0; | 429 | return 0; |
| 427 | } | 430 | } |
| 428 | 431 | ||
| 432 | /** | ||
| 433 | * ixgbe_check_phy_link_tnx - Determine link and speed status | ||
| 434 | * @hw: pointer to hardware structure | ||
| 435 | * | ||
| 436 | * Reads the VS1 register to determine if link is up and the current speed for | ||
| 437 | * the PHY. | ||
| 438 | **/ | ||
| 439 | s32 ixgbe_check_phy_link_tnx(struct ixgbe_hw *hw, ixgbe_link_speed *speed, | ||
| 440 | bool *link_up) | ||
| 441 | { | ||
| 442 | s32 status = 0; | ||
| 443 | u32 time_out; | ||
| 444 | u32 max_time_out = 10; | ||
| 445 | u16 phy_link = 0; | ||
| 446 | u16 phy_speed = 0; | ||
| 447 | u16 phy_data = 0; | ||
| 448 | |||
| 449 | /* Initialize speed and link to default case */ | ||
| 450 | *link_up = false; | ||
| 451 | *speed = IXGBE_LINK_SPEED_10GB_FULL; | ||
| 452 | |||
| 453 | /* | ||
| 454 | * Check current speed and link status of the PHY register. | ||
| 455 | * This is a vendor specific register and may have to | ||
| 456 | * be changed for other copper PHYs. | ||
| 457 | */ | ||
| 458 | for (time_out = 0; time_out < max_time_out; time_out++) { | ||
| 459 | udelay(10); | ||
| 460 | status = hw->phy.ops.read_reg(hw, | ||
| 461 | IXGBE_MDIO_VENDOR_SPECIFIC_1_STATUS, | ||
| 462 | IXGBE_MDIO_VENDOR_SPECIFIC_1_DEV_TYPE, | ||
| 463 | &phy_data); | ||
| 464 | phy_link = phy_data & | ||
| 465 | IXGBE_MDIO_VENDOR_SPECIFIC_1_LINK_STATUS; | ||
| 466 | phy_speed = phy_data & | ||
| 467 | IXGBE_MDIO_VENDOR_SPECIFIC_1_SPEED_STATUS; | ||
| 468 | if (phy_link == IXGBE_MDIO_VENDOR_SPECIFIC_1_LINK_STATUS) { | ||
| 469 | *link_up = true; | ||
| 470 | if (phy_speed == | ||
| 471 | IXGBE_MDIO_VENDOR_SPECIFIC_1_SPEED_STATUS) | ||
| 472 | *speed = IXGBE_LINK_SPEED_1GB_FULL; | ||
| 473 | break; | ||
| 474 | } | ||
| 475 | } | ||
| 476 | |||
| 477 | return status; | ||
| 478 | } | ||
| 479 | |||
| 480 | /** | ||
| 481 | * ixgbe_get_phy_firmware_version_tnx - Gets the PHY Firmware Version | ||
| 482 | * @hw: pointer to hardware structure | ||
| 483 | * @firmware_version: pointer to the PHY Firmware Version | ||
| 484 | **/ | ||
| 485 | s32 ixgbe_get_phy_firmware_version_tnx(struct ixgbe_hw *hw, | ||
| 486 | u16 *firmware_version) | ||
| 487 | { | ||
| 488 | s32 status = 0; | ||
| 489 | |||
| 490 | status = hw->phy.ops.read_reg(hw, TNX_FW_REV, | ||
| 491 | IXGBE_MDIO_VENDOR_SPECIFIC_1_DEV_TYPE, | ||
| 492 | firmware_version); | ||
| 493 | |||
| 494 | return status; | ||
| 495 | } | ||
| 496 | |||
diff --git a/drivers/net/ixgbe/ixgbe_phy.h b/drivers/net/ixgbe/ixgbe_phy.h index 9bfe3f2b1d8f..5cc063d02770 100644 --- a/drivers/net/ixgbe/ixgbe_phy.h +++ b/drivers/net/ixgbe/ixgbe_phy.h | |||
| @@ -77,4 +77,11 @@ s32 ixgbe_setup_phy_link_speed_generic(struct ixgbe_hw *hw, | |||
| 77 | bool autoneg, | 77 | bool autoneg, |
| 78 | bool autoneg_wait_to_complete); | 78 | bool autoneg_wait_to_complete); |
| 79 | 79 | ||
| 80 | /* PHY specific */ | ||
| 81 | s32 ixgbe_check_phy_link_tnx(struct ixgbe_hw *hw, | ||
| 82 | ixgbe_link_speed *speed, | ||
| 83 | bool *link_up); | ||
| 84 | s32 ixgbe_get_phy_firmware_version_tnx(struct ixgbe_hw *hw, | ||
| 85 | u16 *firmware_version); | ||
| 86 | |||
| 80 | #endif /* _IXGBE_PHY_H_ */ | 87 | #endif /* _IXGBE_PHY_H_ */ |
diff --git a/drivers/net/ixgbe/ixgbe_type.h b/drivers/net/ixgbe/ixgbe_type.h index c6f8fa1c4e59..51df39dae816 100644 --- a/drivers/net/ixgbe/ixgbe_type.h +++ b/drivers/net/ixgbe/ixgbe_type.h | |||
| @@ -36,6 +36,7 @@ | |||
| 36 | /* Device IDs */ | 36 | /* Device IDs */ |
| 37 | #define IXGBE_DEV_ID_82598AF_DUAL_PORT 0x10C6 | 37 | #define IXGBE_DEV_ID_82598AF_DUAL_PORT 0x10C6 |
| 38 | #define IXGBE_DEV_ID_82598AF_SINGLE_PORT 0x10C7 | 38 | #define IXGBE_DEV_ID_82598AF_SINGLE_PORT 0x10C7 |
| 39 | #define IXGBE_DEV_ID_82598AT 0x10C8 | ||
| 39 | #define IXGBE_DEV_ID_82598EB_CX4 0x10DD | 40 | #define IXGBE_DEV_ID_82598EB_CX4 0x10DD |
| 40 | #define IXGBE_DEV_ID_82598_CX4_DUAL_PORT 0x10EC | 41 | #define IXGBE_DEV_ID_82598_CX4_DUAL_PORT 0x10EC |
| 41 | #define IXGBE_DEV_ID_82598EB_XF_LR 0x10F4 | 42 | #define IXGBE_DEV_ID_82598EB_XF_LR 0x10F4 |
| @@ -488,6 +489,8 @@ | |||
| 488 | #define IXGBE_MAX_PHY_ADDR 32 | 489 | #define IXGBE_MAX_PHY_ADDR 32 |
| 489 | 490 | ||
| 490 | /* PHY IDs*/ | 491 | /* PHY IDs*/ |
| 492 | #define TN1010_PHY_ID 0x00A19410 | ||
| 493 | #define TNX_FW_REV 0xB | ||
| 491 | #define QT2022_PHY_ID 0x0043A400 | 494 | #define QT2022_PHY_ID 0x0043A400 |
| 492 | 495 | ||
| 493 | /* PHY Types */ | 496 | /* PHY Types */ |
| @@ -1202,6 +1205,7 @@ enum ixgbe_mac_type { | |||
| 1202 | 1205 | ||
| 1203 | enum ixgbe_phy_type { | 1206 | enum ixgbe_phy_type { |
| 1204 | ixgbe_phy_unknown = 0, | 1207 | ixgbe_phy_unknown = 0, |
| 1208 | ixgbe_phy_tn, | ||
| 1205 | ixgbe_phy_qt, | 1209 | ixgbe_phy_qt, |
| 1206 | ixgbe_phy_xaui, | 1210 | ixgbe_phy_xaui, |
| 1207 | ixgbe_phy_tw_tyco, | 1211 | ixgbe_phy_tw_tyco, |
| @@ -1396,6 +1400,8 @@ struct ixgbe_phy_operations { | |||
| 1396 | s32 (*setup_link)(struct ixgbe_hw *); | 1400 | s32 (*setup_link)(struct ixgbe_hw *); |
| 1397 | s32 (*setup_link_speed)(struct ixgbe_hw *, ixgbe_link_speed, bool, | 1401 | s32 (*setup_link_speed)(struct ixgbe_hw *, ixgbe_link_speed, bool, |
| 1398 | bool); | 1402 | bool); |
| 1403 | s32 (*check_link)(struct ixgbe_hw *, ixgbe_link_speed *, bool *); | ||
| 1404 | s32 (*get_firmware_version)(struct ixgbe_hw *, u16 *); | ||
| 1399 | s32 (*read_i2c_byte)(struct ixgbe_hw *, u8, u8, u8 *); | 1405 | s32 (*read_i2c_byte)(struct ixgbe_hw *, u8, u8, u8 *); |
| 1400 | s32 (*write_i2c_byte)(struct ixgbe_hw *, u8, u8, u8); | 1406 | s32 (*write_i2c_byte)(struct ixgbe_hw *, u8, u8, u8); |
| 1401 | s32 (*read_i2c_eeprom)(struct ixgbe_hw *, u8 , u8 *); | 1407 | s32 (*read_i2c_eeprom)(struct ixgbe_hw *, u8 , u8 *); |
