1/***************************************************************************/ 2 3/* 4 * vectors.c -- high level trap setup for ColdFire 5 * 6 * Copyright (C) 1999-2007, Greg Ungerer <gerg@snapgear.com> 7 */ 8 9/***************************************************************************/ 10 11#include <linux/kernel.h> 12#include <linux/init.h> 13#include <linux/irq.h> 14#include <asm/traps.h> 15#include <asm/machdep.h> 16#include <asm/coldfire.h> 17#include <asm/mcfsim.h> 18#include <asm/mcfwdebug.h> 19 20/***************************************************************************/ 21 22#ifdef TRAP_DBG_INTERRUPT 23 24asmlinkage void dbginterrupt_c(struct frame *fp) 25{ 26 extern void dump(struct pt_regs *fp); 27 printk(KERN_DEBUG "%s(%d): BUS ERROR TRAP\n", __FILE__, __LINE__); 28 dump((struct pt_regs *) fp); 29 asm("halt"); 30} 31 32#endif 33 34/***************************************************************************/ 35 36/* Assembler routines */ 37asmlinkage void buserr(void); 38asmlinkage void trap(void); 39asmlinkage void system_call(void); 40asmlinkage void inthandler(void); 41 42void __init trap_init(void) 43{ 44 int i; 45 46 /* 47 * There is a common trap handler and common interrupt 48 * handler that handle almost every vector. We treat 49 * the system call and bus error special, they get their 50 * own first level handlers. 51 */ 52 for (i = 3; (i <= 23); i++) 53 _ramvec[i] = trap; 54 for (i = 33; (i <= 63); i++) 55 _ramvec[i] = trap; 56 for (i = 24; (i <= 31); i++) 57 _ramvec[i] = inthandler; 58 for (i = 64; (i < 255); i++) 59 _ramvec[i] = inthandler; 60 _ramvec[255] = 0; 61 62 _ramvec[2] = buserr; 63 _ramvec[32] = system_call; 64 65#ifdef TRAP_DBG_INTERRUPT 66 _ramvec[12] = dbginterrupt; 67#endif 68} 69 70/***************************************************************************/ 71