]> git.kernelconcepts.de Git - karo-tx-linux.git/blobdiff - drivers/net/ethernet/intel/e1000e/netdev.c
net: vlan: prepare for 802.1ad VLAN filtering offload
[karo-tx-linux.git] / drivers / net / ethernet / intel / e1000e / netdev.c
index a2e7db33bf9d157a8dab840670d97c24ab0a9a5f..8c17f01a155fcc2b94633896f7d156ab03c74407 100644 (file)
@@ -2672,7 +2672,8 @@ static int e1000e_poll(struct napi_struct *napi, int weight)
        return work_done;
 }
 
-static int e1000_vlan_rx_add_vid(struct net_device *netdev, u16 vid)
+static int e1000_vlan_rx_add_vid(struct net_device *netdev,
+                                __be16 proto, u16 vid)
 {
        struct e1000_adapter *adapter = netdev_priv(netdev);
        struct e1000_hw *hw = &adapter->hw;
@@ -2697,7 +2698,8 @@ static int e1000_vlan_rx_add_vid(struct net_device *netdev, u16 vid)
        return 0;
 }
 
-static int e1000_vlan_rx_kill_vid(struct net_device *netdev, u16 vid)
+static int e1000_vlan_rx_kill_vid(struct net_device *netdev,
+                                 __be16 proto, u16 vid)
 {
        struct e1000_adapter *adapter = netdev_priv(netdev);
        struct e1000_hw *hw = &adapter->hw;
@@ -2741,7 +2743,8 @@ static void e1000e_vlan_filter_disable(struct e1000_adapter *adapter)
                ew32(RCTL, rctl);
 
                if (adapter->mng_vlan_id != (u16)E1000_MNG_VLAN_NONE) {
-                       e1000_vlan_rx_kill_vid(netdev, adapter->mng_vlan_id);
+                       e1000_vlan_rx_kill_vid(netdev, htons(ETH_P_8021Q),
+                                              adapter->mng_vlan_id);
                        adapter->mng_vlan_id = E1000_MNG_VLAN_NONE;
                }
        }
@@ -2802,22 +2805,22 @@ static void e1000_update_mng_vlan(struct e1000_adapter *adapter)
        u16 old_vid = adapter->mng_vlan_id;
 
        if (adapter->hw.mng_cookie.status & E1000_MNG_DHCP_COOKIE_STATUS_VLAN) {
-               e1000_vlan_rx_add_vid(netdev, vid);
+               e1000_vlan_rx_add_vid(netdev, htons(ETH_P_8021Q), vid);
                adapter->mng_vlan_id = vid;
        }
 
        if ((old_vid != (u16)E1000_MNG_VLAN_NONE) && (vid != old_vid))
-               e1000_vlan_rx_kill_vid(netdev, old_vid);
+               e1000_vlan_rx_kill_vid(netdev, htons(ETH_P_8021Q), old_vid);
 }
 
 static void e1000_restore_vlan(struct e1000_adapter *adapter)
 {
        u16 vid;
 
-       e1000_vlan_rx_add_vid(adapter->netdev, 0);
+       e1000_vlan_rx_add_vid(adapter->netdev, htons(ETH_P_8021Q), 0);
 
        for_each_set_bit(vid, adapter->active_vlans, VLAN_N_VID)
-           e1000_vlan_rx_add_vid(adapter->netdev, vid);
+           e1000_vlan_rx_add_vid(adapter->netdev, htons(ETH_P_8021Q), vid);
 }
 
 static void e1000_init_manageability_pt(struct e1000_adapter *adapter)
@@ -4384,7 +4387,8 @@ static int e1000_close(struct net_device *netdev)
         * the same ID is registered on the host OS (let 8021q kill it)
         */
        if (adapter->hw.mng_cookie.status & E1000_MNG_DHCP_COOKIE_STATUS_VLAN)
-               e1000_vlan_rx_kill_vid(netdev, adapter->mng_vlan_id);
+               e1000_vlan_rx_kill_vid(netdev, htons(ETH_P_8021Q),
+                                      adapter->mng_vlan_id);
 
        /* If AMT is enabled, let the firmware know that the network
         * interface is now closed