On Thu, 2009-12-03 at 11:52 -0800, David Hawkins wrote: > > Really? I thought the pci_dev structures represent the > devices found on the PCI bus, and the IRQ line in > that structure was merely copied from the configuration > space registers.
No, it's not. In fact it's mostly irrelevant. It has room for only 8 bits and we commonly manipulate a lot more interrupts on some modern systems. Linux will obtain from the device-tree the routing for the interrupt line(s) of the device. If you don't have a node for the device (which is allowed for PCI), linux will use the INTERRUPT_PIN register to query which interrupt line is the device output, and will use the host bridge device-tree node "interrupt-map" property to find where it's connected to on the PIC. It will then map that to a linux virtual IRQ number which is what you find in pci_dev. At least that's how it works on powerpc :-) > When you request that interrupt, the > code would have to remap it to a host IRQ line, which > it would use the DTS for. (But I'm just speculating). No, it's already remapped in pci_dev. The mapping happen when the PCI devices are discovered by the kernel. > Bottom line is; if the IRQ field of lspci is 0, then you > need to figure out that problem first :) I wouldn't trust lspci too much, I'm not sure we bother writing back the number to the PCI_INTERRUPT_LINE register anymore anyways. If your pci_dev->irq is non-0 then Linux found -something- but it might not be right, it depends on your device-tree. Cheers, Ben. _______________________________________________ Linuxppc-dev mailing list Linuxppc-dev@lists.ozlabs.org https://lists.ozlabs.org/listinfo/linuxppc-dev