File tree Expand file tree Collapse file tree 3 files changed +9
-9
lines changed Expand file tree Collapse file tree 3 files changed +9
-9
lines changed Original file line number Diff line number Diff line change @@ -288,7 +288,7 @@ func (m *msc) run(b []byte, isEpOut bool) bool {
288
288
m .sentBytes = 0
289
289
m .respStatus = csw .StatusPassed
290
290
291
- m .scsiCmdBegin (b )
291
+ m .scsiCmdBegin ()
292
292
293
293
case mscStateData :
294
294
// Transfer data
@@ -322,9 +322,8 @@ func (m *msc) run(b []byte, isEpOut bool) bool {
322
322
if m .totalBytes > m .sentBytes && m .cbw .isIn () {
323
323
// 6.7.2 The Thirteen Cases - Case 5 (Hi > Di): STALL before status
324
324
m .stallEndpoint (usb .MSC_ENDPOINT_IN )
325
- } else if m .sendZLP || m .queuedBytes == m .maxPacketSize {
326
- // If the last packet is wMaxPacketSize we need to first send a zero-length packet
327
- // to indicate the end of the transfer before we can send a CSW
325
+ } else if m .sendZLP {
326
+ // Send a zero-length packet to force the end of the transfer before we send a CSW
328
327
m .queuedBytes = 0
329
328
m .sendZLP = false
330
329
m .sendUSBPacket (m .buf [:0 ])
Original file line number Diff line number Diff line change @@ -7,14 +7,14 @@ import (
7
7
"machine/usb/msc/scsi"
8
8
)
9
9
10
- func (m * msc ) scsiCmdBegin (b [] byte ) {
10
+ func (m * msc ) scsiCmdBegin () {
11
11
cmd := m .cbw .SCSICmd ()
12
12
cmdType := cmd .CmdType ()
13
13
14
14
// Handle multi-packet commands
15
15
switch cmdType {
16
16
case scsi .CmdRead , scsi .CmdWrite :
17
- m .scsiCmdReadWrite (cmd , b )
17
+ m .scsiCmdReadWrite (cmd )
18
18
return
19
19
case scsi .CmdUnmap :
20
20
m .scsiCmdUnmap (cmd )
Original file line number Diff line number Diff line change 8
8
9
9
var invalidWriteError = errors .New ("invalid write offset or length" )
10
10
11
- func (m * msc ) scsiCmdReadWrite (cmd scsi.Cmd , b [] byte ) {
11
+ func (m * msc ) scsiCmdReadWrite (cmd scsi.Cmd ) {
12
12
status := m .validateScsiReadWrite (cmd )
13
13
if status != csw .StatusPassed {
14
14
m .sendScsiError (status , scsi .SenseIllegalRequest , scsi .SenseCodeInvalidCmdOpCode )
@@ -62,8 +62,9 @@ func (m *msc) validateScsiReadWrite(cmd scsi.Cmd) csw.Status {
62
62
63
63
func (m * msc ) usbToRawOffset (lba , offset uint32 ) (int64 , int64 ) {
64
64
// Convert the emulated block address to the underlying hardware block's start and offset
65
- byteOffset := lba * m .blockSizeUSB + m .blockOffset + offset
66
- return int64 (byteOffset ), int64 (byteOffset % m .blockSizeRaw )
65
+ rawLBA := (lba * m .blockSizeUSB + offset ) / m .blockSizeRaw
66
+ rawBlockOffset := int64 ((lba * m .blockSizeUSB + offset ) % m .blockSizeRaw )
67
+ return int64 (m .blockOffset + rawLBA * m .blockSizeRaw ), rawBlockOffset
67
68
}
68
69
69
70
func (m * msc ) readBlock (b []byte , lba , offset uint32 ) (n int , err error ) {
You can’t perform that action at this time.
0 commit comments