summaryrefslogtreecommitdiffstats
path: root/c/src/lib/libcpu/mips/shared
diff options
context:
space:
mode:
Diffstat (limited to 'c/src/lib/libcpu/mips/shared')
-rw-r--r--c/src/lib/libcpu/mips/shared/.cvsignore2
-rw-r--r--c/src/lib/libcpu/mips/shared/Makefile.am10
-rw-r--r--c/src/lib/libcpu/mips/shared/cache/.cvsignore2
-rw-r--r--c/src/lib/libcpu/mips/shared/cache/Makefile.am39
-rw-r--r--c/src/lib/libcpu/mips/shared/cache/cache.c10
-rw-r--r--c/src/lib/libcpu/mips/shared/cache/cache_.h13
-rw-r--r--c/src/lib/libcpu/mips/shared/interrupts/.cvsignore2
-rw-r--r--c/src/lib/libcpu/mips/shared/interrupts/Makefile.am32
-rw-r--r--c/src/lib/libcpu/mips/shared/interrupts/installisrentries.c29
-rw-r--r--c/src/lib/libcpu/mips/shared/interrupts/isr_entries.S74
-rw-r--r--c/src/lib/libcpu/mips/shared/interrupts/maxvectors.c29
11 files changed, 242 insertions, 0 deletions
diff --git a/c/src/lib/libcpu/mips/shared/.cvsignore b/c/src/lib/libcpu/mips/shared/.cvsignore
new file mode 100644
index 0000000000..282522db03
--- /dev/null
+++ b/c/src/lib/libcpu/mips/shared/.cvsignore
@@ -0,0 +1,2 @@
+Makefile
+Makefile.in
diff --git a/c/src/lib/libcpu/mips/shared/Makefile.am b/c/src/lib/libcpu/mips/shared/Makefile.am
new file mode 100644
index 0000000000..b534a0c8ea
--- /dev/null
+++ b/c/src/lib/libcpu/mips/shared/Makefile.am
@@ -0,0 +1,10 @@
+##
+## $Id$
+##
+
+AUTOMAKE_OPTIONS = foreign 1.4
+
+SUBDIRS = cache interrupts
+
+include $(top_srcdir)/../../../../../automake/subdirs.am
+include $(top_srcdir)/../../../../../automake/local.am
diff --git a/c/src/lib/libcpu/mips/shared/cache/.cvsignore b/c/src/lib/libcpu/mips/shared/cache/.cvsignore
new file mode 100644
index 0000000000..282522db03
--- /dev/null
+++ b/c/src/lib/libcpu/mips/shared/cache/.cvsignore
@@ -0,0 +1,2 @@
+Makefile
+Makefile.in
diff --git a/c/src/lib/libcpu/mips/shared/cache/Makefile.am b/c/src/lib/libcpu/mips/shared/cache/Makefile.am
new file mode 100644
index 0000000000..ca04231141
--- /dev/null
+++ b/c/src/lib/libcpu/mips/shared/cache/Makefile.am
@@ -0,0 +1,39 @@
+##
+## $Id$
+##
+
+AUTOMAKE_OPTIONS = foreign 1.4
+
+VPATH = @srcdir@:@srcdir@/../../../shared/src
+
+C_FILES = cache.c cache_aligned_malloc.c cache_manager.c
+C_O_FILES = $(C_FILES:%.c=$(ARCH)/%.o)
+
+H_FILES = cache_.h
+INSTALLED_H_FILES =
+
+OBJS = $(C_O_FILES)
+
+include $(RTEMS_ROOT)/make/custom/@RTEMS_BSP@.cfg
+include $(top_srcdir)/../../../../../automake/compile.am
+include $(top_srcdir)/../../../../../automake/lib.am
+
+AM_CPPFLAGS += -I$(srcdir)
+
+$(PROJECT_INCLUDE)/libcpu:
+ $(mkinstalldirs) $@
+
+$(PROJECT_INCLUDE)/libcpu/%.h: %.h
+ $(INSTALL_DATA) $< $@
+
+$(PROJECT_INCLUDE)/libcpu/cache.h: $(top_srcdir)/../shared/include/cache.h
+ $(INSTALL_DATA) $< $@
+
+PREINSTALL_FILES += $(PROJECT_INCLUDE)/libcpu \
+ $(PROJECT_INCLUDE)/libcpu/cache.h
+
+all-local: $(ARCH) $(PREINSTALL_FILES) $(OBJS)
+
+EXTRA_DIST = cache.c cache_.h
+
+include $(top_srcdir)/../../../../../automake/local.am
diff --git a/c/src/lib/libcpu/mips/shared/cache/cache.c b/c/src/lib/libcpu/mips/shared/cache/cache.c
new file mode 100644
index 0000000000..9af01feffd
--- /dev/null
+++ b/c/src/lib/libcpu/mips/shared/cache/cache.c
@@ -0,0 +1,10 @@
+/*
+ * Cache Management Support Routines for the MIPS
+ *
+ * $Id$
+ */
+
+#include <rtems.h>
+#include "cache_.h"
+
+/* TBD */
diff --git a/c/src/lib/libcpu/mips/shared/cache/cache_.h b/c/src/lib/libcpu/mips/shared/cache/cache_.h
new file mode 100644
index 0000000000..d51c4ee075
--- /dev/null
+++ b/c/src/lib/libcpu/mips/shared/cache/cache_.h
@@ -0,0 +1,13 @@
+/*
+ * MIPS Cache Manager Support
+ */
+
+#ifndef __MIPS_CACHE_h
+#define __MIPS_CACHE_h
+
+#include <libcpu/cache.h>
+
+/* TBD */
+
+#endif
+/* end of include file */
diff --git a/c/src/lib/libcpu/mips/shared/interrupts/.cvsignore b/c/src/lib/libcpu/mips/shared/interrupts/.cvsignore
new file mode 100644
index 0000000000..282522db03
--- /dev/null
+++ b/c/src/lib/libcpu/mips/shared/interrupts/.cvsignore
@@ -0,0 +1,2 @@
+Makefile
+Makefile.in
diff --git a/c/src/lib/libcpu/mips/shared/interrupts/Makefile.am b/c/src/lib/libcpu/mips/shared/interrupts/Makefile.am
new file mode 100644
index 0000000000..434f2a38ec
--- /dev/null
+++ b/c/src/lib/libcpu/mips/shared/interrupts/Makefile.am
@@ -0,0 +1,32 @@
+##
+## $Id$
+##
+
+AUTOMAKE_OPTIONS = foreign 1.4
+
+PGM = $(ARCH)/interrupts.rel
+
+C_FILES = installisrentries.c maxvectors.c
+
+S_FILES = isr_entries.S
+
+interrupts_rel_OBJECTS = $(C_FILES:%.c=$(ARCH)/%.o) $(S_FILES:%.S=$(ARCH)/%.o)
+
+include $(RTEMS_ROOT)/make/custom/@RTEMS_BSP@.cfg
+include $(top_srcdir)/../../../../../automake/compile.am
+include $(top_srcdir)/../../../../../automake/lib.am
+
+#
+# (OPTIONAL) Add local stuff here using +=
+#
+
+$(PGM): $(interrupts_rel_OBJECTS)
+ $(make-rel)
+
+all-local: $(ARCH) $(interrupts_rel_OBJECTS) $(PGM)
+
+.PRECIOUS: $(PGM)
+
+EXTRA_DIST = maxvectors.c
+
+include $(top_srcdir)/../../../../../automake/local.am
diff --git a/c/src/lib/libcpu/mips/shared/interrupts/installisrentries.c b/c/src/lib/libcpu/mips/shared/interrupts/installisrentries.c
new file mode 100644
index 0000000000..5dd37f82bb
--- /dev/null
+++ b/c/src/lib/libcpu/mips/shared/interrupts/installisrentries.c
@@ -0,0 +1,29 @@
+/*
+ * $Id$
+ */
+
+#include <rtems.h>
+#include <idtcpu.h>
+#include <stdlib.h>
+
+void mips_install_isr_entries( void )
+{
+#if __mips == 1
+ void exc_utlb_code(void);
+ void exc_norm_code(void);
+
+ memcpy( (void *)UT_VEC, exc_utlb_code, 40 ); /* utlbmiss vector */
+ memcpy( (void *)E_VEC, exc_norm_code, 40 ); /* exception vevtor */
+#elif __mips == 3
+ void exc_tlb_code(void);
+ void exc_utlb_code(void);
+ void exc_cache_code(void);
+ void exc_norm_code(void);
+
+ memcpy( (void *)T_VEC, exc_tlb_code, 40 ); /* tlbmiss vector */
+ memcpy( (void *)X_VEC, exc_xtlb_code, 40 ); /* xtlbmiss vector */
+ memcpy( (void *)C_VEC, exc_cache_code, 40 ); /* cache error vector */
+ memcpy( (void *)E_VEC, exc_norm_code, 40 ); /* exception vector */
+#endif
+ rtems_cache_flush_entire_data();
+}
diff --git a/c/src/lib/libcpu/mips/shared/interrupts/isr_entries.S b/c/src/lib/libcpu/mips/shared/interrupts/isr_entries.S
new file mode 100644
index 0000000000..8fe31cd6e2
--- /dev/null
+++ b/c/src/lib/libcpu/mips/shared/interrupts/isr_entries.S
@@ -0,0 +1,74 @@
+/*
+ * This file contains the raw entry points for the exceptions.
+ *
+ * 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.OARcorp.com/rtems/license.html.
+ *
+ * $Id$
+ */
+/* @(#)cpu_asm.S 08/20/96 1.15 */
+
+#include <asm.h>
+#include "iregdef.h"
+#include "idtcpu.h"
+
+/*
+ * MIPS ISA Level 1 entries
+ */
+
+#if __mips == 1
+
+FRAME(exc_norm_code,sp,0,ra)
+ la k0, _ISR_Handler /* generic external int hndlr */
+ j k0
+ nop
+ENDFRAME(exc_norm_code)
+
+/* XXX this is dependent on IDT/SIM and needs to be addressed */
+FRAME(exc_utlb_code,sp,0,ra)
+ la k0, (R_VEC+((48)*8))
+ j k0
+ nop
+ENDFRAME(exc_tlb_code)
+
+/*
+ * MIPS ISA Level 3
+ * XXX Again, reliance on SIM. Not good.
+ */
+#elif __mips == 3
+
+FRAME(exc_tlb_code,sp,0,ra)
+ la k0, (R_VEC+((112)*8)) /* R4000 Sim location */
+ j k0
+ nop
+ENDFRAME(exc_tlb_code)
+
+FRAME(exc_xtlb_code,sp,0,ra)
+ la k0, (R_VEC+((112)*8)) /* R4000 Sim location */
+ j k0
+ nop
+
+ENDFRAME(exc_xtlb_code)
+
+FRAME(exc_cache_code,sp,0,ra)
+ la k0, (R_VEC+((112)*8)) /* R4000 Sim location */
+ j k0
+ nop
+ENDFRAME(exc_cache_code)
+
+FRAME(exc_norm_code,sp,0,ra)
+ la k0, _ISR_Handler /* generic external int hndlr */
+ j k0
+ nop
+ENDFRAME(exc_norm_code)
+
+#else
+
+#error "isr_entries.S: ISA support problem"
+
+#endif
+
diff --git a/c/src/lib/libcpu/mips/shared/interrupts/maxvectors.c b/c/src/lib/libcpu/mips/shared/interrupts/maxvectors.c
new file mode 100644
index 0000000000..c1e5df20a4
--- /dev/null
+++ b/c/src/lib/libcpu/mips/shared/interrupts/maxvectors.c
@@ -0,0 +1,29 @@
+/*
+ * 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.OARcorp.com/rtems/license.html.
+ *
+ * $Id$
+ */
+
+
+/*
+ * The tx3904 attaches 4 of the eight interrupt bits to an on-CPU interrupt
+ * controller so that these four bits map to 16 unique interrupts.
+ * So you have: 2 software interrupts, an NMI, and 16 others.
+ */
+#if defined(tx3904)
+#define MAX_VECTORS 19
+#endif
+
+#ifndef MAX
+#define MAX_VECTORS 8
+#endif
+
+unsigned int mips_interrupt_number_of_vectors = MAX_VECTORS;