e1000_82541.c (169248) | e1000_82541.c (169589) |
---|---|
1/******************************************************************************* 2 3 Copyright (c) 2001-2007, Intel Corporation 4 All rights reserved. 5 6 Redistribution and use in source and binary forms, with or without 7 modification, are permitted provided that the following conditions are met: 8 --- 16 unchanged lines hidden (view full) --- 25 CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 26 SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 27 INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 28 CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 29 ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 30 POSSIBILITY OF SUCH DAMAGE. 31 32*******************************************************************************/ | 1/******************************************************************************* 2 3 Copyright (c) 2001-2007, Intel Corporation 4 All rights reserved. 5 6 Redistribution and use in source and binary forms, with or without 7 modification, are permitted provided that the following conditions are met: 8 --- 16 unchanged lines hidden (view full) --- 25 CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 26 SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 27 INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 28 CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 29 ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 30 POSSIBILITY OF SUCH DAMAGE. 31 32*******************************************************************************/ |
33/*$FreeBSD: head/sys/dev/em/e1000_82541.c 169589 2007-05-16 00:14:23Z jfv $*/ |
|
33 | 34 |
34#include <sys/cdefs.h> 35__FBSDID("$FreeBSD: head/sys/dev/em/e1000_82541.c 169248 2007-05-04 13:30:44Z rwatson $"); | |
36 | 35 |
37 | |
38/* e1000_82541 39 * e1000_82547 40 * e1000_82541_rev_2 41 * e1000_82547_rev_2 42 */ 43 | 36/* e1000_82541 37 * e1000_82547 38 * e1000_82541_rev_2 39 * e1000_82547_rev_2 40 */ 41 |
42#include "e1000_api.h" |
|
44#include "e1000_82541.h" 45 46void e1000_init_function_pointers_82541(struct e1000_hw *hw); 47 48STATIC s32 e1000_init_phy_params_82541(struct e1000_hw *hw); 49STATIC s32 e1000_init_nvm_params_82541(struct e1000_hw *hw); 50STATIC s32 e1000_init_mac_params_82541(struct e1000_hw *hw); 51STATIC s32 e1000_reset_hw_82541(struct e1000_hw *hw); --- 31 unchanged lines hidden (view full) --- 83 e1000_dsp_config dsp_config; 84 e1000_ffe_config ffe_config; 85 u16 spd_default; 86 boolean_t phy_init_script; 87}; 88 89/** 90 * e1000_init_phy_params_82541 - Init PHY func ptrs. | 43#include "e1000_82541.h" 44 45void e1000_init_function_pointers_82541(struct e1000_hw *hw); 46 47STATIC s32 e1000_init_phy_params_82541(struct e1000_hw *hw); 48STATIC s32 e1000_init_nvm_params_82541(struct e1000_hw *hw); 49STATIC s32 e1000_init_mac_params_82541(struct e1000_hw *hw); 50STATIC s32 e1000_reset_hw_82541(struct e1000_hw *hw); --- 31 unchanged lines hidden (view full) --- 82 e1000_dsp_config dsp_config; 83 e1000_ffe_config ffe_config; 84 u16 spd_default; 85 boolean_t phy_init_script; 86}; 87 88/** 89 * e1000_init_phy_params_82541 - Init PHY func ptrs. |
91 * @hw - pointer to the HW structure | 90 * @hw: pointer to the HW structure |
92 * 93 * This is a function pointer entry point called by the api module. 94 **/ 95STATIC s32 96e1000_init_phy_params_82541(struct e1000_hw *hw) 97{ 98 struct e1000_phy_info *phy = &hw->phy; 99 struct e1000_functions *func = &hw->func; --- 28 unchanged lines hidden (view full) --- 128 } 129 130out: 131 return ret_val; 132} 133 134/** 135 * e1000_init_nvm_params_82541 - Init NVM func ptrs. | 91 * 92 * This is a function pointer entry point called by the api module. 93 **/ 94STATIC s32 95e1000_init_phy_params_82541(struct e1000_hw *hw) 96{ 97 struct e1000_phy_info *phy = &hw->phy; 98 struct e1000_functions *func = &hw->func; --- 28 unchanged lines hidden (view full) --- 127 } 128 129out: 130 return ret_val; 131} 132 133/** 134 * e1000_init_nvm_params_82541 - Init NVM func ptrs. |
136 * @hw - pointer to the HW structure | 135 * @hw: pointer to the HW structure |
137 * 138 * This is a function pointer entry point called by the api module. 139 **/ 140STATIC s32 141e1000_init_nvm_params_82541(struct e1000_hw *hw) 142{ 143 struct e1000_nvm_info *nvm = &hw->nvm; 144 struct e1000_functions *func = &hw->func; --- 81 unchanged lines hidden (view full) --- 226 } 227 228out: 229 return ret_val; 230} 231 232/** 233 * e1000_init_mac_params_82541 - Init MAC func ptrs. | 136 * 137 * This is a function pointer entry point called by the api module. 138 **/ 139STATIC s32 140e1000_init_nvm_params_82541(struct e1000_hw *hw) 141{ 142 struct e1000_nvm_info *nvm = &hw->nvm; 143 struct e1000_functions *func = &hw->func; --- 81 unchanged lines hidden (view full) --- 225 } 226 227out: 228 return ret_val; 229} 230 231/** 232 * e1000_init_mac_params_82541 - Init MAC func ptrs. |
234 * @hw - pointer to the HW structure | 233 * @hw: pointer to the HW structure |
235 * 236 * This is a function pointer entry point called by the api module. 237 **/ 238STATIC s32 239e1000_init_mac_params_82541(struct e1000_hw *hw) 240{ 241 struct e1000_mac_info *mac = &hw->mac; 242 struct e1000_functions *func = &hw->func; --- 51 unchanged lines hidden (view full) --- 294 /* Device-specific structure allocation */ 295 ret_val = e1000_alloc_zeroed_dev_spec_struct(hw, hw->dev_spec_size); 296 297 return ret_val; 298} 299 300/** 301 * e1000_init_function_pointers_82541 - Init func ptrs. | 234 * 235 * This is a function pointer entry point called by the api module. 236 **/ 237STATIC s32 238e1000_init_mac_params_82541(struct e1000_hw *hw) 239{ 240 struct e1000_mac_info *mac = &hw->mac; 241 struct e1000_functions *func = &hw->func; --- 51 unchanged lines hidden (view full) --- 293 /* Device-specific structure allocation */ 294 ret_val = e1000_alloc_zeroed_dev_spec_struct(hw, hw->dev_spec_size); 295 296 return ret_val; 297} 298 299/** 300 * e1000_init_function_pointers_82541 - Init func ptrs. |
302 * @hw - pointer to the HW structure | 301 * @hw: pointer to the HW structure |
303 * 304 * The only function explicitly called by the api module to initialize 305 * all function pointers and parameters. 306 **/ 307void 308e1000_init_function_pointers_82541(struct e1000_hw *hw) 309{ 310 DEBUGFUNC("e1000_init_function_pointers_82541"); 311 312 hw->func.init_mac_params = e1000_init_mac_params_82541; 313 hw->func.init_nvm_params = e1000_init_nvm_params_82541; 314 hw->func.init_phy_params = e1000_init_phy_params_82541; 315} 316 317/** 318 * e1000_reset_hw_82541 - Reset hardware | 302 * 303 * The only function explicitly called by the api module to initialize 304 * all function pointers and parameters. 305 **/ 306void 307e1000_init_function_pointers_82541(struct e1000_hw *hw) 308{ 309 DEBUGFUNC("e1000_init_function_pointers_82541"); 310 311 hw->func.init_mac_params = e1000_init_mac_params_82541; 312 hw->func.init_nvm_params = e1000_init_nvm_params_82541; 313 hw->func.init_phy_params = e1000_init_phy_params_82541; 314} 315 316/** 317 * e1000_reset_hw_82541 - Reset hardware |
319 * @hw - pointer to the HW structure | 318 * @hw: pointer to the HW structure |
320 * 321 * This resets the hardware into a known state. This is a 322 * function pointer entry point called by the api module. 323 **/ 324STATIC s32 325e1000_reset_hw_82541(struct e1000_hw *hw) 326{ 327 u32 ledctl, ctrl, icr, manc; --- 60 unchanged lines hidden (view full) --- 388 /* Clear any pending interrupt events. */ 389 icr = E1000_READ_REG(hw, E1000_ICR); 390 391 return E1000_SUCCESS; 392} 393 394/** 395 * e1000_init_hw_82541 - Initialize hardware | 319 * 320 * This resets the hardware into a known state. This is a 321 * function pointer entry point called by the api module. 322 **/ 323STATIC s32 324e1000_reset_hw_82541(struct e1000_hw *hw) 325{ 326 u32 ledctl, ctrl, icr, manc; --- 60 unchanged lines hidden (view full) --- 387 /* Clear any pending interrupt events. */ 388 icr = E1000_READ_REG(hw, E1000_ICR); 389 390 return E1000_SUCCESS; 391} 392 393/** 394 * e1000_init_hw_82541 - Initialize hardware |
396 * @hw - pointer to the HW structure | 395 * @hw: pointer to the HW structure |
397 * 398 * This inits the hardware readying it for operation. This is a 399 * function pointer entry point called by the api module. 400 **/ 401STATIC s32 402e1000_init_hw_82541(struct e1000_hw *hw) 403{ 404 struct e1000_mac_info *mac = &hw->mac; --- 44 unchanged lines hidden (view full) --- 449 e1000_clear_hw_cntrs_82541(hw); 450 451out: 452 return ret_val; 453} 454 455/** 456 * e1000_get_link_up_info_82541 - Report speed and duplex | 396 * 397 * This inits the hardware readying it for operation. This is a 398 * function pointer entry point called by the api module. 399 **/ 400STATIC s32 401e1000_init_hw_82541(struct e1000_hw *hw) 402{ 403 struct e1000_mac_info *mac = &hw->mac; --- 44 unchanged lines hidden (view full) --- 448 e1000_clear_hw_cntrs_82541(hw); 449 450out: 451 return ret_val; 452} 453 454/** 455 * e1000_get_link_up_info_82541 - Report speed and duplex |
457 * @hw - pointer to the HW structure 458 * @speed - pointer to speed buffer 459 * @duplex - pointer to duplex buffer | 456 * @hw: pointer to the HW structure 457 * @speed: pointer to speed buffer 458 * @duplex: pointer to duplex buffer |
460 * 461 * Retrieve the current speed and duplex configuration. 462 * This is a function pointer entry point called by the api module. 463 **/ 464STATIC s32 465e1000_get_link_up_info_82541(struct e1000_hw *hw, u16 *speed, u16 *duplex) 466{ 467 struct e1000_phy_info *phy = &hw->phy; --- 35 unchanged lines hidden (view full) --- 503 } 504 505out: 506 return ret_val; 507} 508 509/** 510 * e1000_phy_hw_reset_82541 - PHY hardware reset | 459 * 460 * Retrieve the current speed and duplex configuration. 461 * This is a function pointer entry point called by the api module. 462 **/ 463STATIC s32 464e1000_get_link_up_info_82541(struct e1000_hw *hw, u16 *speed, u16 *duplex) 465{ 466 struct e1000_phy_info *phy = &hw->phy; --- 35 unchanged lines hidden (view full) --- 502 } 503 504out: 505 return ret_val; 506} 507 508/** 509 * e1000_phy_hw_reset_82541 - PHY hardware reset |
511 * @hw - pointer to the HW structure | 510 * @hw: pointer to the HW structure |
512 * 513 * Verify the reset block is not blocking us from resetting. Acquire 514 * semaphore (if necessary) and read/set/write the device control reset 515 * bit in the PHY. Wait the appropriate delay time for the device to 516 * reset and relase the semaphore (if necessary). 517 * This is a function pointer entry point called by the api module. 518 **/ 519STATIC s32 --- 19 unchanged lines hidden (view full) --- 539 } 540 541out: 542 return ret_val; 543} 544 545/** 546 * e1000_setup_copper_link_82541 - Configure copper link settings | 511 * 512 * Verify the reset block is not blocking us from resetting. Acquire 513 * semaphore (if necessary) and read/set/write the device control reset 514 * bit in the PHY. Wait the appropriate delay time for the device to 515 * reset and relase the semaphore (if necessary). 516 * This is a function pointer entry point called by the api module. 517 **/ 518STATIC s32 --- 19 unchanged lines hidden (view full) --- 538 } 539 540out: 541 return ret_val; 542} 543 544/** 545 * e1000_setup_copper_link_82541 - Configure copper link settings |
547 * @hw - pointer to the HW structure | 546 * @hw: pointer to the HW structure |
548 * 549 * Calls the appropriate function to configure the link for auto-neg or forced 550 * speed and duplex. Then we check for link, once link is established calls 551 * to configure collision distance and flow control are called. If link is 552 * not established, we return -E1000_ERR_PHY (-2). This is a function 553 * pointer entry point called by the api module. 554 **/ 555STATIC s32 --- 40 unchanged lines hidden (view full) --- 596 ret_val = e1000_setup_copper_link_generic(hw); 597 598out: 599 return ret_val; 600} 601 602/** 603 * e1000_check_for_link_82541 - Check/Store link connection | 547 * 548 * Calls the appropriate function to configure the link for auto-neg or forced 549 * speed and duplex. Then we check for link, once link is established calls 550 * to configure collision distance and flow control are called. If link is 551 * not established, we return -E1000_ERR_PHY (-2). This is a function 552 * pointer entry point called by the api module. 553 **/ 554STATIC s32 --- 40 unchanged lines hidden (view full) --- 595 ret_val = e1000_setup_copper_link_generic(hw); 596 597out: 598 return ret_val; 599} 600 601/** 602 * e1000_check_for_link_82541 - Check/Store link connection |
604 * @hw - pointer to the HW structure | 603 * @hw: pointer to the HW structure |
605 * 606 * This checks the link condition of the adapter and stores the 607 * results in the hw->mac structure. This is a function pointer entry 608 * point called by the api module. 609 **/ 610STATIC s32 611e1000_check_for_link_82541(struct e1000_hw *hw) 612{ --- 59 unchanged lines hidden (view full) --- 672 } 673 674out: 675 return ret_val; 676} 677 678/** 679 * e1000_config_dsp_after_link_change_82541 - Config DSP after link | 604 * 605 * This checks the link condition of the adapter and stores the 606 * results in the hw->mac structure. This is a function pointer entry 607 * point called by the api module. 608 **/ 609STATIC s32 610e1000_check_for_link_82541(struct e1000_hw *hw) 611{ --- 59 unchanged lines hidden (view full) --- 671 } 672 673out: 674 return ret_val; 675} 676 677/** 678 * e1000_config_dsp_after_link_change_82541 - Config DSP after link |
680 * @hw - pointer to the HW structure 681 * @link_up - boolean flag for link up status | 679 * @hw: pointer to the HW structure 680 * @link_up: boolean flag for link up status |
682 * 683 * Return E1000_ERR_PHY when failing to read/write the PHY, else E1000_SUCCESS 684 * at any other case. 685 * 686 * 82541_rev_2 & 82547_rev_2 have the capability to configure the DSP when a 687 * gigabit link is achieved to improve link quality. 688 * This is a function pointer entry point called by the api module. 689 **/ --- 193 unchanged lines hidden (view full) --- 883 } 884 885out: 886 return ret_val; 887} 888 889/** 890 * e1000_get_cable_length_igp_82541 - Determine cable length for igp PHY | 681 * 682 * Return E1000_ERR_PHY when failing to read/write the PHY, else E1000_SUCCESS 683 * at any other case. 684 * 685 * 82541_rev_2 & 82547_rev_2 have the capability to configure the DSP when a 686 * gigabit link is achieved to improve link quality. 687 * This is a function pointer entry point called by the api module. 688 **/ --- 193 unchanged lines hidden (view full) --- 882 } 883 884out: 885 return ret_val; 886} 887 888/** 889 * e1000_get_cable_length_igp_82541 - Determine cable length for igp PHY |
891 * @hw - pointer to the HW structure | 890 * @hw: pointer to the HW structure |
892 * 893 * The automatic gain control (agc) normalizes the amplitude of the 894 * received signal, adjusting for the attenuation produced by the 895 * cable. By reading the AGC registers, which reperesent the 896 * cobination of course and fine gain value, the value can be put 897 * into a lookup table to obtain the approximate cable length 898 * for each channel. This is a function pointer entry point called by the 899 * api module. --- 56 unchanged lines hidden (view full) --- 956 phy->cable_length = (phy->min_cable_length + phy->max_cable_length) / 2; 957 958out: 959 return ret_val; 960} 961 962/** 963 * e1000_set_d3_lplu_state_82541 - Sets low power link up state for D3 | 891 * 892 * The automatic gain control (agc) normalizes the amplitude of the 893 * received signal, adjusting for the attenuation produced by the 894 * cable. By reading the AGC registers, which reperesent the 895 * cobination of course and fine gain value, the value can be put 896 * into a lookup table to obtain the approximate cable length 897 * for each channel. This is a function pointer entry point called by the 898 * api module. --- 56 unchanged lines hidden (view full) --- 955 phy->cable_length = (phy->min_cable_length + phy->max_cable_length) / 2; 956 957out: 958 return ret_val; 959} 960 961/** 962 * e1000_set_d3_lplu_state_82541 - Sets low power link up state for D3 |
964 * @hw - pointer to the HW structure 965 * @active boolean used to enable/disable lplu | 963 * @hw: pointer to the HW structure 964 * @active: boolean used to enable/disable lplu |
966 * 967 * Success returns 0, Failure returns 1 968 * 969 * The low power link up (lplu) state is set to the power management level D3 970 * and SmartSpeed is disabled when active is true, else clear lplu for D3 971 * and enable Smartspeed. LPLU and Smartspeed are mutually exclusive. LPLU 972 * is used during Dx states where the power conservation is most important. 973 * During driver activity, SmartSpeed should be enabled so performance is --- 82 unchanged lines hidden (view full) --- 1056 } 1057 1058out: 1059 return ret_val; 1060} 1061 1062/** 1063 * e1000_setup_led_82541 - Configures SW controllable LED | 965 * 966 * Success returns 0, Failure returns 1 967 * 968 * The low power link up (lplu) state is set to the power management level D3 969 * and SmartSpeed is disabled when active is true, else clear lplu for D3 970 * and enable Smartspeed. LPLU and Smartspeed are mutually exclusive. LPLU 971 * is used during Dx states where the power conservation is most important. 972 * During driver activity, SmartSpeed should be enabled so performance is --- 82 unchanged lines hidden (view full) --- 1055 } 1056 1057out: 1058 return ret_val; 1059} 1060 1061/** 1062 * e1000_setup_led_82541 - Configures SW controllable LED |
1064 * @hw - pointer to the HW structure | 1063 * @hw: pointer to the HW structure |
1065 * 1066 * This prepares the SW controllable LED for use and saves the current state 1067 * of the LED so it can be later restored. This is a function pointer entry 1068 * point called by the api module. 1069 **/ 1070STATIC s32 1071e1000_setup_led_82541(struct e1000_hw *hw) 1072{ --- 20 unchanged lines hidden (view full) --- 1093 E1000_WRITE_REG(hw, E1000_LEDCTL, hw->mac.ledctl_mode1); 1094 1095out: 1096 return ret_val; 1097} 1098 1099/** 1100 * e1000_cleanup_led_82541 - Set LED config to default operation | 1064 * 1065 * This prepares the SW controllable LED for use and saves the current state 1066 * of the LED so it can be later restored. This is a function pointer entry 1067 * point called by the api module. 1068 **/ 1069STATIC s32 1070e1000_setup_led_82541(struct e1000_hw *hw) 1071{ --- 20 unchanged lines hidden (view full) --- 1092 E1000_WRITE_REG(hw, E1000_LEDCTL, hw->mac.ledctl_mode1); 1093 1094out: 1095 return ret_val; 1096} 1097 1098/** 1099 * e1000_cleanup_led_82541 - Set LED config to default operation |
1101 * @hw - pointer to the HW structure | 1100 * @hw: pointer to the HW structure |
1102 * 1103 * Remove the current LED configuration and set the LED configuration 1104 * to the default value, saved from the EEPROM. This is a function pointer 1105 * entry point called by the api module. 1106 **/ 1107STATIC s32 1108e1000_cleanup_led_82541(struct e1000_hw *hw) 1109{ --- 13 unchanged lines hidden (view full) --- 1123 E1000_WRITE_REG(hw, E1000_LEDCTL, hw->mac.ledctl_default); 1124 1125out: 1126 return ret_val; 1127} 1128 1129/** 1130 * e1000_phy_init_script_82541 - Initialize GbE PHY | 1101 * 1102 * Remove the current LED configuration and set the LED configuration 1103 * to the default value, saved from the EEPROM. This is a function pointer 1104 * entry point called by the api module. 1105 **/ 1106STATIC s32 1107e1000_cleanup_led_82541(struct e1000_hw *hw) 1108{ --- 13 unchanged lines hidden (view full) --- 1122 E1000_WRITE_REG(hw, E1000_LEDCTL, hw->mac.ledctl_default); 1123 1124out: 1125 return ret_val; 1126} 1127 1128/** 1129 * e1000_phy_init_script_82541 - Initialize GbE PHY |
1131 * @hw - pointer to the HW structure | 1130 * @hw: pointer to the HW structure |
1132 * 1133 * Initializes the IGP PHY. 1134 **/ 1135static s32 1136e1000_phy_init_script_82541(struct e1000_hw *hw) 1137{ 1138 struct e1000_dev_spec_82541 *dev_spec; 1139 u32 ret_val; --- 97 unchanged lines hidden (view full) --- 1237 } 1238 1239out: 1240 return ret_val; 1241} 1242 1243/** 1244 * e1000_init_script_state_82541 - Enable/Disable PHY init script | 1131 * 1132 * Initializes the IGP PHY. 1133 **/ 1134static s32 1135e1000_phy_init_script_82541(struct e1000_hw *hw) 1136{ 1137 struct e1000_dev_spec_82541 *dev_spec; 1138 u32 ret_val; --- 97 unchanged lines hidden (view full) --- 1236 } 1237 1238out: 1239 return ret_val; 1240} 1241 1242/** 1243 * e1000_init_script_state_82541 - Enable/Disable PHY init script |
1245 * @hw - pointer to the HW structure 1246 * @state - boolean value used to enable/disable PHY init script | 1244 * @hw: pointer to the HW structure 1245 * @state: boolean value used to enable/disable PHY init script |
1247 * 1248 * Allows the driver to enable/disable the PHY init script, if the PHY is an 1249 * IGP PHY. This is a function pointer entry point called by the api module. 1250 **/ 1251void 1252e1000_init_script_state_82541(struct e1000_hw *hw, boolean_t state) 1253{ 1254 struct e1000_dev_spec_82541 *dev_spec; --- 15 unchanged lines hidden (view full) --- 1270 dev_spec->phy_init_script = state; 1271 1272out: 1273 return; 1274} 1275 1276/** 1277 * e1000_clear_hw_cntrs_82541 - Clear device specific hardware counters | 1246 * 1247 * Allows the driver to enable/disable the PHY init script, if the PHY is an 1248 * IGP PHY. This is a function pointer entry point called by the api module. 1249 **/ 1250void 1251e1000_init_script_state_82541(struct e1000_hw *hw, boolean_t state) 1252{ 1253 struct e1000_dev_spec_82541 *dev_spec; --- 15 unchanged lines hidden (view full) --- 1269 dev_spec->phy_init_script = state; 1270 1271out: 1272 return; 1273} 1274 1275/** 1276 * e1000_clear_hw_cntrs_82541 - Clear device specific hardware counters |
1278 * @hw - pointer to the HW structure | 1277 * @hw: pointer to the HW structure |
1279 * 1280 * Clears the hardware counters by reading the counter registers. 1281 **/ 1282STATIC void 1283e1000_clear_hw_cntrs_82541(struct e1000_hw *hw) 1284{ 1285 volatile u32 temp; 1286 --- 28 unchanged lines hidden --- | 1278 * 1279 * Clears the hardware counters by reading the counter registers. 1280 **/ 1281STATIC void 1282e1000_clear_hw_cntrs_82541(struct e1000_hw *hw) 1283{ 1284 volatile u32 temp; 1285 --- 28 unchanged lines hidden --- |