1 /****************************************************************************** 2 SPDX-License-Identifier: BSD-3-Clause 3 4 Copyright (c) 2001-2020, Intel Corporation 5 All rights reserved. 6 7 Redistribution and use in source and binary forms, with or without 8 modification, are permitted provided that the following conditions are met: 9 10 1. Redistributions of source code must retain the above copyright notice, 11 this list of conditions and the following disclaimer. 12 13 2. Redistributions in binary form must reproduce the above copyright 14 notice, this list of conditions and the following disclaimer in the 15 documentation and/or other materials provided with the distribution. 16 17 3. Neither the name of the Intel Corporation nor the names of its 18 contributors may be used to endorse or promote products derived from 19 this software without specific prior written permission. 20 21 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 22 AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 23 IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 24 ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 25 LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 26 CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 27 SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 28 INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 29 CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 30 ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 31 POSSIBILITY OF SUCH DAMAGE. 32 33 ******************************************************************************/ 34 /*$FreeBSD$*/ 35 36 #include "e1000_api.h" 37 38 /** 39 * e1000_init_mac_params - Initialize MAC function pointers 40 * @hw: pointer to the HW structure 41 * 42 * This function initializes the function pointers for the MAC 43 * set of functions. Called by drivers or by e1000_setup_init_funcs. 44 **/ 45 s32 e1000_init_mac_params(struct e1000_hw *hw) 46 { 47 s32 ret_val = E1000_SUCCESS; 48 49 if (hw->mac.ops.init_params) { 50 ret_val = hw->mac.ops.init_params(hw); 51 if (ret_val) { 52 DEBUGOUT("MAC Initialization Error\n"); 53 goto out; 54 } 55 } else { 56 DEBUGOUT("mac.init_mac_params was NULL\n"); 57 ret_val = -E1000_ERR_CONFIG; 58 } 59 60 out: 61 return ret_val; 62 } 63 64 /** 65 * e1000_init_nvm_params - Initialize NVM function pointers 66 * @hw: pointer to the HW structure 67 * 68 * This function initializes the function pointers for the NVM 69 * set of functions. Called by drivers or by e1000_setup_init_funcs. 70 **/ 71 s32 e1000_init_nvm_params(struct e1000_hw *hw) 72 { 73 s32 ret_val = E1000_SUCCESS; 74 75 if (hw->nvm.ops.init_params) { 76 ret_val = hw->nvm.ops.init_params(hw); 77 if (ret_val) { 78 DEBUGOUT("NVM Initialization Error\n"); 79 goto out; 80 } 81 } else { 82 DEBUGOUT("nvm.init_nvm_params was NULL\n"); 83 ret_val = -E1000_ERR_CONFIG; 84 } 85 86 out: 87 return ret_val; 88 } 89 90 /** 91 * e1000_init_phy_params - Initialize PHY function pointers 92 * @hw: pointer to the HW structure 93 * 94 * This function initializes the function pointers for the PHY 95 * set of functions. Called by drivers or by e1000_setup_init_funcs. 96 **/ 97 s32 e1000_init_phy_params(struct e1000_hw *hw) 98 { 99 s32 ret_val = E1000_SUCCESS; 100 101 if (hw->phy.ops.init_params) { 102 ret_val = hw->phy.ops.init_params(hw); 103 if (ret_val) { 104 DEBUGOUT("PHY Initialization Error\n"); 105 goto out; 106 } 107 } else { 108 DEBUGOUT("phy.init_phy_params was NULL\n"); 109 ret_val = -E1000_ERR_CONFIG; 110 } 111 112 out: 113 return ret_val; 114 } 115 116 /** 117 * e1000_init_mbx_params - Initialize mailbox function pointers 118 * @hw: pointer to the HW structure 119 * 120 * This function initializes the function pointers for the PHY 121 * set of functions. Called by drivers or by e1000_setup_init_funcs. 122 **/ 123 s32 e1000_init_mbx_params(struct e1000_hw *hw) 124 { 125 s32 ret_val = E1000_SUCCESS; 126 127 if (hw->mbx.ops.init_params) { 128 ret_val = hw->mbx.ops.init_params(hw); 129 if (ret_val) { 130 DEBUGOUT("Mailbox Initialization Error\n"); 131 goto out; 132 } 133 } else { 134 DEBUGOUT("mbx.init_mbx_params was NULL\n"); 135 ret_val = -E1000_ERR_CONFIG; 136 } 137 138 out: 139 return ret_val; 140 } 141 142 /** 143 * e1000_set_mac_type - Sets MAC type 144 * @hw: pointer to the HW structure 145 * 146 * This function sets the mac type of the adapter based on the 147 * device ID stored in the hw structure. 148 * MUST BE FIRST FUNCTION CALLED (explicitly or through 149 * e1000_setup_init_funcs()). 150 **/ 151 s32 e1000_set_mac_type(struct e1000_hw *hw) 152 { 153 struct e1000_mac_info *mac = &hw->mac; 154 s32 ret_val = E1000_SUCCESS; 155 156 DEBUGFUNC("e1000_set_mac_type"); 157 158 switch (hw->device_id) { 159 case E1000_DEV_ID_82542: 160 mac->type = e1000_82542; 161 break; 162 case E1000_DEV_ID_82543GC_FIBER: 163 case E1000_DEV_ID_82543GC_COPPER: 164 mac->type = e1000_82543; 165 break; 166 case E1000_DEV_ID_82544EI_COPPER: 167 case E1000_DEV_ID_82544EI_FIBER: 168 case E1000_DEV_ID_82544GC_COPPER: 169 case E1000_DEV_ID_82544GC_LOM: 170 mac->type = e1000_82544; 171 break; 172 case E1000_DEV_ID_82540EM: 173 case E1000_DEV_ID_82540EM_LOM: 174 case E1000_DEV_ID_82540EP: 175 case E1000_DEV_ID_82540EP_LOM: 176 case E1000_DEV_ID_82540EP_LP: 177 mac->type = e1000_82540; 178 break; 179 case E1000_DEV_ID_82545EM_COPPER: 180 case E1000_DEV_ID_82545EM_FIBER: 181 mac->type = e1000_82545; 182 break; 183 case E1000_DEV_ID_82545GM_COPPER: 184 case E1000_DEV_ID_82545GM_FIBER: 185 case E1000_DEV_ID_82545GM_SERDES: 186 mac->type = e1000_82545_rev_3; 187 break; 188 case E1000_DEV_ID_82546EB_COPPER: 189 case E1000_DEV_ID_82546EB_FIBER: 190 case E1000_DEV_ID_82546EB_QUAD_COPPER: 191 mac->type = e1000_82546; 192 break; 193 case E1000_DEV_ID_82546GB_COPPER: 194 case E1000_DEV_ID_82546GB_FIBER: 195 case E1000_DEV_ID_82546GB_SERDES: 196 case E1000_DEV_ID_82546GB_PCIE: 197 case E1000_DEV_ID_82546GB_QUAD_COPPER: 198 case E1000_DEV_ID_82546GB_QUAD_COPPER_KSP3: 199 mac->type = e1000_82546_rev_3; 200 break; 201 case E1000_DEV_ID_82541EI: 202 case E1000_DEV_ID_82541EI_MOBILE: 203 case E1000_DEV_ID_82541ER_LOM: 204 mac->type = e1000_82541; 205 break; 206 case E1000_DEV_ID_82541ER: 207 case E1000_DEV_ID_82541GI: 208 case E1000_DEV_ID_82541GI_LF: 209 case E1000_DEV_ID_82541GI_MOBILE: 210 mac->type = e1000_82541_rev_2; 211 break; 212 case E1000_DEV_ID_82547EI: 213 case E1000_DEV_ID_82547EI_MOBILE: 214 mac->type = e1000_82547; 215 break; 216 case E1000_DEV_ID_82547GI: 217 mac->type = e1000_82547_rev_2; 218 break; 219 case E1000_DEV_ID_82571EB_COPPER: 220 case E1000_DEV_ID_82571EB_FIBER: 221 case E1000_DEV_ID_82571EB_SERDES: 222 case E1000_DEV_ID_82571EB_SERDES_DUAL: 223 case E1000_DEV_ID_82571EB_SERDES_QUAD: 224 case E1000_DEV_ID_82571EB_QUAD_COPPER: 225 case E1000_DEV_ID_82571PT_QUAD_COPPER: 226 case E1000_DEV_ID_82571EB_QUAD_FIBER: 227 case E1000_DEV_ID_82571EB_QUAD_COPPER_LP: 228 mac->type = e1000_82571; 229 break; 230 case E1000_DEV_ID_82572EI: 231 case E1000_DEV_ID_82572EI_COPPER: 232 case E1000_DEV_ID_82572EI_FIBER: 233 case E1000_DEV_ID_82572EI_SERDES: 234 mac->type = e1000_82572; 235 break; 236 case E1000_DEV_ID_82573E: 237 case E1000_DEV_ID_82573E_IAMT: 238 case E1000_DEV_ID_82573L: 239 mac->type = e1000_82573; 240 break; 241 case E1000_DEV_ID_82574L: 242 case E1000_DEV_ID_82574LA: 243 mac->type = e1000_82574; 244 break; 245 case E1000_DEV_ID_82583V: 246 mac->type = e1000_82583; 247 break; 248 case E1000_DEV_ID_80003ES2LAN_COPPER_DPT: 249 case E1000_DEV_ID_80003ES2LAN_SERDES_DPT: 250 case E1000_DEV_ID_80003ES2LAN_COPPER_SPT: 251 case E1000_DEV_ID_80003ES2LAN_SERDES_SPT: 252 mac->type = e1000_80003es2lan; 253 break; 254 case E1000_DEV_ID_ICH8_IFE: 255 case E1000_DEV_ID_ICH8_IFE_GT: 256 case E1000_DEV_ID_ICH8_IFE_G: 257 case E1000_DEV_ID_ICH8_IGP_M: 258 case E1000_DEV_ID_ICH8_IGP_M_AMT: 259 case E1000_DEV_ID_ICH8_IGP_AMT: 260 case E1000_DEV_ID_ICH8_IGP_C: 261 case E1000_DEV_ID_ICH8_82567V_3: 262 mac->type = e1000_ich8lan; 263 break; 264 case E1000_DEV_ID_ICH9_IFE: 265 case E1000_DEV_ID_ICH9_IFE_GT: 266 case E1000_DEV_ID_ICH9_IFE_G: 267 case E1000_DEV_ID_ICH9_IGP_M: 268 case E1000_DEV_ID_ICH9_IGP_M_AMT: 269 case E1000_DEV_ID_ICH9_IGP_M_V: 270 case E1000_DEV_ID_ICH9_IGP_AMT: 271 case E1000_DEV_ID_ICH9_BM: 272 case E1000_DEV_ID_ICH9_IGP_C: 273 case E1000_DEV_ID_ICH10_R_BM_LM: 274 case E1000_DEV_ID_ICH10_R_BM_LF: 275 case E1000_DEV_ID_ICH10_R_BM_V: 276 mac->type = e1000_ich9lan; 277 break; 278 case E1000_DEV_ID_ICH10_D_BM_LM: 279 case E1000_DEV_ID_ICH10_D_BM_LF: 280 case E1000_DEV_ID_ICH10_D_BM_V: 281 mac->type = e1000_ich10lan; 282 break; 283 case E1000_DEV_ID_PCH_D_HV_DM: 284 case E1000_DEV_ID_PCH_D_HV_DC: 285 case E1000_DEV_ID_PCH_M_HV_LM: 286 case E1000_DEV_ID_PCH_M_HV_LC: 287 mac->type = e1000_pchlan; 288 break; 289 case E1000_DEV_ID_PCH2_LV_LM: 290 case E1000_DEV_ID_PCH2_LV_V: 291 mac->type = e1000_pch2lan; 292 break; 293 case E1000_DEV_ID_PCH_LPT_I217_LM: 294 case E1000_DEV_ID_PCH_LPT_I217_V: 295 case E1000_DEV_ID_PCH_LPTLP_I218_LM: 296 case E1000_DEV_ID_PCH_LPTLP_I218_V: 297 case E1000_DEV_ID_PCH_I218_LM2: 298 case E1000_DEV_ID_PCH_I218_V2: 299 case E1000_DEV_ID_PCH_I218_LM3: 300 case E1000_DEV_ID_PCH_I218_V3: 301 mac->type = e1000_pch_lpt; 302 break; 303 case E1000_DEV_ID_PCH_SPT_I219_LM: 304 case E1000_DEV_ID_PCH_SPT_I219_V: 305 case E1000_DEV_ID_PCH_SPT_I219_LM2: 306 case E1000_DEV_ID_PCH_SPT_I219_V2: 307 case E1000_DEV_ID_PCH_LBG_I219_LM3: 308 case E1000_DEV_ID_PCH_SPT_I219_LM4: 309 case E1000_DEV_ID_PCH_SPT_I219_V4: 310 case E1000_DEV_ID_PCH_SPT_I219_LM5: 311 case E1000_DEV_ID_PCH_SPT_I219_V5: 312 case E1000_DEV_ID_PCH_CMP_I219_LM12: 313 case E1000_DEV_ID_PCH_CMP_I219_V12: 314 mac->type = e1000_pch_spt; 315 break; 316 case E1000_DEV_ID_PCH_CNP_I219_LM6: 317 case E1000_DEV_ID_PCH_CNP_I219_V6: 318 case E1000_DEV_ID_PCH_CNP_I219_LM7: 319 case E1000_DEV_ID_PCH_CNP_I219_V7: 320 case E1000_DEV_ID_PCH_ICP_I219_LM8: 321 case E1000_DEV_ID_PCH_ICP_I219_V8: 322 case E1000_DEV_ID_PCH_ICP_I219_LM9: 323 case E1000_DEV_ID_PCH_ICP_I219_V9: 324 case E1000_DEV_ID_PCH_CMP_I219_LM10: 325 case E1000_DEV_ID_PCH_CMP_I219_V10: 326 case E1000_DEV_ID_PCH_CMP_I219_LM11: 327 case E1000_DEV_ID_PCH_CMP_I219_V11: 328 mac->type = e1000_pch_cnp; 329 break; 330 case E1000_DEV_ID_PCH_TGP_I219_LM13: 331 case E1000_DEV_ID_PCH_TGP_I219_V13: 332 case E1000_DEV_ID_PCH_TGP_I219_LM14: 333 case E1000_DEV_ID_PCH_TGP_I219_V14: 334 case E1000_DEV_ID_PCH_TGP_I219_LM15: 335 case E1000_DEV_ID_PCH_TGP_I219_V15: 336 case E1000_DEV_ID_PCH_ADL_I219_LM16: 337 case E1000_DEV_ID_PCH_ADL_I219_V16: 338 case E1000_DEV_ID_PCH_RPL_I219_LM23: 339 case E1000_DEV_ID_PCH_RPL_I219_V23: 340 mac->type = e1000_pch_tgp; 341 break; 342 case E1000_DEV_ID_PCH_ADL_I219_LM17: 343 case E1000_DEV_ID_PCH_ADL_I219_V17: 344 case E1000_DEV_ID_PCH_RPL_I219_LM22: 345 case E1000_DEV_ID_PCH_RPL_I219_V22: 346 mac->type = e1000_pch_adp; 347 break; 348 case E1000_DEV_ID_PCH_MTP_I219_LM18: 349 case E1000_DEV_ID_PCH_MTP_I219_V18: 350 case E1000_DEV_ID_PCH_MTP_I219_LM19: 351 case E1000_DEV_ID_PCH_MTP_I219_V19: 352 case E1000_DEV_ID_PCH_LNL_I219_LM20: 353 case E1000_DEV_ID_PCH_LNL_I219_V20: 354 case E1000_DEV_ID_PCH_LNL_I219_LM21: 355 case E1000_DEV_ID_PCH_LNL_I219_V21: 356 mac->type = e1000_pch_mtp; 357 break; 358 case E1000_DEV_ID_PCH_ARL_I219_LM24: 359 case E1000_DEV_ID_PCH_ARL_I219_V24: 360 case E1000_DEV_ID_PCH_PTP_I219_LM25: 361 case E1000_DEV_ID_PCH_PTP_I219_V25: 362 case E1000_DEV_ID_PCH_PTP_I219_LM26: 363 case E1000_DEV_ID_PCH_PTP_I219_V26: 364 case E1000_DEV_ID_PCH_PTP_I219_LM27: 365 case E1000_DEV_ID_PCH_PTP_I219_V27: 366 mac->type = e1000_pch_ptp; 367 break; 368 case E1000_DEV_ID_82575EB_COPPER: 369 case E1000_DEV_ID_82575EB_FIBER_SERDES: 370 case E1000_DEV_ID_82575GB_QUAD_COPPER: 371 mac->type = e1000_82575; 372 break; 373 case E1000_DEV_ID_82576: 374 case E1000_DEV_ID_82576_FIBER: 375 case E1000_DEV_ID_82576_SERDES: 376 case E1000_DEV_ID_82576_QUAD_COPPER: 377 case E1000_DEV_ID_82576_QUAD_COPPER_ET2: 378 case E1000_DEV_ID_82576_NS: 379 case E1000_DEV_ID_82576_NS_SERDES: 380 case E1000_DEV_ID_82576_SERDES_QUAD: 381 mac->type = e1000_82576; 382 break; 383 case E1000_DEV_ID_82580_COPPER: 384 case E1000_DEV_ID_82580_FIBER: 385 case E1000_DEV_ID_82580_SERDES: 386 case E1000_DEV_ID_82580_SGMII: 387 case E1000_DEV_ID_82580_COPPER_DUAL: 388 case E1000_DEV_ID_82580_QUAD_FIBER: 389 case E1000_DEV_ID_DH89XXCC_SGMII: 390 case E1000_DEV_ID_DH89XXCC_SERDES: 391 case E1000_DEV_ID_DH89XXCC_BACKPLANE: 392 case E1000_DEV_ID_DH89XXCC_SFP: 393 mac->type = e1000_82580; 394 break; 395 case E1000_DEV_ID_I350_COPPER: 396 case E1000_DEV_ID_I350_FIBER: 397 case E1000_DEV_ID_I350_SERDES: 398 case E1000_DEV_ID_I350_SGMII: 399 case E1000_DEV_ID_I350_DA4: 400 mac->type = e1000_i350; 401 break; 402 case E1000_DEV_ID_I210_COPPER_FLASHLESS: 403 case E1000_DEV_ID_I210_SERDES_FLASHLESS: 404 case E1000_DEV_ID_I210_SGMII_FLASHLESS: 405 case E1000_DEV_ID_I210_COPPER: 406 case E1000_DEV_ID_I210_COPPER_OEM1: 407 case E1000_DEV_ID_I210_COPPER_IT: 408 case E1000_DEV_ID_I210_FIBER: 409 case E1000_DEV_ID_I210_SERDES: 410 case E1000_DEV_ID_I210_SGMII: 411 mac->type = e1000_i210; 412 break; 413 case E1000_DEV_ID_I211_COPPER: 414 mac->type = e1000_i211; 415 break; 416 case E1000_DEV_ID_82576_VF: 417 case E1000_DEV_ID_82576_VF_HV: 418 mac->type = e1000_vfadapt; 419 break; 420 case E1000_DEV_ID_I350_VF: 421 case E1000_DEV_ID_I350_VF_HV: 422 mac->type = e1000_vfadapt_i350; 423 break; 424 425 case E1000_DEV_ID_I354_BACKPLANE_1GBPS: 426 case E1000_DEV_ID_I354_SGMII: 427 case E1000_DEV_ID_I354_BACKPLANE_2_5GBPS: 428 mac->type = e1000_i354; 429 break; 430 default: 431 /* Should never have loaded on this device */ 432 ret_val = -E1000_ERR_MAC_INIT; 433 break; 434 } 435 436 return ret_val; 437 } 438 439 /** 440 * e1000_setup_init_funcs - Initializes function pointers 441 * @hw: pointer to the HW structure 442 * @init_device: true will initialize the rest of the function pointers 443 * getting the device ready for use. false will only set 444 * MAC type and the function pointers for the other init 445 * functions. Passing false will not generate any hardware 446 * reads or writes. 447 * 448 * This function must be called by a driver in order to use the rest 449 * of the 'shared' code files. Called by drivers only. 450 **/ 451 s32 e1000_setup_init_funcs(struct e1000_hw *hw, bool init_device) 452 { 453 s32 ret_val; 454 455 /* Can't do much good without knowing the MAC type. */ 456 ret_val = e1000_set_mac_type(hw); 457 if (ret_val) { 458 DEBUGOUT("ERROR: MAC type could not be set properly.\n"); 459 goto out; 460 } 461 462 if (!hw->hw_addr) { 463 DEBUGOUT("ERROR: Registers not mapped\n"); 464 ret_val = -E1000_ERR_CONFIG; 465 goto out; 466 } 467 468 /* 469 * Init function pointers to generic implementations. We do this first 470 * allowing a driver module to override it afterward. 471 */ 472 e1000_init_mac_ops_generic(hw); 473 e1000_init_phy_ops_generic(hw); 474 e1000_init_nvm_ops_generic(hw); 475 e1000_init_mbx_ops_generic(hw); 476 477 /* 478 * Set up the init function pointers. These are functions within the 479 * adapter family file that sets up function pointers for the rest of 480 * the functions in that family. 481 */ 482 switch (hw->mac.type) { 483 case e1000_82542: 484 e1000_init_function_pointers_82542(hw); 485 break; 486 case e1000_82543: 487 case e1000_82544: 488 e1000_init_function_pointers_82543(hw); 489 break; 490 case e1000_82540: 491 case e1000_82545: 492 case e1000_82545_rev_3: 493 case e1000_82546: 494 case e1000_82546_rev_3: 495 e1000_init_function_pointers_82540(hw); 496 break; 497 case e1000_82541: 498 case e1000_82541_rev_2: 499 case e1000_82547: 500 case e1000_82547_rev_2: 501 e1000_init_function_pointers_82541(hw); 502 break; 503 case e1000_82571: 504 case e1000_82572: 505 case e1000_82573: 506 case e1000_82574: 507 case e1000_82583: 508 e1000_init_function_pointers_82571(hw); 509 break; 510 case e1000_80003es2lan: 511 e1000_init_function_pointers_80003es2lan(hw); 512 break; 513 case e1000_ich8lan: 514 case e1000_ich9lan: 515 case e1000_ich10lan: 516 case e1000_pchlan: 517 case e1000_pch2lan: 518 case e1000_pch_lpt: 519 case e1000_pch_spt: 520 case e1000_pch_cnp: 521 case e1000_pch_tgp: 522 case e1000_pch_adp: 523 case e1000_pch_mtp: 524 case e1000_pch_ptp: 525 e1000_init_function_pointers_ich8lan(hw); 526 break; 527 case e1000_82575: 528 case e1000_82576: 529 case e1000_82580: 530 case e1000_i350: 531 case e1000_i354: 532 e1000_init_function_pointers_82575(hw); 533 break; 534 case e1000_i210: 535 case e1000_i211: 536 e1000_init_function_pointers_i210(hw); 537 break; 538 case e1000_vfadapt: 539 e1000_init_function_pointers_vf(hw); 540 break; 541 case e1000_vfadapt_i350: 542 e1000_init_function_pointers_vf(hw); 543 break; 544 default: 545 DEBUGOUT("Hardware not supported\n"); 546 ret_val = -E1000_ERR_CONFIG; 547 break; 548 } 549 550 /* 551 * Initialize the rest of the function pointers. These require some 552 * register reads/writes in some cases. 553 */ 554 if (!(ret_val) && init_device) { 555 ret_val = e1000_init_mac_params(hw); 556 if (ret_val) 557 goto out; 558 559 ret_val = e1000_init_nvm_params(hw); 560 if (ret_val) 561 goto out; 562 563 ret_val = e1000_init_phy_params(hw); 564 if (ret_val) 565 goto out; 566 567 ret_val = e1000_init_mbx_params(hw); 568 if (ret_val) 569 goto out; 570 } 571 572 out: 573 return ret_val; 574 } 575 576 /** 577 * e1000_get_bus_info - Obtain bus information for adapter 578 * @hw: pointer to the HW structure 579 * 580 * This will obtain information about the HW bus for which the 581 * adapter is attached and stores it in the hw structure. This is a 582 * function pointer entry point called by drivers. 583 **/ 584 s32 e1000_get_bus_info(struct e1000_hw *hw) 585 { 586 if (hw->mac.ops.get_bus_info) 587 return hw->mac.ops.get_bus_info(hw); 588 589 return E1000_SUCCESS; 590 } 591 592 /** 593 * e1000_clear_vfta - Clear VLAN filter table 594 * @hw: pointer to the HW structure 595 * 596 * This clears the VLAN filter table on the adapter. This is a function 597 * pointer entry point called by drivers. 598 **/ 599 void e1000_clear_vfta(struct e1000_hw *hw) 600 { 601 if (hw->mac.ops.clear_vfta) 602 hw->mac.ops.clear_vfta(hw); 603 } 604 605 /** 606 * e1000_write_vfta - Write value to VLAN filter table 607 * @hw: pointer to the HW structure 608 * @offset: the 32-bit offset in which to write the value to. 609 * @value: the 32-bit value to write at location offset. 610 * 611 * This writes a 32-bit value to a 32-bit offset in the VLAN filter 612 * table. This is a function pointer entry point called by drivers. 613 **/ 614 void e1000_write_vfta(struct e1000_hw *hw, u32 offset, u32 value) 615 { 616 if (hw->mac.ops.write_vfta) 617 hw->mac.ops.write_vfta(hw, offset, value); 618 } 619 620 /** 621 * e1000_update_mc_addr_list - Update Multicast addresses 622 * @hw: pointer to the HW structure 623 * @mc_addr_list: array of multicast addresses to program 624 * @mc_addr_count: number of multicast addresses to program 625 * 626 * Updates the Multicast Table Array. 627 * The caller must have a packed mc_addr_list of multicast addresses. 628 **/ 629 void e1000_update_mc_addr_list(struct e1000_hw *hw, u8 *mc_addr_list, 630 u32 mc_addr_count) 631 { 632 if (hw->mac.ops.update_mc_addr_list) 633 hw->mac.ops.update_mc_addr_list(hw, mc_addr_list, 634 mc_addr_count); 635 } 636 637 /** 638 * e1000_force_mac_fc - Force MAC flow control 639 * @hw: pointer to the HW structure 640 * 641 * Force the MAC's flow control settings. Currently no func pointer exists 642 * and all implementations are handled in the generic version of this 643 * function. 644 **/ 645 s32 e1000_force_mac_fc(struct e1000_hw *hw) 646 { 647 return e1000_force_mac_fc_generic(hw); 648 } 649 650 /** 651 * e1000_check_for_link - Check/Store link connection 652 * @hw: pointer to the HW structure 653 * 654 * This checks the link condition of the adapter and stores the 655 * results in the hw->mac structure. This is a function pointer entry 656 * point called by drivers. 657 **/ 658 s32 e1000_check_for_link(struct e1000_hw *hw) 659 { 660 if (hw->mac.ops.check_for_link) 661 return hw->mac.ops.check_for_link(hw); 662 663 return -E1000_ERR_CONFIG; 664 } 665 666 /** 667 * e1000_check_mng_mode - Check management mode 668 * @hw: pointer to the HW structure 669 * 670 * This checks if the adapter has manageability enabled. 671 * This is a function pointer entry point called by drivers. 672 **/ 673 bool e1000_check_mng_mode(struct e1000_hw *hw) 674 { 675 if (hw->mac.ops.check_mng_mode) 676 return hw->mac.ops.check_mng_mode(hw); 677 678 return false; 679 } 680 681 /** 682 * e1000_mng_write_dhcp_info - Writes DHCP info to host interface 683 * @hw: pointer to the HW structure 684 * @buffer: pointer to the host interface 685 * @length: size of the buffer 686 * 687 * Writes the DHCP information to the host interface. 688 **/ 689 s32 e1000_mng_write_dhcp_info(struct e1000_hw *hw, u8 *buffer, u16 length) 690 { 691 return e1000_mng_write_dhcp_info_generic(hw, buffer, length); 692 } 693 694 /** 695 * e1000_reset_hw - Reset hardware 696 * @hw: pointer to the HW structure 697 * 698 * This resets the hardware into a known state. This is a function pointer 699 * entry point called by drivers. 700 **/ 701 s32 e1000_reset_hw(struct e1000_hw *hw) 702 { 703 if (hw->mac.ops.reset_hw) 704 return hw->mac.ops.reset_hw(hw); 705 706 return -E1000_ERR_CONFIG; 707 } 708 709 /** 710 * e1000_init_hw - Initialize hardware 711 * @hw: pointer to the HW structure 712 * 713 * This inits the hardware readying it for operation. This is a function 714 * pointer entry point called by drivers. 715 **/ 716 s32 e1000_init_hw(struct e1000_hw *hw) 717 { 718 if (hw->mac.ops.init_hw) 719 return hw->mac.ops.init_hw(hw); 720 721 return -E1000_ERR_CONFIG; 722 } 723 724 /** 725 * e1000_setup_link - Configures link and flow control 726 * @hw: pointer to the HW structure 727 * 728 * This configures link and flow control settings for the adapter. This 729 * is a function pointer entry point called by drivers. While modules can 730 * also call this, they probably call their own version of this function. 731 **/ 732 s32 e1000_setup_link(struct e1000_hw *hw) 733 { 734 if (hw->mac.ops.setup_link) 735 return hw->mac.ops.setup_link(hw); 736 737 return -E1000_ERR_CONFIG; 738 } 739 740 /** 741 * e1000_get_speed_and_duplex - Returns current speed and duplex 742 * @hw: pointer to the HW structure 743 * @speed: pointer to a 16-bit value to store the speed 744 * @duplex: pointer to a 16-bit value to store the duplex. 745 * 746 * This returns the speed and duplex of the adapter in the two 'out' 747 * variables passed in. This is a function pointer entry point called 748 * by drivers. 749 **/ 750 s32 e1000_get_speed_and_duplex(struct e1000_hw *hw, u16 *speed, u16 *duplex) 751 { 752 if (hw->mac.ops.get_link_up_info) 753 return hw->mac.ops.get_link_up_info(hw, speed, duplex); 754 755 return -E1000_ERR_CONFIG; 756 } 757 758 /** 759 * e1000_setup_led - Configures SW controllable LED 760 * @hw: pointer to the HW structure 761 * 762 * This prepares the SW controllable LED for use and saves the current state 763 * of the LED so it can be later restored. This is a function pointer entry 764 * point called by drivers. 765 **/ 766 s32 e1000_setup_led(struct e1000_hw *hw) 767 { 768 if (hw->mac.ops.setup_led) 769 return hw->mac.ops.setup_led(hw); 770 771 return E1000_SUCCESS; 772 } 773 774 /** 775 * e1000_cleanup_led - Restores SW controllable LED 776 * @hw: pointer to the HW structure 777 * 778 * This restores the SW controllable LED to the value saved off by 779 * e1000_setup_led. This is a function pointer entry point called by drivers. 780 **/ 781 s32 e1000_cleanup_led(struct e1000_hw *hw) 782 { 783 if (hw->mac.ops.cleanup_led) 784 return hw->mac.ops.cleanup_led(hw); 785 786 return E1000_SUCCESS; 787 } 788 789 /** 790 * e1000_blink_led - Blink SW controllable LED 791 * @hw: pointer to the HW structure 792 * 793 * This starts the adapter LED blinking. Request the LED to be setup first 794 * and cleaned up after. This is a function pointer entry point called by 795 * drivers. 796 **/ 797 s32 e1000_blink_led(struct e1000_hw *hw) 798 { 799 if (hw->mac.ops.blink_led) 800 return hw->mac.ops.blink_led(hw); 801 802 return E1000_SUCCESS; 803 } 804 805 /** 806 * e1000_id_led_init - store LED configurations in SW 807 * @hw: pointer to the HW structure 808 * 809 * Initializes the LED config in SW. This is a function pointer entry point 810 * called by drivers. 811 **/ 812 s32 e1000_id_led_init(struct e1000_hw *hw) 813 { 814 if (hw->mac.ops.id_led_init) 815 return hw->mac.ops.id_led_init(hw); 816 817 return E1000_SUCCESS; 818 } 819 820 /** 821 * e1000_led_on - Turn on SW controllable LED 822 * @hw: pointer to the HW structure 823 * 824 * Turns the SW defined LED on. This is a function pointer entry point 825 * called by drivers. 826 **/ 827 s32 e1000_led_on(struct e1000_hw *hw) 828 { 829 if (hw->mac.ops.led_on) 830 return hw->mac.ops.led_on(hw); 831 832 return E1000_SUCCESS; 833 } 834 835 /** 836 * e1000_led_off - Turn off SW controllable LED 837 * @hw: pointer to the HW structure 838 * 839 * Turns the SW defined LED off. This is a function pointer entry point 840 * called by drivers. 841 **/ 842 s32 e1000_led_off(struct e1000_hw *hw) 843 { 844 if (hw->mac.ops.led_off) 845 return hw->mac.ops.led_off(hw); 846 847 return E1000_SUCCESS; 848 } 849 850 /** 851 * e1000_reset_adaptive - Reset adaptive IFS 852 * @hw: pointer to the HW structure 853 * 854 * Resets the adaptive IFS. Currently no func pointer exists and all 855 * implementations are handled in the generic version of this function. 856 **/ 857 void e1000_reset_adaptive(struct e1000_hw *hw) 858 { 859 e1000_reset_adaptive_generic(hw); 860 } 861 862 /** 863 * e1000_update_adaptive - Update adaptive IFS 864 * @hw: pointer to the HW structure 865 * 866 * Updates adapter IFS. Currently no func pointer exists and all 867 * implementations are handled in the generic version of this function. 868 **/ 869 void e1000_update_adaptive(struct e1000_hw *hw) 870 { 871 e1000_update_adaptive_generic(hw); 872 } 873 874 /** 875 * e1000_disable_pcie_master - Disable PCI-Express master access 876 * @hw: pointer to the HW structure 877 * 878 * Disables PCI-Express master access and verifies there are no pending 879 * requests. Currently no func pointer exists and all implementations are 880 * handled in the generic version of this function. 881 **/ 882 s32 e1000_disable_pcie_master(struct e1000_hw *hw) 883 { 884 return e1000_disable_pcie_master_generic(hw); 885 } 886 887 /** 888 * e1000_config_collision_dist - Configure collision distance 889 * @hw: pointer to the HW structure 890 * 891 * Configures the collision distance to the default value and is used 892 * during link setup. 893 **/ 894 void e1000_config_collision_dist(struct e1000_hw *hw) 895 { 896 if (hw->mac.ops.config_collision_dist) 897 hw->mac.ops.config_collision_dist(hw); 898 } 899 900 /** 901 * e1000_rar_set - Sets a receive address register 902 * @hw: pointer to the HW structure 903 * @addr: address to set the RAR to 904 * @index: the RAR to set 905 * 906 * Sets a Receive Address Register (RAR) to the specified address. 907 **/ 908 int e1000_rar_set(struct e1000_hw *hw, u8 *addr, u32 index) 909 { 910 if (hw->mac.ops.rar_set) 911 return hw->mac.ops.rar_set(hw, addr, index); 912 913 return E1000_SUCCESS; 914 } 915 916 /** 917 * e1000_validate_mdi_setting - Ensures valid MDI/MDIX SW state 918 * @hw: pointer to the HW structure 919 * 920 * Ensures that the MDI/MDIX SW state is valid. 921 **/ 922 s32 e1000_validate_mdi_setting(struct e1000_hw *hw) 923 { 924 if (hw->mac.ops.validate_mdi_setting) 925 return hw->mac.ops.validate_mdi_setting(hw); 926 927 return E1000_SUCCESS; 928 } 929 930 /** 931 * e1000_hash_mc_addr - Determines address location in multicast table 932 * @hw: pointer to the HW structure 933 * @mc_addr: Multicast address to hash. 934 * 935 * This hashes an address to determine its location in the multicast 936 * table. Currently no func pointer exists and all implementations 937 * are handled in the generic version of this function. 938 **/ 939 u32 e1000_hash_mc_addr(struct e1000_hw *hw, u8 *mc_addr) 940 { 941 return e1000_hash_mc_addr_generic(hw, mc_addr); 942 } 943 944 /** 945 * e1000_enable_tx_pkt_filtering - Enable packet filtering on TX 946 * @hw: pointer to the HW structure 947 * 948 * Enables packet filtering on transmit packets if manageability is enabled 949 * and host interface is enabled. 950 * Currently no func pointer exists and all implementations are handled in the 951 * generic version of this function. 952 **/ 953 bool e1000_enable_tx_pkt_filtering(struct e1000_hw *hw) 954 { 955 return e1000_enable_tx_pkt_filtering_generic(hw); 956 } 957 958 /** 959 * e1000_mng_host_if_write - Writes to the manageability host interface 960 * @hw: pointer to the HW structure 961 * @buffer: pointer to the host interface buffer 962 * @length: size of the buffer 963 * @offset: location in the buffer to write to 964 * @sum: sum of the data (not checksum) 965 * 966 * This function writes the buffer content at the offset given on the host if. 967 * It also does alignment considerations to do the writes in most efficient 968 * way. Also fills up the sum of the buffer in *buffer parameter. 969 **/ 970 s32 e1000_mng_host_if_write(struct e1000_hw *hw, u8 *buffer, u16 length, 971 u16 offset, u8 *sum) 972 { 973 return e1000_mng_host_if_write_generic(hw, buffer, length, offset, sum); 974 } 975 976 /** 977 * e1000_mng_write_cmd_header - Writes manageability command header 978 * @hw: pointer to the HW structure 979 * @hdr: pointer to the host interface command header 980 * 981 * Writes the command header after does the checksum calculation. 982 **/ 983 s32 e1000_mng_write_cmd_header(struct e1000_hw *hw, 984 struct e1000_host_mng_command_header *hdr) 985 { 986 return e1000_mng_write_cmd_header_generic(hw, hdr); 987 } 988 989 /** 990 * e1000_mng_enable_host_if - Checks host interface is enabled 991 * @hw: pointer to the HW structure 992 * 993 * Returns E1000_success upon success, else E1000_ERR_HOST_INTERFACE_COMMAND 994 * 995 * This function checks whether the HOST IF is enabled for command operation 996 * and also checks whether the previous command is completed. It busy waits 997 * in case of previous command is not completed. 998 **/ 999 s32 e1000_mng_enable_host_if(struct e1000_hw *hw) 1000 { 1001 return e1000_mng_enable_host_if_generic(hw); 1002 } 1003 1004 /** 1005 * e1000_set_obff_timer - Set Optimized Buffer Flush/Fill timer 1006 * @hw: pointer to the HW structure 1007 * @itr: u32 indicating itr value 1008 * 1009 * Set the OBFF timer based on the given interrupt rate. 1010 **/ 1011 s32 e1000_set_obff_timer(struct e1000_hw *hw, u32 itr) 1012 { 1013 if (hw->mac.ops.set_obff_timer) 1014 return hw->mac.ops.set_obff_timer(hw, itr); 1015 1016 return E1000_SUCCESS; 1017 } 1018 1019 /** 1020 * e1000_check_reset_block - Verifies PHY can be reset 1021 * @hw: pointer to the HW structure 1022 * 1023 * Checks if the PHY is in a state that can be reset or if manageability 1024 * has it tied up. This is a function pointer entry point called by drivers. 1025 **/ 1026 s32 e1000_check_reset_block(struct e1000_hw *hw) 1027 { 1028 if (hw->phy.ops.check_reset_block) 1029 return hw->phy.ops.check_reset_block(hw); 1030 1031 return E1000_SUCCESS; 1032 } 1033 1034 /** 1035 * e1000_read_phy_reg - Reads PHY register 1036 * @hw: pointer to the HW structure 1037 * @offset: the register to read 1038 * @data: the buffer to store the 16-bit read. 1039 * 1040 * Reads the PHY register and returns the value in data. 1041 * This is a function pointer entry point called by drivers. 1042 **/ 1043 s32 e1000_read_phy_reg(struct e1000_hw *hw, u32 offset, u16 *data) 1044 { 1045 if (hw->phy.ops.read_reg) 1046 return hw->phy.ops.read_reg(hw, offset, data); 1047 1048 return E1000_SUCCESS; 1049 } 1050 1051 /** 1052 * e1000_write_phy_reg - Writes PHY register 1053 * @hw: pointer to the HW structure 1054 * @offset: the register to write 1055 * @data: the value to write. 1056 * 1057 * Writes the PHY register at offset with the value in data. 1058 * This is a function pointer entry point called by drivers. 1059 **/ 1060 s32 e1000_write_phy_reg(struct e1000_hw *hw, u32 offset, u16 data) 1061 { 1062 if (hw->phy.ops.write_reg) 1063 return hw->phy.ops.write_reg(hw, offset, data); 1064 1065 return E1000_SUCCESS; 1066 } 1067 1068 /** 1069 * e1000_release_phy - Generic release PHY 1070 * @hw: pointer to the HW structure 1071 * 1072 * Return if silicon family does not require a semaphore when accessing the 1073 * PHY. 1074 **/ 1075 void e1000_release_phy(struct e1000_hw *hw) 1076 { 1077 if (hw->phy.ops.release) 1078 hw->phy.ops.release(hw); 1079 } 1080 1081 /** 1082 * e1000_acquire_phy - Generic acquire PHY 1083 * @hw: pointer to the HW structure 1084 * 1085 * Return success if silicon family does not require a semaphore when 1086 * accessing the PHY. 1087 **/ 1088 s32 e1000_acquire_phy(struct e1000_hw *hw) 1089 { 1090 if (hw->phy.ops.acquire) 1091 return hw->phy.ops.acquire(hw); 1092 1093 return E1000_SUCCESS; 1094 } 1095 1096 /** 1097 * e1000_cfg_on_link_up - Configure PHY upon link up 1098 * @hw: pointer to the HW structure 1099 **/ 1100 s32 e1000_cfg_on_link_up(struct e1000_hw *hw) 1101 { 1102 if (hw->phy.ops.cfg_on_link_up) 1103 return hw->phy.ops.cfg_on_link_up(hw); 1104 1105 return E1000_SUCCESS; 1106 } 1107 1108 /** 1109 * e1000_read_kmrn_reg - Reads register using Kumeran interface 1110 * @hw: pointer to the HW structure 1111 * @offset: the register to read 1112 * @data: the location to store the 16-bit value read. 1113 * 1114 * Reads a register out of the Kumeran interface. Currently no func pointer 1115 * exists and all implementations are handled in the generic version of 1116 * this function. 1117 **/ 1118 s32 e1000_read_kmrn_reg(struct e1000_hw *hw, u32 offset, u16 *data) 1119 { 1120 return e1000_read_kmrn_reg_generic(hw, offset, data); 1121 } 1122 1123 /** 1124 * e1000_write_kmrn_reg - Writes register using Kumeran interface 1125 * @hw: pointer to the HW structure 1126 * @offset: the register to write 1127 * @data: the value to write. 1128 * 1129 * Writes a register to the Kumeran interface. Currently no func pointer 1130 * exists and all implementations are handled in the generic version of 1131 * this function. 1132 **/ 1133 s32 e1000_write_kmrn_reg(struct e1000_hw *hw, u32 offset, u16 data) 1134 { 1135 return e1000_write_kmrn_reg_generic(hw, offset, data); 1136 } 1137 1138 /** 1139 * e1000_get_cable_length - Retrieves cable length estimation 1140 * @hw: pointer to the HW structure 1141 * 1142 * This function estimates the cable length and stores them in 1143 * hw->phy.min_length and hw->phy.max_length. This is a function pointer 1144 * entry point called by drivers. 1145 **/ 1146 s32 e1000_get_cable_length(struct e1000_hw *hw) 1147 { 1148 if (hw->phy.ops.get_cable_length) 1149 return hw->phy.ops.get_cable_length(hw); 1150 1151 return E1000_SUCCESS; 1152 } 1153 1154 /** 1155 * e1000_get_phy_info - Retrieves PHY information from registers 1156 * @hw: pointer to the HW structure 1157 * 1158 * This function gets some information from various PHY registers and 1159 * populates hw->phy values with it. This is a function pointer entry 1160 * point called by drivers. 1161 **/ 1162 s32 e1000_get_phy_info(struct e1000_hw *hw) 1163 { 1164 if (hw->phy.ops.get_info) 1165 return hw->phy.ops.get_info(hw); 1166 1167 return E1000_SUCCESS; 1168 } 1169 1170 /** 1171 * e1000_phy_hw_reset - Hard PHY reset 1172 * @hw: pointer to the HW structure 1173 * 1174 * Performs a hard PHY reset. This is a function pointer entry point called 1175 * by drivers. 1176 **/ 1177 s32 e1000_phy_hw_reset(struct e1000_hw *hw) 1178 { 1179 if (hw->phy.ops.reset) 1180 return hw->phy.ops.reset(hw); 1181 1182 return E1000_SUCCESS; 1183 } 1184 1185 /** 1186 * e1000_phy_commit - Soft PHY reset 1187 * @hw: pointer to the HW structure 1188 * 1189 * Performs a soft PHY reset on those that apply. This is a function pointer 1190 * entry point called by drivers. 1191 **/ 1192 s32 e1000_phy_commit(struct e1000_hw *hw) 1193 { 1194 if (hw->phy.ops.commit) 1195 return hw->phy.ops.commit(hw); 1196 1197 return E1000_SUCCESS; 1198 } 1199 1200 /** 1201 * e1000_set_d0_lplu_state - Sets low power link up state for D0 1202 * @hw: pointer to the HW structure 1203 * @active: boolean used to enable/disable lplu 1204 * 1205 * Success returns 0, Failure returns 1 1206 * 1207 * The low power link up (lplu) state is set to the power management level D0 1208 * and SmartSpeed is disabled when active is true, else clear lplu for D0 1209 * and enable Smartspeed. LPLU and Smartspeed are mutually exclusive. LPLU 1210 * is used during Dx states where the power conservation is most important. 1211 * During driver activity, SmartSpeed should be enabled so performance is 1212 * maintained. This is a function pointer entry point called by drivers. 1213 **/ 1214 s32 e1000_set_d0_lplu_state(struct e1000_hw *hw, bool active) 1215 { 1216 if (hw->phy.ops.set_d0_lplu_state) 1217 return hw->phy.ops.set_d0_lplu_state(hw, active); 1218 1219 return E1000_SUCCESS; 1220 } 1221 1222 /** 1223 * e1000_set_d3_lplu_state - Sets low power link up state for D3 1224 * @hw: pointer to the HW structure 1225 * @active: boolean used to enable/disable lplu 1226 * 1227 * Success returns 0, Failure returns 1 1228 * 1229 * The low power link up (lplu) state is set to the power management level D3 1230 * and SmartSpeed is disabled when active is true, else clear lplu for D3 1231 * and enable Smartspeed. LPLU and Smartspeed are mutually exclusive. LPLU 1232 * is used during Dx states where the power conservation is most important. 1233 * During driver activity, SmartSpeed should be enabled so performance is 1234 * maintained. This is a function pointer entry point called by drivers. 1235 **/ 1236 s32 e1000_set_d3_lplu_state(struct e1000_hw *hw, bool active) 1237 { 1238 if (hw->phy.ops.set_d3_lplu_state) 1239 return hw->phy.ops.set_d3_lplu_state(hw, active); 1240 1241 return E1000_SUCCESS; 1242 } 1243 1244 /** 1245 * e1000_read_mac_addr - Reads MAC address 1246 * @hw: pointer to the HW structure 1247 * 1248 * Reads the MAC address out of the adapter and stores it in the HW structure. 1249 * Currently no func pointer exists and all implementations are handled in the 1250 * generic version of this function. 1251 **/ 1252 s32 e1000_read_mac_addr(struct e1000_hw *hw) 1253 { 1254 if (hw->mac.ops.read_mac_addr) 1255 return hw->mac.ops.read_mac_addr(hw); 1256 1257 return e1000_read_mac_addr_generic(hw); 1258 } 1259 1260 /** 1261 * e1000_read_pba_string - Read device part number string 1262 * @hw: pointer to the HW structure 1263 * @pba_num: pointer to device part number 1264 * @pba_num_size: size of part number buffer 1265 * 1266 * Reads the product board assembly (PBA) number from the EEPROM and stores 1267 * the value in pba_num. 1268 * Currently no func pointer exists and all implementations are handled in the 1269 * generic version of this function. 1270 **/ 1271 s32 e1000_read_pba_string(struct e1000_hw *hw, u8 *pba_num, u32 pba_num_size) 1272 { 1273 return e1000_read_pba_string_generic(hw, pba_num, pba_num_size); 1274 } 1275 1276 /** 1277 * e1000_read_pba_length - Read device part number string length 1278 * @hw: pointer to the HW structure 1279 * @pba_num_size: size of part number buffer 1280 * 1281 * Reads the product board assembly (PBA) number length from the EEPROM and 1282 * stores the value in pba_num. 1283 * Currently no func pointer exists and all implementations are handled in the 1284 * generic version of this function. 1285 **/ 1286 s32 e1000_read_pba_length(struct e1000_hw *hw, u32 *pba_num_size) 1287 { 1288 return e1000_read_pba_length_generic(hw, pba_num_size); 1289 } 1290 1291 /** 1292 * e1000_read_pba_num - Read device part number 1293 * @hw: pointer to the HW structure 1294 * @pba_num: pointer to device part number 1295 * 1296 * Reads the product board assembly (PBA) number from the EEPROM and stores 1297 * the value in pba_num. 1298 * Currently no func pointer exists and all implementations are handled in the 1299 * generic version of this function. 1300 **/ 1301 s32 e1000_read_pba_num(struct e1000_hw *hw, u32 *pba_num) 1302 { 1303 return e1000_read_pba_num_generic(hw, pba_num); 1304 } 1305 1306 /** 1307 * e1000_validate_nvm_checksum - Verifies NVM (EEPROM) checksum 1308 * @hw: pointer to the HW structure 1309 * 1310 * Validates the NVM checksum is correct. This is a function pointer entry 1311 * point called by drivers. 1312 **/ 1313 s32 e1000_validate_nvm_checksum(struct e1000_hw *hw) 1314 { 1315 if (hw->nvm.ops.validate) 1316 return hw->nvm.ops.validate(hw); 1317 1318 return -E1000_ERR_CONFIG; 1319 } 1320 1321 /** 1322 * e1000_update_nvm_checksum - Updates NVM (EEPROM) checksum 1323 * @hw: pointer to the HW structure 1324 * 1325 * Updates the NVM checksum. Currently no func pointer exists and all 1326 * implementations are handled in the generic version of this function. 1327 **/ 1328 s32 e1000_update_nvm_checksum(struct e1000_hw *hw) 1329 { 1330 if (hw->nvm.ops.update) 1331 return hw->nvm.ops.update(hw); 1332 1333 return -E1000_ERR_CONFIG; 1334 } 1335 1336 /** 1337 * e1000_reload_nvm - Reloads EEPROM 1338 * @hw: pointer to the HW structure 1339 * 1340 * Reloads the EEPROM by setting the "Reinitialize from EEPROM" bit in the 1341 * extended control register. 1342 **/ 1343 void e1000_reload_nvm(struct e1000_hw *hw) 1344 { 1345 if (hw->nvm.ops.reload) 1346 hw->nvm.ops.reload(hw); 1347 } 1348 1349 /** 1350 * e1000_read_nvm - Reads NVM (EEPROM) 1351 * @hw: pointer to the HW structure 1352 * @offset: the word offset to read 1353 * @words: number of 16-bit words to read 1354 * @data: pointer to the properly sized buffer for the data. 1355 * 1356 * Reads 16-bit chunks of data from the NVM (EEPROM). This is a function 1357 * pointer entry point called by drivers. 1358 **/ 1359 s32 e1000_read_nvm(struct e1000_hw *hw, u16 offset, u16 words, u16 *data) 1360 { 1361 if (hw->nvm.ops.read) 1362 return hw->nvm.ops.read(hw, offset, words, data); 1363 1364 return -E1000_ERR_CONFIG; 1365 } 1366 1367 /** 1368 * e1000_write_nvm - Writes to NVM (EEPROM) 1369 * @hw: pointer to the HW structure 1370 * @offset: the word offset to read 1371 * @words: number of 16-bit words to write 1372 * @data: pointer to the properly sized buffer for the data. 1373 * 1374 * Writes 16-bit chunks of data to the NVM (EEPROM). This is a function 1375 * pointer entry point called by drivers. 1376 **/ 1377 s32 e1000_write_nvm(struct e1000_hw *hw, u16 offset, u16 words, u16 *data) 1378 { 1379 if (hw->nvm.ops.write) 1380 return hw->nvm.ops.write(hw, offset, words, data); 1381 1382 return E1000_SUCCESS; 1383 } 1384 1385 /** 1386 * e1000_write_8bit_ctrl_reg - Writes 8bit Control register 1387 * @hw: pointer to the HW structure 1388 * @reg: 32bit register offset 1389 * @offset: the register to write 1390 * @data: the value to write. 1391 * 1392 * Writes the PHY register at offset with the value in data. 1393 * This is a function pointer entry point called by drivers. 1394 **/ 1395 s32 e1000_write_8bit_ctrl_reg(struct e1000_hw *hw, u32 reg, u32 offset, 1396 u8 data) 1397 { 1398 return e1000_write_8bit_ctrl_reg_generic(hw, reg, offset, data); 1399 } 1400 1401 /** 1402 * e1000_power_up_phy - Restores link in case of PHY power down 1403 * @hw: pointer to the HW structure 1404 * 1405 * The phy may be powered down to save power, to turn off link when the 1406 * driver is unloaded, or wake on lan is not enabled (among others). 1407 **/ 1408 void e1000_power_up_phy(struct e1000_hw *hw) 1409 { 1410 if (hw->phy.ops.power_up) 1411 hw->phy.ops.power_up(hw); 1412 1413 e1000_setup_link(hw); 1414 } 1415 1416 /** 1417 * e1000_power_down_phy - Power down PHY 1418 * @hw: pointer to the HW structure 1419 * 1420 * The phy may be powered down to save power, to turn off link when the 1421 * driver is unloaded, or wake on lan is not enabled (among others). 1422 **/ 1423 void e1000_power_down_phy(struct e1000_hw *hw) 1424 { 1425 if (hw->phy.ops.power_down) 1426 hw->phy.ops.power_down(hw); 1427 } 1428 1429 /** 1430 * e1000_power_up_fiber_serdes_link - Power up serdes link 1431 * @hw: pointer to the HW structure 1432 * 1433 * Power on the optics and PCS. 1434 **/ 1435 void e1000_power_up_fiber_serdes_link(struct e1000_hw *hw) 1436 { 1437 if (hw->mac.ops.power_up_serdes) 1438 hw->mac.ops.power_up_serdes(hw); 1439 } 1440 1441 /** 1442 * e1000_shutdown_fiber_serdes_link - Remove link during power down 1443 * @hw: pointer to the HW structure 1444 * 1445 * Shutdown the optics and PCS on driver unload. 1446 **/ 1447 void e1000_shutdown_fiber_serdes_link(struct e1000_hw *hw) 1448 { 1449 if (hw->mac.ops.shutdown_serdes) 1450 hw->mac.ops.shutdown_serdes(hw); 1451 } 1452 1453