diff options
Diffstat (limited to 'c/src/lib/libbsp/sparc/leon/startup/spurious.c')
-rw-r--r-- | c/src/lib/libbsp/sparc/leon/startup/spurious.c | 177 |
1 files changed, 0 insertions, 177 deletions
diff --git a/c/src/lib/libbsp/sparc/leon/startup/spurious.c b/c/src/lib/libbsp/sparc/leon/startup/spurious.c deleted file mode 100644 index 081d9ba3a1..0000000000 --- a/c/src/lib/libbsp/sparc/leon/startup/spurious.c +++ /dev/null @@ -1,177 +0,0 @@ -/* - * LEON Spurious Trap Handler - * - * This is just enough of a trap handler to let us know what - * the likely source of the trap was. - * - * Developed as part of the port of RTEMS to the LEON implementation - * of the SPARC by On-Line Applications Research Corporation (OAR) - * under contract to the European Space Agency (ESA). - * - * COPYRIGHT (c) 1995. European Space Agency. - * - * This terms of the RTEMS license apply to this file. - * - * $Id$ - */ - -#include <bsp.h> - -#include <string.h> - -static const char digits[16] = "0123456789abcdef"; - -/* Simple integer-to-string conversion */ - -void itos(uint32_t u, char *s) -{ - int i; - - for (i=0; i<8; i++) { - s[i] = digits[(u >> (28 - (i*4))) & 0x0f]; - } -} - -/* - * bsp_spurious_handler - * - * Print a message on the debug console and then die - */ - -rtems_isr bsp_spurious_handler( - rtems_vector_number trap, - CPU_Interrupt_frame *isf -) -{ - char line[ 80 ]; - uint32_t real_trap; - - real_trap = SPARC_REAL_TRAP_NUMBER(trap); - - strcpy(line, "Unexpected trap (0x ) at address 0x "); - line[ 19 ] = digits[ real_trap >> 4 ]; - line[ 20 ] = digits[ real_trap & 0xf ]; - itos(isf->tpc, &line[36]); - DEBUG_puts( line ); - - switch (real_trap) { - - /* - * First the ones defined by the basic architecture - */ - - case 0x00: - DEBUG_puts( "reset" ); - break; - case 0x01: - DEBUG_puts( "instruction access exception" ); - break; - case 0x02: - DEBUG_puts( "illegal instruction" ); - break; - case 0x03: - DEBUG_puts( "privileged instruction" ); - break; - case 0x04: - DEBUG_puts( "fp disabled" ); - break; - case 0x07: - DEBUG_puts( "memory address not aligned" ); - break; - case 0x08: - DEBUG_puts( "fp exception" ); - break; - case 0x09: - strcpy(line, "data access exception at 0x " ); - itos(LEON_REG.Failed_Address, &line[27]); - DEBUG_puts( line ); - break; - case 0x0A: - DEBUG_puts( "tag overflow" ); - break; - - /* - * Then the ones defined by the LEON in particular - */ - - case LEON_TRAP_TYPE( LEON_INTERRUPT_CORRECTABLE_MEMORY_ERROR ): - DEBUG_puts( "LEON_INTERRUPT_CORRECTABLE_MEMORY_ERROR" ); - break; - case LEON_TRAP_TYPE( LEON_INTERRUPT_UART_2_RX_TX ): - DEBUG_puts( "LEON_INTERRUPT_UART_2_RX_TX" ); - break; - case LEON_TRAP_TYPE( LEON_INTERRUPT_UART_1_RX_TX ): - DEBUG_puts( "LEON_INTERRUPT_UART_1_RX_TX" ); - break; - case LEON_TRAP_TYPE( LEON_INTERRUPT_EXTERNAL_0 ): - DEBUG_puts( "LEON_INTERRUPT_EXTERNAL_0" ); - break; - case LEON_TRAP_TYPE( LEON_INTERRUPT_EXTERNAL_1 ): - DEBUG_puts( "LEON_INTERRUPT_EXTERNAL_1" ); - break; - case LEON_TRAP_TYPE( LEON_INTERRUPT_EXTERNAL_2 ): - DEBUG_puts( "LEON_INTERRUPT_EXTERNAL_2" ); - break; - case LEON_TRAP_TYPE( LEON_INTERRUPT_EXTERNAL_3 ): - DEBUG_puts( "LEON_INTERRUPT_EXTERNAL_3" ); - break; - case LEON_TRAP_TYPE( LEON_INTERRUPT_TIMER1 ): - DEBUG_puts( "LEON_INTERRUPT_TIMER1" ); - break; - case LEON_TRAP_TYPE( LEON_INTERRUPT_TIMER2 ): - DEBUG_puts( "LEON_INTERRUPT_TIMER2" ); - break; - - default: - break; - } - - /* - * What else can we do but stop ... - */ - - asm volatile( "mov 1, %g1; ta 0x0" ); -} - -/* - * bsp_spurious_initialize - * - * Install the spurious handler for most traps. Note that set_vector() - * will unmask the corresponding asynchronous interrupt, so the initial - * interrupt mask is restored after the handlers are installed. - */ - -void bsp_spurious_initialize() -{ - uint32_t trap; - uint32_t level; - uint32_t mask; - - level = sparc_disable_interrupts(); - mask = LEON_REG.Interrupt_Mask; - - for ( trap=0 ; trap<256 ; trap++ ) { - - /* - * Skip window overflow, underflow, and flush as well as software - * trap 0 which we will use as a shutdown. Also avoid trap 0x70 - 0x7f - * which cannot happen and where some of the space is used to pass - * paramaters to the program. - */ - - if (( trap == 5 || trap == 6 ) || - (( trap >= 0x11 ) && ( trap <= 0x1f )) || - (( trap >= 0x70 ) && ( trap <= 0x83 ))) - continue; - - set_vector( - (rtems_isr_entry) bsp_spurious_handler, - SPARC_SYNCHRONOUS_TRAP( trap ), - 1 - ); - } - - LEON_REG.Interrupt_Mask = mask; - sparc_enable_interrupts(level); - -} |