fCCB
{ return fCCB->data_length > 0; }
scsi_ccb * CCB() { return fCCB; }
scsi_ccb * fCCB;
fCCB->subsys_status = SCSI_REQ_CMP_ERR;
fCCB->device_status = SCSI_STATUS_CHECK_CONDITION;
if ((fCCB->flags & SCSI_DIS_AUTOSENSE) == 0) {
size_t senseLength = MIN(sizeof(fCCB->sense), sizeof(sense));
memcpy(fCCB->sense, &sense, senseLength);
fCCB->sense_resid = SCSI_MAX_SENSE_SIZE - senseLength;
fCCB->subsys_status |= SCSI_AUTOSNS_VALID;
fCCB->subsys_status = fStatus;
gSCSIModule->resubmit(fCCB);
gSCSIModule->finished(fCCB, 1);
scsi_cmd_request_sense *command = (scsi_cmd_request_sense *)fCCB->cdb;
copy_sg_data(fCCB, 0, command->allocation_length, &sense, sizeof(sense),
fCCB->data_resid = fCCB->data_length - MIN(MIN(sizeof(sense),
command->allocation_length), fCCB->data_length);
fSGElementsLeft = fCCB->sg_count;
fCurrentSGElement = fCCB->sg_list;
fCCB->data_resid = fCCB->data_length;
fCCB = ccb;
fCCB->device_status = SCSI_STATUS_GOOD;
return _FillGPARange(fCCB->sg_list, fCCB->sg_count, fCCB->data_length);
if (fCCB->data_length > HV_SCSI_MAX_BUFFER_SIZE)
if ((fCCB->flags & SCSI_DIR_MASK) == SCSI_DIR_OUT) {
for (uint32 i = 0; i < fCCB->sg_count; i++) {
vm_memcpy_from_physical(bounceBufferPtr, fCCB->sg_list[i].address,
fCCB->sg_list[i].size, false);
bounceBufferPtr += fCCB->sg_list[i].size;
entry.size = fCCB->data_length;
return _FillGPARange(&entry, 1, fCCB->data_length);
if (fCCB != NULL) {
fCCB->subsys_status = status;
if (fCCB->data_length == 0)
fCCB->data_resid = 0;
fCCB->data_resid = fCCB->data_length - fMessage.request.data_length;
fCCB->data_resid);
for (uint32 i = 0; i < fCCB->sg_count; i++) {
vm_memcpy_to_physical(fCCB->sg_list[i].address, bounceBufferPtr,
fCCB->sg_list[i].size, false);
bounceBufferPtr += fCCB->sg_list[i].size;
fCCB->subsys_status = fMessage.request.srb_status;
fCCB->device_status = fMessage.request.scsi_status;
&& (fCCB->flags & SCSI_DIS_AUTOSENSE) == 0) {
uint32 senseLength = min_c(sizeof(fCCB->sense),
memcpy(fCCB->sense, fMessage.request.sense, senseLength);
fCCB->sense_resid = sizeof(fCCB->sense) - senseLength;
gSCSI->finished(fCCB, 1);
fCCB = NULL;
if (fCCB == NULL)
uint32 flags = fCCB->flags & SCSI_DIR_MASK;
if (fCCB->sg_count == 0)
if (fCCB->sg_count < 2)
return _FillGPARange(fCCB->sg_list, fCCB->sg_count, fCCB->data_length);
for (uint16 i = 0; i < fCCB->sg_count; i++) {
phys_addr_t offset = fCCB->sg_list[i].address & HV_PAGE_MASK;
phys_size_t size = fCCB->sg_list[i].size;
} else if (i == fCCB->sg_count - 1) {
void SetCCB(scsi_ccb* ccb) { fCCB = ccb; }
scsi_ccb* GetCCB() { return fCCB; }
scsi_ccb* fCCB;
{ return fCCB->data_length > 0; }
scsi_ccb* CCB() { return fCCB; }
scsi_ccb* fCCB;
fCCB->data_resid = fResponse->resid;
fCCB->subsys_status = fStatus;
if (fCCB->cdb[0] == SCSI_OP_INQUIRY) {
fCCB->subsys_status = SCSI_REQ_CMP_ERR;
fCCB->device_status = SCSI_STATUS_CHECK_CONDITION;
if ((fCCB->flags & SCSI_DIS_AUTOSENSE) == 0) {
size_t senseLength = min_c(sizeof(fCCB->sense),
memcpy(fCCB->sense, fResponse->sense, senseLength);
fCCB->sense_resid = sizeof(fCCB->sense) - senseLength;
fCCB->subsys_status |= SCSI_AUTOSNS_VALID;
scsi_ccb *ccb = fCCB;
scsi_ccb *ccb = fCCB;
scsi_cmd_request_sense *command = (scsi_cmd_request_sense *)fCCB->cdb;
copy_sg_data(fCCB, 0, command->allocation_length, fResponse->sense,
fCCB->data_resid = fCCB->data_length - min_c(min_c(fResponse->sense_len,
command->allocation_length), fCCB->data_length);
fRequest->tag = (addr_t)fCCB;
fRequest->lun[1] = fCCB->target_id;
fRequest->lun[3] = fCCB->target_lun & 0xff;
memcpy(fRequest->cdb, fCCB->cdb, min_c(fCCB->cdb_length,
min_c(sizeof(fRequest->cdb), sizeof(fCCB->cdb))));
memcpy(entries + 1, fCCB->sg_list, fCCB->sg_count
memcpy(entries + outCount + 1, fCCB->sg_list, fCCB->sg_count
fCCB = ccb;
fCCB->device_status = SCSI_STATUS_GOOD;