]> git.hungrycats.org Git - linux/commitdiff
[PATCH] create common vector setup code for m68knommu/ColdFire
authorGreg Ungerer <gerg@snapgear.com>
Tue, 18 Feb 2003 13:46:41 +0000 (05:46 -0800)
committerLinus Torvalds <torvalds@home.transmeta.com>
Tue, 18 Feb 2003 13:46:41 +0000 (05:46 -0800)
This patch creates a common set of vector code for the ColdFire
sub-architecture of the m68knommu architecture. The basic setup
code for all ColdFire CPU's is the same. Some more patches will
follow this that remove theis common code from each of the
ColdFire CPU configs.

arch/m68knommu/platform/5307/vectors.c [new file with mode: 0644]

diff --git a/arch/m68knommu/platform/5307/vectors.c b/arch/m68knommu/platform/5307/vectors.c
new file mode 100644 (file)
index 0000000..01fd2ec
--- /dev/null
@@ -0,0 +1,94 @@
+/***************************************************************************/
+
+/*
+ *     linux/arch/m68knommu/platform/5307/vectors.c
+ *
+ *     Copyright (C) 1999-2003, Greg Ungerer <gerg@snapgear.com>
+ */
+
+/***************************************************************************/
+
+#include <linux/config.h>
+#include <linux/kernel.h>
+#include <linux/sched.h>
+#include <linux/param.h>
+#include <linux/init.h>
+#include <asm/irq.h>
+#include <asm/dma.h>
+#include <asm/traps.h>
+#include <asm/machdep.h>
+#include <asm/coldfire.h>
+#include <asm/mcftimer.h>
+#include <asm/mcfsim.h>
+#include <asm/mcfdma.h>
+#include <asm/delay.h>
+#include <asm/mcfwdebug.h>
+
+/***************************************************************************/
+
+#ifdef TRAP_DBG_INTERRUPT
+
+asmlinkage void dbginterrupt_c(struct frame *fp)
+{
+       extern void dump(struct pt_regs *fp);
+       printk("%s(%d): BUS ERROR TRAP\n", __FILE__, __LINE__);
+       dump((struct pt_regs *) fp);
+       asm("halt");
+}
+
+#endif
+
+/***************************************************************************/
+
+extern e_vector        *_ramvec;
+
+void set_evector(int vecnum, void (*handler)(void))
+{
+       if (vecnum >= 0 && vecnum <= 255)
+               _ramvec[vecnum] = handler;
+}
+
+/***************************************************************************/
+
+/* Assembler routines */
+asmlinkage void buserr(void);
+asmlinkage void trap(void);
+asmlinkage void system_call(void);
+asmlinkage void inthandler(void);
+
+void __init coldfire_trap_init(void)
+{
+       int i;
+
+       /*
+        *      There is a common trap handler and common interrupt
+        *      handler that handle almost every vector. We treat
+        *      the system call and bus error special, they get their
+        *      own first level handlers.
+        */
+       for (i = 3; (i <= 23); i++)
+               _ramvec[i] = trap;
+       for (i = 33; (i <= 63); i++)
+               _ramvec[i] = trap;
+       for (i = 24; (i <= 31); i++)
+               _ramvec[i] = inthandler;
+       for (i = 64; (i < 255); i++)
+               _ramvec[i] = inthandler;
+       _ramvec[255] = 0;
+
+       _ramvec[2] = buserr;
+       _ramvec[32] = system_call;
+
+#ifdef TRAP_DBG_INTERRUPT
+       _ramvec[12] = dbginterrupt;
+#endif
+}
+
+/***************************************************************************/
+
+void coldfire_reset(void)
+{
+       HARD_RESET_NOW();
+}
+
+/***************************************************************************/