阅读:3189回复:12
为什么我的NdisMRegisterInterrupt()函数总是返回failure
我用的是CE 4.1,PXA250,在MiniportInitialize过程中调用了NdisMRegisterInterrupt()函数,但老是返回failure,调试信息如下:
43c860ee TID:43c8df36 ***NDIS*** (a, 474) 4294772663 PID:43c860ee TID:43c8df36 ==>NdisMRegisterInterrupt: Miniport 00042798 Vector 26 4294772665 PID:43c860ee TID:43c8df36 0x83c8d860: NDIS: ERROR - InterruptInitialize(26, 63c4c402) failed 4294772665 PID:43c860ee TID:43c8df36 **************+OEMInterruptDisable: SYSINTR_ETHER. 4294772666 PID:43c860ee TID:43c8df36 NdisMRegisterInterrupt: IoConnectInterrupt failed on Interrupt Level:0, Vector: 1a 4294772667 PID:43c860ee TID:43c8df36 ***NDIS*** (a, 645) 4294772667 PID:43c860ee TID:43c8df36 <==NdisMRegisterInterrupt: Miniport 00042798, Status c0000001 请问主要和什么有关,是内核里的InterruptEnable,InterruptDisable有关?还是和其它的有关? |
|
沙发#
发布于:2003-07-14 11:23
首先谢谢您的回信!
我在Platform.reg里已经定义了: \"InterruptNumber\"=dword:1A ; (SYSINTR_ETHER = SYSINTR_FIRMWARE + 10) 在小端口初始化过程中提取配置信息InterruptNumber,将InterruptNumber作为NdisMRegisterInterrupt()的一个输入量, 但仍然不对。 不知我的设置对不对? [编辑 - 7/14/03 by huminan] |
|
板凳#
发布于:2003-07-14 15:49
先给10分,我正在进行修改,还不知行不行。
我本来想找一个IOCTL_HAL_REQUEST_SYSINTR的相关例程来参考,但没找到。 我直接在MiniportInitialize()里加入如下操作: KernelIoControl(IOCTL_HAL_REQUEST_SYSINTR, &dwSysIntr_ETHER,sizeof(dwSysIntr_ETHER), pSysIntr, sizeof(*pSysIntr), NULL); 不知这样行不行,你能再给点参考吗? 先谢了。 |
|
地板#
发布于:2003-07-15 09:55
刚好我的也是ISA,关键是该函数是如何被调用的?
我在NdisMRegisterInterrupt函数之前增加了一个KernelIoControl(IOCTL_HAL_TRANSLATE_IRQ,,,,,)函数和一个InterruptInitialize函数,发现都运行正确,但NdisMRegisterInterrupt仍然返回和原来一样的错误,不知如何调用OEMTranslateIrq,我的NdisMRegisterInterrupt才能返回success。 |
|
地下室#
发布于:2003-07-15 16:45
在leo_cyl的帮助下问题已经初步解决,表示衷心的感谢!!!
|
|
5楼#
发布于:2003-07-16 14:47
加入了该段代码之后,新的问题出现了:
读写BYTE和ULONG类型数据时发生数据中断(Data abort) ??? |
|