summaryrefslogtreecommitdiff
path: root/src/class
diff options
context:
space:
mode:
authorhathach <[email protected]>2020-11-24 23:42:30 +0700
committerhathach <[email protected]>2020-11-24 23:42:30 +0700
commitf5e13d589826b25791464f2fe2050d36739ad56e (patch)
treef5a8d71d7e31653ce5982eb68bb869754883fd30 /src/class
parent218b80e63ab6ff87c1851e403f08b3d716d68f5e (diff)
msc only invoke scsi complete callback after status transaction is complete
Diffstat (limited to 'src/class')
-rw-r--r--src/class/msc/msc_device.c36
1 files changed, 18 insertions, 18 deletions
diff --git a/src/class/msc/msc_device.c b/src/class/msc/msc_device.c
index cfb8a43a3..a4ea5f6fb 100644
--- a/src/class/msc/msc_device.c
+++ b/src/class/msc/msc_device.c
@@ -585,6 +585,24 @@ bool mscd_xfer_cb(uint8_t rhport, uint8_t ep_addr, xfer_result_t event, uint32_t
TU_LOG2(" SCSI Status: %u\r\n", p_csw->status);
// TU_LOG2_MEM(p_csw, xferred_bytes, 2);
+ // Invoke complete callback if defined
+ // Note: There is racing issue with samd51 + qspi flash testing with arduino
+ // if complete_cb() is invoked after queuing the status.
+ switch(p_cbw->command[0])
+ {
+ case SCSI_CMD_READ_10:
+ if ( tud_msc_read10_complete_cb ) tud_msc_read10_complete_cb(p_cbw->lun);
+ break;
+
+ case SCSI_CMD_WRITE_10:
+ if ( tud_msc_write10_complete_cb ) tud_msc_write10_complete_cb(p_cbw->lun);
+ break;
+
+ default:
+ if ( tud_msc_scsi_complete_cb ) tud_msc_scsi_complete_cb(p_cbw->lun, p_cbw->command);
+ break;
+ }
+
// Move to default CMD stage
p_msc->stage = MSC_STAGE_CMD;
@@ -608,24 +626,6 @@ bool mscd_xfer_cb(uint8_t rhport, uint8_t ep_addr, xfer_result_t event, uint32_t
}
else
{
- // Invoke complete callback if defined
- // Note: There is racing issue with samd51 + qspi flash testing with arduino
- // if complete_cb() is invoked after queuing the status.
- switch(p_cbw->command[0])
- {
- case SCSI_CMD_READ_10:
- if ( tud_msc_read10_complete_cb ) tud_msc_read10_complete_cb(p_cbw->lun);
- break;
-
- case SCSI_CMD_WRITE_10:
- if ( tud_msc_write10_complete_cb ) tud_msc_write10_complete_cb(p_cbw->lun);
- break;
-
- default:
- if ( tud_msc_scsi_complete_cb ) tud_msc_scsi_complete_cb(p_cbw->lun, p_cbw->command);
- break;
- }
-
// Move to Status Sent stage
p_msc->stage = MSC_STAGE_STATUS_SENT;