|
@@ -285,41 +285,6 @@ void igb_mta_set(struct e1000_hw *hw, u32 hash_value)
|
|
|
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
|
|
|
- *
|
|
|
- * Updates entire Multicast Table Array.
|
|
|
- * The caller must have a packed mc_addr_list of multicast addresses.
|
|
|
- **/
|
|
|
-void igb_update_mc_addr_list(struct e1000_hw *hw,
|
|
|
- u8 *mc_addr_list, u32 mc_addr_count)
|
|
|
-{
|
|
|
- u32 hash_value, hash_bit, hash_reg;
|
|
|
- int i;
|
|
|
-
|
|
|
- /* clear mta_shadow */
|
|
|
- memset(&hw->mac.mta_shadow, 0, sizeof(hw->mac.mta_shadow));
|
|
|
-
|
|
|
- /* update mta_shadow from mc_addr_list */
|
|
|
- for (i = 0; (u32) i < mc_addr_count; i++) {
|
|
|
- hash_value = igb_hash_mc_addr(hw, mc_addr_list);
|
|
|
-
|
|
|
- hash_reg = (hash_value >> 5) & (hw->mac.mta_reg_count - 1);
|
|
|
- hash_bit = hash_value & 0x1F;
|
|
|
-
|
|
|
- hw->mac.mta_shadow[hash_reg] |= (1 << hash_bit);
|
|
|
- mc_addr_list += (ETH_ALEN);
|
|
|
- }
|
|
|
-
|
|
|
- /* replace the entire MTA table */
|
|
|
- for (i = hw->mac.mta_reg_count - 1; i >= 0; i--)
|
|
|
- array_wr32(E1000_MTA, i, hw->mac.mta_shadow[i]);
|
|
|
- wrfl();
|
|
|
-}
|
|
|
-
|
|
|
/**
|
|
|
* igb_hash_mc_addr - Generate a multicast hash value
|
|
|
* @hw: pointer to the HW structure
|
|
@@ -329,7 +294,7 @@ void igb_update_mc_addr_list(struct e1000_hw *hw,
|
|
|
* the multicast filter table array address and new table value. See
|
|
|
* igb_mta_set()
|
|
|
**/
|
|
|
-u32 igb_hash_mc_addr(struct e1000_hw *hw, u8 *mc_addr)
|
|
|
+static u32 igb_hash_mc_addr(struct e1000_hw *hw, u8 *mc_addr)
|
|
|
{
|
|
|
u32 hash_value, hash_mask;
|
|
|
u8 bit_shift = 0;
|
|
@@ -391,6 +356,41 @@ u32 igb_hash_mc_addr(struct e1000_hw *hw, u8 *mc_addr)
|
|
|
return hash_value;
|
|
|
}
|
|
|
|
|
|
+/**
|
|
|
+ * 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
|
|
|
+ *
|
|
|
+ * Updates entire Multicast Table Array.
|
|
|
+ * The caller must have a packed mc_addr_list of multicast addresses.
|
|
|
+ **/
|
|
|
+void igb_update_mc_addr_list(struct e1000_hw *hw,
|
|
|
+ u8 *mc_addr_list, u32 mc_addr_count)
|
|
|
+{
|
|
|
+ u32 hash_value, hash_bit, hash_reg;
|
|
|
+ int i;
|
|
|
+
|
|
|
+ /* clear mta_shadow */
|
|
|
+ memset(&hw->mac.mta_shadow, 0, sizeof(hw->mac.mta_shadow));
|
|
|
+
|
|
|
+ /* update mta_shadow from mc_addr_list */
|
|
|
+ for (i = 0; (u32) i < mc_addr_count; i++) {
|
|
|
+ hash_value = igb_hash_mc_addr(hw, mc_addr_list);
|
|
|
+
|
|
|
+ hash_reg = (hash_value >> 5) & (hw->mac.mta_reg_count - 1);
|
|
|
+ hash_bit = hash_value & 0x1F;
|
|
|
+
|
|
|
+ hw->mac.mta_shadow[hash_reg] |= (1 << hash_bit);
|
|
|
+ mc_addr_list += (ETH_ALEN);
|
|
|
+ }
|
|
|
+
|
|
|
+ /* replace the entire MTA table */
|
|
|
+ for (i = hw->mac.mta_reg_count - 1; i >= 0; i--)
|
|
|
+ array_wr32(E1000_MTA, i, hw->mac.mta_shadow[i]);
|
|
|
+ wrfl();
|
|
|
+}
|
|
|
+
|
|
|
/**
|
|
|
* igb_clear_hw_cntrs_base - Clear base hardware counters
|
|
|
* @hw: pointer to the HW structure
|