Lines Matching refs:cmd

190 int scsi_bus_parse_cdb(SCSIDevice *dev, SCSICommand *cmd, uint8_t *buf,  in scsi_bus_parse_cdb()  argument
196 assert(cmd->len == 0); in scsi_bus_parse_cdb()
197 rc = scsi_req_parse_cdb(dev, cmd, buf, buf_len); in scsi_bus_parse_cdb()
199 rc = bus->info->parse_cdb(dev, cmd, buf, buf_len, hba_private); in scsi_bus_parse_cdb()
244 switch (req->cmd.mode) { in scsi_dma_restart_req()
552 if (r->req.cmd.xfer < 16) { in scsi_target_emulate_report_luns()
555 if (r->req.cmd.buf[2] > 2) { in scsi_target_emulate_report_luns()
589 r->len = MIN(len, r->req.cmd.xfer & ~7); in scsi_target_emulate_report_luns()
610 if (r->req.cmd.buf[1] & 0x2) { in scsi_target_emulate_inquiry()
615 if (r->req.cmd.buf[1] & 0x1) { in scsi_target_emulate_inquiry()
617 uint8_t page_code = r->req.cmd.buf[2]; in scsi_target_emulate_inquiry()
635 r->len = MIN(r->req.cmd.xfer, r->len); in scsi_target_emulate_inquiry()
640 if (r->req.cmd.buf[2] != 0) { in scsi_target_emulate_inquiry()
645 r->len = MIN(r->req.cmd.xfer, SCSI_INQUIRY_LEN); in scsi_target_emulate_inquiry()
673 int fixed_sense = (req->cmd.buf[1] & 1) == 0; in scsi_target_send_command()
697 r->len = scsi_build_sense_buf(r->buf, req->cmd.xfer, in scsi_target_send_command()
701 MIN(req->cmd.xfer, r->buf_len), in scsi_target_send_command()
814 SCSICommand cmd = { .len = 0 }; in scsi_req_new() local
844 ret = scsi_req_parse_cdb(d, &cmd, buf, buf_len); in scsi_req_new()
846 ret = sc->parse_cdb(d, &cmd, buf, buf_len, hba_private); in scsi_req_new()
854 assert(cmd.len != 0); in scsi_req_new()
856 cmd.mode, cmd.xfer); in scsi_req_new()
857 if (cmd.lba != -1) { in scsi_req_new()
859 cmd.lba); in scsi_req_new()
862 if (cmd.xfer > INT32_MAX) { in scsi_req_new()
871 req->cmd = cmd; in scsi_req_new()
872 req->residual = req->cmd.xfer; in scsi_req_new()
876 trace_scsi_inquiry(d->id, lun, tag, cmd.buf[1], cmd.buf[2]); in scsi_req_new()
977 rc = req->ops->send_command(req, req->cmd.buf); in scsi_req_enqueue()
1086 static int scsi_req_xfer(SCSICommand *cmd, SCSIDevice *dev, uint8_t *buf) in scsi_req_xfer() argument
1088 cmd->xfer = scsi_cdb_xfer(buf); in scsi_req_xfer()
1115 cmd->xfer = 0; in scsi_req_xfer()
1121 cmd->xfer = 0; in scsi_req_xfer()
1123 cmd->xfer = 1; in scsi_req_xfer()
1125 cmd->xfer *= dev->blocksize; in scsi_req_xfer()
1131 cmd->xfer = buf[1] & 1 ? 0 : dev->blocksize; in scsi_req_xfer()
1134 cmd->xfer = 8; in scsi_req_xfer()
1137 cmd->xfer = 6; in scsi_req_xfer()
1142 cmd->xfer = buf[10] | (buf[9] << 8); in scsi_req_xfer()
1144 cmd->xfer = buf[9] | (buf[8] << 8); in scsi_req_xfer()
1149 if (cmd->xfer == 0) { in scsi_req_xfer()
1150 cmd->xfer = 256; in scsi_req_xfer()
1159 cmd->xfer *= dev->blocksize; in scsi_req_xfer()
1164 if (cmd->xfer == 0) { in scsi_req_xfer()
1165 cmd->xfer = 256; in scsi_req_xfer()
1171 cmd->xfer *= dev->blocksize; in scsi_req_xfer()
1177 cmd->xfer = 12; in scsi_req_xfer()
1179 cmd->xfer = (buf[1] & 16) == 0 ? 0 : (buf[1] & 32 ? 8 : 4); in scsi_req_xfer()
1185 cmd->xfer = buf[4] | (buf[3] << 8); in scsi_req_xfer()
1191 cmd->xfer = buf[8] | (buf[7] << 8) | (buf[6] << 16); in scsi_req_xfer()
1194 cmd->xfer = ldl_be_p(&buf[5]) & 0xffffffffULL; in scsi_req_xfer()
1199 cmd->xfer = scsi_get_performance_length(buf[9] | (buf[8] << 8), in scsi_req_xfer()
1210 cmd->xfer = buf[9] | (buf[8] << 8); in scsi_req_xfer()
1216 cmd->xfer = 0; in scsi_req_xfer()
1218 cmd->xfer = ata_passthrough_12_xfer(dev, buf); in scsi_req_xfer()
1222 cmd->xfer = ata_passthrough_16_xfer(dev, buf); in scsi_req_xfer()
1228 static int scsi_req_stream_xfer(SCSICommand *cmd, SCSIDevice *dev, uint8_t *buf) in scsi_req_stream_xfer() argument
1234 cmd->xfer = 0; in scsi_req_stream_xfer()
1240 cmd->xfer = buf[4] | (buf[3] << 8) | (buf[2] << 16); in scsi_req_stream_xfer()
1242 cmd->xfer *= dev->blocksize; in scsi_req_stream_xfer()
1249 cmd->xfer = buf[14] | (buf[13] << 8) | (buf[12] << 16); in scsi_req_stream_xfer()
1251 cmd->xfer *= dev->blocksize; in scsi_req_stream_xfer()
1256 cmd->xfer = 0; in scsi_req_stream_xfer()
1259 cmd->xfer = buf[13] | (buf[12] << 8); in scsi_req_stream_xfer()
1265 cmd->xfer = 20; in scsi_req_stream_xfer()
1268 cmd->xfer = 32; in scsi_req_stream_xfer()
1271 cmd->xfer = buf[8] | (buf[7] << 8); in scsi_req_stream_xfer()
1279 cmd->xfer = buf[4] | (buf[3] << 8); in scsi_req_stream_xfer()
1283 return scsi_req_xfer(cmd, dev, buf); in scsi_req_stream_xfer()
1288 static int scsi_req_medium_changer_xfer(SCSICommand *cmd, SCSIDevice *dev, uint8_t *buf) in scsi_req_medium_changer_xfer() argument
1297 cmd->xfer = 0; in scsi_req_medium_changer_xfer()
1300 cmd->xfer = buf[9] | (buf[8] << 8) | (buf[7] << 16); in scsi_req_medium_changer_xfer()
1305 return scsi_req_xfer(cmd, dev, buf); in scsi_req_medium_changer_xfer()
1310 static int scsi_req_scanner_length(SCSICommand *cmd, SCSIDevice *dev, uint8_t *buf) in scsi_req_scanner_length() argument
1315 cmd->xfer = 0; in scsi_req_scanner_length()
1318 cmd->xfer = buf[4]; in scsi_req_scanner_length()
1324 cmd->xfer = buf[8] | (buf[7] << 8) | (buf[6] << 16); in scsi_req_scanner_length()
1328 return scsi_req_xfer(cmd, dev, buf); in scsi_req_scanner_length()
1334 static void scsi_cmd_xfer_mode(SCSICommand *cmd) in scsi_cmd_xfer_mode() argument
1336 if (!cmd->xfer) { in scsi_cmd_xfer_mode()
1337 cmd->mode = SCSI_XFER_NONE; in scsi_cmd_xfer_mode()
1340 switch (cmd->buf[0]) { in scsi_cmd_xfer_mode()
1384 cmd->mode = SCSI_XFER_TO_DEV; in scsi_cmd_xfer_mode()
1389 cmd->mode = (cmd->buf[2] & 0x8) ? in scsi_cmd_xfer_mode()
1393 cmd->mode = SCSI_XFER_FROM_DEV; in scsi_cmd_xfer_mode()
1398 int scsi_req_parse_cdb(SCSIDevice *dev, SCSICommand *cmd, uint8_t *buf, in scsi_req_parse_cdb() argument
1404 cmd->lba = -1; in scsi_req_parse_cdb()
1410 cmd->len = len; in scsi_req_parse_cdb()
1413 rc = scsi_req_stream_xfer(cmd, dev, buf); in scsi_req_parse_cdb()
1416 rc = scsi_req_medium_changer_xfer(cmd, dev, buf); in scsi_req_parse_cdb()
1419 rc = scsi_req_scanner_length(cmd, dev, buf); in scsi_req_parse_cdb()
1422 rc = scsi_req_xfer(cmd, dev, buf); in scsi_req_parse_cdb()
1429 memcpy(cmd->buf, buf, cmd->len); in scsi_req_parse_cdb()
1430 scsi_cmd_xfer_mode(cmd); in scsi_req_parse_cdb()
1431 cmd->lba = scsi_cmd_lba(cmd); in scsi_req_parse_cdb()
1480 if (req->cmd.mode == SCSI_XFER_TO_DEV) { in scsi_req_continue()
1498 assert(req->cmd.mode != SCSI_XFER_NONE); in scsi_req_data()
1512 if (req->cmd.mode == SCSI_XFER_FROM_DEV) { in scsi_req_data()
1530 scsi_command_name(req->cmd.buf[0])); in scsi_req_print()
1531 for (i = 1; i < req->cmd.len; i++) { in scsi_req_print()
1532 fprintf(fp, " 0x%02x", req->cmd.buf[i]); in scsi_req_print()
1534 switch (req->cmd.mode) { in scsi_req_print()
1539 fprintf(fp, " - from-dev len=%zd\n", req->cmd.xfer); in scsi_req_print()
1542 fprintf(fp, " - to-dev len=%zd\n", req->cmd.xfer); in scsi_req_print()
1828 qemu_put_buffer(f, req->cmd.buf, sizeof(req->cmd.buf)); in put_scsi_req()