aboutsummaryrefslogtreecommitdiff
path: root/src/drivers
diff options
context:
space:
mode:
authorMichael Brown <mcb30@ipxe.org>2012-10-24 11:21:34 -0700
committerMichael Brown <mcb30@ipxe.org>2012-10-24 11:21:34 -0700
commitdace457bafd839eeabbf18a2a34c1005ccab4cc0 (patch)
treeddc374ffd39258168bc357e473911a92a4bbb8d7 /src/drivers
parent7cf6c6bfedb9cda38bd1ea4a30035527cb5195d5 (diff)
downloadipxe-dace457bafd839eeabbf18a2a34c1005ccab4cc0.zip
ipxe-dace457bafd839eeabbf18a2a34c1005ccab4cc0.tar.gz
ipxe-dace457bafd839eeabbf18a2a34c1005ccab4cc0.tar.bz2
[intel] Report receive overruns via network device errors
Signed-off-by: Michael Brown <mcb30@ipxe.org>
Diffstat (limited to 'src/drivers')
-rw-r--r--src/drivers/net/intel.c6
-rw-r--r--src/drivers/net/intel.h1
2 files changed, 6 insertions, 1 deletions
diff --git a/src/drivers/net/intel.c b/src/drivers/net/intel.c
index 353fc97..0811ed9 100644
--- a/src/drivers/net/intel.c
+++ b/src/drivers/net/intel.c
@@ -699,10 +699,14 @@ static void intel_poll ( struct net_device *netdev ) {
if ( icr & INTEL_IRQ_TXDW )
intel_poll_tx ( netdev );
- /* Poll for RX completionsm, if applicable */
+ /* Poll for RX completions, if applicable */
if ( icr & INTEL_IRQ_RXT0 )
intel_poll_rx ( netdev );
+ /* Report receive overruns */
+ if ( icr & INTEL_IRQ_RXO )
+ netdev_rx_err ( netdev, NULL, -ENOBUFS );
+
/* Check link state, if applicable */
if ( icr & INTEL_IRQ_LSC )
intel_check_link ( netdev );
diff --git a/src/drivers/net/intel.h b/src/drivers/net/intel.h
index b38a713..e9e9052 100644
--- a/src/drivers/net/intel.h
+++ b/src/drivers/net/intel.h
@@ -93,6 +93,7 @@ enum intel_descriptor_status {
#define INTEL_IRQ_TXDW 0x00000001UL /**< Transmit descriptor done */
#define INTEL_IRQ_LSC 0x00000004UL /**< Link status change */
#define INTEL_IRQ_RXT0 0x00000080UL /**< Receive timer */
+#define INTEL_IRQ_RXO 0x00000400UL /**< Receive overrun */
/** Interrupt Mask Set/Read Register */
#define INTEL_IMS 0x000d0UL