Commit eac6e8e4 authored by Matthew Wilcox's avatar Matthew Wilcox Committed by James Bottomley

[SCSI] scsi_debug: add support for rotation speed

Add support for VPD page b1 to scsi_debug

SCSI VPD page b1 reports the nominal rotation speed of the device.
Since scsi_debug is ram-based, claim to be a non-rotating medium.
Signed-off-by: default avatarMatthew Wilcox <willy@linux.intel.com>
Acked-by: default avatarDouglas Gilbert <dougg@torque.net>
Signed-off-by: default avatarJames Bottomley <James.Bottomley@HansenPartnership.com>
parent f80f868e
...@@ -643,6 +643,14 @@ static int inquiry_evpd_b0(unsigned char * arr) ...@@ -643,6 +643,14 @@ static int inquiry_evpd_b0(unsigned char * arr)
return sizeof(vpdb0_data); return sizeof(vpdb0_data);
} }
static int inquiry_evpd_b1(unsigned char *arr)
{
memset(arr, 0, 0x3c);
arr[0] = 0;
arr[1] = 1;
return 0x3c;
}
#define SDEBUG_LONG_INQ_SZ 96 #define SDEBUG_LONG_INQ_SZ 96
#define SDEBUG_MAX_INQ_ARR_SZ 584 #define SDEBUG_MAX_INQ_ARR_SZ 584
...@@ -698,6 +706,7 @@ static int resp_inquiry(struct scsi_cmnd * scp, int target, ...@@ -698,6 +706,7 @@ static int resp_inquiry(struct scsi_cmnd * scp, int target,
arr[n++] = 0x88; /* SCSI ports */ arr[n++] = 0x88; /* SCSI ports */
arr[n++] = 0x89; /* ATA information */ arr[n++] = 0x89; /* ATA information */
arr[n++] = 0xb0; /* Block limits (SBC) */ arr[n++] = 0xb0; /* Block limits (SBC) */
arr[n++] = 0xb1; /* Block characteristics (SBC) */
arr[3] = n - 4; /* number of supported VPD pages */ arr[3] = n - 4; /* number of supported VPD pages */
} else if (0x80 == cmd[2]) { /* unit serial number */ } else if (0x80 == cmd[2]) { /* unit serial number */
arr[1] = cmd[2]; /*sanity */ arr[1] = cmd[2]; /*sanity */
...@@ -737,6 +746,9 @@ static int resp_inquiry(struct scsi_cmnd * scp, int target, ...@@ -737,6 +746,9 @@ static int resp_inquiry(struct scsi_cmnd * scp, int target,
} else if (0xb0 == cmd[2]) { /* Block limits (SBC) */ } else if (0xb0 == cmd[2]) { /* Block limits (SBC) */
arr[1] = cmd[2]; /*sanity */ arr[1] = cmd[2]; /*sanity */
arr[3] = inquiry_evpd_b0(&arr[4]); arr[3] = inquiry_evpd_b0(&arr[4]);
} else if (0xb1 == cmd[2]) { /* Block characteristics (SBC) */
arr[1] = cmd[2]; /*sanity */
arr[3] = inquiry_evpd_b1(&arr[4]);
} else { } else {
/* Illegal request, invalid field in cdb */ /* Illegal request, invalid field in cdb */
mk_sense_buffer(devip, ILLEGAL_REQUEST, mk_sense_buffer(devip, ILLEGAL_REQUEST,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment