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