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