|
@@ -154,6 +154,16 @@ void __ew32(struct e1000_hw *hw, unsigned long reg, u32 val)
|
|
|
writel(val, hw->hw_addr + reg);
|
|
|
}
|
|
|
|
|
|
+static bool e1000e_vlan_used(struct e1000_adapter *adapter)
|
|
|
+{
|
|
|
+ u16 vid;
|
|
|
+
|
|
|
+ for_each_set_bit(vid, adapter->active_vlans, VLAN_N_VID)
|
|
|
+ return true;
|
|
|
+
|
|
|
+ return false;
|
|
|
+}
|
|
|
+
|
|
|
/**
|
|
|
* e1000_regdump - register printout routine
|
|
|
* @hw: pointer to the HW structure
|
|
@@ -2789,7 +2799,7 @@ static void e1000e_vlan_filter_enable(struct e1000_adapter *adapter)
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * e1000e_vlan_strip_enable - helper to disable HW VLAN stripping
|
|
|
+ * e1000e_vlan_strip_disable - helper to disable HW VLAN stripping
|
|
|
* @adapter: board private structure to initialize
|
|
|
**/
|
|
|
static void e1000e_vlan_strip_disable(struct e1000_adapter *adapter)
|
|
@@ -3443,7 +3453,8 @@ static void e1000e_set_rx_mode(struct net_device *netdev)
|
|
|
|
|
|
ew32(RCTL, rctl);
|
|
|
|
|
|
- if (netdev->features & NETIF_F_HW_VLAN_CTAG_RX)
|
|
|
+ if (netdev->features & NETIF_F_HW_VLAN_CTAG_RX ||
|
|
|
+ e1000e_vlan_used(adapter))
|
|
|
e1000e_vlan_strip_enable(adapter);
|
|
|
else
|
|
|
e1000e_vlan_strip_disable(adapter);
|