|
@@ -1818,27 +1818,32 @@ out:
|
|
|
**/
|
|
|
void igb_vmdq_set_anti_spoofing_pf(struct e1000_hw *hw, bool enable, int pf)
|
|
|
{
|
|
|
- u32 dtxswc;
|
|
|
+ u32 reg_val, reg_offset;
|
|
|
|
|
|
switch (hw->mac.type) {
|
|
|
case e1000_82576:
|
|
|
+ reg_offset = E1000_DTXSWC;
|
|
|
+ break;
|
|
|
case e1000_i350:
|
|
|
- dtxswc = rd32(E1000_DTXSWC);
|
|
|
- if (enable) {
|
|
|
- dtxswc |= (E1000_DTXSWC_MAC_SPOOF_MASK |
|
|
|
- E1000_DTXSWC_VLAN_SPOOF_MASK);
|
|
|
- /* The PF can spoof - it has to in order to
|
|
|
- * support emulation mode NICs */
|
|
|
- dtxswc ^= (1 << pf | 1 << (pf + MAX_NUM_VFS));
|
|
|
- } else {
|
|
|
- dtxswc &= ~(E1000_DTXSWC_MAC_SPOOF_MASK |
|
|
|
- E1000_DTXSWC_VLAN_SPOOF_MASK);
|
|
|
- }
|
|
|
- wr32(E1000_DTXSWC, dtxswc);
|
|
|
+ reg_offset = E1000_TXSWC;
|
|
|
break;
|
|
|
default:
|
|
|
- break;
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ reg_val = rd32(reg_offset);
|
|
|
+ if (enable) {
|
|
|
+ reg_val |= (E1000_DTXSWC_MAC_SPOOF_MASK |
|
|
|
+ E1000_DTXSWC_VLAN_SPOOF_MASK);
|
|
|
+ /* The PF can spoof - it has to in order to
|
|
|
+ * support emulation mode NICs
|
|
|
+ */
|
|
|
+ reg_val ^= (1 << pf | 1 << (pf + MAX_NUM_VFS));
|
|
|
+ } else {
|
|
|
+ reg_val &= ~(E1000_DTXSWC_MAC_SPOOF_MASK |
|
|
|
+ E1000_DTXSWC_VLAN_SPOOF_MASK);
|
|
|
}
|
|
|
+ wr32(reg_offset, reg_val);
|
|
|
}
|
|
|
|
|
|
/**
|