+ if ((ifp->if_flags & IFF_RUNNING) == 0) {
+ if ((sc->sc_flag&DMCBMAPPED) == 0) {
+ sc->sc_ubinfo = uballoc(ui->ui_ubanum,
+ (caddr_t)&dmc_base[unit],
+ sizeof (struct dmc_base), 0);
+ sc->sc_flag |= DMCBMAPPED;
+ }
+ if (if_ubainit(&sc->sc_ifuba, ui->ui_ubanum, 0,
+ (int)btoc(DMCMTU)) == 0) {
+ printf("dmc%d: can't initialize\n", unit);
+ ifp->if_flags &= ~IFF_UP;
+ return;
+ }
+ addr = (struct dmcdevice *)ui->ui_addr;
+ addr->bsel2 |= DMC_IEO;
+ 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, 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);
+ ifp->if_flags |= IFF_UP|IFF_RUNNING;