diff options
author | Don Skidmore <donald.c.skidmore@intel.com> | 2010-11-16 22:27:15 -0500 |
---|---|---|
committer | Jeff Kirsher <jeffrey.t.kirsher@intel.com> | 2010-11-16 22:27:15 -0500 |
commit | a391f1d51244b8274920a33c5d11aeebec3aa68f (patch) | |
tree | f550a62c357a6f63ee0dc7b77432d7c681663688 /drivers/net/ixgbe | |
parent | 9b55bb038468a7b504ccdc1d956952598ae1b85b (diff) |
ixgbe: make silicon specific functions generic
The new MAC type X540 shares much of the same functionality of
some silicon specific functions. To reduce duplicate code,
made these functions generic.
Signed-off-by: Don Skidmore <donald.c.skidmore@intel.com>
Tested-by: Stephen Ko <stephen.s.ko@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
Diffstat (limited to 'drivers/net/ixgbe')
-rw-r--r-- | drivers/net/ixgbe/ixgbe_82598.c | 37 | ||||
-rw-r--r-- | drivers/net/ixgbe/ixgbe_82599.c | 86 | ||||
-rw-r--r-- | drivers/net/ixgbe/ixgbe_common.c | 55 | ||||
-rw-r--r-- | drivers/net/ixgbe/ixgbe_common.h | 5 | ||||
-rw-r--r-- | drivers/net/ixgbe/ixgbe_mbx.c | 2 | ||||
-rw-r--r-- | drivers/net/ixgbe/ixgbe_mbx.h | 2 | ||||
-rw-r--r-- | drivers/net/ixgbe/ixgbe_phy.c | 33 | ||||
-rw-r--r-- | drivers/net/ixgbe/ixgbe_phy.h | 3 | ||||
-rw-r--r-- | drivers/net/ixgbe/ixgbe_type.h | 1 |
9 files changed, 98 insertions, 126 deletions
diff --git a/drivers/net/ixgbe/ixgbe_82598.c b/drivers/net/ixgbe/ixgbe_82598.c index 25b20f93190a..d0f1d9d2c416 100644 --- a/drivers/net/ixgbe/ixgbe_82598.c +++ b/drivers/net/ixgbe/ixgbe_82598.c | |||
@@ -38,9 +38,6 @@ | |||
38 | #define IXGBE_82598_MC_TBL_SIZE 128 | 38 | #define IXGBE_82598_MC_TBL_SIZE 128 |
39 | #define IXGBE_82598_VFT_TBL_SIZE 128 | 39 | #define IXGBE_82598_VFT_TBL_SIZE 128 |
40 | 40 | ||
41 | static s32 ixgbe_get_copper_link_capabilities_82598(struct ixgbe_hw *hw, | ||
42 | ixgbe_link_speed *speed, | ||
43 | bool *autoneg); | ||
44 | static s32 ixgbe_setup_copper_link_82598(struct ixgbe_hw *hw, | 41 | static s32 ixgbe_setup_copper_link_82598(struct ixgbe_hw *hw, |
45 | ixgbe_link_speed speed, | 42 | ixgbe_link_speed speed, |
46 | bool autoneg, | 43 | bool autoneg, |
@@ -156,7 +153,7 @@ static s32 ixgbe_init_phy_ops_82598(struct ixgbe_hw *hw) | |||
156 | if (mac->ops.get_media_type(hw) == ixgbe_media_type_copper) { | 153 | if (mac->ops.get_media_type(hw) == ixgbe_media_type_copper) { |
157 | mac->ops.setup_link = &ixgbe_setup_copper_link_82598; | 154 | mac->ops.setup_link = &ixgbe_setup_copper_link_82598; |
158 | mac->ops.get_link_capabilities = | 155 | mac->ops.get_link_capabilities = |
159 | &ixgbe_get_copper_link_capabilities_82598; | 156 | &ixgbe_get_copper_link_capabilities_generic; |
160 | } | 157 | } |
161 | 158 | ||
162 | switch (hw->phy.type) { | 159 | switch (hw->phy.type) { |
@@ -274,37 +271,6 @@ static s32 ixgbe_get_link_capabilities_82598(struct ixgbe_hw *hw, | |||
274 | } | 271 | } |
275 | 272 | ||
276 | /** | 273 | /** |
277 | * ixgbe_get_copper_link_capabilities_82598 - Determines link capabilities | ||
278 | * @hw: pointer to hardware structure | ||
279 | * @speed: pointer to link speed | ||
280 | * @autoneg: boolean auto-negotiation value | ||
281 | * | ||
282 | * Determines the link capabilities by reading the AUTOC register. | ||
283 | **/ | ||
284 | static s32 ixgbe_get_copper_link_capabilities_82598(struct ixgbe_hw *hw, | ||
285 | ixgbe_link_speed *speed, | ||
286 | bool *autoneg) | ||
287 | { | ||
288 | s32 status = IXGBE_ERR_LINK_SETUP; | ||
289 | u16 speed_ability; | ||
290 | |||
291 | *speed = 0; | ||
292 | *autoneg = true; | ||
293 | |||
294 | status = hw->phy.ops.read_reg(hw, MDIO_SPEED, MDIO_MMD_PMAPMD, | ||
295 | &speed_ability); | ||
296 | |||
297 | if (status == 0) { | ||
298 | if (speed_ability & MDIO_SPEED_10G) | ||
299 | *speed |= IXGBE_LINK_SPEED_10GB_FULL; | ||
300 | if (speed_ability & MDIO_PMA_SPEED_1000) | ||
301 | *speed |= IXGBE_LINK_SPEED_1GB_FULL; | ||
302 | } | ||
303 | |||
304 | return status; | ||
305 | } | ||
306 | |||
307 | /** | ||
308 | * ixgbe_get_media_type_82598 - Determines media type | 274 | * ixgbe_get_media_type_82598 - Determines media type |
309 | * @hw: pointer to hardware structure | 275 | * @hw: pointer to hardware structure |
310 | * | 276 | * |
@@ -1225,6 +1191,7 @@ static struct ixgbe_mac_operations mac_ops_82598 = { | |||
1225 | static struct ixgbe_eeprom_operations eeprom_ops_82598 = { | 1191 | static struct ixgbe_eeprom_operations eeprom_ops_82598 = { |
1226 | .init_params = &ixgbe_init_eeprom_params_generic, | 1192 | .init_params = &ixgbe_init_eeprom_params_generic, |
1227 | .read = &ixgbe_read_eerd_generic, | 1193 | .read = &ixgbe_read_eerd_generic, |
1194 | .calc_checksum = &ixgbe_calc_eeprom_checksum_generic, | ||
1228 | .validate_checksum = &ixgbe_validate_eeprom_checksum_generic, | 1195 | .validate_checksum = &ixgbe_validate_eeprom_checksum_generic, |
1229 | .update_checksum = &ixgbe_update_eeprom_checksum_generic, | 1196 | .update_checksum = &ixgbe_update_eeprom_checksum_generic, |
1230 | }; | 1197 | }; |
diff --git a/drivers/net/ixgbe/ixgbe_82599.c b/drivers/net/ixgbe/ixgbe_82599.c index 0bd8fbb5bfd0..144c44a6b216 100644 --- a/drivers/net/ixgbe/ixgbe_82599.c +++ b/drivers/net/ixgbe/ixgbe_82599.c | |||
@@ -56,9 +56,6 @@ static s32 ixgbe_setup_mac_link_82599(struct ixgbe_hw *hw, | |||
56 | ixgbe_link_speed speed, | 56 | ixgbe_link_speed speed, |
57 | bool autoneg, | 57 | bool autoneg, |
58 | bool autoneg_wait_to_complete); | 58 | bool autoneg_wait_to_complete); |
59 | static s32 ixgbe_get_copper_link_capabilities_82599(struct ixgbe_hw *hw, | ||
60 | ixgbe_link_speed *speed, | ||
61 | bool *autoneg); | ||
62 | static s32 ixgbe_setup_copper_link_82599(struct ixgbe_hw *hw, | 59 | static s32 ixgbe_setup_copper_link_82599(struct ixgbe_hw *hw, |
63 | ixgbe_link_speed speed, | 60 | ixgbe_link_speed speed, |
64 | bool autoneg, | 61 | bool autoneg, |
@@ -174,7 +171,7 @@ static s32 ixgbe_init_phy_ops_82599(struct ixgbe_hw *hw) | |||
174 | if (mac->ops.get_media_type(hw) == ixgbe_media_type_copper) { | 171 | if (mac->ops.get_media_type(hw) == ixgbe_media_type_copper) { |
175 | mac->ops.setup_link = &ixgbe_setup_copper_link_82599; | 172 | mac->ops.setup_link = &ixgbe_setup_copper_link_82599; |
176 | mac->ops.get_link_capabilities = | 173 | mac->ops.get_link_capabilities = |
177 | &ixgbe_get_copper_link_capabilities_82599; | 174 | &ixgbe_get_copper_link_capabilities_generic; |
178 | } | 175 | } |
179 | 176 | ||
180 | /* Set necessary function pointers based on phy type */ | 177 | /* Set necessary function pointers based on phy type */ |
@@ -290,37 +287,6 @@ out: | |||
290 | } | 287 | } |
291 | 288 | ||
292 | /** | 289 | /** |
293 | * ixgbe_get_copper_link_capabilities_82599 - Determines link capabilities | ||
294 | * @hw: pointer to hardware structure | ||
295 | * @speed: pointer to link speed | ||
296 | * @autoneg: boolean auto-negotiation value | ||
297 | * | ||
298 | * Determines the link capabilities by reading the AUTOC register. | ||
299 | **/ | ||
300 | static s32 ixgbe_get_copper_link_capabilities_82599(struct ixgbe_hw *hw, | ||
301 | ixgbe_link_speed *speed, | ||
302 | bool *autoneg) | ||
303 | { | ||
304 | s32 status = IXGBE_ERR_LINK_SETUP; | ||
305 | u16 speed_ability; | ||
306 | |||
307 | *speed = 0; | ||
308 | *autoneg = true; | ||
309 | |||
310 | status = hw->phy.ops.read_reg(hw, MDIO_SPEED, MDIO_MMD_PMAPMD, | ||
311 | &speed_ability); | ||
312 | |||
313 | if (status == 0) { | ||
314 | if (speed_ability & MDIO_SPEED_10G) | ||
315 | *speed |= IXGBE_LINK_SPEED_10GB_FULL; | ||
316 | if (speed_ability & MDIO_PMA_SPEED_1000) | ||
317 | *speed |= IXGBE_LINK_SPEED_1GB_FULL; | ||
318 | } | ||
319 | |||
320 | return status; | ||
321 | } | ||
322 | |||
323 | /** | ||
324 | * ixgbe_get_media_type_82599 - Get media type | 290 | * ixgbe_get_media_type_82599 - Get media type |
325 | * @hw: pointer to hardware structure | 291 | * @hw: pointer to hardware structure |
326 | * | 292 | * |
@@ -2125,51 +2091,6 @@ fw_version_out: | |||
2125 | return status; | 2091 | return status; |
2126 | } | 2092 | } |
2127 | 2093 | ||
2128 | /** | ||
2129 | * ixgbe_get_wwn_prefix_82599 - Get alternative WWNN/WWPN prefix from | ||
2130 | * the EEPROM | ||
2131 | * @hw: pointer to hardware structure | ||
2132 | * @wwnn_prefix: the alternative WWNN prefix | ||
2133 | * @wwpn_prefix: the alternative WWPN prefix | ||
2134 | * | ||
2135 | * This function will read the EEPROM from the alternative SAN MAC address | ||
2136 | * block to check the support for the alternative WWNN/WWPN prefix support. | ||
2137 | **/ | ||
2138 | static s32 ixgbe_get_wwn_prefix_82599(struct ixgbe_hw *hw, u16 *wwnn_prefix, | ||
2139 | u16 *wwpn_prefix) | ||
2140 | { | ||
2141 | u16 offset, caps; | ||
2142 | u16 alt_san_mac_blk_offset; | ||
2143 | |||
2144 | /* clear output first */ | ||
2145 | *wwnn_prefix = 0xFFFF; | ||
2146 | *wwpn_prefix = 0xFFFF; | ||
2147 | |||
2148 | /* check if alternative SAN MAC is supported */ | ||
2149 | hw->eeprom.ops.read(hw, IXGBE_ALT_SAN_MAC_ADDR_BLK_PTR, | ||
2150 | &alt_san_mac_blk_offset); | ||
2151 | |||
2152 | if ((alt_san_mac_blk_offset == 0) || | ||
2153 | (alt_san_mac_blk_offset == 0xFFFF)) | ||
2154 | goto wwn_prefix_out; | ||
2155 | |||
2156 | /* check capability in alternative san mac address block */ | ||
2157 | offset = alt_san_mac_blk_offset + IXGBE_ALT_SAN_MAC_ADDR_CAPS_OFFSET; | ||
2158 | hw->eeprom.ops.read(hw, offset, &caps); | ||
2159 | if (!(caps & IXGBE_ALT_SAN_MAC_ADDR_CAPS_ALTWWN)) | ||
2160 | goto wwn_prefix_out; | ||
2161 | |||
2162 | /* get the corresponding prefix for WWNN/WWPN */ | ||
2163 | offset = alt_san_mac_blk_offset + IXGBE_ALT_SAN_MAC_ADDR_WWNN_OFFSET; | ||
2164 | hw->eeprom.ops.read(hw, offset, wwnn_prefix); | ||
2165 | |||
2166 | offset = alt_san_mac_blk_offset + IXGBE_ALT_SAN_MAC_ADDR_WWPN_OFFSET; | ||
2167 | hw->eeprom.ops.read(hw, offset, wwpn_prefix); | ||
2168 | |||
2169 | wwn_prefix_out: | ||
2170 | return 0; | ||
2171 | } | ||
2172 | |||
2173 | static struct ixgbe_mac_operations mac_ops_82599 = { | 2094 | static struct ixgbe_mac_operations mac_ops_82599 = { |
2174 | .init_hw = &ixgbe_init_hw_generic, | 2095 | .init_hw = &ixgbe_init_hw_generic, |
2175 | .reset_hw = &ixgbe_reset_hw_82599, | 2096 | .reset_hw = &ixgbe_reset_hw_82599, |
@@ -2181,7 +2102,7 @@ static struct ixgbe_mac_operations mac_ops_82599 = { | |||
2181 | .get_mac_addr = &ixgbe_get_mac_addr_generic, | 2102 | .get_mac_addr = &ixgbe_get_mac_addr_generic, |
2182 | .get_san_mac_addr = &ixgbe_get_san_mac_addr_generic, | 2103 | .get_san_mac_addr = &ixgbe_get_san_mac_addr_generic, |
2183 | .get_device_caps = &ixgbe_get_device_caps_82599, | 2104 | .get_device_caps = &ixgbe_get_device_caps_82599, |
2184 | .get_wwn_prefix = &ixgbe_get_wwn_prefix_82599, | 2105 | .get_wwn_prefix = &ixgbe_get_wwn_prefix_generic, |
2185 | .stop_adapter = &ixgbe_stop_adapter_generic, | 2106 | .stop_adapter = &ixgbe_stop_adapter_generic, |
2186 | .get_bus_info = &ixgbe_get_bus_info_generic, | 2107 | .get_bus_info = &ixgbe_get_bus_info_generic, |
2187 | .set_lan_id = &ixgbe_set_lan_id_multi_port_pcie, | 2108 | .set_lan_id = &ixgbe_set_lan_id_multi_port_pcie, |
@@ -2214,6 +2135,7 @@ static struct ixgbe_eeprom_operations eeprom_ops_82599 = { | |||
2214 | .init_params = &ixgbe_init_eeprom_params_generic, | 2135 | .init_params = &ixgbe_init_eeprom_params_generic, |
2215 | .read = &ixgbe_read_eerd_generic, | 2136 | .read = &ixgbe_read_eerd_generic, |
2216 | .write = &ixgbe_write_eeprom_generic, | 2137 | .write = &ixgbe_write_eeprom_generic, |
2138 | .calc_checksum = &ixgbe_calc_eeprom_checksum_generic, | ||
2217 | .validate_checksum = &ixgbe_validate_eeprom_checksum_generic, | 2139 | .validate_checksum = &ixgbe_validate_eeprom_checksum_generic, |
2218 | .update_checksum = &ixgbe_update_eeprom_checksum_generic, | 2140 | .update_checksum = &ixgbe_update_eeprom_checksum_generic, |
2219 | }; | 2141 | }; |
@@ -2240,5 +2162,5 @@ struct ixgbe_info ixgbe_82599_info = { | |||
2240 | .mac_ops = &mac_ops_82599, | 2162 | .mac_ops = &mac_ops_82599, |
2241 | .eeprom_ops = &eeprom_ops_82599, | 2163 | .eeprom_ops = &eeprom_ops_82599, |
2242 | .phy_ops = &phy_ops_82599, | 2164 | .phy_ops = &phy_ops_82599, |
2243 | .mbx_ops = &mbx_ops_82599, | 2165 | .mbx_ops = &mbx_ops_generic, |
2244 | }; | 2166 | }; |
diff --git a/drivers/net/ixgbe/ixgbe_common.c b/drivers/net/ixgbe/ixgbe_common.c index 62aa2be199f1..56052570cac5 100644 --- a/drivers/net/ixgbe/ixgbe_common.c +++ b/drivers/net/ixgbe/ixgbe_common.c | |||
@@ -45,14 +45,12 @@ static u16 ixgbe_shift_in_eeprom_bits(struct ixgbe_hw *hw, u16 count); | |||
45 | static void ixgbe_raise_eeprom_clk(struct ixgbe_hw *hw, u32 *eec); | 45 | static void ixgbe_raise_eeprom_clk(struct ixgbe_hw *hw, u32 *eec); |
46 | static void ixgbe_lower_eeprom_clk(struct ixgbe_hw *hw, u32 *eec); | 46 | static void ixgbe_lower_eeprom_clk(struct ixgbe_hw *hw, u32 *eec); |
47 | static void ixgbe_release_eeprom(struct ixgbe_hw *hw); | 47 | static void ixgbe_release_eeprom(struct ixgbe_hw *hw); |
48 | static u16 ixgbe_calc_eeprom_checksum(struct ixgbe_hw *hw); | ||
49 | 48 | ||
50 | static void ixgbe_enable_rar(struct ixgbe_hw *hw, u32 index); | 49 | static void ixgbe_enable_rar(struct ixgbe_hw *hw, u32 index); |
51 | static void ixgbe_disable_rar(struct ixgbe_hw *hw, u32 index); | 50 | static void ixgbe_disable_rar(struct ixgbe_hw *hw, u32 index); |
52 | static s32 ixgbe_mta_vector(struct ixgbe_hw *hw, u8 *mc_addr); | 51 | static s32 ixgbe_mta_vector(struct ixgbe_hw *hw, u8 *mc_addr); |
53 | static void ixgbe_add_uc_addr(struct ixgbe_hw *hw, u8 *addr, u32 vmdq); | 52 | static void ixgbe_add_uc_addr(struct ixgbe_hw *hw, u8 *addr, u32 vmdq); |
54 | static s32 ixgbe_setup_fc(struct ixgbe_hw *hw, s32 packetbuf_num); | 53 | static s32 ixgbe_setup_fc(struct ixgbe_hw *hw, s32 packetbuf_num); |
55 | static s32 ixgbe_poll_eerd_eewr_done(struct ixgbe_hw *hw, u32 ee_reg); | ||
56 | 54 | ||
57 | /** | 55 | /** |
58 | * ixgbe_start_hw_generic - Prepare hardware for Tx/Rx | 56 | * ixgbe_start_hw_generic - Prepare hardware for Tx/Rx |
@@ -638,7 +636,7 @@ out: | |||
638 | * Polls the status bit (bit 1) of the EERD or EEWR to determine when the | 636 | * Polls the status bit (bit 1) of the EERD or EEWR to determine when the |
639 | * read or write is done respectively. | 637 | * read or write is done respectively. |
640 | **/ | 638 | **/ |
641 | static s32 ixgbe_poll_eerd_eewr_done(struct ixgbe_hw *hw, u32 ee_reg) | 639 | s32 ixgbe_poll_eerd_eewr_done(struct ixgbe_hw *hw, u32 ee_reg) |
642 | { | 640 | { |
643 | u32 i; | 641 | u32 i; |
644 | u32 reg; | 642 | u32 reg; |
@@ -1009,7 +1007,7 @@ static void ixgbe_release_eeprom(struct ixgbe_hw *hw) | |||
1009 | * ixgbe_calc_eeprom_checksum - Calculates and returns the checksum | 1007 | * ixgbe_calc_eeprom_checksum - Calculates and returns the checksum |
1010 | * @hw: pointer to hardware structure | 1008 | * @hw: pointer to hardware structure |
1011 | **/ | 1009 | **/ |
1012 | static u16 ixgbe_calc_eeprom_checksum(struct ixgbe_hw *hw) | 1010 | u16 ixgbe_calc_eeprom_checksum_generic(struct ixgbe_hw *hw) |
1013 | { | 1011 | { |
1014 | u16 i; | 1012 | u16 i; |
1015 | u16 j; | 1013 | u16 j; |
@@ -1072,7 +1070,7 @@ s32 ixgbe_validate_eeprom_checksum_generic(struct ixgbe_hw *hw, | |||
1072 | status = hw->eeprom.ops.read(hw, 0, &checksum); | 1070 | status = hw->eeprom.ops.read(hw, 0, &checksum); |
1073 | 1071 | ||
1074 | if (status == 0) { | 1072 | if (status == 0) { |
1075 | checksum = ixgbe_calc_eeprom_checksum(hw); | 1073 | checksum = hw->eeprom.ops.calc_checksum(hw); |
1076 | 1074 | ||
1077 | hw->eeprom.ops.read(hw, IXGBE_EEPROM_CHECKSUM, &read_checksum); | 1075 | hw->eeprom.ops.read(hw, IXGBE_EEPROM_CHECKSUM, &read_checksum); |
1078 | 1076 | ||
@@ -1110,7 +1108,7 @@ s32 ixgbe_update_eeprom_checksum_generic(struct ixgbe_hw *hw) | |||
1110 | status = hw->eeprom.ops.read(hw, 0, &checksum); | 1108 | status = hw->eeprom.ops.read(hw, 0, &checksum); |
1111 | 1109 | ||
1112 | if (status == 0) { | 1110 | if (status == 0) { |
1113 | checksum = ixgbe_calc_eeprom_checksum(hw); | 1111 | checksum = hw->eeprom.ops.calc_checksum(hw); |
1114 | status = hw->eeprom.ops.write(hw, IXGBE_EEPROM_CHECKSUM, | 1112 | status = hw->eeprom.ops.write(hw, IXGBE_EEPROM_CHECKSUM, |
1115 | checksum); | 1113 | checksum); |
1116 | } else { | 1114 | } else { |
@@ -2686,3 +2684,48 @@ s32 ixgbe_check_mac_link_generic(struct ixgbe_hw *hw, ixgbe_link_speed *speed, | |||
2686 | 2684 | ||
2687 | return 0; | 2685 | return 0; |
2688 | } | 2686 | } |
2687 | |||
2688 | /** | ||
2689 | * ixgbe_get_wwn_prefix_generic Get alternative WWNN/WWPN prefix from | ||
2690 | * the EEPROM | ||
2691 | * @hw: pointer to hardware structure | ||
2692 | * @wwnn_prefix: the alternative WWNN prefix | ||
2693 | * @wwpn_prefix: the alternative WWPN prefix | ||
2694 | * | ||
2695 | * This function will read the EEPROM from the alternative SAN MAC address | ||
2696 | * block to check the support for the alternative WWNN/WWPN prefix support. | ||
2697 | **/ | ||
2698 | s32 ixgbe_get_wwn_prefix_generic(struct ixgbe_hw *hw, u16 *wwnn_prefix, | ||
2699 | u16 *wwpn_prefix) | ||
2700 | { | ||
2701 | u16 offset, caps; | ||
2702 | u16 alt_san_mac_blk_offset; | ||
2703 | |||
2704 | /* clear output first */ | ||
2705 | *wwnn_prefix = 0xFFFF; | ||
2706 | *wwpn_prefix = 0xFFFF; | ||
2707 | |||
2708 | /* check if alternative SAN MAC is supported */ | ||
2709 | hw->eeprom.ops.read(hw, IXGBE_ALT_SAN_MAC_ADDR_BLK_PTR, | ||
2710 | &alt_san_mac_blk_offset); | ||
2711 | |||
2712 | if ((alt_san_mac_blk_offset == 0) || | ||
2713 | (alt_san_mac_blk_offset == 0xFFFF)) | ||
2714 | goto wwn_prefix_out; | ||
2715 | |||
2716 | /* check capability in alternative san mac address block */ | ||
2717 | offset = alt_san_mac_blk_offset + IXGBE_ALT_SAN_MAC_ADDR_CAPS_OFFSET; | ||
2718 | hw->eeprom.ops.read(hw, offset, &caps); | ||
2719 | if (!(caps & IXGBE_ALT_SAN_MAC_ADDR_CAPS_ALTWWN)) | ||
2720 | goto wwn_prefix_out; | ||
2721 | |||
2722 | /* get the corresponding prefix for WWNN/WWPN */ | ||
2723 | offset = alt_san_mac_blk_offset + IXGBE_ALT_SAN_MAC_ADDR_WWNN_OFFSET; | ||
2724 | hw->eeprom.ops.read(hw, offset, wwnn_prefix); | ||
2725 | |||
2726 | offset = alt_san_mac_blk_offset + IXGBE_ALT_SAN_MAC_ADDR_WWPN_OFFSET; | ||
2727 | hw->eeprom.ops.read(hw, offset, wwpn_prefix); | ||
2728 | |||
2729 | wwn_prefix_out: | ||
2730 | return 0; | ||
2731 | } | ||
diff --git a/drivers/net/ixgbe/ixgbe_common.h b/drivers/net/ixgbe/ixgbe_common.h index 424c223437dc..341ca514a281 100644 --- a/drivers/net/ixgbe/ixgbe_common.h +++ b/drivers/net/ixgbe/ixgbe_common.h | |||
@@ -49,9 +49,11 @@ s32 ixgbe_write_eeprom_generic(struct ixgbe_hw *hw, u16 offset, u16 data); | |||
49 | s32 ixgbe_read_eerd_generic(struct ixgbe_hw *hw, u16 offset, u16 *data); | 49 | s32 ixgbe_read_eerd_generic(struct ixgbe_hw *hw, u16 offset, u16 *data); |
50 | s32 ixgbe_read_eeprom_bit_bang_generic(struct ixgbe_hw *hw, u16 offset, | 50 | s32 ixgbe_read_eeprom_bit_bang_generic(struct ixgbe_hw *hw, u16 offset, |
51 | u16 *data); | 51 | u16 *data); |
52 | u16 ixgbe_calc_eeprom_checksum_generic(struct ixgbe_hw *hw); | ||
52 | s32 ixgbe_validate_eeprom_checksum_generic(struct ixgbe_hw *hw, | 53 | s32 ixgbe_validate_eeprom_checksum_generic(struct ixgbe_hw *hw, |
53 | u16 *checksum_val); | 54 | u16 *checksum_val); |
54 | s32 ixgbe_update_eeprom_checksum_generic(struct ixgbe_hw *hw); | 55 | s32 ixgbe_update_eeprom_checksum_generic(struct ixgbe_hw *hw); |
56 | s32 ixgbe_poll_eerd_eewr_done(struct ixgbe_hw *hw, u32 ee_reg); | ||
55 | 57 | ||
56 | s32 ixgbe_set_rar_generic(struct ixgbe_hw *hw, u32 index, u8 *addr, u32 vmdq, | 58 | s32 ixgbe_set_rar_generic(struct ixgbe_hw *hw, u32 index, u8 *addr, u32 vmdq, |
57 | u32 enable_addr); | 59 | u32 enable_addr); |
@@ -81,7 +83,8 @@ s32 ixgbe_clear_vfta_generic(struct ixgbe_hw *hw); | |||
81 | s32 ixgbe_check_mac_link_generic(struct ixgbe_hw *hw, | 83 | s32 ixgbe_check_mac_link_generic(struct ixgbe_hw *hw, |
82 | ixgbe_link_speed *speed, | 84 | ixgbe_link_speed *speed, |
83 | bool *link_up, bool link_up_wait_to_complete); | 85 | bool *link_up, bool link_up_wait_to_complete); |
84 | 86 | s32 ixgbe_get_wwn_prefix_generic(struct ixgbe_hw *hw, u16 *wwnn_prefix, | |
87 | u16 *wwpn_prefix); | ||
85 | s32 ixgbe_blink_led_start_generic(struct ixgbe_hw *hw, u32 index); | 88 | s32 ixgbe_blink_led_start_generic(struct ixgbe_hw *hw, u32 index); |
86 | s32 ixgbe_blink_led_stop_generic(struct ixgbe_hw *hw, u32 index); | 89 | s32 ixgbe_blink_led_stop_generic(struct ixgbe_hw *hw, u32 index); |
87 | 90 | ||
diff --git a/drivers/net/ixgbe/ixgbe_mbx.c b/drivers/net/ixgbe/ixgbe_mbx.c index 471f0f2cdb98..aede6eb0e67d 100644 --- a/drivers/net/ixgbe/ixgbe_mbx.c +++ b/drivers/net/ixgbe/ixgbe_mbx.c | |||
@@ -454,7 +454,7 @@ void ixgbe_init_mbx_params_pf(struct ixgbe_hw *hw) | |||
454 | mbx->stats.rsts = 0; | 454 | mbx->stats.rsts = 0; |
455 | } | 455 | } |
456 | 456 | ||
457 | struct ixgbe_mbx_operations mbx_ops_82599 = { | 457 | struct ixgbe_mbx_operations mbx_ops_generic = { |
458 | .read = ixgbe_read_mbx_pf, | 458 | .read = ixgbe_read_mbx_pf, |
459 | .write = ixgbe_write_mbx_pf, | 459 | .write = ixgbe_write_mbx_pf, |
460 | .read_posted = ixgbe_read_posted_mbx, | 460 | .read_posted = ixgbe_read_posted_mbx, |
diff --git a/drivers/net/ixgbe/ixgbe_mbx.h b/drivers/net/ixgbe/ixgbe_mbx.h index 7e0d08ff5b53..3df9b1590218 100644 --- a/drivers/net/ixgbe/ixgbe_mbx.h +++ b/drivers/net/ixgbe/ixgbe_mbx.h | |||
@@ -88,6 +88,6 @@ s32 ixgbe_check_for_ack(struct ixgbe_hw *, u16); | |||
88 | s32 ixgbe_check_for_rst(struct ixgbe_hw *, u16); | 88 | s32 ixgbe_check_for_rst(struct ixgbe_hw *, u16); |
89 | void ixgbe_init_mbx_params_pf(struct ixgbe_hw *); | 89 | void ixgbe_init_mbx_params_pf(struct ixgbe_hw *); |
90 | 90 | ||
91 | extern struct ixgbe_mbx_operations mbx_ops_82599; | 91 | extern struct ixgbe_mbx_operations mbx_ops_generic; |
92 | 92 | ||
93 | #endif /* _IXGBE_MBX_H_ */ | 93 | #endif /* _IXGBE_MBX_H_ */ |
diff --git a/drivers/net/ixgbe/ixgbe_phy.c b/drivers/net/ixgbe/ixgbe_phy.c index 6c0d42e33f21..bc255ec48428 100644 --- a/drivers/net/ixgbe/ixgbe_phy.c +++ b/drivers/net/ixgbe/ixgbe_phy.c | |||
@@ -425,6 +425,39 @@ s32 ixgbe_setup_phy_link_speed_generic(struct ixgbe_hw *hw, | |||
425 | } | 425 | } |
426 | 426 | ||
427 | /** | 427 | /** |
428 | * ixgbe_get_copper_link_capabilities_generic - Determines link capabilities | ||
429 | * @hw: pointer to hardware structure | ||
430 | * @speed: pointer to link speed | ||
431 | * @autoneg: boolean auto-negotiation value | ||
432 | * | ||
433 | * Determines the link capabilities by reading the AUTOC register. | ||
434 | */ | ||
435 | s32 ixgbe_get_copper_link_capabilities_generic(struct ixgbe_hw *hw, | ||
436 | ixgbe_link_speed *speed, | ||
437 | bool *autoneg) | ||
438 | { | ||
439 | s32 status = IXGBE_ERR_LINK_SETUP; | ||
440 | u16 speed_ability; | ||
441 | |||
442 | *speed = 0; | ||
443 | *autoneg = true; | ||
444 | |||
445 | status = hw->phy.ops.read_reg(hw, MDIO_SPEED, MDIO_MMD_PMAPMD, | ||
446 | &speed_ability); | ||
447 | |||
448 | if (status == 0) { | ||
449 | if (speed_ability & MDIO_SPEED_10G) | ||
450 | *speed |= IXGBE_LINK_SPEED_10GB_FULL; | ||
451 | if (speed_ability & MDIO_PMA_SPEED_1000) | ||
452 | *speed |= IXGBE_LINK_SPEED_1GB_FULL; | ||
453 | if (speed_ability & MDIO_PMA_SPEED_100) | ||
454 | *speed |= IXGBE_LINK_SPEED_100_FULL; | ||
455 | } | ||
456 | |||
457 | return status; | ||
458 | } | ||
459 | |||
460 | /** | ||
428 | * ixgbe_reset_phy_nl - Performs a PHY reset | 461 | * ixgbe_reset_phy_nl - Performs a PHY reset |
429 | * @hw: pointer to hardware structure | 462 | * @hw: pointer to hardware structure |
430 | **/ | 463 | **/ |
diff --git a/drivers/net/ixgbe/ixgbe_phy.h b/drivers/net/ixgbe/ixgbe_phy.h index fb3898f12fc5..86f83bd130cb 100644 --- a/drivers/net/ixgbe/ixgbe_phy.h +++ b/drivers/net/ixgbe/ixgbe_phy.h | |||
@@ -96,6 +96,9 @@ s32 ixgbe_setup_phy_link_speed_generic(struct ixgbe_hw *hw, | |||
96 | ixgbe_link_speed speed, | 96 | ixgbe_link_speed speed, |
97 | bool autoneg, | 97 | bool autoneg, |
98 | bool autoneg_wait_to_complete); | 98 | bool autoneg_wait_to_complete); |
99 | s32 ixgbe_get_copper_link_capabilities_generic(struct ixgbe_hw *hw, | ||
100 | ixgbe_link_speed *speed, | ||
101 | bool *autoneg); | ||
99 | 102 | ||
100 | /* PHY specific */ | 103 | /* PHY specific */ |
101 | s32 ixgbe_check_phy_link_tnx(struct ixgbe_hw *hw, | 104 | s32 ixgbe_check_phy_link_tnx(struct ixgbe_hw *hw, |
diff --git a/drivers/net/ixgbe/ixgbe_type.h b/drivers/net/ixgbe/ixgbe_type.h index 9e6908dff9bc..86c0049ba199 100644 --- a/drivers/net/ixgbe/ixgbe_type.h +++ b/drivers/net/ixgbe/ixgbe_type.h | |||
@@ -2414,6 +2414,7 @@ struct ixgbe_eeprom_operations { | |||
2414 | s32 (*write)(struct ixgbe_hw *, u16, u16); | 2414 | s32 (*write)(struct ixgbe_hw *, u16, u16); |
2415 | s32 (*validate_checksum)(struct ixgbe_hw *, u16 *); | 2415 | s32 (*validate_checksum)(struct ixgbe_hw *, u16 *); |
2416 | s32 (*update_checksum)(struct ixgbe_hw *); | 2416 | s32 (*update_checksum)(struct ixgbe_hw *); |
2417 | u16 (*calc_checksum)(struct ixgbe_hw *); | ||
2417 | }; | 2418 | }; |
2418 | 2419 | ||
2419 | struct ixgbe_mac_operations { | 2420 | struct ixgbe_mac_operations { |