summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorhathach <[email protected]>2021-08-27 17:50:02 +0700
committerhathach <[email protected]>2021-08-27 17:50:02 +0700
commit2667ce6981b409a0431a00d48a37f58bf3aa5875 (patch)
tree6ac1e8064a5c447b11c309bafc77850f9bacbb4c /src
parent893dceb1984d6304918a45ec8be5a63d3e9993ca (diff)
fix BOT case 2 test compliant
Diffstat (limited to 'src')
-rw-r--r--src/class/msc/msc_device.c34
1 files changed, 7 insertions, 27 deletions
diff --git a/src/class/msc/msc_device.c b/src/class/msc/msc_device.c
index 716b7e503..cc495a1c4 100644
--- a/src/class/msc/msc_device.c
+++ b/src/class/msc/msc_device.c
@@ -430,32 +430,6 @@ bool mscd_xfer_cb(uint8_t rhport, uint8_t ep_addr, xfer_result_t event, uint32_t
TU_BREAKPOINT();
}
}
-
-// // Accumulate data so far
-// p_msc->xferred_len += xferred_bytes;
-//
-// if ( p_msc->xferred_len >= p_msc->total_len )
-// {
-// // Data Stage is complete
-// p_msc->stage = MSC_STAGE_STATUS;
-// }
-// else
-// {
-// // READ10 & WRITE10 Can be executed with large bulk of data e.g write 8K bytes (several flash write)
-// // We break it into multiple smaller command whose data size is up to CFG_TUD_MSC_EP_BUFSIZE
-// if (SCSI_CMD_READ_10 == p_cbw->command[0])
-// {
-// proc_read10_cmd(rhport, p_msc);
-// }
-// else if (SCSI_CMD_WRITE_10 == p_cbw->command[0])
-// {
-// proc_write10_cmd(rhport, p_msc);
-// }else
-// {
-// // No other command take more than one transfer yet -> unlikely error
-// TU_BREAKPOINT();
-// }
-// }
break;
case MSC_STAGE_STATUS:
@@ -714,7 +688,13 @@ static void proc_read10_cmd(uint8_t rhport, mscd_interface_t* p_msc)
msc_cbw_t const * p_cbw = &p_msc->cbw;
uint16_t const block_sz = rdwr10_get_blocksize(p_cbw);
- TU_ASSERT(block_sz, ); // prevent div by zero
+
+ if ( block_sz == 0 )
+ {
+ // 6.7.1 BOT The 13 Cases: case 2 and 3 when cbw->total_bytes == 0
+ fail_scsi_op(rhport, p_msc, MSC_CSW_STATUS_FAILED);
+ return;
+ }
// Adjust lba with transferred bytes
uint32_t const lba = rdwr10_get_lba(p_cbw->command) + (p_msc->xferred_len / block_sz);