diff options
Diffstat (limited to 'bsps/sparc/shared')
-rw-r--r-- | bsps/sparc/shared/irq/bsp_isr_handler.c | 27 | ||||
-rw-r--r-- | bsps/sparc/shared/irq/irq-shared.c | 21 | ||||
-rw-r--r-- | bsps/sparc/shared/start/start.S | 39 |
3 files changed, 32 insertions, 55 deletions
diff --git a/bsps/sparc/shared/irq/bsp_isr_handler.c b/bsps/sparc/shared/irq/bsp_isr_handler.c index a4d33b0932..2616b5caae 100644 --- a/bsps/sparc/shared/irq/bsp_isr_handler.c +++ b/bsps/sparc/shared/irq/bsp_isr_handler.c @@ -8,28 +8,19 @@ * */ -#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) +/* + * This function is called directly from _SPARC_Interrupt_trap() for + * traps 0x10 to 0x1F which correspond to IRQ 0 to 15 respectively. + */ +void _SPARC_Interrupt_dispatch( uint32_t irq ) { - int irq = vector - 0x10; + bsp_interrupt_assert( irq < BSP_INTERRUPT_VECTOR_COUNT ); - /* Let BSP fixup and/or handle incomming IRQ */ - irq = bsp_irq_fixup(irq); + /* Let BSP fixup and/or handle incoming IRQ */ + irq = bsp_irq_fixup( irq ); - bsp_dispatch_irq(irq); + bsp_interrupt_handler_dispatch_unchecked( irq ); } diff --git a/bsps/sparc/shared/irq/irq-shared.c b/bsps/sparc/shared/irq/irq-shared.c index e0ac7d7f06..a127ab64c2 100644 --- a/bsps/sparc/shared/irq/irq-shared.c +++ b/bsps/sparc/shared/irq/irq-shared.c @@ -37,27 +37,6 @@ static inline int bsp_irq_cpu(int irq) } #endif -/* Initialize interrupts */ -void BSP_shared_interrupt_init(void) -{ - rtems_vector_number vector; - rtems_isr_entry previous_isr; - int i; - - for (i=0; i <= BSP_INTERRUPT_VECTOR_MAX_STD; i++) { -#if defined(LEON3) && (defined(RTEMS_SMP) || defined(RTEMS_MULTIPROCESSING)) - /* Don't install IRQ handler on IPI interrupt */ - if (i == LEON3_mp_irq) - continue; -#endif - vector = SPARC_ASYNCHRONOUS_TRAP(i) + 0x10; - rtems_interrupt_catch(bsp_isr_handler, vector, &previous_isr); - } - - /* Initalize interrupt support */ - bsp_interrupt_initialize(); -} - /* Callback from bsp_interrupt_initialize() */ rtems_status_code bsp_interrupt_facility_initialize(void) { diff --git a/bsps/sparc/shared/start/start.S b/bsps/sparc/shared/start/start.S index cd43f08f01..45bd145d4a 100644 --- a/bsps/sparc/shared/start/start.S +++ b/bsps/sparc/shared/start/start.S @@ -33,6 +33,13 @@ TRAP(_vector, _SPARC_Bad_trap) /* + * External interrupt trap + */ +#define ISR_TRAP(_vector) \ + TRAP_SYM(_vector):; \ + TRAP(_vector - 0x10, _SPARC_Interrupt_trap) + +/* * System call optimized trap table entry */ #define FPDIS_TRAP(_handler) \ @@ -128,27 +135,27 @@ TRAP_SYM(0x06): BAD_TRAP(0x0d) ! 0D undefined BAD_TRAP(0x0e) ! 0E undefined BAD_TRAP(0x0f) ! 0F undefined - BAD_TRAP(0x10) ! 10 undefined /* * External interrupt traps */ - BAD_TRAP(0x11) ! 11 external interrupt 1 - BAD_TRAP(0x12) ! 12 external interrupt 2 - BAD_TRAP(0x13) ! 13 external interrupt 3 - BAD_TRAP(0x14) ! 14 external interrupt 4 - BAD_TRAP(0x15) ! 15 external interrupt 5 - BAD_TRAP(0x16) ! 16 external interrupt 6 - BAD_TRAP(0x17) ! 17 external interrupt 7 - BAD_TRAP(0x18) ! 18 external interrupt 8 - BAD_TRAP(0x19) ! 19 external interrupt 9 - BAD_TRAP(0x1a) ! 1A external interrupt 10 - BAD_TRAP(0x1b) ! 1B external interrupt 11 - BAD_TRAP(0x1c) ! 1C external interrupt 12 - BAD_TRAP(0x1d) ! 1D external interrupt 13 - BAD_TRAP(0x1e) ! 1E external interrupt 14 - BAD_TRAP(0x1f) ! 1F external interrupt 15 + ISR_TRAP(0x10) ! 10 undefined + ISR_TRAP(0x11) ! 11 external interrupt 1 + ISR_TRAP(0x12) ! 12 external interrupt 2 + ISR_TRAP(0x13) ! 13 external interrupt 3 + ISR_TRAP(0x14) ! 14 external interrupt 4 + ISR_TRAP(0x15) ! 15 external interrupt 5 + ISR_TRAP(0x16) ! 16 external interrupt 6 + ISR_TRAP(0x17) ! 17 external interrupt 7 + ISR_TRAP(0x18) ! 18 external interrupt 8 + ISR_TRAP(0x19) ! 19 external interrupt 9 + ISR_TRAP(0x1a) ! 1A external interrupt 10 + ISR_TRAP(0x1b) ! 1B external interrupt 11 + ISR_TRAP(0x1c) ! 1C external interrupt 12 + ISR_TRAP(0x1d) ! 1D external interrupt 13 + ISR_TRAP(0x1e) ! 1E external interrupt 14 + ISR_TRAP(0x1f) ! 1F external interrupt 15 BAD_TRAP(0x20) ! 20 undefined BAD_TRAP(0x21) ! 21 undefined |