aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/chelsio/sge.c
diff options
context:
space:
mode:
authorJiri Pirko <jpirko@redhat.com>2011-07-20 00:54:15 -0400
committerDavid S. Miller <davem@davemloft.net>2011-07-21 16:47:54 -0400
commit133b08513a99d44d9ed916bb83e46343f6ad2855 (patch)
tree60bc1cfef6756f646c16ee6ecc37799b9937398b /drivers/net/chelsio/sge.c
parentf859d7cb7967efaedae194dd90a23a7a72fb216d (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.c18
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 */
745void t1_set_vlan_accel(struct adapter *adapter, int on_off) 745void 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
1887send: 1885send: