📄 diskio.cod
字号:
; Listing generated by Microsoft (R) Optimizing Compiler Version 12.20.9615
TTL d:\wince420\platform\sdklh7a404\drivers\sdmmc\driver\.\diskio.c
CODE32
00000 AREA |.drectve|, DRECTVE
DCB "-defaultlib:coredll.lib "
DCB "-defaultlib:corelibc.lib "
00000 AREA |.data|, DATA
COMMON |multipleRdWr|, 0x2
EXPORT |CloseDisk|
IMPORT |EnterCriticalSection|
IMPORT |LeaveCriticalSection|
IMPORT |DeleteCriticalSection|
IMPORT |v_DiskCrit|
IMPORT |v_DiskList|
IMPORT |LocalFree|
; File d:\wince420\platform\sdklh7a404\drivers\sdmmc\driver\diskio.c
00000 AREA |.text| { |CloseDisk| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$CloseDisk|, PDATA, SELECTION=5, ASSOC=|.text| { |CloseDisk| } ; comdat associative
|$T36983| DCD |CloseDisk|
DCD 0x40002501
; Function compile flags: /Ogsy
00000 AREA |.text| { |CloseDisk| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |CloseDisk| PROC
; 84 : {
00000 e92d4010 stmdb sp!, {r4, lr}
00004 |$M36981|
00004 e1a04000 mov r4, r0
; 85 : PDISK pd;
; 86 :
; 87 : DEBUGMSG(ZONE_IO, (TEXT("MMCDISK:CloseDisk closing 0x%x\r\n"), pDisk));
; 88 :
; 89 :
; 90 :
; 91 :
; 92 : EnterCriticalSection(&v_DiskCrit);
00008 e59f007c ldr r0, [pc, #0x7C]
0000c eb000000 bl EnterCriticalSection
; 93 : if (pDisk == v_DiskList) {
00010 e59f3078 ldr r3, [pc, #0x78]
00014 e5931000 ldr r1, [r3]
00018 e1540001 cmp r4, r1
0001c 1a000006 bne |$L36688|
; 94 : v_DiskList = pDisk->d_next;
00020 e5940000 ldr r0, [r4]
00024 e5830000 str r0, [r3]
; 95 : } else {
00028 ea000009 b |$L36693|
0002c |$L36692|
; 98 : if (pd->d_next == pDisk) {
0002c e5910000 ldr r0, [r1]
00030 e1500004 cmp r0, r4
00034 0a000004 beq |$L36976|
; 100 : break;
; 101 : }
; 102 : pd = pd->d_next;
00038 e1a01000 mov r1, r0
0003c |$L36688|
; 96 : pd = v_DiskList;
; 97 : while (pd->d_next != NULL) {
0003c e5910000 ldr r0, [r1]
00040 e3500000 cmp r0, #0
00044 1afffff8 bne |$L36692|
; 98 : if (pd->d_next == pDisk) {
00048 ea000001 b |$L36693|
0004c |$L36976|
; 99 : pd->d_next = pDisk->d_next;
0004c e5940000 ldr r0, [r4]
00050 e5810000 str r0, [r1]
00054 |$L36693|
; 103 : }
; 104 : }
; 105 : LeaveCriticalSection(&v_DiskCrit);
00054 e59f0030 ldr r0, [pc, #0x30]
00058 eb000000 bl LeaveCriticalSection
; 106 :
; 107 : DEBUGMSG(ZONE_IO, (TEXT("MMCDISK:CloseDisk - freeing resources\r\n")));
; 108 :
; 109 : DeleteCriticalSection(&(pDisk->d_DiskCardCrit));
0005c e2840004 add r0, r4, #4
00060 eb000000 bl DeleteCriticalSection
; 110 : if (pDisk->d_AlignBuf) {
00064 e5943040 ldr r3, [r4, #0x40]
00068 e3530000 cmp r3, #0
; 111 : LocalFree(pDisk->d_AlignBuf);
0006c 11a00003 movne r0, r3
00070 1b000000 blne LocalFree
; 112 : }
; 113 :
; 114 : if (pDisk->d_ActivePath) {
00074 e5940044 ldr r0, [r4, #0x44]
00078 e3500000 cmp r0, #0
; 115 : LocalFree(pDisk->d_ActivePath);
0007c 1b000000 blne LocalFree
; 116 : }
; 117 :
; 118 : LocalFree(pDisk);
00080 e1a00004 mov r0, r4
00084 e8bd4010 ldmia sp!, {r4, lr}
00088 ea000000 b LocalFree
0008c |$L36985|
0008c 00000000 DCD |v_DiskCrit|
00090 00000000 DCD |v_DiskList|
00094 |$M36982|
ENDP ; |CloseDisk|
EXPORT |CheckMedia|
IMPORT |IsCardInserted|
00000 AREA |.text| { |CheckMedia| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$CheckMedia|, PDATA, SELECTION=5, ASSOC=|.text| { |CheckMedia| } ; comdat associative
|$T36992| DCD |CheckMedia|
DCD 0x40000d01
; Function compile flags: /Ogsy
00000 AREA |.text| { |CheckMedia| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |CheckMedia| PROC
; 139 : {
00000 e92d4010 stmdb sp!, {r4, lr}
00004 |$M36990|
00004 e1a04000 mov r4, r0
; 140 :
; 141 : if (!IsCardInserted(pDisk)) {
00008 eb000000 bl IsCardInserted
0000c e31000ff tst r0, #0xFF
00010 1a000005 bne |$L36703|
; 142 : DEBUGMSG(ZONE_WARNING|ZONE_ERROR|ZONE_IO,
; 143 : (TEXT("MMCDISK:CheckMedia - Built-in CF Card no longer present!\r\n")));
; 144 : if (pDisk->d_DiskCardState != STATE_DEAD) {
00014 e594001c ldr r0, [r4, #0x1C]
00018 e3500004 cmp r0, #4
; 145 : pDisk->d_DiskCardState = STATE_REMOVED;
0001c 13a00005 movne r0, #5
00020 1584001c strne r0, [r4, #0x1C]
; 146 : }
; 147 : return DISK_REMOVED_ERROR;
00024 e3a00014 mov r0, #0x14
; 151 : }
00028 e8bd8010 ldmia sp!, {r4, pc}
0002c |$L36703|
; 148 : }
; 149 :
; 150 : return ERROR_SUCCESS;
0002c e3a00000 mov r0, #0
; 151 : }
00030 e8bd8010 ldmia sp!, {r4, pc}
00034 |$M36991|
ENDP ; |CheckMedia|
EXPORT |MMCREAD|
IMPORT |__C_specific_handler|
IMPORT |mmc_read|
IMPORT |MapPtrToProcess|
IMPORT |GetCallerProcess|
00000 AREA |.text| { |MMCREAD| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.xdata$$MMCREAD|, DATA, SELECTION=5, ASSOC=|.text| { |MMCREAD| } ; comdat associative
|$T37020| DCD 0x1
DCD |$L37003|
DCD |$L37004|
DCD |$L36999|
DCD |$L37000|
00000 AREA |.text| { |MMCREAD| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$MMCREAD|, PDATA, SELECTION=5, ASSOC=|.text| { |MMCREAD| } ; comdat associative
|$T37021| DCD |MMCREAD|
DCD 0xc0002204
00000 AREA |.text| { |MMCREAD| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$MMCREAD|, PDATA, SELECTION=5, ASSOC=|.text| { |MMCREAD| } ; comdat associative
|$T37023| DCD |$L36999|
DCD 0x40000600
; Function compile flags: /Ogsy
00000 AREA |.text| { |MMCREAD| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 00000000 DCD |__C_specific_handler|
00004 00000000 DCD |$T37020|
00008 |MMCREAD| PROC
; 162 : {
00008 e1a0c00d mov r12, sp
0000c e92d59f0 stmdb sp!, {r4 - r8, r11, r12, lr}
00010 e28db020 add r11, sp, #0x20
00014 e24dd008 sub sp, sp, #8
00018 |$L37018|
00018 e1a06000 mov r6, r0
0001c e1a05001 mov r5, r1
; 163 :
; 164 :
; 165 : DWORD num_sg;
; 166 :
; 167 : DWORD bytes_this_sg;
; 168 : unsigned short num_of_sector;
; 169 :
; 170 : PSG_BUF pSg;
; 171 : UCHAR *pBuf16;
; 172 :
; 173 : DWORD sectno;
; 174 : DWORD endsect;
; 175 : DWORD error;
; 176 :
; 177 :
; 178 :
; 179 : num_sg = pSgr->sr_num_sg;
; 180 :
; 181 : pSg = &(pSgr->sr_sglist[0]);
00020 e1a04005 mov r4, r5
; 182 : bytes_this_sg = pSg->sb_len;
; 183 :
; 184 : pBuf16 = (UCHAR *) MapPtrToProcess((LPVOID)pSg->sb_buf, GetCallerProcess());
00024 eb000000 bl GetCallerProcess
00028 e1a01000 mov r1, r0
0002c e5b40014 ldr r0, [r4, #0x14]!
00030 eb000000 bl MapPtrToProcess
00034 e1a07000 mov r7, r0
; 185 :
; 186 : sectno = pSgr->sr_start;
00038 e5958000 ldr r8, [r5]
; 187 :
; 188 : endsect = sectno + pSgr->sr_num_sec;
; 189 :
; 190 : num_of_sector = (unsigned short) pSgr->sr_num_sec;
0003c e5950004 ldr r0, [r5, #4]
00040 e1a01800 mov r1, r0, lsl #16
00044 e1a04821 mov r4, r1, lsr #16
00048 |$L37003|
; 191 : error = ERROR_SUCCESS;
; 192 :
; 193 :
; 194 :
; 195 :
; 196 :
; 197 :
; 198 : #ifdef USE_INTERRUPT
; 199 : ResetEvent(pDisk->d_IRQEvent);
; 200 : #endif
; 201 :
; 202 : try {
; 203 : error = CheckMedia(pDisk);
00048 e1a00006 mov r0, r6
0004c eb000000 bl CheckMedia
00050 e1a05000 mov r5, r0
00054 e50b5028 str r5, [r11, #-0x28]
; 204 :
; 205 : if ( error == ERROR_SUCCESS)
00058 e3550000 cmp r5, #0
0005c 1a000007 bne |$L37004|
; 206 :
; 207 :
; 208 : #if (USE_SPI || USE_SPI_EMULATION)
; 209 : if (spi_read(0, sectno, WorkBuf, 1) == 0)
; 210 : error = ERROR_READ_FAULT;
; 211 :
; 212 : #else
; 213 :
; 214 :
; 215 :
; 216 :
; 217 : if (mmc_read(0, sectno, pBuf16, num_of_sector) == 0)
00060 e1a03004 mov r3, r4
00064 e1a02007 mov r2, r7
00068 e1a01008 mov r1, r8
0006c e3a00000 mov r0, #0
00070 eb000000 bl mmc_read
00074 e3500000 cmp r0, #0
; 218 : error = ERROR_READ_FAULT;
00078 03a0501e moveq r5, #0x1E
0007c 050b5028 streq r5, [r11, #-0x28]
00080 |$L37004|
00080 ea000000 b |$L36727|
00084 |$L37000|
; 231 : error = ERROR_READ_FAULT;
00084 e3a0501e mov r5, #0x1E
00088 |$L36727|
; 232 : }
; 233 : if (error != ERROR_SUCCESS) {
00088 e1a00005 mov r0, r5
; 234 : return error;
; 235 : }
; 236 :
; 237 : #ifdef USE_INTERRUPT
; 238 : if (pDisk->d_DiskCardState == STATE_OPENED) {
; 239 : WaitForSingleObject(pDisk->d_IRQEvent, DISK_IO_TIME_OUT);
; 240 : }
; 241 : if (pDisk->d_DiskCardState != STATE_OPENED) {
; 242 : return GetDiskStateError(pDisk->d_DiskCardState);
; 243 : }
; 244 : #endif
; 245 :
; 246 :
; 247 :
; 248 :
; 249 :
; 250 : return 0;
; 251 : }
0008c e91ba9f0 ldmdb r11, {r4 - r8, r11, sp, pc}
ENDP ; |MMCREAD|
00090 |$L37002|
00090 |$L37019|
00090 |$L36999|
; 219 :
; 220 :
; 221 :
; 222 : #endif
; 223 :
; 224 :
; 225 :
; 226 :
; 227 :
; 228 :
; 229 : } except (GetExceptionCode() == STATUS_ACCESS_VIOLATION ?
; 230 : EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH) {
00090 e5901000 ldr r1, [r0]
00094 e5912000 ldr r2, [r1]
00098 e3520117 cmp r2, #0x17, 2
0009c e3a00001 mov r0, #1
000a0 13a00000 movne r0, #0
000a4 |$L37001|
000a4 e1a0f00e mov pc, lr
000a8 |$L37022|
EXPORT |MMCWRITE|
IMPORT |GetDiskStateError|
IMPORT |mmc_write|
00000 AREA |.text| { |MMCWRITE| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.xdata$$MMCWRITE|, DATA, SELECTION=5, ASSOC=|.text| { |MMCWRITE| } ; comdat associative
|$T37074| DCD 0x2
DCD |$L37047|
DCD |$L37048|
DCD |$L37043|
DCD |$L37044|
DCD |$L37040|
DCD |$L37041|
DCD |$L37036|
DCD |$L37037|
00000 AREA |.text| { |MMCWRITE| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$MMCWRITE|, PDATA, SELECTION=5, ASSOC=|.text| { |MMCWRITE| } ; comdat associative
|$T37075| DCD |MMCWRITE|
DCD 0xc0009205
00000 AREA |.text| { |MMCWRITE| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$MMCWRITE|, PDATA, SELECTION=5, ASSOC=|.text| { |MMCWRITE| } ; comdat associative
|$T37077| DCD |$L37043|
DCD 0x40000600
00000 AREA |.text| { |MMCWRITE| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$MMCWRITE|, PDATA, SELECTION=5, ASSOC=|.text| { |MMCWRITE| } ; comdat associative
|$T37079| DCD |$L37036|
DCD 0x40000600
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -