Rev 1705 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
| Rev 1705 | Rev 1780 | ||
|---|---|---|---|
| Line 117... | Line 117... | ||
| 117 | "Reserved", |
117 | "Reserved", |
| 118 | "Reserved", |
118 | "Reserved", |
| 119 | "Reserved" |
119 | "Reserved" |
| 120 | }; |
120 | }; |
| 121 | 121 | ||
| 122 | static char *vector_to_string(__u16 vector); |
122 | static char *vector_to_string(uint16_t vector); |
| 123 | static void dump_interrupted_context(istate_t *istate); |
123 | static void dump_interrupted_context(istate_t *istate); |
| 124 | 124 | ||
| 125 | char *vector_to_string(__u16 vector) |
125 | char *vector_to_string(uint16_t vector) |
| 126 | { |
126 | { |
| 127 | ASSERT(vector <= VECTOR_MAX); |
127 | ASSERT(vector <= VECTOR_MAX); |
| 128 | 128 | ||
| 129 | if (vector >= VECTORS_16_BUNDLE_START) |
129 | if (vector >= VECTORS_16_BUNDLE_START) |
| 130 | return vector_names_16_bundle[(vector-VECTORS_16_BUNDLE_START)/(16*BUNDLE_SIZE)]; |
130 | return vector_names_16_bundle[(vector-VECTORS_16_BUNDLE_START)/(16*BUNDLE_SIZE)]; |
| Line 150... | Line 150... | ||
| 150 | printf("cr.iip=%#018llx, #%d\t(%s)\n", istate->cr_iip, istate->cr_isr.ei, iip); |
150 | printf("cr.iip=%#018llx, #%d\t(%s)\n", istate->cr_iip, istate->cr_isr.ei, iip); |
| 151 | printf("cr.iipa=%#018llx\t(%s)\n", istate->cr_iipa, iipa); |
151 | printf("cr.iipa=%#018llx\t(%s)\n", istate->cr_iipa, iipa); |
| 152 | printf("cr.ifa=%#018llx\t(%s)\n", istate->cr_ifa, ifa); |
152 | printf("cr.ifa=%#018llx\t(%s)\n", istate->cr_ifa, ifa); |
| 153 | } |
153 | } |
| 154 | 154 | ||
| 155 | void general_exception(__u64 vector, istate_t *istate) |
155 | void general_exception(uint64_t vector, istate_t *istate) |
| 156 | { |
156 | { |
| 157 | char *desc = ""; |
157 | char *desc = ""; |
| 158 | 158 | ||
| 159 | switch (istate->cr_isr.ge_code) { |
159 | switch (istate->cr_isr.ge_code) { |
| 160 | case GE_ILLEGALOP: |
160 | case GE_ILLEGALOP: |
| Line 186... | Line 186... | ||
| 186 | panic("General Exception (%s)\n", desc); |
186 | panic("General Exception (%s)\n", desc); |
| 187 | } |
187 | } |
| 188 | 188 | ||
| 189 | void fpu_enable(void); |
189 | void fpu_enable(void); |
| 190 | 190 | ||
| 191 | void disabled_fp_register(__u64 vector, istate_t *istate) |
191 | void disabled_fp_register(uint64_t vector, istate_t *istate) |
| 192 | { |
192 | { |
| 193 | #ifdef CONFIG_FPU_LAZY |
193 | #ifdef CONFIG_FPU_LAZY |
| 194 | scheduler_fpu_lazy_request(); |
194 | scheduler_fpu_lazy_request(); |
| 195 | #else |
195 | #else |
| 196 | fault_if_from_uspace(istate, "Interruption: %#hx (%s)", (__u16) vector, vector_to_string(vector)); |
196 | fault_if_from_uspace(istate, "Interruption: %#hx (%s)", (uint16_t) vector, vector_to_string(vector)); |
| 197 | dump_interrupted_context(istate); |
197 | dump_interrupted_context(istate); |
| 198 | panic("Interruption: %#hx (%s)\n", (__u16) vector, vector_to_string(vector)); |
198 | panic("Interruption: %#hx (%s)\n", (uint16_t) vector, vector_to_string(vector)); |
| 199 | #endif |
199 | #endif |
| 200 | } |
200 | } |
| 201 | 201 | ||
| 202 | 202 | ||
| 203 | void nop_handler(__u64 vector, istate_t *istate) |
203 | void nop_handler(uint64_t vector, istate_t *istate) |
| 204 | { |
204 | { |
| 205 | } |
205 | } |
| 206 | 206 | ||
| 207 | 207 | ||
| 208 | 208 | ||
| 209 | /** Handle syscall. */ |
209 | /** Handle syscall. */ |
| 210 | int break_instruction(__u64 vector, istate_t *istate) |
210 | int break_instruction(uint64_t vector, istate_t *istate) |
| 211 | { |
211 | { |
| 212 | /* |
212 | /* |
| 213 | * Move to next instruction after BREAK. |
213 | * Move to next instruction after BREAK. |
| 214 | */ |
214 | */ |
| 215 | if (istate->cr_ipsr.ri == 2) { |
215 | if (istate->cr_ipsr.ri == 2) { |
| Line 225... | Line 225... | ||
| 225 | panic("Undefined syscall %d", istate->in4); |
225 | panic("Undefined syscall %d", istate->in4); |
| 226 | 226 | ||
| 227 | return -1; |
227 | return -1; |
| 228 | } |
228 | } |
| 229 | 229 | ||
| 230 | void universal_handler(__u64 vector, istate_t *istate) |
230 | void universal_handler(uint64_t vector, istate_t *istate) |
| 231 | { |
231 | { |
| 232 | fault_if_from_uspace(istate,"Interruption: %#hx (%s)\n",(__u16) vector, vector_to_string(vector)); |
232 | fault_if_from_uspace(istate,"Interruption: %#hx (%s)\n",(uint16_t) vector, vector_to_string(vector)); |
| 233 | dump_interrupted_context(istate); |
233 | dump_interrupted_context(istate); |
| 234 | panic("Interruption: %#hx (%s)\n", (__u16) vector, vector_to_string(vector)); |
234 | panic("Interruption: %#hx (%s)\n", (uint16_t) vector, vector_to_string(vector)); |
| 235 | } |
235 | } |
| 236 | 236 | ||
| 237 | void external_interrupt(__u64 vector, istate_t *istate) |
237 | void external_interrupt(uint64_t vector, istate_t *istate) |
| 238 | { |
238 | { |
| 239 | cr_ivr_t ivr; |
239 | cr_ivr_t ivr; |
| 240 | 240 | ||
| 241 | ivr.value = ivr_read(); |
241 | ivr.value = ivr_read(); |
| 242 | srlz_d(); |
242 | srlz_d(); |
| Line 252... | Line 252... | ||
| 252 | panic("\nUnhandled External Interrupt Vector %d\n", ivr.vector); |
252 | panic("\nUnhandled External Interrupt Vector %d\n", ivr.vector); |
| 253 | break; |
253 | break; |
| 254 | } |
254 | } |
| 255 | } |
255 | } |
| 256 | 256 | ||
| 257 | void virtual_interrupt(__u64 irq,void *param) |
257 | void virtual_interrupt(uint64_t irq,void *param) |
| 258 | { |
258 | { |
| 259 | switch(irq) { |
259 | switch(irq) { |
| 260 | case IRQ_KBD: |
260 | case IRQ_KBD: |
| 261 | if(kbd_uspace) ipc_irq_send_notif(irq); |
261 | if(kbd_uspace) ipc_irq_send_notif(irq); |
| 262 | break; |
262 | break; |
| Line 265... | Line 265... | ||
| 265 | break; |
265 | break; |
| 266 | } |
266 | } |
| 267 | } |
267 | } |
| 268 | 268 | ||
| 269 | /* Reregister irq to be IPC-ready */ |
269 | /* Reregister irq to be IPC-ready */ |
| 270 | void irq_ipc_bind_arch(__native irq) |
270 | void irq_ipc_bind_arch(unative_t irq) |
| 271 | { |
271 | { |
| 272 | if(irq==IRQ_KBD) { |
272 | if(irq==IRQ_KBD) { |
| 273 | kbd_uspace=1; |
273 | kbd_uspace=1; |
| 274 | return; |
274 | return; |
| 275 | } |
275 | } |