📄 oemioctl.cod
字号:
; 813 : break;
; 814 :
; 815 : case IOCTL_HAL_GET_UUID:
; 816 : {
; 817 : // Check buffer size
; 818 : if ( lpBytesReturned ) *lpBytesReturned = sizeof(GUID);
0029c e59d304c ldr r3, [sp, #0x4C]
002a0 e3530000 cmp r3, #0
002a4 13a02010 movne r2, #0x10
002a8 15832000 strne r2, [r3]
; 819 :
; 820 : if ( (!lpOutBuf) || nOutBufSize < sizeof(GUID)) {
002ac e3560000 cmp r6, #0
002b0 0a000008 beq |$L16936|
002b4 e59d3048 ldr r3, [sp, #0x48]
002b8 e3530010 cmp r3, #0x10
002bc 3a000005 bcc |$L16936|
; 824 : }
; 825 : else
; 826 : {
; 827 : memcpy(lpOutBuf, pDriverGlobals->eth.EdbgAddr.wMAC, sizeof(GUID));
002c0 e59f1b24 ldr r1, [pc, #0xB24]
002c4 e3a02010 mov r2, #0x10
002c8 e1a00006 mov r0, r6
002cc eb000000 bl memcpy
; 828 : }
; 829 : }
; 830 :
; 831 : break;
; 832 :
; 833 :
; 834 : #ifdef EP93XX_SIMULAT_PS2_KBD
; 835 :
; 836 : case IOCTL_HAL_PS2_SEND:
; 837 : return SendDataToPS2( lpInBuf ,nInBufSize );
; 838 : break;
; 839 : case IOCTL_HAL_PS2_GET:
; 840 : return ReadPS2Data(lpOutBuf, nOutBufSize, lpBytesReturned );
; 841 : break;
; 842 : #endif
; 843 :
; 844 : #ifdef EDB9315A_CIR
; 845 : case IOCTL_HAL_PIO_CIR:
; 846 : return GetKeyName( lpOutBuf, nOutBufSize, lpBytesReturned );
; 847 : break;
; 848 : #endif
; 849 :
; 850 : }
; 851 :
; 852 : return(TRUE);
002d0 e3a00001 mov r0, #1
002d4 eaffff80 b |$L16625|
002d8 |$L16936|
; 821 :
; 822 : SetLastError(ERROR_INSUFFICIENT_BUFFER);
002d8 e59f3a34 ldr r3, [pc, #0xA34]
002dc e3a0007a mov r0, #0x7A
002e0 e1a0e00f mov lr, pc
002e4 e12fff13 bx r3
; 823 : return FALSE;
002e8 eaffff7a b |$L16908|
002ec |$L16961|
; 174 : DWORD len;
; 175 : PIP_INFO pIPInfo;
; 176 : EDBG_ADDR *pEdbgAddr;
; 177 :
; 178 :
; 179 : DEBUGMSG(0, (TEXT("+OEMIoControl %X\r\n"), dwIoControlCode));
; 180 :
; 181 : switch (dwIoControlCode) {
002ec e59f3af4 ldr r3, [pc, #0xAF4]
002f0 e1500003 cmp r0, r3
002f4 0a00004e beq |$L16755|
002f8 e59f3ae4 ldr r3, [pc, #0xAE4]
002fc e1500003 cmp r0, r3
00300 0a000148 beq |$L16849|
00304 e59f3ad4 ldr r3, [pc, #0xAD4]
00308 e1500003 cmp r0, r3
0030c 1a000244 bne |$L16926|
; 486 : return TRUE;
; 487 : }
; 488 : }
; 489 : break;
; 490 :
; 491 : case IOCTL_HAL_ILTIMING:
; 492 : {
; 493 : PILTIMING_MESSAGE pITM = (PILTIMING_MESSAGE) lpInBuf;
; 494 :
; 495 : extern DWORD PerfCountSinceTick();
; 496 : extern DWORD PerfCountFreq();
; 497 :
; 498 : if ((nInBufSize != sizeof(ILTIMING_MESSAGE)) || !lpInBuf) {
00310 e35e0018 cmp lr, #0x18
00314 1a000041 bne |$L16805|
00318 e3550000 cmp r5, #0
0031c 0a00003f beq |$L16805|
; 501 : }
; 502 :
; 503 : switch (pITM->wMsg) {
00320 e1d530b0 ldrh r3, [r5]
00324 e3530001 cmp r3, #1
00328 0a000028 beq |$L16812|
0032c e3530002 cmp r3, #2
00330 0a000022 beq |$L16814|
00334 e3530003 cmp r3, #3
00338 0a00000e beq |$L16816|
0033c e3530004 cmp r3, #4
00340 0a000006 beq |$L16817|
; 538 : break;
; 539 :
; 540 : default:
; 541 : RETAILMSG(1, (TEXT("IOCTL_HAL_ILTIMING: BAD MESSAGE!\r\n")));
00344 e59f0a90 ldr r0, [pc, #0xA90]
00348 eb000000 bl NKDbgPrintfW
; 542 : SetLastError(ERROR_INVALID_PARAMETER);
0034c e59f39c0 ldr r3, [pc, #0x9C0]
00350 e3a00057 mov r0, #0x57
00354 e1a0e00f mov lr, pc
00358 e12fff13 bx r3
; 543 : return FALSE;
0035c eaffff5d b |$L16908|
00360 |$L16817|
; 528 : #if 0
; 529 : RETAILMSG(1, (TEXT("ILTiming GetTime @ 0x%08X:%08X\r\n"),
; 530 : pITM->dwParam1, pITM->dwParam2));
; 531 : #endif /* 0/1 */
; 532 :
; 533 : break;
; 534 :
; 535 : case ILTIMING_MSG_GET_PFN:
; 536 : pITM->pfnPerfCountSinceTick = (PVOID)PerfCountSinceTick;
00360 e59f3a70 ldr r3, [pc, #0xA70]
; 537 : RETAILMSG (1, (TEXT("ILTiming GetPFN\r\n")));
00364 e59f0a68 ldr r0, [pc, #0xA68]
00368 e5853014 str r3, [r5, #0x14]
0036c eb000000 bl NKDbgPrintfW
; 828 : }
; 829 : }
; 830 :
; 831 : break;
; 832 :
; 833 :
; 834 : #ifdef EP93XX_SIMULAT_PS2_KBD
; 835 :
; 836 : case IOCTL_HAL_PS2_SEND:
; 837 : return SendDataToPS2( lpInBuf ,nInBufSize );
; 838 : break;
; 839 : case IOCTL_HAL_PS2_GET:
; 840 : return ReadPS2Data(lpOutBuf, nOutBufSize, lpBytesReturned );
; 841 : break;
; 842 : #endif
; 843 :
; 844 : #ifdef EDB9315A_CIR
; 845 : case IOCTL_HAL_PIO_CIR:
; 846 : return GetKeyName( lpOutBuf, nOutBufSize, lpBytesReturned );
; 847 : break;
; 848 : #endif
; 849 :
; 850 : }
; 851 :
; 852 : return(TRUE);
00370 e3a00001 mov r0, #1
00374 eaffff58 b |$L16625|
00378 |$L16816|
; 520 :
; 521 : case ILTIMING_MSG_GET_TIMES:
; 522 : pITM->dwIsrTime1 = dwIsrTime1;
00378 e59f3a30 ldr r3, [pc, #0xA30]
; 523 : pITM->dwIsrTime2 = dwIsrTime2;
0037c e59f2a4c ldr r2, [pc, #0xA4C]
; 524 : pITM->wNumInterrupts = wNumInterrupts;
00380 e59f4a2c ldr r4, [pc, #0xA2C]
00384 e5933000 ldr r3, [r3]
; 525 : pITM->dwSPC = dwSPC;
00388 e59f1a3c ldr r1, [pc, #0xA3C]
0038c e5853004 str r3, [r5, #4]
00390 e5923000 ldr r3, [r2]
00394 e5853008 str r3, [r5, #8]
00398 e1d430b0 ldrh r3, [r4]
0039c e1c530b2 strh r3, [r5, #2]
003a0 e5913000 ldr r3, [r1]
003a4 e585300c str r3, [r5, #0xC]
; 526 : pITM->dwFrequency = PerfCountFreq();
003a8 eb000000 bl PerfCountFreq
; 527 : wNumInterrupts = 0;
003ac e3a03000 mov r3, #0
003b0 e5850010 str r0, [r5, #0x10]
003b4 e1c430b0 strh r3, [r4]
; 828 : }
; 829 : }
; 830 :
; 831 : break;
; 832 :
; 833 :
; 834 : #ifdef EP93XX_SIMULAT_PS2_KBD
; 835 :
; 836 : case IOCTL_HAL_PS2_SEND:
; 837 : return SendDataToPS2( lpInBuf ,nInBufSize );
; 838 : break;
; 839 : case IOCTL_HAL_PS2_GET:
; 840 : return ReadPS2Data(lpOutBuf, nOutBufSize, lpBytesReturned );
; 841 : break;
; 842 : #endif
; 843 :
; 844 : #ifdef EDB9315A_CIR
; 845 : case IOCTL_HAL_PIO_CIR:
; 846 : return GetKeyName( lpOutBuf, nOutBufSize, lpBytesReturned );
; 847 : break;
; 848 : #endif
; 849 :
; 850 : }
; 851 :
; 852 : return(TRUE);
003b8 e3a00001 mov r0, #1
003bc eaffff46 b |$L16625|
003c0 |$L16814|
; 514 : break;
; 515 :
; 516 : case ILTIMING_MSG_DISABLE:
; 517 : RETAILMSG(1, (TEXT("ILTiming Disable\r\n")));
003c0 e59f0a00 ldr r0, [pc, #0xA00]
003c4 eb000000 bl NKDbgPrintfW
; 518 : fIntrTime = FALSE;
003c8 e59f39ec ldr r3, [pc, #0x9EC]
; 519 : break;
003cc ea000249 b |$L16996|
003d0 |$L16812|
; 504 : case ILTIMING_MSG_ENABLE:
; 505 : dwIntrTimeCountdownRef = pITM->dwFrequency;
003d0 e5953010 ldr r3, [r5, #0x10]
003d4 e59f49e8 ldr r4, [pc, #0x9E8]
; 506 : RETAILMSG(1,
; 507 : (TEXT("ILTiming Enable (@ every %d ticks)\r\n"),
; 508 : dwIntrTimeCountdownRef));
003d8 e59f09e0 ldr r0, [pc, #0x9E0]
003dc e1a01003 mov r1, r3
003e0 e5843000 str r3, [r4]
003e4 eb000000 bl NKDbgPrintfW
; 509 :
; 510 : dwIntrTimeCountdown = dwIntrTimeCountdownRef;
; 511 : wNumInterrupts = 0;
; 512 : dwIsrTime1 = 0xFFFFFFFF;
; 513 : fIntrTime = TRUE;
003e8 e59f09cc ldr r0, [pc, #0x9CC]
003ec e594e000 ldr lr, [r4]
003f0 e59f39c0 ldr r3, [pc, #0x9C0]
003f4 e59f29b8 ldr r2, [pc, #0x9B8]
003f8 e59f19b0 ldr r1, [pc, #0x9B0]
003fc e3a06001 mov r6, #1
00400 e3a04000 mov r4, #0
00404 e3e05000 mvn r5, #0
00408 e5806000 str r6, [r0]
0040c e583e000 str lr, [r3]
; 828 : }
; 829 : }
; 830 :
; 831 : break;
; 832 :
; 833 :
; 834 : #ifdef EP93XX_SIMULAT_PS2_KBD
; 835 :
; 836 : case IOCTL_HAL_PS2_SEND:
; 837 : return SendDataToPS2( lpInBuf ,nInBufSize );
; 838 : break;
; 839 : case IOCTL_HAL_PS2_GET:
; 840 : return ReadPS2Data(lpOutBuf, nOutBufSize, lpBytesReturned );
; 841 : break;
; 842 : #endif
; 843 :
; 844 : #ifdef EDB9315A_CIR
; 845 : case IOCTL_HAL_PIO_CIR:
; 846 : return GetKeyName( lpOutBuf, nOutBufSize, lpBytesReturned );
; 847 : break;
; 848 : #endif
; 849 :
; 850 : }
; 851 :
; 852 : return(TRUE);
00410 e3a00001 mov r0, #1
00414 e1c240b0 strh r4, [r2]
00418 e5815000 str r5, [r1]
0041c eaffff2e b |$L16625|
00420 |$L16805|
; 499 : SetLastError(ERROR_INVALID_PARAMETER);
00420 e59f38ec ldr r3, [pc, #0x8EC]
00424 e3a00057 mov r0, #0x57
00428 e1a0e00f mov lr, pc
0042c e12fff13 bx r3
; 500 : return(FALSE);
00430 eaffff28 b |$L16908|
00434 |$L16755|
; 404 : return TRUE;
; 405 :
; 406 : case IOCTL_HAL_REBOOT:
; 407 : //
; 408 : // Perform a warm reset of the device.
; 409 : //
; 410 : RETAILMSG(1, (TEXT("Performing warm reset.\r\n")));
00434 e59f0970 ldr r0, [pc, #0x970]
00438 eb000000 bl NKDbgPrintfW
; 411 : //
; 412 : // Trun on the red LED
; 413 : //
; 414 : *GPIO_PEDR |= 0x02;
0043c e59f0964 ldr r0, [pc, #0x964]
; 415 : //
; 416 : // Trun on the watchdog.
; 417 : //
; 418 : *WATCHDOG_WDCONTROL = 0xAAAA;
00440 e3a0120b mov r1, #0xB, 4
00444 e3a02caa mov r2, #0xAA, 24
00448 e5903000 ldr r3, [r0]
0044c e3811725 orr r1, r1, #0x25, 14
00450 e38220aa orr r2, r2, #0xAA
00454 e3833002 orr r3, r3, #2
00458 e5803000 str r3, [r0]
0045c e5812000 str r2, [r1]
00460 |$L16760|
; 419 : while(1){};
00460 eafffffe b |$L16760|
00464 |$L16773|
; 435 :
; 436 : break;
; 437 :
; 438 : case IOCTL_HAL_GET_DEVICEID :
; 439 : {
; 440 : PDEVICE_ID pDeviceID = (PDEVICE_ID)lpOutBuf;
; 441 :
; 442 : #define OAL_MAX_PLAT_ID 10
; 443 :
; 444 : #define ROUNDUP(len) ((len+3)&0xFFFFFFFC)
; 445 : #define REQ_SIZE (ROUNDUP(sizeof(DEVICE_ID)) + ROUNDUP(sizeof(HALPresetID)) + ROUNDUP(OAL_MAX_PLAT_ID))
; 446 :
; 447 :
; 448 : if (lpBytesReturned) {
00464 e59d304c ldr r3, [sp, #0x4C]
00468 e3a0203c mov r2, #0x3C
0046c e3530000 cmp r3, #0
; 449 :
; 450 : *lpBytesReturned = REQ_SIZE;
00470 15832000 strne r2, [r3]
; 451 : }
; 452 :
; 453 : if (!lpOutBuf || nOutBufSize < sizeof( DEVICE_ID ) ) {
00474 e3560000 cmp r6, #0
00478 0a00002d beq |$L16780|
0047c e59d3048 ldr r3, [sp, #0x48]
00480 e3530014 cmp r3, #0x14
00484 3a00002a bcc |$L16780|
; 456 : }
; 457 :
; 458 : pDeviceID->dwSize = REQ_SIZE;
00488 e5862000 str r2, [r6]
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -