diff options
Diffstat (limited to 'c/src/lib/libbsp/powerpc/qoriq/irq/irq.c')
-rw-r--r-- | c/src/lib/libbsp/powerpc/qoriq/irq/irq.c | 18 |
1 files changed, 16 insertions, 2 deletions
diff --git a/c/src/lib/libbsp/powerpc/qoriq/irq/irq.c b/c/src/lib/libbsp/powerpc/qoriq/irq/irq.c index d6b18ef0d9..c124db5030 100644 --- a/c/src/lib/libbsp/powerpc/qoriq/irq/irq.c +++ b/c/src/lib/libbsp/powerpc/qoriq/irq/irq.c @@ -7,7 +7,7 @@ */ /* - * Copyright (c) 2010, 2011 embedded brains GmbH. All rights reserved. + * Copyright (c) 2010, 2012 embedded brains GmbH. All rights reserved. * * embedded brains GmbH * Obere Lagerstr. 30 @@ -240,7 +240,7 @@ rtems_status_code bsp_interrupt_vector_disable(rtems_vector_number vector) return pic_vector_enable(vector, VPR_MSK); } -static int qoriq_external_exception_handler(BSP_Exception_frame *frame, unsigned exception_number) +static void qoriq_interrupt_dispatch(void) { rtems_vector_number vector = qoriq.pic.iack; @@ -256,9 +256,21 @@ static int qoriq_external_exception_handler(BSP_Exception_frame *frame, unsigned } else { bsp_interrupt_handler_default(vector); } +} + +#ifndef PPC_EXC_CONFIG_USE_FIXED_HANDLER +static int qoriq_external_exception_handler(BSP_Exception_frame *frame, unsigned exception_number) +{ + qoriq_interrupt_dispatch(); return 0; } +#else +void bsp_interrupt_dispatch(void) +{ + qoriq_interrupt_dispatch(); +} +#endif static bool pic_is_ipi(rtems_vector_number vector) { @@ -291,9 +303,11 @@ rtems_status_code bsp_interrupt_facility_initialize(void) rtems_vector_number i = 0; uint32_t processor_id = ppc_processor_id(); +#ifndef PPC_EXC_CONFIG_USE_FIXED_HANDLER if (ppc_exc_set_handler(ASM_EXT_VECTOR, qoriq_external_exception_handler)) { return RTEMS_IO_ERROR; } +#endif if (processor_id == 0) { /* Core 0 must do the basic initialization */ |