On Thu, Apr 30, 2009 at 1:11 PM, Joseph Smith joe@settoplinux.org wrote:
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 */
yes, but what I have been trying to explain (badly) is that you don't want to think of those functions as devices. They're functions. So, in your sample table above, all the entries save the first one are illegal -- PIRQ tables don't have non-zero functions. They only describe how the (one or more) wires from a device are hooked up.
[A] USB UHCI 1 [B] USB UHCI 2 [C] USB UHCI 3 [D] EHCI
I still think your diagram is misleading in that it implies wires that are not really there -- correct me if I got this wrong again.
But the way I view it is that the device (which used to be a multi-function board or chip) is what is physically wired to the four IRQ lines. To put it another way, the swizzling you show occurfing inside the device doesn't really occur; that kind of INT swizzling is done on the mainboard itself. It's not possible, for example, for USB UHCI2 to use INTA -- the wires don't exist. But your diagram implies any of the four functions can use any of the four interrupts, which is not correct.
So I draw it differently, with one device with INT A,B,C,D and the functions wired internally, one to each INT.
ron