aboutsummaryrefslogtreecommitdiffstats
path: root/os/various
diff options
context:
space:
mode:
authorKimmo Lindholm <kimmo@eke.fi>2017-10-12 00:04:41 +0300
committerKimmo Lindholm <kimmo@eke.fi>2017-10-12 00:06:50 +0300
commit39487df4de8aadb22ccdeb984a5ac8c74080905b (patch)
treee97a6b41e4ec39e38f1f7b7a26506b5e289d6098 /os/various
parentf392dfa223310ab3bc17dce73a949d3a80b12b04 (diff)
downloadChibiOS-Contrib-39487df4de8aadb22ccdeb984a5ac8c74080905b.tar.gz
ChibiOS-Contrib-39487df4de8aadb22ccdeb984a5ac8c74080905b.tar.bz2
ChibiOS-Contrib-39487df4de8aadb22ccdeb984a5ac8c74080905b.zip
SCSI: Respond to unit serial number inquiry
Diffstat (limited to 'os/various')
-rw-r--r--os/various/lib_scsi.c7
-rw-r--r--os/various/lib_scsi.h15
2 files changed, 21 insertions, 1 deletions
diff --git a/os/various/lib_scsi.c b/os/various/lib_scsi.c
index 55aeb7e..1ece954 100644
--- a/os/various/lib_scsi.c
+++ b/os/various/lib_scsi.c
@@ -175,7 +175,12 @@ static bool cmd_ignored(SCSITarget *scsip, const uint8_t *cmd) {
*/
static bool inquiry(SCSITarget *scsip, const uint8_t *cmd) {
- if ((cmd[1] & 0b11) || cmd[2] != 0) {
+ if ((cmd[1] & 0b1) && cmd[2] == 0x80) {
+ /* Unit serial number page */
+ return transmit_data(scsip, (const uint8_t *)scsip->config->unit_serial_number_inquiry_response,
+ sizeof(scsi_unit_serial_number_inquiry_response_t));
+ }
+ else if ((cmd[1] & 0b11) || cmd[2] != 0) {
set_sense(scsip, SCSI_SENSE_KEY_ILLEGAL_REQUEST,
SCSI_ASENSE_INVALID_FIELD_IN_CDB,
SCSI_ASENSEQ_NO_QUALIFIER);
diff --git a/os/various/lib_scsi.h b/os/various/lib_scsi.h
index 97badb0..8384ae3 100644
--- a/os/various/lib_scsi.h
+++ b/os/various/lib_scsi.h
@@ -133,6 +133,17 @@ typedef struct PACKED_VAR {
} scsi_inquiry_response_t;
/**
+ * @brief Represents SCSI unit serial number inquiry response structure.
+ * @details See SCSI specification.
+ */
+typedef struct PACKED_VAR {
+ uint8_t peripheral;
+ uint8_t page_code;
+ uint8_t reserved;
+ uint8_t page_length;
+ uint8_t serianNumber[8];
+} scsi_unit_serial_number_inquiry_response_t;
+/**
* @brief Represents SCSI mode sense (6) request structure.
* @details See SCSI specification.
*/
@@ -225,6 +236,10 @@ typedef struct {
* @brief Pointer to SCSI inquiry response object.
*/
const scsi_inquiry_response_t *inquiry_response;
+ /**
+ * @brief Pointer to SCSI unit serial number inquiry response object.
+ */
+ const scsi_unit_serial_number_inquiry_response_t *unit_serial_number_inquiry_response;
} SCSITargetConfig;
/**