if ((quirks & SDEV_NOTAGS) == 0 ||
if ((quirks & SDEV_NOTAGS) != 0 ||
ahd_action(struct scsi_xfer *xs){	struct	ahd_softc *ahd;	struct scb *scb;	struct hardware_scb *hscb;	u_int	target_id;	u_int	our_id;	int	s;	int	dontqueue = 0;	struct	ahd_initiator_tinfo *tinfo;	struct	ahd_tmode_tstate *tstate;	u_int	col_idx;	u_int16_t quirks;	SC_DEBUG(xs->sc_link, SDEV_DB3, ("ahd_action\n"));	ahd = (struct ahd_softc *)xs->sc_link->adapter_softc;	/* determine safety of software queueing */	dontqueue = xs->flags & SCSI_POLL;	target_id = xs->sc_link->target;	our_id = SCSI_SCSI_ID(ahd, xs->sc_link);		if ((ahd->flags & AHD_INITIATORROLE) == 0) {		xs->error = XS_DRIVER_STUFFUP;		xs->flags |= ITSDONE;		scsi_done(xs);		return (COMPLETE);		/* return 	ccb->ccb_h.status = CAM_PROVIDE_FAIL; */	}	/*	 * get an scb to use.	 */	ahd_lock(ahd, &s);	tinfo = ahd_fetch_transinfo(ahd, 'A', our_id, target_id, &tstate);	quirks = xs->sc_link->quirks;	if ((quirks & SDEV_NOTAGS) == 0 || 	    (tinfo->curr.ppr_options & MSG_EXT_PPR_PROT_IUS) != 0)		col_idx = AHD_NEVER_COL_IDX;	else		col_idx = AHD_BUILD_COL_IDX(target_id, xs->sc_link->lun);	if ((scb = ahd_get_scb(ahd, col_idx)) == NULL) {		ahd->flags |= AHD_RESOURCE_SHORTAGE;		ahd_unlock(ahd, &s);		xs->error = XS_DRIVER_STUFFUP;		return (TRY_AGAIN_LATER);	}	ahd_unlock(ahd, &s);			hscb = scb->hscb;			SC_DEBUG(xs->sc_link, SDEV_DB3, ("start scb(%p)\n", scb));	scb->xs = xs;	timeout_set(&xs->stimeout, ahd_timeout, scb);	/*	 * Put all the arguments for the xfer in the scb	 */	hscb->control = 0;	hscb->scsiid = BUILD_SCSIID(ahd, xs->sc_link, target_id, our_id);	hscb->lun = xs->sc_link->lun;	if (xs->xs_control & XS_CTL_RESET) {		hscb->cdb_len = 0;		scb->flags |= SCB_DEVICE_RESET;		hscb->control |= MK_MESSAGE;		hscb->task_management = SIU_TASKMGMT_LUN_RESET;		return (ahd_execute_scb(scb, NULL, 0));	} else {		hscb->task_management = 0;		return (ahd_setup_data(ahd, xs, scb));	}}