scsi: add scsi_req_print()
Handy for debugging. Signed-off-by: Gerd Hoffmann <kraxel@redhat.com> Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
This commit is contained in:
parent
ed3a34a3c8
commit
ec76686563
114
hw/scsi-bus.c
114
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);
|
||||
|
Loading…
Reference in New Issue
Block a user