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 **/
45s32 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
60out:
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 **/
71s32 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
86out:
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 **/
97s32 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
112out:
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 **/
123s32 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
138out:
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 **/
151s32 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		mac->type = e1000_pch_tgp;
337		break;
338	case E1000_DEV_ID_PCH_ADL_I219_LM16:
339	case E1000_DEV_ID_PCH_ADL_I219_V16:
340	case E1000_DEV_ID_PCH_ADL_I219_LM17:
341	case E1000_DEV_ID_PCH_ADL_I219_V17:
342		mac->type = e1000_pch_adp;
343		break;
344	case E1000_DEV_ID_PCH_MTP_I219_LM18:
345	case E1000_DEV_ID_PCH_MTP_I219_V18:
346	case E1000_DEV_ID_PCH_MTP_I219_LM19:
347	case E1000_DEV_ID_PCH_MTP_I219_V19:
348		mac->type = e1000_pch_mtp;
349		break;
350	case E1000_DEV_ID_82575EB_COPPER:
351	case E1000_DEV_ID_82575EB_FIBER_SERDES:
352	case E1000_DEV_ID_82575GB_QUAD_COPPER:
353		mac->type = e1000_82575;
354		break;
355	case E1000_DEV_ID_82576:
356	case E1000_DEV_ID_82576_FIBER:
357	case E1000_DEV_ID_82576_SERDES:
358	case E1000_DEV_ID_82576_QUAD_COPPER:
359	case E1000_DEV_ID_82576_QUAD_COPPER_ET2:
360	case E1000_DEV_ID_82576_NS:
361	case E1000_DEV_ID_82576_NS_SERDES:
362	case E1000_DEV_ID_82576_SERDES_QUAD:
363		mac->type = e1000_82576;
364		break;
365	case E1000_DEV_ID_82580_COPPER:
366	case E1000_DEV_ID_82580_FIBER:
367	case E1000_DEV_ID_82580_SERDES:
368	case E1000_DEV_ID_82580_SGMII:
369	case E1000_DEV_ID_82580_COPPER_DUAL:
370	case E1000_DEV_ID_82580_QUAD_FIBER:
371	case E1000_DEV_ID_DH89XXCC_SGMII:
372	case E1000_DEV_ID_DH89XXCC_SERDES:
373	case E1000_DEV_ID_DH89XXCC_BACKPLANE:
374	case E1000_DEV_ID_DH89XXCC_SFP:
375		mac->type = e1000_82580;
376		break;
377	case E1000_DEV_ID_I350_COPPER:
378	case E1000_DEV_ID_I350_FIBER:
379	case E1000_DEV_ID_I350_SERDES:
380	case E1000_DEV_ID_I350_SGMII:
381	case E1000_DEV_ID_I350_DA4:
382		mac->type = e1000_i350;
383		break;
384	case E1000_DEV_ID_I210_COPPER_FLASHLESS:
385	case E1000_DEV_ID_I210_SERDES_FLASHLESS:
386	case E1000_DEV_ID_I210_SGMII_FLASHLESS:
387	case E1000_DEV_ID_I210_COPPER:
388	case E1000_DEV_ID_I210_COPPER_OEM1:
389	case E1000_DEV_ID_I210_COPPER_IT:
390	case E1000_DEV_ID_I210_FIBER:
391	case E1000_DEV_ID_I210_SERDES:
392	case E1000_DEV_ID_I210_SGMII:
393		mac->type = e1000_i210;
394		break;
395	case E1000_DEV_ID_I211_COPPER:
396		mac->type = e1000_i211;
397		break;
398	case E1000_DEV_ID_82576_VF:
399	case E1000_DEV_ID_82576_VF_HV:
400		mac->type = e1000_vfadapt;
401		break;
402	case E1000_DEV_ID_I350_VF:
403	case E1000_DEV_ID_I350_VF_HV:
404		mac->type = e1000_vfadapt_i350;
405		break;
406
407	case E1000_DEV_ID_I354_BACKPLANE_1GBPS:
408	case E1000_DEV_ID_I354_SGMII:
409	case E1000_DEV_ID_I354_BACKPLANE_2_5GBPS:
410		mac->type = e1000_i354;
411		break;
412	default:
413		/* Should never have loaded on this device */
414		ret_val = -E1000_ERR_MAC_INIT;
415		break;
416	}
417
418	return ret_val;
419}
420
421/**
422 *  e1000_setup_init_funcs - Initializes function pointers
423 *  @hw: pointer to the HW structure
424 *  @init_device: true will initialize the rest of the function pointers
425 *		  getting the device ready for use.  false will only set
426 *		  MAC type and the function pointers for the other init
427 *		  functions.  Passing false will not generate any hardware
428 *		  reads or writes.
429 *
430 *  This function must be called by a driver in order to use the rest
431 *  of the 'shared' code files. Called by drivers only.
432 **/
433s32 e1000_setup_init_funcs(struct e1000_hw *hw, bool init_device)
434{
435	s32 ret_val;
436
437	/* Can't do much good without knowing the MAC type. */
438	ret_val = e1000_set_mac_type(hw);
439	if (ret_val) {
440		DEBUGOUT("ERROR: MAC type could not be set properly.\n");
441		goto out;
442	}
443
444	if (!hw->hw_addr) {
445		DEBUGOUT("ERROR: Registers not mapped\n");
446		ret_val = -E1000_ERR_CONFIG;
447		goto out;
448	}
449
450	/*
451	 * Init function pointers to generic implementations. We do this first
452	 * allowing a driver module to override it afterward.
453	 */
454	e1000_init_mac_ops_generic(hw);
455	e1000_init_phy_ops_generic(hw);
456	e1000_init_nvm_ops_generic(hw);
457	e1000_init_mbx_ops_generic(hw);
458
459	/*
460	 * Set up the init function pointers. These are functions within the
461	 * adapter family file that sets up function pointers for the rest of
462	 * the functions in that family.
463	 */
464	switch (hw->mac.type) {
465	case e1000_82542:
466		e1000_init_function_pointers_82542(hw);
467		break;
468	case e1000_82543:
469	case e1000_82544:
470		e1000_init_function_pointers_82543(hw);
471		break;
472	case e1000_82540:
473	case e1000_82545:
474	case e1000_82545_rev_3:
475	case e1000_82546:
476	case e1000_82546_rev_3:
477		e1000_init_function_pointers_82540(hw);
478		break;
479	case e1000_82541:
480	case e1000_82541_rev_2:
481	case e1000_82547:
482	case e1000_82547_rev_2:
483		e1000_init_function_pointers_82541(hw);
484		break;
485	case e1000_82571:
486	case e1000_82572:
487	case e1000_82573:
488	case e1000_82574:
489	case e1000_82583:
490		e1000_init_function_pointers_82571(hw);
491		break;
492	case e1000_80003es2lan:
493		e1000_init_function_pointers_80003es2lan(hw);
494		break;
495	case e1000_ich8lan:
496	case e1000_ich9lan:
497	case e1000_ich10lan:
498	case e1000_pchlan:
499	case e1000_pch2lan:
500	case e1000_pch_lpt:
501	case e1000_pch_spt:
502	case e1000_pch_cnp:
503	case e1000_pch_tgp:
504	case e1000_pch_adp:
505	case e1000_pch_mtp:
506		e1000_init_function_pointers_ich8lan(hw);
507		break;
508	case e1000_82575:
509	case e1000_82576:
510	case e1000_82580:
511	case e1000_i350:
512	case e1000_i354:
513		e1000_init_function_pointers_82575(hw);
514		break;
515	case e1000_i210:
516	case e1000_i211:
517		e1000_init_function_pointers_i210(hw);
518		break;
519	case e1000_vfadapt:
520		e1000_init_function_pointers_vf(hw);
521		break;
522	case e1000_vfadapt_i350:
523		e1000_init_function_pointers_vf(hw);
524		break;
525	default:
526		DEBUGOUT("Hardware not supported\n");
527		ret_val = -E1000_ERR_CONFIG;
528		break;
529	}
530
531	/*
532	 * Initialize the rest of the function pointers. These require some
533	 * register reads/writes in some cases.
534	 */
535	if (!(ret_val) && init_device) {
536		ret_val = e1000_init_mac_params(hw);
537		if (ret_val)
538			goto out;
539
540		ret_val = e1000_init_nvm_params(hw);
541		if (ret_val)
542			goto out;
543
544		ret_val = e1000_init_phy_params(hw);
545		if (ret_val)
546			goto out;
547
548		ret_val = e1000_init_mbx_params(hw);
549		if (ret_val)
550			goto out;
551	}
552
553out:
554	return ret_val;
555}
556
557/**
558 *  e1000_get_bus_info - Obtain bus information for adapter
559 *  @hw: pointer to the HW structure
560 *
561 *  This will obtain information about the HW bus for which the
562 *  adapter is attached and stores it in the hw structure. This is a
563 *  function pointer entry point called by drivers.
564 **/
565s32 e1000_get_bus_info(struct e1000_hw *hw)
566{
567	if (hw->mac.ops.get_bus_info)
568		return hw->mac.ops.get_bus_info(hw);
569
570	return E1000_SUCCESS;
571}
572
573/**
574 *  e1000_clear_vfta - Clear VLAN filter table
575 *  @hw: pointer to the HW structure
576 *
577 *  This clears the VLAN filter table on the adapter. This is a function
578 *  pointer entry point called by drivers.
579 **/
580void e1000_clear_vfta(struct e1000_hw *hw)
581{
582	if (hw->mac.ops.clear_vfta)
583		hw->mac.ops.clear_vfta(hw);
584}
585
586/**
587 *  e1000_write_vfta - Write value to VLAN filter table
588 *  @hw: pointer to the HW structure
589 *  @offset: the 32-bit offset in which to write the value to.
590 *  @value: the 32-bit value to write at location offset.
591 *
592 *  This writes a 32-bit value to a 32-bit offset in the VLAN filter
593 *  table. This is a function pointer entry point called by drivers.
594 **/
595void e1000_write_vfta(struct e1000_hw *hw, u32 offset, u32 value)
596{
597	if (hw->mac.ops.write_vfta)
598		hw->mac.ops.write_vfta(hw, offset, value);
599}
600
601/**
602 *  e1000_update_mc_addr_list - Update Multicast addresses
603 *  @hw: pointer to the HW structure
604 *  @mc_addr_list: array of multicast addresses to program
605 *  @mc_addr_count: number of multicast addresses to program
606 *
607 *  Updates the Multicast Table Array.
608 *  The caller must have a packed mc_addr_list of multicast addresses.
609 **/
610void e1000_update_mc_addr_list(struct e1000_hw *hw, u8 *mc_addr_list,
611			       u32 mc_addr_count)
612{
613	if (hw->mac.ops.update_mc_addr_list)
614		hw->mac.ops.update_mc_addr_list(hw, mc_addr_list,
615						mc_addr_count);
616}
617
618/**
619 *  e1000_force_mac_fc - Force MAC flow control
620 *  @hw: pointer to the HW structure
621 *
622 *  Force the MAC's flow control settings. Currently no func pointer exists
623 *  and all implementations are handled in the generic version of this
624 *  function.
625 **/
626s32 e1000_force_mac_fc(struct e1000_hw *hw)
627{
628	return e1000_force_mac_fc_generic(hw);
629}
630
631/**
632 *  e1000_check_for_link - Check/Store link connection
633 *  @hw: pointer to the HW structure
634 *
635 *  This checks the link condition of the adapter and stores the
636 *  results in the hw->mac structure. This is a function pointer entry
637 *  point called by drivers.
638 **/
639s32 e1000_check_for_link(struct e1000_hw *hw)
640{
641	if (hw->mac.ops.check_for_link)
642		return hw->mac.ops.check_for_link(hw);
643
644	return -E1000_ERR_CONFIG;
645}
646
647/**
648 *  e1000_check_mng_mode - Check management mode
649 *  @hw: pointer to the HW structure
650 *
651 *  This checks if the adapter has manageability enabled.
652 *  This is a function pointer entry point called by drivers.
653 **/
654bool e1000_check_mng_mode(struct e1000_hw *hw)
655{
656	if (hw->mac.ops.check_mng_mode)
657		return hw->mac.ops.check_mng_mode(hw);
658
659	return false;
660}
661
662/**
663 *  e1000_mng_write_dhcp_info - Writes DHCP info to host interface
664 *  @hw: pointer to the HW structure
665 *  @buffer: pointer to the host interface
666 *  @length: size of the buffer
667 *
668 *  Writes the DHCP information to the host interface.
669 **/
670s32 e1000_mng_write_dhcp_info(struct e1000_hw *hw, u8 *buffer, u16 length)
671{
672	return e1000_mng_write_dhcp_info_generic(hw, buffer, length);
673}
674
675/**
676 *  e1000_reset_hw - Reset hardware
677 *  @hw: pointer to the HW structure
678 *
679 *  This resets the hardware into a known state. This is a function pointer
680 *  entry point called by drivers.
681 **/
682s32 e1000_reset_hw(struct e1000_hw *hw)
683{
684	if (hw->mac.ops.reset_hw)
685		return hw->mac.ops.reset_hw(hw);
686
687	return -E1000_ERR_CONFIG;
688}
689
690/**
691 *  e1000_init_hw - Initialize hardware
692 *  @hw: pointer to the HW structure
693 *
694 *  This inits the hardware readying it for operation. This is a function
695 *  pointer entry point called by drivers.
696 **/
697s32 e1000_init_hw(struct e1000_hw *hw)
698{
699	if (hw->mac.ops.init_hw)
700		return hw->mac.ops.init_hw(hw);
701
702	return -E1000_ERR_CONFIG;
703}
704
705/**
706 *  e1000_setup_link - Configures link and flow control
707 *  @hw: pointer to the HW structure
708 *
709 *  This configures link and flow control settings for the adapter. This
710 *  is a function pointer entry point called by drivers. While modules can
711 *  also call this, they probably call their own version of this function.
712 **/
713s32 e1000_setup_link(struct e1000_hw *hw)
714{
715	if (hw->mac.ops.setup_link)
716		return hw->mac.ops.setup_link(hw);
717
718	return -E1000_ERR_CONFIG;
719}
720
721/**
722 *  e1000_get_speed_and_duplex - Returns current speed and duplex
723 *  @hw: pointer to the HW structure
724 *  @speed: pointer to a 16-bit value to store the speed
725 *  @duplex: pointer to a 16-bit value to store the duplex.
726 *
727 *  This returns the speed and duplex of the adapter in the two 'out'
728 *  variables passed in. This is a function pointer entry point called
729 *  by drivers.
730 **/
731s32 e1000_get_speed_and_duplex(struct e1000_hw *hw, u16 *speed, u16 *duplex)
732{
733	if (hw->mac.ops.get_link_up_info)
734		return hw->mac.ops.get_link_up_info(hw, speed, duplex);
735
736	return -E1000_ERR_CONFIG;
737}
738
739/**
740 *  e1000_setup_led - Configures SW controllable LED
741 *  @hw: pointer to the HW structure
742 *
743 *  This prepares the SW controllable LED for use and saves the current state
744 *  of the LED so it can be later restored. This is a function pointer entry
745 *  point called by drivers.
746 **/
747s32 e1000_setup_led(struct e1000_hw *hw)
748{
749	if (hw->mac.ops.setup_led)
750		return hw->mac.ops.setup_led(hw);
751
752	return E1000_SUCCESS;
753}
754
755/**
756 *  e1000_cleanup_led - Restores SW controllable LED
757 *  @hw: pointer to the HW structure
758 *
759 *  This restores the SW controllable LED to the value saved off by
760 *  e1000_setup_led. This is a function pointer entry point called by drivers.
761 **/
762s32 e1000_cleanup_led(struct e1000_hw *hw)
763{
764	if (hw->mac.ops.cleanup_led)
765		return hw->mac.ops.cleanup_led(hw);
766
767	return E1000_SUCCESS;
768}
769
770/**
771 *  e1000_blink_led - Blink SW controllable LED
772 *  @hw: pointer to the HW structure
773 *
774 *  This starts the adapter LED blinking. Request the LED to be setup first
775 *  and cleaned up after. This is a function pointer entry point called by
776 *  drivers.
777 **/
778s32 e1000_blink_led(struct e1000_hw *hw)
779{
780	if (hw->mac.ops.blink_led)
781		return hw->mac.ops.blink_led(hw);
782
783	return E1000_SUCCESS;
784}
785
786/**
787 *  e1000_id_led_init - store LED configurations in SW
788 *  @hw: pointer to the HW structure
789 *
790 *  Initializes the LED config in SW. This is a function pointer entry point
791 *  called by drivers.
792 **/
793s32 e1000_id_led_init(struct e1000_hw *hw)
794{
795	if (hw->mac.ops.id_led_init)
796		return hw->mac.ops.id_led_init(hw);
797
798	return E1000_SUCCESS;
799}
800
801/**
802 *  e1000_led_on - Turn on SW controllable LED
803 *  @hw: pointer to the HW structure
804 *
805 *  Turns the SW defined LED on. This is a function pointer entry point
806 *  called by drivers.
807 **/
808s32 e1000_led_on(struct e1000_hw *hw)
809{
810	if (hw->mac.ops.led_on)
811		return hw->mac.ops.led_on(hw);
812
813	return E1000_SUCCESS;
814}
815
816/**
817 *  e1000_led_off - Turn off SW controllable LED
818 *  @hw: pointer to the HW structure
819 *
820 *  Turns the SW defined LED off. This is a function pointer entry point
821 *  called by drivers.
822 **/
823s32 e1000_led_off(struct e1000_hw *hw)
824{
825	if (hw->mac.ops.led_off)
826		return hw->mac.ops.led_off(hw);
827
828	return E1000_SUCCESS;
829}
830
831/**
832 *  e1000_reset_adaptive - Reset adaptive IFS
833 *  @hw: pointer to the HW structure
834 *
835 *  Resets the adaptive IFS. Currently no func pointer exists and all
836 *  implementations are handled in the generic version of this function.
837 **/
838void e1000_reset_adaptive(struct e1000_hw *hw)
839{
840	e1000_reset_adaptive_generic(hw);
841}
842
843/**
844 *  e1000_update_adaptive - Update adaptive IFS
845 *  @hw: pointer to the HW structure
846 *
847 *  Updates adapter IFS. Currently no func pointer exists and all
848 *  implementations are handled in the generic version of this function.
849 **/
850void e1000_update_adaptive(struct e1000_hw *hw)
851{
852	e1000_update_adaptive_generic(hw);
853}
854
855/**
856 *  e1000_disable_pcie_master - Disable PCI-Express master access
857 *  @hw: pointer to the HW structure
858 *
859 *  Disables PCI-Express master access and verifies there are no pending
860 *  requests. Currently no func pointer exists and all implementations are
861 *  handled in the generic version of this function.
862 **/
863s32 e1000_disable_pcie_master(struct e1000_hw *hw)
864{
865	return e1000_disable_pcie_master_generic(hw);
866}
867
868/**
869 *  e1000_config_collision_dist - Configure collision distance
870 *  @hw: pointer to the HW structure
871 *
872 *  Configures the collision distance to the default value and is used
873 *  during link setup.
874 **/
875void e1000_config_collision_dist(struct e1000_hw *hw)
876{
877	if (hw->mac.ops.config_collision_dist)
878		hw->mac.ops.config_collision_dist(hw);
879}
880
881/**
882 *  e1000_rar_set - Sets a receive address register
883 *  @hw: pointer to the HW structure
884 *  @addr: address to set the RAR to
885 *  @index: the RAR to set
886 *
887 *  Sets a Receive Address Register (RAR) to the specified address.
888 **/
889int e1000_rar_set(struct e1000_hw *hw, u8 *addr, u32 index)
890{
891	if (hw->mac.ops.rar_set)
892		return hw->mac.ops.rar_set(hw, addr, index);
893
894	return E1000_SUCCESS;
895}
896
897/**
898 *  e1000_validate_mdi_setting - Ensures valid MDI/MDIX SW state
899 *  @hw: pointer to the HW structure
900 *
901 *  Ensures that the MDI/MDIX SW state is valid.
902 **/
903s32 e1000_validate_mdi_setting(struct e1000_hw *hw)
904{
905	if (hw->mac.ops.validate_mdi_setting)
906		return hw->mac.ops.validate_mdi_setting(hw);
907
908	return E1000_SUCCESS;
909}
910
911/**
912 *  e1000_hash_mc_addr - Determines address location in multicast table
913 *  @hw: pointer to the HW structure
914 *  @mc_addr: Multicast address to hash.
915 *
916 *  This hashes an address to determine its location in the multicast
917 *  table. Currently no func pointer exists and all implementations
918 *  are handled in the generic version of this function.
919 **/
920u32 e1000_hash_mc_addr(struct e1000_hw *hw, u8 *mc_addr)
921{
922	return e1000_hash_mc_addr_generic(hw, mc_addr);
923}
924
925/**
926 *  e1000_enable_tx_pkt_filtering - Enable packet filtering on TX
927 *  @hw: pointer to the HW structure
928 *
929 *  Enables packet filtering on transmit packets if manageability is enabled
930 *  and host interface is enabled.
931 *  Currently no func pointer exists and all implementations are handled in the
932 *  generic version of this function.
933 **/
934bool e1000_enable_tx_pkt_filtering(struct e1000_hw *hw)
935{
936	return e1000_enable_tx_pkt_filtering_generic(hw);
937}
938
939/**
940 *  e1000_mng_host_if_write - Writes to the manageability host interface
941 *  @hw: pointer to the HW structure
942 *  @buffer: pointer to the host interface buffer
943 *  @length: size of the buffer
944 *  @offset: location in the buffer to write to
945 *  @sum: sum of the data (not checksum)
946 *
947 *  This function writes the buffer content at the offset given on the host if.
948 *  It also does alignment considerations to do the writes in most efficient
949 *  way.  Also fills up the sum of the buffer in *buffer parameter.
950 **/
951s32 e1000_mng_host_if_write(struct e1000_hw *hw, u8 *buffer, u16 length,
952			    u16 offset, u8 *sum)
953{
954	return e1000_mng_host_if_write_generic(hw, buffer, length, offset, sum);
955}
956
957/**
958 *  e1000_mng_write_cmd_header - Writes manageability command header
959 *  @hw: pointer to the HW structure
960 *  @hdr: pointer to the host interface command header
961 *
962 *  Writes the command header after does the checksum calculation.
963 **/
964s32 e1000_mng_write_cmd_header(struct e1000_hw *hw,
965			       struct e1000_host_mng_command_header *hdr)
966{
967	return e1000_mng_write_cmd_header_generic(hw, hdr);
968}
969
970/**
971 *  e1000_mng_enable_host_if - Checks host interface is enabled
972 *  @hw: pointer to the HW structure
973 *
974 *  Returns E1000_success upon success, else E1000_ERR_HOST_INTERFACE_COMMAND
975 *
976 *  This function checks whether the HOST IF is enabled for command operation
977 *  and also checks whether the previous command is completed.  It busy waits
978 *  in case of previous command is not completed.
979 **/
980s32 e1000_mng_enable_host_if(struct e1000_hw *hw)
981{
982	return e1000_mng_enable_host_if_generic(hw);
983}
984
985/**
986 *  e1000_set_obff_timer - Set Optimized Buffer Flush/Fill timer
987 *  @hw: pointer to the HW structure
988 *  @itr: u32 indicating itr value
989 *
990 *  Set the OBFF timer based on the given interrupt rate.
991 **/
992s32 e1000_set_obff_timer(struct e1000_hw *hw, u32 itr)
993{
994	if (hw->mac.ops.set_obff_timer)
995		return hw->mac.ops.set_obff_timer(hw, itr);
996
997	return E1000_SUCCESS;
998}
999
1000/**
1001 *  e1000_check_reset_block - Verifies PHY can be reset
1002 *  @hw: pointer to the HW structure
1003 *
1004 *  Checks if the PHY is in a state that can be reset or if manageability
1005 *  has it tied up. This is a function pointer entry point called by drivers.
1006 **/
1007s32 e1000_check_reset_block(struct e1000_hw *hw)
1008{
1009	if (hw->phy.ops.check_reset_block)
1010		return hw->phy.ops.check_reset_block(hw);
1011
1012	return E1000_SUCCESS;
1013}
1014
1015/**
1016 *  e1000_read_phy_reg - Reads PHY register
1017 *  @hw: pointer to the HW structure
1018 *  @offset: the register to read
1019 *  @data: the buffer to store the 16-bit read.
1020 *
1021 *  Reads the PHY register and returns the value in data.
1022 *  This is a function pointer entry point called by drivers.
1023 **/
1024s32 e1000_read_phy_reg(struct e1000_hw *hw, u32 offset, u16 *data)
1025{
1026	if (hw->phy.ops.read_reg)
1027		return hw->phy.ops.read_reg(hw, offset, data);
1028
1029	return E1000_SUCCESS;
1030}
1031
1032/**
1033 *  e1000_write_phy_reg - Writes PHY register
1034 *  @hw: pointer to the HW structure
1035 *  @offset: the register to write
1036 *  @data: the value to write.
1037 *
1038 *  Writes the PHY register at offset with the value in data.
1039 *  This is a function pointer entry point called by drivers.
1040 **/
1041s32 e1000_write_phy_reg(struct e1000_hw *hw, u32 offset, u16 data)
1042{
1043	if (hw->phy.ops.write_reg)
1044		return hw->phy.ops.write_reg(hw, offset, data);
1045
1046	return E1000_SUCCESS;
1047}
1048
1049/**
1050 *  e1000_release_phy - Generic release PHY
1051 *  @hw: pointer to the HW structure
1052 *
1053 *  Return if silicon family does not require a semaphore when accessing the
1054 *  PHY.
1055 **/
1056void e1000_release_phy(struct e1000_hw *hw)
1057{
1058	if (hw->phy.ops.release)
1059		hw->phy.ops.release(hw);
1060}
1061
1062/**
1063 *  e1000_acquire_phy - Generic acquire PHY
1064 *  @hw: pointer to the HW structure
1065 *
1066 *  Return success if silicon family does not require a semaphore when
1067 *  accessing the PHY.
1068 **/
1069s32 e1000_acquire_phy(struct e1000_hw *hw)
1070{
1071	if (hw->phy.ops.acquire)
1072		return hw->phy.ops.acquire(hw);
1073
1074	return E1000_SUCCESS;
1075}
1076
1077/**
1078 *  e1000_cfg_on_link_up - Configure PHY upon link up
1079 *  @hw: pointer to the HW structure
1080 **/
1081s32 e1000_cfg_on_link_up(struct e1000_hw *hw)
1082{
1083	if (hw->phy.ops.cfg_on_link_up)
1084		return hw->phy.ops.cfg_on_link_up(hw);
1085
1086	return E1000_SUCCESS;
1087}
1088
1089/**
1090 *  e1000_read_kmrn_reg - Reads register using Kumeran interface
1091 *  @hw: pointer to the HW structure
1092 *  @offset: the register to read
1093 *  @data: the location to store the 16-bit value read.
1094 *
1095 *  Reads a register out of the Kumeran interface. Currently no func pointer
1096 *  exists and all implementations are handled in the generic version of
1097 *  this function.
1098 **/
1099s32 e1000_read_kmrn_reg(struct e1000_hw *hw, u32 offset, u16 *data)
1100{
1101	return e1000_read_kmrn_reg_generic(hw, offset, data);
1102}
1103
1104/**
1105 *  e1000_write_kmrn_reg - Writes register using Kumeran interface
1106 *  @hw: pointer to the HW structure
1107 *  @offset: the register to write
1108 *  @data: the value to write.
1109 *
1110 *  Writes a register to the Kumeran interface. Currently no func pointer
1111 *  exists and all implementations are handled in the generic version of
1112 *  this function.
1113 **/
1114s32 e1000_write_kmrn_reg(struct e1000_hw *hw, u32 offset, u16 data)
1115{
1116	return e1000_write_kmrn_reg_generic(hw, offset, data);
1117}
1118
1119/**
1120 *  e1000_get_cable_length - Retrieves cable length estimation
1121 *  @hw: pointer to the HW structure
1122 *
1123 *  This function estimates the cable length and stores them in
1124 *  hw->phy.min_length and hw->phy.max_length. This is a function pointer
1125 *  entry point called by drivers.
1126 **/
1127s32 e1000_get_cable_length(struct e1000_hw *hw)
1128{
1129	if (hw->phy.ops.get_cable_length)
1130		return hw->phy.ops.get_cable_length(hw);
1131
1132	return E1000_SUCCESS;
1133}
1134
1135/**
1136 *  e1000_get_phy_info - Retrieves PHY information from registers
1137 *  @hw: pointer to the HW structure
1138 *
1139 *  This function gets some information from various PHY registers and
1140 *  populates hw->phy values with it. This is a function pointer entry
1141 *  point called by drivers.
1142 **/
1143s32 e1000_get_phy_info(struct e1000_hw *hw)
1144{
1145	if (hw->phy.ops.get_info)
1146		return hw->phy.ops.get_info(hw);
1147
1148	return E1000_SUCCESS;
1149}
1150
1151/**
1152 *  e1000_phy_hw_reset - Hard PHY reset
1153 *  @hw: pointer to the HW structure
1154 *
1155 *  Performs a hard PHY reset. This is a function pointer entry point called
1156 *  by drivers.
1157 **/
1158s32 e1000_phy_hw_reset(struct e1000_hw *hw)
1159{
1160	if (hw->phy.ops.reset)
1161		return hw->phy.ops.reset(hw);
1162
1163	return E1000_SUCCESS;
1164}
1165
1166/**
1167 *  e1000_phy_commit - Soft PHY reset
1168 *  @hw: pointer to the HW structure
1169 *
1170 *  Performs a soft PHY reset on those that apply. This is a function pointer
1171 *  entry point called by drivers.
1172 **/
1173s32 e1000_phy_commit(struct e1000_hw *hw)
1174{
1175	if (hw->phy.ops.commit)
1176		return hw->phy.ops.commit(hw);
1177
1178	return E1000_SUCCESS;
1179}
1180
1181/**
1182 *  e1000_set_d0_lplu_state - Sets low power link up state for D0
1183 *  @hw: pointer to the HW structure
1184 *  @active: boolean used to enable/disable lplu
1185 *
1186 *  Success returns 0, Failure returns 1
1187 *
1188 *  The low power link up (lplu) state is set to the power management level D0
1189 *  and SmartSpeed is disabled when active is true, else clear lplu for D0
1190 *  and enable Smartspeed.  LPLU and Smartspeed are mutually exclusive.  LPLU
1191 *  is used during Dx states where the power conservation is most important.
1192 *  During driver activity, SmartSpeed should be enabled so performance is
1193 *  maintained.  This is a function pointer entry point called by drivers.
1194 **/
1195s32 e1000_set_d0_lplu_state(struct e1000_hw *hw, bool active)
1196{
1197	if (hw->phy.ops.set_d0_lplu_state)
1198		return hw->phy.ops.set_d0_lplu_state(hw, active);
1199
1200	return E1000_SUCCESS;
1201}
1202
1203/**
1204 *  e1000_set_d3_lplu_state - Sets low power link up state for D3
1205 *  @hw: pointer to the HW structure
1206 *  @active: boolean used to enable/disable lplu
1207 *
1208 *  Success returns 0, Failure returns 1
1209 *
1210 *  The low power link up (lplu) state is set to the power management level D3
1211 *  and SmartSpeed is disabled when active is true, else clear lplu for D3
1212 *  and enable Smartspeed.  LPLU and Smartspeed are mutually exclusive.  LPLU
1213 *  is used during Dx states where the power conservation is most important.
1214 *  During driver activity, SmartSpeed should be enabled so performance is
1215 *  maintained.  This is a function pointer entry point called by drivers.
1216 **/
1217s32 e1000_set_d3_lplu_state(struct e1000_hw *hw, bool active)
1218{
1219	if (hw->phy.ops.set_d3_lplu_state)
1220		return hw->phy.ops.set_d3_lplu_state(hw, active);
1221
1222	return E1000_SUCCESS;
1223}
1224
1225/**
1226 *  e1000_read_mac_addr - Reads MAC address
1227 *  @hw: pointer to the HW structure
1228 *
1229 *  Reads the MAC address out of the adapter and stores it in the HW structure.
1230 *  Currently no func pointer exists and all implementations are handled in the
1231 *  generic version of this function.
1232 **/
1233s32 e1000_read_mac_addr(struct e1000_hw *hw)
1234{
1235	if (hw->mac.ops.read_mac_addr)
1236		return hw->mac.ops.read_mac_addr(hw);
1237
1238	return e1000_read_mac_addr_generic(hw);
1239}
1240
1241/**
1242 *  e1000_read_pba_string - Read device part number string
1243 *  @hw: pointer to the HW structure
1244 *  @pba_num: pointer to device part number
1245 *  @pba_num_size: size of part number buffer
1246 *
1247 *  Reads the product board assembly (PBA) number from the EEPROM and stores
1248 *  the value in pba_num.
1249 *  Currently no func pointer exists and all implementations are handled in the
1250 *  generic version of this function.
1251 **/
1252s32 e1000_read_pba_string(struct e1000_hw *hw, u8 *pba_num, u32 pba_num_size)
1253{
1254	return e1000_read_pba_string_generic(hw, pba_num, pba_num_size);
1255}
1256
1257/**
1258 *  e1000_read_pba_length - Read device part number string length
1259 *  @hw: pointer to the HW structure
1260 *  @pba_num_size: size of part number buffer
1261 *
1262 *  Reads the product board assembly (PBA) number length from the EEPROM and
1263 *  stores the value in pba_num.
1264 *  Currently no func pointer exists and all implementations are handled in the
1265 *  generic version of this function.
1266 **/
1267s32 e1000_read_pba_length(struct e1000_hw *hw, u32 *pba_num_size)
1268{
1269	return e1000_read_pba_length_generic(hw, pba_num_size);
1270}
1271
1272/**
1273 *  e1000_read_pba_num - Read device part number
1274 *  @hw: pointer to the HW structure
1275 *  @pba_num: pointer to device part number
1276 *
1277 *  Reads the product board assembly (PBA) number from the EEPROM and stores
1278 *  the value in pba_num.
1279 *  Currently no func pointer exists and all implementations are handled in the
1280 *  generic version of this function.
1281 **/
1282s32 e1000_read_pba_num(struct e1000_hw *hw, u32 *pba_num)
1283{
1284	return e1000_read_pba_num_generic(hw, pba_num);
1285}
1286
1287/**
1288 *  e1000_validate_nvm_checksum - Verifies NVM (EEPROM) checksum
1289 *  @hw: pointer to the HW structure
1290 *
1291 *  Validates the NVM checksum is correct. This is a function pointer entry
1292 *  point called by drivers.
1293 **/
1294s32 e1000_validate_nvm_checksum(struct e1000_hw *hw)
1295{
1296	if (hw->nvm.ops.validate)
1297		return hw->nvm.ops.validate(hw);
1298
1299	return -E1000_ERR_CONFIG;
1300}
1301
1302/**
1303 *  e1000_update_nvm_checksum - Updates NVM (EEPROM) checksum
1304 *  @hw: pointer to the HW structure
1305 *
1306 *  Updates the NVM checksum. Currently no func pointer exists and all
1307 *  implementations are handled in the generic version of this function.
1308 **/
1309s32 e1000_update_nvm_checksum(struct e1000_hw *hw)
1310{
1311	if (hw->nvm.ops.update)
1312		return hw->nvm.ops.update(hw);
1313
1314	return -E1000_ERR_CONFIG;
1315}
1316
1317/**
1318 *  e1000_reload_nvm - Reloads EEPROM
1319 *  @hw: pointer to the HW structure
1320 *
1321 *  Reloads the EEPROM by setting the "Reinitialize from EEPROM" bit in the
1322 *  extended control register.
1323 **/
1324void e1000_reload_nvm(struct e1000_hw *hw)
1325{
1326	if (hw->nvm.ops.reload)
1327		hw->nvm.ops.reload(hw);
1328}
1329
1330/**
1331 *  e1000_read_nvm - Reads NVM (EEPROM)
1332 *  @hw: pointer to the HW structure
1333 *  @offset: the word offset to read
1334 *  @words: number of 16-bit words to read
1335 *  @data: pointer to the properly sized buffer for the data.
1336 *
1337 *  Reads 16-bit chunks of data from the NVM (EEPROM). This is a function
1338 *  pointer entry point called by drivers.
1339 **/
1340s32 e1000_read_nvm(struct e1000_hw *hw, u16 offset, u16 words, u16 *data)
1341{
1342	if (hw->nvm.ops.read)
1343		return hw->nvm.ops.read(hw, offset, words, data);
1344
1345	return -E1000_ERR_CONFIG;
1346}
1347
1348/**
1349 *  e1000_write_nvm - Writes to NVM (EEPROM)
1350 *  @hw: pointer to the HW structure
1351 *  @offset: the word offset to read
1352 *  @words: number of 16-bit words to write
1353 *  @data: pointer to the properly sized buffer for the data.
1354 *
1355 *  Writes 16-bit chunks of data to the NVM (EEPROM). This is a function
1356 *  pointer entry point called by drivers.
1357 **/
1358s32 e1000_write_nvm(struct e1000_hw *hw, u16 offset, u16 words, u16 *data)
1359{
1360	if (hw->nvm.ops.write)
1361		return hw->nvm.ops.write(hw, offset, words, data);
1362
1363	return E1000_SUCCESS;
1364}
1365
1366/**
1367 *  e1000_write_8bit_ctrl_reg - Writes 8bit Control register
1368 *  @hw: pointer to the HW structure
1369 *  @reg: 32bit register offset
1370 *  @offset: the register to write
1371 *  @data: the value to write.
1372 *
1373 *  Writes the PHY register at offset with the value in data.
1374 *  This is a function pointer entry point called by drivers.
1375 **/
1376s32 e1000_write_8bit_ctrl_reg(struct e1000_hw *hw, u32 reg, u32 offset,
1377			      u8 data)
1378{
1379	return e1000_write_8bit_ctrl_reg_generic(hw, reg, offset, data);
1380}
1381
1382/**
1383 * e1000_power_up_phy - Restores link in case of PHY power down
1384 * @hw: pointer to the HW structure
1385 *
1386 * The phy may be powered down to save power, to turn off link when the
1387 * driver is unloaded, or wake on lan is not enabled (among others).
1388 **/
1389void e1000_power_up_phy(struct e1000_hw *hw)
1390{
1391	if (hw->phy.ops.power_up)
1392		hw->phy.ops.power_up(hw);
1393
1394	e1000_setup_link(hw);
1395}
1396
1397/**
1398 * e1000_power_down_phy - Power down PHY
1399 * @hw: pointer to the HW structure
1400 *
1401 * The phy may be powered down to save power, to turn off link when the
1402 * driver is unloaded, or wake on lan is not enabled (among others).
1403 **/
1404void e1000_power_down_phy(struct e1000_hw *hw)
1405{
1406	if (hw->phy.ops.power_down)
1407		hw->phy.ops.power_down(hw);
1408}
1409
1410/**
1411 *  e1000_power_up_fiber_serdes_link - Power up serdes link
1412 *  @hw: pointer to the HW structure
1413 *
1414 *  Power on the optics and PCS.
1415 **/
1416void e1000_power_up_fiber_serdes_link(struct e1000_hw *hw)
1417{
1418	if (hw->mac.ops.power_up_serdes)
1419		hw->mac.ops.power_up_serdes(hw);
1420}
1421
1422/**
1423 *  e1000_shutdown_fiber_serdes_link - Remove link during power down
1424 *  @hw: pointer to the HW structure
1425 *
1426 *  Shutdown the optics and PCS on driver unload.
1427 **/
1428void e1000_shutdown_fiber_serdes_link(struct e1000_hw *hw)
1429{
1430	if (hw->mac.ops.shutdown_serdes)
1431		hw->mac.ops.shutdown_serdes(hw);
1432}
1433
1434