Commit 5c58c47a authored by Jiri Pirko's avatar Jiri Pirko Committed by David S. Miller

ixgbevf: convert to use netdev_for_each_mc_addr

Signed-off-by: default avatarJiri Pirko <jpirko@redhat.com>
Signed-off-by: default avatarJeff Kirsher <jeffrey.t.kirsher@intel.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 2853eb89
...@@ -1495,22 +1495,6 @@ static void ixgbevf_restore_vlan(struct ixgbevf_adapter *adapter) ...@@ -1495,22 +1495,6 @@ static void ixgbevf_restore_vlan(struct ixgbevf_adapter *adapter)
} }
} }
static u8 *ixgbevf_addr_list_itr(struct ixgbe_hw *hw, u8 **mc_addr_ptr,
u32 *vmdq)
{
struct dev_mc_list *mc_ptr;
u8 *addr = *mc_addr_ptr;
*vmdq = 0;
mc_ptr = container_of(addr, struct dev_mc_list, dmi_addr[0]);
if (mc_ptr->next)
*mc_addr_ptr = mc_ptr->next->dmi_addr;
else
*mc_addr_ptr = NULL;
return addr;
}
/** /**
* ixgbevf_set_rx_mode - Multicast set * ixgbevf_set_rx_mode - Multicast set
* @netdev: network interface device structure * @netdev: network interface device structure
...@@ -1523,16 +1507,10 @@ static void ixgbevf_set_rx_mode(struct net_device *netdev) ...@@ -1523,16 +1507,10 @@ static void ixgbevf_set_rx_mode(struct net_device *netdev)
{ {
struct ixgbevf_adapter *adapter = netdev_priv(netdev); struct ixgbevf_adapter *adapter = netdev_priv(netdev);
struct ixgbe_hw *hw = &adapter->hw; struct ixgbe_hw *hw = &adapter->hw;
u8 *addr_list = NULL;
int addr_count = 0;
/* reprogram multicast list */ /* reprogram multicast list */
addr_count = netdev_mc_count(netdev);
if (addr_count)
addr_list = netdev->mc_list->dmi_addr;
if (hw->mac.ops.update_mc_addr_list) if (hw->mac.ops.update_mc_addr_list)
hw->mac.ops.update_mc_addr_list(hw, addr_list, addr_count, hw->mac.ops.update_mc_addr_list(hw, netdev);
ixgbevf_addr_list_itr);
} }
static void ixgbevf_napi_enable_all(struct ixgbevf_adapter *adapter) static void ixgbevf_napi_enable_all(struct ixgbevf_adapter *adapter)
......
...@@ -252,22 +252,18 @@ static s32 ixgbevf_set_rar_vf(struct ixgbe_hw *hw, u32 index, u8 *addr, ...@@ -252,22 +252,18 @@ static s32 ixgbevf_set_rar_vf(struct ixgbe_hw *hw, u32 index, u8 *addr,
/** /**
* ixgbevf_update_mc_addr_list_vf - Update Multicast addresses * ixgbevf_update_mc_addr_list_vf - Update Multicast addresses
* @hw: pointer to the HW structure * @hw: pointer to the HW structure
* @mc_addr_list: array of multicast addresses to program * @netdev: pointer to net device structure
* @mc_addr_count: number of multicast addresses to program
* @next: caller supplied function to return next address in list
* *
* Updates the Multicast Table Array. * Updates the Multicast Table Array.
**/ **/
static s32 ixgbevf_update_mc_addr_list_vf(struct ixgbe_hw *hw, u8 *mc_addr_list, static s32 ixgbevf_update_mc_addr_list_vf(struct ixgbe_hw *hw,
u32 mc_addr_count, struct net_device *netdev)
ixgbe_mc_addr_itr next)
{ {
struct dev_addr_list *dmi;
struct ixgbe_mbx_info *mbx = &hw->mbx; struct ixgbe_mbx_info *mbx = &hw->mbx;
u32 msgbuf[IXGBE_VFMAILBOX_SIZE]; u32 msgbuf[IXGBE_VFMAILBOX_SIZE];
u16 *vector_list = (u16 *)&msgbuf[1]; u16 *vector_list = (u16 *)&msgbuf[1];
u32 vector;
u32 cnt, i; u32 cnt, i;
u32 vmdq;
/* Each entry in the list uses 1 16 bit word. We have 30 /* Each entry in the list uses 1 16 bit word. We have 30
* 16 bit words available in our HW msg buffer (minus 1 for the * 16 bit words available in our HW msg buffer (minus 1 for the
...@@ -278,13 +274,17 @@ static s32 ixgbevf_update_mc_addr_list_vf(struct ixgbe_hw *hw, u8 *mc_addr_list, ...@@ -278,13 +274,17 @@ static s32 ixgbevf_update_mc_addr_list_vf(struct ixgbe_hw *hw, u8 *mc_addr_list,
* addresses except for in large enterprise network environments. * addresses except for in large enterprise network environments.
*/ */
cnt = (mc_addr_count > 30) ? 30 : mc_addr_count; cnt = netdev_mc_count(netdev);
if (cnt > 30)
cnt = 30;
msgbuf[0] = IXGBE_VF_SET_MULTICAST; msgbuf[0] = IXGBE_VF_SET_MULTICAST;
msgbuf[0] |= cnt << IXGBE_VT_MSGINFO_SHIFT; msgbuf[0] |= cnt << IXGBE_VT_MSGINFO_SHIFT;
for (i = 0; i < cnt; i++) { i = 0;
vector = ixgbevf_mta_vector(hw, next(hw, &mc_addr_list, &vmdq)); netdev_for_each_mc_addr(dmi, netdev) {
vector_list[i] = vector; if (i == cnt)
break;
vector_list[i++] = ixgbevf_mta_vector(hw, dmi->dmi_addr);
} }
mbx->ops.write_posted(hw, msgbuf, IXGBE_VFMAILBOX_SIZE); mbx->ops.write_posted(hw, msgbuf, IXGBE_VFMAILBOX_SIZE);
......
...@@ -32,6 +32,7 @@ ...@@ -32,6 +32,7 @@
#include <linux/delay.h> #include <linux/delay.h>
#include <linux/interrupt.h> #include <linux/interrupt.h>
#include <linux/if_ether.h> #include <linux/if_ether.h>
#include <linux/netdevice.h>
#include "defines.h" #include "defines.h"
#include "regs.h" #include "regs.h"
...@@ -62,8 +63,7 @@ struct ixgbe_mac_operations { ...@@ -62,8 +63,7 @@ struct ixgbe_mac_operations {
/* RAR, Multicast, VLAN */ /* RAR, Multicast, VLAN */
s32 (*set_rar)(struct ixgbe_hw *, u32, u8 *, u32); s32 (*set_rar)(struct ixgbe_hw *, u32, u8 *, u32);
s32 (*init_rx_addrs)(struct ixgbe_hw *); s32 (*init_rx_addrs)(struct ixgbe_hw *);
s32 (*update_mc_addr_list)(struct ixgbe_hw *, u8 *, u32, s32 (*update_mc_addr_list)(struct ixgbe_hw *, struct net_device *);
ixgbe_mc_addr_itr);
s32 (*enable_mc)(struct ixgbe_hw *); s32 (*enable_mc)(struct ixgbe_hw *);
s32 (*disable_mc)(struct ixgbe_hw *); s32 (*disable_mc)(struct ixgbe_hw *);
s32 (*clear_vfta)(struct ixgbe_hw *); s32 (*clear_vfta)(struct ixgbe_hw *);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment