diff options
author | Daniel Hellstrom <daniel@gaisler.com> | 2012-04-06 05:05:07 -0500 |
---|---|---|
committer | Joel Sherrill <joel.sherrill@oarcorp.com> | 2012-04-06 08:17:58 -0500 |
commit | 95518e59bd6dda4bda22f4f02a22613b67e39400 (patch) | |
tree | 6cfb21ea5492179731efad5a3a91813eb0f76df3 /c/src/lib/libbsp/sparc/leon3/include/bsp/irq.h | |
parent | LEON3: console use register pointers instead of UART indexes (diff) | |
download | rtems-95518e59bd6dda4bda22f4f02a22613b67e39400.tar.bz2 |
SPARC BSPs: implemented shared-irq using libbsp/shared layer
The implementation use IRQ number instead of vector number since
some IRQs does not have a unique vector, for example the extended
interrupts all enter the same trap vector entry.
Added support for the LEON3 extended interrupt controller when using
the shared IRQ layer.
ERC32 patches untested.
Signed-off-by: Daniel Hellstrom <daniel@gaisler.com>
Regenerate
Diffstat (limited to 'c/src/lib/libbsp/sparc/leon3/include/bsp/irq.h')
-rw-r--r-- | c/src/lib/libbsp/sparc/leon3/include/bsp/irq.h | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/c/src/lib/libbsp/sparc/leon3/include/bsp/irq.h b/c/src/lib/libbsp/sparc/leon3/include/bsp/irq.h new file mode 100644 index 0000000000..71c0df3c5d --- /dev/null +++ b/c/src/lib/libbsp/sparc/leon3/include/bsp/irq.h @@ -0,0 +1,36 @@ +/* LEON3 generic shared IRQ setup + * + * Based on libbsp/shared/include/irq.h. + * + * The license and distribution terms for this file may be + * found in the file LICENSE in this distribution or at + * http://www.rtems.com/license/LICENSE. + */ + +#ifndef LIBBSP_LEON3_IRQ_CONFIG_H +#define LIBBSP_LEON3_IRQ_CONFIG_H + +#define BSP_INTERRUPT_VECTOR_MAX_STD 15 /* Standard IRQ controller */ +#define BSP_INTERRUPT_VECTOR_MAX_EXT 31 /* Extended IRQ controller */ + +#define BSP_INTERRUPT_VECTOR_MIN 0 +#define BSP_INTERRUPT_VECTOR_MAX BSP_INTERRUPT_VECTOR_MAX_EXT + +/* The check is different depending on IRQ controller, runtime detected */ +#define BSP_INTERRUPT_CUSTOM_VALID_VECTOR + +extern int LEON3_IrqCtrl_EIrq; + +/** + * @brief Returns true if the interrupt vector with number @a vector is valid. + */ +static inline bool bsp_interrupt_is_valid_vector(rtems_vector_number vector) +{ + return (rtems_vector_number) BSP_INTERRUPT_VECTOR_MIN <= vector + && ((vector <= (rtems_vector_number) BSP_INTERRUPT_VECTOR_MAX_STD && + LEON3_IrqCtrl_EIrq == 0) || + (vector <= (rtems_vector_number) BSP_INTERRUPT_VECTOR_MAX_EXT && + LEON3_IrqCtrl_EIrq != 0)); +} + +#endif /* LIBBSP_LEON3_IRQ_CONFIG_H */ |