|
@@ -143,34 +143,6 @@ void igb_write_vfta(struct e1000_hw *hw, u32 offset, u32 value)
|
|
wrfl();
|
|
wrfl();
|
|
}
|
|
}
|
|
|
|
|
|
-/**
|
|
|
|
- * igb_init_rx_addrs - Initialize receive address's
|
|
|
|
- * @hw: pointer to the HW structure
|
|
|
|
- * @rar_count: receive address registers
|
|
|
|
- *
|
|
|
|
- * Setups the receive address registers by setting the base receive address
|
|
|
|
- * register to the devices MAC address and clearing all the other receive
|
|
|
|
- * address registers to 0.
|
|
|
|
- **/
|
|
|
|
-void igb_init_rx_addrs(struct e1000_hw *hw, u16 rar_count)
|
|
|
|
-{
|
|
|
|
- u32 i;
|
|
|
|
-
|
|
|
|
- /* Setup the receive address */
|
|
|
|
- hw_dbg("Programming MAC Address into RAR[0]\n");
|
|
|
|
-
|
|
|
|
- hw->mac.ops.rar_set(hw, hw->mac.addr, 0);
|
|
|
|
-
|
|
|
|
- /* Zero out the other (rar_entry_count - 1) receive addresses */
|
|
|
|
- hw_dbg("Clearing RAR[1-%u]\n", rar_count-1);
|
|
|
|
- for (i = 1; i < rar_count; i++) {
|
|
|
|
- array_wr32(E1000_RA, (i << 1), 0);
|
|
|
|
- wrfl();
|
|
|
|
- array_wr32(E1000_RA, ((i << 1) + 1), 0);
|
|
|
|
- wrfl();
|
|
|
|
- }
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
/**
|
|
/**
|
|
* igb_check_alt_mac_addr - Check for alternate MAC addr
|
|
* igb_check_alt_mac_addr - Check for alternate MAC addr
|
|
* @hw: pointer to the HW structure
|
|
* @hw: pointer to the HW structure
|
|
@@ -296,60 +268,6 @@ void igb_mta_set(struct e1000_hw *hw, u32 hash_value)
|
|
wrfl();
|
|
wrfl();
|
|
}
|
|
}
|
|
|
|
|
|
-/**
|
|
|
|
- * igb_update_mc_addr_list - Update Multicast addresses
|
|
|
|
- * @hw: pointer to the HW structure
|
|
|
|
- * @mc_addr_list: array of multicast addresses to program
|
|
|
|
- * @mc_addr_count: number of multicast addresses to program
|
|
|
|
- * @rar_used_count: the first RAR register free to program
|
|
|
|
- * @rar_count: total number of supported Receive Address Registers
|
|
|
|
- *
|
|
|
|
- * Updates the Receive Address Registers and Multicast Table Array.
|
|
|
|
- * The caller must have a packed mc_addr_list of multicast addresses.
|
|
|
|
- * The parameter rar_count will usually be hw->mac.rar_entry_count
|
|
|
|
- * unless there are workarounds that change this.
|
|
|
|
- **/
|
|
|
|
-void igb_update_mc_addr_list(struct e1000_hw *hw,
|
|
|
|
- u8 *mc_addr_list, u32 mc_addr_count,
|
|
|
|
- u32 rar_used_count, u32 rar_count)
|
|
|
|
-{
|
|
|
|
- u32 hash_value;
|
|
|
|
- u32 i;
|
|
|
|
-
|
|
|
|
- /*
|
|
|
|
- * Load the first set of multicast addresses into the exact
|
|
|
|
- * filters (RAR). If there are not enough to fill the RAR
|
|
|
|
- * array, clear the filters.
|
|
|
|
- */
|
|
|
|
- for (i = rar_used_count; i < rar_count; i++) {
|
|
|
|
- if (mc_addr_count) {
|
|
|
|
- hw->mac.ops.rar_set(hw, mc_addr_list, i);
|
|
|
|
- mc_addr_count--;
|
|
|
|
- mc_addr_list += ETH_ALEN;
|
|
|
|
- } else {
|
|
|
|
- array_wr32(E1000_RA, i << 1, 0);
|
|
|
|
- wrfl();
|
|
|
|
- array_wr32(E1000_RA, (i << 1) + 1, 0);
|
|
|
|
- wrfl();
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- /* Clear the old settings from the MTA */
|
|
|
|
- hw_dbg("Clearing MTA\n");
|
|
|
|
- for (i = 0; i < hw->mac.mta_reg_count; i++) {
|
|
|
|
- array_wr32(E1000_MTA, i, 0);
|
|
|
|
- wrfl();
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- /* Load any remaining multicast addresses into the hash table. */
|
|
|
|
- for (; mc_addr_count > 0; mc_addr_count--) {
|
|
|
|
- hash_value = igb_hash_mc_addr(hw, mc_addr_list);
|
|
|
|
- hw_dbg("Hash value = 0x%03X\n", hash_value);
|
|
|
|
- igb_mta_set(hw, hash_value);
|
|
|
|
- mc_addr_list += ETH_ALEN;
|
|
|
|
- }
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
/**
|
|
/**
|
|
* igb_hash_mc_addr - Generate a multicast hash value
|
|
* igb_hash_mc_addr - Generate a multicast hash value
|
|
* @hw: pointer to the HW structure
|
|
* @hw: pointer to the HW structure
|