📄 atapiio.cod
字号:
; 122 : bStatusRead = GetAltStatus();
00018 e597e034 ldr lr, [r7, #0x34]
0001c e5973028 ldr r3, [r7, #0x28]
00020 e08e0003 add r0, lr, r3
00024 eb000000 bl READ_PORT_UCHAR
; 123 : switch (bStatusType) {
00028 e3540001 cmp r4, #1
0002c 0a00001a beq |$L31985|
00030 e3540002 cmp r4, #2
00034 0a000016 beq |$L31990|
00038 e3540003 cmp r4, #3
0003c 0a00000c beq |$L31994|
00040 e3540004 cmp r4, #4
00044 0a000008 beq |$L31998|
00048 e3540005 cmp r4, #5
0004c 0a000003 beq |$L32002|
00050 e3540006 cmp r4, #6
00054 1a000012 bne |$L31986|
; 155 : case WAIT_TYPE_ERROR:
; 156 : if (bStatusRead & ATA_STATUS_ERROR) {
00058 e3100001 tst r0, #1
; 157 : DEBUGMSG(ZONE_IO, (TEXT("Atapi!CDisk::WaitForDisc> WAIT_TYPE_ERROR\r\n")));
; 158 : goto ExitDone;
; 159 : }
; 160 : break;
0005c ea00000f b |$L32426|
00060 |$L32002|
; 149 : case WAIT_TYPE_NOT_DRQ:
; 150 : if (!(bStatusRead & ATA_STATUS_DATA_REQ)) {
00060 e3100008 tst r0, #8
00064 |$L32427|
00064 0a000007 beq |$ExitDone$31988|
; 151 : DEBUGMSG(ZONE_IO, (TEXT("Atapi!CDisk::WaitForDisc> WAIT_TYPE_NOT_DRQ\r\n")));
; 152 : goto ExitDone;
; 153 : }
; 154 : break;
00068 ea00000d b |$L31986|
0006c |$L31998|
; 140 : goto ExitDone;
; 141 : }
; 142 : break;
; 143 : case WAIT_TYPE_DRQ:
; 144 : if (bStatusRead & ATA_STATUS_DATA_REQ) {
0006c e3100008 tst r0, #8
; 145 : DEBUGMSG(ZONE_IO, (TEXT("Atapi!CDisk::WaitForDisc> WAIT_TYPE_DRQ\r\n")));
; 146 : goto ExitDone;
; 147 : }
; 148 : break;
00070 ea00000a b |$L32426|
00074 |$L31994|
; 136 : case WAIT_TYPE_READY:
; 137 : if (bStatusRead & ATA_STATUS_READY) {
00074 e3100040 tst r0, #0x40
00078 0a000009 beq |$L31986|
; 138 : DEBUGMSG(ZONE_IO, (TEXT("Atapi!CDisk::WaitForDisc> WAIT_TYPE_READY\r\n")));
; 139 : StallExecution(100);
0007c e3a01064 mov r1, #0x64
00080 e1a00007 mov r0, r7
00084 eb000000 bl |?StallExecution@CDisk@@QAAXK@Z|
00088 |$ExitDone$31988|
; 173 : ExitDone:
; 174 : return ERROR_SUCCESS;
00088 e3a00000 mov r0, #0
; 175 : }
0008c e8bd40f0 ldmia sp!, {r4 - r7, lr}
00090 e12fff1e bx lr
00094 |$L31990|
; 126 : DEBUGMSG(ZONE_IO, (TEXT("Atapi!CDisk::WaitForDisc> WAIT_TYPE_BUSY\r\n")));
; 127 : goto ExitDone;
; 128 : }
; 129 : break;
; 130 : case WAIT_TYPE_NOT_BUSY:
; 131 : if (!(bStatusRead & ATA_STATUS_BUSY)) {
00094 e3100080 tst r0, #0x80
; 132 : DEBUGMSG(ZONE_IO, (TEXT("Atapi!CDisk::WaitForDisc> WAIT_TYPE_NOT_BUSY\r\n")));
; 133 : goto ExitDone;
; 134 : }
; 135 : break;
00098 eafffff1 b |$L32427|
0009c |$L31985|
; 124 : case WAIT_TYPE_BUSY:
; 125 : if (bStatusRead & ATA_STATUS_BUSY) {
0009c e3100080 tst r0, #0x80
000a0 |$L32426|
000a0 1afffff8 bne |$ExitDone$31988|
000a4 |$L31986|
; 161 : }
; 162 : if ((int)dwTimeOut > 0) {
000a4 e3550000 cmp r5, #0
000a8 da000004 ble |$L32011|
; 163 : StallExecution(dwPeriod);
000ac e1a01006 mov r1, r6
000b0 e1a00007 mov r0, r7
000b4 eb000000 bl |?StallExecution@CDisk@@QAAXK@Z|
; 164 : dwTimeOut -= dwPeriod;
000b8 e0455006 sub r5, r5, r6
; 171 : }
; 172 : }
000bc eaffffd5 b |$L31979|
000c0 |$L32011|
; 165 : }
; 166 : else {
; 167 : DEBUGMSG(ZONE_ERROR, (TEXT(
; 168 : "Atapi!CDisk::WaitForDisc> timeout; bStatusType(%d); status(%02X)\r\n"
; 169 : ), bStatusType, bStatusRead));
; 170 : return ERROR_GEN_FAILURE;
000c0 e3a0001f mov r0, #0x1F
; 175 : }
000c4 e8bd40f0 ldmia sp!, {r4 - r7, lr}
000c8 e12fff1e bx lr
000cc |$M32429|
ENDP ; |?WaitForDisc@CDisk@@UAAHEKK@Z|, CDisk::WaitForDisc
EXPORT |?WaitForDRQ@CDisk@@UAAHXZ| ; CDisk::WaitForDRQ
; File d:\wince500\platform\smdk2440\drivers\atapi\diskmain.h
00000 AREA |.text| { |?WaitForDRQ@CDisk@@UAAHXZ| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$?WaitForDRQ@CDisk@@UAAHXZ|, PDATA, SELECTION=5, ASSOC=|.text| { |?WaitForDRQ@CDisk@@UAAHXZ| } ; comdat associative
|$T32455| DCD |$L32454|
DCD 0x40005802
; Function compile flags: /Ogsy
; File d:\wince500\platform\smdk2440\drivers\atapi\atapiio.cpp
00000 AREA |.text| { |?WaitForDRQ@CDisk@@UAAHXZ| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |?WaitForDRQ@CDisk@@UAAHXZ| PROC ; CDisk::WaitForDRQ
; 188 : {
00000 |$L32454|
00000 e92d43f0 stmdb sp!, {r4 - r9, lr}
00004 e24dd014 sub sp, sp, #0x14
00008 |$M32452|
00008 e1a04000 mov r4, r0
; 189 : DWORD i,j;
; 190 : BYTE bStatus = 0;
; 191 :
; 192 : if (ZONE_CELOG) CeLogData(TRUE, CELID_ATAPI_WAITDRQ, NULL, 0, 0, CELZONE_ALWAYSON, 0, FALSE);
0000c e59f5148 ldr r5, [pc, #0x148]
00010 e3a02000 mov r2, #0
00014 e5cd2010 strb r2, [sp, #0x10]
00018 e5953440 ldr r3, [r5, #0x440]
0001c e3a08000 mov r8, #0
00020 e3a09101 mov r9, #1, 2
00024 e3130902 tst r3, #2, 18
00028 0a00000a beq |$L32020|
0002c e3a01d86 mov r1, #0x86, 26
00030 e3811007 orr r1, r1, #7
00034 e3a03000 mov r3, #0
00038 e3a02000 mov r2, #0
0003c e3a00001 mov r0, #1
00040 e58d800c str r8, [sp, #0xC]
00044 e58d8008 str r8, [sp, #8]
00048 e58d9004 str r9, [sp, #4]
0004c e58d8000 str r8, [sp]
00050 eb000000 bl CeLogData
00054 e5dd2010 ldrb r2, [sp, #0x10]
00058 |$L32020|
; 193 :
; 194 : for (i = 0; i < m_dwWaitCheckIter; i++) {
00058 e59436bc ldr r3, [r4, #0x6BC]
0005c e3a06000 mov r6, #0
00060 e3530000 cmp r3, #0
00064 9a000019 bls |$L32023|
00068 |$L32021|
; 195 : for (j = 0; j < m_dwWaitSampleTimes; j++) {
00068 e59436c0 ldr r3, [r4, #0x6C0]
0006c e3a07000 mov r7, #0
00070 e3530000 cmp r3, #0
00074 9a000011 bls |$L32022|
00078 |$L32024|
; 196 : bStatus = GetAltStatus() & (ATA_STATUS_BUSY|ATA_STATUS_DATA_REQ);
00078 e5942034 ldr r2, [r4, #0x34]
0007c e5943028 ldr r3, [r4, #0x28]
00080 e0820003 add r0, r2, r3
00084 eb000000 bl READ_PORT_UCHAR
00088 e2003088 and r3, r0, #0x88
0008c e5cd3010 strb r3, [sp, #0x10]
; 197 : if ((bStatus & ATA_STATUS_BUSY) == 0) {
00090 e3130080 tst r3, #0x80
00094 1a000001 bne |$L32028|
; 198 : if (bStatus & ATA_STATUS_DATA_REQ){
00098 e3130008 tst r3, #8
0009c 1a00001f bne |$L32442|
000a0 |$L32028|
; 201 : }
; 202 : }
; 203 : StallExecution(m_dwWaitStallTime);
000a0 e59416c4 ldr r1, [r4, #0x6C4]
000a4 e1a00004 mov r0, r4
000a8 eb000000 bl |?StallExecution@CDisk@@QAAXK@Z|
000ac e59436c0 ldr r3, [r4, #0x6C0]
000b0 e2877001 add r7, r7, #1
000b4 e1570003 cmp r7, r3
000b8 3affffee bcc |$L32024|
; 195 : for (j = 0; j < m_dwWaitSampleTimes; j++) {
000bc e5dd2010 ldrb r2, [sp, #0x10]
000c0 |$L32022|
; 193 :
; 194 : for (i = 0; i < m_dwWaitCheckIter; i++) {
000c0 e59436bc ldr r3, [r4, #0x6BC]
000c4 e2866001 add r6, r6, #1
000c8 e1560003 cmp r6, r3
000cc 3affffe5 bcc |$L32021|
000d0 |$L32023|
; 189 : DWORD i,j;
; 190 : BYTE bStatus = 0;
; 191 :
; 192 : if (ZONE_CELOG) CeLogData(TRUE, CELID_ATAPI_WAITDRQ, NULL, 0, 0, CELZONE_ALWAYSON, 0, FALSE);
000d0 e5953440 ldr r3, [r5, #0x440]
; 204 : }
; 205 : DEBUGMSG(ZONE_WARNING, (TEXT(
; 206 : "Atapi!CDisk::WaitForDRQ> status(%02X), error(%02X), reason(%02X)\r\n"
; 207 : ), GetAltStatus(), GetError(), GetReason()));
; 208 : }
; 209 :
; 210 : if (ZONE_CELOG) CeLogData(TRUE, CELID_ATAPI_STATUSWAITDRQ, &bStatus, sizeof(bStatus), 0, CELZONE_ALWAYSON, 0, FALSE);
000d4 e3130902 tst r3, #2, 18
000d8 0a00000a beq |$L32031|
000dc e3a01d86 mov r1, #0x86, 26
000e0 e3811008 orr r1, r1, #8
000e4 e3a03001 mov r3, #1
000e8 e28d2010 add r2, sp, #0x10
000ec e3a00001 mov r0, #1
000f0 e58d800c str r8, [sp, #0xC]
000f4 e58d8008 str r8, [sp, #8]
000f8 e58d9004 str r9, [sp, #4]
000fc e58d8000 str r8, [sp]
00100 eb000000 bl CeLogData
00104 e5dd2010 ldrb r2, [sp, #0x10]
00108 |$L32031|
; 211 :
; 212 : return (bStatus == ATA_STATUS_DATA_REQ);
00108 e3520008 cmp r2, #8
0010c 0a000010 beq |$L32029|
00110 e3a00000 mov r0, #0
00114 |$L32436|
; 213 : }
00114 e28dd014 add sp, sp, #0x14
00118 e8bd43f0 ldmia sp!, {r4 - r9, lr}
0011c e12fff1e bx lr
00120 |$L32442|
; 199 : if (ZONE_CELOG) CeLogData(TRUE, CELID_ATAPI_STATUSWAITDRQ, &bStatus, sizeof(bStatus), 0, CELZONE_ALWAYSON, 0, FALSE);
00120 e5953440 ldr r3, [r5, #0x440]
00124 e3130902 tst r3, #2, 18
00128 0a000009 beq |$L32029|
0012c e3a01d86 mov r1, #0x86, 26
00130 e3811008 orr r1, r1, #8
00134 e3a03001 mov r3, #1
00138 e28d2010 add r2, sp, #0x10
0013c e3a00001 mov r0, #1
00140 e58d800c str r8, [sp, #0xC]
00144 e58d8008 str r8, [sp, #8]
00148 e58d9004 str r9, [sp, #4]
0014c e58d8000 str r8, [sp]
00150 eb000000 bl CeLogData
00154 |$L32029|
; 200 : return TRUE;
00154 e3a00001 mov r0, #1
00158 eaffffed b |$L32436|
0015c |$L32457|
0015c 00000000 DCD |?dpCurSettings@@3U_DBGPARAM@@A|
00160 |$M32453|
ENDP ; |?WaitForDRQ@CDisk@@UAAHXZ|, CDisk::WaitForDRQ
EXPORT |?CheckIntrState@CDisk@@QAAGXZ| ; CDisk::CheckIntrState
; File d:\wince500\platform\smdk2440\drivers\atapi\diskmain.h
00000 AREA |.text| { |?CheckIntrState@CDisk@@QAAGXZ| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$?CheckIntrState@CDisk@@QAAGXZ|, PDATA, SELECTION=5, ASSOC=|.text| { |?CheckIntrState@CDisk@@QAAGXZ| } ; comdat associative
|$T32473| DCD |$L32472|
DCD 0x40001401
; Function compile flags: /Ogsy
; File d:\wince500\platform\smdk2440\drivers\atapi\atapiio.cpp
00000 AREA |.text| { |?CheckIntrState@CDisk@@QAAGXZ| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |?CheckIntrState@CDisk@@QAAGXZ| PROC ; CDisk::CheckIntrState
; 226 : {
00000 |$L32472|
00000 e92d4010 stmdb sp!, {r4, lr}
00004 |$M32470|
00004 e1a04000 mov r4, r0
; 227 : BYTE bReason, bDRQ;
; 228 :
; 229 : WaitOnBusy(FALSE);
00008 e3a01000 mov r1, #0
0000c eb000000 bl |?WaitOnBusy@CDisk@@QAAEH@Z|
; 230 :
; 231 : bReason = GetReason() & (ATA_IR_CoD | ATA_IR_IO);
00010 e5942030 ldr r2, [r4, #0x30]
00014 e5943010 ldr r3, [r4, #0x10]
00018 e0820003 add r0, r2, r3
0001c eb000000 bl READ_PORT_UCHAR
; 232 : bDRQ = GetAltStatus() & ATA_STATUS_DATA_REQ;
00020 e5942034 ldr r2, [r4, #0x34]
00024 e5943028 ldr r3, [r4, #0x28]
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -