summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDaniel Cederman <cederman@gaisler.com>2015-01-09 09:03:59 +0100
committerDaniel Hellstrom <daniel@gaisler.com>2015-02-11 15:35:23 +0100
commit0c94a46fa3938922481f06e8c64d8caba6d753b3 (patch)
treebface1d6d879d04003f0b75d4dbca788c6ad8609
parentor1k/cpu.c: Eliminate dependency on BSP provided header (diff)
downloadrtems-0c94a46fa3938922481f06e8c64d8caba6d753b3.tar.bz2
bsp/sparc: Move BSP_ISR_handler to a separate file and rename it
This allows it to be wrapped by another function at link-time and can be used to trace interrupts. If not placed in a separate file, the function pointer address used in BSP_shared_interrupt_init will be resolved at compile-time, and the function will not be wrappable.
-rw-r--r--c/src/lib/libbsp/sparc/Makefile.am1
-rw-r--r--c/src/lib/libbsp/sparc/erc32/Makefile.am1
-rw-r--r--c/src/lib/libbsp/sparc/erc32/include/bsp.h3
-rw-r--r--c/src/lib/libbsp/sparc/leon2/Makefile.am1
-rw-r--r--c/src/lib/libbsp/sparc/leon2/include/bsp.h3
-rw-r--r--c/src/lib/libbsp/sparc/leon3/Makefile.am1
-rw-r--r--c/src/lib/libbsp/sparc/leon3/include/bsp.h3
-rw-r--r--c/src/lib/libbsp/sparc/shared/irq/bsp_isr_handler.c35
-rw-r--r--c/src/lib/libbsp/sparc/shared/irq/irq-shared.c34
9 files changed, 59 insertions, 23 deletions
diff --git a/c/src/lib/libbsp/sparc/Makefile.am b/c/src/lib/libbsp/sparc/Makefile.am
index 3d433fb981..615aea7ea0 100644
--- a/c/src/lib/libbsp/sparc/Makefile.am
+++ b/c/src/lib/libbsp/sparc/Makefile.am
@@ -11,6 +11,7 @@ EXTRA_DIST += shared/start/start.S
# Interrupt
EXTRA_DIST += shared/irq/irq-shared.c
+EXTRA_DIST += shared/irq/bsp_isr_handler.c
# AMBA Plug&Play bus
EXTRA_DIST += shared/include/ambapp.h
diff --git a/c/src/lib/libbsp/sparc/erc32/Makefile.am b/c/src/lib/libbsp/sparc/erc32/Makefile.am
index c99d2fb429..8dcdd32940 100644
--- a/c/src/lib/libbsp/sparc/erc32/Makefile.am
+++ b/c/src/lib/libbsp/sparc/erc32/Makefile.am
@@ -71,6 +71,7 @@ include_bsp_HEADERS += \
include/bsp/irq.h
libbsp_a_SOURCES += \
../../sparc/shared/irq/irq-shared.c \
+ ../../sparc/shared/irq/bsp_isr_handler.c \
../../shared/src/irq-default-handler.c \
../../shared/src/irq-generic.c \
../../shared/src/irq-info.c \
diff --git a/c/src/lib/libbsp/sparc/erc32/include/bsp.h b/c/src/lib/libbsp/sparc/erc32/include/bsp.h
index 33939106d8..6984c9e895 100644
--- a/c/src/lib/libbsp/sparc/erc32/include/bsp.h
+++ b/c/src/lib/libbsp/sparc/erc32/include/bsp.h
@@ -106,6 +106,9 @@ typedef void (*bsp_shared_isr)(void *arg);
/* Initializes the Shared System Interrupt service */
extern void BSP_shared_interrupt_init(void);
+/* Called directly from IRQ trap handler TRAP[0x10..0x1F] = IRQ[0..15] */
+void bsp_isr_handler(rtems_vector_number vector);
+
/* Registers a shared IRQ handler, and enable it at IRQ controller. Multiple
* interrupt handlers may use the same IRQ number, all ISRs will be called
* when an interrupt on that line is fired.
diff --git a/c/src/lib/libbsp/sparc/leon2/Makefile.am b/c/src/lib/libbsp/sparc/leon2/Makefile.am
index d1e3817207..efcb286601 100644
--- a/c/src/lib/libbsp/sparc/leon2/Makefile.am
+++ b/c/src/lib/libbsp/sparc/leon2/Makefile.am
@@ -80,6 +80,7 @@ include_bsp_HEADERS += \
include/bsp/irq.h
libbsp_a_SOURCES += \
../../sparc/shared/irq/irq-shared.c \
+ ../../sparc/shared/irq/bsp_isr_handler.c \
../../shared/src/irq-default-handler.c \
../../shared/src/irq-generic.c \
../../shared/src/irq-info.c \
diff --git a/c/src/lib/libbsp/sparc/leon2/include/bsp.h b/c/src/lib/libbsp/sparc/leon2/include/bsp.h
index 41a1e43629..bd8587fe85 100644
--- a/c/src/lib/libbsp/sparc/leon2/include/bsp.h
+++ b/c/src/lib/libbsp/sparc/leon2/include/bsp.h
@@ -130,6 +130,9 @@ typedef void (*bsp_shared_isr)(void *arg);
/* Initializes the Shared System Interrupt service */
extern void BSP_shared_interrupt_init(void);
+/* Called directly from IRQ trap handler TRAP[0x10..0x1F] = IRQ[0..15] */
+void bsp_isr_handler(rtems_vector_number vector);
+
/* Registers a shared IRQ handler, and enable it at IRQ controller. Multiple
* interrupt handlers may use the same IRQ number, all ISRs will be called
* when an interrupt on that line is fired.
diff --git a/c/src/lib/libbsp/sparc/leon3/Makefile.am b/c/src/lib/libbsp/sparc/leon3/Makefile.am
index c8940953f8..cec0b34380 100644
--- a/c/src/lib/libbsp/sparc/leon3/Makefile.am
+++ b/c/src/lib/libbsp/sparc/leon3/Makefile.am
@@ -82,6 +82,7 @@ include_bsp_HEADERS += \
libbsp_a_SOURCES += \
startup/eirq.c \
../../sparc/shared/irq/irq-shared.c \
+ ../../sparc/shared/irq/bsp_isr_handler.c \
../../shared/src/irq-default-handler.c \
../../shared/src/irq-generic.c \
../../shared/src/irq-info.c \
diff --git a/c/src/lib/libbsp/sparc/leon3/include/bsp.h b/c/src/lib/libbsp/sparc/leon3/include/bsp.h
index 2514190750..47cf7017dd 100644
--- a/c/src/lib/libbsp/sparc/leon3/include/bsp.h
+++ b/c/src/lib/libbsp/sparc/leon3/include/bsp.h
@@ -153,6 +153,9 @@ typedef void (*bsp_shared_isr)(void *arg);
/* Initializes the Shared System Interrupt service */
extern void BSP_shared_interrupt_init(void);
+/* Called directly from IRQ trap handler TRAP[0x10..0x1F] = IRQ[0..15] */
+void bsp_isr_handler(rtems_vector_number vector);
+
/* Registers a shared IRQ handler, and enable it at IRQ controller. Multiple
* interrupt handlers may use the same IRQ number, all ISRs will be called
* when an interrupt on that line is fired.
diff --git a/c/src/lib/libbsp/sparc/shared/irq/bsp_isr_handler.c b/c/src/lib/libbsp/sparc/shared/irq/bsp_isr_handler.c
new file mode 100644
index 0000000000..a4d33b0932
--- /dev/null
+++ b/c/src/lib/libbsp/sparc/shared/irq/bsp_isr_handler.c
@@ -0,0 +1,35 @@
+/*
+* COPYRIGHT (c) 2015
+* Cobham Gaisler
+*
+* The license and distribution terms for this file may be
+* found in the file LICENSE in this distribution or at
+* http://www.rtems.org/license/LICENSE.
+*
+*/
+
+#include <rtems.h>
+#include <bsp.h>
+#include <bsp/irq-generic.h>
+
+static inline void bsp_dispatch_irq(int irq)
+{
+ bsp_interrupt_handler_entry *e =
+ &bsp_interrupt_handler_table[bsp_interrupt_handler_index(irq)];
+
+ while (e != NULL) {
+ (*e->handler)(e->arg);
+ e = e->next;
+ }
+}
+
+/* Called directly from IRQ trap handler TRAP[0x10..0x1F] = IRQ[0..15] */
+void bsp_isr_handler(rtems_vector_number vector)
+{
+ int irq = vector - 0x10;
+
+ /* Let BSP fixup and/or handle incomming IRQ */
+ irq = bsp_irq_fixup(irq);
+
+ bsp_dispatch_irq(irq);
+}
diff --git a/c/src/lib/libbsp/sparc/shared/irq/irq-shared.c b/c/src/lib/libbsp/sparc/shared/irq/irq-shared.c
index 79dbe55648..174324fb46 100644
--- a/c/src/lib/libbsp/sparc/shared/irq/irq-shared.c
+++ b/c/src/lib/libbsp/sparc/shared/irq/irq-shared.c
@@ -1,3 +1,13 @@
+/*
+* COPYRIGHT (c) 2012-2015
+* Cobham Gaisler
+*
+* The license and distribution terms for this file may be
+* found in the file LICENSE in this distribution or at
+* http://www.rtems.org/license/LICENSE.
+*
+*/
+
#include <rtems.h>
#include <bsp.h>
#include <bsp/irq-generic.h>
@@ -27,28 +37,6 @@ static inline int bsp_irq_cpu(int irq)
}
#endif
-static inline void bsp_dispatch_irq(int irq)
-{
- bsp_interrupt_handler_entry *e =
- &bsp_interrupt_handler_table[bsp_interrupt_handler_index(irq)];
-
- while (e != NULL) {
- (*e->handler)(e->arg);
- e = e->next;
- }
-}
-
-/* Called directly from IRQ trap handler TRAP[0x10..0x1F] = IRQ[0..15] */
-static void BSP_ISR_handler(rtems_vector_number vector)
-{
- int irq = vector - 0x10;
-
- /* Let BSP fixup and/or handle incomming IRQ */
- irq = bsp_irq_fixup(irq);
-
- bsp_dispatch_irq(irq);
-}
-
/* Initialize interrupts */
void BSP_shared_interrupt_init(void)
{
@@ -64,7 +52,7 @@ void BSP_shared_interrupt_init(void)
continue;
#endif
vector = SPARC_ASYNCHRONOUS_TRAP(i) + 0x10;
- rtems_interrupt_catch(BSP_ISR_handler, vector, &previous_isr);
+ rtems_interrupt_catch(bsp_isr_handler, vector, &previous_isr);
}
/* Initalize interrupt support */