|
@@ -60,12 +60,6 @@
|
|
|
#define BAR_0 0
|
|
|
#define BAR_2 2
|
|
|
|
|
|
-#if defined(CONFIG_VLAN_8021Q) || defined(CONFIG_VLAN_8021Q_MODULE)
|
|
|
-#define TG3_VLAN_TAG_USED 1
|
|
|
-#else
|
|
|
-#define TG3_VLAN_TAG_USED 0
|
|
|
-#endif
|
|
|
-
|
|
|
#include "tg3.h"
|
|
|
|
|
|
#define DRV_MODULE_NAME "tg3"
|
|
@@ -134,9 +128,6 @@
|
|
|
TG3_TX_RING_SIZE)
|
|
|
#define NEXT_TX(N) (((N) + 1) & (TG3_TX_RING_SIZE - 1))
|
|
|
|
|
|
-#define TG3_RX_DMA_ALIGN 16
|
|
|
-#define TG3_RX_HEADROOM ALIGN(VLAN_HLEN, TG3_RX_DMA_ALIGN)
|
|
|
-
|
|
|
#define TG3_DMA_BYTE_ENAB 64
|
|
|
|
|
|
#define TG3_RX_STD_DMA_SZ 1536
|
|
@@ -4722,8 +4713,6 @@ static int tg3_rx(struct tg3_napi *tnapi, int budget)
|
|
|
struct sk_buff *skb;
|
|
|
dma_addr_t dma_addr;
|
|
|
u32 opaque_key, desc_idx, *post_ptr;
|
|
|
- bool hw_vlan __maybe_unused = false;
|
|
|
- u16 vtag __maybe_unused = 0;
|
|
|
|
|
|
desc_idx = desc->opaque & RXD_OPAQUE_INDEX_MASK;
|
|
|
opaque_key = desc->opaque & RXD_OPAQUE_RING_MASK;
|
|
@@ -4782,12 +4771,12 @@ static int tg3_rx(struct tg3_napi *tnapi, int budget)
|
|
|
tg3_recycle_rx(tnapi, tpr, opaque_key,
|
|
|
desc_idx, *post_ptr);
|
|
|
|
|
|
- copy_skb = netdev_alloc_skb(tp->dev, len + VLAN_HLEN +
|
|
|
+ copy_skb = netdev_alloc_skb(tp->dev, len +
|
|
|
TG3_RAW_IP_ALIGN);
|
|
|
if (copy_skb == NULL)
|
|
|
goto drop_it_no_recycle;
|
|
|
|
|
|
- skb_reserve(copy_skb, TG3_RAW_IP_ALIGN + VLAN_HLEN);
|
|
|
+ skb_reserve(copy_skb, TG3_RAW_IP_ALIGN);
|
|
|
skb_put(copy_skb, len);
|
|
|
pci_dma_sync_single_for_cpu(tp->pdev, dma_addr, len, PCI_DMA_FROMDEVICE);
|
|
|
skb_copy_from_linear_data(skb, copy_skb->data, len);
|
|
@@ -4814,30 +4803,11 @@ static int tg3_rx(struct tg3_napi *tnapi, int budget)
|
|
|
}
|
|
|
|
|
|
if (desc->type_flags & RXD_FLAG_VLAN &&
|
|
|
- !(tp->rx_mode & RX_MODE_KEEP_VLAN_TAG)) {
|
|
|
- vtag = desc->err_vlan & RXD_VLAN_MASK;
|
|
|
-#if TG3_VLAN_TAG_USED
|
|
|
- if (tp->vlgrp)
|
|
|
- hw_vlan = true;
|
|
|
- else
|
|
|
-#endif
|
|
|
- {
|
|
|
- struct vlan_ethhdr *ve = (struct vlan_ethhdr *)
|
|
|
- __skb_push(skb, VLAN_HLEN);
|
|
|
-
|
|
|
- memmove(ve, skb->data + VLAN_HLEN,
|
|
|
- ETH_ALEN * 2);
|
|
|
- ve->h_vlan_proto = htons(ETH_P_8021Q);
|
|
|
- ve->h_vlan_TCI = htons(vtag);
|
|
|
- }
|
|
|
- }
|
|
|
+ !(tp->rx_mode & RX_MODE_KEEP_VLAN_TAG))
|
|
|
+ __vlan_hwaccel_put_tag(skb,
|
|
|
+ desc->err_vlan & RXD_VLAN_MASK);
|
|
|
|
|
|
-#if TG3_VLAN_TAG_USED
|
|
|
- if (hw_vlan)
|
|
|
- vlan_gro_receive(&tnapi->napi, tp->vlgrp, vtag, skb);
|
|
|
- else
|
|
|
-#endif
|
|
|
- napi_gro_receive(&tnapi->napi, skb);
|
|
|
+ napi_gro_receive(&tnapi->napi, skb);
|
|
|
|
|
|
received++;
|
|
|
budget--;
|
|
@@ -5740,11 +5710,9 @@ static netdev_tx_t tg3_start_xmit(struct sk_buff *skb,
|
|
|
base_flags |= TXD_FLAG_TCPUDP_CSUM;
|
|
|
}
|
|
|
|
|
|
-#if TG3_VLAN_TAG_USED
|
|
|
if (vlan_tx_tag_present(skb))
|
|
|
base_flags |= (TXD_FLAG_VLAN |
|
|
|
(vlan_tx_tag_get(skb) << 16));
|
|
|
-#endif
|
|
|
|
|
|
len = skb_headlen(skb);
|
|
|
|
|
@@ -5986,11 +5954,10 @@ static netdev_tx_t tg3_start_xmit_dma_bug(struct sk_buff *skb,
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
-#if TG3_VLAN_TAG_USED
|
|
|
+
|
|
|
if (vlan_tx_tag_present(skb))
|
|
|
base_flags |= (TXD_FLAG_VLAN |
|
|
|
(vlan_tx_tag_get(skb) << 16));
|
|
|
-#endif
|
|
|
|
|
|
if ((tp->tg3_flags3 & TG3_FLG3_USE_JUMBO_BDFLAG) &&
|
|
|
!mss && skb->len > VLAN_ETH_FRAME_LEN)
|
|
@@ -9532,17 +9499,10 @@ static void __tg3_set_rx_mode(struct net_device *dev)
|
|
|
rx_mode = tp->rx_mode & ~(RX_MODE_PROMISC |
|
|
|
RX_MODE_KEEP_VLAN_TAG);
|
|
|
|
|
|
+#if !defined(CONFIG_VLAN_8021Q) && !defined(CONFIG_VLAN_8021Q_MODULE)
|
|
|
/* When ASF is in use, we always keep the RX_MODE_KEEP_VLAN_TAG
|
|
|
* flag clear.
|
|
|
*/
|
|
|
-#if TG3_VLAN_TAG_USED
|
|
|
- if (!tp->vlgrp &&
|
|
|
- !(tp->tg3_flags & TG3_FLAG_ENABLE_ASF))
|
|
|
- rx_mode |= RX_MODE_KEEP_VLAN_TAG;
|
|
|
-#else
|
|
|
- /* By definition, VLAN is disabled always in this
|
|
|
- * case.
|
|
|
- */
|
|
|
if (!(tp->tg3_flags & TG3_FLAG_ENABLE_ASF))
|
|
|
rx_mode |= RX_MODE_KEEP_VLAN_TAG;
|
|
|
#endif
|
|
@@ -11230,31 +11190,6 @@ static int tg3_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
|
|
|
return -EOPNOTSUPP;
|
|
|
}
|
|
|
|
|
|
-#if TG3_VLAN_TAG_USED
|
|
|
-static void tg3_vlan_rx_register(struct net_device *dev, struct vlan_group *grp)
|
|
|
-{
|
|
|
- struct tg3 *tp = netdev_priv(dev);
|
|
|
-
|
|
|
- if (!netif_running(dev)) {
|
|
|
- tp->vlgrp = grp;
|
|
|
- return;
|
|
|
- }
|
|
|
-
|
|
|
- tg3_netif_stop(tp);
|
|
|
-
|
|
|
- tg3_full_lock(tp, 0);
|
|
|
-
|
|
|
- tp->vlgrp = grp;
|
|
|
-
|
|
|
- /* Update RX_MODE_KEEP_VLAN_TAG bit in RX_MODE register. */
|
|
|
- __tg3_set_rx_mode(dev);
|
|
|
-
|
|
|
- tg3_netif_start(tp);
|
|
|
-
|
|
|
- tg3_full_unlock(tp);
|
|
|
-}
|
|
|
-#endif
|
|
|
-
|
|
|
static int tg3_get_coalesce(struct net_device *dev, struct ethtool_coalesce *ec)
|
|
|
{
|
|
|
struct tg3 *tp = netdev_priv(dev);
|
|
@@ -13066,9 +13001,7 @@ static struct pci_dev * __devinit tg3_find_peer(struct tg3 *);
|
|
|
|
|
|
static void inline vlan_features_add(struct net_device *dev, unsigned long flags)
|
|
|
{
|
|
|
-#if TG3_VLAN_TAG_USED
|
|
|
dev->vlan_features |= flags;
|
|
|
-#endif
|
|
|
}
|
|
|
|
|
|
static inline u32 tg3_rx_ret_ring_size(struct tg3 *tp)
|
|
@@ -13861,11 +13794,11 @@ static int __devinit tg3_get_invariants(struct tg3 *tp)
|
|
|
else
|
|
|
tp->tg3_flags &= ~TG3_FLAG_POLL_SERDES;
|
|
|
|
|
|
- tp->rx_offset = NET_IP_ALIGN + TG3_RX_HEADROOM;
|
|
|
+ tp->rx_offset = NET_IP_ALIGN;
|
|
|
tp->rx_copy_thresh = TG3_RX_COPY_THRESHOLD;
|
|
|
if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701 &&
|
|
|
(tp->tg3_flags & TG3_FLAG_PCIX_MODE) != 0) {
|
|
|
- tp->rx_offset -= NET_IP_ALIGN;
|
|
|
+ tp->rx_offset = 0;
|
|
|
#ifndef CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS
|
|
|
tp->rx_copy_thresh = ~(u16)0;
|
|
|
#endif
|
|
@@ -14629,9 +14562,6 @@ static const struct net_device_ops tg3_netdev_ops = {
|
|
|
.ndo_do_ioctl = tg3_ioctl,
|
|
|
.ndo_tx_timeout = tg3_tx_timeout,
|
|
|
.ndo_change_mtu = tg3_change_mtu,
|
|
|
-#if TG3_VLAN_TAG_USED
|
|
|
- .ndo_vlan_rx_register = tg3_vlan_rx_register,
|
|
|
-#endif
|
|
|
#ifdef CONFIG_NET_POLL_CONTROLLER
|
|
|
.ndo_poll_controller = tg3_poll_controller,
|
|
|
#endif
|
|
@@ -14648,9 +14578,6 @@ static const struct net_device_ops tg3_netdev_ops_dma_bug = {
|
|
|
.ndo_do_ioctl = tg3_ioctl,
|
|
|
.ndo_tx_timeout = tg3_tx_timeout,
|
|
|
.ndo_change_mtu = tg3_change_mtu,
|
|
|
-#if TG3_VLAN_TAG_USED
|
|
|
- .ndo_vlan_rx_register = tg3_vlan_rx_register,
|
|
|
-#endif
|
|
|
#ifdef CONFIG_NET_POLL_CONTROLLER
|
|
|
.ndo_poll_controller = tg3_poll_controller,
|
|
|
#endif
|
|
@@ -14700,9 +14627,7 @@ static int __devinit tg3_init_one(struct pci_dev *pdev,
|
|
|
|
|
|
SET_NETDEV_DEV(dev, &pdev->dev);
|
|
|
|
|
|
-#if TG3_VLAN_TAG_USED
|
|
|
dev->features |= NETIF_F_HW_VLAN_TX | NETIF_F_HW_VLAN_RX;
|
|
|
-#endif
|
|
|
|
|
|
tp = netdev_priv(dev);
|
|
|
tp->pdev = pdev;
|