📄 usb_scsi.txt
字号:
;;;173 {
;;;174 Request_Sense_data_Length = CBW.CB[4];
;;;175 }
;;;176 else
;;;177 {
;;;178 Request_Sense_data_Length = REQUEST_SENSE_DATA_LEN;
000008 2112 MOVS r1,#0x12
|L10.10|
;;;179 }
;;;180 Transfer_Data_Request(Scsi_Sense_Data, Request_Sense_data_Length);
00000a 4802 LDR r0,|L10.20|
00000c f7ffbffe B.W Transfer_Data_Request
;;;181 }
;;;182
ENDP
|L10.16|
DCD ||CBW||
|L10.20|
DCD Scsi_Sense_Data
AREA ||i.SCSI_Start_Stop_Unit_Cmd||, CODE, READONLY, ALIGN=1
SCSI_Start_Stop_Unit_Cmd PROC
;;;203 *******************************************************************************/
;;;204 void SCSI_Start_Stop_Unit_Cmd(u8 lun)
000000 2101 MOVS r1,#1
;;;205 {
;;;206 Set_CSW (CSW_CMD_PASSED, SEND_CSW_ENABLE);
000002 2000 MOVS r0,#0
000004 f7ffbffe B.W Set_CSW
;;;207 }
;;;208
ENDP
AREA ||i.SCSI_TestUnitReady_Cmd||, CODE, READONLY, ALIGN=2
SCSI_TestUnitReady_Cmd PROC
;;;325 *******************************************************************************/
;;;326 void SCSI_TestUnitReady_Cmd(u8 lun)
000000 b510 PUSH {r4,lr}
;;;327 {
;;;328 if (MAL_GetStatus(lun))
000002 f7fffffe BL MAL_GetStatus
000006 b168 CBZ r0,|L12.36|
000008 4809 LDR r0,|L12.48|
00000a 2102 MOVS r1,#2
00000c 7081 STRB r1,[r0,#2]
00000e 213a MOVS r1,#0x3a
000010 7301 STRB r1,[r0,#0xc]
;;;329 {
;;;330 Set_Scsi_Sense_Data(CBW.bLUN, NOT_READY, MEDIUM_NOT_PRESENT);
;;;331 Set_CSW (CSW_CMD_FAILED, SEND_CSW_ENABLE);
000012 2101 MOVS r1,#1
000014 4608 MOV r0,r1
000016 f7fffffe BL Set_CSW
;;;332 Bot_Abort(DIR_IN);
00001a e8bd4010 POP {r4,lr}
00001e 2000 MOVS r0,#0
000020 f7ffbffe B.W Bot_Abort
|L12.36|
;;;333 return;
;;;334 }
;;;335 else
;;;336 {
;;;337 Set_CSW (CSW_CMD_PASSED, SEND_CSW_ENABLE);
000024 2101 MOVS r1,#1
000026 e8bd4010 POP {r4,lr}
00002a 2000 MOVS r0,#0
00002c f7ffbffe B.W Set_CSW
;;;338 }
;;;339 }
;;;340 /*******************************************************************************
ENDP
|L12.48|
DCD Scsi_Sense_Data
AREA ||i.SCSI_Valid_Cmd||, CODE, READONLY, ALIGN=2
SCSI_Valid_Cmd PROC
;;;307 *******************************************************************************/
;;;308 void SCSI_Valid_Cmd(u8 lun)
000000 b510 PUSH {r4,lr}
;;;309 {
;;;310 if (CBW.dDataLength != 0)
000002 480a LDR r0,|L13.44|
000004 6880 LDR r0,[r0,#8] ; CBW
000006 b150 CBZ r0,|L13.30|
;;;311 {
;;;312 Bot_Abort(BOTH_DIR);
000008 2002 MOVS r0,#2
00000a f7fffffe BL Bot_Abort
00000e 4808 LDR r0,|L13.48|
000010 2105 MOVS r1,#5
000012 7081 STRB r1,[r0,#2]
000014 2120 MOVS r1,#0x20
000016 7301 STRB r1,[r0,#0xc]
;;;313 Set_Scsi_Sense_Data(CBW.bLUN, ILLEGAL_REQUEST, INVALID_COMMAND);
;;;314 Set_CSW (CSW_CMD_FAILED, SEND_CSW_DISABLE);
000018 2100 MOVS r1,#0
00001a 2001 MOVS r0,#1
00001c e001 B |L13.34|
|L13.30|
;;;315 }
;;;316 else
;;;317 Set_CSW (CSW_CMD_PASSED, SEND_CSW_ENABLE);
00001e 2101 MOVS r1,#1
000020 2000 MOVS r0,#0
|L13.34|
000022 e8bd4010 POP {r4,lr}
000026 f7ffbffe B.W Set_CSW
;;;318 }
;;;319 /*******************************************************************************
ENDP
00002a 0000 DCW 0x0000
|L13.44|
DCD ||CBW||
|L13.48|
DCD Scsi_Sense_Data
AREA ||i.SCSI_Verify10_Cmd||, CODE, READONLY, ALIGN=2
SCSI_Verify10_Cmd PROC
;;;287 *******************************************************************************/
;;;288 void SCSI_Verify10_Cmd(u8 lun)
000000 b510 PUSH {r4,lr}
;;;289 {
;;;290 if ((CBW.dDataLength == 0) && !(CBW.CB[1] & BLKVFY))/* BLKVFY not set*/
000002 480b LDR r0,|L14.48|
000004 6881 LDR r1,[r0,#8] ; CBW
000006 b929 CBNZ r1,|L14.20|
000008 7c00 LDRB r0,[r0,#0x10] ; CBW
00000a 0740 LSLS r0,r0,#29
00000c d402 BMI |L14.20|
;;;291 {
;;;292 Set_CSW (CSW_CMD_PASSED, SEND_CSW_ENABLE);
00000e 2101 MOVS r1,#1
000010 2000 MOVS r0,#0
000012 e009 B |L14.40|
|L14.20|
;;;293 }
;;;294 else
;;;295 {
;;;296 Bot_Abort(BOTH_DIR);
000014 2002 MOVS r0,#2
000016 f7fffffe BL Bot_Abort
00001a 4806 LDR r0,|L14.52|
00001c 2105 MOVS r1,#5
00001e 7081 STRB r1,[r0,#2]
000020 2124 MOVS r1,#0x24
000022 7301 STRB r1,[r0,#0xc]
;;;297 Set_Scsi_Sense_Data(CBW.bLUN, ILLEGAL_REQUEST, INVALID_FIELED_IN_COMMAND);
;;;298 Set_CSW (CSW_CMD_FAILED, SEND_CSW_DISABLE);
000024 2100 MOVS r1,#0
000026 2001 MOVS r0,#1
|L14.40|
000028 e8bd4010 POP {r4,lr}
00002c f7ffbffe B.W Set_CSW
;;;299 }
;;;300 }
;;;301 /*******************************************************************************
ENDP
|L14.48|
DCD ||CBW||
|L14.52|
DCD Scsi_Sense_Data
AREA ||i.SCSI_Write10_Cmd||, CODE, READONLY, ALIGN=2
SCSI_Write10_Cmd PROC
;;;251 *******************************************************************************/
;;;252 void SCSI_Write10_Cmd(u8 lun , u32 LBA , u32 BlockNbr)
000000 b570 PUSH {r4-r6,lr}
;;;253 {
;;;254
;;;255 if (Bot_State == BOT_IDLE)
000002 4d16 LDR r5,|L15.92|
000004 782c LDRB r4,[r5,#0] ; Bot_State
000006 bb14 CBNZ r4,|L15.78|
;;;256 {
;;;257 if (!(SCSI_Address_Management(CBW.bLUN, SCSI_WRITE10 , LBA, BlockNbr)))/*address out of range*/
000008 4c15 LDR r4,|L15.96|
00000a 4613 MOV r3,r2
00000c 460a MOV r2,r1
00000e 7b60 LDRB r0,[r4,#0xd] ; CBW
000010 212a MOVS r1,#0x2a
000012 f7fffffe BL SCSI_Address_Management
000016 2800 CMP r0,#0
000018 d01f BEQ |L15.90|
;;;258 {
;;;259 return;
;;;260 }
;;;261
;;;262 if ((CBW.bmFlags & 0x80) == 0)
00001a 7b20 LDRB r0,[r4,#0xc] ; CBW
00001c 0600 LSLS r0,r0,#24
00001e d408 BMI |L15.50|
;;;263 {
;;;264 Bot_State = BOT_DATA_OUT;
000020 2001 MOVS r0,#1
000022 7028 STRB r0,[r5,#0]
;;;265 SetEPRxStatus(ENDP2, EP_RX_VALID);
000024 e8bd4070 POP {r4-r6,lr}
000028 f44f5140 MOV r1,#0x3000
00002c 2002 MOVS r0,#2
00002e f7ffbffe B.W SetEPRxStatus
|L15.50|
;;;266 }
;;;267 else
;;;268 {
;;;269 Bot_Abort(DIR_IN);
000032 2000 MOVS r0,#0
000034 f7fffffe BL Bot_Abort
000038 480a LDR r0,|L15.100|
00003a 2105 MOVS r1,#5
00003c 7081 STRB r1,[r0,#2]
00003e 2124 MOVS r1,#0x24
000040 7301 STRB r1,[r0,#0xc]
;;;270 Set_Scsi_Sense_Data(CBW.bLUN, ILLEGAL_REQUEST, INVALID_FIELED_IN_COMMAND);
;;;271 Set_CSW (CSW_CMD_FAILED, SEND_CSW_DISABLE);
000042 e8bd4070 POP {r4-r6,lr}
000046 2100 MOVS r1,#0
000048 2001 MOVS r0,#1
00004a f7ffbffe B.W Set_CSW
|L15.78|
;;;272 }
;;;273 return;
;;;274 }
;;;275 else if (Bot_State == BOT_DATA_OUT)
00004e 2c01 CMP r4,#1
000050 d103 BNE |L15.90|
;;;276 {
;;;277 Write_Memory(lun , LBA , BlockNbr);
000052 e8bd4070 POP {r4-r6,lr}
000056 f7ffbffe B.W Write_Memory
|L15.90|
;;;278 }
;;;279 }
00005a bd70 POP {r4-r6,pc}
;;;280
ENDP
|L15.92|
DCD Bot_State
|L15.96|
DCD ||CBW||
|L15.100|
DCD Scsi_Sense_Data
AREA ||i.Set_Scsi_Sense_Data||, CODE, READONLY, ALIGN=2
Set_Scsi_Sense_Data PROC
;;;190 *******************************************************************************/
;;;191 void Set_Scsi_Sense_Data(u8 lun, u8 Sens_Key, u8 Asc)
000000 4801 LDR r0,|L16.8|
;;;192 {
;;;193 Scsi_Sense_Data[2] = Sens_Key;
000002 7081 STRB r1,[r0,#2]
;;;194 Scsi_Sense_Data[12] = Asc;
000004 7302 STRB r2,[r0,#0xc]
;;;195 }
000006 4770 BX lr
;;;196
ENDP
|L16.8|
DCD Scsi_Sense_Data
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -