aac_start(ccb);  xs->error = XS_NOERROR; xs->resid = 0; return (1);
if (aac_start(ccb) == 0) { xs->error = XS_NOERROR; xs->resid = 0; return (1); } return (0);
aac_exec_ccb(ccb)	struct aac_ccb *ccb;{	struct scsi_xfer *xs = ccb->ac_xs;	struct scsi_link *link = xs->sc_link;	u_int8_t target = link->target;	int i;	struct aac_fib *fib;	struct aac_blockread *br;	struct aac_blockwrite *bw;	bus_dmamap_t xfer;	AAC_DPRINTF(AAC_D_CMD, ("aac_exec_ccb(%p, %p) ", xs, ccb));	/* build the FIB */	fib = ccb->ac_fib;	fib->Header.XferState = AAC_FIBSTATE_HOSTOWNED |	    AAC_FIBSTATE_INITIALISED | AAC_FIBSTATE_FROMHOST |	    AAC_FIBSTATE_REXPECTED | AAC_FIBSTATE_NORM;	fib->Header.Command = ContainerCommand;	fib->Header.Size = sizeof(struct aac_fib_header);	switch (xs->cmd->opcode) {	case PREVENT_ALLOW:	case SYNCHRONIZE_CACHE:		if (xs->cmd->opcode == PREVENT_ALLOW) {			/* XXX PREVENT_ALLOW support goes here */		} else {			AAC_DPRINTF(AAC_D_CMD,			    ("SYNCHRONIZE CACHE tgt %d ", target));		}		break;	case WRITE_COMMAND:	case WRITE_BIG:		bw = (struct aac_blockwrite *)&fib->data[0];		bw->Command = VM_CtBlockWrite;		bw->ContainerId = target;		bw->BlockNumber = ccb->ac_blockno;		bw->ByteCount = ccb->ac_blockcnt * DEV_BSIZE;		bw->Stable = CUNSTABLE;	/* XXX what's appropriate here? */		fib->Header.Size += sizeof(struct aac_blockwrite);		ccb->ac_sgtable = &bw->SgMap;		break;	case READ_COMMAND:	case READ_BIG:		br = (struct aac_blockread *)&fib->data[0];		br->Command = VM_CtBlockRead;		br->ContainerId = target;		br->BlockNumber = ccb->ac_blockno;		br->ByteCount = ccb->ac_blockcnt * DEV_BSIZE;		fib->Header.Size += sizeof(struct aac_blockread);		ccb->ac_sgtable = &br->SgMap;		break;	}	if (xs->cmd->opcode != PREVENT_ALLOW &&	    xs->cmd->opcode != SYNCHRONIZE_CACHE) {		xfer = ccb->ac_dmamap_xfer;		ccb->ac_sgtable->SgCount = xfer->dm_nsegs;		for (i = 0; i < xfer->dm_nsegs; i++) {			ccb->ac_sgtable->SgEntry[i].SgAddress =			    xfer->dm_segs[i].ds_addr;			ccb->ac_sgtable->SgEntry[i].SgByteCount =			    xfer->dm_segs[i].ds_len;			AAC_DPRINTF(AAC_D_IO,			    ("#%d va %p pa %p len %x\n", i, buf,			    xfer->dm_segs[i].ds_addr,			    xfer->dm_segs[i].ds_len));		}		/* update the FIB size for the s/g count */		fib->Header.Size += xfer->dm_nsegs *		    sizeof(struct aac_sg_entry);	}	aac_start(ccb);	xs->error = XS_NOERROR;	xs->resid = 0;	return (1);}