aboutsummaryrefslogtreecommitdiff
path: root/sys/dev/ep
diff options
context:
space:
mode:
authorDavid Greenman <dg@FreeBSD.org>1996-07-13 10:49:53 +0000
committerDavid Greenman <dg@FreeBSD.org>1996-07-13 10:49:53 +0000
commit4611b3971057149877bf06d0ac5ed977371ba4d7 (patch)
tree3ca1a523a09c21316e0d6e083cca74a6ce8ec404 /sys/dev/ep
parentc8ec0156eff7092936ad2fa3e28627be51f855db (diff)
downloadsrc-4611b3971057149877bf06d0ac5ed977371ba4d7.tar.gz
src-4611b3971057149877bf06d0ac5ed977371ba4d7.zip
Enable transmit complete interrupt...
(author's explaination): Bit 15 is the flag to request a transmit complete interrupt. The driver was apparently written to minimize interrupts, and if not for a 3-COM design quirk, everything would be just ducky. Prior to loading the outbound packet into the FIFO, the driver checks to see if there's enough space to contain the packet. If not, the driver requests a transmit-available interrupt when there is sufficient room. Unfortunately, the card is continuing to process the prior FIFO, and by the time the driver sets the threshold for a transmit available interrupt, the space is already available. When this occurs, the 3COM card ignores the interrupt request, and the driver is hung waiting for an interrupt that will never occur. There's probably a more elegant solution, but requesting the transmit complete interrupt was the easiest to implement. An alternative fix might be to check free FIFO space again, after requesting the transmit available interrupt, but I haven't bothered pursuing this. Since the patch, my 3C590 (PCI, same FIFO interface as 3C509) has been rock solid. Submitted by: mevans@candle.com (Mike Evans)
Notes
Notes: svn path=/head/; revision=17158
Diffstat (limited to 'sys/dev/ep')
-rw-r--r--sys/dev/ep/if_ep.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/sys/dev/ep/if_ep.c b/sys/dev/ep/if_ep.c
index 691034c8c639..4542c7b3d7fc 100644
--- a/sys/dev/ep/if_ep.c
+++ b/sys/dev/ep/if_ep.c
@@ -38,7 +38,7 @@
*/
/*
- * $Id: if_ep.c,v 1.48 1996/06/15 00:43:03 nate Exp $
+ * $Id: if_ep.c,v 1.49 1996/06/18 01:22:21 bde Exp $
*
* Promiscuous mode added and interrupt logic slightly changed
* to reduce the number of adapter failures. Transceiver select
@@ -964,7 +964,7 @@ startagain:
}
IF_DEQUEUE(&ifp->if_snd, m);
- outw(BASE + EP_W1_TX_PIO_WR_1, len);
+ outw(BASE + EP_W1_TX_PIO_WR_1, len | 0x8000); /* XXX */
outw(BASE + EP_W1_TX_PIO_WR_1, 0x0); /* Second dword meaningless */
/* compute the Tx start threshold for this packet */