Changes in kernel/arch/ia64/src/interrupt.c [416ef49:9d58539] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
kernel/arch/ia64/src/interrupt.c
r416ef49 r9d58539 54 54 #include <synch/spinlock.h> 55 55 #include <mm/tlb.h> 56 #include <arch/mm/tlb.h>57 56 #include <symtab.h> 58 57 #include <putchar.h> … … 60 59 #define VECTORS_64_BUNDLE 20 61 60 #define VECTORS_16_BUNDLE 48 62 #define VECTORS_16_BUNDLE_START 0x50 63 64 #define VECTOR_MAX 0x7f 61 #define VECTORS_16_BUNDLE_START 0x5000 62 63 #define VECTOR_MAX 0x7f00 64 65 #define BUNDLE_SIZE 16 65 66 66 67 static const char *vector_names_64_bundle[VECTORS_64_BUNDLE] = { … … 121 122 }; 122 123 123 static const char *vector_to_string(unsigned int n) 124 { 125 ASSERT(n <= VECTOR_MAX); 126 127 if (n >= VECTORS_16_BUNDLE_START) 128 return vector_names_16_bundle[n - VECTORS_16_BUNDLE_START]; 124 static const char *vector_to_string(uint16_t vector) 125 { 126 ASSERT(vector <= VECTOR_MAX); 127 128 if (vector >= VECTORS_16_BUNDLE_START) 129 return vector_names_16_bundle[(vector - 130 VECTORS_16_BUNDLE_START) / (16 * BUNDLE_SIZE)]; 129 131 else 130 return vector_names_64_bundle[ n / 4];132 return vector_names_64_bundle[vector / (64 * BUNDLE_SIZE)]; 131 133 } 132 134 … … 151 153 } 152 154 153 void general_exception(u nsigned int n, istate_t *istate)155 void general_exception(uint64_t vector, istate_t *istate) 154 156 { 155 157 const char *desc; … … 180 182 181 183 fault_if_from_uspace(istate, "General Exception (%s).", desc); 182 panic_badtrap(istate, n, "General Exception (%s).", desc);183 } 184 185 void disabled_fp_register(u nsigned int n, istate_t *istate)184 panic_badtrap(istate, vector, "General Exception (%s).", desc); 185 } 186 187 void disabled_fp_register(uint64_t vector, istate_t *istate) 186 188 { 187 189 #ifdef CONFIG_FPU_LAZY … … 189 191 #else 190 192 fault_if_from_uspace(istate, "Interruption: %#hx (%s).", 191 (uint16_t) n, vector_to_string(n));193 (uint16_t) vector, vector_to_string(vector)); 192 194 panic_badtrap(istate, vector, "Interruption: %#hx (%s).", 193 (uint16_t) n, vector_to_string(n));195 (uint16_t) vector, vector_to_string(vector)); 194 196 #endif 195 197 } 196 198 199 void nop_handler(uint64_t vector, istate_t *istate) 200 { 201 } 202 197 203 /** Handle syscall. */ 198 sysarg_t break_instruction(unsigned int n, istate_t *istate) 199 { 200 sysarg_t ret; 201 204 int break_instruction(uint64_t vector, istate_t *istate) 205 { 202 206 /* 203 207 * Move to next instruction after BREAK. … … 210 214 } 211 215 212 interrupts_enable(); 213 ret = syscall_handler(istate->in0, istate->in1, istate->in2, 216 return syscall_handler(istate->in0, istate->in1, istate->in2, 214 217 istate->in3, istate->in4, istate->in5, istate->in6); 215 interrupts_disable(); 216 217 return ret; 218 } 219 220 void universal_handler(unsigned int n, istate_t *istate) 218 } 219 220 void universal_handler(uint64_t vector, istate_t *istate) 221 221 { 222 222 fault_if_from_uspace(istate, "Interruption: %#hx (%s).", 223 n, vector_to_string(n));224 panic_badtrap(istate, n, "Interruption: %#hx (%s).",225 n, vector_to_string(n));223 (uint16_t) vector, vector_to_string(vector)); 224 panic_badtrap(istate, vector, "Interruption: %#hx (%s).", 225 (uint16_t) vector, vector_to_string(vector)); 226 226 } 227 227 … … 229 229 { 230 230 asm volatile ( 231 "mov cr.eoi = r0;;"231 "mov cr.eoi=r0;;" 232 232 ); 233 233 } 234 234 235 void external_interrupt(u nsigned int n, istate_t *istate)235 void external_interrupt(uint64_t vector, istate_t *istate) 236 236 { 237 237 cr_ivr_t ivr; … … 298 298 } 299 299 300 void exception_init(void)301 {302 unsigned int i;303 304 for (i = 0; i < IVT_ITEMS; i++)305 exc_register(i, "universal_handler", false, universal_handler);306 307 exc_register(EXC_ALT_ITLB_FAULT,308 vector_to_string(EXC_ALT_ITLB_FAULT), true,309 alternate_instruction_tlb_fault);310 exc_register(EXC_ALT_DTLB_FAULT,311 vector_to_string(EXC_ALT_DTLB_FAULT), true,312 alternate_data_tlb_fault);313 exc_register(EXC_NESTED_TLB_FAULT,314 vector_to_string(EXC_NESTED_TLB_FAULT), false,315 data_nested_tlb_fault);316 exc_register(EXC_DATA_D_BIT_FAULT,317 vector_to_string(EXC_DATA_D_BIT_FAULT), true,318 data_dirty_bit_fault);319 exc_register(EXC_INST_A_BIT_FAULT,320 vector_to_string(EXC_INST_A_BIT_FAULT), true,321 instruction_access_bit_fault);322 exc_register(EXC_DATA_A_BIT_FAULT,323 vector_to_string(EXC_DATA_A_BIT_FAULT), true,324 data_access_bit_fault);325 exc_register(EXC_EXT_INTERRUPT,326 vector_to_string(EXC_EXT_INTERRUPT), true,327 external_interrupt);328 329 exc_register(EXC_PAGE_NOT_PRESENT,330 vector_to_string(EXC_PAGE_NOT_PRESENT), true,331 page_not_present);332 exc_register(EXC_DATA_AR_FAULT,333 vector_to_string(EXC_DATA_AR_FAULT), true,334 data_access_rights_fault);335 exc_register(EXC_GENERAL_EXCEPTION,336 vector_to_string(EXC_GENERAL_EXCEPTION), false,337 general_exception);338 exc_register(EXC_DISABLED_FP_REG,339 vector_to_string(EXC_DISABLED_FP_REG), true,340 disabled_fp_register);341 }342 343 300 /** @} 344 301 */
Note:
See TracChangeset
for help on using the changeset viewer.