e1000e: provide family-specific functions to manage VLAN filter arrays
The two MAC-families that have VLAN filter table register arrays manage each a bit differently from one another, so provide family-specific functions for managing the register arrays and function pointers to access the appropriate function. Also make sure attempts to access these register arrays are not done on parts not supporting that feature. Signed-off-by: Bruce Allan <bruce.w.allan@intel.com> Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
ff9c38bba3
commit
caaddaf835
6 changed files with 45 additions and 16 deletions
|
@ -2031,11 +2031,14 @@ static void e1000_vlan_rx_add_vid(struct net_device *netdev, u16 vid)
|
|||
E1000_MNG_DHCP_COOKIE_STATUS_VLAN) &&
|
||||
(vid == adapter->mng_vlan_id))
|
||||
return;
|
||||
|
||||
/* add VID to filter table */
|
||||
index = (vid >> 5) & 0x7F;
|
||||
vfta = E1000_READ_REG_ARRAY(hw, E1000_VFTA, index);
|
||||
vfta |= (1 << (vid & 0x1F));
|
||||
e1000e_write_vfta(hw, index, vfta);
|
||||
if (adapter->flags & FLAG_HAS_HW_VLAN_FILTER) {
|
||||
index = (vid >> 5) & 0x7F;
|
||||
vfta = E1000_READ_REG_ARRAY(hw, E1000_VFTA, index);
|
||||
vfta |= (1 << (vid & 0x1F));
|
||||
hw->mac.ops.write_vfta(hw, index, vfta);
|
||||
}
|
||||
}
|
||||
|
||||
static void e1000_vlan_rx_kill_vid(struct net_device *netdev, u16 vid)
|
||||
|
@ -2060,10 +2063,12 @@ static void e1000_vlan_rx_kill_vid(struct net_device *netdev, u16 vid)
|
|||
}
|
||||
|
||||
/* remove VID from filter table */
|
||||
index = (vid >> 5) & 0x7F;
|
||||
vfta = E1000_READ_REG_ARRAY(hw, E1000_VFTA, index);
|
||||
vfta &= ~(1 << (vid & 0x1F));
|
||||
e1000e_write_vfta(hw, index, vfta);
|
||||
if (adapter->flags & FLAG_HAS_HW_VLAN_FILTER) {
|
||||
index = (vid >> 5) & 0x7F;
|
||||
vfta = E1000_READ_REG_ARRAY(hw, E1000_VFTA, index);
|
||||
vfta &= ~(1 << (vid & 0x1F));
|
||||
hw->mac.ops.write_vfta(hw, index, vfta);
|
||||
}
|
||||
}
|
||||
|
||||
static void e1000_update_mng_vlan(struct e1000_adapter *adapter)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue