diff options
author | Uladzimir Pylinski <barthess@yandex.ru> | 2017-10-13 10:10:32 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-10-13 10:10:32 +0300 |
commit | 921d233cdd43e6fff867f80a89b43f07154b3f9a (patch) | |
tree | e97a6b41e4ec39e38f1f7b7a26506b5e289d6098 /os/various | |
parent | f392dfa223310ab3bc17dce73a949d3a80b12b04 (diff) | |
parent | 39487df4de8aadb22ccdeb984a5ac8c74080905b (diff) | |
download | ChibiOS-Contrib-921d233cdd43e6fff867f80a89b43f07154b3f9a.tar.gz ChibiOS-Contrib-921d233cdd43e6fff867f80a89b43f07154b3f9a.tar.bz2 ChibiOS-Contrib-921d233cdd43e6fff867f80a89b43f07154b3f9a.zip |
Merge pull request #129 from kimmoli/scsi-serial-number
SCSI: Respond to unit serial number inquiry
Diffstat (limited to 'os/various')
-rw-r--r-- | os/various/lib_scsi.c | 7 | ||||
-rw-r--r-- | os/various/lib_scsi.h | 15 |
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; /** |