2 * This file is provided under a CDDLv1 license. When using or
3 * redistributing this file, you may do so under this license.
4 * In redistributing this file this license must be included
5 * and no other modification of this header file is permitted.
9 * Copyright(c) 1999 - 2009 Intel Corporation. All rights reserved.
11 * The contents of this file are subject to the terms of Version
12 * 1.0 of the Common Development and Distribution License (the "License").
14 * You should have received a copy of the License with this software.
15 * You can obtain a copy of the License at
16 * http://www.opensolaris.org/os/licensing.
17 * See the License for the specific language governing permissions
18 * and limitations under the License.
22 * Copyright 2009 Sun Microsystems, Inc. All rights reserved.
23 * Use is subject to license terms of the CDDLv1.
27 * IntelVersion: 1.57 v3-1-10-1_2009-9-18_Release14-6
31 * 82540EM Gigabit Ethernet Controller
32 * 82540EP Gigabit Ethernet Controller
33 * 82545EM Gigabit Ethernet Controller (Copper)
34 * 82545EM Gigabit Ethernet Controller (Fiber)
35 * 82545GM Gigabit Ethernet Controller
36 * 82546EB Gigabit Ethernet Controller (Copper)
37 * 82546EB Gigabit Ethernet Controller (Fiber)
38 * 82546GB Gigabit Ethernet Controller
41 #include "e1000_api.h"
43 static s32
e1000_init_phy_params_82540(struct e1000_hw
*hw
);
44 static s32
e1000_init_nvm_params_82540(struct e1000_hw
*hw
);
45 static s32
e1000_init_mac_params_82540(struct e1000_hw
*hw
);
46 static s32
e1000_adjust_serdes_amplitude_82540(struct e1000_hw
*hw
);
47 static void e1000_clear_hw_cntrs_82540(struct e1000_hw
*hw
);
48 static s32
e1000_init_hw_82540(struct e1000_hw
*hw
);
49 static s32
e1000_reset_hw_82540(struct e1000_hw
*hw
);
50 static s32
e1000_set_phy_mode_82540(struct e1000_hw
*hw
);
51 static s32
e1000_set_vco_speed_82540(struct e1000_hw
*hw
);
52 static s32
e1000_setup_copper_link_82540(struct e1000_hw
*hw
);
53 static s32
e1000_setup_fiber_serdes_link_82540(struct e1000_hw
*hw
);
54 static void e1000_power_down_phy_copper_82540(struct e1000_hw
*hw
);
55 static s32
e1000_read_mac_addr_82540(struct e1000_hw
*hw
);
58 * e1000_init_phy_params_82540 - Init PHY func ptrs.
59 * @hw: pointer to the HW structure
62 e1000_init_phy_params_82540(struct e1000_hw
*hw
)
64 struct e1000_phy_info
*phy
= &hw
->phy
;
65 s32 ret_val
= E1000_SUCCESS
;
68 phy
->autoneg_mask
= AUTONEG_ADVERTISE_SPEED_DEFAULT
;
69 phy
->reset_delay_us
= 10000;
70 phy
->type
= e1000_phy_m88
;
72 /* Function Pointers */
73 phy
->ops
.check_polarity
= e1000_check_polarity_m88
;
74 phy
->ops
.commit
= e1000_phy_sw_reset_generic
;
75 phy
->ops
.force_speed_duplex
= e1000_phy_force_speed_duplex_m88
;
76 phy
->ops
.get_cable_length
= e1000_get_cable_length_m88
;
77 phy
->ops
.get_cfg_done
= e1000_get_cfg_done_generic
;
78 phy
->ops
.read_reg
= e1000_read_phy_reg_m88
;
79 phy
->ops
.reset
= e1000_phy_hw_reset_generic
;
80 phy
->ops
.write_reg
= e1000_write_phy_reg_m88
;
81 phy
->ops
.get_info
= e1000_get_phy_info_m88
;
82 phy
->ops
.power_up
= e1000_power_up_phy_copper
;
83 phy
->ops
.power_down
= e1000_power_down_phy_copper_82540
;
85 ret_val
= e1000_get_phy_id(hw
);
90 switch (hw
->mac
.type
) {
93 case e1000_82545_rev_3
:
95 case e1000_82546_rev_3
:
96 if (phy
->id
== M88E1011_I_PHY_ID
)
100 ret_val
= -E1000_ERR_PHY
;
109 * e1000_init_nvm_params_82540 - Init NVM func ptrs.
110 * @hw: pointer to the HW structure
113 e1000_init_nvm_params_82540(struct e1000_hw
*hw
)
115 struct e1000_nvm_info
*nvm
= &hw
->nvm
;
116 u32 eecd
= E1000_READ_REG(hw
, E1000_EECD
);
118 DEBUGFUNC("e1000_init_nvm_params_82540");
120 nvm
->type
= e1000_nvm_eeprom_microwire
;
121 nvm
->delay_usec
= 50;
122 nvm
->opcode_bits
= 3;
123 switch (nvm
->override
) {
124 case e1000_nvm_override_microwire_large
:
125 nvm
->address_bits
= 8;
126 nvm
->word_size
= 256;
128 case e1000_nvm_override_microwire_small
:
129 nvm
->address_bits
= 6;
133 nvm
->address_bits
= eecd
& E1000_EECD_SIZE
? 8 : 6;
134 nvm
->word_size
= eecd
& E1000_EECD_SIZE
? 256 : 64;
138 /* Function Pointers */
139 nvm
->ops
.acquire
= e1000_acquire_nvm_generic
;
140 nvm
->ops
.read
= e1000_read_nvm_microwire
;
141 nvm
->ops
.release
= e1000_release_nvm_generic
;
142 nvm
->ops
.update
= e1000_update_nvm_checksum_generic
;
143 nvm
->ops
.valid_led_default
= e1000_valid_led_default_generic
;
144 nvm
->ops
.validate
= e1000_validate_nvm_checksum_generic
;
145 nvm
->ops
.write
= e1000_write_nvm_microwire
;
147 return (E1000_SUCCESS
);
151 * e1000_init_mac_params_82540 - Init MAC func ptrs.
152 * @hw: pointer to the HW structure
155 e1000_init_mac_params_82540(struct e1000_hw
*hw
)
157 struct e1000_mac_info
*mac
= &hw
->mac
;
158 s32 ret_val
= E1000_SUCCESS
;
160 DEBUGFUNC("e1000_init_mac_params_82540");
163 switch (hw
->device_id
) {
164 case E1000_DEV_ID_82545EM_FIBER
:
165 case E1000_DEV_ID_82545GM_FIBER
:
166 case E1000_DEV_ID_82546EB_FIBER
:
167 case E1000_DEV_ID_82546GB_FIBER
:
168 hw
->phy
.media_type
= e1000_media_type_fiber
;
170 case E1000_DEV_ID_82545GM_SERDES
:
171 case E1000_DEV_ID_82546GB_SERDES
:
172 hw
->phy
.media_type
= e1000_media_type_internal_serdes
;
175 hw
->phy
.media_type
= e1000_media_type_copper
;
179 /* Set mta register count */
180 mac
->mta_reg_count
= 128;
181 /* Set rar entry count */
182 mac
->rar_entry_count
= E1000_RAR_ENTRIES
;
184 /* Function pointers */
186 /* bus type/speed/width */
187 mac
->ops
.get_bus_info
= e1000_get_bus_info_pci_generic
;
189 mac
->ops
.set_lan_id
= e1000_set_lan_id_multi_port_pci
;
191 mac
->ops
.reset_hw
= e1000_reset_hw_82540
;
192 /* hw initialization */
193 mac
->ops
.init_hw
= e1000_init_hw_82540
;
195 mac
->ops
.setup_link
= e1000_setup_link_generic
;
196 /* physical interface setup */
197 mac
->ops
.setup_physical_interface
=
198 (hw
->phy
.media_type
== e1000_media_type_copper
)
199 ? e1000_setup_copper_link_82540
200 : e1000_setup_fiber_serdes_link_82540
;
202 switch (hw
->phy
.media_type
) {
203 case e1000_media_type_copper
:
204 mac
->ops
.check_for_link
= e1000_check_for_copper_link_generic
;
206 case e1000_media_type_fiber
:
207 mac
->ops
.check_for_link
= e1000_check_for_fiber_link_generic
;
209 case e1000_media_type_internal_serdes
:
210 mac
->ops
.check_for_link
= e1000_check_for_serdes_link_generic
;
213 ret_val
= -E1000_ERR_CONFIG
;
217 mac
->ops
.get_link_up_info
=
218 (hw
->phy
.media_type
== e1000_media_type_copper
)
219 ? e1000_get_speed_and_duplex_copper_generic
220 : e1000_get_speed_and_duplex_fiber_serdes_generic
;
221 /* multicast address update */
222 mac
->ops
.update_mc_addr_list
= e1000_update_mc_addr_list_generic
;
224 mac
->ops
.write_vfta
= e1000_write_vfta_generic
;
226 mac
->ops
.clear_vfta
= e1000_clear_vfta_generic
;
228 mac
->ops
.mta_set
= e1000_mta_set_generic
;
230 mac
->ops
.id_led_init
= e1000_id_led_init_generic
;
232 mac
->ops
.setup_led
= e1000_setup_led_generic
;
233 /* read mac address */
234 mac
->ops
.read_mac_addr
= e1000_read_mac_addr_82540
;
236 mac
->ops
.cleanup_led
= e1000_cleanup_led_generic
;
237 /* turn on/off LED */
238 mac
->ops
.led_on
= e1000_led_on_generic
;
239 mac
->ops
.led_off
= e1000_led_off_generic
;
240 /* clear hardware counters */
241 mac
->ops
.clear_hw_cntrs
= e1000_clear_hw_cntrs_82540
;
248 * e1000_init_function_pointers_82540 - Init func ptrs.
249 * @hw: pointer to the HW structure
251 * Called to initialize all function pointers and parameters.
254 e1000_init_function_pointers_82540(struct e1000_hw
*hw
)
256 DEBUGFUNC("e1000_init_function_pointers_82540");
258 hw
->mac
.ops
.init_params
= e1000_init_mac_params_82540
;
259 hw
->nvm
.ops
.init_params
= e1000_init_nvm_params_82540
;
260 hw
->phy
.ops
.init_params
= e1000_init_phy_params_82540
;
264 * e1000_reset_hw_82540 - Reset hardware
265 * @hw: pointer to the HW structure
267 * This resets the hardware into a known state.
270 e1000_reset_hw_82540(struct e1000_hw
*hw
)
273 s32 ret_val
= E1000_SUCCESS
;
275 DEBUGFUNC("e1000_reset_hw_82540");
277 DEBUGOUT("Masking off all interrupts\n");
278 E1000_WRITE_REG(hw
, E1000_IMC
, 0xFFFFFFFF);
280 E1000_WRITE_REG(hw
, E1000_RCTL
, 0);
281 E1000_WRITE_REG(hw
, E1000_TCTL
, E1000_TCTL_PSP
);
282 E1000_WRITE_FLUSH(hw
);
285 * Delay to allow any outstanding PCI transactions to complete
286 * before resetting the device.
290 ctrl
= E1000_READ_REG(hw
, E1000_CTRL
);
292 DEBUGOUT("Issuing a global reset to 82540/82545/82546 MAC\n");
293 switch (hw
->mac
.type
) {
294 case e1000_82545_rev_3
:
295 case e1000_82546_rev_3
:
296 E1000_WRITE_REG(hw
, E1000_CTRL_DUP
, ctrl
| E1000_CTRL_RST
);
300 * These controllers can't ack the 64-bit write when
301 * issuing the reset, so we use IO-mapping as a
302 * workaround to issue the reset.
304 E1000_WRITE_REG_IO(hw
, E1000_CTRL
, ctrl
| E1000_CTRL_RST
);
308 /* Wait for EEPROM reload */
311 /* Disable HW ARPs on ASF enabled adapters */
312 manc
= E1000_READ_REG(hw
, E1000_MANC
);
313 manc
&= ~E1000_MANC_ARP_EN
;
314 E1000_WRITE_REG(hw
, E1000_MANC
, manc
);
316 E1000_WRITE_REG(hw
, E1000_IMC
, 0xffffffff);
317 (void) E1000_READ_REG(hw
, E1000_ICR
);
323 * e1000_init_hw_82540 - Initialize hardware
324 * @hw: pointer to the HW structure
326 * This inits the hardware readying it for operation.
329 e1000_init_hw_82540(struct e1000_hw
*hw
)
331 struct e1000_mac_info
*mac
= &hw
->mac
;
332 u32 txdctl
, ctrl_ext
;
333 s32 ret_val
= E1000_SUCCESS
;
336 DEBUGFUNC("e1000_init_hw_82540");
338 /* Initialize identification LED */
339 ret_val
= mac
->ops
.id_led_init(hw
);
342 DEBUGOUT("Error initializing identification LED\n");
343 /* This is not fatal and we should not stop init due to this */
346 /* Disabling VLAN filtering */
347 DEBUGOUT("Initializing the IEEE VLAN\n");
348 if (mac
->type
< e1000_82545_rev_3
)
349 E1000_WRITE_REG(hw
, E1000_VET
, 0);
351 mac
->ops
.clear_vfta(hw
);
353 /* Setup the receive address. */
354 e1000_init_rx_addrs_generic(hw
, mac
->rar_entry_count
);
356 /* Zero out the Multicast HASH table */
357 DEBUGOUT("Zeroing the MTA\n");
358 for (i
= 0; i
< mac
->mta_reg_count
; i
++) {
359 E1000_WRITE_REG_ARRAY(hw
, E1000_MTA
, i
, 0);
361 * Avoid back to back register writes by adding the register
362 * read (flush). This is to protect against some strange
363 * bridge configurations that may issue Memory Write Block
364 * (MWB) to our register space. The *_rev_3 hardware at
365 * least doesn't respond correctly to every other dword in an
366 * MWB to our register space.
368 E1000_WRITE_FLUSH(hw
);
371 if (mac
->type
< e1000_82545_rev_3
)
372 e1000_pcix_mmrbc_workaround_generic(hw
);
374 /* Setup link and flow control */
375 ret_val
= mac
->ops
.setup_link(hw
);
377 txdctl
= E1000_READ_REG(hw
, E1000_TXDCTL(0));
378 txdctl
= (txdctl
& ~E1000_TXDCTL_WTHRESH
) |
379 E1000_TXDCTL_FULL_TX_DESC_WB
;
380 E1000_WRITE_REG(hw
, E1000_TXDCTL(0), txdctl
);
383 * Clear all of the statistics registers (clear on read). It is
384 * important that we do this after we have tried to establish link
385 * because the symbol error count will increment wildly if there
388 e1000_clear_hw_cntrs_82540(hw
);
390 if ((hw
->device_id
== E1000_DEV_ID_82546GB_QUAD_COPPER
) ||
391 (hw
->device_id
== E1000_DEV_ID_82546GB_QUAD_COPPER_KSP3
)) {
392 ctrl_ext
= E1000_READ_REG(hw
, E1000_CTRL_EXT
);
394 * Relaxed ordering must be disabled to avoid a parity
395 * error crash in a PCI slot.
397 ctrl_ext
|= E1000_CTRL_EXT_RO_DIS
;
398 E1000_WRITE_REG(hw
, E1000_CTRL_EXT
, ctrl_ext
);
404 * e1000_setup_copper_link_82540 - Configure copper link settings
405 * @hw: pointer to the HW structure
407 * Calls the appropriate function to configure the link for auto-neg or forced
408 * speed and duplex. Then we check for link, once link is established calls
409 * to configure collision distance and flow control are called. If link is
410 * not established, we return -E1000_ERR_PHY (-2).
413 e1000_setup_copper_link_82540(struct e1000_hw
*hw
)
416 s32 ret_val
= E1000_SUCCESS
;
419 DEBUGFUNC("e1000_setup_copper_link_82540");
421 ctrl
= E1000_READ_REG(hw
, E1000_CTRL
);
422 ctrl
|= E1000_CTRL_SLU
;
423 ctrl
&= ~(E1000_CTRL_FRCSPD
| E1000_CTRL_FRCDPX
);
424 E1000_WRITE_REG(hw
, E1000_CTRL
, ctrl
);
426 ret_val
= e1000_set_phy_mode_82540(hw
);
430 if (hw
->mac
.type
== e1000_82545_rev_3
||
431 hw
->mac
.type
== e1000_82546_rev_3
) {
433 hw
->phy
.ops
.read_reg(hw
, M88E1000_PHY_SPEC_CTRL
, &data
);
438 hw
->phy
.ops
.write_reg(hw
, M88E1000_PHY_SPEC_CTRL
, data
);
442 ret_val
= e1000_copper_link_setup_m88(hw
);
446 ret_val
= e1000_setup_copper_link_generic(hw
);
453 * e1000_setup_fiber_serdes_link_82540 - Setup link for fiber/serdes
454 * @hw: pointer to the HW structure
456 * Set the output amplitude to the value in the EEPROM and adjust the VCO
457 * speed to improve Bit Error Rate (BER) performance. Configures collision
458 * distance and flow control for fiber and serdes links. Upon successful
459 * setup, poll for link.
462 e1000_setup_fiber_serdes_link_82540(struct e1000_hw
*hw
)
464 struct e1000_mac_info
*mac
= &hw
->mac
;
465 s32 ret_val
= E1000_SUCCESS
;
467 DEBUGFUNC("e1000_setup_fiber_serdes_link_82540");
470 case e1000_82545_rev_3
:
471 case e1000_82546_rev_3
:
472 if (hw
->phy
.media_type
== e1000_media_type_internal_serdes
) {
474 * If we're on serdes media, adjust the output
475 * amplitude to value set in the EEPROM.
477 ret_val
= e1000_adjust_serdes_amplitude_82540(hw
);
481 /* Adjust VCO speed to improve BER performance */
482 ret_val
= e1000_set_vco_speed_82540(hw
);
489 ret_val
= e1000_setup_fiber_serdes_link_generic(hw
);
496 * e1000_adjust_serdes_amplitude_82540 - Adjust amplitude based on EEPROM
497 * @hw: pointer to the HW structure
499 * Adjust the SERDES output amplitude based on the EEPROM settings.
502 e1000_adjust_serdes_amplitude_82540(struct e1000_hw
*hw
)
504 s32 ret_val
= E1000_SUCCESS
;
507 DEBUGFUNC("e1000_adjust_serdes_amplitude_82540");
509 ret_val
= hw
->nvm
.ops
.read(hw
, NVM_SERDES_AMPLITUDE
, 1, &nvm_data
);
513 if (nvm_data
!= NVM_RESERVED_WORD
) {
514 /* Adjust serdes output amplitude only. */
515 nvm_data
&= NVM_SERDES_AMPLITUDE_MASK
;
516 ret_val
= hw
->phy
.ops
.write_reg(hw
,
517 M88E1000_PHY_EXT_CTRL
,
527 * e1000_set_vco_speed_82540 - Set VCO speed for better performance
528 * @hw: pointer to the HW structure
530 * Set the VCO speed to improve Bit Error Rate (BER) performance.
533 e1000_set_vco_speed_82540(struct e1000_hw
*hw
)
535 s32 ret_val
= E1000_SUCCESS
;
536 u16 default_page
= 0;
539 DEBUGFUNC("e1000_set_vco_speed_82540");
541 /* Set PHY register 30, page 5, bit 8 to 0 */
543 ret_val
= hw
->phy
.ops
.read_reg(hw
,
544 M88E1000_PHY_PAGE_SELECT
,
549 ret_val
= hw
->phy
.ops
.write_reg(hw
, M88E1000_PHY_PAGE_SELECT
, 0x0005);
553 ret_val
= hw
->phy
.ops
.read_reg(hw
, M88E1000_PHY_GEN_CONTROL
, &phy_data
);
557 phy_data
&= ~M88E1000_PHY_VCO_REG_BIT8
;
558 ret_val
= hw
->phy
.ops
.write_reg(hw
, M88E1000_PHY_GEN_CONTROL
, phy_data
);
562 /* Set PHY register 30, page 4, bit 11 to 1 */
564 ret_val
= hw
->phy
.ops
.write_reg(hw
, M88E1000_PHY_PAGE_SELECT
, 0x0004);
568 ret_val
= hw
->phy
.ops
.read_reg(hw
, M88E1000_PHY_GEN_CONTROL
, &phy_data
);
572 phy_data
|= M88E1000_PHY_VCO_REG_BIT11
;
573 ret_val
= hw
->phy
.ops
.write_reg(hw
, M88E1000_PHY_GEN_CONTROL
, phy_data
);
577 ret_val
= hw
->phy
.ops
.write_reg(hw
, M88E1000_PHY_PAGE_SELECT
,
585 * e1000_set_phy_mode_82540 - Set PHY to class A mode
586 * @hw: pointer to the HW structure
588 * Sets the PHY to class A mode and assumes the following operations will
589 * follow to enable the new class mode:
590 * 1. Do a PHY soft reset.
591 * 2. Restart auto-negotiation or force link.
594 e1000_set_phy_mode_82540(struct e1000_hw
*hw
)
596 struct e1000_phy_info
*phy
= &hw
->phy
;
597 s32 ret_val
= E1000_SUCCESS
;
600 DEBUGFUNC("e1000_set_phy_mode_82540");
602 if (hw
->mac
.type
!= e1000_82545_rev_3
)
605 ret_val
= hw
->nvm
.ops
.read(hw
, NVM_PHY_CLASS_WORD
, 1, &nvm_data
);
607 ret_val
= -E1000_ERR_PHY
;
611 if ((nvm_data
!= NVM_RESERVED_WORD
) && (nvm_data
& NVM_PHY_CLASS_A
)) {
612 ret_val
= hw
->phy
.ops
.write_reg(hw
, M88E1000_PHY_PAGE_SELECT
,
615 ret_val
= -E1000_ERR_PHY
;
618 ret_val
= hw
->phy
.ops
.write_reg(hw
,
619 M88E1000_PHY_GEN_CONTROL
,
622 ret_val
= -E1000_ERR_PHY
;
626 phy
->reset_disable
= false;
634 * e1000_power_down_phy_copper_82540 - Remove link in case of PHY power down
635 * @hw: pointer to the HW structure
637 * In the case of a PHY power down to save power, or to turn off link during a
638 * driver unload, or wake on lan is not enabled, remove the link.
641 e1000_power_down_phy_copper_82540(struct e1000_hw
*hw
)
643 /* If the management interface is not enabled, then power down */
644 if (!(E1000_READ_REG(hw
, E1000_MANC
) & E1000_MANC_SMBUS_EN
))
645 e1000_power_down_phy_copper(hw
);
649 * e1000_clear_hw_cntrs_82540 - Clear device specific hardware counters
650 * @hw: pointer to the HW structure
652 * Clears the hardware counters by reading the counter registers.
655 e1000_clear_hw_cntrs_82540(struct e1000_hw
*hw
)
657 DEBUGFUNC("e1000_clear_hw_cntrs_82540");
659 e1000_clear_hw_cntrs_base_generic(hw
);
661 (void) E1000_READ_REG(hw
, E1000_PRC64
);
662 (void) E1000_READ_REG(hw
, E1000_PRC127
);
663 (void) E1000_READ_REG(hw
, E1000_PRC255
);
664 (void) E1000_READ_REG(hw
, E1000_PRC511
);
665 (void) E1000_READ_REG(hw
, E1000_PRC1023
);
666 (void) E1000_READ_REG(hw
, E1000_PRC1522
);
667 (void) E1000_READ_REG(hw
, E1000_PTC64
);
668 (void) E1000_READ_REG(hw
, E1000_PTC127
);
669 (void) E1000_READ_REG(hw
, E1000_PTC255
);
670 (void) E1000_READ_REG(hw
, E1000_PTC511
);
671 (void) E1000_READ_REG(hw
, E1000_PTC1023
);
672 (void) E1000_READ_REG(hw
, E1000_PTC1522
);
674 (void) E1000_READ_REG(hw
, E1000_ALGNERRC
);
675 (void) E1000_READ_REG(hw
, E1000_RXERRC
);
676 (void) E1000_READ_REG(hw
, E1000_TNCRS
);
677 (void) E1000_READ_REG(hw
, E1000_CEXTERR
);
678 (void) E1000_READ_REG(hw
, E1000_TSCTC
);
679 (void) E1000_READ_REG(hw
, E1000_TSCTFC
);
681 (void) E1000_READ_REG(hw
, E1000_MGTPRC
);
682 (void) E1000_READ_REG(hw
, E1000_MGTPDC
);
683 (void) E1000_READ_REG(hw
, E1000_MGTPTC
);
687 * e1000_read_mac_addr_82540 - Read device MAC address
688 * @hw: pointer to the HW structure
690 * Reads the device MAC address from the EEPROM and stores the value.
691 * Since devices with two ports use the same EEPROM, we increment the
692 * last bit in the MAC address for the second port.
694 * This version is being used over generic because of customer issues
695 * with VmWare and Virtual Box when using generic. It seems in
696 * the emulated 82545, RAR[0] does NOT have a valid address after a
697 * reset, this older method works and using this breaks nothing for
698 * these legacy adapters.
701 e1000_read_mac_addr_82540(struct e1000_hw
*hw
)
703 s32 ret_val
= E1000_SUCCESS
;
704 u16 offset
, nvm_data
, i
;
706 DEBUGFUNC("e1000_read_mac_addr");
708 for (i
= 0; i
< ETH_ADDR_LEN
; i
+= 2) {
710 ret_val
= hw
->nvm
.ops
.read(hw
, offset
, 1, &nvm_data
);
712 DEBUGOUT("NVM Read Error\n");
715 hw
->mac
.perm_addr
[i
] = (u8
)(nvm_data
& 0xFF);
716 hw
->mac
.perm_addr
[i
+1] = (u8
)(nvm_data
>> 8);
719 /* Flip last bit of mac address if we're on second port */
720 if (hw
->bus
.func
== E1000_FUNC_1
)
721 hw
->mac
.perm_addr
[5] ^= 1;
723 for (i
= 0; i
< ETH_ADDR_LEN
; i
++)
724 hw
->mac
.addr
[i
] = hw
->mac
.perm_addr
[i
];