Skip to content

Commit 22cedef

Browse files
committed
stmhal/usbdev: For MSC implement SCSI SYNCHRONIZE_CACHE command.
Currently just a dummy command that returns "success", but it's needed for some O/S's to correctly talk with the SCSI layer.
1 parent e1cda00 commit 22cedef

2 files changed

Lines changed: 14 additions & 0 deletions

File tree

stmhal/usbdev/class/inc/usbd_msc_scsi.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,8 @@
5555
#define SCSI_MODE_SENSE6 0x1A
5656
#define SCSI_MODE_SENSE10 0x5A
5757
#define SCSI_ALLOW_MEDIUM_REMOVAL 0x1E
58+
#define SCSI_SYNCHRONIZE_CACHE10 0x35
59+
#define SCSI_SYNCHRONIZE_CACHE16 0x91
5860
#define SCSI_READ6 0x08
5961
#define SCSI_READ10 0x28
6062
#define SCSI_READ12 0xA8

stmhal/usbdev/class/src/usbd_msc_scsi.c

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,7 @@ static int8_t SCSI_StartStopUnit(USBD_HandleTypeDef *pdev, uint8_t lun, uint8_t
8989
static int8_t SCSI_AllowMediumRemoval(USBD_HandleTypeDef *pdev, uint8_t lun, uint8_t *params);
9090
static int8_t SCSI_ModeSense6 (USBD_HandleTypeDef *pdev, uint8_t lun, uint8_t *params);
9191
static int8_t SCSI_ModeSense10 (USBD_HandleTypeDef *pdev, uint8_t lun, uint8_t *params);
92+
static int8_t SCSI_SynchronizeCache(USBD_HandleTypeDef *pdev, uint8_t lun, uint8_t *params);
9293
static int8_t SCSI_Write10(USBD_HandleTypeDef *pdev, uint8_t lun , uint8_t *params);
9394
static int8_t SCSI_Read10(USBD_HandleTypeDef *pdev, uint8_t lun , uint8_t *params);
9495
static int8_t SCSI_Verify10(USBD_HandleTypeDef *pdev, uint8_t lun, uint8_t *params);
@@ -151,6 +152,10 @@ int8_t SCSI_ProcessCmd(USBD_HandleTypeDef *pdev,
151152
case SCSI_MODE_SENSE10:
152153
return SCSI_ModeSense10 (pdev, lun, params);
153154

155+
case SCSI_SYNCHRONIZE_CACHE10:
156+
case SCSI_SYNCHRONIZE_CACHE16:
157+
return SCSI_SynchronizeCache(pdev, lun, params);
158+
154159
case SCSI_READ_FORMAT_CAPACITIES:
155160
return SCSI_ReadFormatCapacity(pdev, lun, params);
156161

@@ -374,6 +379,13 @@ static int8_t SCSI_ModeSense10 (USBD_HandleTypeDef *pdev, uint8_t lun, uint8_t
374379
return 0;
375380
}
376381

382+
static int8_t SCSI_SynchronizeCache(USBD_HandleTypeDef *pdev, uint8_t lun, uint8_t *params) {
383+
// nothing to synchronize, so just return "success"
384+
USBD_MSC_BOT_HandleTypeDef *hmsc = pdev->pClassData;
385+
hmsc->bot_data_length = 0;
386+
return 0;
387+
}
388+
377389
/**
378390
* @brief SCSI_RequestSense
379391
* Process Request Sense command

0 commit comments

Comments
 (0)