diff options
author | Patrick McHardy <kaber@trash.net> | 2013-04-18 22:04:28 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2013-04-19 14:45:27 -0400 |
commit | 80d5c3689b886308247da295a228a54df49a44f6 (patch) | |
tree | ce7b1e6898c3f9fea945e67fd06b125dfcc61fe7 /drivers/net | |
parent | f646968f8f7c624587de729115d802372b9063dd (diff) |
net: vlan: prepare for 802.1ad VLAN filtering offload
Change the rx_{add,kill}_vid callbacks to take a protocol argument in
preparation of 802.1ad support. The protocol argument used so far is
always htons(ETH_P_8021Q).
Signed-off-by: Patrick McHardy <kaber@trash.net>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net')
27 files changed, 129 insertions, 93 deletions
diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_main.c index 8d324f8a1757..35e89e12a1f7 100644 --- a/drivers/net/bonding/bond_main.c +++ b/drivers/net/bonding/bond_main.c | |||
@@ -428,14 +428,15 @@ int bond_dev_queue_xmit(struct bonding *bond, struct sk_buff *skb, | |||
428 | * @bond_dev: bonding net device that got called | 428 | * @bond_dev: bonding net device that got called |
429 | * @vid: vlan id being added | 429 | * @vid: vlan id being added |
430 | */ | 430 | */ |
431 | static int bond_vlan_rx_add_vid(struct net_device *bond_dev, uint16_t vid) | 431 | static int bond_vlan_rx_add_vid(struct net_device *bond_dev, |
432 | __be16 proto, u16 vid) | ||
432 | { | 433 | { |
433 | struct bonding *bond = netdev_priv(bond_dev); | 434 | struct bonding *bond = netdev_priv(bond_dev); |
434 | struct slave *slave, *stop_at; | 435 | struct slave *slave, *stop_at; |
435 | int i, res; | 436 | int i, res; |
436 | 437 | ||
437 | bond_for_each_slave(bond, slave, i) { | 438 | bond_for_each_slave(bond, slave, i) { |
438 | res = vlan_vid_add(slave->dev, vid); | 439 | res = vlan_vid_add(slave->dev, proto, vid); |
439 | if (res) | 440 | if (res) |
440 | goto unwind; | 441 | goto unwind; |
441 | } | 442 | } |
@@ -453,7 +454,7 @@ unwind: | |||
453 | /* unwind from head to the slave that failed */ | 454 | /* unwind from head to the slave that failed */ |
454 | stop_at = slave; | 455 | stop_at = slave; |
455 | bond_for_each_slave_from_to(bond, slave, i, bond->first_slave, stop_at) | 456 | bond_for_each_slave_from_to(bond, slave, i, bond->first_slave, stop_at) |
456 | vlan_vid_del(slave->dev, vid); | 457 | vlan_vid_del(slave->dev, proto, vid); |
457 | 458 | ||
458 | return res; | 459 | return res; |
459 | } | 460 | } |
@@ -463,14 +464,15 @@ unwind: | |||
463 | * @bond_dev: bonding net device that got called | 464 | * @bond_dev: bonding net device that got called |
464 | * @vid: vlan id being removed | 465 | * @vid: vlan id being removed |
465 | */ | 466 | */ |
466 | static int bond_vlan_rx_kill_vid(struct net_device *bond_dev, uint16_t vid) | 467 | static int bond_vlan_rx_kill_vid(struct net_device *bond_dev, |
468 | __be16 proto, u16 vid) | ||
467 | { | 469 | { |
468 | struct bonding *bond = netdev_priv(bond_dev); | 470 | struct bonding *bond = netdev_priv(bond_dev); |
469 | struct slave *slave; | 471 | struct slave *slave; |
470 | int i, res; | 472 | int i, res; |
471 | 473 | ||
472 | bond_for_each_slave(bond, slave, i) | 474 | bond_for_each_slave(bond, slave, i) |
473 | vlan_vid_del(slave->dev, vid); | 475 | vlan_vid_del(slave->dev, proto, vid); |
474 | 476 | ||
475 | res = bond_del_vlan(bond, vid); | 477 | res = bond_del_vlan(bond, vid); |
476 | if (res) { | 478 | if (res) { |
@@ -488,7 +490,8 @@ static void bond_add_vlans_on_slave(struct bonding *bond, struct net_device *sla | |||
488 | int res; | 490 | int res; |
489 | 491 | ||
490 | list_for_each_entry(vlan, &bond->vlan_list, vlan_list) { | 492 | list_for_each_entry(vlan, &bond->vlan_list, vlan_list) { |
491 | res = vlan_vid_add(slave_dev, vlan->vlan_id); | 493 | res = vlan_vid_add(slave_dev, htons(ETH_P_8021Q), |
494 | vlan->vlan_id); | ||
492 | if (res) | 495 | if (res) |
493 | pr_warning("%s: Failed to add vlan id %d to device %s\n", | 496 | pr_warning("%s: Failed to add vlan id %d to device %s\n", |
494 | bond->dev->name, vlan->vlan_id, | 497 | bond->dev->name, vlan->vlan_id, |
@@ -504,7 +507,7 @@ static void bond_del_vlans_from_slave(struct bonding *bond, | |||
504 | list_for_each_entry(vlan, &bond->vlan_list, vlan_list) { | 507 | list_for_each_entry(vlan, &bond->vlan_list, vlan_list) { |
505 | if (!vlan->vlan_id) | 508 | if (!vlan->vlan_id) |
506 | continue; | 509 | continue; |
507 | vlan_vid_del(slave_dev, vlan->vlan_id); | 510 | vlan_vid_del(slave_dev, htons(ETH_P_8021Q), vlan->vlan_id); |
508 | } | 511 | } |
509 | } | 512 | } |
510 | 513 | ||
diff --git a/drivers/net/ethernet/adaptec/starfire.c b/drivers/net/ethernet/adaptec/starfire.c index 365865130f7c..cdbc5443ae3b 100644 --- a/drivers/net/ethernet/adaptec/starfire.c +++ b/drivers/net/ethernet/adaptec/starfire.c | |||
@@ -594,7 +594,8 @@ static const struct ethtool_ops ethtool_ops; | |||
594 | 594 | ||
595 | 595 | ||
596 | #ifdef VLAN_SUPPORT | 596 | #ifdef VLAN_SUPPORT |
597 | static int netdev_vlan_rx_add_vid(struct net_device *dev, unsigned short vid) | 597 | static int netdev_vlan_rx_add_vid(struct net_device *dev, |
598 | __be16 proto, u16 vid) | ||
598 | { | 599 | { |
599 | struct netdev_private *np = netdev_priv(dev); | 600 | struct netdev_private *np = netdev_priv(dev); |
600 | 601 | ||
@@ -608,7 +609,8 @@ static int netdev_vlan_rx_add_vid(struct net_device *dev, unsigned short vid) | |||
608 | return 0; | 609 | return 0; |
609 | } | 610 | } |
610 | 611 | ||
611 | static int netdev_vlan_rx_kill_vid(struct net_device *dev, unsigned short vid) | 612 | static int netdev_vlan_rx_kill_vid(struct net_device *dev, |
613 | __be16 proto, u16 vid) | ||
612 | { | 614 | { |
613 | struct netdev_private *np = netdev_priv(dev); | 615 | struct netdev_private *np = netdev_priv(dev); |
614 | 616 | ||
diff --git a/drivers/net/ethernet/brocade/bna/bnad.c b/drivers/net/ethernet/brocade/bna/bnad.c index 1d9d0371a743..c0bc44e51fa9 100644 --- a/drivers/net/ethernet/brocade/bna/bnad.c +++ b/drivers/net/ethernet/brocade/bna/bnad.c | |||
@@ -3068,8 +3068,7 @@ bnad_change_mtu(struct net_device *netdev, int new_mtu) | |||
3068 | } | 3068 | } |
3069 | 3069 | ||
3070 | static int | 3070 | static int |
3071 | bnad_vlan_rx_add_vid(struct net_device *netdev, | 3071 | bnad_vlan_rx_add_vid(struct net_device *netdev, __be16 proto, u16 vid) |
3072 | unsigned short vid) | ||
3073 | { | 3072 | { |
3074 | struct bnad *bnad = netdev_priv(netdev); | 3073 | struct bnad *bnad = netdev_priv(netdev); |
3075 | unsigned long flags; | 3074 | unsigned long flags; |
@@ -3090,8 +3089,7 @@ bnad_vlan_rx_add_vid(struct net_device *netdev, | |||
3090 | } | 3089 | } |
3091 | 3090 | ||
3092 | static int | 3091 | static int |
3093 | bnad_vlan_rx_kill_vid(struct net_device *netdev, | 3092 | bnad_vlan_rx_kill_vid(struct net_device *netdev, __be16 proto, u16 vid) |
3094 | unsigned short vid) | ||
3095 | { | 3093 | { |
3096 | struct bnad *bnad = netdev_priv(netdev); | 3094 | struct bnad *bnad = netdev_priv(netdev); |
3097 | unsigned long flags; | 3095 | unsigned long flags; |
diff --git a/drivers/net/ethernet/cisco/enic/enic_dev.c b/drivers/net/ethernet/cisco/enic/enic_dev.c index bf0fc56dba19..4b6e5695b263 100644 --- a/drivers/net/ethernet/cisco/enic/enic_dev.c +++ b/drivers/net/ethernet/cisco/enic/enic_dev.c | |||
@@ -212,7 +212,7 @@ int enic_dev_deinit_done(struct enic *enic, int *status) | |||
212 | } | 212 | } |
213 | 213 | ||
214 | /* rtnl lock is held */ | 214 | /* rtnl lock is held */ |
215 | int enic_vlan_rx_add_vid(struct net_device *netdev, u16 vid) | 215 | int enic_vlan_rx_add_vid(struct net_device *netdev, __be16 proto, u16 vid) |
216 | { | 216 | { |
217 | struct enic *enic = netdev_priv(netdev); | 217 | struct enic *enic = netdev_priv(netdev); |
218 | int err; | 218 | int err; |
@@ -225,7 +225,7 @@ int enic_vlan_rx_add_vid(struct net_device *netdev, u16 vid) | |||
225 | } | 225 | } |
226 | 226 | ||
227 | /* rtnl lock is held */ | 227 | /* rtnl lock is held */ |
228 | int enic_vlan_rx_kill_vid(struct net_device *netdev, u16 vid) | 228 | int enic_vlan_rx_kill_vid(struct net_device *netdev, __be16 proto, u16 vid) |
229 | { | 229 | { |
230 | struct enic *enic = netdev_priv(netdev); | 230 | struct enic *enic = netdev_priv(netdev); |
231 | int err; | 231 | int err; |
diff --git a/drivers/net/ethernet/cisco/enic/enic_dev.h b/drivers/net/ethernet/cisco/enic/enic_dev.h index da1cba3c410e..08bded051b93 100644 --- a/drivers/net/ethernet/cisco/enic/enic_dev.h +++ b/drivers/net/ethernet/cisco/enic/enic_dev.h | |||
@@ -46,8 +46,8 @@ int enic_dev_packet_filter(struct enic *enic, int directed, int multicast, | |||
46 | int broadcast, int promisc, int allmulti); | 46 | int broadcast, int promisc, int allmulti); |
47 | int enic_dev_add_addr(struct enic *enic, u8 *addr); | 47 | int enic_dev_add_addr(struct enic *enic, u8 *addr); |
48 | int enic_dev_del_addr(struct enic *enic, u8 *addr); | 48 | int enic_dev_del_addr(struct enic *enic, u8 *addr); |
49 | int enic_vlan_rx_add_vid(struct net_device *netdev, u16 vid); | 49 | int enic_vlan_rx_add_vid(struct net_device *netdev, __be16 proto, u16 vid); |
50 | int enic_vlan_rx_kill_vid(struct net_device *netdev, u16 vid); | 50 | int enic_vlan_rx_kill_vid(struct net_device *netdev, __be16 proto, u16 vid); |
51 | int enic_dev_notify_unset(struct enic *enic); | 51 | int enic_dev_notify_unset(struct enic *enic); |
52 | int enic_dev_hang_notify(struct enic *enic); | 52 | int enic_dev_hang_notify(struct enic *enic); |
53 | int enic_dev_set_ig_vlan_rewrite_mode(struct enic *enic); | 53 | int enic_dev_set_ig_vlan_rewrite_mode(struct enic *enic); |
diff --git a/drivers/net/ethernet/emulex/benet/be_main.c b/drivers/net/ethernet/emulex/benet/be_main.c index bde26d4d52ec..b41333184916 100644 --- a/drivers/net/ethernet/emulex/benet/be_main.c +++ b/drivers/net/ethernet/emulex/benet/be_main.c | |||
@@ -902,7 +902,7 @@ set_vlan_promisc: | |||
902 | return status; | 902 | return status; |
903 | } | 903 | } |
904 | 904 | ||
905 | static int be_vlan_add_vid(struct net_device *netdev, u16 vid) | 905 | static int be_vlan_add_vid(struct net_device *netdev, __be16 proto, u16 vid) |
906 | { | 906 | { |
907 | struct be_adapter *adapter = netdev_priv(netdev); | 907 | struct be_adapter *adapter = netdev_priv(netdev); |
908 | int status = 0; | 908 | int status = 0; |
@@ -928,7 +928,7 @@ ret: | |||
928 | return status; | 928 | return status; |
929 | } | 929 | } |
930 | 930 | ||
931 | static int be_vlan_rem_vid(struct net_device *netdev, u16 vid) | 931 | static int be_vlan_rem_vid(struct net_device *netdev, __be16 proto, u16 vid) |
932 | { | 932 | { |
933 | struct be_adapter *adapter = netdev_priv(netdev); | 933 | struct be_adapter *adapter = netdev_priv(netdev); |
934 | int status = 0; | 934 | int status = 0; |
diff --git a/drivers/net/ethernet/ibm/ehea/ehea_main.c b/drivers/net/ethernet/ibm/ehea/ehea_main.c index 9c9fa745ff82..d1812aacbc7b 100644 --- a/drivers/net/ethernet/ibm/ehea/ehea_main.c +++ b/drivers/net/ethernet/ibm/ehea/ehea_main.c | |||
@@ -2110,7 +2110,7 @@ static int ehea_start_xmit(struct sk_buff *skb, struct net_device *dev) | |||
2110 | return NETDEV_TX_OK; | 2110 | return NETDEV_TX_OK; |
2111 | } | 2111 | } |
2112 | 2112 | ||
2113 | static int ehea_vlan_rx_add_vid(struct net_device *dev, unsigned short vid) | 2113 | static int ehea_vlan_rx_add_vid(struct net_device *dev, __be16 proto, u16 vid) |
2114 | { | 2114 | { |
2115 | struct ehea_port *port = netdev_priv(dev); | 2115 | struct ehea_port *port = netdev_priv(dev); |
2116 | struct ehea_adapter *adapter = port->adapter; | 2116 | struct ehea_adapter *adapter = port->adapter; |
@@ -2148,7 +2148,7 @@ out: | |||
2148 | return err; | 2148 | return err; |
2149 | } | 2149 | } |
2150 | 2150 | ||
2151 | static int ehea_vlan_rx_kill_vid(struct net_device *dev, unsigned short vid) | 2151 | static int ehea_vlan_rx_kill_vid(struct net_device *dev, __be16 proto, u16 vid) |
2152 | { | 2152 | { |
2153 | struct ehea_port *port = netdev_priv(dev); | 2153 | struct ehea_port *port = netdev_priv(dev); |
2154 | struct ehea_adapter *adapter = port->adapter; | 2154 | struct ehea_adapter *adapter = port->adapter; |
diff --git a/drivers/net/ethernet/intel/e1000/e1000_main.c b/drivers/net/ethernet/intel/e1000/e1000_main.c index 8d0d0d420c21..8239dafdd8e7 100644 --- a/drivers/net/ethernet/intel/e1000/e1000_main.c +++ b/drivers/net/ethernet/intel/e1000/e1000_main.c | |||
@@ -166,8 +166,10 @@ static void e1000_vlan_mode(struct net_device *netdev, | |||
166 | netdev_features_t features); | 166 | netdev_features_t features); |
167 | static void e1000_vlan_filter_on_off(struct e1000_adapter *adapter, | 167 | static void e1000_vlan_filter_on_off(struct e1000_adapter *adapter, |
168 | bool filter_on); | 168 | bool filter_on); |
169 | static int e1000_vlan_rx_add_vid(struct net_device *netdev, u16 vid); | 169 | static int e1000_vlan_rx_add_vid(struct net_device *netdev, |
170 | static int e1000_vlan_rx_kill_vid(struct net_device *netdev, u16 vid); | 170 | __be16 proto, u16 vid); |
171 | static int e1000_vlan_rx_kill_vid(struct net_device *netdev, | ||
172 | __be16 proto, u16 vid); | ||
171 | static void e1000_restore_vlan(struct e1000_adapter *adapter); | 173 | static void e1000_restore_vlan(struct e1000_adapter *adapter); |
172 | 174 | ||
173 | #ifdef CONFIG_PM | 175 | #ifdef CONFIG_PM |
@@ -333,7 +335,7 @@ static void e1000_update_mng_vlan(struct e1000_adapter *adapter) | |||
333 | if (!test_bit(vid, adapter->active_vlans)) { | 335 | if (!test_bit(vid, adapter->active_vlans)) { |
334 | if (hw->mng_cookie.status & | 336 | if (hw->mng_cookie.status & |
335 | E1000_MNG_DHCP_COOKIE_STATUS_VLAN_SUPPORT) { | 337 | E1000_MNG_DHCP_COOKIE_STATUS_VLAN_SUPPORT) { |
336 | e1000_vlan_rx_add_vid(netdev, vid); | 338 | e1000_vlan_rx_add_vid(netdev, htons(ETH_P_8021Q), vid); |
337 | adapter->mng_vlan_id = vid; | 339 | adapter->mng_vlan_id = vid; |
338 | } else { | 340 | } else { |
339 | adapter->mng_vlan_id = E1000_MNG_VLAN_NONE; | 341 | adapter->mng_vlan_id = E1000_MNG_VLAN_NONE; |
@@ -341,7 +343,8 @@ static void e1000_update_mng_vlan(struct e1000_adapter *adapter) | |||
341 | if ((old_vid != (u16)E1000_MNG_VLAN_NONE) && | 343 | if ((old_vid != (u16)E1000_MNG_VLAN_NONE) && |
342 | (vid != old_vid) && | 344 | (vid != old_vid) && |
343 | !test_bit(old_vid, adapter->active_vlans)) | 345 | !test_bit(old_vid, adapter->active_vlans)) |
344 | e1000_vlan_rx_kill_vid(netdev, old_vid); | 346 | e1000_vlan_rx_kill_vid(netdev, htons(ETH_P_8021Q), |
347 | old_vid); | ||
345 | } else { | 348 | } else { |
346 | adapter->mng_vlan_id = vid; | 349 | adapter->mng_vlan_id = vid; |
347 | } | 350 | } |
@@ -1457,7 +1460,8 @@ static int e1000_close(struct net_device *netdev) | |||
1457 | if ((hw->mng_cookie.status & | 1460 | if ((hw->mng_cookie.status & |
1458 | E1000_MNG_DHCP_COOKIE_STATUS_VLAN_SUPPORT) && | 1461 | E1000_MNG_DHCP_COOKIE_STATUS_VLAN_SUPPORT) && |
1459 | !test_bit(adapter->mng_vlan_id, adapter->active_vlans)) { | 1462 | !test_bit(adapter->mng_vlan_id, adapter->active_vlans)) { |
1460 | e1000_vlan_rx_kill_vid(netdev, adapter->mng_vlan_id); | 1463 | e1000_vlan_rx_kill_vid(netdev, htons(ETH_P_8021Q), |
1464 | adapter->mng_vlan_id); | ||
1461 | } | 1465 | } |
1462 | 1466 | ||
1463 | return 0; | 1467 | return 0; |
@@ -4837,7 +4841,8 @@ static void e1000_vlan_mode(struct net_device *netdev, | |||
4837 | e1000_irq_enable(adapter); | 4841 | e1000_irq_enable(adapter); |
4838 | } | 4842 | } |
4839 | 4843 | ||
4840 | static int e1000_vlan_rx_add_vid(struct net_device *netdev, u16 vid) | 4844 | static int e1000_vlan_rx_add_vid(struct net_device *netdev, |
4845 | __be16 proto, u16 vid) | ||
4841 | { | 4846 | { |
4842 | struct e1000_adapter *adapter = netdev_priv(netdev); | 4847 | struct e1000_adapter *adapter = netdev_priv(netdev); |
4843 | struct e1000_hw *hw = &adapter->hw; | 4848 | struct e1000_hw *hw = &adapter->hw; |
@@ -4862,7 +4867,8 @@ static int e1000_vlan_rx_add_vid(struct net_device *netdev, u16 vid) | |||
4862 | return 0; | 4867 | return 0; |
4863 | } | 4868 | } |
4864 | 4869 | ||
4865 | static int e1000_vlan_rx_kill_vid(struct net_device *netdev, u16 vid) | 4870 | static int e1000_vlan_rx_kill_vid(struct net_device *netdev, |
4871 | __be16 proto, u16 vid) | ||
4866 | { | 4872 | { |
4867 | struct e1000_adapter *adapter = netdev_priv(netdev); | 4873 | struct e1000_adapter *adapter = netdev_priv(netdev); |
4868 | struct e1000_hw *hw = &adapter->hw; | 4874 | struct e1000_hw *hw = &adapter->hw; |
@@ -4896,7 +4902,7 @@ static void e1000_restore_vlan(struct e1000_adapter *adapter) | |||
4896 | 4902 | ||
4897 | e1000_vlan_filter_on_off(adapter, true); | 4903 | e1000_vlan_filter_on_off(adapter, true); |
4898 | for_each_set_bit(vid, adapter->active_vlans, VLAN_N_VID) | 4904 | for_each_set_bit(vid, adapter->active_vlans, VLAN_N_VID) |
4899 | e1000_vlan_rx_add_vid(adapter->netdev, vid); | 4905 | e1000_vlan_rx_add_vid(adapter->netdev, htons(ETH_P_8021Q), vid); |
4900 | } | 4906 | } |
4901 | 4907 | ||
4902 | int e1000_set_spd_dplx(struct e1000_adapter *adapter, u32 spd, u8 dplx) | 4908 | int e1000_set_spd_dplx(struct e1000_adapter *adapter, u32 spd, u8 dplx) |
diff --git a/drivers/net/ethernet/intel/e1000e/netdev.c b/drivers/net/ethernet/intel/e1000e/netdev.c index a2e7db33bf9d..8c17f01a155f 100644 --- a/drivers/net/ethernet/intel/e1000e/netdev.c +++ b/drivers/net/ethernet/intel/e1000e/netdev.c | |||
@@ -2672,7 +2672,8 @@ static int e1000e_poll(struct napi_struct *napi, int weight) | |||
2672 | return work_done; | 2672 | return work_done; |
2673 | } | 2673 | } |
2674 | 2674 | ||
2675 | static int e1000_vlan_rx_add_vid(struct net_device *netdev, u16 vid) | 2675 | static int e1000_vlan_rx_add_vid(struct net_device *netdev, |
2676 | __be16 proto, u16 vid) | ||
2676 | { | 2677 | { |
2677 | struct e1000_adapter *adapter = netdev_priv(netdev); | 2678 | struct e1000_adapter *adapter = netdev_priv(netdev); |
2678 | struct e1000_hw *hw = &adapter->hw; | 2679 | struct e1000_hw *hw = &adapter->hw; |
@@ -2697,7 +2698,8 @@ static int e1000_vlan_rx_add_vid(struct net_device *netdev, u16 vid) | |||
2697 | return 0; | 2698 | return 0; |
2698 | } | 2699 | } |
2699 | 2700 | ||
2700 | static int e1000_vlan_rx_kill_vid(struct net_device *netdev, u16 vid) | 2701 | static int e1000_vlan_rx_kill_vid(struct net_device *netdev, |
2702 | __be16 proto, u16 vid) | ||
2701 | { | 2703 | { |
2702 | struct e1000_adapter *adapter = netdev_priv(netdev); | 2704 | struct e1000_adapter *adapter = netdev_priv(netdev); |
2703 | struct e1000_hw *hw = &adapter->hw; | 2705 | struct e1000_hw *hw = &adapter->hw; |
@@ -2741,7 +2743,8 @@ static void e1000e_vlan_filter_disable(struct e1000_adapter *adapter) | |||
2741 | ew32(RCTL, rctl); | 2743 | ew32(RCTL, rctl); |
2742 | 2744 | ||
2743 | if (adapter->mng_vlan_id != (u16)E1000_MNG_VLAN_NONE) { | 2745 | if (adapter->mng_vlan_id != (u16)E1000_MNG_VLAN_NONE) { |
2744 | e1000_vlan_rx_kill_vid(netdev, adapter->mng_vlan_id); | 2746 | e1000_vlan_rx_kill_vid(netdev, htons(ETH_P_8021Q), |
2747 | adapter->mng_vlan_id); | ||
2745 | adapter->mng_vlan_id = E1000_MNG_VLAN_NONE; | 2748 | adapter->mng_vlan_id = E1000_MNG_VLAN_NONE; |
2746 | } | 2749 | } |
2747 | } | 2750 | } |
@@ -2802,22 +2805,22 @@ static void e1000_update_mng_vlan(struct e1000_adapter *adapter) | |||
2802 | u16 old_vid = adapter->mng_vlan_id; | 2805 | u16 old_vid = adapter->mng_vlan_id; |
2803 | 2806 | ||
2804 | if (adapter->hw.mng_cookie.status & E1000_MNG_DHCP_COOKIE_STATUS_VLAN) { | 2807 | if (adapter->hw.mng_cookie.status & E1000_MNG_DHCP_COOKIE_STATUS_VLAN) { |
2805 | e1000_vlan_rx_add_vid(netdev, vid); | 2808 | e1000_vlan_rx_add_vid(netdev, htons(ETH_P_8021Q), vid); |
2806 | adapter->mng_vlan_id = vid; | 2809 | adapter->mng_vlan_id = vid; |
2807 | } | 2810 | } |
2808 | 2811 | ||
2809 | if ((old_vid != (u16)E1000_MNG_VLAN_NONE) && (vid != old_vid)) | 2812 | if ((old_vid != (u16)E1000_MNG_VLAN_NONE) && (vid != old_vid)) |
2810 | e1000_vlan_rx_kill_vid(netdev, old_vid); | 2813 | e1000_vlan_rx_kill_vid(netdev, htons(ETH_P_8021Q), old_vid); |
2811 | } | 2814 | } |
2812 | 2815 | ||
2813 | static void e1000_restore_vlan(struct e1000_adapter *adapter) | 2816 | static void e1000_restore_vlan(struct e1000_adapter *adapter) |
2814 | { | 2817 | { |
2815 | u16 vid; | 2818 | u16 vid; |
2816 | 2819 | ||
2817 | e1000_vlan_rx_add_vid(adapter->netdev, 0); | 2820 | e1000_vlan_rx_add_vid(adapter->netdev, htons(ETH_P_8021Q), 0); |
2818 | 2821 | ||
2819 | for_each_set_bit(vid, adapter->active_vlans, VLAN_N_VID) | 2822 | for_each_set_bit(vid, adapter->active_vlans, VLAN_N_VID) |
2820 | e1000_vlan_rx_add_vid(adapter->netdev, vid); | 2823 | e1000_vlan_rx_add_vid(adapter->netdev, htons(ETH_P_8021Q), vid); |
2821 | } | 2824 | } |
2822 | 2825 | ||
2823 | static void e1000_init_manageability_pt(struct e1000_adapter *adapter) | 2826 | static void e1000_init_manageability_pt(struct e1000_adapter *adapter) |
@@ -4384,7 +4387,8 @@ static int e1000_close(struct net_device *netdev) | |||
4384 | * the same ID is registered on the host OS (let 8021q kill it) | 4387 | * the same ID is registered on the host OS (let 8021q kill it) |
4385 | */ | 4388 | */ |
4386 | if (adapter->hw.mng_cookie.status & E1000_MNG_DHCP_COOKIE_STATUS_VLAN) | 4389 | if (adapter->hw.mng_cookie.status & E1000_MNG_DHCP_COOKIE_STATUS_VLAN) |
4387 | e1000_vlan_rx_kill_vid(netdev, adapter->mng_vlan_id); | 4390 | e1000_vlan_rx_kill_vid(netdev, htons(ETH_P_8021Q), |
4391 | adapter->mng_vlan_id); | ||
4388 | 4392 | ||
4389 | /* If AMT is enabled, let the firmware know that the network | 4393 | /* If AMT is enabled, let the firmware know that the network |
4390 | * interface is now closed | 4394 | * interface is now closed |
diff --git a/drivers/net/ethernet/intel/igb/igb_main.c b/drivers/net/ethernet/intel/igb/igb_main.c index b0b1777c0af6..d13ea71c7c1f 100644 --- a/drivers/net/ethernet/intel/igb/igb_main.c +++ b/drivers/net/ethernet/intel/igb/igb_main.c | |||
@@ -159,8 +159,8 @@ static int igb_ioctl(struct net_device *, struct ifreq *, int cmd); | |||
159 | static void igb_tx_timeout(struct net_device *); | 159 | static void igb_tx_timeout(struct net_device *); |
160 | static void igb_reset_task(struct work_struct *); | 160 | static void igb_reset_task(struct work_struct *); |
161 | static void igb_vlan_mode(struct net_device *netdev, netdev_features_t features); | 161 | static void igb_vlan_mode(struct net_device *netdev, netdev_features_t features); |
162 | static int igb_vlan_rx_add_vid(struct net_device *, u16); | 162 | static int igb_vlan_rx_add_vid(struct net_device *, __be16, u16); |
163 | static int igb_vlan_rx_kill_vid(struct net_device *, u16); | 163 | static int igb_vlan_rx_kill_vid(struct net_device *, __be16, u16); |
164 | static void igb_restore_vlan(struct igb_adapter *); | 164 | static void igb_restore_vlan(struct igb_adapter *); |
165 | static void igb_rar_set_qsel(struct igb_adapter *, u8 *, u32 , u8); | 165 | static void igb_rar_set_qsel(struct igb_adapter *, u8 *, u32 , u8); |
166 | static void igb_ping_all_vfs(struct igb_adapter *); | 166 | static void igb_ping_all_vfs(struct igb_adapter *); |
@@ -6976,7 +6976,8 @@ static void igb_vlan_mode(struct net_device *netdev, netdev_features_t features) | |||
6976 | igb_rlpml_set(adapter); | 6976 | igb_rlpml_set(adapter); |
6977 | } | 6977 | } |
6978 | 6978 | ||
6979 | static int igb_vlan_rx_add_vid(struct net_device *netdev, u16 vid) | 6979 | static int igb_vlan_rx_add_vid(struct net_device *netdev, |
6980 | __be16 proto, u16 vid) | ||
6980 | { | 6981 | { |
6981 | struct igb_adapter *adapter = netdev_priv(netdev); | 6982 | struct igb_adapter *adapter = netdev_priv(netdev); |
6982 | struct e1000_hw *hw = &adapter->hw; | 6983 | struct e1000_hw *hw = &adapter->hw; |
@@ -6993,7 +6994,8 @@ static int igb_vlan_rx_add_vid(struct net_device *netdev, u16 vid) | |||
6993 | return 0; | 6994 | return 0; |
6994 | } | 6995 | } |
6995 | 6996 | ||
6996 | static int igb_vlan_rx_kill_vid(struct net_device *netdev, u16 vid) | 6997 | static int igb_vlan_rx_kill_vid(struct net_device *netdev, |
6998 | __be16 proto, u16 vid) | ||
6997 | { | 6999 | { |
6998 | struct igb_adapter *adapter = netdev_priv(netdev); | 7000 | struct igb_adapter *adapter = netdev_priv(netdev); |
6999 | struct e1000_hw *hw = &adapter->hw; | 7001 | struct e1000_hw *hw = &adapter->hw; |
@@ -7019,7 +7021,7 @@ static void igb_restore_vlan(struct igb_adapter *adapter) | |||
7019 | igb_vlan_mode(adapter->netdev, adapter->netdev->features); | 7021 | igb_vlan_mode(adapter->netdev, adapter->netdev->features); |
7020 | 7022 | ||
7021 | for_each_set_bit(vid, adapter->active_vlans, VLAN_N_VID) | 7023 | for_each_set_bit(vid, adapter->active_vlans, VLAN_N_VID) |
7022 | igb_vlan_rx_add_vid(adapter->netdev, vid); | 7024 | igb_vlan_rx_add_vid(adapter->netdev, htons(ETH_P_8021Q), vid); |
7023 | } | 7025 | } |
7024 | 7026 | ||
7025 | int igb_set_spd_dplx(struct igb_adapter *adapter, u32 spd, u8 dplx) | 7027 | int igb_set_spd_dplx(struct igb_adapter *adapter, u32 spd, u8 dplx) |
diff --git a/drivers/net/ethernet/intel/igbvf/netdev.c b/drivers/net/ethernet/intel/igbvf/netdev.c index 33e7b3069fb6..3854fd698b85 100644 --- a/drivers/net/ethernet/intel/igbvf/netdev.c +++ b/drivers/net/ethernet/intel/igbvf/netdev.c | |||
@@ -1230,7 +1230,8 @@ static void igbvf_set_rlpml(struct igbvf_adapter *adapter) | |||
1230 | e1000_rlpml_set_vf(hw, max_frame_size); | 1230 | e1000_rlpml_set_vf(hw, max_frame_size); |
1231 | } | 1231 | } |
1232 | 1232 | ||
1233 | static int igbvf_vlan_rx_add_vid(struct net_device *netdev, u16 vid) | 1233 | static int igbvf_vlan_rx_add_vid(struct net_device *netdev, |
1234 | __be16 proto, u16 vid) | ||
1234 | { | 1235 | { |
1235 | struct igbvf_adapter *adapter = netdev_priv(netdev); | 1236 | struct igbvf_adapter *adapter = netdev_priv(netdev); |
1236 | struct e1000_hw *hw = &adapter->hw; | 1237 | struct e1000_hw *hw = &adapter->hw; |
@@ -1243,7 +1244,8 @@ static int igbvf_vlan_rx_add_vid(struct net_device *netdev, u16 vid) | |||
1243 | return 0; | 1244 | return 0; |
1244 | } | 1245 | } |
1245 | 1246 | ||
1246 | static int igbvf_vlan_rx_kill_vid(struct net_device *netdev, u16 vid) | 1247 | static int igbvf_vlan_rx_kill_vid(struct net_device *netdev, |
1248 | __be16 proto, u16 vid) | ||
1247 | { | 1249 | { |
1248 | struct igbvf_adapter *adapter = netdev_priv(netdev); | 1250 | struct igbvf_adapter *adapter = netdev_priv(netdev); |
1249 | struct e1000_hw *hw = &adapter->hw; | 1251 | struct e1000_hw *hw = &adapter->hw; |
@@ -1262,7 +1264,7 @@ static void igbvf_restore_vlan(struct igbvf_adapter *adapter) | |||
1262 | u16 vid; | 1264 | u16 vid; |
1263 | 1265 | ||
1264 | for_each_set_bit(vid, adapter->active_vlans, VLAN_N_VID) | 1266 | for_each_set_bit(vid, adapter->active_vlans, VLAN_N_VID) |
1265 | igbvf_vlan_rx_add_vid(adapter->netdev, vid); | 1267 | igbvf_vlan_rx_add_vid(adapter->netdev, htons(ETH_P_8021Q), vid); |
1266 | } | 1268 | } |
1267 | 1269 | ||
1268 | /** | 1270 | /** |
diff --git a/drivers/net/ethernet/intel/ixgb/ixgb_main.c b/drivers/net/ethernet/intel/ixgb/ixgb_main.c index e65d9e910227..a32f274acd36 100644 --- a/drivers/net/ethernet/intel/ixgb/ixgb_main.c +++ b/drivers/net/ethernet/intel/ixgb/ixgb_main.c | |||
@@ -101,8 +101,10 @@ static void ixgb_tx_timeout_task(struct work_struct *work); | |||
101 | 101 | ||
102 | static void ixgb_vlan_strip_enable(struct ixgb_adapter *adapter); | 102 | static void ixgb_vlan_strip_enable(struct ixgb_adapter *adapter); |
103 | static void ixgb_vlan_strip_disable(struct ixgb_adapter *adapter); | 103 | static void ixgb_vlan_strip_disable(struct ixgb_adapter *adapter); |
104 | static int ixgb_vlan_rx_add_vid(struct net_device *netdev, u16 vid); | 104 | static int ixgb_vlan_rx_add_vid(struct net_device *netdev, |
105 | static int ixgb_vlan_rx_kill_vid(struct net_device *netdev, u16 vid); | 105 | __be16 proto, u16 vid); |
106 | static int ixgb_vlan_rx_kill_vid(struct net_device *netdev, | ||
107 | __be16 proto, u16 vid); | ||
106 | static void ixgb_restore_vlan(struct ixgb_adapter *adapter); | 108 | static void ixgb_restore_vlan(struct ixgb_adapter *adapter); |
107 | 109 | ||
108 | #ifdef CONFIG_NET_POLL_CONTROLLER | 110 | #ifdef CONFIG_NET_POLL_CONTROLLER |
@@ -2209,7 +2211,7 @@ ixgb_vlan_strip_disable(struct ixgb_adapter *adapter) | |||
2209 | } | 2211 | } |
2210 | 2212 | ||
2211 | static int | 2213 | static int |
2212 | ixgb_vlan_rx_add_vid(struct net_device *netdev, u16 vid) | 2214 | ixgb_vlan_rx_add_vid(struct net_device *netdev, __be16 proto, u16 vid) |
2213 | { | 2215 | { |
2214 | struct ixgb_adapter *adapter = netdev_priv(netdev); | 2216 | struct ixgb_adapter *adapter = netdev_priv(netdev); |
2215 | u32 vfta, index; | 2217 | u32 vfta, index; |
@@ -2226,7 +2228,7 @@ ixgb_vlan_rx_add_vid(struct net_device *netdev, u16 vid) | |||
2226 | } | 2228 | } |
2227 | 2229 | ||
2228 | static int | 2230 | static int |
2229 | ixgb_vlan_rx_kill_vid(struct net_device *netdev, u16 vid) | 2231 | ixgb_vlan_rx_kill_vid(struct net_device *netdev, __be16 proto, u16 vid) |
2230 | { | 2232 | { |
2231 | struct ixgb_adapter *adapter = netdev_priv(netdev); | 2233 | struct ixgb_adapter *adapter = netdev_priv(netdev); |
2232 | u32 vfta, index; | 2234 | u32 vfta, index; |
@@ -2248,7 +2250,7 @@ ixgb_restore_vlan(struct ixgb_adapter *adapter) | |||
2248 | u16 vid; | 2250 | u16 vid; |
2249 | 2251 | ||
2250 | for_each_set_bit(vid, adapter->active_vlans, VLAN_N_VID) | 2252 | for_each_set_bit(vid, adapter->active_vlans, VLAN_N_VID) |
2251 | ixgb_vlan_rx_add_vid(adapter->netdev, vid); | 2253 | ixgb_vlan_rx_add_vid(adapter->netdev, htons(ETH_P_8021Q), vid); |
2252 | } | 2254 | } |
2253 | 2255 | ||
2254 | #ifdef CONFIG_NET_POLL_CONTROLLER | 2256 | #ifdef CONFIG_NET_POLL_CONTROLLER |
diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c index 0316b65dfe06..3becffc77321 100644 --- a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c +++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c | |||
@@ -3467,7 +3467,8 @@ static void ixgbe_configure_rx(struct ixgbe_adapter *adapter) | |||
3467 | hw->mac.ops.enable_rx_dma(hw, rxctrl); | 3467 | hw->mac.ops.enable_rx_dma(hw, rxctrl); |
3468 | } | 3468 | } |
3469 | 3469 | ||
3470 | static int ixgbe_vlan_rx_add_vid(struct net_device *netdev, u16 vid) | 3470 | static int ixgbe_vlan_rx_add_vid(struct net_device *netdev, |
3471 | __be16 proto, u16 vid) | ||
3471 | { | 3472 | { |
3472 | struct ixgbe_adapter *adapter = netdev_priv(netdev); | 3473 | struct ixgbe_adapter *adapter = netdev_priv(netdev); |
3473 | struct ixgbe_hw *hw = &adapter->hw; | 3474 | struct ixgbe_hw *hw = &adapter->hw; |
@@ -3479,7 +3480,8 @@ static int ixgbe_vlan_rx_add_vid(struct net_device *netdev, u16 vid) | |||
3479 | return 0; | 3480 | return 0; |
3480 | } | 3481 | } |
3481 | 3482 | ||
3482 | static int ixgbe_vlan_rx_kill_vid(struct net_device *netdev, u16 vid) | 3483 | static int ixgbe_vlan_rx_kill_vid(struct net_device *netdev, |
3484 | __be16 proto, u16 vid) | ||
3483 | { | 3485 | { |
3484 | struct ixgbe_adapter *adapter = netdev_priv(netdev); | 3486 | struct ixgbe_adapter *adapter = netdev_priv(netdev); |
3485 | struct ixgbe_hw *hw = &adapter->hw; | 3487 | struct ixgbe_hw *hw = &adapter->hw; |
@@ -3584,10 +3586,10 @@ static void ixgbe_restore_vlan(struct ixgbe_adapter *adapter) | |||
3584 | { | 3586 | { |
3585 | u16 vid; | 3587 | u16 vid; |
3586 | 3588 | ||
3587 | ixgbe_vlan_rx_add_vid(adapter->netdev, 0); | 3589 | ixgbe_vlan_rx_add_vid(adapter->netdev, htons(ETH_P_8021Q), 0); |
3588 | 3590 | ||
3589 | for_each_set_bit(vid, adapter->active_vlans, VLAN_N_VID) | 3591 | for_each_set_bit(vid, adapter->active_vlans, VLAN_N_VID) |
3590 | ixgbe_vlan_rx_add_vid(adapter->netdev, vid); | 3592 | ixgbe_vlan_rx_add_vid(adapter->netdev, htons(ETH_P_8021Q), vid); |
3591 | } | 3593 | } |
3592 | 3594 | ||
3593 | /** | 3595 | /** |
diff --git a/drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c b/drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c index 8f907b7af319..4bc1f84c9352 100644 --- a/drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c +++ b/drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c | |||
@@ -1179,7 +1179,8 @@ static void ixgbevf_configure_rx(struct ixgbevf_adapter *adapter) | |||
1179 | } | 1179 | } |
1180 | } | 1180 | } |
1181 | 1181 | ||
1182 | static int ixgbevf_vlan_rx_add_vid(struct net_device *netdev, u16 vid) | 1182 | static int ixgbevf_vlan_rx_add_vid(struct net_device *netdev, |
1183 | __be16 proto, u16 vid) | ||
1183 | { | 1184 | { |
1184 | struct ixgbevf_adapter *adapter = netdev_priv(netdev); | 1185 | struct ixgbevf_adapter *adapter = netdev_priv(netdev); |
1185 | struct ixgbe_hw *hw = &adapter->hw; | 1186 | struct ixgbe_hw *hw = &adapter->hw; |
@@ -1204,7 +1205,8 @@ static int ixgbevf_vlan_rx_add_vid(struct net_device *netdev, u16 vid) | |||
1204 | return err; | 1205 | return err; |
1205 | } | 1206 | } |
1206 | 1207 | ||
1207 | static int ixgbevf_vlan_rx_kill_vid(struct net_device *netdev, u16 vid) | 1208 | static int ixgbevf_vlan_rx_kill_vid(struct net_device *netdev, |
1209 | __be16 proto, u16 vid) | ||
1208 | { | 1210 | { |
1209 | struct ixgbevf_adapter *adapter = netdev_priv(netdev); | 1211 | struct ixgbevf_adapter *adapter = netdev_priv(netdev); |
1210 | struct ixgbe_hw *hw = &adapter->hw; | 1212 | struct ixgbe_hw *hw = &adapter->hw; |
@@ -1227,7 +1229,8 @@ static void ixgbevf_restore_vlan(struct ixgbevf_adapter *adapter) | |||
1227 | u16 vid; | 1229 | u16 vid; |
1228 | 1230 | ||
1229 | for_each_set_bit(vid, adapter->active_vlans, VLAN_N_VID) | 1231 | for_each_set_bit(vid, adapter->active_vlans, VLAN_N_VID) |
1230 | ixgbevf_vlan_rx_add_vid(adapter->netdev, vid); | 1232 | ixgbevf_vlan_rx_add_vid(adapter->netdev, |
1233 | htons(ETH_P_8021Q), vid); | ||
1231 | } | 1234 | } |
1232 | 1235 | ||
1233 | static int ixgbevf_write_uc_addr_list(struct net_device *netdev) | 1236 | static int ixgbevf_write_uc_addr_list(struct net_device *netdev) |
diff --git a/drivers/net/ethernet/mellanox/mlx4/en_netdev.c b/drivers/net/ethernet/mellanox/mlx4/en_netdev.c index b2ba39c7143a..e7e27842d8d4 100644 --- a/drivers/net/ethernet/mellanox/mlx4/en_netdev.c +++ b/drivers/net/ethernet/mellanox/mlx4/en_netdev.c | |||
@@ -356,7 +356,8 @@ static void mlx4_en_filter_rfs_expire(struct mlx4_en_priv *priv) | |||
356 | } | 356 | } |
357 | #endif | 357 | #endif |
358 | 358 | ||
359 | static int mlx4_en_vlan_rx_add_vid(struct net_device *dev, unsigned short vid) | 359 | static int mlx4_en_vlan_rx_add_vid(struct net_device *dev, |
360 | __be16 proto, u16 vid) | ||
360 | { | 361 | { |
361 | struct mlx4_en_priv *priv = netdev_priv(dev); | 362 | struct mlx4_en_priv *priv = netdev_priv(dev); |
362 | struct mlx4_en_dev *mdev = priv->mdev; | 363 | struct mlx4_en_dev *mdev = priv->mdev; |
@@ -381,7 +382,8 @@ static int mlx4_en_vlan_rx_add_vid(struct net_device *dev, unsigned short vid) | |||
381 | return 0; | 382 | return 0; |
382 | } | 383 | } |
383 | 384 | ||
384 | static int mlx4_en_vlan_rx_kill_vid(struct net_device *dev, unsigned short vid) | 385 | static int mlx4_en_vlan_rx_kill_vid(struct net_device *dev, |
386 | __be16 proto, u16 vid) | ||
385 | { | 387 | { |
386 | struct mlx4_en_priv *priv = netdev_priv(dev); | 388 | struct mlx4_en_priv *priv = netdev_priv(dev); |
387 | struct mlx4_en_dev *mdev = priv->mdev; | 389 | struct mlx4_en_dev *mdev = priv->mdev; |
diff --git a/drivers/net/ethernet/neterion/vxge/vxge-main.c b/drivers/net/ethernet/neterion/vxge/vxge-main.c index e9e58aadf87e..a9396142201c 100644 --- a/drivers/net/ethernet/neterion/vxge/vxge-main.c +++ b/drivers/net/ethernet/neterion/vxge/vxge-main.c | |||
@@ -3300,12 +3300,13 @@ static void vxge_tx_watchdog(struct net_device *dev) | |||
3300 | /** | 3300 | /** |
3301 | * vxge_vlan_rx_add_vid | 3301 | * vxge_vlan_rx_add_vid |
3302 | * @dev: net device pointer. | 3302 | * @dev: net device pointer. |
3303 | * @proto: vlan protocol | ||
3303 | * @vid: vid | 3304 | * @vid: vid |
3304 | * | 3305 | * |
3305 | * Add the vlan id to the devices vlan id table | 3306 | * Add the vlan id to the devices vlan id table |
3306 | */ | 3307 | */ |
3307 | static int | 3308 | static int |
3308 | vxge_vlan_rx_add_vid(struct net_device *dev, unsigned short vid) | 3309 | vxge_vlan_rx_add_vid(struct net_device *dev, __be16 proto, u16 vid) |
3309 | { | 3310 | { |
3310 | struct vxgedev *vdev = netdev_priv(dev); | 3311 | struct vxgedev *vdev = netdev_priv(dev); |
3311 | struct vxge_vpath *vpath; | 3312 | struct vxge_vpath *vpath; |
@@ -3323,14 +3324,15 @@ vxge_vlan_rx_add_vid(struct net_device *dev, unsigned short vid) | |||
3323 | } | 3324 | } |
3324 | 3325 | ||
3325 | /** | 3326 | /** |
3326 | * vxge_vlan_rx_add_vid | 3327 | * vxge_vlan_rx_kill_vid |
3327 | * @dev: net device pointer. | 3328 | * @dev: net device pointer. |
3329 | * @proto: vlan protocol | ||
3328 | * @vid: vid | 3330 | * @vid: vid |
3329 | * | 3331 | * |
3330 | * Remove the vlan id from the device's vlan id table | 3332 | * Remove the vlan id from the device's vlan id table |
3331 | */ | 3333 | */ |
3332 | static int | 3334 | static int |
3333 | vxge_vlan_rx_kill_vid(struct net_device *dev, unsigned short vid) | 3335 | vxge_vlan_rx_kill_vid(struct net_device *dev, __be16 proto, u16 vid) |
3334 | { | 3336 | { |
3335 | struct vxgedev *vdev = netdev_priv(dev); | 3337 | struct vxgedev *vdev = netdev_priv(dev); |
3336 | struct vxge_vpath *vpath; | 3338 | struct vxge_vpath *vpath; |
diff --git a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c index 845ba1d1c3c9..e88e01312c67 100644 --- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c +++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c | |||
@@ -86,8 +86,8 @@ static void qlcnic_dev_set_npar_ready(struct qlcnic_adapter *); | |||
86 | static int qlcnicvf_start_firmware(struct qlcnic_adapter *); | 86 | static int qlcnicvf_start_firmware(struct qlcnic_adapter *); |
87 | static void qlcnic_set_netdev_features(struct qlcnic_adapter *, | 87 | static void qlcnic_set_netdev_features(struct qlcnic_adapter *, |
88 | struct qlcnic_esw_func_cfg *); | 88 | struct qlcnic_esw_func_cfg *); |
89 | static int qlcnic_vlan_rx_add(struct net_device *, u16); | 89 | static int qlcnic_vlan_rx_add(struct net_device *, __be16, u16); |
90 | static int qlcnic_vlan_rx_del(struct net_device *, u16); | 90 | static int qlcnic_vlan_rx_del(struct net_device *, __be16, u16); |
91 | 91 | ||
92 | #define QLCNIC_IS_TSO_CAPABLE(adapter) \ | 92 | #define QLCNIC_IS_TSO_CAPABLE(adapter) \ |
93 | ((adapter)->ahw->capabilities & QLCNIC_FW_CAPABILITY_TSO) | 93 | ((adapter)->ahw->capabilities & QLCNIC_FW_CAPABILITY_TSO) |
@@ -902,7 +902,7 @@ void qlcnic_set_vlan_config(struct qlcnic_adapter *adapter, | |||
902 | } | 902 | } |
903 | 903 | ||
904 | static int | 904 | static int |
905 | qlcnic_vlan_rx_add(struct net_device *netdev, u16 vid) | 905 | qlcnic_vlan_rx_add(struct net_device *netdev, __be16 proto, u16 vid) |
906 | { | 906 | { |
907 | struct qlcnic_adapter *adapter = netdev_priv(netdev); | 907 | struct qlcnic_adapter *adapter = netdev_priv(netdev); |
908 | set_bit(vid, adapter->vlans); | 908 | set_bit(vid, adapter->vlans); |
@@ -910,7 +910,7 @@ qlcnic_vlan_rx_add(struct net_device *netdev, u16 vid) | |||
910 | } | 910 | } |
911 | 911 | ||
912 | static int | 912 | static int |
913 | qlcnic_vlan_rx_del(struct net_device *netdev, u16 vid) | 913 | qlcnic_vlan_rx_del(struct net_device *netdev, __be16 proto, u16 vid) |
914 | { | 914 | { |
915 | struct qlcnic_adapter *adapter = netdev_priv(netdev); | 915 | struct qlcnic_adapter *adapter = netdev_priv(netdev); |
916 | 916 | ||
diff --git a/drivers/net/ethernet/qlogic/qlge/qlge_main.c b/drivers/net/ethernet/qlogic/qlge/qlge_main.c index 8e3f43c75665..a9016acc2d6a 100644 --- a/drivers/net/ethernet/qlogic/qlge/qlge_main.c +++ b/drivers/net/ethernet/qlogic/qlge/qlge_main.c | |||
@@ -2326,7 +2326,7 @@ static int __qlge_vlan_rx_add_vid(struct ql_adapter *qdev, u16 vid) | |||
2326 | return err; | 2326 | return err; |
2327 | } | 2327 | } |
2328 | 2328 | ||
2329 | static int qlge_vlan_rx_add_vid(struct net_device *ndev, u16 vid) | 2329 | static int qlge_vlan_rx_add_vid(struct net_device *ndev, __be16 proto, u16 vid) |
2330 | { | 2330 | { |
2331 | struct ql_adapter *qdev = netdev_priv(ndev); | 2331 | struct ql_adapter *qdev = netdev_priv(ndev); |
2332 | int status; | 2332 | int status; |
@@ -2357,7 +2357,7 @@ static int __qlge_vlan_rx_kill_vid(struct ql_adapter *qdev, u16 vid) | |||
2357 | return err; | 2357 | return err; |
2358 | } | 2358 | } |
2359 | 2359 | ||
2360 | static int qlge_vlan_rx_kill_vid(struct net_device *ndev, u16 vid) | 2360 | static int qlge_vlan_rx_kill_vid(struct net_device *ndev, __be16 proto, u16 vid) |
2361 | { | 2361 | { |
2362 | struct ql_adapter *qdev = netdev_priv(ndev); | 2362 | struct ql_adapter *qdev = netdev_priv(ndev); |
2363 | int status; | 2363 | int status; |
diff --git a/drivers/net/ethernet/renesas/sh_eth.c b/drivers/net/ethernet/renesas/sh_eth.c index 3d4a1ed0a7ab..b8e52cd1a698 100644 --- a/drivers/net/ethernet/renesas/sh_eth.c +++ b/drivers/net/ethernet/renesas/sh_eth.c | |||
@@ -2448,7 +2448,8 @@ static int sh_eth_get_vtag_index(struct sh_eth_private *mdp) | |||
2448 | return TSU_VTAG1; | 2448 | return TSU_VTAG1; |
2449 | } | 2449 | } |
2450 | 2450 | ||
2451 | static int sh_eth_vlan_rx_add_vid(struct net_device *ndev, u16 vid) | 2451 | static int sh_eth_vlan_rx_add_vid(struct net_device *ndev, |
2452 | __be16 proto, u16 vid) | ||
2452 | { | 2453 | { |
2453 | struct sh_eth_private *mdp = netdev_priv(ndev); | 2454 | struct sh_eth_private *mdp = netdev_priv(ndev); |
2454 | int vtag_reg_index = sh_eth_get_vtag_index(mdp); | 2455 | int vtag_reg_index = sh_eth_get_vtag_index(mdp); |
@@ -2478,7 +2479,8 @@ static int sh_eth_vlan_rx_add_vid(struct net_device *ndev, u16 vid) | |||
2478 | return 0; | 2479 | return 0; |
2479 | } | 2480 | } |
2480 | 2481 | ||
2481 | static int sh_eth_vlan_rx_kill_vid(struct net_device *ndev, u16 vid) | 2482 | static int sh_eth_vlan_rx_kill_vid(struct net_device *ndev, |
2483 | __be16 proto, u16 vid) | ||
2482 | { | 2484 | { |
2483 | struct sh_eth_private *mdp = netdev_priv(ndev); | 2485 | struct sh_eth_private *mdp = netdev_priv(ndev); |
2484 | int vtag_reg_index = sh_eth_get_vtag_index(mdp); | 2486 | int vtag_reg_index = sh_eth_get_vtag_index(mdp); |
diff --git a/drivers/net/ethernet/tehuti/tehuti.c b/drivers/net/ethernet/tehuti/tehuti.c index 5ca4b33fc4c1..f7050c573519 100644 --- a/drivers/net/ethernet/tehuti/tehuti.c +++ b/drivers/net/ethernet/tehuti/tehuti.c | |||
@@ -733,7 +733,7 @@ static void __bdx_vlan_rx_vid(struct net_device *ndev, uint16_t vid, int enable) | |||
733 | * @ndev: network device | 733 | * @ndev: network device |
734 | * @vid: VLAN vid to add | 734 | * @vid: VLAN vid to add |
735 | */ | 735 | */ |
736 | static int bdx_vlan_rx_add_vid(struct net_device *ndev, uint16_t vid) | 736 | static int bdx_vlan_rx_add_vid(struct net_device *ndev, __be16 proto, u16 vid) |
737 | { | 737 | { |
738 | __bdx_vlan_rx_vid(ndev, vid, 1); | 738 | __bdx_vlan_rx_vid(ndev, vid, 1); |
739 | return 0; | 739 | return 0; |
@@ -744,7 +744,7 @@ static int bdx_vlan_rx_add_vid(struct net_device *ndev, uint16_t vid) | |||
744 | * @ndev: network device | 744 | * @ndev: network device |
745 | * @vid: VLAN vid to kill | 745 | * @vid: VLAN vid to kill |
746 | */ | 746 | */ |
747 | static int bdx_vlan_rx_kill_vid(struct net_device *ndev, unsigned short vid) | 747 | static int bdx_vlan_rx_kill_vid(struct net_device *ndev, __be16 proto, u16 vid) |
748 | { | 748 | { |
749 | __bdx_vlan_rx_vid(ndev, vid, 0); | 749 | __bdx_vlan_rx_vid(ndev, vid, 0); |
750 | return 0; | 750 | return 0; |
diff --git a/drivers/net/ethernet/ti/cpsw.c b/drivers/net/ethernet/ti/cpsw.c index 084992981cef..5cf8d03b8cae 100644 --- a/drivers/net/ethernet/ti/cpsw.c +++ b/drivers/net/ethernet/ti/cpsw.c | |||
@@ -1251,7 +1251,7 @@ clean_vid: | |||
1251 | } | 1251 | } |
1252 | 1252 | ||
1253 | static int cpsw_ndo_vlan_rx_add_vid(struct net_device *ndev, | 1253 | static int cpsw_ndo_vlan_rx_add_vid(struct net_device *ndev, |
1254 | unsigned short vid) | 1254 | __be16 proto, u16 vid) |
1255 | { | 1255 | { |
1256 | struct cpsw_priv *priv = netdev_priv(ndev); | 1256 | struct cpsw_priv *priv = netdev_priv(ndev); |
1257 | 1257 | ||
@@ -1263,7 +1263,7 @@ static int cpsw_ndo_vlan_rx_add_vid(struct net_device *ndev, | |||
1263 | } | 1263 | } |
1264 | 1264 | ||
1265 | static int cpsw_ndo_vlan_rx_kill_vid(struct net_device *ndev, | 1265 | static int cpsw_ndo_vlan_rx_kill_vid(struct net_device *ndev, |
1266 | unsigned short vid) | 1266 | __be16 proto, u16 vid) |
1267 | { | 1267 | { |
1268 | struct cpsw_priv *priv = netdev_priv(ndev); | 1268 | struct cpsw_priv *priv = netdev_priv(ndev); |
1269 | int ret; | 1269 | int ret; |
diff --git a/drivers/net/ethernet/via/via-rhine.c b/drivers/net/ethernet/via/via-rhine.c index 37b02c3768be..c6014916f622 100644 --- a/drivers/net/ethernet/via/via-rhine.c +++ b/drivers/net/ethernet/via/via-rhine.c | |||
@@ -508,8 +508,10 @@ static struct rtnl_link_stats64 *rhine_get_stats64(struct net_device *dev, | |||
508 | static int netdev_ioctl(struct net_device *dev, struct ifreq *rq, int cmd); | 508 | static int netdev_ioctl(struct net_device *dev, struct ifreq *rq, int cmd); |
509 | static const struct ethtool_ops netdev_ethtool_ops; | 509 | static const struct ethtool_ops netdev_ethtool_ops; |
510 | static int rhine_close(struct net_device *dev); | 510 | static int rhine_close(struct net_device *dev); |
511 | static int rhine_vlan_rx_add_vid(struct net_device *dev, unsigned short vid); | 511 | static int rhine_vlan_rx_add_vid(struct net_device *dev, |
512 | static int rhine_vlan_rx_kill_vid(struct net_device *dev, unsigned short vid); | 512 | __be16 proto, u16 vid); |
513 | static int rhine_vlan_rx_kill_vid(struct net_device *dev, | ||
514 | __be16 proto, u16 vid); | ||
513 | static void rhine_restart_tx(struct net_device *dev); | 515 | static void rhine_restart_tx(struct net_device *dev); |
514 | 516 | ||
515 | static void rhine_wait_bit(struct rhine_private *rp, u8 reg, u8 mask, bool low) | 517 | static void rhine_wait_bit(struct rhine_private *rp, u8 reg, u8 mask, bool low) |
@@ -1415,7 +1417,7 @@ static void rhine_update_vcam(struct net_device *dev) | |||
1415 | rhine_set_vlan_cam_mask(ioaddr, vCAMmask); | 1417 | rhine_set_vlan_cam_mask(ioaddr, vCAMmask); |
1416 | } | 1418 | } |
1417 | 1419 | ||
1418 | static int rhine_vlan_rx_add_vid(struct net_device *dev, unsigned short vid) | 1420 | static int rhine_vlan_rx_add_vid(struct net_device *dev, __be16 proto, u16 vid) |
1419 | { | 1421 | { |
1420 | struct rhine_private *rp = netdev_priv(dev); | 1422 | struct rhine_private *rp = netdev_priv(dev); |
1421 | 1423 | ||
@@ -1426,7 +1428,7 @@ static int rhine_vlan_rx_add_vid(struct net_device *dev, unsigned short vid) | |||
1426 | return 0; | 1428 | return 0; |
1427 | } | 1429 | } |
1428 | 1430 | ||
1429 | static int rhine_vlan_rx_kill_vid(struct net_device *dev, unsigned short vid) | 1431 | static int rhine_vlan_rx_kill_vid(struct net_device *dev, __be16 proto, u16 vid) |
1430 | { | 1432 | { |
1431 | struct rhine_private *rp = netdev_priv(dev); | 1433 | struct rhine_private *rp = netdev_priv(dev); |
1432 | 1434 | ||
diff --git a/drivers/net/ethernet/via/via-velocity.c b/drivers/net/ethernet/via/via-velocity.c index c1c55a7da941..91cd59146c24 100644 --- a/drivers/net/ethernet/via/via-velocity.c +++ b/drivers/net/ethernet/via/via-velocity.c | |||
@@ -525,7 +525,8 @@ static void velocity_init_cam_filter(struct velocity_info *vptr) | |||
525 | mac_set_vlan_cam_mask(regs, vptr->vCAMmask); | 525 | mac_set_vlan_cam_mask(regs, vptr->vCAMmask); |
526 | } | 526 | } |
527 | 527 | ||
528 | static int velocity_vlan_rx_add_vid(struct net_device *dev, unsigned short vid) | 528 | static int velocity_vlan_rx_add_vid(struct net_device *dev, |
529 | __be16 proto, u16 vid) | ||
529 | { | 530 | { |
530 | struct velocity_info *vptr = netdev_priv(dev); | 531 | struct velocity_info *vptr = netdev_priv(dev); |
531 | 532 | ||
@@ -536,7 +537,8 @@ static int velocity_vlan_rx_add_vid(struct net_device *dev, unsigned short vid) | |||
536 | return 0; | 537 | return 0; |
537 | } | 538 | } |
538 | 539 | ||
539 | static int velocity_vlan_rx_kill_vid(struct net_device *dev, unsigned short vid) | 540 | static int velocity_vlan_rx_kill_vid(struct net_device *dev, |
541 | __be16 proto, u16 vid) | ||
540 | { | 542 | { |
541 | struct velocity_info *vptr = netdev_priv(dev); | 543 | struct velocity_info *vptr = netdev_priv(dev); |
542 | 544 | ||
diff --git a/drivers/net/macvlan.c b/drivers/net/macvlan.c index fedd34cff91c..7347cdbe736f 100644 --- a/drivers/net/macvlan.c +++ b/drivers/net/macvlan.c | |||
@@ -567,21 +567,21 @@ static struct rtnl_link_stats64 *macvlan_dev_get_stats64(struct net_device *dev, | |||
567 | } | 567 | } |
568 | 568 | ||
569 | static int macvlan_vlan_rx_add_vid(struct net_device *dev, | 569 | static int macvlan_vlan_rx_add_vid(struct net_device *dev, |
570 | unsigned short vid) | 570 | __be16 proto, u16 vid) |
571 | { | 571 | { |
572 | struct macvlan_dev *vlan = netdev_priv(dev); | 572 | struct macvlan_dev *vlan = netdev_priv(dev); |
573 | struct net_device *lowerdev = vlan->lowerdev; | 573 | struct net_device *lowerdev = vlan->lowerdev; |
574 | 574 | ||
575 | return vlan_vid_add(lowerdev, vid); | 575 | return vlan_vid_add(lowerdev, proto, vid); |
576 | } | 576 | } |
577 | 577 | ||
578 | static int macvlan_vlan_rx_kill_vid(struct net_device *dev, | 578 | static int macvlan_vlan_rx_kill_vid(struct net_device *dev, |
579 | unsigned short vid) | 579 | __be16 proto, u16 vid) |
580 | { | 580 | { |
581 | struct macvlan_dev *vlan = netdev_priv(dev); | 581 | struct macvlan_dev *vlan = netdev_priv(dev); |
582 | struct net_device *lowerdev = vlan->lowerdev; | 582 | struct net_device *lowerdev = vlan->lowerdev; |
583 | 583 | ||
584 | vlan_vid_del(lowerdev, vid); | 584 | vlan_vid_del(lowerdev, proto, vid); |
585 | return 0; | 585 | return 0; |
586 | } | 586 | } |
587 | 587 | ||
diff --git a/drivers/net/team/team.c b/drivers/net/team/team.c index 9290eb23d664..7c43261975bd 100644 --- a/drivers/net/team/team.c +++ b/drivers/net/team/team.c | |||
@@ -1598,7 +1598,7 @@ team_get_stats64(struct net_device *dev, struct rtnl_link_stats64 *stats) | |||
1598 | return stats; | 1598 | return stats; |
1599 | } | 1599 | } |
1600 | 1600 | ||
1601 | static int team_vlan_rx_add_vid(struct net_device *dev, uint16_t vid) | 1601 | static int team_vlan_rx_add_vid(struct net_device *dev, __be16 proto, u16 vid) |
1602 | { | 1602 | { |
1603 | struct team *team = netdev_priv(dev); | 1603 | struct team *team = netdev_priv(dev); |
1604 | struct team_port *port; | 1604 | struct team_port *port; |
@@ -1610,7 +1610,7 @@ static int team_vlan_rx_add_vid(struct net_device *dev, uint16_t vid) | |||
1610 | */ | 1610 | */ |
1611 | mutex_lock(&team->lock); | 1611 | mutex_lock(&team->lock); |
1612 | list_for_each_entry(port, &team->port_list, list) { | 1612 | list_for_each_entry(port, &team->port_list, list) { |
1613 | err = vlan_vid_add(port->dev, vid); | 1613 | err = vlan_vid_add(port->dev, proto, vid); |
1614 | if (err) | 1614 | if (err) |
1615 | goto unwind; | 1615 | goto unwind; |
1616 | } | 1616 | } |
@@ -1620,20 +1620,20 @@ static int team_vlan_rx_add_vid(struct net_device *dev, uint16_t vid) | |||
1620 | 1620 | ||
1621 | unwind: | 1621 | unwind: |
1622 | list_for_each_entry_continue_reverse(port, &team->port_list, list) | 1622 | list_for_each_entry_continue_reverse(port, &team->port_list, list) |
1623 | vlan_vid_del(port->dev, vid); | 1623 | vlan_vid_del(port->dev, proto, vid); |
1624 | mutex_unlock(&team->lock); | 1624 | mutex_unlock(&team->lock); |
1625 | 1625 | ||
1626 | return err; | 1626 | return err; |
1627 | } | 1627 | } |
1628 | 1628 | ||
1629 | static int team_vlan_rx_kill_vid(struct net_device *dev, uint16_t vid) | 1629 | static int team_vlan_rx_kill_vid(struct net_device *dev, __be16 proto, u16 vid) |
1630 | { | 1630 | { |
1631 | struct team *team = netdev_priv(dev); | 1631 | struct team *team = netdev_priv(dev); |
1632 | struct team_port *port; | 1632 | struct team_port *port; |
1633 | 1633 | ||
1634 | rcu_read_lock(); | 1634 | rcu_read_lock(); |
1635 | list_for_each_entry_rcu(port, &team->port_list, list) | 1635 | list_for_each_entry_rcu(port, &team->port_list, list) |
1636 | vlan_vid_del(port->dev, vid); | 1636 | vlan_vid_del(port->dev, proto, vid); |
1637 | rcu_read_unlock(); | 1637 | rcu_read_unlock(); |
1638 | 1638 | ||
1639 | return 0; | 1639 | return 0; |
diff --git a/drivers/net/virtio_net.c b/drivers/net/virtio_net.c index b61d57ab3c63..50077753a0e5 100644 --- a/drivers/net/virtio_net.c +++ b/drivers/net/virtio_net.c | |||
@@ -1006,7 +1006,8 @@ static void virtnet_set_rx_mode(struct net_device *dev) | |||
1006 | kfree(buf); | 1006 | kfree(buf); |
1007 | } | 1007 | } |
1008 | 1008 | ||
1009 | static int virtnet_vlan_rx_add_vid(struct net_device *dev, u16 vid) | 1009 | static int virtnet_vlan_rx_add_vid(struct net_device *dev, |
1010 | __be16 proto, u16 vid) | ||
1010 | { | 1011 | { |
1011 | struct virtnet_info *vi = netdev_priv(dev); | 1012 | struct virtnet_info *vi = netdev_priv(dev); |
1012 | struct scatterlist sg; | 1013 | struct scatterlist sg; |
@@ -1019,7 +1020,8 @@ static int virtnet_vlan_rx_add_vid(struct net_device *dev, u16 vid) | |||
1019 | return 0; | 1020 | return 0; |
1020 | } | 1021 | } |
1021 | 1022 | ||
1022 | static int virtnet_vlan_rx_kill_vid(struct net_device *dev, u16 vid) | 1023 | static int virtnet_vlan_rx_kill_vid(struct net_device *dev, |
1024 | __be16 proto, u16 vid) | ||
1023 | { | 1025 | { |
1024 | struct virtnet_info *vi = netdev_priv(dev); | 1026 | struct virtnet_info *vi = netdev_priv(dev); |
1025 | struct scatterlist sg; | 1027 | struct scatterlist sg; |
diff --git a/drivers/net/vmxnet3/vmxnet3_drv.c b/drivers/net/vmxnet3/vmxnet3_drv.c index ba9bdad39986..27b889992ab8 100644 --- a/drivers/net/vmxnet3/vmxnet3_drv.c +++ b/drivers/net/vmxnet3/vmxnet3_drv.c | |||
@@ -1931,7 +1931,7 @@ vmxnet3_restore_vlan(struct vmxnet3_adapter *adapter) | |||
1931 | 1931 | ||
1932 | 1932 | ||
1933 | static int | 1933 | static int |
1934 | vmxnet3_vlan_rx_add_vid(struct net_device *netdev, u16 vid) | 1934 | vmxnet3_vlan_rx_add_vid(struct net_device *netdev, __be16 proto, u16 vid) |
1935 | { | 1935 | { |
1936 | struct vmxnet3_adapter *adapter = netdev_priv(netdev); | 1936 | struct vmxnet3_adapter *adapter = netdev_priv(netdev); |
1937 | 1937 | ||
@@ -1953,7 +1953,7 @@ vmxnet3_vlan_rx_add_vid(struct net_device *netdev, u16 vid) | |||
1953 | 1953 | ||
1954 | 1954 | ||
1955 | static int | 1955 | static int |
1956 | vmxnet3_vlan_rx_kill_vid(struct net_device *netdev, u16 vid) | 1956 | vmxnet3_vlan_rx_kill_vid(struct net_device *netdev, __be16 proto, u16 vid) |
1957 | { | 1957 | { |
1958 | struct vmxnet3_adapter *adapter = netdev_priv(netdev); | 1958 | struct vmxnet3_adapter *adapter = netdev_priv(netdev); |
1959 | 1959 | ||