Changeset aace6624 in mainline
- Timestamp:
- 2005-12-10T02:05:05Z (19 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 402fc8bf
- Parents:
- 6095342
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
arch/mips32/include/interrupt.h
r6095342 raace6624 32 32 #include <arch/exception.h> 33 33 34 #define IVT_ITEMS 3234 #define IVT_ITEMS 8 35 35 36 36 #define IRQ2 2 -
generic/include/interrupt.h
r6095342 raace6624 38 38 typedef void (* iroutine)(int n, void *stack); 39 39 40 extern iroutine exc_register(int n, c har *name, iroutine f);40 extern iroutine exc_register(int n, const char *name, iroutine f); 41 41 extern void exc_dispatch(int n, void *stack); 42 void exc_init(void); 42 43 43 44 #endif -
generic/src/interrupt/interrupt.c
r6095342 raace6624 29 29 #include <interrupt.h> 30 30 #include <debug.h> 31 #include <console/kconsole.h> 32 #include <console/console.h> 33 #include <console/chardev.h> 34 #include <panic.h> 35 #include <print.h> 36 #include <symtab.h> 31 37 32 38 static struct { 33 c har *name;39 const char *name; 34 40 iroutine f; 35 } ivt[IVT_ITEMS];41 } exc_table[IVT_ITEMS]; 36 42 37 iroutine exc_register(int n, char *name, iroutine f) 43 static spinlock_t exctbl_lock; 44 45 /** Register exception handler 46 * 47 * @param n Exception number 48 * @param name Description 49 * @param f Exception handler 50 */ 51 iroutine exc_register(int n, const char *name, iroutine f) 38 52 { 39 53 ASSERT(n < IVT_ITEMS); … … 41 55 iroutine old; 42 56 43 old = ivt[n].f; 44 ivt[n].f = f; 45 ivt[n].name = name; 46 57 spinlock_lock(&exctbl_lock); 58 59 old = exc_table[n].f; 60 exc_table[n].f = f; 61 exc_table[n].name = name; 62 63 spinlock_unlock(&exctbl_lock); 64 47 65 return old; 48 66 } 49 67 50 /* 68 /** Dispatch exception according to exception table 69 * 51 70 * Called directly from the assembler code. 52 71 * CPU is interrupts_disable()'d. … … 56 75 ASSERT(n < IVT_ITEMS); 57 76 58 ivt[n].f(n, stack);77 exc_table[n].f(n, stack); 59 78 } 79 80 /** Default 'null' exception handler */ 81 static void exc_undef(int n, void *stack) 82 { 83 panic("Unhandled exception %d.", n); 84 } 85 86 /** KConsole cmd - print all exceptions */ 87 static int exc_print_cmd(cmd_arg_t *argv) 88 { 89 int i; 90 char *symbol; 91 92 spinlock_lock(&exctbl_lock); 93 printf("Exc Handler Description\n"); 94 for (i=0; i < IVT_ITEMS; i++) { 95 symbol = get_symtab_entry((__native)exc_table[i].f); 96 if (!symbol) 97 symbol = "not found"; 98 printf("%d %s 0x%p(%s)\n",i,exc_table[i].name, 99 exc_table[i].f,symbol); 100 if (!((i+1) % 20)) { 101 printf("Press any key to continue."); 102 getc(stdin); 103 printf("\n"); 104 } 105 } 106 spinlock_unlock(&exctbl_lock); 107 108 return 1; 109 } 110 111 static cmd_info_t exc_info = { 112 .name = "exc_print", 113 .description = "Print exception table", 114 .func = exc_print_cmd, 115 .help = NULL, 116 .argc = 0, 117 .argv = NULL 118 }; 119 120 /** Initialize generic exception handling support */ 121 void exc_init(void) 122 { 123 int i; 124 125 spinlock_initialize(&exctbl_lock, "exctbl_lock"); 126 127 for (i=0;i < IVT_ITEMS; i++) 128 exc_register(i, "undef", exc_undef); 129 130 spinlock_initialize(&exc_info.lock, "kconsole_excinfo"); 131 link_initialize(&exc_info.link); 132 if (!cmd_register(&exc_info)) 133 panic("could not register command %s\n", exc_info.name); 134 } 135 -
generic/src/main/kinit.c
r6095342 raace6624 45 45 #include <memstr.h> 46 46 #include <console/console.h> 47 #include <interrupt.h> 47 48 #include <console/kconsole.h> 48 49 -
generic/src/main/main.c
r6095342 raace6624 41 41 #include <cpu.h> 42 42 #include <align.h> 43 #include <interrupt.h> 43 44 44 45 #ifdef CONFIG_SMP … … 174 175 */ 175 176 kconsole_init(); 177 /* Exception handler initialization, before architecture 178 * starts adding it's own handlers 179 */ 180 exc_init(); 176 181 177 182 arch_pre_mm_init();
Note:
See TracChangeset
for help on using the changeset viewer.