diff options
-rw-r--r-- | drivers/net/r6040.c | 22 |
1 files changed, 15 insertions, 7 deletions
diff --git a/drivers/net/r6040.c b/drivers/net/r6040.c index b68781d35928..99dbe4633fc7 100644 --- a/drivers/net/r6040.c +++ b/drivers/net/r6040.c | |||
@@ -163,9 +163,9 @@ MODULE_LICENSE("GPL"); | |||
163 | MODULE_DESCRIPTION("RDC R6040 NAPI PCI FastEthernet driver"); | 163 | MODULE_DESCRIPTION("RDC R6040 NAPI PCI FastEthernet driver"); |
164 | 164 | ||
165 | /* RX and TX interrupts that we handle */ | 165 | /* RX and TX interrupts that we handle */ |
166 | #define RX_INT (RX_FINISH) | 166 | #define RX_INTS (RX_FIFO_FULL | RX_NO_DESC | RX_FINISH) |
167 | #define TX_INT (TX_FINISH) | 167 | #define TX_INTS (TX_FINISH) |
168 | #define INT_MASK (RX_INT | TX_INT) | 168 | #define INT_MASK (RX_INTS | TX_INTS) |
169 | 169 | ||
170 | struct r6040_descriptor { | 170 | struct r6040_descriptor { |
171 | u16 status, len; /* 0-3 */ | 171 | u16 status, len; /* 0-3 */ |
@@ -671,7 +671,7 @@ static int r6040_poll(struct napi_struct *napi, int budget) | |||
671 | if (work_done < budget) { | 671 | if (work_done < budget) { |
672 | netif_rx_complete(dev, napi); | 672 | netif_rx_complete(dev, napi); |
673 | /* Enable RX interrupt */ | 673 | /* Enable RX interrupt */ |
674 | iowrite16(ioread16(ioaddr + MIER) | RX_INT, ioaddr + MIER); | 674 | iowrite16(ioread16(ioaddr + MIER) | RX_INTS, ioaddr + MIER); |
675 | } | 675 | } |
676 | return work_done; | 676 | return work_done; |
677 | } | 677 | } |
@@ -693,14 +693,22 @@ static irqreturn_t r6040_interrupt(int irq, void *dev_id) | |||
693 | return IRQ_NONE; | 693 | return IRQ_NONE; |
694 | 694 | ||
695 | /* RX interrupt request */ | 695 | /* RX interrupt request */ |
696 | if (status & 0x01) { | 696 | if (status & RX_INTS) { |
697 | if (status & RX_NO_DESC) { | ||
698 | /* RX descriptor unavailable */ | ||
699 | dev->stats.rx_dropped++; | ||
700 | dev->stats.rx_missed_errors++; | ||
701 | } | ||
702 | if (status & RX_FIFO_FULL) | ||
703 | dev->stats.rx_fifo_errors++; | ||
704 | |||
697 | /* Mask off RX interrupt */ | 705 | /* Mask off RX interrupt */ |
698 | iowrite16(ioread16(ioaddr + MIER) & ~RX_INT, ioaddr + MIER); | 706 | iowrite16(ioread16(ioaddr + MIER) & ~RX_INTS, ioaddr + MIER); |
699 | netif_rx_schedule(dev, &lp->napi); | 707 | netif_rx_schedule(dev, &lp->napi); |
700 | } | 708 | } |
701 | 709 | ||
702 | /* TX interrupt request */ | 710 | /* TX interrupt request */ |
703 | if (status & 0x10) | 711 | if (status & TX_INTS) |
704 | r6040_tx(dev); | 712 | r6040_tx(dev); |
705 | 713 | ||
706 | return IRQ_HANDLED; | 714 | return IRQ_HANDLED; |