summaryrefslogtreecommitdiffstats
path: root/c/src/lib/libbsp/powerpc/qoriq/irq/irq.c
diff options
context:
space:
mode:
Diffstat (limited to 'c/src/lib/libbsp/powerpc/qoriq/irq/irq.c')
-rw-r--r--c/src/lib/libbsp/powerpc/qoriq/irq/irq.c18
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 */