📄 sdmmc_load.cod
字号:
; 402 : PHYSICAL_ADDRESS PhysAddr;
; 403 :
; 404 :
; 405 :
; 406 :
; 407 :
; 408 :
; 409 :
; 410 : if (GpioRegPtr==NULL) {
00004 e59f40dc ldr r4, [pc, #0xDC]
00008 e3a07000 mov r7, #0
0000c e5940000 ldr r0, [r4]
00010 e1a06007 mov r6, r7
00014 e3500000 cmp r0, #0
00018 1a000008 bne |$L40596|
; 411 : PhysAddr.QuadPart = APB_GPIO_REGS_BASE;
0001c e3a00102 mov r0, #2, 2
00020 e3800c0e orr r0, r0, #0xE, 24
; 412 :
; 413 : GpioRegPtr = MmMapIoSpace(PhysAddr,
; 414 : sizeof(*GpioRegPtr),
; 415 : 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]
; 416 : if (GpioRegPtr == NULL) {
0003c 0a000024 beq |$L40850|
00040 |$L40596|
; 417 : DEBUGMSG(1, (
; 418 : TEXT("PCMCIA: Failed to map GPIO registers.\r\n")));
; 419 : return;
; 420 : }
; 421 : }
; 422 :
; 423 :
; 424 : SDMMC_GpioInit();
00040 eb000000 bl SDMMC_GpioInit
; 425 :
; 426 :
; 435 : SDMMC_SmcInit();
00044 eb000000 bl SDMMC_SmcInit
00048 e59f4094 ldr r4, [pc, #0x94]
0004c e59f508c ldr r5, [pc, #0x8C]
00050 |$L40599|
; 436 :
; 437 :
; 438 :
; 439 :
; 440 :
; 441 :
; 442 :
; 443 :
; 444 :
; 445 :
; 446 :
; 447 :
; 448 :
; 449 :
; 450 : while(1)
; 451 : {
; 452 : Sleep(1000);
00050 e3a00ffa mov r0, #0xFA, 30
00054 eb000000 bl Sleep
; 453 : if (gSDMMC_Detected == FALSE)
00058 e5953000 ldr r3, [r5]
0005c e3530000 cmp r3, #0
00060 1a000010 bne |$L40852|
; 454 : {
; 455 :
; 456 :
; 457 :
; 458 : #if 0
; 459 : if( ( v_pGPIOReg->pfdr & 0x02 ) ==0x00 )
; 460 : {
; 461 : v_pGPIOReg->peddr |= 1<<4;
; 462 : v_pGPIOReg->pedr |= 1<<4;
; 463 : Sleep(1);
; 464 :
; 465 : gSDMMC_Detected = TRUE;
; 466 :
; 467 :
; 468 :
; 469 :
; 470 : DoRegSetup(szRegKey);
; 471 : hDevice = ActivateDevice( szRegKey, 0);
; 472 : DoSetHandleValue( szRegKey, hDevice);
; 473 : }
; 474 : #else
; 475 : if (SDMMC_CardInserted()) {
00064 eb000000 bl SDMMC_CardInserted
00068 e31000ff tst r0, #0xFF
0006c 0afffff7 beq |$L40599|
; 476 : RETAILMSG(1, (TEXT("SDMMC card inserted\r\n")));
00070 e59f0064 ldr r0, [pc, #0x64]
00074 eb000000 bl NKDbgPrintfW
; 477 : gSDMMC_Detected = TRUE;
; 478 : DoRegSetup(szRegKey);
00078 e5940000 ldr r0, [r4]
0007c e3a03001 mov r3, #1
00080 e5853000 str r3, [r5]
00084 eb000000 bl DoRegSetup
; 479 : hDevice = ActivateDevice( szRegKey, 0);
00088 e5940000 ldr r0, [r4]
0008c e3a01000 mov r1, #0
00090 eb000000 bl ActivateDevice
00094 e1a06000 mov r6, r0
; 480 : DoSetHandleValue( szRegKey, hDevice);
00098 e5940000 ldr r0, [r4]
0009c e1a01006 mov r1, r6
000a0 eb000000 bl DoSetHandleValue
; 481 : }
; 482 : #endif
; 483 :
; 484 : }
; 485 : else if (gSDMMC_Detected)
000a4 eaffffe9 b |$L40599|
000a8 |$L40852|
; 486 : {
; 487 :
; 488 : if (!SDMMC_CardInserted())
000a8 eb000000 bl SDMMC_CardInserted
000ac e31000ff tst r0, #0xFF
000b0 1affffe6 bne |$L40599|
; 489 : {
; 490 :
; 491 : RETAILMSG(1, (TEXT("SDMMC card deserted\r\n")));
000b4 e59f001c ldr r0, [pc, #0x1C]
000b8 eb000000 bl NKDbgPrintfW
; 492 : DeactivateDevice( hDevice);
000bc e1a00006 mov r0, r6
000c0 eb000000 bl DeactivateDevice
; 493 : DoDeleteHandleValue(szRegKey);
000c4 e5940000 ldr r0, [r4]
000c8 eb000000 bl DoDeleteHandleValue
; 494 : gSDMMC_Detected = FALSE;
000cc e5857000 str r7, [r5]
; 495 :
; 496 :
; 497 : }
; 498 : }
; 499 : }
000d0 eaffffde b |$L40599|
000d4 |$L40850|
; 500 : }
000d4 e8bd80f0 ldmia sp!, {r4 - r7, pc}
000d8 |$L40860|
000d8 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@|
000dc 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@|
000e0 00000000 DCD |gSDMMC_Detected|
000e4 00000000 DCD |szRegKey|
000e8 00000000 DCD |GpioRegPtr|
000ec |$M40857|
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
|$T40865| DCD |SDMMC_GpioInit|
DCD 0x40002f02
; 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 |$M40863|
; 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 e59f00a8 ldr r0, [pc, #0xA8]
; 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 e59f0084 ldr r0, [pc, #0x84]
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 :
; 261 : GpioReg.Address = &(((PAPB_GPIO_REGS) APB_GPIO_REGS_BASE)->PCDDR);
; 262 : GpioReg.Value = GPIO_SDMMC_WP;
00040 e3a00020 mov r0, #0x20
00044 e59f3068 ldr r3, [pc, #0x68]
00048 e58d0014 str r0, [sp, #0x14]
; 263 : GpioReg.Mask = GPIO_SDMMC_WP;
; 264 : KernelIoControl(IOCTL_HAL_REGISTER_MODIFY,
; 265 : &GpioReg,
; 266 : sizeof(GpioReg),
; 267 : NULL,
; 268 : 0,
; 269 : &BytesReturned);
0004c e3a0200c mov r2, #0xC
00050 e58d0018 str r0, [sp, #0x18]
00054 e28d0008 add r0, sp, #8
00058 e58d0004 str r0, [sp, #4]
0005c e28d1010 add r1, sp, #0x10
00060 e58d3010 str r3, [sp, #0x10]
00064 e3a03000 mov r3, #0
00068 e59f003c ldr r0, [pc, #0x3C]
0006c e58d5000 str r5, [sp]
00070 eb000000 bl KernelIoControl
; 270 :
; 271 :
; 272 :
; 273 :
; 274 : GpioReg.Address = &(((PAPB_GPIO_REGS) APB_GPIO_REGS_BASE)->GPIOINTEN);
00074 e59f3034 ldr r3, [pc, #0x34]
; 275 : GpioReg.Value = GPIO_SDMMC_CD;
; 276 : GpioReg.Mask = GPIO_SDMMC_CD;
; 277 : KernelIoControl(IOCTL_HAL_REGISTER_MODIFY,
; 278 : &GpioReg,
; 279 : sizeof(GpioReg),
; 280 : NULL,
; 281 : 0,
; 282 : &BytesReturned);
00078 e28d0008 add r0, sp, #8
0007c e58d4014 str r4, [sp, #0x14]
00080 e58d0004 str r0, [sp, #4]
00084 e3a0200c mov r2, #0xC
00088 e58d3010 str r3, [sp, #0x10]
0008c e28d1010 add r1, sp, #0x10
00090 e59f0014 ldr r0, [pc, #0x14]
00094 e3a03000 mov r3, #0
00098 e58d4018 str r4, [sp, #0x18]
0009c e58d5000 str r5, [sp]
000a0 eb000000 bl KernelIoControl
; 283 : }
000a4 e28dd01c add sp, sp, #0x1C
000a8 e8bd8030 ldmia sp!, {r4, r5, pc}
000ac |$L40867|
000ac 010127e3 DCD 0x10127e3
000b0 80000e58 DCD 0x80000e58
000b4 80000e18 DCD 0x80000e18
000b8 80000e34 DCD 0x80000e34
000bc |$M40864|
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
|$T40872| DCD |SDMMC_SmcInit|
DCD 0x40000100
; Function compile flags: /Ogsy
00000 AREA |.text| { |SDMMC_SmcInit| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |SDMMC_SmcInit| PROC
; 294 : {
00000 |$M40870|
; 295 : #if 0
; 296 : #define PRE_CHARGE_NS 200
; 297 : #define HOLD_TIME_NS 200
; 298 : #define ACCESS_TIME_NS 600
; 299 : #define WIDTH 16
; 300 :
; 301 : BUS_CLKS BusClks;
; 302 :
; 303 : DWORD BytesReturned = 0;
; 304 :
; 305 : ULONG HClk = 50;
; 306 :
; 307 : if (KernelIoControl(IOCTL_HAL_GET_BUS_CLKS,
; 308 : &BusClks,
; 309 : sizeof(BusClks),
; 310 : NULL,
; 311 : 0,
; 312 : &BytesReturned)) {
; 313 :
; 314 : HClk = ((BusClks.HClk + 500000) / 1000000);
; 315 : }
; 316 : #endif
; 317 : }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -