1 /***************************************************************************/ 2 3 /* 4 * linux/arch/m68knommu/platform/5307/vectors.c 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/mcfdma.h> 19 #include <asm/mcfwdebug.h> 20 21 /***************************************************************************/ 22 23 #ifdef TRAP_DBG_INTERRUPT 24 dbginterrupt_c(struct frame * fp)25asmlinkage void dbginterrupt_c(struct frame *fp) 26 { 27 extern void dump(struct pt_regs *fp); 28 printk(KERN_DEBUG "%s(%d): BUS ERROR TRAP\n", __FILE__, __LINE__); 29 dump((struct pt_regs *) fp); 30 asm("halt"); 31 } 32 33 #endif 34 35 /***************************************************************************/ 36 37 extern e_vector *_ramvec; 38 set_evector(int vecnum,void (* handler)(void))39void set_evector(int vecnum, void (*handler)(void)) 40 { 41 if (vecnum >= 0 && vecnum <= 255) 42 _ramvec[vecnum] = handler; 43 } 44 45 /***************************************************************************/ 46 47 /* Assembler routines */ 48 asmlinkage void buserr(void); 49 asmlinkage void trap(void); 50 asmlinkage void system_call(void); 51 asmlinkage void inthandler(void); 52 init_vectors(void)53void __init init_vectors(void) 54 { 55 int i; 56 57 /* 58 * There is a common trap handler and common interrupt 59 * handler that handle almost every vector. We treat 60 * the system call and bus error special, they get their 61 * own first level handlers. 62 */ 63 for (i = 3; (i <= 23); i++) 64 _ramvec[i] = trap; 65 for (i = 33; (i <= 63); i++) 66 _ramvec[i] = trap; 67 for (i = 24; (i <= 31); i++) 68 _ramvec[i] = inthandler; 69 for (i = 64; (i < 255); i++) 70 _ramvec[i] = inthandler; 71 _ramvec[255] = 0; 72 73 _ramvec[2] = buserr; 74 _ramvec[32] = system_call; 75 76 #ifdef TRAP_DBG_INTERRUPT 77 _ramvec[12] = dbginterrupt; 78 #endif 79 } 80 81 /***************************************************************************/ 82 enable_vector(unsigned int irq)83void enable_vector(unsigned int irq) 84 { 85 /* Currently no action on ColdFire */ 86 } 87 disable_vector(unsigned int irq)88void disable_vector(unsigned int irq) 89 { 90 /* Currently no action on ColdFire */ 91 } 92 ack_vector(unsigned int irq)93void ack_vector(unsigned int irq) 94 { 95 /* Currently no action on ColdFire */ 96 } 97 98 /***************************************************************************/ 99 coldfire_reset(void)100void coldfire_reset(void) 101 { 102 HARD_RESET_NOW(); 103 } 104 105 /***************************************************************************/ 106