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