On Thu, Oct 14, 2010 at 3:02 PM, David Daney <firstname.lastname@example.org> wrote:
> Using the forthcoming open firmware (OF) on mips patches, requires
> that several interrupt related definitions be added.
> In the future we may want to allow some sort of override for
> irq_create_mapping, but for now it is just supplies an identity
> Signed-off-by: David Daney <email@example.com>
> Cc: Grant Likely <firstname.lastname@example.org>
If you try my current next-devicetree branch then this patch should
not be necessary. I was able to build the mips patch before I posted it.
> arch/mips/include/asm/irq.h | 33 +++++++++++++++++++++++++++++++++
> 1 files changed, 33 insertions(+), 0 deletions(-)
> diff --git a/arch/mips/include/asm/irq.h b/arch/mips/include/asm/irq.h
> index dea4aed..f109e67 100644
> --- a/arch/mips/include/asm/irq.h
> +++ b/arch/mips/include/asm/irq.h
> @@ -16,6 +16,39 @@
> #include <irq.h>
> +#define NO_IRQ UINT_MAX
Really? The verdict came down a long time ago that 0 is to be the
value that means no irq, and only a few architectures still define
NO_IRQ as -1. It is assumed that the architectures which do not
define NO_IRQ use 0 as the invalid value. Mostly notably x86 does not
define NO_IRQ, and Linus nack'd the patch to add it.
linux-2.6$ git grep '#define[ \t]*NO_IRQ[^_]'
arch/arm/include/asm/irq.h:#define NO_IRQ ((unsigned int)(-1))
arch/microblaze/include/asm/irq.h:#define NO_IRQ (-1)
arch/mn10300/include/asm/irq.h:#define NO_IRQ INT_MAX
arch/parisc/include/asm/irq.h:#define NO_IRQ (-1)
arch/powerpc/include/asm/irq.h:#define NO_IRQ (0)
arch/xtensa/variants/s6000/include/variant/irq.h:#define NO_IRQ (-1)
drivers/input/touchscreen/ucb1400_ts.c:#define NO_IRQ 0
drivers/of/irq.c:#define NO_IRQ 0
drivers/pcmcia/pd6729.c:#define NO_IRQ ((unsigned int)(0))
drivers/rtc/rtc-m48t59.c:#define NO_IRQ (-1)
drivers/scsi/arm/fas216.h:#define NO_IRQ 255
As far as I can tell, only arm, microblaze, mn10200, parisc, and
xtensa define NO_IRQ to -1, and of those I've got a pending patch to
change Microblaze to use 0. arm is the hard holdout because of all
the legacy board ports.
> + * This type is the placeholder for a hardware interrupt number. It
> + * has to be big enough to enclose whatever representation is used by
> + * a given platform.
> + */
> +typedef unsigned long irq_hw_number_t;
> +static inline void irq_dispose_mapping(unsigned int virq)
> + return;
> +struct irq_host;
> + * irq_create_mapping - Map a hardware interrupt into linux virq space
> + * @host: host owning this hardware interrupt or NULL for default host
> + * @hwirq: hardware irq number in that host space
> + *
> + * Only one mapping per hardware interrupt is permitted. Returns a linux
> + * virq number.
> + * If the sense/trigger is to be specified, set_irq_type() should be called
> + * on the number returned from that call.
> + */
> +static inline unsigned int irq_create_mapping(struct irq_host *host,
> + irq_hw_number_t hwirq)
> + /* For now, an identity mapping. */
> + return (unsigned int)hwirq;
> #ifdef CONFIG_I8259
> static inline int irq_canonicalize(int irq)
Grant Likely, B.Sc., P.Eng.
Secret Lab Technologies Ltd.