diff options
Diffstat (limited to 'drivers/net/igb/e1000_mac.c')
-rw-r--r-- | drivers/net/igb/e1000_mac.c | 17 |
1 files changed, 9 insertions, 8 deletions
diff --git a/drivers/net/igb/e1000_mac.c b/drivers/net/igb/e1000_mac.c index 986aa902f7ed..4969a5b1cf3c 100644 --- a/drivers/net/igb/e1000_mac.c +++ b/drivers/net/igb/e1000_mac.c | |||
@@ -185,13 +185,12 @@ s32 igb_check_alt_mac_addr(struct e1000_hw *hw) | |||
185 | } | 185 | } |
186 | 186 | ||
187 | if (nvm_alt_mac_addr_offset == 0xFFFF) { | 187 | if (nvm_alt_mac_addr_offset == 0xFFFF) { |
188 | ret_val = -(E1000_NOT_IMPLEMENTED); | 188 | /* There is no Alternate MAC Address */ |
189 | goto out; | 189 | goto out; |
190 | } | 190 | } |
191 | 191 | ||
192 | if (hw->bus.func == E1000_FUNC_1) | 192 | if (hw->bus.func == E1000_FUNC_1) |
193 | nvm_alt_mac_addr_offset += ETH_ALEN/sizeof(u16); | 193 | nvm_alt_mac_addr_offset += E1000_ALT_MAC_ADDRESS_OFFSET_LAN1; |
194 | |||
195 | for (i = 0; i < ETH_ALEN; i += 2) { | 194 | for (i = 0; i < ETH_ALEN; i += 2) { |
196 | offset = nvm_alt_mac_addr_offset + (i >> 1); | 195 | offset = nvm_alt_mac_addr_offset + (i >> 1); |
197 | ret_val = hw->nvm.ops.read(hw, offset, 1, &nvm_data); | 196 | ret_val = hw->nvm.ops.read(hw, offset, 1, &nvm_data); |
@@ -206,14 +205,16 @@ s32 igb_check_alt_mac_addr(struct e1000_hw *hw) | |||
206 | 205 | ||
207 | /* if multicast bit is set, the alternate address will not be used */ | 206 | /* if multicast bit is set, the alternate address will not be used */ |
208 | if (alt_mac_addr[0] & 0x01) { | 207 | if (alt_mac_addr[0] & 0x01) { |
209 | ret_val = -(E1000_NOT_IMPLEMENTED); | 208 | hw_dbg("Ignoring Alternate Mac Address with MC bit set\n"); |
210 | goto out; | 209 | goto out; |
211 | } | 210 | } |
212 | 211 | ||
213 | for (i = 0; i < ETH_ALEN; i++) | 212 | /* |
214 | hw->mac.addr[i] = hw->mac.perm_addr[i] = alt_mac_addr[i]; | 213 | * We have a valid alternate MAC address, and we want to treat it the |
215 | 214 | * same as the normal permanent MAC address stored by the HW into the | |
216 | hw->mac.ops.rar_set(hw, hw->mac.perm_addr, 0); | 215 | * RAR. Do this by mapping this address into RAR0. |
216 | */ | ||
217 | hw->mac.ops.rar_set(hw, alt_mac_addr, 0); | ||
217 | 218 | ||
218 | out: | 219 | out: |
219 | return ret_val; | 220 | return ret_val; |