📄 oemioctl.cod
字号:
; 413 :
; 414 : case ILTIMING_MSG_GET_TIMES:
; 415 : pITM->dwIsrTime1 = dwIsrTime1;
00658 e59f04f8 ldr r0, [pc, #0x4F8]
; 416 : pITM->dwIsrTime2 = dwIsrTime2;
; 417 : pITM->wNumInterrupts = wNumInterrupts;
0065c e59f44f8 ldr r4, [pc, #0x4F8]
00660 e5901000 ldr r1, [r0]
00664 e59f0508 ldr r0, [pc, #0x508]
00668 e5891004 str r1, [r9, #4]
0066c e5901000 ldr r1, [r0]
00670 e5891008 str r1, [r9, #8]
00674 e1d400b0 ldrh r0, [r4]
; 418 : pITM->dwSPC = dwSPC;
00678 e59f14f0 ldr r1, [pc, #0x4F0]
0067c e1c900b2 strh r0, [r9, #2]
00680 e5910000 ldr r0, [r1]
00684 e589000c str r0, [r9, #0xC]
; 419 : pITM->dwFrequency = PerfCountFreq();
00688 eb000000 bl PerfCountFreq
0068c e5890010 str r0, [r9, #0x10]
; 420 : wNumInterrupts = 0;
00690 e3a00000 mov r0, #0
00694 e1c400b0 strh r0, [r4]
; 631 : }
; 632 :
; 633 : return(TRUE);
00698 e1a00007 mov r0, r7
0069c ea000116 b |$L14784|
006a0 |$L14966|
; 406 : fIntrTime = TRUE;
; 407 : break;
; 408 :
; 409 : case ILTIMING_MSG_DISABLE:
; 410 : RETAILMSG(1, (TEXT("ILTiming Disable\r\n")));
006a0 e59f04c4 ldr r0, [pc, #0x4C4]
006a4 eb000000 bl NKDbgPrintfW
; 411 : fIntrTime = FALSE;
006a8 e59f34a4 ldr r3, [pc, #0x4A4]
006ac e3a00000 mov r0, #0
006b0 e5830000 str r0, [r3]
; 631 : }
; 632 :
; 633 : return(TRUE);
006b4 e1a00007 mov r0, r7
006b8 ea00010f b |$L14784|
006bc |$L14964|
; 397 : case ILTIMING_MSG_ENABLE:
; 398 : dwIntrTimeCountdownRef = pITM->dwFrequency;
006bc e5991010 ldr r1, [r9, #0x10]
006c0 e59f44a0 ldr r4, [pc, #0x4A0]
; 399 : RETAILMSG(1,
; 400 : (TEXT("ILTiming Enable (@ every %d ticks)\r\n"),
; 401 : dwIntrTimeCountdownRef));
006c4 e59f0498 ldr r0, [pc, #0x498]
006c8 e5841000 str r1, [r4]
006cc eb000000 bl NKDbgPrintfW
; 402 :
; 403 : dwIntrTimeCountdown = dwIntrTimeCountdownRef;
006d0 e59f0488 ldr r0, [pc, #0x488]
006d4 e5943000 ldr r3, [r4]
; 404 : wNumInterrupts = 0;
006d8 e59f147c ldr r1, [pc, #0x47C]
006dc e5803000 str r3, [r0]
006e0 e3a00000 mov r0, #0
006e4 e1c100b0 strh r0, [r1]
; 405 : dwIsrTime1 = 0xFFFFFFFF;
006e8 e3e01000 mvn r1, #0
006ec e59f0464 ldr r0, [pc, #0x464]
006f0 e5801000 str r1, [r0]
; 631 : }
; 632 :
; 633 : return(TRUE);
006f4 e1a00007 mov r0, r7
006f8 e59f1454 ldr r1, [pc, #0x454]
006fc e5817000 str r7, [r1]
00700 ea0000fd b |$L14784|
00704 |$L14957|
; 392 : SetLastError(ERROR_INVALID_PARAMETER);
00704 e59f1408 ldr r1, [pc, #0x408]
00708 e3a00057 mov r0, #0x57
0070c e1a0e00f mov lr, pc
00710 e12fff11 bx r1
; 620 : return(FALSE);
00714 e3a00000 mov r0, #0
00718 ea0000f7 b |$L14784|
0071c |$L14983|
; 455 : return TRUE;
; 456 :
; 457 : case IOCTL_VBRIDGE_GET_RX_PACKET:
; 458 : if (lpOutBuf) {
0071c e3580000 cmp r8, #0
00720 0a000003 beq |$L14984|
; 459 : return VBridgeUGetOneRxPacket((PUCHAR *)lpOutBuf, lpBytesReturned);
00724 e59d1054 ldr r1, [sp, #0x54]
00728 e1a00008 mov r0, r8
0072c eb000000 bl VBridgeUGetOneRxPacket
00730 ea0000f1 b |$L14784|
00734 |$L14984|
; 460 : }
; 461 :
; 462 : SetLastError(ERROR_INVALID_PARAMETER);
00734 e59f13d8 ldr r1, [pc, #0x3D8]
00738 e3a00057 mov r0, #0x57
0073c e1a0e00f mov lr, pc
00740 e12fff11 bx r1
; 620 : return(FALSE);
00744 e3a00000 mov r0, #0
00748 ea0000eb b |$L14784|
0074c |$L15063|
; 118 : DWORD len;
; 119 : PIP_INFO pIPInfo;
; 120 : EDBG_ADDR *pEdbgAddr;
; 121 : ULONG ulTemp;
; 122 :
; 123 :
; 124 : DEBUGMSG(0, (TEXT("+OEMIoControl %X\r\n"), dwIoControlCode));
; 125 :
; 126 : switch (dwIoControlCode) {
0074c e59f03fc ldr r0, [pc, #0x3FC]
00750 e1560000 cmp r6, r0
00754 8a00005d bhi |$L15065|
00758 0a000043 beq |$L15001|
0075c e59f03e8 ldr r0, [pc, #0x3E8]
00760 e1560000 cmp r6, r0
00764 0a00003c beq |$L14988|
00768 e59f03d8 ldr r0, [pc, #0x3D8]
0076c e1560000 cmp r6, r0
00770 0a000035 beq |$L14990|
00774 e59f03c8 ldr r0, [pc, #0x3C8]
00778 e1560000 cmp r6, r0
0077c 0a0000bd beq |$L15007|
00780 e59f03b8 ldr r0, [pc, #0x3B8]
00784 e1560000 cmp r6, r0
00788 0a000027 beq |$L14992|
0078c e59f03a8 ldr r0, [pc, #0x3A8]
00790 e1560000 cmp r6, r0
00794 0a00001d beq |$L14996|
00798 e59f0398 ldr r0, [pc, #0x398]
0079c e1560000 cmp r6, r0
007a0 1a00005c bne |$L15041|
; 518 : return FALSE;
; 519 :
; 520 : // Provide interrupt number based on device location
; 521 : case IOCTL_HAL_REQUEST_IRQ:
; 522 : if (nInBufSize >= sizeof(DEVICE_LOCATION) && nOutBufSize >= sizeof(DWORD) && lpOutBuf && lpInBuf) {
007a4 e3550014 cmp r5, #0x14
007a8 3a000012 bcc |$L15014|
007ac e59d0050 ldr r0, [sp, #0x50]
007b0 e3500004 cmp r0, #4
007b4 3a00000f bcc |$L15014|
007b8 e3580000 cmp r8, #0
007bc 0a00000d beq |$L15014|
007c0 e3590000 cmp r9, #0
007c4 0a00000b beq |$L15014|
; 523 : if(!OEMGetInterrupt((PDEVICE_LOCATION)lpInBuf, (PDWORD)lpOutBuf))
007c8 e1a01008 mov r1, r8
007cc e1a00009 mov r0, r9
007d0 eb000000 bl OEMGetInterrupt
007d4 e3500000 cmp r0, #0
; 524 : return(FALSE);
007d8 0a000052 beq |$L15097|
; 525 :
; 526 : if (lpBytesReturned) {
007dc e59d0054 ldr r0, [sp, #0x54]
007e0 e3500000 cmp r0, #0
007e4 0a000097 beq |$L14791|
; 527 : *lpBytesReturned = sizeof(DWORD);
007e8 e3a01004 mov r1, #4
007ec e5801000 str r1, [r0]
; 631 : }
; 632 :
; 633 : return(TRUE);
007f0 e1a00007 mov r0, r7
007f4 ea0000c0 b |$L14784|
007f8 |$L15014|
; 528 : }
; 529 :
; 530 : break;
; 531 : }
; 532 :
; 533 : SetLastError(ERROR_INVALID_PARAMETER);
007f8 e59f1314 ldr r1, [pc, #0x314]
007fc e3a00057 mov r0, #0x57
00800 e1a0e00f mov lr, pc
00804 e12fff11 bx r1
; 620 : return(FALSE);
00808 e3a00000 mov r0, #0
0080c ea0000ba b |$L14784|
00810 |$L14996|
; 480 : return TRUE;
; 481 : }
; 482 : return FALSE;
; 483 :
; 484 : case IOCTL_VBRIDGE_802_3_MULTICAST_LIST:
; 485 : if (OEMEthMulticastList((PUCHAR)lpInBuf, nInBufSize))
00810 e1a01005 mov r1, r5
00814 e1a00009 mov r0, r9
00818 eb000000 bl OEMEthMulticastList
0081c e3500000 cmp r0, #0
00820 0a000040 beq |$L15097|
; 629 :
; 630 : return TRUE;
00824 e3a00001 mov r0, #1
00828 ea0000b3 b |$L14784|
0082c |$L14992|
; 471 : return TRUE;
; 472 :
; 473 : case IOCTL_VBRIDGE_CURRENT_PACKET_FILTER:
; 474 : ////////////////////////////////////////////////////////////////////////
; 475 : // First, see if filter setting is implemented, then inform vbridge
; 476 : // on the new filtering.
; 477 : //
; 478 : if (OEMEthCurrentPacketFilter((PDWORD)lpInBuf)) {
0082c e1a00009 mov r0, r9
00830 eb000000 bl OEMEthCurrentPacketFilter
00834 e3500000 cmp r0, #0
00838 0a00003a beq |$L15097|
; 479 : VBridgeUCurrentPacketFilter((PDWORD)lpInBuf);
0083c e1a00009 mov r0, r9
00840 eb000000 bl VBridgeUCurrentPacketFilter
; 629 :
; 630 : return TRUE;
00844 e3a00001 mov r0, #1
00848 ea0000ab b |$L14784|
0084c |$L14990|
; 467 : return TRUE;
; 468 :
; 469 : case IOCTL_VBRIDGE_GET_ETHERNET_MAC:
; 470 : VBridgeUGetEDBGMac((PBYTE)lpOutBuf);
0084c e1a00008 mov r0, r8
00850 eb000000 bl VBridgeUGetEDBGMac
; 629 :
; 630 : return TRUE;
00854 e3a00001 mov r0, #1
00858 ea0000a7 b |$L14784|
0085c |$L14988|
; 463 : return FALSE;
; 464 :
; 465 : case IOCTL_VBRIDGE_GET_RX_PACKET_COMPLETE:
; 466 : VBridgeUGetOneRxPacketComplete((PUCHAR)lpInBuf);
0085c e1a00009 mov r0, r9
00860 eb000000 bl VBridgeUGetOneRxPacketComplete
; 629 :
; 630 : return TRUE;
00864 e3a00001 mov r0, #1
00868 ea0000a3 b |$L14784|
0086c |$L15001|
; 491 :
; 492 : case IOCTL_VBRIDGE_SHARED_ETHERNET:
; 493 : ////////////////////////////////////////////////////////////////////////
; 494 : // Yes, this kernel supports shared ethernet port.
; 495 : //
; 496 : return TRUE;
; 497 : #endif // IMGSHAREETH
; 498 :
; 499 : ////////////////////////////////////////////////////////////////////////
; 500 : ////////////////////////////////////////////////////////////////////////
; 501 : // Translate interrupt into SYSINTR
; 502 : //
; 503 : // Translate IRQ -> SYSINTR (or request new SYSINTR)
; 504 : //
; 505 : case IOCTL_HAL_TRANSLATE_IRQ:
; 506 : case IOCTL_HAL_REQUEST_SYSINTR:
; 507 : if (nInBufSize >= sizeof(DWORD) && nOutBufSize >= sizeof(DWORD) && lpOutBuf && lpInBuf) {
0086c e3550004 cmp r5, #4
00870 3a000010 bcc |$L15004|
00874 e59d0050 ldr r0, [sp, #0x50]
00878 e3500004 cmp r0, #4
0087c 3a00000d bcc |$L15004|
00880 e3580000 cmp r8, #0
00884 0a00000b beq |$L15004|
00888 e3590000 cmp r9, #0
0088c 0a000009 beq |$L15004|
; 508 : *(PDWORD)lpOutBuf = OEMRequestSysIntr(*(PDWORD)lpInBuf);
00890 e5990000 ldr r0, [r9]
00894 eb000000 bl OEMRequestSysIntr
00898 e5880000 str r0, [r8]
; 509 :
; 510 : if (lpBytesReturned) {
0089c e59d0054 ldr r0, [sp, #0x54]
008a0 e3500000 cmp r0, #0
008a4 0a000073 beq |$L15007|
; 511 : *lpBytesReturned = sizeof(DWORD);
008a8 e3a01004 mov r1, #4
008ac e5801000 str r1, [r0]
; 629 :
; 630 : return TRUE;
008b0 e3a00001 mov r0, #1
008b4 ea000090 b |$L14784|
008b8 |$L15004|
; 512 : }
; 513 :
; 514 : return TRUE;
; 515 : }
; 516 :
; 517 : SetLastError(ERROR_INVALID_PARAMETER);
008b8 e59f1254 ldr r1, [pc, #0x254]
008bc e3a00057 mov r0, #0x57
008c0 e1a0e00f mov lr, pc
008c4 e12fff11 bx r1
; 620 : return(FALSE);
008c8 e3a00000 mov r0, #0
008cc ea00008a b |$L14784|
008d0 |$L15065|
; 118 : DWORD len;
; 119 : PIP_INFO pIPInfo;
; 120 : EDBG_ADDR *pEdbgAddr;
; 121 : ULONG ulTemp;
; 122 :
; 123 :
; 124 : DEBUGMSG(0, (TEXT("+OEMIoControl %X\r\n"), dwIoControlCode));
; 125 :
; 126 : switch (dwIoControlCode) {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -