From 224b37065c72974c5fb7e190a4c748b2b160b835 Mon Sep 17 00:00:00 2001 From: Natalia Portillo Date: Fri, 27 Mar 2020 21:18:00 +0000 Subject: [PATCH] Implement INQUIRY for magneto-optical disks. --- src/devices/disk/mo.c | 35 +++++++---------------------------- 1 file changed, 7 insertions(+), 28 deletions(-) diff --git a/src/devices/disk/mo.c b/src/devices/disk/mo.c index 0d0aa91..935df0b 100644 --- a/src/devices/disk/mo.c +++ b/src/devices/disk/mo.c @@ -1482,7 +1482,7 @@ do_command(void *p, uint8_t *cdb) preamble_len = 4; size_idx = 3; - dev->buffer[idx++] = 05; + dev->buffer[idx++] = 7; // Optical disk dev->buffer[idx++] = cdb[2]; dev->buffer[idx++] = 0; @@ -1491,35 +1491,14 @@ do_command(void *p, uint8_t *cdb) switch (cdb[2]) { case 0x00: dev->buffer[idx++] = 0x00; - dev->buffer[idx++] = 0x83; + dev->buffer[idx++] = 0x80; break; - case 0x83: - if (idx + 24 > max_len) { - data_phase_error(dev); - buf_free(dev); - return; - } - - dev->buffer[idx++] = 0x02; - dev->buffer[idx++] = 0x00; - dev->buffer[idx++] = 0x00; - dev->buffer[idx++] = 20; + // Unit serial number page + case 0x80: + dev->buffer[idx++] = strlen("VCM!10") + 1; ide_padstr8(dev->buffer + idx, 20, "VCM!10"); /* Serial */ - idx += 20; - - if (idx + 72 > cdb[4]) - goto atapi_out; - dev->buffer[idx++] = 0x02; - dev->buffer[idx++] = 0x01; - dev->buffer[idx++] = 0x00; - dev->buffer[idx++] = 68; - ide_padstr8(dev->buffer + idx, 8, "VARCEM "); /* Vendor */ - idx += 8; - ide_padstr8(dev->buffer + idx, 40, "MAGNETO OPTICAL "); /* Product */ - idx += 40; - ide_padstr8(dev->buffer + idx, 20, "VCM!10"); /* Serial */ - idx += 20; + idx += strlen("VCM!10"); break; default: @@ -1536,7 +1515,7 @@ do_command(void *p, uint8_t *cdb) if (cdb[1] & 0xe0) dev->buffer[0] = 0x60; /*No physical device on this LUN*/ else - dev->buffer[0] = 0x00; /*Hard disk*/ + dev->buffer[0] = 0x07; /*Optical disk*/ dev->buffer[1] = 0x80; /*Removable*/ dev->buffer[2] = (dev->drv->bus_type == MO_BUS_SCSI) ? 0x02 : 0x00; /*SCSI-2 compliant*/ dev->buffer[3] = (dev->drv->bus_type == MO_BUS_SCSI) ? 0x02 : 0x21;