阅读:1817回复:0
我的isa驱动为什么会在重启系统后偶尔进入不了中断服务程序(少数情况,此时无法收到数据),附代码
驱动就是用ds的向导生成的,主要改了下面两个例程,其他地方基本上没有动,驱动能够正常工作,接收isa的中断和数据,但是不知道为什么在重启5-6次之中,总会发生一次接受不到中断的情况。故障时,用windriver可以收到数据,所以我觉得应该是我这个驱动的问题,请教大家,还要从哪方面找找原因.
NTSTATUS IsaDevice::DeviceControl(KIrp I) { NTSTATUS status; t << "Entering IsaDevice::Device Control, " << I << EOL; switch (I.IoctlCode()) { case Event_Isa: { HANDLE hEvent = *(HANDLE*)I.IoctlBuffer(); if (m_pEvent) delete m_pEvent; m_pEvent = new (NonPagedPool) KEvent(hEvent, OBJECT_TYPE_ALL_ACCESS); return I.Complete(STATUS_SUCCESS); } case GetData_Isa: { m_ResetIntr = (UCHAR)0; //清中断 if (SynchronizeInterrupt(&m_Irq, LinkTo(ReadData), PIRP(I)) ) return I.Complete(STATUS_SUCCESS); else return I.Complete(STATUS_UNSUCCESSFUL); return STATUS_UNSUCCESSFUL; } case EZ_ISA_IOCTL_802: break; case EZ_ISA_IOCTL_803: break; case EZ_ISA_IOCTL_804: break; case EZ_ISA_IOCTL_805: break; case EZ_ISA_IOCTL_806: break; default: // Unrecognized IOCTL request status = STATUS_INVALID_PARAMETER; break; } BOOLEAN Ez_isaDevice::Isr_Irq(void) { //Get Data m_IoPortRange.outw(0x00, 0x0020); m_IoPortRange.inb(0x02, &m_Buf[1], m_DataSize); m_ResetIntr = (UCHAR)0; //清中断 if(m_pEvent) { m_pEvent->Set(); } return TRUE; } |
|