From 63dcab002e11123328bdbb73a475e5bc43b26b17 Mon Sep 17 00:00:00 2001 From: Michael Brown Date: Tue, 21 Apr 2015 15:20:13 +0100 Subject: [PATCH] [intel] Report any unexpected interrupt causes Signed-off-by: Michael Brown --- src/drivers/net/intel.c | 8 ++++++++ src/drivers/net/intel.h | 2 ++ 2 files changed, 10 insertions(+) diff --git a/src/drivers/net/intel.c b/src/drivers/net/intel.c index ffa027616..954025d06 100644 --- a/src/drivers/net/intel.c +++ b/src/drivers/net/intel.c @@ -759,6 +759,14 @@ static void intel_poll ( struct net_device *netdev ) { if ( icr & INTEL_IRQ_LSC ) intel_check_link ( netdev ); + /* Check for unexpected interrupts */ + if ( icr & ~( INTEL_IRQ_TXDW | INTEL_IRQ_TXQE | INTEL_IRQ_LSC | + INTEL_IRQ_RXDMT0 | INTEL_IRQ_RXT0 | INTEL_IRQ_RXO ) ) { + DBGC ( intel, "INTEL %p unexpected ICR %08x\n", intel, icr ); + /* Report as a TX error */ + netdev_tx_err ( netdev, NULL, -ENOTSUP ); + } + /* Refill RX ring */ intel_refill_rx ( intel ); } diff --git a/src/drivers/net/intel.h b/src/drivers/net/intel.h index 0c2929a50..5482fb16c 100644 --- a/src/drivers/net/intel.h +++ b/src/drivers/net/intel.h @@ -91,7 +91,9 @@ enum intel_descriptor_status { /** Interrupt Cause Read Register */ #define INTEL_ICR 0x000c0UL #define INTEL_IRQ_TXDW 0x00000001UL /**< Transmit descriptor done */ +#define INTEL_IRQ_TXQE 0x00000002UL /**< Transmit queue empty */ #define INTEL_IRQ_LSC 0x00000004UL /**< Link status change */ +#define INTEL_IRQ_RXDMT0 0x00000010UL /**< Receive queue low */ #define INTEL_IRQ_RXT0 0x00000080UL /**< Receive timer */ #define INTEL_IRQ_RXO 0x00000400UL /**< Receive overrun */