diff options
Diffstat (limited to 'drivers/net/igb/e1000_mac.c')
-rw-r--r-- | drivers/net/igb/e1000_mac.c | 84 |
1 files changed, 1 insertions, 83 deletions
diff --git a/drivers/net/igb/e1000_mac.c b/drivers/net/igb/e1000_mac.c index 20408aa1f916..e18747c70bec 100644 --- a/drivers/net/igb/e1000_mac.c +++ b/drivers/net/igb/e1000_mac.c | |||
@@ -144,34 +144,6 @@ void igb_write_vfta(struct e1000_hw *hw, u32 offset, u32 value) | |||
144 | } | 144 | } |
145 | 145 | ||
146 | /** | 146 | /** |
147 | * igb_init_rx_addrs - Initialize receive address's | ||
148 | * @hw: pointer to the HW structure | ||
149 | * @rar_count: receive address registers | ||
150 | * | ||
151 | * Setups the receive address registers by setting the base receive address | ||
152 | * register to the devices MAC address and clearing all the other receive | ||
153 | * address registers to 0. | ||
154 | **/ | ||
155 | void igb_init_rx_addrs(struct e1000_hw *hw, u16 rar_count) | ||
156 | { | ||
157 | u32 i; | ||
158 | |||
159 | /* Setup the receive address */ | ||
160 | hw_dbg("Programming MAC Address into RAR[0]\n"); | ||
161 | |||
162 | hw->mac.ops.rar_set(hw, hw->mac.addr, 0); | ||
163 | |||
164 | /* Zero out the other (rar_entry_count - 1) receive addresses */ | ||
165 | hw_dbg("Clearing RAR[1-%u]\n", rar_count-1); | ||
166 | for (i = 1; i < rar_count; i++) { | ||
167 | array_wr32(E1000_RA, (i << 1), 0); | ||
168 | wrfl(); | ||
169 | array_wr32(E1000_RA, ((i << 1) + 1), 0); | ||
170 | wrfl(); | ||
171 | } | ||
172 | } | ||
173 | |||
174 | /** | ||
175 | * igb_check_alt_mac_addr - Check for alternate MAC addr | 147 | * igb_check_alt_mac_addr - Check for alternate MAC addr |
176 | * @hw: pointer to the HW structure | 148 | * @hw: pointer to the HW structure |
177 | * | 149 | * |
@@ -271,7 +243,7 @@ void igb_rar_set(struct e1000_hw *hw, u8 *addr, u32 index) | |||
271 | * current value is read, the new bit is OR'd in and the new value is | 243 | * current value is read, the new bit is OR'd in and the new value is |
272 | * written back into the register. | 244 | * written back into the register. |
273 | **/ | 245 | **/ |
274 | static void igb_mta_set(struct e1000_hw *hw, u32 hash_value) | 246 | void igb_mta_set(struct e1000_hw *hw, u32 hash_value) |
275 | { | 247 | { |
276 | u32 hash_bit, hash_reg, mta; | 248 | u32 hash_bit, hash_reg, mta; |
277 | 249 | ||
@@ -297,60 +269,6 @@ static void igb_mta_set(struct e1000_hw *hw, u32 hash_value) | |||
297 | } | 269 | } |
298 | 270 | ||
299 | /** | 271 | /** |
300 | * igb_update_mc_addr_list - Update Multicast addresses | ||
301 | * @hw: pointer to the HW structure | ||
302 | * @mc_addr_list: array of multicast addresses to program | ||
303 | * @mc_addr_count: number of multicast addresses to program | ||
304 | * @rar_used_count: the first RAR register free to program | ||
305 | * @rar_count: total number of supported Receive Address Registers | ||
306 | * | ||
307 | * Updates the Receive Address Registers and Multicast Table Array. | ||
308 | * The caller must have a packed mc_addr_list of multicast addresses. | ||
309 | * The parameter rar_count will usually be hw->mac.rar_entry_count | ||
310 | * unless there are workarounds that change this. | ||
311 | **/ | ||
312 | void igb_update_mc_addr_list(struct e1000_hw *hw, | ||
313 | u8 *mc_addr_list, u32 mc_addr_count, | ||
314 | u32 rar_used_count, u32 rar_count) | ||
315 | { | ||
316 | u32 hash_value; | ||
317 | u32 i; | ||
318 | |||
319 | /* | ||
320 | * Load the first set of multicast addresses into the exact | ||
321 | * filters (RAR). If there are not enough to fill the RAR | ||
322 | * array, clear the filters. | ||
323 | */ | ||
324 | for (i = rar_used_count; i < rar_count; i++) { | ||
325 | if (mc_addr_count) { | ||
326 | hw->mac.ops.rar_set(hw, mc_addr_list, i); | ||
327 | mc_addr_count--; | ||
328 | mc_addr_list += ETH_ALEN; | ||
329 | } else { | ||
330 | array_wr32(E1000_RA, i << 1, 0); | ||
331 | wrfl(); | ||
332 | array_wr32(E1000_RA, (i << 1) + 1, 0); | ||
333 | wrfl(); | ||
334 | } | ||
335 | } | ||
336 | |||
337 | /* Clear the old settings from the MTA */ | ||
338 | hw_dbg("Clearing MTA\n"); | ||
339 | for (i = 0; i < hw->mac.mta_reg_count; i++) { | ||
340 | array_wr32(E1000_MTA, i, 0); | ||
341 | wrfl(); | ||
342 | } | ||
343 | |||
344 | /* Load any remaining multicast addresses into the hash table. */ | ||
345 | for (; mc_addr_count > 0; mc_addr_count--) { | ||
346 | hash_value = igb_hash_mc_addr(hw, mc_addr_list); | ||
347 | hw_dbg("Hash value = 0x%03X\n", hash_value); | ||
348 | igb_mta_set(hw, hash_value); | ||
349 | mc_addr_list += ETH_ALEN; | ||
350 | } | ||
351 | } | ||
352 | |||
353 | /** | ||
354 | * igb_hash_mc_addr - Generate a multicast hash value | 272 | * igb_hash_mc_addr - Generate a multicast hash value |
355 | * @hw: pointer to the HW structure | 273 | * @hw: pointer to the HW structure |
356 | * @mc_addr: pointer to a multicast address | 274 | * @mc_addr: pointer to a multicast address |