On Thu, 30 Apr 2009 10:10:04 -0700, ron minnich rminnich@gmail.com wrote:
Someone more knowledgeable than I pointed that I got this wrong. Sorry.
On Thu, Apr 30, 2009 at 7:55 AM, ron minnich rminnich@gmail.com wrote:
A device itself has only one wire -- there is one physical wire for that chip or device. It is called the interrupt line.
A device can actually connect to up to all four wires. This is way more common than I realized -- I have not paid attention lately.
The device can be wired such that different functions on the device are wired to different physical interrupt lines that are then wired to the bus/irq router. example on the m57sli: [rminnich@amd64 ~]$ setpci -s 0:5.2 3d.b 03 [rminnich@amd64 ~]$ setpci -s 0:5.1 3d.b 02 [rminnich@amd64 ~]$ setpci -s 0:5.0 3d.b 01
But the spec I referred you to does not list functions in the PIRQ table, only devices. You would use the value of the 3d register to then map from the table to the actual line which these are wired to. You can find out what IRQ it got in 3c.b [rminnich@amd64 ~]$ setpci -s 0:5.2 3c.b 0f [rminnich@amd64 ~]$ setpci -s 0:5.1 3c.b 0b [rminnich@amd64 ~]$ setpci -s 0:5.0 3c.b 0a [rminnich@amd64 ~]$
Functions have interrupts, but the only interrupts listed in a PIRQ are for the device.
Sorry for sowing confusion.
Right. So in my example: |- USB #1 |- USB #2 |- USB #3 |-EHCI {0x00,(0x1d<<3)|0x0, {{0x60, 0x1ef8}, {0x63, 0x1ef8}, {0x62, 0x1ef8}, {0x6b, 0x01ef8}}, 0x0, 0x0},
is the same as:
{0x00,(0x1d<<3)|0x0, {{0x60, 0x1ef8}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x00000}}, 0x0, 0x0}, /* [A] USB UHCI 1 */ {0x00,(0x1d<<3)|0x1, {{0x60, 0x1ef8}, {0x63, 0x1ef8}, {0x00, 0x0000}, {0x00, 0x00000}}, 0x0, 0x0}, /* [B] USB UHCI 2 */ {0x00,(0x1d<<3)|0x2, {{0x60, 0x1ef8}, {0x63, 0x1ef8}, {0x62, 0x1ef8}, {0x00, 0x00000}}, 0x0, 0x0}, /* [C] USB UHCI 3 */ {0x00,(0x1d<<3)|0x7, {{0x60, 0x1ef8}, {0x63, 0x1ef8}, {0x62, 0x1ef8}, {0x6b, 0x01ef8}}, 0x0, 0x0}, /* [D] EHCI */
PIRQA(0X60 0x03 PIRQB(0X61) 0x05 PIRQC(0X62) 0x06 PIRQD(0X63) 0x07 PIRQE(0X68) 0x09 PIRQF(0X69) 0x0A PIRQG(0X6A) 0x0B PIRQH(0X6B) 0x0C
Also in Linux dmesg it shows what Int the device is connected to on the interrupt router:
[A] USB UHCI 1 [B] USB UHCI 2 [C] USB UHCI 3 [D] EHCI
3 of the four devices have multiple INT lines running through them so a physical map would look like the attached file.