📄 usb_scsi.txt
字号:
; generated by ARM C/C++ Compiler with , RVCT4.0 [Build 524] for uVision
; commandline ArmCC [--split_sections --debug -c --asm --interleave -o.\Obj\usb_scsi.o --depend=.\Obj\usb_scsi.d --device=DARMSTM --apcs=interwork -O3 -I..\..\include -I..\..\..\FWLib\library\inc -I..\..\..\USBLib\library\inc -I..\..\Config -I..\..\GUI\Core -I..\..\GUI\Font -I..\..\GUI\ConvertColor -I..\..\GUI\AntiAlias -I..\..\GUI\ConvertMono -I..\..\GUI\JPEG -I..\..\GUI\MemDev -I..\..\GUI\MultiLayer -I..\..\GUI\Widget -I..\..\GUI\WM -IC:\Keil\ARM\INC\ST\STM32F10x ..\..\source\usb_scsi.c]
THUMB
AREA ||i.SCSI_Address_Management||, CODE, READONLY, ALIGN=2
SCSI_Address_Management PROC
;;;396 *******************************************************************************/
;;;397 bool SCSI_Address_Management(u8 lun , u8 Cmd , u32 LBA , u32 BlockNbr)
000000 b570 PUSH {r4-r6,lr}
;;;398 {
;;;399
;;;400 if ((LBA + BlockNbr) > Mass_Block_Count[lun] )
000002 4c16 LDR r4,|L1.92|
000004 441a ADD r2,r2,r3
000006 f8546020 LDR r6,[r4,r0,LSL #2]
00000a 2405 MOVS r4,#5
00000c 4d14 LDR r5,|L1.96|
00000e 42b2 CMP r2,r6
000010 d90a BLS |L1.40|
;;;401 {
;;;402 if (Cmd == SCSI_WRITE10)
000012 292a CMP r1,#0x2a
000014 d102 BNE |L1.28|
;;;403 {
;;;404 Bot_Abort(BOTH_DIR);
000016 2002 MOVS r0,#2
000018 f7fffffe BL Bot_Abort
|L1.28|
;;;405 }
;;;406 Bot_Abort(DIR_IN);
00001c 2000 MOVS r0,#0
00001e f7fffffe BL Bot_Abort
000022 70ac STRB r4,[r5,#2]
000024 2021 MOVS r0,#0x21
;;;407 Set_Scsi_Sense_Data(lun, ILLEGAL_REQUEST, ADDRESS_OUT_OF_RANGE);
;;;408 Set_CSW (CSW_CMD_FAILED, SEND_CSW_DISABLE);
;;;409 return (FALSE);
000026 e010 B |L1.74|
|L1.40|
;;;410 }
;;;411
;;;412
;;;413 if (CBW.dDataLength != BlockNbr * Mass_Block_Size[lun])
000028 4e0f LDR r6,|L1.104|
00002a 4a0e LDR r2,|L1.100|
00002c f8560020 LDR r0,[r6,r0,LSL #2]
000030 6892 LDR r2,[r2,#8] ; CBW
000032 4358 MULS r0,r3,r0
000034 4282 CMP r2,r0
000036 d00f BEQ |L1.88|
;;;414 {
;;;415 if (Cmd == SCSI_WRITE10)
000038 292a CMP r1,#0x2a
00003a d101 BNE |L1.64|
;;;416 {
;;;417 Bot_Abort(BOTH_DIR);
00003c 2002 MOVS r0,#2
00003e e000 B |L1.66|
|L1.64|
;;;418 }
;;;419 else
;;;420 {
;;;421 Bot_Abort(DIR_IN);
000040 2000 MOVS r0,#0
|L1.66|
000042 f7fffffe BL Bot_Abort
000046 70ac STRB r4,[r5,#2]
000048 2024 MOVS r0,#0x24
|L1.74|
00004a 7328 STRB r0,[r5,#0xc]
;;;422 }
;;;423 Set_Scsi_Sense_Data(CBW.bLUN, ILLEGAL_REQUEST, INVALID_FIELED_IN_COMMAND);
;;;424 Set_CSW (CSW_CMD_FAILED, SEND_CSW_DISABLE);
00004c 2100 MOVS r1,#0
00004e 2001 MOVS r0,#1
000050 f7fffffe BL Set_CSW
;;;425 return (FALSE);
000054 2000 MOVS r0,#0
;;;426 }
;;;427 return (TRUE);
;;;428 }
000056 bd70 POP {r4-r6,pc}
|L1.88|
000058 2001 MOVS r0,#1 ;427
00005a bd70 POP {r4-r6,pc}
;;;429 /******************* (C) COPYRIGHT 2008 STMicroelectronics *****END OF FILE****/
ENDP
|L1.92|
DCD Mass_Block_Count
|L1.96|
DCD Scsi_Sense_Data
|L1.100|
DCD ||CBW||
|L1.104|
DCD Mass_Block_Size
AREA ||i.SCSI_Format_Cmd||, CODE, READONLY, ALIGN=2
SCSI_Format_Cmd PROC
;;;346 *******************************************************************************/
;;;347 void SCSI_Format_Cmd(u8 lun)
000000 b510 PUSH {r4,lr}
;;;348 {
;;;349 if (MAL_GetStatus(lun))
000002 f7fffffe BL MAL_GetStatus
000006 b168 CBZ r0,|L2.36|
000008 480a LDR r0,|L2.52|
00000a 2102 MOVS r1,#2
00000c 7081 STRB r1,[r0,#2]
00000e 213a MOVS r1,#0x3a
000010 7301 STRB r1,[r0,#0xc]
;;;350 {
;;;351 Set_Scsi_Sense_Data(CBW.bLUN, NOT_READY, MEDIUM_NOT_PRESENT);
;;;352 Set_CSW (CSW_CMD_FAILED, SEND_CSW_ENABLE);
000012 2101 MOVS r1,#1
000014 4608 MOV r0,r1
000016 f7fffffe BL Set_CSW
;;;353 Bot_Abort(DIR_IN);
00001a e8bd4010 POP {r4,lr}
00001e 2000 MOVS r0,#0
000020 f7ffbffe B.W Bot_Abort
|L2.36|
;;;354 return;
;;;355 }
;;;356 else
;;;357 {
;;;358 NAND_Format();
000024 f7fffffe BL NAND_Format
;;;359 Set_CSW (CSW_CMD_PASSED, SEND_CSW_ENABLE);
000028 2101 MOVS r1,#1
00002a e8bd4010 POP {r4,lr}
00002e 2000 MOVS r0,#0
000030 f7ffbffe B.W Set_CSW
;;;360 }
;;;361 }
;;;362 /*******************************************************************************
ENDP
|L2.52|
DCD Scsi_Sense_Data
AREA ||i.SCSI_Inquiry_Cmd||, CODE, READONLY, ALIGN=2
SCSI_Inquiry_Cmd PROC
;;;47 *******************************************************************************/
;;;48 void SCSI_Inquiry_Cmd(u8 lun)
000000 4908 LDR r1,|L3.36|
;;;49 {
;;;50 u8* Inquiry_Data;
;;;51 u16 Inquiry_Data_Length;
;;;52
;;;53 if (CBW.CB[1] & 0x01)/*Evpd is set*/
000002 7c0a LDRB r2,[r1,#0x10] ; CBW
000004 07d2 LSLS r2,r2,#31
000006 d002 BEQ |L3.14|
;;;54 {
;;;55 Inquiry_Data = Page00_Inquiry_Data;
000008 4807 LDR r0,|L3.40|
;;;56 Inquiry_Data_Length = 5;
00000a 2105 MOVS r1,#5
00000c e007 B |L3.30|
|L3.14|
;;;57 }
;;;58 else
;;;59 {
;;;60
;;;61 if ( lun == 0)
00000e b908 CBNZ r0,|L3.20|
;;;62 {
;;;63 Inquiry_Data = Standard_Inquiry_Data;
000010 4806 LDR r0,|L3.44|
000012 e000 B |L3.22|
|L3.20|
;;;64 }
;;;65 else
;;;66 {
;;;67 Inquiry_Data = Standard_Inquiry_Data2;
000014 4806 LDR r0,|L3.48|
|L3.22|
;;;68 }
;;;69
;;;70 if (CBW.CB[4] <= STANDARD_INQUIRY_DATA_LEN)
000016 7cc9 LDRB r1,[r1,#0x13] ; CBW
000018 2924 CMP r1,#0x24
00001a d900 BLS |L3.30|
;;;71 Inquiry_Data_Length = CBW.CB[4];
;;;72 else
;;;73 Inquiry_Data_Length = STANDARD_INQUIRY_DATA_LEN;
00001c 2124 MOVS r1,#0x24
|L3.30|
;;;74
;;;75 }
;;;76 Transfer_Data_Request(Inquiry_Data, Inquiry_Data_Length);
00001e f7ffbffe B.W Transfer_Data_Request
;;;77 }
;;;78
ENDP
000022 0000 DCW 0x0000
|L3.36|
DCD ||CBW||
|L3.40|
DCD Page00_Inquiry_Data
|L3.44|
DCD Standard_Inquiry_Data
|L3.48|
DCD Standard_Inquiry_Data2
AREA ||i.SCSI_Invalid_Cmd||, CODE, READONLY, ALIGN=2
SCSI_Invalid_Cmd PROC
;;;368 *******************************************************************************/
;;;369 void SCSI_Invalid_Cmd(u8 lun)
000000 b510 PUSH {r4,lr}
;;;370 {
;;;371 if (CBW.dDataLength == 0)
000002 480b LDR r0,|L4.48|
000004 6881 LDR r1,[r0,#8] ; CBW
000006 b111 CBZ r1,|L4.14|
;;;372 {
;;;373 Bot_Abort(DIR_IN);
;;;374 }
;;;375 else
;;;376 {
;;;377 if ((CBW.bmFlags & 0x80) != 0)
000008 7b00 LDRB r0,[r0,#0xc] ; CBW
00000a 0600 LSLS r0,r0,#24
00000c d501 BPL |L4.18|
|L4.14|
00000e 2000 MOVS r0,#0 ;373
000010 e000 B |L4.20|
|L4.18|
;;;378 {
;;;379 Bot_Abort(DIR_IN);
;;;380 }
;;;381 else
;;;382 {
;;;383 Bot_Abort(BOTH_DIR);
000012 2002 MOVS r0,#2
|L4.20|
000014 f7fffffe BL Bot_Abort
000018 4806 LDR r0,|L4.52|
00001a 2105 MOVS r1,#5 ;379
00001c 7081 STRB r1,[r0,#2] ;379
00001e 2120 MOVS r1,#0x20 ;379
000020 7301 STRB r1,[r0,#0xc] ;379
;;;384 }
;;;385 }
;;;386 Set_Scsi_Sense_Data(CBW.bLUN, ILLEGAL_REQUEST, INVALID_COMMAND);
;;;387 Set_CSW (CSW_CMD_FAILED, SEND_CSW_DISABLE);
000022 2100 MOVS r1,#0
000024 e8bd4010 POP {r4,lr}
000028 2001 MOVS r0,#1
00002a f7ffbffe B.W Set_CSW
;;;388 }
;;;389
ENDP
00002e 0000 DCW 0x0000
|L4.48|
DCD ||CBW||
|L4.52|
DCD Scsi_Sense_Data
AREA ||i.SCSI_ModeSense10_Cmd||, CODE, READONLY, ALIGN=2
SCSI_ModeSense10_Cmd PROC
;;;155 *******************************************************************************/
;;;156 void SCSI_ModeSense10_Cmd (u8 lun)
000000 2108 MOVS r1,#8
;;;157 {
;;;158 Transfer_Data_Request(Mode_Sense10_data, MODE_SENSE10_DATA_LEN);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -