mirror of https://github.com/xemu-project/xemu.git
scsi: use command defines in scsi-disk.c
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com> Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
This commit is contained in:
parent
2ec749cb82
commit
ebf4602312
|
@ -379,16 +379,16 @@ static int32_t scsi_send_command(SCSIDevice *d, uint32_t tag,
|
||||||
if (lun || buf[1] >> 5) {
|
if (lun || buf[1] >> 5) {
|
||||||
/* Only LUN 0 supported. */
|
/* Only LUN 0 supported. */
|
||||||
DPRINTF("Unimplemented LUN %d\n", lun ? lun : buf[1] >> 5);
|
DPRINTF("Unimplemented LUN %d\n", lun ? lun : buf[1] >> 5);
|
||||||
if (command != 0x03 && command != 0x12) /* REQUEST SENSE and INQUIRY */
|
if (command != REQUEST_SENSE && command != INQUIRY)
|
||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
switch (command) {
|
switch (command) {
|
||||||
case 0x0:
|
case TEST_UNIT_READY:
|
||||||
DPRINTF("Test Unit Ready\n");
|
DPRINTF("Test Unit Ready\n");
|
||||||
if (!bdrv_is_inserted(s->dinfo->bdrv))
|
if (!bdrv_is_inserted(s->dinfo->bdrv))
|
||||||
goto notready;
|
goto notready;
|
||||||
break;
|
break;
|
||||||
case 0x03:
|
case REQUEST_SENSE:
|
||||||
DPRINTF("Request Sense (len %d)\n", len);
|
DPRINTF("Request Sense (len %d)\n", len);
|
||||||
if (len < 4)
|
if (len < 4)
|
||||||
goto fail;
|
goto fail;
|
||||||
|
@ -406,7 +406,7 @@ static int32_t scsi_send_command(SCSIDevice *d, uint32_t tag,
|
||||||
outbuf[1] = 0;
|
outbuf[1] = 0;
|
||||||
outbuf[2] = s->sense;
|
outbuf[2] = s->sense;
|
||||||
break;
|
break;
|
||||||
case 0x12:
|
case INQUIRY:
|
||||||
DPRINTF("Inquiry (len %d)\n", len);
|
DPRINTF("Inquiry (len %d)\n", len);
|
||||||
if (buf[1] & 0x2) {
|
if (buf[1] & 0x2) {
|
||||||
/* Command support data - optional, not implemented */
|
/* Command support data - optional, not implemented */
|
||||||
|
@ -562,18 +562,18 @@ static int32_t scsi_send_command(SCSIDevice *d, uint32_t tag,
|
||||||
outbuf[7] = 0x10 | (r->req.bus->tcq ? 0x02 : 0);
|
outbuf[7] = 0x10 | (r->req.bus->tcq ? 0x02 : 0);
|
||||||
r->iov.iov_len = len;
|
r->iov.iov_len = len;
|
||||||
break;
|
break;
|
||||||
case 0x16:
|
case RESERVE:
|
||||||
DPRINTF("Reserve(6)\n");
|
DPRINTF("Reserve(6)\n");
|
||||||
if (buf[1] & 1)
|
if (buf[1] & 1)
|
||||||
goto fail;
|
goto fail;
|
||||||
break;
|
break;
|
||||||
case 0x17:
|
case RELEASE:
|
||||||
DPRINTF("Release(6)\n");
|
DPRINTF("Release(6)\n");
|
||||||
if (buf[1] & 1)
|
if (buf[1] & 1)
|
||||||
goto fail;
|
goto fail;
|
||||||
break;
|
break;
|
||||||
case 0x1a:
|
case MODE_SENSE:
|
||||||
case 0x5a:
|
case MODE_SENSE_10:
|
||||||
{
|
{
|
||||||
uint8_t *p;
|
uint8_t *p;
|
||||||
int page;
|
int page;
|
||||||
|
@ -724,18 +724,18 @@ static int32_t scsi_send_command(SCSIDevice *d, uint32_t tag,
|
||||||
r->iov.iov_len = len;
|
r->iov.iov_len = len;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 0x1b:
|
case START_STOP:
|
||||||
DPRINTF("Start Stop Unit\n");
|
DPRINTF("Start Stop Unit\n");
|
||||||
if (bdrv_get_type_hint(s->dinfo->bdrv) == BDRV_TYPE_CDROM &&
|
if (bdrv_get_type_hint(s->dinfo->bdrv) == BDRV_TYPE_CDROM &&
|
||||||
(buf[4] & 2))
|
(buf[4] & 2))
|
||||||
/* load/eject medium */
|
/* load/eject medium */
|
||||||
bdrv_eject(s->dinfo->bdrv, !(buf[4] & 1));
|
bdrv_eject(s->dinfo->bdrv, !(buf[4] & 1));
|
||||||
break;
|
break;
|
||||||
case 0x1e:
|
case ALLOW_MEDIUM_REMOVAL:
|
||||||
DPRINTF("Prevent Allow Medium Removal (prevent = %d)\n", buf[4] & 3);
|
DPRINTF("Prevent Allow Medium Removal (prevent = %d)\n", buf[4] & 3);
|
||||||
bdrv_set_locked(s->dinfo->bdrv, buf[4] & 1);
|
bdrv_set_locked(s->dinfo->bdrv, buf[4] & 1);
|
||||||
break;
|
break;
|
||||||
case 0x25:
|
case READ_CAPACITY:
|
||||||
DPRINTF("Read Capacity\n");
|
DPRINTF("Read Capacity\n");
|
||||||
/* The normal LEN field for this command is zero. */
|
/* The normal LEN field for this command is zero. */
|
||||||
memset(outbuf, 0, 8);
|
memset(outbuf, 0, 8);
|
||||||
|
@ -764,8 +764,8 @@ static int32_t scsi_send_command(SCSIDevice *d, uint32_t tag,
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 0x08:
|
case READ_6:
|
||||||
case 0x28:
|
case READ_10:
|
||||||
case 0x88:
|
case 0x88:
|
||||||
DPRINTF("Read (sector %" PRId64 ", count %d)\n", lba, len);
|
DPRINTF("Read (sector %" PRId64 ", count %d)\n", lba, len);
|
||||||
if (lba > s->max_lba)
|
if (lba > s->max_lba)
|
||||||
|
@ -773,8 +773,8 @@ static int32_t scsi_send_command(SCSIDevice *d, uint32_t tag,
|
||||||
r->sector = lba * s->cluster_size;
|
r->sector = lba * s->cluster_size;
|
||||||
r->sector_count = len * s->cluster_size;
|
r->sector_count = len * s->cluster_size;
|
||||||
break;
|
break;
|
||||||
case 0x0a:
|
case WRITE_6:
|
||||||
case 0x2a:
|
case WRITE_10:
|
||||||
case 0x8a:
|
case 0x8a:
|
||||||
DPRINTF("Write (sector %" PRId64 ", count %d)\n", lba, len);
|
DPRINTF("Write (sector %" PRId64 ", count %d)\n", lba, len);
|
||||||
if (lba > s->max_lba)
|
if (lba > s->max_lba)
|
||||||
|
@ -783,11 +783,11 @@ static int32_t scsi_send_command(SCSIDevice *d, uint32_t tag,
|
||||||
r->sector_count = len * s->cluster_size;
|
r->sector_count = len * s->cluster_size;
|
||||||
is_write = 1;
|
is_write = 1;
|
||||||
break;
|
break;
|
||||||
case 0x35:
|
case SYNCHRONIZE_CACHE:
|
||||||
DPRINTF("Synchronise cache (sector %" PRId64 ", count %d)\n", lba, len);
|
DPRINTF("Synchronise cache (sector %" PRId64 ", count %d)\n", lba, len);
|
||||||
bdrv_flush(s->dinfo->bdrv);
|
bdrv_flush(s->dinfo->bdrv);
|
||||||
break;
|
break;
|
||||||
case 0x43:
|
case READ_TOC:
|
||||||
{
|
{
|
||||||
int start_track, format, msf, toclen;
|
int start_track, format, msf, toclen;
|
||||||
|
|
||||||
|
@ -833,12 +833,12 @@ static int32_t scsi_send_command(SCSIDevice *d, uint32_t tag,
|
||||||
outbuf[7] = 8; // CD-ROM
|
outbuf[7] = 8; // CD-ROM
|
||||||
r->iov.iov_len = 8;
|
r->iov.iov_len = 8;
|
||||||
break;
|
break;
|
||||||
case 0x56:
|
case RESERVE_10:
|
||||||
DPRINTF("Reserve(10)\n");
|
DPRINTF("Reserve(10)\n");
|
||||||
if (buf[1] & 3)
|
if (buf[1] & 3)
|
||||||
goto fail;
|
goto fail;
|
||||||
break;
|
break;
|
||||||
case 0x57:
|
case RELEASE_10:
|
||||||
DPRINTF("Release(10)\n");
|
DPRINTF("Release(10)\n");
|
||||||
if (buf[1] & 3)
|
if (buf[1] & 3)
|
||||||
goto fail;
|
goto fail;
|
||||||
|
@ -885,7 +885,7 @@ static int32_t scsi_send_command(SCSIDevice *d, uint32_t tag,
|
||||||
outbuf[3] = 8;
|
outbuf[3] = 8;
|
||||||
r->iov.iov_len = 16;
|
r->iov.iov_len = 16;
|
||||||
break;
|
break;
|
||||||
case 0x2f:
|
case VERIFY:
|
||||||
DPRINTF("Verify (sector %" PRId64 ", count %d)\n", lba, len);
|
DPRINTF("Verify (sector %" PRId64 ", count %d)\n", lba, len);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
|
Loading…
Reference in New Issue