Hi,
Doing ACPI only IRQ routing is quite easy. I'm not going to describe whole ACPI table stuff just the part you need for the routing:
http://www.linuxbios.org/pipermail/linuxbios/2007-October/025845.html
Check the dsdt.asl file in patch above. /* top PCI device */ Device (PCI0) { Name (_HID, EisaId ("PNP0A03")) Name (_ADR, 0x00) Name (_UID, 0x00) Name (_BBN, 0x00) /* PCI Routing Table */ //aaa Name (_PRT, Package () {
This is where actual routing table for SB starts:
Package (0x04) { 0x000BFFFF, 0x00, 0x00, 0x10 },
0xDDDDFFFF, LNK, 00, GSI
DDDD is PCI DEV, FFFF is function, LNK is PCI link - so LNKA B etc... Next parameter is 00 if you do not support legacy PIC routing at all.
Last parameter is global interrupt NR.
//slot 0xB Package (0x04) { 0x000BFFFF, 0x01, 0x00, 0x11 }, Package (0x04) { 0x000BFFFF, 0x02, 0x00, 0x12 }, Package (0x04) { 0x000BFFFF, 0x03, 0x00, 0x13 }, Package (0x04) { 0x000CFFFF, 0x00, 0x00, 0x11 }, //Slot 0xC Package (0x04) { 0x000CFFFF, 0x01, 0x00, 0x12 }, Package (0x04) { 0x000CFFFF, 0x02, 0x00, 0x13 }, Package (0x04) { 0x000CFFFF, 0x03, 0x00, 0x10 }, Package (0x04) { 0x000DFFFF, 0x00, 0x00, 0x12 }, //Slot 0xD Package (0x04) { 0x000DFFFF, 0x01, 0x00, 0x13 }, Package (0x04) { 0x000DFFFF, 0x02, 0x00, 0x10 }, Package (0x04) { 0x000DFFFF, 0x03, 0x00, 0x11 }, Package (0x04) { 0x000F0000, 0x01, 0x00, 0x14 }, //0xf SATA IRQ 20 Package (0x04) { 0x000F0001, 0x00, 0x00, 0x14 },
So for example SATA is routed through LNKA, and it is device 0f.1.
//0xf NAtive IDE IRQ 20 Package (0x04) { 0x0010FFFF, 0x00, 0x00, 0x15 }, //USB routing Package (0x04) { 0x0010FFFF, 0x01, 0x00, 0x15 }, Package (0x04) { 0x0010FFFF, 0x02, 0x00, 0x15 }, Package (0x04) { 0x0010FFFF, 0x03, 0x00, 0x15 }, Package (0x04) { 0x0011FFFF, 0x02, 0x00, 0x16 }, //AC97 MC97 Package (0x04) { 0x0002FFFF, 0x00, 0x00, 0x1B }, //PCIE16 bridge IRQ27 Package (0x04) { 0x0002FFFF, 0x01, 0x00, 0x1B }, Package (0x04) { 0x0002FFFF, 0x02, 0x00, 0x1B }, Package (0x04) { 0x0002FFFF, 0x03, 0x00, 0x1B }, Package (0x04) { 0x0003FFFF, 0x00, 0x00, 0x1F }, //PCIE bridge IRQ31 Package (0x04) { 0x0003FFFF, 0x01, 0x00, 0x23 }, //IRQ36 Package (0x04) { 0x0003FFFF, 0x02, 0x00, 0x27 }, //IRQ39 Package (0x04) { 0x0003FFFF, 0x03, 0x00, 0x2B } //IRQ43 })
Device (PEGG) { Name (_ADR, 0x00020000) Name (_UID, 0x00) Name (_BBN, 0x02)
Other devices may have own PRT tables. Name (_PRT, Package () { Package (0x04) { 0x0000FFFF, 0x00, 0x00, 0x18 }, //PCIE IRQ24-IRQ27 Package (0x04) { 0x0000FFFF, 0x01, 0x00, 0x19 }, Package (0x04) { 0x0000FFFF, 0x02, 0x00, 0x1A }, Package (0x04) { 0x0000FFFF, 0x03, 0x00, 0x1B }, }) } //end of PCIEG
Hope it helps,
Rudolf