From 39487df4de8aadb22ccdeb984a5ac8c74080905b Mon Sep 17 00:00:00 2001
From: Kimmo Lindholm <kimmo@eke.fi>
Date: Thu, 12 Oct 2017 00:04:41 +0300
Subject: SCSI: Respond to unit serial number inquiry

---
 os/hal/src/hal_usb_msd.c | 22 +++++++++++++++++++++-
 1 file changed, 21 insertions(+), 1 deletion(-)

(limited to 'os/hal/src/hal_usb_msd.c')

diff --git a/os/hal/src/hal_usb_msd.c b/os/hal/src/hal_usb_msd.c
index 6cc5386..564bad0 100644
--- a/os/hal/src/hal_usb_msd.c
+++ b/os/hal/src/hal_usb_msd.c
@@ -84,6 +84,19 @@ static const scsi_inquiry_response_t default_scsi_inquiry_response = {
     {'v',CH_KERNEL_MAJOR+'0','.',CH_KERNEL_MINOR+'0'}
 };
 
+/**
+ * @brief   Hardcoded default SCSI unit serial number inquiry response structure.
+ */
+static const scsi_unit_serial_number_inquiry_response_t default_scsi_unit_serial_number_inquiry_response =
+{
+    0x00,
+    0x80,
+    0x00,
+    0x08,
+    "00000000"
+};
+
+
 /*===========================================================================*/
 /* Driver local functions.                                                   */
 /*===========================================================================*/
@@ -373,7 +386,8 @@ void msdStop(USBMassStorageDriver *msdp) {
  */
 void msdStart(USBMassStorageDriver *msdp, USBDriver *usbp,
               BaseBlockDevice *blkdev, uint8_t *blkbuf,
-              const scsi_inquiry_response_t *inquiry) {
+              const scsi_inquiry_response_t *inquiry,
+              const scsi_unit_serial_number_inquiry_response_t *serialInquiry) {
 
   osalDbgCheck((msdp != NULL) && (usbp != NULL)
               && (blkdev != NULL) && (blkbuf != NULL));
@@ -393,6 +407,12 @@ void msdStart(USBMassStorageDriver *msdp, USBDriver *usbp,
   else {
     msdp->scsi_config.inquiry_response = inquiry;
   }
+  if (NULL == serialInquiry) {
+    msdp->scsi_config.unit_serial_number_inquiry_response = &default_scsi_unit_serial_number_inquiry_response;
+  }
+  else {
+    msdp->scsi_config.unit_serial_number_inquiry_response = serialInquiry;
+  }
   msdp->scsi_config.blkbuf = blkbuf;
   msdp->scsi_config.blkdev = blkdev;
   msdp->scsi_config.transport = &msdp->scsi_transport;
-- 
cgit v1.2.3