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 /drivers/net/ixgbe | |
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>
Diffstat (limited to 'drivers/net/ixgbe')
-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 *); |