summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTheo de Raadt <deraadt@cvs.openbsd.org>1998-10-20 23:31:07 +0000
committerTheo de Raadt <deraadt@cvs.openbsd.org>1998-10-20 23:31:07 +0000
commit9d2446138e1775917e00191055e258277dab9083 (patch)
tree3c8e7b27cbc75face0bfdcdcadaf21ed4bcb186a
parent7d69d9e8dcb71df541eacc102a39aa1266129906 (diff)
when transmitting we cannot totally fill the circular buffer (i.e.
we can't use up all of the remaining sc->txslot[chan].bfree free bytes) because that would cause the circular buffer read pointer to become equal to the write pointer, thus signaling 'empty buffer' to the hardware and stopping the transmitter. spotted and fixed by Kenjiro Cho <kjc@csl.sony.co.jp>
-rw-r--r--sys/dev/ic/midway.c11
1 files changed, 9 insertions, 2 deletions
diff --git a/sys/dev/ic/midway.c b/sys/dev/ic/midway.c
index 0eb366c7804..a8040898b3b 100644
--- a/sys/dev/ic/midway.c
+++ b/sys/dev/ic/midway.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: midway.c,v 1.21 1997/09/29 17:45:58 chuck Exp $ */
+/* $OpenBSD: midway.c,v 1.22 1998/10/20 23:31:06 deraadt Exp $ */
/* (sync'd to midway.c 1.68) */
/*
@@ -1861,7 +1861,14 @@ again:
goto dequeue_drop;
}
- if (launch.need > sc->txslot[chan].bfree) {
+ /*
+ * note: note that we cannot totally fill the circular buffer (i.e.
+ * we can't use up all of the remaining sc->txslot[chan].bfree free
+ * bytes) because that would cause the circular buffer read pointer
+ * to become equal to the write pointer, thus signaling 'empty buffer'
+ * to the hardware and stopping the transmitter.
+ */
+ if (launch.need >= sc->txslot[chan].bfree) {
EN_COUNT(sc->txoutspace);
#ifdef EN_DEBUG
printf("%s: tx%d: out of transmit space\n", sc->sc_dev.dv_xname, chan);