int tape_close(struct open_file *f) { struct saioreq *si; #ifdef DEBUG printf("tape_close: calling prom_iclose\n"); #endif si = f->f_devdata; prom_iclose(si); f->f_devdata = NULL; return 0; }
void netif_fini(struct devdata *dd) { struct saioreq *si; si = &dd->dd_si; #ifdef NETIF_DEBUG if (debug) printf("netif_fini: calling prom_iclose\n"); #endif prom_iclose(si); /* Dellocate the transmit/receive buffers. */ if (dd->rbuf) { dvma_free(dd->rbuf, dd->rbuf_len); dd->rbuf = NULL; } if (dd->tbuf) { dvma_free(dd->tbuf, dd->tbuf_len); dd->tbuf = NULL; } }
/* * Open the PROM device. * Return netif ptr on success. */ struct devdata * netif_init(void *aux) { struct devdata *dd = &netif_devdata; struct saioreq *si; struct bootparam *bp; int error; /* * Setup our part of the saioreq. * (determines what gets opened) */ si = &dd->dd_si; memset(si, 0, sizeof(*si)); bp = *romVectorPtr->bootParam; si->si_boottab = bp->bootDevice; si->si_ctlr = bp->ctlrNum; si->si_unit = bp->unitNum; si->si_boff = bp->partNum; #ifdef NETIF_DEBUG if (debug) printf("netif_init: calling prom_iopen\n"); #endif /* * Note: Sun PROMs will do RARP on open, but does not tell * you the IP address it gets, so it is just noise to us... */ if ((error = prom_iopen(si)) != 0) { printf("netif_init: prom_iopen, error=%d\n", error); return (NULL); } if (si->si_sif == NULL) { printf("netif_init: not a network device\n"); prom_iclose(si); return (NULL); } /* Allocate the transmit/receive buffers. */ if (dd->rbuf == NULL) { dd->rbuf_len = PKT_BUF_SIZE; dd->rbuf = dvma_alloc(dd->rbuf_len); } if (dd->tbuf == NULL) { dd->tbuf_len = PKT_BUF_SIZE; dd->tbuf = dvma_alloc(dd->tbuf_len); } if ((dd->rbuf == NULL) || (dd->tbuf == NULL)) panic("netif_init: malloc failed"); #ifdef NETIF_DEBUG if (debug) printf("netif_init: rbuf=0x%x, tbuf=0x%x\n", dd->rbuf, dd->tbuf); #endif /* Record our ethernet address. */ netif_getether(si->si_sif, dd->dd_myea); dd->dd_opens = 0; return(dd); }