I'd like to entertain a new name for this "BSP_ISR_handler" function now that it becomes an exported symbol. We should put it into a proper namespace.
Also, I'm not sure on the legality of putting a copyright for Cobham Gaisler that predates Cobham's acquisition of Aeroflex. But I am not a lawyer. -Gedare On Wed, Feb 4, 2015 at 4:52 AM, Daniel Cederman <ceder...@gaisler.com> wrote: > 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. > --- > c/src/lib/libbsp/sparc/Makefile.am | 1 + > c/src/lib/libbsp/sparc/erc32/Makefile.am | 1 + > c/src/lib/libbsp/sparc/erc32/include/bsp.h | 3 ++ > c/src/lib/libbsp/sparc/leon2/Makefile.am | 1 + > c/src/lib/libbsp/sparc/leon2/include/bsp.h | 3 ++ > c/src/lib/libbsp/sparc/leon3/Makefile.am | 1 + > c/src/lib/libbsp/sparc/leon3/include/bsp.h | 3 ++ > .../lib/libbsp/sparc/shared/irq/bsp_isr_handler.c | 35 > ++++++++++++++++++++++ > c/src/lib/libbsp/sparc/shared/irq/irq-shared.c | 32 +++++++------------- > 9 files changed, 58 insertions(+), 22 deletions(-) > create mode 100644 c/src/lib/libbsp/sparc/shared/irq/bsp_isr_handler.c > > diff --git a/c/src/lib/libbsp/sparc/Makefile.am > b/c/src/lib/libbsp/sparc/Makefile.am > index 3d433fb..615aea7 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 c99d2fb..8dcdd32 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 3393910..2e531ec 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 d1e3817..efcb286 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 41a1e43..807f8d9 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 c894095..cec0b34 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 2514190..f4e1121 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 0000000..cc55a15 > --- /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 79dbe55..d75dee0 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) > { > -- > 2.2.1 > > _______________________________________________ > devel mailing list > devel@rtems.org > http://lists.rtems.org/mailman/listinfo/devel _______________________________________________ devel mailing list devel@rtems.org http://lists.rtems.org/mailman/listinfo/devel