On Tue, 21 Sep 2010 17:37:15 -0400 "Anderson, Trevor" <tander...@curtisswright.com> wrote:
> IRQ assignments for MPC8641D are "virtual", This is true for powerpc in general. > meaning "made up" and quite difficult to determine by looking through code. > But I believe the plan goes something like this: > > IRQ > --------- > 0 No interrupt > 1 - 15 External interrupts (only 1..12 would be used) > 16 - 127 Internal interrupts - see Table 9-2 of 8641D ref man, > Add 15 to the numbers shown > 128 - 255 Yours, or your BSP's, to do with as you like > 256 - 511 Message Signaled Interrupts > > If you look in the sample device trees for 8641 cards you'll see that > the interrupt values cited there for various devices match the 16..127 > group above. There are two different numberspaces involved here. The MPIC interrupt numberspace in the device tree (which is not virtual; it is a private numberspace to MPIC) is based on the offset of the registers for that interrupt source. External interrupts start at zero (which is valid), internal at 16, and special things like MSIs at higher numbers (I don't think it's quite 256). The numberspace for virtual interrupts, which is what you pass to request_irq(), is dynamically allocated. You shouldn't need to know anything about it other than that zero is invalid, and you get the virtual IRQ from irq_of_parse_and_map() or another such mapping function. In neither case is there a range that is set aside for you "to do with as you like". If you have another interrupt controller and need a block of virtual interrupts, register the controller with irq_alloc_host() and you'll get a block assigned. -Scott _______________________________________________ Linuxppc-dev mailing list Linuxppc-dev@lists.ozlabs.org https://lists.ozlabs.org/listinfo/linuxppc-dev