siop_sdtr_msg(siop_cmd, 0, sc->min_st_sync, sc->maxoff);
siop_sdtr_msg(siop_cmd, 0, sc->st_minsync, (sc->maxoff > 31) ? 31 : sc->maxoff);
siop_wdtr_neg(siop_cmd)	struct siop_cmd *siop_cmd;{	struct siop_softc *sc = siop_cmd->siop_sc;	struct siop_target *siop_target = siop_cmd->siop_target;	int target = siop_cmd->xs->sc_link->target;	struct siop_xfer_common *tables = &siop_cmd->siop_xfer->tables;	/* revert to narrow async until told otherwise */	sc->targets[target]->id    &= 0x07ff0000; /* Keep SCNTL3.CCF and id */	sc->targets[target]->flags &= ~(TARF_ISWIDE | TARF_ISDT | TARF_ISQAS | TARF_ISIUS);	tables->id = htole32(sc->targets[target]->id);		bus_space_write_1(sc->sc_rt, sc->sc_rh, SIOP_SCNTL3,	    (sc->targets[target]->id >> 24) & 0xff);	bus_space_write_1(sc->sc_rt, sc->sc_rh, SIOP_SXFER,  0);	if (sc->features & SF_CHIP_C10)		bus_space_write_1(sc->sc_rt, sc->sc_rh, SIOP_SCNTL4, 0);	if (siop_target->status == TARST_WIDE_NEG) {		/* we initiated wide negotiation */		switch (tables->msg_in[3]) {		case MSG_EXT_WDTR_BUS_8_BIT:			siop_target->flags &= ~TARF_ISWIDE;			sc->targets[target]->id &= ~(SCNTL3_EWS << 24);			break;		case MSG_EXT_WDTR_BUS_16_BIT:			if (siop_target->flags & TARF_WIDE) {				siop_target->flags |= TARF_ISWIDE;				sc->targets[target]->id |= (SCNTL3_EWS << 24);				break;			}		/* FALLTHROUGH */		default:			/* 			 * We got more than we can handle, which shouldn't			 * happen. Reject, and stay async.			 */			siop_target->flags &= ~TARF_ISWIDE;			siop_target->status = TARST_OK;			printf("%s: rejecting invalid wide negotiation from "			    "target %d (%d)\n", sc->sc_dev.dv_xname, target,			    tables->msg_in[3]);			siop_print_info(sc, target);			tables->t_msgout.count= htole32(1);			tables->msg_out[0] = MSG_MESSAGE_REJECT;			return SIOP_NEG_MSGOUT;		}		tables->id = htole32(sc->targets[target]->id);		bus_space_write_1(sc->sc_rt, sc->sc_rh,		    SIOP_SCNTL3,		    (sc->targets[target]->id >> 24) & 0xff);		/* we now need to do sync */		if (siop_target->flags & TARF_SYNC) {			siop_target->status = TARST_SYNC_NEG;			siop_sdtr_msg(siop_cmd, 0, sc->min_st_sync, sc->maxoff);			return SIOP_NEG_MSGOUT;		} else {			siop_target->status = TARST_OK;			siop_print_info(sc, target);			return SIOP_NEG_ACK;		}	} else {		/* target initiated wide negotiation */		if (tables->msg_in[3] >= MSG_EXT_WDTR_BUS_16_BIT		    && (siop_target->flags & TARF_WIDE)) {			siop_target->flags |= TARF_ISWIDE;			sc->targets[target]->id |= SCNTL3_EWS << 24;		} else {			siop_target->flags &= ~TARF_ISWIDE;			sc->targets[target]->id &= ~(SCNTL3_EWS << 24);		}		tables->id = htole32(sc->targets[target]->id);		bus_space_write_1(sc->sc_rt, sc->sc_rh, SIOP_SCNTL3,		    (sc->targets[target]->id >> 24) & 0xff);		/*		 * Don't schedule a sync neg, target should initiate it.		 */		if (siop_target->status != TARST_PROBING) {			siop_target->status = TARST_OK;			siop_print_info(sc, target);		}		siop_wdtr_msg(siop_cmd, 0, (siop_target->flags & TARF_ISWIDE) ?		    MSG_EXT_WDTR_BUS_16_BIT : MSG_EXT_WDTR_BUS_8_BIT);		return SIOP_NEG_MSGOUT;	}}