diff options
author | Ralf Corsepius <ralf.corsepius@rtems.org> | 2006-03-16 18:06:54 +0000 |
---|---|---|
committer | Ralf Corsepius <ralf.corsepius@rtems.org> | 2006-03-16 18:06:54 +0000 |
commit | 3a3e5daeafb1d8b56fc6c23bc8321721d6e6d64d (patch) | |
tree | 9839f0917777087c638cebec58b6002f3033cf13 /c/src/lib/libcpu/mips/rm52xx | |
parent | Regenerate. (diff) | |
download | rtems-3a3e5daeafb1d8b56fc6c23bc8321721d6e6d64d.tar.bz2 |
New (Submission by Bruce Robinson <brucer@pmccorp.com>).
Diffstat (limited to '')
-rw-r--r-- | c/src/lib/libcpu/mips/rm52xx/include/rm5231.h | 12 | ||||
-rw-r--r-- | c/src/lib/libcpu/mips/rm52xx/vectorisrs/maxvectors.c | 24 | ||||
-rw-r--r-- | c/src/lib/libcpu/mips/rm52xx/vectorisrs/vectorisrs.c | 54 |
3 files changed, 90 insertions, 0 deletions
diff --git a/c/src/lib/libcpu/mips/rm52xx/include/rm5231.h b/c/src/lib/libcpu/mips/rm52xx/include/rm5231.h new file mode 100644 index 0000000000..a10837c396 --- /dev/null +++ b/c/src/lib/libcpu/mips/rm52xx/include/rm5231.h @@ -0,0 +1,12 @@ +/* + * MIPS RM5231 specific information + * + * rm5231.h,v 1.0 2004/06/23 19:54:22 + */ + +#ifndef __RM5231_h +#define __RM5231_h + +#define RM5231_MAXIMUM_VECTORS MIPS_INTERRUPT_BASE+8 + +#endif diff --git a/c/src/lib/libcpu/mips/rm52xx/vectorisrs/maxvectors.c b/c/src/lib/libcpu/mips/rm52xx/vectorisrs/maxvectors.c new file mode 100644 index 0000000000..d72273c582 --- /dev/null +++ b/c/src/lib/libcpu/mips/rm52xx/vectorisrs/maxvectors.c @@ -0,0 +1,24 @@ +/* + * This file contains the maximum number of vectors. This can not + * be determined without knowing the RTEMS CPU model. + * + * COPYRIGHT (c) 1989-2000. + * On-Line Applications Research Corporation (OAR). + * + * The license and distribution terms for this file may be + * found in the file LICENSE in this distribution or at + * http://www.rtems.com/license/LICENSE. + * + * maxvectors.c,v 1.1.6.1 2003/09/04 18:45:49 joel Exp + */ + +/* + * Reserve first 32 for exceptions. + */ + + +#include <rtems.h> +#include <libcpu/rm5231.h> + +unsigned int mips_interrupt_number_of_vectors = RM5231_MAXIMUM_VECTORS; + diff --git a/c/src/lib/libcpu/mips/rm52xx/vectorisrs/vectorisrs.c b/c/src/lib/libcpu/mips/rm52xx/vectorisrs/vectorisrs.c new file mode 100644 index 0000000000..070884228b --- /dev/null +++ b/c/src/lib/libcpu/mips/rm52xx/vectorisrs/vectorisrs.c @@ -0,0 +1,54 @@ +/* + * RM5231 Interrupt Vectoring + * + * vectorisrs.c,v 1.6 2004/06/23 18:16:36 + */ + +#include <rtems.h> +#include <stdlib.h> +#include <libcpu/rm5231.h> + +void mips_default_isr( int vector ); + +#define CALL_ISR(_vector,_frame) \ + do { \ + if ( _ISR_Vector_table[_vector] ) \ + (_ISR_Vector_table[_vector])(_vector,_frame); \ + else \ + mips_default_isr(_vector); \ + } while (0) + +#include <rtems/bspIo.h> /* for printk */ + +void mips_vector_isr_handlers( CPU_Interrupt_frame *frame ) +{ + unsigned int sr; + unsigned int cause; + unsigned int i; + unsigned int mask; + + mips_get_sr( sr ); + mips_get_cause( cause ); + + cause &= (sr & SR_IMASK); + cause >>= CAUSE_IPSHIFT; + + for ( i=1, mask=0x80 ; i<=8 ; i++, mask >>= 1 ) { + if ( cause & mask ) + CALL_ISR( MIPS_INTERRUPT_BASE + 8 - i, frame ); + } +} + +void mips_default_isr( int vector ) +{ + unsigned int sr; + unsigned int cause; + + mips_get_sr( sr ); + mips_get_cause( cause ); + + printk( "Unhandled isr exception: vector 0x%02x, cause 0x%08X, sr 0x%08X\n", + vector, cause, sr ); + rtems_fatal_error_occurred(1); +} + |