On 6/2/21 8:53 PM, Jason Thorpe wrote:
Use system-specific information to program the interrupt line register
with the interrupt mappings, which is what the SRM console does on real
hardware; some operating systems (e.g. NetBSD) use this information
rather than having interrupt mappings tables for every possible system
variation.
Signed-off-by: Jason Thorpe <thor...@me.com>
Thanks.
+ /* Map the interrupt and program the IRQ into the line register.
+ Some operating systems rely on the Console providing this information
+ in order to avoid having mapping tables for every possible system
+ variation. */
+
+ const uint8_t pin = pci_config_readb(bdf, PCI_INTERRUPT_PIN);
+ const uint8_t slot = PCI_SLOT(bdf);
+ const int irq = MAP_PCI_INTERRUPT(slot, pin, class_id);
+
+ if (irq == -1)
+ {
+ /* No interrupt mapping. */
+ pci_config_writeb(bdf, PCI_INTERRUPT_LINE, 0xff);
+ }
+ else
+ {
+ pci_config_writeb(bdf, PCI_INTERRUPT_LINE, irq);
+ }
I've folded this non-distinction into the functional interface.
+#define MAP_PCI_INTERRUPT(SLOT, PIN, CLASS_ID) \
I've turned this into a static inline.
r~