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