diff options
author | Jiri Pirko <jpirko@redhat.com> | 2011-07-20 00:54:15 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2011-07-21 16:47:54 -0400 |
commit | 133b08513a99d44d9ed916bb83e46343f6ad2855 (patch) | |
tree | 60bc1cfef6756f646c16ee6ecc37799b9937398b /drivers/net/chelsio/sge.c | |
parent | f859d7cb7967efaedae194dd90a23a7a72fb216d (diff) |
chelsio: do vlan cleanup
- unify vlan and nonvlan rx path
- kill adapter->vlan_grp and t1_vlan_rx_register
- allow to turn on/off rx/tx vlan accel via ethtool (set_features)
Signed-off-by: Jiri Pirko <jpirko@redhat.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/chelsio/sge.c')
-rw-r--r-- | drivers/net/chelsio/sge.c | 18 |
1 files changed, 8 insertions, 10 deletions
diff --git a/drivers/net/chelsio/sge.c b/drivers/net/chelsio/sge.c index 58380d24061..e9a03fffef1 100644 --- a/drivers/net/chelsio/sge.c +++ b/drivers/net/chelsio/sge.c | |||
@@ -742,13 +742,14 @@ static inline void setup_ring_params(struct adapter *adapter, u64 addr, | |||
742 | /* | 742 | /* |
743 | * Enable/disable VLAN acceleration. | 743 | * Enable/disable VLAN acceleration. |
744 | */ | 744 | */ |
745 | void t1_set_vlan_accel(struct adapter *adapter, int on_off) | 745 | void t1_vlan_mode(struct adapter *adapter, u32 features) |
746 | { | 746 | { |
747 | struct sge *sge = adapter->sge; | 747 | struct sge *sge = adapter->sge; |
748 | 748 | ||
749 | sge->sge_control &= ~F_VLAN_XTRACT; | 749 | if (features & NETIF_F_HW_VLAN_RX) |
750 | if (on_off) | ||
751 | sge->sge_control |= F_VLAN_XTRACT; | 750 | sge->sge_control |= F_VLAN_XTRACT; |
751 | else | ||
752 | sge->sge_control &= ~F_VLAN_XTRACT; | ||
752 | if (adapter->open_device_map) { | 753 | if (adapter->open_device_map) { |
753 | writel(sge->sge_control, adapter->regs + A_SG_CONTROL); | 754 | writel(sge->sge_control, adapter->regs + A_SG_CONTROL); |
754 | readl(adapter->regs + A_SG_CONTROL); /* flush */ | 755 | readl(adapter->regs + A_SG_CONTROL); /* flush */ |
@@ -1397,12 +1398,11 @@ static void sge_rx(struct sge *sge, struct freelQ *fl, unsigned int len) | |||
1397 | } else | 1398 | } else |
1398 | skb_checksum_none_assert(skb); | 1399 | skb_checksum_none_assert(skb); |
1399 | 1400 | ||
1400 | if (unlikely(adapter->vlan_grp && p->vlan_valid)) { | 1401 | if (p->vlan_valid) { |
1401 | st->vlan_xtract++; | 1402 | st->vlan_xtract++; |
1402 | vlan_hwaccel_receive_skb(skb, adapter->vlan_grp, | 1403 | __vlan_hwaccel_put_tag(skb, ntohs(p->vlan)); |
1403 | ntohs(p->vlan)); | 1404 | } |
1404 | } else | 1405 | netif_receive_skb(skb); |
1405 | netif_receive_skb(skb); | ||
1406 | } | 1406 | } |
1407 | 1407 | ||
1408 | /* | 1408 | /* |
@@ -1875,13 +1875,11 @@ netdev_tx_t t1_start_xmit(struct sk_buff *skb, struct net_device *dev) | |||
1875 | } | 1875 | } |
1876 | cpl->iff = dev->if_port; | 1876 | cpl->iff = dev->if_port; |
1877 | 1877 | ||
1878 | #if defined(CONFIG_VLAN_8021Q) || defined(CONFIG_VLAN_8021Q_MODULE) | ||
1879 | if (vlan_tx_tag_present(skb)) { | 1878 | if (vlan_tx_tag_present(skb)) { |
1880 | cpl->vlan_valid = 1; | 1879 | cpl->vlan_valid = 1; |
1881 | cpl->vlan = htons(vlan_tx_tag_get(skb)); | 1880 | cpl->vlan = htons(vlan_tx_tag_get(skb)); |
1882 | st->vlan_insert++; | 1881 | st->vlan_insert++; |
1883 | } else | 1882 | } else |
1884 | #endif | ||
1885 | cpl->vlan_valid = 0; | 1883 | cpl->vlan_valid = 0; |
1886 | 1884 | ||
1887 | send: | 1885 | send: |