summaryrefslogtreecommitdiffstats
path: root/c/src/lib/libcpu/mips/rm52xx
diff options
context:
space:
mode:
authorRalf Corsepius <ralf.corsepius@rtems.org>2006-03-16 18:06:54 +0000
committerRalf Corsepius <ralf.corsepius@rtems.org>2006-03-16 18:06:54 +0000
commit3a3e5daeafb1d8b56fc6c23bc8321721d6e6d64d (patch)
tree9839f0917777087c638cebec58b6002f3033cf13 /c/src/lib/libcpu/mips/rm52xx
parentRegenerate. (diff)
downloadrtems-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.h12
-rw-r--r--c/src/lib/libcpu/mips/rm52xx/vectorisrs/maxvectors.c24
-rw-r--r--c/src/lib/libcpu/mips/rm52xx/vectorisrs/vectorisrs.c54
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);
+}
+