📄 sdmmc_load.cod
字号:
; 400 :
; 401 : HANDLE hDevice = NULL;
; 402 :
; 403 : PHYSICAL_ADDRESS PhysAddr;
; 404 :
; 405 :
; 406 :
; 407 :
; 408 :
; 409 :
; 410 :
; 411 : if (GpioRegPtr==NULL) {
00004 e59f40e0 ldr r4, [pc, #0xE0]
00008 e3a07000 mov r7, #0
0000c e5940000 ldr r0, [r4]
00010 e1a06007 mov r6, r7
00014 e3500000 cmp r0, #0
00018 1a000008 bne |$L40594|
; 412 : PhysAddr.QuadPart = APB_GPIO_REGS_BASE;
0001c e3a00102 mov r0, #2, 2
00020 e3800c0e orr r0, r0, #0xE, 24
; 413 :
; 414 : GpioRegPtr = MmMapIoSpace(PhysAddr,
; 415 : sizeof(*GpioRegPtr),
; 416 : FALSE);
00024 e3a03000 mov r3, #0
00028 e3a02088 mov r2, #0x88
0002c e1a01007 mov r1, r7
00030 eb000000 bl MmMapIoSpace
00034 e3500000 cmp r0, #0
00038 e5840000 str r0, [r4]
; 417 : if (GpioRegPtr == NULL) {
0003c 0a000024 beq |$L40848|
00040 |$L40594|
; 418 : DEBUGMSG(1, (
; 419 : TEXT("PCMCIA: Failed to map GPIO registers.\r\n")));
; 420 : return;
; 421 : }
; 422 : }
; 423 :
; 424 :
; 425 : SDMMC_GpioInit();
00040 eb000000 bl SDMMC_GpioInit
; 426 :
; 427 :
; 436 : SDMMC_SmcInit();
00044 eb000000 bl SDMMC_SmcInit
00048 e59f4098 ldr r4, [pc, #0x98]
0004c e59f5090 ldr r5, [pc, #0x90]
00050 |$L40597|
; 437 :
; 438 :
; 439 :
; 440 :
; 441 :
; 442 :
; 443 :
; 444 :
; 445 :
; 446 :
; 447 :
; 448 :
; 449 :
; 450 :
; 451 : while(1)
; 452 : {
; 453 : Sleep(1000);
00050 e3a00ffa mov r0, #0xFA, 30
00054 eb000000 bl Sleep
; 454 : if (gSDMMC_Detected == FALSE)
00058 e5953000 ldr r3, [r5]
0005c e3530000 cmp r3, #0
00060 1a000010 bne |$L40850|
; 455 : {
; 456 :
; 457 :
; 458 :
; 459 : #if 0
; 460 : if( ( v_pGPIOReg->pfdr & 0x02 ) ==0x00 )
; 461 : {
; 462 : v_pGPIOReg->peddr |= 1<<4;
; 463 : v_pGPIOReg->pedr |= 1<<4;
; 464 : Sleep(1);
; 465 :
; 466 : gSDMMC_Detected = TRUE;
; 467 :
; 468 :
; 469 :
; 470 :
; 471 : DoRegSetup(szRegKey);
; 472 : hDevice = ActivateDevice( szRegKey, 0);
; 473 : DoSetHandleValue( szRegKey, hDevice);
; 474 : }
; 475 : #else
; 476 : if (SDMMC_CardInserted()) {
00064 eb000000 bl SDMMC_CardInserted
00068 e31000ff tst r0, #0xFF
0006c 0afffff7 beq |$L40597|
; 477 : RETAILMSG(1, (TEXT("SDMMC card inserted\r\n")));
00070 e59f0068 ldr r0, [pc, #0x68]
00074 eb000000 bl NKDbgPrintfW
; 478 : gSDMMC_Detected = TRUE;
; 479 : DoRegSetup(szRegKey);
00078 e5940000 ldr r0, [r4]
0007c e3a03001 mov r3, #1
00080 e5853000 str r3, [r5]
00084 eb000000 bl DoRegSetup
; 480 : hDevice = ActivateDevice( szRegKey, 0);
00088 e5940000 ldr r0, [r4]
0008c e3a01000 mov r1, #0
00090 eb000000 bl ActivateDevice
00094 e1a06000 mov r6, r0
; 481 : DoSetHandleValue( szRegKey, hDevice);
00098 e5940000 ldr r0, [r4]
0009c e1a01006 mov r1, r6
000a0 eb000000 bl DoSetHandleValue
; 482 : }
; 483 : #endif
; 484 :
; 485 : }
; 486 : else if (gSDMMC_Detected)
000a4 eaffffe9 b |$L40597|
000a8 |$L40850|
; 487 : {
; 488 :
; 489 : if (!SDMMC_CardInserted())
000a8 eb000000 bl SDMMC_CardInserted
000ac e31000ff tst r0, #0xFF
000b0 1affffe6 bne |$L40597|
; 490 : {
; 491 :
; 492 : RETAILMSG(1, (TEXT("SDMMC card deserted\r\n")));
000b4 e59f0020 ldr r0, [pc, #0x20]
000b8 eb000000 bl NKDbgPrintfW
; 493 : DeactivateDevice( hDevice);
000bc e1a00006 mov r0, r6
000c0 eb000000 bl DeactivateDevice
; 494 : DoDeleteHandleValue(szRegKey);
000c4 e5940000 ldr r0, [r4]
000c8 eb000000 bl DoDeleteHandleValue
; 495 : gSDMMC_Detected = FALSE;
000cc e5857000 str r7, [r5]
; 496 :
; 497 :
; 498 : }
; 499 : }
; 500 : }
000d0 eaffffde b |$L40597|
000d4 |$L40848|
; 501 : }
000d4 e8bd40f0 ldmia sp!, {r4 - r7, lr}
000d8 e12fff1e bx lr
000dc |$L40858|
000dc 00000000 DCD |??_C@_1CM@IHDK@?$AAS?$AAD?$AAM?$AAM?$AAC?$AA?5?$AAc?$AAa?$AAr?$AAd?$AA?5?$AAd?$AAe?$AAs?$AAe?$AAr?$AAt?$AAe?$AAd?$AA?$AN@|
000e0 00000000 DCD |??_C@_1CM@CGPI@?$AAS?$AAD?$AAM?$AAM?$AAC?$AA?5?$AAc?$AAa?$AAr?$AAd?$AA?5?$AAi?$AAn?$AAs?$AAe?$AAr?$AAt?$AAe?$AAd?$AA?$AN@|
000e4 00000000 DCD |gSDMMC_Detected|
000e8 00000000 DCD |szRegKey|
000ec 00000000 DCD |GpioRegPtr|
000f0 |$M40855|
ENDP ; |SDMMCDetectThread|
IMPORT |KernelIoControl|
00000 AREA |.text| { |SDMMC_GpioInit| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$SDMMC_GpioInit|, PDATA, SELECTION=5, ASSOC=|.text| { |SDMMC_GpioInit| } ; comdat associative
|$T40863| DCD |SDMMC_GpioInit|
DCD 0x40002202
; Function compile flags: /Ogsy
00000 AREA |.text| { |SDMMC_GpioInit| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |SDMMC_GpioInit| PROC
; 238 : {
00000 e92d4030 stmdb sp!, {r4, r5, lr}
00004 e24dd01c sub sp, sp, #0x1C
00008 |$M40861|
; 239 : ULONG_MODIFY GpioReg;
; 240 : DWORD BytesReturned;
; 241 :
; 242 : DEBUGMSG(1, (TEXT("SDMMC_GpioInit entered.\r\n")) );
; 243 :
; 244 :
; 245 :
; 246 :
; 247 :
; 248 :
; 249 :
; 250 :
; 251 : GpioReg.Address = &(((PAPB_GPIO_REGS) APB_GPIO_REGS_BASE)->PFDDR);
00008 e59f0074 ldr r0, [pc, #0x74]
; 252 : GpioReg.Value = 0x00;
0000c e3a05000 mov r5, #0
00010 e58d0010 str r0, [sp, #0x10]
; 253 : GpioReg.Mask = GPIO_SDMMC_CD;
; 254 : KernelIoControl(IOCTL_HAL_REGISTER_MODIFY,
; 255 : &GpioReg,
; 256 : sizeof(GpioReg),
; 257 : NULL,
; 258 : 0,
; 259 : &BytesReturned);
00014 e28d0008 add r0, sp, #8
00018 e58d0004 str r0, [sp, #4]
0001c e3a04004 mov r4, #4
00020 e59f0054 ldr r0, [pc, #0x54]
00024 e3a03000 mov r3, #0
00028 e3a0200c mov r2, #0xC
0002c e58d5014 str r5, [sp, #0x14]
00030 e28d1010 add r1, sp, #0x10
00034 e58d4018 str r4, [sp, #0x18]
00038 e58d5000 str r5, [sp]
0003c eb000000 bl KernelIoControl
; 260 :
; 271 :
; 272 :
; 273 :
; 274 :
; 275 : GpioReg.Address = &(((PAPB_GPIO_REGS) APB_GPIO_REGS_BASE)->GPIOINTEN);
00040 e59f3038 ldr r3, [pc, #0x38]
; 276 : GpioReg.Value = GPIO_SDMMC_CD;
; 277 : GpioReg.Mask = GPIO_SDMMC_CD;
; 278 : KernelIoControl(IOCTL_HAL_REGISTER_MODIFY,
; 279 : &GpioReg,
; 280 : sizeof(GpioReg),
; 281 : NULL,
; 282 : 0,
; 283 : &BytesReturned);
00044 e28d0008 add r0, sp, #8
00048 e58d0004 str r0, [sp, #4]
0004c e3a0200c mov r2, #0xC
00050 e58d3010 str r3, [sp, #0x10]
00054 e28d1010 add r1, sp, #0x10
00058 e59f001c ldr r0, [pc, #0x1C]
0005c e3a03000 mov r3, #0
00060 e58d4014 str r4, [sp, #0x14]
00064 e58d4018 str r4, [sp, #0x18]
00068 e58d5000 str r5, [sp]
0006c eb000000 bl KernelIoControl
; 284 : }
00070 e28dd01c add sp, sp, #0x1C
00074 e8bd4030 ldmia sp!, {r4, r5, lr}
00078 e12fff1e bx lr
0007c |$L40865|
0007c 010127e3 DCD 0x10127e3
00080 80000e58 DCD 0x80000e58
00084 80000e34 DCD 0x80000e34
00088 |$M40862|
ENDP ; |SDMMC_GpioInit|
00000 AREA |.text| { |SDMMC_SmcInit| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$SDMMC_SmcInit|, PDATA, SELECTION=5, ASSOC=|.text| { |SDMMC_SmcInit| } ; comdat associative
|$T40870| DCD |SDMMC_SmcInit|
DCD 0x40000100
; Function compile flags: /Ogsy
00000 AREA |.text| { |SDMMC_SmcInit| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |SDMMC_SmcInit| PROC
; 295 : {
00000 |$M40868|
; 296 : #if 0
; 297 : #define PRE_CHARGE_NS 200
; 298 : #define HOLD_TIME_NS 200
; 299 : #define ACCESS_TIME_NS 600
; 300 : #define WIDTH 16
; 301 :
; 302 : BUS_CLKS BusClks;
; 303 :
; 304 : DWORD BytesReturned = 0;
; 305 :
; 306 : ULONG HClk = 50;
; 307 :
; 308 : if (KernelIoControl(IOCTL_HAL_GET_BUS_CLKS,
; 309 : &BusClks,
; 310 : sizeof(BusClks),
; 311 : NULL,
; 312 : 0,
; 313 : &BytesReturned)) {
; 314 :
; 315 : HClk = ((BusClks.HClk + 500000) / 1000000);
; 316 : }
; 317 : #endif
; 318 : }
00000 e12fff1e bx lr
00004 |$M40869|
ENDP ; |SDMMC_SmcInit|
00000 AREA |.text| { |SDMMC_CardInserted| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$SDMMC_CardInserted|, PDATA, SELECTION=5, ASSOC=|.text| { |SDMMC_CardInserted| } ; comdat associative
|$T40881| DCD |SDMMC_CardInserted|
DCD 0x40001601
; Function compile flags: /Ogsy
00000 AREA |.text| { |SDMMC_CardInserted| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |SDMMC_CardInserted| PROC
; 330 : {
00000 e92d4010 stmdb sp!, {r4, lr}
00004 |$M40879|
; 331 : ULONG GpioPF;
; 332 : BOOLEAN CardFullyInserted;
; 333 :
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -