none
MSI device driver not properly registered RRS feed

  • Question

  • Hi

    I'm updating a legacy WDM driver to support an MSI capable hardware. I followed the instructions I found in MSDN.

    1- Enabled MSI in the registry:

    [nFastPCI_Inst.nt]
    CopyFiles=nFastPCI_CopyDrvFiles
    AddReg=nFastPCI_AddReg
    
    [nFastPCI_CopyDrvFiles]
    nFastPCI5.sys
    
    [nFastPCI_AddReg]
    HKR, "Parameters\PnpInterface", "5", %REG_DWORD%, 0x00000001
    HKR, "Interrupt Management",,0x00000010
    HKR, "Interrupt Management\MessageSignaledInterruptProperties",,0x00000010
    HKR, "Interrupt Management\MessageSignaledInterruptProperties","MSISupported",0x00010001,1
    HKR, "Interrupt Management\MessageSignaledInterruptProperties","MessageNumberLimit",0x00010001,4
    
    

    2- Successfully registered an InterruptMessageService routine with IoConnectInterruptEx() specifying CONNECT_MESSAGE_BASED. 

    The Device still shows up in DeviceManager as line-based interrupt (positive IRQ number).

    Is there anything else that needs to be done?.

    Thanks.

    Wednesday, August 6, 2014 10:15 PM

Answers

  • Finally I made it work. I'm sharing my results.

    1- I had to remove the CopyFile directive to it's own section and leave just

    [nFastPCI_Inst.nt.hw]
    AddReg=nFastPCI_AddReg

    [nFastPCI_AddReg]
    HKR,Interrupt Management,,0x00000010
    HKR,Interrupt Management\MessageSignaledInterruptProperties,,0x00000010
    HKR,Interrupt Management\MessageSignaledInterruptProperties,MSISupported,0x00010001,1

    2- I had to use the CONNECT_FULLY_SPECIFIED version of the ISR.

    Cheers!.


    Tuesday, August 12, 2014 6:20 PM

All replies

  • Does the system support MSI interrupts?  Windows will revert to non-MSI on a system that does not support them.


    Don Burn Windows Filesystem and Driver Consulting Website: http://www.windrvr.com

    Wednesday, August 6, 2014 10:19 PM
  • Yes, it does. I have an identical system next to it running Linux and MSI interruptions are working there.

    I also tried

    [nFastPCI_Inst.nt]

    and

    [nFastPCI_Inst.nt.hw]

    What could it be then?

    Wednesday, August 6, 2014 11:20 PM
  • First saying something works because it does on Linux, is an invalid assumption for Windows.  Windows is much stricter on the PCI spec than Linux, I have encountered close to a dozen boards or systems in the last 5 to 6 years that "work perfectly on Linux" and did not work on Windows.  At least one case required over 30 spins of the FPGA to fix all the problems.

    To determine if the system is supporting MSI, see if any devices on the Windows system have large hex (or negative integer) interrupt vectors.  On the INF file, run ChkINF and fix all warnings that you can, and all errors no matter what.  Also, how are you setting up the interrupt in your kernel code? 


    Don Burn Windows Filesystem and Driver Consulting Website: http://www.windrvr.com

    Friday, August 8, 2014 12:43 PM
  • Finally I made it work. I'm sharing my results.

    1- I had to remove the CopyFile directive to it's own section and leave just

    [nFastPCI_Inst.nt.hw]
    AddReg=nFastPCI_AddReg

    [nFastPCI_AddReg]
    HKR,Interrupt Management,,0x00000010
    HKR,Interrupt Management\MessageSignaledInterruptProperties,,0x00000010
    HKR,Interrupt Management\MessageSignaledInterruptProperties,MSISupported,0x00010001,1

    2- I had to use the CONNECT_FULLY_SPECIFIED version of the ISR.

    Cheers!.


    Tuesday, August 12, 2014 6:20 PM