[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PULL 01/14] scsi-bus: Add SCSI scanner support
From: |
Paolo Bonzini |
Subject: |
[Qemu-devel] [PULL 01/14] scsi-bus: Add SCSI scanner support |
Date: |
Wed, 13 Jul 2016 15:26:19 +0200 |
From: Jarkko Lavinen <address@hidden>
Add support for missing scanner specific SCSI commands and their xfer
lenghts as per ANSI spec section 15.
Signed-off-by: Jarkko Lavinen <address@hidden>
Signed-off-by: Paolo Bonzini <address@hidden>
---
hw/scsi/scsi-bus.c | 31 +++++++++++++++++++++++++++++++
include/block/scsi.h | 6 ++++++
2 files changed, 37 insertions(+)
diff --git a/hw/scsi/scsi-bus.c b/hw/scsi/scsi-bus.c
index ad6f398..14c0aa5 100644
--- a/hw/scsi/scsi-bus.c
+++ b/hw/scsi/scsi-bus.c
@@ -1132,6 +1132,29 @@ static int scsi_req_medium_changer_xfer(SCSICommand
*cmd, SCSIDevice *dev, uint8
return 0;
}
+static int scsi_req_scanner_length(SCSICommand *cmd, SCSIDevice *dev, uint8_t
*buf)
+{
+ switch (buf[0]) {
+ /* Scanner commands */
+ case OBJECT_POSITION:
+ cmd->xfer = 0;
+ break;
+ case SCAN:
+ cmd->xfer = buf[4];
+ break;
+ case READ_10:
+ case SEND:
+ case GET_WINDOW:
+ case SET_WINDOW:
+ cmd->xfer = buf[8] | (buf[7] << 8) | (buf[6] << 16);
+ break;
+ default:
+ /* GET_DATA_BUFFER_STATUS xfer handled by scsi_req_xfer */
+ return scsi_req_xfer(cmd, dev, buf);
+ }
+
+ return 0;
+}
static void scsi_cmd_xfer_mode(SCSICommand *cmd)
{
@@ -1178,6 +1201,11 @@ static void scsi_cmd_xfer_mode(SCSICommand *cmd)
case SEND_DVD_STRUCTURE:
case PERSISTENT_RESERVE_OUT:
case MAINTENANCE_OUT:
+ case SET_WINDOW:
+ case SCAN:
+ /* SCAN conflicts with START_STOP. START_STOP has cmd->xfer set to 0
for
+ * non-scanner devices, so we only get here for SCAN and not for
START_STOP.
+ */
cmd->mode = SCSI_XFER_TO_DEV;
break;
case ATA_PASSTHROUGH_12:
@@ -1258,6 +1286,9 @@ int scsi_req_parse_cdb(SCSIDevice *dev, SCSICommand *cmd,
uint8_t *buf)
case TYPE_MEDIUM_CHANGER:
rc = scsi_req_medium_changer_xfer(cmd, dev, buf);
break;
+ case TYPE_SCANNER:
+ rc = scsi_req_scanner_length(cmd, dev, buf);
+ break;
default:
rc = scsi_req_xfer(cmd, dev, buf);
break;
diff --git a/include/block/scsi.h b/include/block/scsi.h
index a311341..8b966d7 100644
--- a/include/block/scsi.h
+++ b/include/block/scsi.h
@@ -48,13 +48,17 @@
#define ERASE 0x19
#define MODE_SENSE 0x1a
#define LOAD_UNLOAD 0x1b
+#define SCAN 0x1b
#define START_STOP 0x1b
#define RECEIVE_DIAGNOSTIC 0x1c
#define SEND_DIAGNOSTIC 0x1d
#define ALLOW_MEDIUM_REMOVAL 0x1e
+#define SET_WINDOW 0x24
#define READ_CAPACITY_10 0x25
+#define GET_WINDOW 0x25
#define READ_10 0x28
#define WRITE_10 0x2a
+#define SEND 0x2a
#define SEEK_10 0x2b
#define LOCATE_10 0x2b
#define POSITION_TO_ELEMENT 0x2b
@@ -62,10 +66,12 @@
#define VERIFY_10 0x2f
#define SEARCH_HIGH 0x30
#define SEARCH_EQUAL 0x31
+#define OBJECT_POSITION 0x31
#define SEARCH_LOW 0x32
#define SET_LIMITS 0x33
#define PRE_FETCH 0x34
#define READ_POSITION 0x34
+#define GET_DATA_BUFFER_STATUS 0x34
#define SYNCHRONIZE_CACHE 0x35
#define LOCK_UNLOCK_CACHE 0x36
#define INITIALIZE_ELEMENT_STATUS_WITH_RANGE 0x37
--
1.8.3.1
- [Qemu-devel] [PULL 00/14] SCSI, chardev, build fixes for 2016-07-13, Paolo Bonzini, 2016/07/13
- [Qemu-devel] [PULL 04/14] main-loop: check return value before using pointer, Paolo Bonzini, 2016/07/13
- [Qemu-devel] [PULL 03/14] Use "-s" instead of "--quiet" to resolve non-fatal build error on FreeBSD., Paolo Bonzini, 2016/07/13
- [Qemu-devel] [PULL 05/14] json-streamer: fix double-free on exiting during a parse, Paolo Bonzini, 2016/07/13
- [Qemu-devel] [PULL 06/14] disas: avoid including everything in headers compiled from C++, Paolo Bonzini, 2016/07/13
- [Qemu-devel] [PULL 08/14] util: Fix MIN_NON_ZERO, Paolo Bonzini, 2016/07/13
- [Qemu-devel] [PULL 01/14] scsi-bus: Add SCSI scanner support,
Paolo Bonzini <=
- [Qemu-devel] [PULL 02/14] scsi-bus: Use longer sense buffer with scanners, Paolo Bonzini, 2016/07/13
- [Qemu-devel] [PULL 09/14] tap: use an exit notifier to call down_script, Paolo Bonzini, 2016/07/13
- [Qemu-devel] [PULL 07/14] qemu-sockets: use qapi_free_SocketAddress in cleanup, Paolo Bonzini, 2016/07/13
- [Qemu-devel] [PULL 10/14] slirp: use exit notifier for slirp_smb_cleanup, Paolo Bonzini, 2016/07/13
- [Qemu-devel] [PULL 11/14] net: do not use atexit for cleanup, Paolo Bonzini, 2016/07/13
- [Qemu-devel] [PULL 13/14] hostmem: fix QEMU crash by 'info memdev', Paolo Bonzini, 2016/07/13
- [Qemu-devel] [PULL 12/14] char: do not use atexit cleanup handler, Paolo Bonzini, 2016/07/13
- [Qemu-devel] [PULL 14/14] hostmem: detect host backend memory is being used properly, Paolo Bonzini, 2016/07/13
- Re: [Qemu-devel] [PULL 00/14] SCSI, chardev, build fixes for 2016-07-13, Peter Maydell, 2016/07/14