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