Commit 6ba33ac8 authored by Francois Romieu's avatar Francois Romieu Committed by David S. Miller

amd8111e: delete non NAPI code from the driver.

Signed-off-by: default avatarFrancois Romieu <romieu@fr.zoreil.com>
Acked-by: default avatarJeff Garzik <jgarzik@redhat.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent a6676019
...@@ -1306,20 +1306,6 @@ config AMD8111_ETH ...@@ -1306,20 +1306,6 @@ config AMD8111_ETH
To compile this driver as a module, choose M here. The module To compile this driver as a module, choose M here. The module
will be called amd8111e. will be called amd8111e.
config AMD8111E_NAPI
bool "Use RX polling (NAPI)"
depends on AMD8111_ETH
help
NAPI is a new driver API designed to reduce CPU and interrupt load
when the driver is receiving lots of packets from the card. It is
still somewhat experimental and thus not yet enabled by default.
If your estimated Rx load is 10kpps or more, or if the card will be
deployed on potentially unfriendly networks (e.g. in a firewall),
then say Y here.
If in doubt, say N.
config ADAPTEC_STARFIRE config ADAPTEC_STARFIRE
tristate "Adaptec Starfire/DuraLAN support" tristate "Adaptec Starfire/DuraLAN support"
depends on NET_PCI && PCI depends on NET_PCI && PCI
......
...@@ -101,9 +101,9 @@ Revision History: ...@@ -101,9 +101,9 @@ Revision History:
#include "amd8111e.h" #include "amd8111e.h"
#define MODULE_NAME "amd8111e" #define MODULE_NAME "amd8111e"
#define MODULE_VERS "3.0.6" #define MODULE_VERS "3.0.7"
MODULE_AUTHOR("Advanced Micro Devices, Inc."); MODULE_AUTHOR("Advanced Micro Devices, Inc.");
MODULE_DESCRIPTION ("AMD8111 based 10/100 Ethernet Controller. Driver Version 3.0.6"); MODULE_DESCRIPTION ("AMD8111 based 10/100 Ethernet Controller. Driver Version "MODULE_VERS);
MODULE_LICENSE("GPL"); MODULE_LICENSE("GPL");
MODULE_DEVICE_TABLE(pci, amd8111e_pci_tbl); MODULE_DEVICE_TABLE(pci, amd8111e_pci_tbl);
module_param_array(speed_duplex, int, NULL, 0); module_param_array(speed_duplex, int, NULL, 0);
...@@ -671,11 +671,7 @@ This is the receive indication function for packets with vlan tag. ...@@ -671,11 +671,7 @@ This is the receive indication function for packets with vlan tag.
*/ */
static int amd8111e_vlan_rx(struct amd8111e_priv *lp, struct sk_buff *skb, u16 vlan_tag) static int amd8111e_vlan_rx(struct amd8111e_priv *lp, struct sk_buff *skb, u16 vlan_tag)
{ {
#ifdef CONFIG_AMD8111E_NAPI
return vlan_hwaccel_receive_skb(skb, lp->vlgrp,vlan_tag); return vlan_hwaccel_receive_skb(skb, lp->vlgrp,vlan_tag);
#else
return vlan_hwaccel_rx(skb, lp->vlgrp, vlan_tag);
#endif /* CONFIG_AMD8111E_NAPI */
} }
#endif #endif
...@@ -722,7 +718,6 @@ static int amd8111e_tx(struct net_device *dev) ...@@ -722,7 +718,6 @@ static int amd8111e_tx(struct net_device *dev)
return 0; return 0;
} }
#ifdef CONFIG_AMD8111E_NAPI
/* This function handles the driver receive operation in polling mode */ /* This function handles the driver receive operation in polling mode */
static int amd8111e_rx_poll(struct napi_struct *napi, int budget) static int amd8111e_rx_poll(struct napi_struct *napi, int budget)
{ {
...@@ -734,7 +729,6 @@ static int amd8111e_rx_poll(struct napi_struct *napi, int budget) ...@@ -734,7 +729,6 @@ static int amd8111e_rx_poll(struct napi_struct *napi, int budget)
int min_pkt_len, status; int min_pkt_len, status;
unsigned int intr0; unsigned int intr0;
int num_rx_pkt = 0; int num_rx_pkt = 0;
/*int max_rx_pkt = NUM_RX_BUFFERS;*/
short pkt_len; short pkt_len;
#if AMD8111E_VLAN_TAG_USED #if AMD8111E_VLAN_TAG_USED
short vtag; short vtag;
...@@ -850,108 +844,6 @@ static int amd8111e_rx_poll(struct napi_struct *napi, int budget) ...@@ -850,108 +844,6 @@ static int amd8111e_rx_poll(struct napi_struct *napi, int budget)
return num_rx_pkt; return num_rx_pkt;
} }
#else
/*
This function will check the ownership of receive buffers and descriptors. It will indicate to kernel up to half the number of maximum receive buffers in the descriptor ring, in a single receive interrupt. It will also replenish the descriptors with new skbs.
*/
static int amd8111e_rx(struct net_device *dev)
{
struct amd8111e_priv *lp = netdev_priv(dev);
struct sk_buff *skb,*new_skb;
int rx_index = lp->rx_idx & RX_RING_DR_MOD_MASK;
int min_pkt_len, status;
int num_rx_pkt = 0;
int max_rx_pkt = NUM_RX_BUFFERS;
short pkt_len;
#if AMD8111E_VLAN_TAG_USED
short vtag;
#endif
/* If we own the next entry, it's a new packet. Send it up. */
while(++num_rx_pkt <= max_rx_pkt){
status = le16_to_cpu(lp->rx_ring[rx_index].rx_flags);
if(status & OWN_BIT)
return 0;
/* check if err summary bit is set */
if(status & ERR_BIT){
/*
* There is a tricky error noted by John Murphy,
* <murf@perftech.com> to Russ Nelson: Even with full-sized
* buffers it's possible for a jabber packet to use two
* buffers, with only the last correctly noting the error. */
/* reseting flags */
lp->rx_ring[rx_index].rx_flags &= RESET_RX_FLAGS;
goto err_next_pkt;
}
/* check for STP and ENP */
if(!((status & STP_BIT) && (status & ENP_BIT))){
/* reseting flags */
lp->rx_ring[rx_index].rx_flags &= RESET_RX_FLAGS;
goto err_next_pkt;
}
pkt_len = le16_to_cpu(lp->rx_ring[rx_index].msg_count) - 4;
#if AMD8111E_VLAN_TAG_USED
vtag = status & TT_MASK;
/*MAC will strip vlan tag*/
if(lp->vlgrp != NULL && vtag !=0)
min_pkt_len =MIN_PKT_LEN - 4;
else
#endif
min_pkt_len =MIN_PKT_LEN;
if (pkt_len < min_pkt_len) {
lp->rx_ring[rx_index].rx_flags &= RESET_RX_FLAGS;
lp->drv_rx_errors++;
goto err_next_pkt;
}
if(!(new_skb = dev_alloc_skb(lp->rx_buff_len))){
/* if allocation fail,
ignore that pkt and go to next one */
lp->rx_ring[rx_index].rx_flags &= RESET_RX_FLAGS;
lp->drv_rx_errors++;
goto err_next_pkt;
}
skb_reserve(new_skb, 2);
skb = lp->rx_skbuff[rx_index];
pci_unmap_single(lp->pci_dev,lp->rx_dma_addr[rx_index],
lp->rx_buff_len-2, PCI_DMA_FROMDEVICE);
skb_put(skb, pkt_len);
lp->rx_skbuff[rx_index] = new_skb;
lp->rx_dma_addr[rx_index] = pci_map_single(lp->pci_dev,
new_skb->data, lp->rx_buff_len-2,PCI_DMA_FROMDEVICE);
skb->protocol = eth_type_trans(skb, dev);
#if AMD8111E_VLAN_TAG_USED
if(lp->vlgrp != NULL && (vtag == TT_VLAN_TAGGED)){
amd8111e_vlan_rx(lp, skb,
le16_to_cpu(lp->rx_ring[rx_index].tag_ctrl_info));
} else
#endif
netif_rx (skb);
/*COAL update rx coalescing parameters*/
lp->coal_conf.rx_packets++;
lp->coal_conf.rx_bytes += pkt_len;
dev->last_rx = jiffies;
err_next_pkt:
lp->rx_ring[rx_index].buff_phy_addr
= cpu_to_le32(lp->rx_dma_addr[rx_index]);
lp->rx_ring[rx_index].buff_count =
cpu_to_le16(lp->rx_buff_len-2);
wmb();
lp->rx_ring[rx_index].rx_flags |= cpu_to_le16(OWN_BIT);
rx_index = (++lp->rx_idx) & RX_RING_DR_MOD_MASK;
}
return 0;
}
#endif /* CONFIG_AMD8111E_NAPI */
/* /*
This function will indicate the link status to the kernel. This function will indicate the link status to the kernel.
*/ */
...@@ -1280,29 +1172,22 @@ static irqreturn_t amd8111e_interrupt(int irq, void *dev_id) ...@@ -1280,29 +1172,22 @@ static irqreturn_t amd8111e_interrupt(int irq, void *dev_id)
writel(intr0, mmio + INT0); writel(intr0, mmio + INT0);
/* Check if Receive Interrupt has occurred. */ /* Check if Receive Interrupt has occurred. */
#ifdef CONFIG_AMD8111E_NAPI if (intr0 & RINT0) {
if(intr0 & RINT0){ if (netif_rx_schedule_prep(dev, &lp->napi)) {
if(netif_rx_schedule_prep(dev, &lp->napi)){
/* Disable receive interupts */ /* Disable receive interupts */
writel(RINTEN0, mmio + INTEN0); writel(RINTEN0, mmio + INTEN0);
/* Schedule a polling routine */ /* Schedule a polling routine */
__netif_rx_schedule(dev, &lp->napi); __netif_rx_schedule(dev, &lp->napi);
} } else if (intren0 & RINTEN0) {
else if (intren0 & RINTEN0) {
printk("************Driver bug! \ printk("************Driver bug! \
interrupt while in poll\n"); interrupt while in poll\n");
/* Fix by disable receive interrupts */ /* Fix by disable receive interrupts */
writel(RINTEN0, mmio + INTEN0); writel(RINTEN0, mmio + INTEN0);
} }
} }
#else
if(intr0 & RINT0){
amd8111e_rx(dev);
writel(VAL2 | RDMD0, mmio + CMD0);
}
#endif /* CONFIG_AMD8111E_NAPI */
/* Check if Transmit Interrupt has occurred. */ /* Check if Transmit Interrupt has occurred. */
if(intr0 & TINT0) if (intr0 & TINT0)
amd8111e_tx(dev); amd8111e_tx(dev);
/* Check if Link Change Interrupt has occurred. */ /* Check if Link Change Interrupt has occurred. */
...@@ -1340,9 +1225,7 @@ static int amd8111e_close(struct net_device * dev) ...@@ -1340,9 +1225,7 @@ static int amd8111e_close(struct net_device * dev)
struct amd8111e_priv *lp = netdev_priv(dev); struct amd8111e_priv *lp = netdev_priv(dev);
netif_stop_queue(dev); netif_stop_queue(dev);
#ifdef CONFIG_AMD8111E_NAPI
napi_disable(&lp->napi); napi_disable(&lp->napi);
#endif
spin_lock_irq(&lp->lock); spin_lock_irq(&lp->lock);
...@@ -1374,9 +1257,7 @@ static int amd8111e_open(struct net_device * dev ) ...@@ -1374,9 +1257,7 @@ static int amd8111e_open(struct net_device * dev )
dev->name, dev)) dev->name, dev))
return -EAGAIN; return -EAGAIN;
#ifdef CONFIG_AMD8111E_NAPI
napi_enable(&lp->napi); napi_enable(&lp->napi);
#endif
spin_lock_irq(&lp->lock); spin_lock_irq(&lp->lock);
...@@ -1384,9 +1265,7 @@ static int amd8111e_open(struct net_device * dev ) ...@@ -1384,9 +1265,7 @@ static int amd8111e_open(struct net_device * dev )
if(amd8111e_restart(dev)){ if(amd8111e_restart(dev)){
spin_unlock_irq(&lp->lock); spin_unlock_irq(&lp->lock);
#ifdef CONFIG_AMD8111E_NAPI
napi_disable(&lp->napi); napi_disable(&lp->napi);
#endif
if (dev->irq) if (dev->irq)
free_irq(dev->irq, dev); free_irq(dev->irq, dev);
return -ENOMEM; return -ENOMEM;
...@@ -2036,9 +1915,7 @@ static int __devinit amd8111e_probe_one(struct pci_dev *pdev, ...@@ -2036,9 +1915,7 @@ static int __devinit amd8111e_probe_one(struct pci_dev *pdev,
dev->irq =pdev->irq; dev->irq =pdev->irq;
dev->tx_timeout = amd8111e_tx_timeout; dev->tx_timeout = amd8111e_tx_timeout;
dev->watchdog_timeo = AMD8111E_TX_TIMEOUT; dev->watchdog_timeo = AMD8111E_TX_TIMEOUT;
#ifdef CONFIG_AMD8111E_NAPI
netif_napi_add(dev, &lp->napi, amd8111e_rx_poll, 32); netif_napi_add(dev, &lp->napi, amd8111e_rx_poll, 32);
#endif
#ifdef CONFIG_NET_POLL_CONTROLLER #ifdef CONFIG_NET_POLL_CONTROLLER
dev->poll_controller = amd8111e_poll; dev->poll_controller = amd8111e_poll;
#endif #endif
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment