sc->sc_link.openings = 4;
sc->sc_link.openings = 1;
btattach(parent, self, aux)	struct device *parent, *self;	void *aux;{	struct isa_attach_args *ia = aux;	struct bt_softc *sc = (void *)self;	struct bt_ccb *ccb;	struct bt_buf *buf;	u_int bouncearea;	u_int bouncebase;	u_int bouncesize;	if (bt_find(ia, sc) != 0)		panic("btattach: bt_find of %s failed", self->dv_xname);	sc->sc_iobase = ia->ia_iobase;	/*	 * create mbox area	 */	if (cputype == DESKSTATION_TYNE) {		bouncebase = TYNE_V_BOUNCE;		bouncesize = TYNE_S_BOUNCE;	} else {		bouncesize = TYNE_S_BOUNCE; /* Good enough? XXX */		bouncebase = (u_int) malloc( bouncesize, M_DEVBUF, M_NOWAIT);    }	bouncearea = bouncebase + sizeof(struct bt_mbx);	sc->sc_mbx = (struct bt_mbx *)bouncebase;	bt_inquire_setup_information(sc);	bt_init(sc);	TAILQ_INIT(&sc->sc_free_ccb);	TAILQ_INIT(&sc->sc_free_buf);	TAILQ_INIT(&sc->sc_waiting_ccb);	/*	 * fill up with ccb's	 */	while (sc->sc_numccbs < BT_CCB_MAX) {		ccb = (struct bt_ccb *)bouncearea;		bouncearea +=  sizeof(struct bt_ccb);		bt_init_ccb(sc, ccb);		TAILQ_INSERT_HEAD(&sc->sc_free_ccb, ccb, chain);		sc->sc_numccbs++;	}	/*	 * fill up with bufs's	 */	while ((bouncearea + sizeof(struct bt_buf)) < bouncebase + bouncesize) {		buf = (struct bt_buf *)bouncearea;		bouncearea +=  sizeof(struct bt_buf);		TAILQ_INSERT_HEAD(&sc->sc_free_buf, buf, chain);	}	/*	 * fill in the prototype scsi_link.	 */	sc->sc_link.adapter_softc = sc;	sc->sc_link.adapter_target = sc->sc_scsi_dev;	sc->sc_link.adapter = &bt_switch;	sc->sc_link.device = &bt_dev;	sc->sc_link.openings = 4;#ifdef NEWCONFIG	isa_establish(&sc->sc_id, &sc->sc_dev);#endif	sc->sc_ih = isa_intr_establish(ia->ia_ic, sc->sc_irq, IST_EDGE,	    IPL_BIO, btintr, sc, sc->sc_dev.dv_xname);	/*	 * ask the adapter what subunits are present	 */	config_found(self, &sc->sc_link, btprint);}