summaryrefslogtreecommitdiffstats
path: root/c/src/lib/libcpu/powerpc/mpc55xx/irq/irq.c
diff options
context:
space:
mode:
Diffstat (limited to 'c/src/lib/libcpu/powerpc/mpc55xx/irq/irq.c')
-rw-r--r--c/src/lib/libcpu/powerpc/mpc55xx/irq/irq.c39
1 files changed, 29 insertions, 10 deletions
diff --git a/c/src/lib/libcpu/powerpc/mpc55xx/irq/irq.c b/c/src/lib/libcpu/powerpc/mpc55xx/irq/irq.c
index c60a3016f8..024ea80aa6 100644
--- a/c/src/lib/libcpu/powerpc/mpc55xx/irq/irq.c
+++ b/c/src/lib/libcpu/powerpc/mpc55xx/irq/irq.c
@@ -7,12 +7,13 @@
*/
/*
- * Copyright (c) 2008
- * Embedded Brains GmbH
- * Obere Lagerstr. 30
- * D-82178 Puchheim
- * Germany
- * rtems@embedded-brains.de
+ * Copyright (c) 2008-2012 embedded brains GmbH. All rights reserved.
+ *
+ * embedded brains GmbH
+ * Obere Lagerstr. 30
+ * 82178 Puchheim
+ * Germany
+ * <rtems@embedded-brains.de>
*
* The license and distribution terms for this file may be
* found in the file LICENSE in this distribution or at
@@ -112,10 +113,7 @@ rtems_status_code mpc55xx_interrupt_handler_install(
}
}
-/**
- * @brief External exception handler.
- */
-static int mpc55xx_external_exception_handler( BSP_Exception_frame *frame, unsigned exception_number)
+static void mpc55xx_interrupt_dispatch(void)
{
/* Acknowlege interrupt request */
rtems_vector_number vector = INTC.IACKR.B.INTVEC;
@@ -131,18 +129,39 @@ static int mpc55xx_external_exception_handler( BSP_Exception_frame *frame, unsig
/* End of interrupt */
INTC.EOIR.R = 1;
+}
+
+#ifndef PPC_EXC_CONFIG_USE_FIXED_HANDLER
+
+/**
+ * @brief External exception handler.
+ */
+static int mpc55xx_external_exception_handler( BSP_Exception_frame *frame, unsigned exception_number)
+{
+ mpc55xx_interrupt_dispatch();
return 0;
}
+#else /* PPC_EXC_CONFIG_USE_FIXED_HANDLER */
+
+void bsp_interrupt_dispatch(void)
+{
+ mpc55xx_interrupt_dispatch();
+}
+
+#endif /* PPC_EXC_CONFIG_USE_FIXED_HANDLER */
+
rtems_status_code bsp_interrupt_facility_initialize(void)
{
rtems_vector_number vector;
+#ifndef PPC_EXC_CONFIG_USE_FIXED_HANDLER
/* Install exception handler */
if (ppc_exc_set_handler( ASM_EXT_VECTOR, mpc55xx_external_exception_handler)) {
return RTEMS_IO_ERROR;
}
+#endif
/* Initialize interrupt controller */