diff options
author | Jiri Pirko <jpirko@redhat.com> | 2011-07-20 00:54:33 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2011-07-21 16:47:56 -0400 |
commit | 924917098e4bc3561a372a6eb36993e7c3bb02f2 (patch) | |
tree | b44872f6dfaa9c7a588dbc657b025351b868e674 /drivers/net/atlx/atl1.c | |
parent | a4f676b80f9ca2a76cb27b8378343a5f4f972d3f (diff) |
atl1: do vlan cleanup
- unify vlan and nonvlan rx path
- kill adapter->vlgrp and atlx_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/atlx/atl1.c')
-rw-r--r-- | drivers/net/atlx/atl1.c | 21 |
1 files changed, 11 insertions, 10 deletions
diff --git a/drivers/net/atlx/atl1.c b/drivers/net/atlx/atl1.c index cd5789ff3726..6f0e9403004b 100644 --- a/drivers/net/atlx/atl1.c +++ b/drivers/net/atlx/atl1.c | |||
@@ -1285,8 +1285,7 @@ static void atl1_setup_mac_ctrl(struct atl1_adapter *adapter) | |||
1285 | value |= (((u32) adapter->hw.preamble_len | 1285 | value |= (((u32) adapter->hw.preamble_len |
1286 | & MAC_CTRL_PRMLEN_MASK) << MAC_CTRL_PRMLEN_SHIFT); | 1286 | & MAC_CTRL_PRMLEN_MASK) << MAC_CTRL_PRMLEN_SHIFT); |
1287 | /* vlan */ | 1287 | /* vlan */ |
1288 | if (adapter->vlgrp) | 1288 | __atlx_vlan_mode(netdev->features, &value); |
1289 | value |= MAC_CTRL_RMV_VLAN; | ||
1290 | /* rx checksum | 1289 | /* rx checksum |
1291 | if (adapter->rx_csum) | 1290 | if (adapter->rx_csum) |
1292 | value |= MAC_CTRL_RX_CHKSUM_EN; | 1291 | value |= MAC_CTRL_RX_CHKSUM_EN; |
@@ -2023,13 +2022,14 @@ rrd_ok: | |||
2023 | atl1_rx_checksum(adapter, rrd, skb); | 2022 | atl1_rx_checksum(adapter, rrd, skb); |
2024 | skb->protocol = eth_type_trans(skb, adapter->netdev); | 2023 | skb->protocol = eth_type_trans(skb, adapter->netdev); |
2025 | 2024 | ||
2026 | if (adapter->vlgrp && (rrd->pkt_flg & PACKET_FLAG_VLAN_INS)) { | 2025 | if (rrd->pkt_flg & PACKET_FLAG_VLAN_INS) { |
2027 | u16 vlan_tag = (rrd->vlan_tag >> 4) | | 2026 | u16 vlan_tag = (rrd->vlan_tag >> 4) | |
2028 | ((rrd->vlan_tag & 7) << 13) | | 2027 | ((rrd->vlan_tag & 7) << 13) | |
2029 | ((rrd->vlan_tag & 8) << 9); | 2028 | ((rrd->vlan_tag & 8) << 9); |
2030 | vlan_hwaccel_rx(skb, adapter->vlgrp, vlan_tag); | 2029 | |
2031 | } else | 2030 | __vlan_hwaccel_put_tag(skb, vlan_tag); |
2032 | netif_rx(skb); | 2031 | } |
2032 | netif_rx(skb); | ||
2033 | 2033 | ||
2034 | /* let protocol layer free skb */ | 2034 | /* let protocol layer free skb */ |
2035 | buffer_info->skb = NULL; | 2035 | buffer_info->skb = NULL; |
@@ -2783,8 +2783,7 @@ static int atl1_suspend(struct device *dev) | |||
2783 | ctrl |= MAC_CTRL_DUPLX; | 2783 | ctrl |= MAC_CTRL_DUPLX; |
2784 | ctrl |= (((u32)adapter->hw.preamble_len & | 2784 | ctrl |= (((u32)adapter->hw.preamble_len & |
2785 | MAC_CTRL_PRMLEN_MASK) << MAC_CTRL_PRMLEN_SHIFT); | 2785 | MAC_CTRL_PRMLEN_MASK) << MAC_CTRL_PRMLEN_SHIFT); |
2786 | if (adapter->vlgrp) | 2786 | __atlx_vlan_mode(netdev->features, &ctrl); |
2787 | ctrl |= MAC_CTRL_RMV_VLAN; | ||
2788 | if (wufc & ATLX_WUFC_MAG) | 2787 | if (wufc & ATLX_WUFC_MAG) |
2789 | ctrl |= MAC_CTRL_BC_EN; | 2788 | ctrl |= MAC_CTRL_BC_EN; |
2790 | iowrite32(ctrl, hw->hw_addr + REG_MAC_CTRL); | 2789 | iowrite32(ctrl, hw->hw_addr + REG_MAC_CTRL); |
@@ -2874,9 +2873,10 @@ static const struct net_device_ops atl1_netdev_ops = { | |||
2874 | .ndo_validate_addr = eth_validate_addr, | 2873 | .ndo_validate_addr = eth_validate_addr, |
2875 | .ndo_set_mac_address = atl1_set_mac, | 2874 | .ndo_set_mac_address = atl1_set_mac, |
2876 | .ndo_change_mtu = atl1_change_mtu, | 2875 | .ndo_change_mtu = atl1_change_mtu, |
2876 | .ndo_fix_features = atlx_fix_features, | ||
2877 | .ndo_set_features = atlx_set_features, | ||
2877 | .ndo_do_ioctl = atlx_ioctl, | 2878 | .ndo_do_ioctl = atlx_ioctl, |
2878 | .ndo_tx_timeout = atlx_tx_timeout, | 2879 | .ndo_tx_timeout = atlx_tx_timeout, |
2879 | .ndo_vlan_rx_register = atlx_vlan_rx_register, | ||
2880 | #ifdef CONFIG_NET_POLL_CONTROLLER | 2880 | #ifdef CONFIG_NET_POLL_CONTROLLER |
2881 | .ndo_poll_controller = atl1_poll_controller, | 2881 | .ndo_poll_controller = atl1_poll_controller, |
2882 | #endif | 2882 | #endif |
@@ -2984,7 +2984,8 @@ static int __devinit atl1_probe(struct pci_dev *pdev, | |||
2984 | netdev->features |= NETIF_F_SG; | 2984 | netdev->features |= NETIF_F_SG; |
2985 | netdev->features |= (NETIF_F_HW_VLAN_TX | NETIF_F_HW_VLAN_RX); | 2985 | netdev->features |= (NETIF_F_HW_VLAN_TX | NETIF_F_HW_VLAN_RX); |
2986 | 2986 | ||
2987 | netdev->hw_features = NETIF_F_HW_CSUM | NETIF_F_SG | NETIF_F_TSO; | 2987 | netdev->hw_features = NETIF_F_HW_CSUM | NETIF_F_SG | NETIF_F_TSO | |
2988 | NETIF_F_HW_VLAN_RX; | ||
2988 | 2989 | ||
2989 | /* is this valid? see atl1_setup_mac_ctrl() */ | 2990 | /* is this valid? see atl1_setup_mac_ctrl() */ |
2990 | netdev->features |= NETIF_F_RXCSUM; | 2991 | netdev->features |= NETIF_F_RXCSUM; |