mirror of
https://git.openwrt.org/openwrt/openwrt.git
synced 2024-11-19 06:54:58 +01:00
ag71xx driver: always use NAPI to transmit packets
SVN-Revision: 13529
This commit is contained in:
parent
4992a87aeb
commit
d6382555f4
@ -37,9 +37,7 @@
|
||||
#define ETH_FCS_LEN 4
|
||||
|
||||
#define AG71XX_DRV_NAME "ag71xx"
|
||||
#define AG71XX_DRV_VERSION "0.5.9"
|
||||
|
||||
#define AG71XX_NAPI_TX 1
|
||||
#define AG71XX_DRV_VERSION "0.5.10"
|
||||
|
||||
#define AG71XX_NAPI_WEIGHT 64
|
||||
|
||||
@ -47,13 +45,8 @@
|
||||
#define AG71XX_INT_TX (AG71XX_INT_TX_PS)
|
||||
#define AG71XX_INT_RX (AG71XX_INT_RX_PR | AG71XX_INT_RX_OF)
|
||||
|
||||
#ifdef AG71XX_NAPI_TX
|
||||
#define AG71XX_INT_POLL (AG71XX_INT_RX | AG71XX_INT_TX)
|
||||
#define AG71XX_INT_INIT (AG71XX_INT_ERR | AG71XX_INT_POLL)
|
||||
#else
|
||||
#define AG71XX_INT_POLL (AG71XX_INT_RX)
|
||||
#define AG71XX_INT_INIT (AG71XX_INT_ERR | AG71XX_INT_POLL | AG71XX_INT_TX)
|
||||
#endif
|
||||
|
||||
#define AG71XX_TX_FIFO_LEN 2048
|
||||
#define AG71XX_TX_MTU_LEN 1536
|
||||
|
@ -553,16 +553,11 @@ static int ag71xx_do_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
|
||||
|
||||
static void ag71xx_tx_packets(struct ag71xx *ag)
|
||||
{
|
||||
struct ag71xx_platform_data *pdata = ag71xx_get_pdata(ag);
|
||||
struct ag71xx_ring *ring = &ag->tx_ring;
|
||||
unsigned int sent;
|
||||
|
||||
DBG("%s: processing TX ring\n", ag->dev->name);
|
||||
|
||||
#ifdef AG71XX_NAPI_TX
|
||||
pdata->ddr_flush();
|
||||
#endif
|
||||
|
||||
sent = 0;
|
||||
while (ring->dirty != ring->curr) {
|
||||
unsigned int i = ring->dirty % AG71XX_TX_RING_SIZE;
|
||||
@ -595,18 +590,8 @@ static int ag71xx_rx_packets(struct ag71xx *ag, int limit)
|
||||
{
|
||||
struct net_device *dev = ag->dev;
|
||||
struct ag71xx_ring *ring = &ag->rx_ring;
|
||||
#ifndef AG71XX_NAPI_TX
|
||||
struct ag71xx_platform_data *pdata = ag71xx_get_pdata(ag);
|
||||
unsigned long flags;
|
||||
#endif
|
||||
int done = 0;
|
||||
|
||||
#ifndef AG71XX_NAPI_TX
|
||||
spin_lock_irqsave(&ag->lock, flags);
|
||||
pdata->ddr_flush();
|
||||
spin_unlock_irqrestore(&ag->lock, flags);
|
||||
#endif
|
||||
|
||||
DBG("%s: rx packets, limit=%d, curr=%u, dirty=%u\n",
|
||||
dev->name, limit, ring->curr, ring->dirty);
|
||||
|
||||
@ -661,18 +646,14 @@ static int ag71xx_rx_packets(struct ag71xx *ag, int limit)
|
||||
static int ag71xx_poll(struct napi_struct *napi, int limit)
|
||||
{
|
||||
struct ag71xx *ag = container_of(napi, struct ag71xx, napi);
|
||||
#ifdef AG71XX_NAPI_TX
|
||||
struct ag71xx_platform_data *pdata = ag71xx_get_pdata(ag);
|
||||
#endif
|
||||
struct net_device *dev = ag->dev;
|
||||
unsigned long flags;
|
||||
u32 status;
|
||||
int done;
|
||||
|
||||
#ifdef AG71XX_NAPI_TX
|
||||
pdata->ddr_flush();
|
||||
ag71xx_tx_packets(ag);
|
||||
#endif
|
||||
|
||||
DBG("%s: processing RX ring\n", dev->name);
|
||||
done = ag71xx_rx_packets(ag, limit);
|
||||
@ -738,11 +719,6 @@ static irqreturn_t ag71xx_interrupt(int irq, void *dev_id)
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifndef AG71XX_NAPI_TX
|
||||
if (likely(status & AG71XX_INT_TX_PS))
|
||||
ag71xx_tx_packets(ag);
|
||||
#endif
|
||||
|
||||
if (likely(status & AG71XX_INT_POLL)) {
|
||||
ag71xx_int_disable(ag, AG71XX_INT_POLL);
|
||||
DBG("%s: enable polling mode\n", dev->name);
|
||||
|
Loading…
Reference in New Issue
Block a user