[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 15/30] scsi: add scsi_req_print()
From: |
Gerd Hoffmann |
Subject: |
[Qemu-devel] [PATCH 15/30] scsi: add scsi_req_print() |
Date: |
Thu, 26 Nov 2009 15:34:01 +0100 |
Handy for debugging.
Signed-off-by: Gerd Hoffmann <address@hidden>
---
hw/scsi-bus.c | 114 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
hw/scsi.h | 1 +
2 files changed, 115 insertions(+), 0 deletions(-)
diff --git a/hw/scsi-bus.c b/hw/scsi-bus.c
index 2e4fd38..e362671 100644
--- a/hw/scsi-bus.c
+++ b/hw/scsi-bus.c
@@ -364,6 +364,120 @@ int scsi_req_parse(SCSIRequest *req, uint8_t *buf)
return 0;
}
+static const char *scsi_command_name(uint8_t cmd)
+{
+ static const char *names[] = {
+ [ TEST_UNIT_READY ] = "TEST_UNIT_READY",
+ [ REZERO_UNIT ] = "REZERO_UNIT",
+ [ REQUEST_SENSE ] = "REQUEST_SENSE",
+ [ FORMAT_UNIT ] = "FORMAT_UNIT",
+ [ READ_BLOCK_LIMITS ] = "READ_BLOCK_LIMITS",
+ [ REASSIGN_BLOCKS ] = "REASSIGN_BLOCKS",
+ [ READ_6 ] = "READ_6",
+ [ WRITE_6 ] = "WRITE_6",
+ [ SEEK_6 ] = "SEEK_6",
+ [ READ_REVERSE ] = "READ_REVERSE",
+ [ WRITE_FILEMARKS ] = "WRITE_FILEMARKS",
+ [ SPACE ] = "SPACE",
+ [ INQUIRY ] = "INQUIRY",
+ [ RECOVER_BUFFERED_DATA ] = "RECOVER_BUFFERED_DATA",
+ [ MODE_SELECT ] = "MODE_SELECT",
+ [ RESERVE ] = "RESERVE",
+ [ RELEASE ] = "RELEASE",
+ [ COPY ] = "COPY",
+ [ ERASE ] = "ERASE",
+ [ MODE_SENSE ] = "MODE_SENSE",
+ [ START_STOP ] = "START_STOP",
+ [ RECEIVE_DIAGNOSTIC ] = "RECEIVE_DIAGNOSTIC",
+ [ SEND_DIAGNOSTIC ] = "SEND_DIAGNOSTIC",
+ [ ALLOW_MEDIUM_REMOVAL ] = "ALLOW_MEDIUM_REMOVAL",
+
+ [ SET_WINDOW ] = "SET_WINDOW",
+ [ READ_CAPACITY ] = "READ_CAPACITY",
+ [ READ_10 ] = "READ_10",
+ [ WRITE_10 ] = "WRITE_10",
+ [ SEEK_10 ] = "SEEK_10",
+ [ WRITE_VERIFY ] = "WRITE_VERIFY",
+ [ VERIFY ] = "VERIFY",
+ [ SEARCH_HIGH ] = "SEARCH_HIGH",
+ [ SEARCH_EQUAL ] = "SEARCH_EQUAL",
+ [ SEARCH_LOW ] = "SEARCH_LOW",
+ [ SET_LIMITS ] = "SET_LIMITS",
+ [ PRE_FETCH ] = "PRE_FETCH",
+ [ READ_POSITION ] = "READ_POSITION",
+ [ SYNCHRONIZE_CACHE ] = "SYNCHRONIZE_CACHE",
+ [ LOCK_UNLOCK_CACHE ] = "LOCK_UNLOCK_CACHE",
+ [ READ_DEFECT_DATA ] = "READ_DEFECT_DATA",
+ [ MEDIUM_SCAN ] = "MEDIUM_SCAN",
+ [ COMPARE ] = "COMPARE",
+ [ COPY_VERIFY ] = "COPY_VERIFY",
+ [ WRITE_BUFFER ] = "WRITE_BUFFER",
+ [ READ_BUFFER ] = "READ_BUFFER",
+ [ UPDATE_BLOCK ] = "UPDATE_BLOCK",
+ [ READ_LONG ] = "READ_LONG",
+ [ WRITE_LONG ] = "WRITE_LONG",
+ [ CHANGE_DEFINITION ] = "CHANGE_DEFINITION",
+ [ WRITE_SAME ] = "WRITE_SAME",
+ [ READ_TOC ] = "READ_TOC",
+ [ LOG_SELECT ] = "LOG_SELECT",
+ [ LOG_SENSE ] = "LOG_SENSE",
+ [ MODE_SELECT_10 ] = "MODE_SELECT_10",
+ [ RESERVE_10 ] = "RESERVE_10",
+ [ RELEASE_10 ] = "RELEASE_10",
+ [ MODE_SENSE_10 ] = "MODE_SENSE_10",
+ [ PERSISTENT_RESERVE_IN ] = "PERSISTENT_RESERVE_IN",
+ [ PERSISTENT_RESERVE_OUT ] = "PERSISTENT_RESERVE_OUT",
+ [ MOVE_MEDIUM ] = "MOVE_MEDIUM",
+ [ READ_12 ] = "READ_12",
+ [ WRITE_12 ] = "WRITE_12",
+ [ WRITE_VERIFY_12 ] = "WRITE_VERIFY_12",
+ [ SEARCH_HIGH_12 ] = "SEARCH_HIGH_12",
+ [ SEARCH_EQUAL_12 ] = "SEARCH_EQUAL_12",
+ [ SEARCH_LOW_12 ] = "SEARCH_LOW_12",
+ [ READ_ELEMENT_STATUS ] = "READ_ELEMENT_STATUS",
+ [ SEND_VOLUME_TAG ] = "SEND_VOLUME_TAG",
+ [ WRITE_LONG_2 ] = "WRITE_LONG_2",
+
+ [ REWIND ] = "REWIND",
+ [ REPORT_DENSITY_SUPPORT ] = "REPORT_DENSITY_SUPPORT",
+ [ LOAD_UNLOAD ] = "LOAD_UNLOAD",
+ [ SET_CD_SPEED ] = "SET_CD_SPEED",
+ [ BLANK ] = "BLANK",
+ };
+
+ if (cmd >= ARRAY_SIZE(names) || names[cmd] == NULL)
+ return "*UNKNOWN*";
+ return names[cmd];
+}
+
+void scsi_req_print(SCSIRequest *req)
+{
+ FILE *fp = stderr;
+ int i;
+
+ fprintf(fp, "[%s id=%d] %s",
+ req->dev->qdev.parent_bus->name,
+ req->dev->id,
+ scsi_command_name(req->cmd.buf[0]));
+ for (i = 1; i < req->cmd.len; i++) {
+ fprintf(fp, " 0x%02x", req->cmd.buf[i]);
+ }
+ switch (req->cmd.mode) {
+ case SCSI_XFER_NONE:
+ fprintf(fp, " - none\n");
+ break;
+ case SCSI_XFER_FROM_DEV:
+ fprintf(fp, " - from-dev len=%zd\n", req->cmd.xfer);
+ break;
+ case SCSI_XFER_TO_DEV:
+ fprintf(fp, " - to-dev len=%zd\n", req->cmd.xfer);
+ break;
+ default:
+ fprintf(fp, " - Oops\n");
+ break;
+ }
+}
+
void scsi_req_complete(SCSIRequest *req)
{
assert(req->status != -1);
diff --git a/hw/scsi.h b/hw/scsi.h
index 2fe8c12..8f0200d 100644
--- a/hw/scsi.h
+++ b/hw/scsi.h
@@ -107,6 +107,7 @@ SCSIRequest *scsi_req_find(SCSIDevice *d, uint32_t tag);
void scsi_req_free(SCSIRequest *req);
int scsi_req_parse(SCSIRequest *req, uint8_t *buf);
+void scsi_req_print(SCSIRequest *req);
void scsi_req_complete(SCSIRequest *req);
#endif
--
1.6.2.5
- [Qemu-devel] [PATCH 05/30] scsi: move scsi command buffer from SCSIGenericReq to SCSIRequest., (continued)
- [Qemu-devel] [PATCH 05/30] scsi: move scsi command buffer from SCSIGenericReq to SCSIRequest., Gerd Hoffmann, 2009/11/26
- [Qemu-devel] [PATCH 12/30] scsi: move sense to SCSIDevice, create SCSISense struct., Gerd Hoffmann, 2009/11/26
- [Qemu-devel] [PATCH 11/30] scsi: add xfer mode, Gerd Hoffmann, 2009/11/26
- [Qemu-devel] [PATCH 14/30] scsi: move status to SCSIRequest., Gerd Hoffmann, 2009/11/26
- [Qemu-devel] [PATCH 10/30] scsi: use command defines in scsi-disk.c, Gerd Hoffmann, 2009/11/26
- [Qemu-devel] [PATCH 06/30] scsi: move blocksize from SCSIGenericState to SCSIDevice, Gerd Hoffmann, 2009/11/26
- [Qemu-devel] [PATCH 09/30] scsi: add request parsing helpers to common code., Gerd Hoffmann, 2009/11/26
- [Qemu-devel] [PATCH 13/30] scsi: move dinfo to SCSIDevice, Gerd Hoffmann, 2009/11/26
- [Qemu-devel] [PATCH 17/30] scsi-disk: restruct emulation: REQUEST_SENSE, Gerd Hoffmann, 2009/11/26
- [Qemu-devel] [PATCH 07/30] scsi: add scsi-defs.h, Gerd Hoffmann, 2009/11/26
- [Qemu-devel] [PATCH 15/30] scsi: add scsi_req_print(),
Gerd Hoffmann <=
- [Qemu-devel] [PATCH 19/30] scsi-disk: restruct emulation: RESERVE+RELEASE, Gerd Hoffmann, 2009/11/26
- [Qemu-devel] [PATCH 27/30] scsi-disk: restruct emulation: SERVICE_ACTION_IN, Gerd Hoffmann, 2009/11/26
- [Qemu-devel] [PATCH 18/30] scsi-disk: restruct emulation: INQUIRY, Gerd Hoffmann, 2009/11/26
- [Qemu-devel] [PATCH 21/30] scsi-disk: restruct emulation: START_STOP, Gerd Hoffmann, 2009/11/26
- [Qemu-devel] [PATCH 26/30] scsi-disk: restruct emulation: GET_CONFIGURATION, Gerd Hoffmann, 2009/11/26
- [Qemu-devel] [PATCH 30/30] scsi: add read/write 16 commands., Gerd Hoffmann, 2009/11/26
- [Qemu-devel] [PATCH 16/30] scsi-disk: restruct emulation: core + TEST_UNIT_READY., Gerd Hoffmann, 2009/11/26
- [Qemu-devel] [PATCH 22/30] scsi-disk: restruct emulation: ALLOW_MEDIUM_REMOVAL, Gerd Hoffmann, 2009/11/26
- [Qemu-devel] [PATCH 28/30] scsi-disk: restruct emulation: REPORT_LUNS, Gerd Hoffmann, 2009/11/26
- [Qemu-devel] [PATCH 23/30] scsi-disk: restruct emulation: READ_CAPACITY, Gerd Hoffmann, 2009/11/26