Missing MSI interrupts

Comments and questions to the author of the "Down to the TLP" posts (Eli Billauer)

Missing MSI interrupts

Postby Guest » Wed Apr 26, 2017 11:17 am


I'm writing WDM driver and I'm having difficulties with getting message signaled interrupts to work.
Interrupt is sent from Xilinx SoC on PCIe card. I register my ISR like this:

RtlZeroMemory( &IntParams, sizeof( IO_CONNECT_INTERRUPT_PARAMETERS ) );

IntParams.MessageBased.ConnectionContext.Generic = &DevExt->InterruptConnectionContext;
IntParams.MessageBased.PhysicalDeviceObject = DevExt->PhysicalDeviceObject;
IntParams.MessageBased.MessageServiceRoutine = Card_MessageSignaledISR;
IntParams.MessageBased.ServiceContext = DeviceObject;
IntParams.MessageBased.SpinLock = NULL;
IntParams.MessageBased.SynchronizeIrql = 0;
IntParams.MessageBased.FloatingSave = FALSE;
IntParams.MessageBased.FallBackServiceRoutine = Card_InterruptServiceRoutine;

Status = IoConnectInterruptEx( &IntParams );

This is called when driver receives IRP_MN_START_DEVICE. IoConntectInterruptEx returns STATUS_SUCCESS but my ISR never gets called.
Also, I enable MSI in .inf file like this:

HKR,"Interrupt Management",,0x00000010 HKR,"Interrupt Management\MessageSignaledInterruptProperties",,0x00000010
HKR,"Interrupt Management\MessageSignaledInterruptProperties",MSISupported,0x00010001,1
HKR,"Interrupt Management\MessageSignaledInterruptProperties",MessageNumberLimit,0x00010001,1

It is worth mentioning that I'm sure that SoC actually triggers interrupt since I wrote Linux driver for it and it successfully receives it.
Any idea what could be wrong with my code?

Thanks in advance.

Return to General PCIe