SCCS-vsn: sys/vax/if/if_dmc.c 4.23
-/* if_dmc.c 4.22 82/12/17 */
+/* if_dmc.c 4.23 83/02/20 */
#include "dmc.h"
#if NDMC > 0
#define printd if(dmcdebug)printf
#include "dmc.h"
#if NDMC > 0
#define printd if(dmcdebug)printf
/*
* DMC11 device driver, internet version
*
/*
* DMC11 device driver, internet version
*
#include "../vaxuba/ubareg.h"
#include "../vaxuba/ubavar.h"
#include "../vaxuba/ubareg.h"
#include "../vaxuba/ubavar.h"
+#ifndef DMC_USEMAINT
+#define DMC_USEMAINT 1 /* use maintenance mode */
+#endif
+
/*
* Driver information for auto-configuration stuff.
*/
/*
* Driver information for auto-configuration stuff.
*/
base = sc->sc_ubinfo & 0x3ffff;
printd(" base 0x%x\n", base);
dmcload(sc, DMC_BASEI, base, (base>>2)&DMC_XMEM);
base = sc->sc_ubinfo & 0x3ffff;
printd(" base 0x%x\n", base);
dmcload(sc, DMC_BASEI, base, (base>>2)&DMC_XMEM);
- dmcload(sc, DMC_CNTLI, 0, 0);
+ dmcload(sc, DMC_CNTLI, 0, DMC_USEMAINT ? DMC_MAINT : 0);
base = sc->sc_ifuba.ifu_r.ifrw_info & 0x3ffff;
dmcload(sc, DMC_READ, base, ((base>>2)&DMC_XMEM)|DMCMTU);
printd(" first read queued, addr 0x%x\n", base);
base = sc->sc_ifuba.ifu_r.ifrw_info & 0x3ffff;
dmcload(sc, DMC_READ, base, ((base>>2)&DMC_XMEM)|DMCMTU);
printd(" first read queued, addr 0x%x\n", base);
while (addr->bsel0&DMC_RDYI)
;
if (sc->sc_que.c_cc == 0)
while (addr->bsel0&DMC_RDYI)
;
if (sc->sc_que.c_cc == 0)
addr->bsel0 = getc(&sc->sc_que);
n = RDYSCAN;
while (n-- && (addr->bsel0&DMC_RDYI) == 0)
addr->bsel0 = getc(&sc->sc_que);
n = RDYSCAN;
while (n-- && (addr->bsel0&DMC_RDYI) == 0)
}
if (sc->sc_que.c_cc)
addr->bsel0 |= DMC_IEI;
}
if (sc->sc_que.c_cc)
addr->bsel0 |= DMC_IEI;
struct dmcdevice *addr;
struct mbuf *m;
register struct ifqueue *inq;
struct dmcdevice *addr;
struct mbuf *m;
register struct ifqueue *inq;
+ int arg, arg2, cmd, len;
addr = (struct dmcdevice *)ui->ui_addr;
addr = (struct dmcdevice *)ui->ui_addr;
+ cmd = addr->bsel2 & 0xff;
+ if ((cmd & DMC_RDYO) == 0)
+ return;
+ arg2 = addr->sel4;
addr->bsel2 &= ~DMC_RDYO;
sc = &dmc_softc[unit];
printd("dmcxint\n");
addr->bsel2 &= ~DMC_RDYO;
sc = &dmc_softc[unit];
printd("dmcxint\n");