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()
543 if (r->req.cmd.xfer < 16) { in scsi_target_emulate_report_luns()
546 if (r->req.cmd.buf[2] > 2) { in scsi_target_emulate_report_luns()
580 r->len = MIN(len, r->req.cmd.xfer & ~7); in scsi_target_emulate_report_luns()
601 if (r->req.cmd.buf[1] & 0x2) { in scsi_target_emulate_inquiry()
606 if (r->req.cmd.buf[1] & 0x1) { in scsi_target_emulate_inquiry()
608 uint8_t page_code = r->req.cmd.buf[2]; in scsi_target_emulate_inquiry()
626 r->len = MIN(r->req.cmd.xfer, r->len); in scsi_target_emulate_inquiry()
631 if (r->req.cmd.buf[2] != 0) { in scsi_target_emulate_inquiry()
636 r->len = MIN(r->req.cmd.xfer, SCSI_INQUIRY_LEN); in scsi_target_emulate_inquiry()
664 int fixed_sense = (req->cmd.buf[1] & 1) == 0; in scsi_target_send_command()
688 r->len = scsi_build_sense_buf(r->buf, req->cmd.xfer, in scsi_target_send_command()
692 MIN(req->cmd.xfer, r->buf_len), in scsi_target_send_command()
805 SCSICommand cmd = { .len = 0 }; in scsi_req_new() local
835 ret = scsi_req_parse_cdb(d, &cmd, buf, buf_len); in scsi_req_new()
837 ret = sc->parse_cdb(d, &cmd, buf, buf_len, hba_private); in scsi_req_new()
845 assert(cmd.len != 0); in scsi_req_new()
847 cmd.mode, cmd.xfer); in scsi_req_new()
848 if (cmd.lba != -1) { in scsi_req_new()
850 cmd.lba); in scsi_req_new()
853 if (cmd.xfer > INT32_MAX) { in scsi_req_new()
862 req->cmd = cmd; in scsi_req_new()
863 req->residual = req->cmd.xfer; in scsi_req_new()
867 trace_scsi_inquiry(d->id, lun, tag, cmd.buf[1], cmd.buf[2]); in scsi_req_new()
968 rc = req->ops->send_command(req, req->cmd.buf); in scsi_req_enqueue()
1077 static int scsi_req_xfer(SCSICommand *cmd, SCSIDevice *dev, uint8_t *buf) in scsi_req_xfer() argument
1079 cmd->xfer = scsi_cdb_xfer(buf); in scsi_req_xfer()
1106 cmd->xfer = 0; in scsi_req_xfer()
1112 cmd->xfer = 0; in scsi_req_xfer()
1114 cmd->xfer = 1; in scsi_req_xfer()
1116 cmd->xfer *= dev->blocksize; in scsi_req_xfer()
1122 cmd->xfer = buf[1] & 1 ? 0 : dev->blocksize; in scsi_req_xfer()
1125 cmd->xfer = 8; in scsi_req_xfer()
1128 cmd->xfer = 6; in scsi_req_xfer()
1133 cmd->xfer = buf[10] | (buf[9] << 8); in scsi_req_xfer()
1135 cmd->xfer = buf[9] | (buf[8] << 8); in scsi_req_xfer()
1140 if (cmd->xfer == 0) { in scsi_req_xfer()
1141 cmd->xfer = 256; in scsi_req_xfer()
1150 cmd->xfer *= dev->blocksize; in scsi_req_xfer()
1155 if (cmd->xfer == 0) { in scsi_req_xfer()
1156 cmd->xfer = 256; in scsi_req_xfer()
1162 cmd->xfer *= dev->blocksize; in scsi_req_xfer()
1168 cmd->xfer = 12; in scsi_req_xfer()
1170 cmd->xfer = (buf[1] & 16) == 0 ? 0 : (buf[1] & 32 ? 8 : 4); in scsi_req_xfer()
1176 cmd->xfer = buf[4] | (buf[3] << 8); in scsi_req_xfer()
1182 cmd->xfer = buf[8] | (buf[7] << 8) | (buf[6] << 16); in scsi_req_xfer()
1185 cmd->xfer = ldl_be_p(&buf[5]) & 0xffffffffULL; in scsi_req_xfer()
1190 cmd->xfer = scsi_get_performance_length(buf[9] | (buf[8] << 8), in scsi_req_xfer()
1201 cmd->xfer = buf[9] | (buf[8] << 8); in scsi_req_xfer()
1207 cmd->xfer = 0; in scsi_req_xfer()
1209 cmd->xfer = ata_passthrough_12_xfer(dev, buf); in scsi_req_xfer()
1213 cmd->xfer = ata_passthrough_16_xfer(dev, buf); in scsi_req_xfer()
1219 static int scsi_req_stream_xfer(SCSICommand *cmd, SCSIDevice *dev, uint8_t *buf) in scsi_req_stream_xfer() argument
1225 cmd->xfer = 0; in scsi_req_stream_xfer()
1231 cmd->xfer = buf[4] | (buf[3] << 8) | (buf[2] << 16); in scsi_req_stream_xfer()
1233 cmd->xfer *= dev->blocksize; in scsi_req_stream_xfer()
1240 cmd->xfer = buf[14] | (buf[13] << 8) | (buf[12] << 16); in scsi_req_stream_xfer()
1242 cmd->xfer *= dev->blocksize; in scsi_req_stream_xfer()
1247 cmd->xfer = 0; in scsi_req_stream_xfer()
1250 cmd->xfer = buf[13] | (buf[12] << 8); in scsi_req_stream_xfer()
1256 cmd->xfer = 20; in scsi_req_stream_xfer()
1259 cmd->xfer = 32; in scsi_req_stream_xfer()
1262 cmd->xfer = buf[8] | (buf[7] << 8); in scsi_req_stream_xfer()
1270 cmd->xfer = buf[4] | (buf[3] << 8); in scsi_req_stream_xfer()
1274 return scsi_req_xfer(cmd, dev, buf); in scsi_req_stream_xfer()
1279 static int scsi_req_medium_changer_xfer(SCSICommand *cmd, SCSIDevice *dev, uint8_t *buf) in scsi_req_medium_changer_xfer() argument
1288 cmd->xfer = 0; in scsi_req_medium_changer_xfer()
1291 cmd->xfer = buf[9] | (buf[8] << 8) | (buf[7] << 16); in scsi_req_medium_changer_xfer()
1296 return scsi_req_xfer(cmd, dev, buf); in scsi_req_medium_changer_xfer()
1301 static int scsi_req_scanner_length(SCSICommand *cmd, SCSIDevice *dev, uint8_t *buf) in scsi_req_scanner_length() argument
1306 cmd->xfer = 0; in scsi_req_scanner_length()
1309 cmd->xfer = buf[4]; in scsi_req_scanner_length()
1315 cmd->xfer = buf[8] | (buf[7] << 8) | (buf[6] << 16); in scsi_req_scanner_length()
1319 return scsi_req_xfer(cmd, dev, buf); in scsi_req_scanner_length()
1325 static void scsi_cmd_xfer_mode(SCSICommand *cmd) in scsi_cmd_xfer_mode() argument
1327 if (!cmd->xfer) { in scsi_cmd_xfer_mode()
1328 cmd->mode = SCSI_XFER_NONE; in scsi_cmd_xfer_mode()
1331 switch (cmd->buf[0]) { in scsi_cmd_xfer_mode()
1375 cmd->mode = SCSI_XFER_TO_DEV; in scsi_cmd_xfer_mode()
1380 cmd->mode = (cmd->buf[2] & 0x8) ? in scsi_cmd_xfer_mode()
1384 cmd->mode = SCSI_XFER_FROM_DEV; in scsi_cmd_xfer_mode()
1389 int scsi_req_parse_cdb(SCSIDevice *dev, SCSICommand *cmd, uint8_t *buf, in scsi_req_parse_cdb() argument
1395 cmd->lba = -1; in scsi_req_parse_cdb()
1401 cmd->len = len; in scsi_req_parse_cdb()
1404 rc = scsi_req_stream_xfer(cmd, dev, buf); in scsi_req_parse_cdb()
1407 rc = scsi_req_medium_changer_xfer(cmd, dev, buf); in scsi_req_parse_cdb()
1410 rc = scsi_req_scanner_length(cmd, dev, buf); in scsi_req_parse_cdb()
1413 rc = scsi_req_xfer(cmd, dev, buf); in scsi_req_parse_cdb()
1420 memcpy(cmd->buf, buf, cmd->len); in scsi_req_parse_cdb()
1421 scsi_cmd_xfer_mode(cmd); in scsi_req_parse_cdb()
1422 cmd->lba = scsi_cmd_lba(cmd); in scsi_req_parse_cdb()
1471 if (req->cmd.mode == SCSI_XFER_TO_DEV) { in scsi_req_continue()
1489 assert(req->cmd.mode != SCSI_XFER_NONE); in scsi_req_data()
1503 if (req->cmd.mode == SCSI_XFER_FROM_DEV) { in scsi_req_data()
1521 scsi_command_name(req->cmd.buf[0])); in scsi_req_print()
1522 for (i = 1; i < req->cmd.len; i++) { in scsi_req_print()
1523 fprintf(fp, " 0x%02x", req->cmd.buf[i]); in scsi_req_print()
1525 switch (req->cmd.mode) { in scsi_req_print()
1530 fprintf(fp, " - from-dev len=%zd\n", req->cmd.xfer); in scsi_req_print()
1533 fprintf(fp, " - to-dev len=%zd\n", req->cmd.xfer); in scsi_req_print()
1819 qemu_put_buffer(f, req->cmd.buf, sizeof(req->cmd.buf)); in put_scsi_req()