[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH v2 09/11] scsi-disk: allow MODE SELECT block descriptor to set th
From: |
Mark Cave-Ayland |
Subject: |
[PATCH v2 09/11] scsi-disk: allow MODE SELECT block descriptor to set the ROM device block size |
Date: |
Sun, 24 Apr 2022 17:49:33 +0100 |
Whilst CDROM drives usually have a 2048 byte sector size, older drives have the
ability to switch between 2048 byte and 512 byte sector sizes by specifying a
block descriptor in the MODE SELECT command.
If a MODE SELECT block descriptor is provided, update the scsi-cd device block
size with the provided value accordingly.
This allows CDROMs to be used with A/UX whose driver only works with a 512 byte
sector size.
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
---
hw/scsi/scsi-disk.c | 7 +++++++
hw/scsi/trace-events | 1 +
2 files changed, 8 insertions(+)
diff --git a/hw/scsi/scsi-disk.c b/hw/scsi/scsi-disk.c
index 6991493cf4..41ebbe3045 100644
--- a/hw/scsi/scsi-disk.c
+++ b/hw/scsi/scsi-disk.c
@@ -1583,6 +1583,13 @@ static void scsi_disk_emulate_mode_select(SCSIDiskReq
*r, uint8_t *inbuf)
goto invalid_param;
}
+ /* Allow changing the block size of ROM devices */
+ if (s->qdev.type == TYPE_ROM && bd_len &&
+ p[6] != (s->qdev.blocksize >> 8)) {
+ s->qdev.blocksize = p[6] << 8;
+ trace_scsi_disk_mode_select_rom_set_blocksize(s->qdev.blocksize);
+ }
+
len -= bd_len;
p += bd_len;
diff --git a/hw/scsi/trace-events b/hw/scsi/trace-events
index 25eae9f307..1a021ddae9 100644
--- a/hw/scsi/trace-events
+++ b/hw/scsi/trace-events
@@ -340,6 +340,7 @@ scsi_disk_dma_command_WRITE(const char *cmd, uint64_t lba,
int len) "Write %s(se
scsi_disk_new_request(uint32_t lun, uint32_t tag, const char *line) "Command:
lun=%d tag=0x%x data=%s"
scsi_disk_aio_sgio_command(uint32_t tag, uint8_t cmd, uint64_t lba, int len,
uint32_t timeout) "disk aio sgio: tag=0x%x cmd=0x%x (sector %" PRId64 ", count
%d) timeout=%u"
scsi_disk_mode_select_page_truncated(int page, int len, int page_len) "page %d
expected length %d but received length %d"
+scsi_disk_mode_select_rom_set_blocksize(int blocksize) "set ROM block size to
%d"
# scsi-generic.c
scsi_generic_command_complete_noio(void *req, uint32_t tag, int statuc)
"Command complete %p tag=0x%x status=%d"
--
2.20.1
- [PATCH v2 00/11] scsi: add quirks and features to support m68k Macs, Mark Cave-Ayland, 2022/04/24
- [PATCH v2 01/11] scsi-disk: add FORMAT UNIT command, Mark Cave-Ayland, 2022/04/24
- [PATCH v2 02/11] scsi-disk: add new quirks bitmap to SCSIDiskState, Mark Cave-Ayland, 2022/04/24
- [PATCH v2 03/11] scsi-disk: add MODE_PAGE_APPLE_VENDOR quirk for Macintosh, Mark Cave-Ayland, 2022/04/24
- [PATCH v2 07/11] scsi-disk: allow truncated MODE SELECT requests, Mark Cave-Ayland, 2022/04/24
- [PATCH v2 06/11] q800: implement compat_props to enable quirk_mode_sense_rom_force_dbd for scsi-cd devices, Mark Cave-Ayland, 2022/04/24
- [PATCH v2 05/11] scsi-disk: add SCSI_DISK_QUIRK_MODE_SENSE_ROM_FORCE_DBD quirk for Macintosh, Mark Cave-Ayland, 2022/04/24
- [PATCH v2 04/11] q800: implement compat_props to enable quirk_mode_page_apple_vendor for scsi-hd devices, Mark Cave-Ayland, 2022/04/24
- [PATCH v2 08/11] scsi-disk: allow the MODE_PAGE_R_W_ERROR AWRE bit to be changeable for CDROM drives, Mark Cave-Ayland, 2022/04/24
- [PATCH v2 10/11] q800: add default vendor and product information for scsi-hd devices, Mark Cave-Ayland, 2022/04/24
- [PATCH v2 09/11] scsi-disk: allow MODE SELECT block descriptor to set the ROM device block size,
Mark Cave-Ayland <=
- [PATCH v2 11/11] q800: add default vendor and product information for scsi-cd devices, Mark Cave-Ayland, 2022/04/24