📄 usb_scsi.txt
字号:
000002 4801 LDR r0,|L5.8|
000004 f7ffbffe B.W Transfer_Data_Request
;;;159 }
;;;160
ENDP
|L5.8|
DCD Mode_Sense10_data
AREA ||i.SCSI_ModeSense6_Cmd||, CODE, READONLY, ALIGN=2
SCSI_ModeSense6_Cmd PROC
;;;143 *******************************************************************************/
;;;144 void SCSI_ModeSense6_Cmd (u8 lun)
000000 2104 MOVS r1,#4
;;;145 {
;;;146 Transfer_Data_Request(Mode_Sense6_data, MODE_SENSE6_DATA_LEN);
000002 4801 LDR r0,|L6.8|
000004 f7ffbffe B.W Transfer_Data_Request
;;;147 }
;;;148
ENDP
|L6.8|
DCD Mode_Sense6_data
AREA ||i.SCSI_Read10_Cmd||, CODE, READONLY, ALIGN=2
SCSI_Read10_Cmd PROC
;;;215 *******************************************************************************/
;;;216 void SCSI_Read10_Cmd(u8 lun , u32 LBA , u32 BlockNbr)
000000 e92d41f0 PUSH {r4-r8,lr}
;;;217 {
;;;218
;;;219 if (Bot_State == BOT_IDLE)
000004 4c16 LDR r4,|L7.96|
000006 4605 MOV r5,r0 ;217
000008 7820 LDRB r0,[r4,#0] ; Bot_State
00000a 460e MOV r6,r1 ;217
00000c 4690 MOV r8,r2 ;217
00000e b9e0 CBNZ r0,|L7.74|
;;;220 {
;;;221 if (!(SCSI_Address_Management(CBW.bLUN, SCSI_READ10, LBA, BlockNbr)))/*address out of range*/
000010 4f14 LDR r7,|L7.100|
000012 4643 MOV r3,r8
000014 7b78 LDRB r0,[r7,#0xd] ; CBW
000016 4632 MOV r2,r6
000018 2128 MOVS r1,#0x28
00001a f7fffffe BL SCSI_Address_Management
00001e 2800 CMP r0,#0
000020 d01c BEQ |L7.92|
;;;222 {
;;;223 return;
;;;224 }
;;;225
;;;226 if ((CBW.bmFlags & 0x80) != 0)
000022 7b38 LDRB r0,[r7,#0xc] ; CBW
000024 0600 LSLS r0,r0,#24
;;;227 {
;;;228 Bot_State = BOT_DATA_IN;
000026 f04f0002 MOV r0,#2
00002a d501 BPL |L7.48|
00002c 7020 STRB r0,[r4,#0]
;;;229 Read_Memory(lun, LBA , BlockNbr);
00002e e00e B |L7.78|
|L7.48|
;;;230 }
;;;231 else
;;;232 {
;;;233 Bot_Abort(BOTH_DIR);
000030 f7fffffe BL Bot_Abort
000034 480c LDR r0,|L7.104|
000036 2105 MOVS r1,#5
000038 7081 STRB r1,[r0,#2]
00003a 2124 MOVS r1,#0x24
00003c 7301 STRB r1,[r0,#0xc]
;;;234 Set_Scsi_Sense_Data(CBW.bLUN, ILLEGAL_REQUEST, INVALID_FIELED_IN_COMMAND);
;;;235 Set_CSW (CSW_CMD_FAILED, SEND_CSW_ENABLE);
00003e e8bd41f0 POP {r4-r8,lr}
000042 2101 MOVS r1,#1
000044 4608 MOV r0,r1
000046 f7ffbffe B.W Set_CSW
|L7.74|
;;;236 }
;;;237 return;
;;;238 }
;;;239 else if (Bot_State == BOT_DATA_IN)
00004a 2802 CMP r0,#2
00004c d106 BNE |L7.92|
|L7.78|
;;;240 {
;;;241 Read_Memory(lun , LBA , BlockNbr);
00004e 4642 MOV r2,r8
000050 4631 MOV r1,r6
000052 4628 MOV r0,r5
000054 e8bd41f0 POP {r4-r8,lr}
000058 f7ffbffe B.W Read_Memory
|L7.92|
;;;242 }
;;;243 }
00005c e8bd81f0 POP {r4-r8,pc}
;;;244
ENDP
|L7.96|
DCD Bot_State
|L7.100|
DCD ||CBW||
|L7.104|
DCD Scsi_Sense_Data
AREA ||i.SCSI_ReadCapacity10_Cmd||, CODE, READONLY, ALIGN=2
SCSI_ReadCapacity10_Cmd PROC
;;;113 *******************************************************************************/
;;;114 void SCSI_ReadCapacity10_Cmd(u8 lun)
000000 b510 PUSH {r4,lr}
;;;115 {
000002 4604 MOV r4,r0
;;;116
;;;117 if (MAL_GetStatus(lun))
000004 f7fffffe BL MAL_GetStatus
000008 b168 CBZ r0,|L8.38|
00000a 4814 LDR r0,|L8.92|
00000c 2102 MOVS r1,#2
00000e 7081 STRB r1,[r0,#2]
000010 213a MOVS r1,#0x3a
000012 7301 STRB r1,[r0,#0xc]
;;;118 {
;;;119 Set_Scsi_Sense_Data(CBW.bLUN, NOT_READY, MEDIUM_NOT_PRESENT);
;;;120 Set_CSW (CSW_CMD_FAILED, SEND_CSW_ENABLE);
000014 2101 MOVS r1,#1
000016 4608 MOV r0,r1
000018 f7fffffe BL Set_CSW
;;;121 Bot_Abort(DIR_IN);
00001c e8bd4010 POP {r4,lr}
000020 2000 MOVS r0,#0
000022 f7ffbffe B.W Bot_Abort
|L8.38|
;;;122 return;
;;;123 }
;;;124
;;;125 ReadCapacity10_Data[0] = (u8)(Mass_Block_Count[lun] - 1 >> 24);
000026 480e LDR r0,|L8.96|
000028 f8501024 LDR r1,[r0,r4,LSL #2]
00002c 480d LDR r0,|L8.100|
00002e 1e49 SUBS r1,r1,#1
000030 0e0a LSRS r2,r1,#24
000032 7002 STRB r2,[r0,#0]
;;;126 ReadCapacity10_Data[1] = (u8)(Mass_Block_Count[lun] - 1 >> 16);
000034 0c0a LSRS r2,r1,#16
000036 7042 STRB r2,[r0,#1]
;;;127 ReadCapacity10_Data[2] = (u8)(Mass_Block_Count[lun] - 1 >> 8);
000038 0a0a LSRS r2,r1,#8
00003a 7082 STRB r2,[r0,#2]
;;;128 ReadCapacity10_Data[3] = (u8)(Mass_Block_Count[lun] - 1);
00003c 70c1 STRB r1,[r0,#3]
;;;129
;;;130 ReadCapacity10_Data[4] = (u8)(Mass_Block_Size[lun] >> 24);
00003e 490a LDR r1,|L8.104|
000040 f8511024 LDR r1,[r1,r4,LSL #2]
000044 0e0a LSRS r2,r1,#24
000046 7102 STRB r2,[r0,#4]
;;;131 ReadCapacity10_Data[5] = (u8)(Mass_Block_Size[lun] >> 16);
000048 0c0a LSRS r2,r1,#16
00004a 7142 STRB r2,[r0,#5]
;;;132 ReadCapacity10_Data[6] = (u8)(Mass_Block_Size[lun] >> 8);
00004c 0a0a LSRS r2,r1,#8
00004e 7182 STRB r2,[r0,#6]
;;;133 ReadCapacity10_Data[7] = (u8)(Mass_Block_Size[lun]);
000050 71c1 STRB r1,[r0,#7]
;;;134 Transfer_Data_Request(ReadCapacity10_Data, READ_CAPACITY10_DATA_LEN);
000052 e8bd4010 POP {r4,lr}
000056 2108 MOVS r1,#8
000058 f7ffbffe B.W Transfer_Data_Request
;;;135 }
;;;136
ENDP
|L8.92|
DCD Scsi_Sense_Data
|L8.96|
DCD Mass_Block_Count
|L8.100|
DCD ReadCapacity10_Data
|L8.104|
DCD Mass_Block_Size
AREA ||i.SCSI_ReadFormatCapacity_Cmd||, CODE, READONLY, ALIGN=2
SCSI_ReadFormatCapacity_Cmd PROC
;;;85 *******************************************************************************/
;;;86 void SCSI_ReadFormatCapacity_Cmd(u8 lun)
000000 b510 PUSH {r4,lr}
;;;87 {
000002 4604 MOV r4,r0
;;;88
;;;89 if (MAL_GetStatus(lun) != 0 )
000004 f7fffffe BL MAL_GetStatus
000008 b168 CBZ r0,|L9.38|
00000a 4813 LDR r0,|L9.88|
00000c 2102 MOVS r1,#2
00000e 7081 STRB r1,[r0,#2]
000010 213a MOVS r1,#0x3a
000012 7301 STRB r1,[r0,#0xc]
;;;90 {
;;;91 Set_Scsi_Sense_Data(CBW.bLUN, NOT_READY, MEDIUM_NOT_PRESENT);
;;;92 Set_CSW (CSW_CMD_FAILED, SEND_CSW_ENABLE);
000014 2101 MOVS r1,#1
000016 4608 MOV r0,r1
000018 f7fffffe BL Set_CSW
;;;93 Bot_Abort(DIR_IN);
00001c e8bd4010 POP {r4,lr}
000020 2000 MOVS r0,#0
000022 f7ffbffe B.W Bot_Abort
|L9.38|
;;;94 return;
;;;95 }
;;;96 ReadFormatCapacity_Data[4] = (u8)(Mass_Block_Count[lun] >> 24);
000026 480d LDR r0,|L9.92|
000028 f8501024 LDR r1,[r0,r4,LSL #2]
00002c 480c LDR r0,|L9.96|
00002e 0e0a LSRS r2,r1,#24
000030 7102 STRB r2,[r0,#4]
;;;97 ReadFormatCapacity_Data[5] = (u8)(Mass_Block_Count[lun] >> 16);
000032 0c0a LSRS r2,r1,#16
000034 7142 STRB r2,[r0,#5]
;;;98 ReadFormatCapacity_Data[6] = (u8)(Mass_Block_Count[lun] >> 8);
000036 0a0a LSRS r2,r1,#8
000038 7182 STRB r2,[r0,#6]
;;;99 ReadFormatCapacity_Data[7] = (u8)(Mass_Block_Count[lun]);
00003a 71c1 STRB r1,[r0,#7]
;;;100
;;;101 ReadFormatCapacity_Data[9] = (u8)(Mass_Block_Size[lun] >> 16);
00003c 4909 LDR r1,|L9.100|
00003e f8511024 LDR r1,[r1,r4,LSL #2]
000042 0c0a LSRS r2,r1,#16
000044 7242 STRB r2,[r0,#9]
;;;102 ReadFormatCapacity_Data[10] = (u8)(Mass_Block_Size[lun] >> 8);
000046 0a0a LSRS r2,r1,#8
000048 7282 STRB r2,[r0,#0xa]
;;;103 ReadFormatCapacity_Data[11] = (u8)(Mass_Block_Size[lun]);
00004a 72c1 STRB r1,[r0,#0xb]
;;;104 Transfer_Data_Request(ReadFormatCapacity_Data, READ_FORMAT_CAPACITY_DATA_LEN);
00004c e8bd4010 POP {r4,lr}
000050 210c MOVS r1,#0xc
000052 f7ffbffe B.W Transfer_Data_Request
;;;105 }
;;;106
ENDP
000056 0000 DCW 0x0000
|L9.88|
DCD Scsi_Sense_Data
|L9.92|
DCD Mass_Block_Count
|L9.96|
DCD ReadFormatCapacity_Data
|L9.100|
DCD Mass_Block_Size
AREA ||i.SCSI_RequestSense_Cmd||, CODE, READONLY, ALIGN=2
SCSI_RequestSense_Cmd PROC
;;;167 *******************************************************************************/
;;;168 void SCSI_RequestSense_Cmd (u8 lun)
000000 4803 LDR r0,|L10.16|
;;;169 {
;;;170 u8 Request_Sense_data_Length;
;;;171
;;;172 if (CBW.CB[4] <= REQUEST_SENSE_DATA_LEN)
000002 7cc1 LDRB r1,[r0,#0x13] ; CBW
000004 2912 CMP r1,#0x12
000006 d900 BLS |L10.10|
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -