Module Name: src
Committed By: thorpej
Date: Sat Sep 17 17:21:52 UTC 2022
Modified Files:
src/sys/dev/isa: if_iy.c
Log Message:
Eliminate use of IFF_OACTIVE.
To generate a diff of this commit:
cvs rdiff -u -r1.113 -r1.114 src/sys/dev/isa/if_iy.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sys/dev/isa/if_iy.c
diff -u src/sys/dev/isa/if_iy.c:1.113 src/sys/dev/isa/if_iy.c:1.114
--- src/sys/dev/isa/if_iy.c:1.113 Wed Jan 29 06:21:40 2020
+++ src/sys/dev/isa/if_iy.c Sat Sep 17 17:21:52 2022
@@ -1,4 +1,4 @@
-/* $NetBSD: if_iy.c,v 1.113 2020/01/29 06:21:40 thorpej Exp $ */
+/* $NetBSD: if_iy.c,v 1.114 2022/09/17 17:21:52 thorpej Exp $ */
/* #define IYDEBUG */
/* #define IYMEMDEBUG */
@@ -39,7 +39,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_iy.c,v 1.113 2020/01/29 06:21:40 thorpej Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_iy.c,v 1.114 2022/09/17 17:21:52 thorpej Exp $");
#include "opt_inet.h"
@@ -112,6 +112,8 @@ struct iy_softc {
int sram, tx_size, rx_size;
int tx_start, tx_end, tx_last;
+ bool tx_busy;
+
int rx_start;
int doing_mc_setup;
@@ -416,7 +418,8 @@ iystop(struct iy_softc *sc)
#endif
sc->tx_start = sc->tx_end = sc->rx_size;
sc->tx_last = 0;
- sc->sc_ethercom.ec_if.if_flags &= ~(IFF_RUNNING | IFF_OACTIVE);
+ sc->sc_ethercom.ec_if.if_flags &= ~IFF_RUNNING;
+ sc->tx_busy = false;
}
void
@@ -615,7 +618,7 @@ iyinit(struct iy_softc *sc)
bus_space_write_1(iot, ioh, 0, RCV_ENABLE_CMD);
ifp->if_flags |= IFF_RUNNING;
- ifp->if_flags &= ~IFF_OACTIVE;
+ sc->tx_busy = false;
}
void
@@ -639,7 +642,10 @@ iystart(struct ifnet *ifp)
#endif
sc = ifp->if_softc;
- if ((ifp->if_flags & (IFF_RUNNING | IFF_OACTIVE)) != IFF_RUNNING)
+ if ((ifp->if_flags & IFF_RUNNING) == 0)
+ return;
+
+ if (sc->tx_busy)
return;
iy_intr_tx(sc);
@@ -696,11 +702,11 @@ iystart(struct ifnet *ifp)
if ((len+pad+2*I595_XMT_HDRLEN) > avail) {
#ifdef IYDEBUG
- printf("%s: len = %d, avail = %d, setting OACTIVE\n",
+ printf("%s: len = %d, avail = %d, setting tx_busy\n",
device_xname(sc->sc_dev), len, avail);
#endif
/* mark interface as full ... */
- ifp->if_flags |= IFF_OACTIVE;
+ sc->tx_busy = true;
/* and wait for any transmission result */
bus_space_write_1(iot, ioh, 0, BANK_SEL(2));
@@ -970,7 +976,7 @@ iyintr(void *arg)
}
if (status & TX_INT) {
/* Tell feeders we may be able to accept more data... */
- ifp->if_flags &= ~IFF_OACTIVE;
+ sc->tx_busy = false;
/* and get more data. */
iystart(ifp);
bus_space_write_1(iot, ioh, STATUS_REG, TX_INT);
@@ -1147,7 +1153,7 @@ iy_intr_tx(struct iy_softc *sc)
sc->tx_start = txnext;
else
sc->tx_start = sc->tx_end;
- ifp->if_flags &= ~IFF_OACTIVE;
+ sc->tx_busy = false;
if (txstat2 & 0x0020)
if_statadd(ifp, if_collisions, 16);
@@ -1371,8 +1377,7 @@ iy_mc_setup(struct iy_softc *sc)
break;
}
sc->tx_start = sc->tx_end;
- ifp->if_flags &= ~IFF_OACTIVE;
-
+ sc->tx_busy = false;
}
static void
@@ -1412,9 +1417,9 @@ iy_mc_reset(struct iy_softc *sc)
ETHER_UNLOCK(ecp);
/* OK, we really need to do it now: */
#if 0
- if ((ifp->if_flags & (IFF_RUNNING | IFF_OACTIVE))
- != IFF_RUNNING) {
- ifp->if_flags |= IFF_OACTIVE;
+ if ((ifp->if_flags & IFF_RUNNING) == 0 || sc->tx_busy) {
+ /* XXX This logic is b0rk3n. */
+ sc->tx_busy = true;
sc->want_mc_setup = 1;
return;
}