I set up the MSI address register with value 0xfee00000 and data register with 0x70 (my IDT vector). I also set the ENABLE bit in MSI control register. However, I cannot get any interrupt.
I verified the behavior of my network card by replacing 0xfee00000 with an RAM location. I can clearly see that my card is writing the vector to the specified location. So I believe the MSI setting of the card is correct and the card is actually doing PCI write transaction. The problem seems to be that the processor fails to pick up the interrupt. My understand is that when the destination is in local APIC range such as 0xfee00000, some chipset should be able to cache it and convert it to an interrupt message to CPU. But the interrupt handler installed at vector 0x70 is not invoked at all. I have checked whether local APIC has been enabled by reading MSR, which gives 0xfee00900. So the enable bit (bit 11) is also set. I don't know where I missed. Any ideas?
Unable to get MSI interrupt from my e1000 card!
Re: Unable to get MSI interrupt from my e1000 card!
Do you check the IRR/ISR in Local APIC to see if the corresponding bit is set or not ?
Re: Unable to get MSI interrupt from my e1000 card!
I hope that this post/topic would help in the process of understanding: http://forum.osdev.org/viewtopic.php?f= ... ta#p203973