net/ixgbe/base: allow setting MAC anti spoofing per VF
Make ixgbe_set_mac_anti_spoofing() consistent with the other functions that deal with setting VLAN and Ethertype spoofing by changing the prototype to accept a VF parameter. Also change the logic for writing the PFVFSPOOF register to be similar to the MAC and Ethertype functions. Signed-off-by: Beilei Xing <beilei.xing@intel.com>
This commit is contained in:
parent
7887b02464
commit
dad45d1765
@ -4203,43 +4203,25 @@ out:
|
||||
/**
|
||||
* ixgbe_set_mac_anti_spoofing - Enable/Disable MAC anti-spoofing
|
||||
* @hw: pointer to hardware structure
|
||||
* @enable: enable or disable switch for anti-spoofing
|
||||
* @pf: Physical Function pool - do not enable anti-spoofing for the PF
|
||||
* @enable: enable or disable switch for MAC anti-spoofing
|
||||
* @vf: Virtual Function pool - VF Pool to set for MAC anti-spoofing
|
||||
*
|
||||
**/
|
||||
void ixgbe_set_mac_anti_spoofing(struct ixgbe_hw *hw, bool enable, int pf)
|
||||
void ixgbe_set_mac_anti_spoofing(struct ixgbe_hw *hw, bool enable, int vf)
|
||||
{
|
||||
int j;
|
||||
int pf_target_reg = pf >> 3;
|
||||
int pf_target_shift = pf % 8;
|
||||
u32 pfvfspoof = 0;
|
||||
int vf_target_reg = vf >> 3;
|
||||
int vf_target_shift = vf % 8;
|
||||
u32 pfvfspoof;
|
||||
|
||||
if (hw->mac.type == ixgbe_mac_82598EB)
|
||||
return;
|
||||
|
||||
pfvfspoof = IXGBE_READ_REG(hw, IXGBE_PFVFSPOOF(vf_target_reg));
|
||||
if (enable)
|
||||
pfvfspoof = IXGBE_SPOOF_MACAS_MASK;
|
||||
|
||||
/*
|
||||
* PFVFSPOOF register array is size 8 with 8 bits assigned to
|
||||
* MAC anti-spoof enables in each register array element.
|
||||
*/
|
||||
for (j = 0; j < pf_target_reg; j++)
|
||||
IXGBE_WRITE_REG(hw, IXGBE_PFVFSPOOF(j), pfvfspoof);
|
||||
|
||||
/*
|
||||
* The PF should be allowed to spoof so that it can support
|
||||
* emulation mode NICs. Do not set the bits assigned to the PF
|
||||
*/
|
||||
pfvfspoof &= (1 << pf_target_shift) - 1;
|
||||
IXGBE_WRITE_REG(hw, IXGBE_PFVFSPOOF(j), pfvfspoof);
|
||||
|
||||
/*
|
||||
* Remaining pools belong to the PF so they do not need to have
|
||||
* anti-spoofing enabled.
|
||||
*/
|
||||
for (j++; j < IXGBE_PFVFSPOOF_REG_COUNT; j++)
|
||||
IXGBE_WRITE_REG(hw, IXGBE_PFVFSPOOF(j), 0);
|
||||
pfvfspoof |= (1 << vf_target_shift);
|
||||
else
|
||||
pfvfspoof &= ~(1 << vf_target_shift);
|
||||
IXGBE_WRITE_REG(hw, IXGBE_PFVFSPOOF(vf_target_reg), pfvfspoof);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -148,7 +148,7 @@ s32 ixgbe_get_wwn_prefix_generic(struct ixgbe_hw *hw, u16 *wwnn_prefix,
|
||||
u16 *wwpn_prefix);
|
||||
|
||||
s32 ixgbe_get_fcoe_boot_status_generic(struct ixgbe_hw *hw, u16 *bs);
|
||||
void ixgbe_set_mac_anti_spoofing(struct ixgbe_hw *hw, bool enable, int pf);
|
||||
void ixgbe_set_mac_anti_spoofing(struct ixgbe_hw *hw, bool enable, int vf);
|
||||
void ixgbe_set_vlan_anti_spoofing(struct ixgbe_hw *hw, bool enable, int vf);
|
||||
s32 ixgbe_get_device_caps_generic(struct ixgbe_hw *hw, u16 *device_caps);
|
||||
void ixgbe_set_rxpba_generic(struct ixgbe_hw *hw, int num_pb, u32 headroom,
|
||||
|
Loading…
x
Reference in New Issue
Block a user