From 7a2615e8446391b2e741bd10b5841c1f60dcb1c9 Mon Sep 17 00:00:00 2001 From: Florian Fainelli Date: Sun, 13 Jul 2008 14:35:32 +0200 Subject: [PATCH] --- yaml --- r: 104949 b: refs/heads/master c: e24ddf3aa8a2c4c14df1136e762c315c436488e7 h: refs/heads/master i: 104947: 11c01a51812f9a1689d27a550519ea8495944310 v: v3 --- [refs] | 2 +- trunk/drivers/net/r6040.c | 22 +++++++++++++++------- 2 files changed, 16 insertions(+), 8 deletions(-) diff --git a/[refs] b/[refs] index b5831470d873..ad0b566b3e8d 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 31718dedf62fd62e807001138ab5ac76e9b11064 +refs/heads/master: e24ddf3aa8a2c4c14df1136e762c315c436488e7 diff --git a/trunk/drivers/net/r6040.c b/trunk/drivers/net/r6040.c index b68781d35928..99dbe4633fc7 100644 --- a/trunk/drivers/net/r6040.c +++ b/trunk/drivers/net/r6040.c @@ -163,9 +163,9 @@ MODULE_LICENSE("GPL"); MODULE_DESCRIPTION("RDC R6040 NAPI PCI FastEthernet driver"); /* RX and TX interrupts that we handle */ -#define RX_INT (RX_FINISH) -#define TX_INT (TX_FINISH) -#define INT_MASK (RX_INT | TX_INT) +#define RX_INTS (RX_FIFO_FULL | RX_NO_DESC | RX_FINISH) +#define TX_INTS (TX_FINISH) +#define INT_MASK (RX_INTS | TX_INTS) struct r6040_descriptor { u16 status, len; /* 0-3 */ @@ -671,7 +671,7 @@ static int r6040_poll(struct napi_struct *napi, int budget) if (work_done < budget) { netif_rx_complete(dev, napi); /* Enable RX interrupt */ - iowrite16(ioread16(ioaddr + MIER) | RX_INT, ioaddr + MIER); + iowrite16(ioread16(ioaddr + MIER) | RX_INTS, ioaddr + MIER); } return work_done; } @@ -693,14 +693,22 @@ static irqreturn_t r6040_interrupt(int irq, void *dev_id) return IRQ_NONE; /* RX interrupt request */ - if (status & 0x01) { + if (status & RX_INTS) { + if (status & RX_NO_DESC) { + /* RX descriptor unavailable */ + dev->stats.rx_dropped++; + dev->stats.rx_missed_errors++; + } + if (status & RX_FIFO_FULL) + dev->stats.rx_fifo_errors++; + /* Mask off RX interrupt */ - iowrite16(ioread16(ioaddr + MIER) & ~RX_INT, ioaddr + MIER); + iowrite16(ioread16(ioaddr + MIER) & ~RX_INTS, ioaddr + MIER); netif_rx_schedule(dev, &lp->napi); } /* TX interrupt request */ - if (status & 0x10) + if (status & TX_INTS) r6040_tx(dev); return IRQ_HANDLED;