I am at the stage where I will implement Message Signaled Interrupts. So I have the pcie 2.x/3.x specs spec under the elbow (and yes, i read it ), the intel dev guides and the linux/netbsd source code.
But there are two things I don't get :
In intel dev guide 3, sections 10.11.xBits 31-20 — These bits contain a fixed value for interrupt messages (0xFEE). This value locates interrupts at the 1-MByte area with a base address of 4G – 18M. All accesses to this region are directed as interrupt messages. Care must to be taken to ensure that no other device claims the region as I/O space
I couldn't find this address in the linux source (I may have missed the spot, but..).
1) Should I understand that , in the end, the os has to write to that address 0xFEE (logical, physical ?) to acknowledge the device ?
I am sure that the answer is no (even the spec doesn't mention it) but I am clueless
2) The vectors MSI uses : they are the one located in the IDT, right ? So we cannot have more than [256 -32(intel reserved) - 1 (spurious)] interrupts, right ? Even MSI-X could not allocate its 2048 interrupts (or is it not related with the 256 idt interrupts ?)
MSI(x) is a godsend to manage interrupts on modern hw ( I studied the pic, io-apic codes and they are a SLOW and INEFFICIENT mess).
I think I read so much that I cannot afford to understand anything more.
Your help will be greatly appreciated