diff --git a/hw/scsi-bus.c b/hw/scsi-bus.c index 6f0d03958dcf6cf025e05b7c554fce4ebd797df6..d6fd19a78b5f601ea18d6b7295e2a25c721e552f 100644 --- a/hw/scsi-bus.c +++ b/hw/scsi-bus.c @@ -977,7 +977,7 @@ static const char *scsi_command_name(uint8_t cmd) [ LOCATE_16 ] = "LOCATE_16", [ WRITE_SAME_16 ] = "WRITE_SAME_16", [ ERASE_16 ] = "ERASE_16", - [ SERVICE_ACTION_IN ] = "SERVICE_ACTION_IN", + [ SERVICE_ACTION_IN_16 ] = "SERVICE_ACTION_IN_16", [ WRITE_LONG_16 ] = "WRITE_LONG_16", [ REPORT_LUNS ] = "REPORT_LUNS", [ BLANK ] = "BLANK", @@ -987,6 +987,7 @@ static const char *scsi_command_name(uint8_t cmd) [ LOAD_UNLOAD ] = "LOAD_UNLOAD", [ READ_12 ] = "READ_12", [ WRITE_12 ] = "WRITE_12", + [ SERVICE_ACTION_IN_12 ] = "SERVICE_ACTION_IN_12", [ WRITE_VERIFY_12 ] = "WRITE_VERIFY_12", [ VERIFY_12 ] = "VERIFY_12", [ SEARCH_HIGH_12 ] = "SEARCH_HIGH_12", diff --git a/hw/scsi-defs.h b/hw/scsi-defs.h index ea288fab07b804d87704864bc5ff6d74e5760af5..bfe93922d41ce482f42b811d8e9f98f78999ac9a 100644 --- a/hw/scsi-defs.h +++ b/hw/scsi-defs.h @@ -102,7 +102,7 @@ #define LOCATE_16 0x92 #define WRITE_SAME_16 0x93 #define ERASE_16 0x93 -#define SERVICE_ACTION_IN 0x9e +#define SERVICE_ACTION_IN_16 0x9e #define WRITE_LONG_16 0x9f #define REPORT_LUNS 0xa0 #define BLANK 0xa1 @@ -112,6 +112,7 @@ #define LOAD_UNLOAD 0xa6 #define READ_12 0xa8 #define WRITE_12 0xaa +#define SERVICE_ACTION_IN_12 0xab #define WRITE_VERIFY_12 0xae #define VERIFY_12 0xaf #define SEARCH_HIGH_12 0xb0 @@ -122,6 +123,11 @@ #define READ_DEFECT_DATA_12 0xb7 #define SET_CD_SPEED 0xbb +/* + * SERVICE ACTION IN subcodes + */ +#define SAI_READ_CAPACITY_16 0x10 + /* * SAM Status codes */ diff --git a/hw/scsi-disk.c b/hw/scsi-disk.c index c23c2b8429b05beb6784957b302a53b4325af917..ead4163f743c2acdfb3a983f53d1035b3ee4ca1d 100644 --- a/hw/scsi-disk.c +++ b/hw/scsi-disk.c @@ -890,9 +890,9 @@ static int scsi_disk_emulate_command(SCSIDiskReq *r, uint8_t *outbuf) outbuf[7] = 8; // CD-ROM buflen = 8; break; - case SERVICE_ACTION_IN: + case SERVICE_ACTION_IN_16: /* Service Action In subcommands. */ - if ((req->cmd.buf[1] & 31) == 0x10) { + if ((req->cmd.buf[1] & 31) == SAI_READ_CAPACITY_16) { DPRINTF("SAI READ CAPACITY(16)\n"); memset(outbuf, 0, req->cmd.xfer); bdrv_get_geometry(s->bs, &nb_sectors); @@ -992,7 +992,7 @@ static int32_t scsi_send_command(SCSIRequest *req, uint8_t *buf) case READ_CAPACITY_10: case READ_TOC: case GET_CONFIGURATION: - case SERVICE_ACTION_IN: + case SERVICE_ACTION_IN_16: case VERIFY_10: rc = scsi_disk_emulate_command(r, outbuf); if (rc < 0) {