Rev 1735 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
| Rev 1735 | Rev 1780 | ||
|---|---|---|---|
| Line 54... | Line 54... | ||
| 54 | 54 | ||
| 55 | /* |
55 | /* |
| 56 | * Interrupt and exception dispatching. |
56 | * Interrupt and exception dispatching. |
| 57 | */ |
57 | */ |
| 58 | 58 | ||
| 59 | void (* disable_irqs_function)(__u16 irqmask) = NULL; |
59 | void (* disable_irqs_function)(uint16_t irqmask) = NULL; |
| 60 | void (* enable_irqs_function)(__u16 irqmask) = NULL; |
60 | void (* enable_irqs_function)(uint16_t irqmask) = NULL; |
| 61 | void (* eoi_function)(void) = NULL; |
61 | void (* eoi_function)(void) = NULL; |
| 62 | 62 | ||
| 63 | void PRINT_INFO_ERRCODE(istate_t *istate) |
63 | void PRINT_INFO_ERRCODE(istate_t *istate) |
| 64 | { |
64 | { |
| 65 | char *symbol = get_symtab_entry(istate->eip); |
65 | char *symbol = get_symtab_entry(istate->eip); |
| Line 127... | Line 127... | ||
| 127 | panic("stack fault\n"); |
127 | panic("stack fault\n"); |
| 128 | } |
128 | } |
| 129 | 129 | ||
| 130 | void simd_fp_exception(int n, istate_t *istate) |
130 | void simd_fp_exception(int n, istate_t *istate) |
| 131 | { |
131 | { |
| 132 | __u32 mxcsr; |
132 | uint32_t mxcsr; |
| 133 | asm |
133 | asm |
| 134 | ( |
134 | ( |
| 135 | "stmxcsr %0;\n" |
135 | "stmxcsr %0;\n" |
| 136 | :"=m"(mxcsr) |
136 | :"=m"(mxcsr) |
| 137 | ); |
137 | ); |
| 138 | fault_if_from_uspace(istate, "SIMD FP exception(19), MXCSR: %#zx", |
138 | fault_if_from_uspace(istate, "SIMD FP exception(19), MXCSR: %#zx", |
| 139 | (__native)mxcsr); |
139 | (unative_t)mxcsr); |
| 140 | 140 | ||
| 141 | PRINT_INFO_ERRCODE(istate); |
141 | PRINT_INFO_ERRCODE(istate); |
| 142 | printf("MXCSR: %#zx\n",(__native)(mxcsr)); |
142 | printf("MXCSR: %#zx\n",(unative_t)(mxcsr)); |
| 143 | panic("SIMD FP exception(19)\n"); |
143 | panic("SIMD FP exception(19)\n"); |
| 144 | } |
144 | } |
| 145 | 145 | ||
| 146 | void nm_fault(int n, istate_t *istate) |
146 | void nm_fault(int n, istate_t *istate) |
| 147 | { |
147 | { |
| Line 162... | Line 162... | ||
| 162 | { |
162 | { |
| 163 | trap_virtual_eoi(); |
163 | trap_virtual_eoi(); |
| 164 | tlb_shootdown_ipi_recv(); |
164 | tlb_shootdown_ipi_recv(); |
| 165 | } |
165 | } |
| 166 | 166 | ||
| 167 | void trap_virtual_enable_irqs(__u16 irqmask) |
167 | void trap_virtual_enable_irqs(uint16_t irqmask) |
| 168 | { |
168 | { |
| 169 | if (enable_irqs_function) |
169 | if (enable_irqs_function) |
| 170 | enable_irqs_function(irqmask); |
170 | enable_irqs_function(irqmask); |
| 171 | else |
171 | else |
| 172 | panic("no enable_irqs_function\n"); |
172 | panic("no enable_irqs_function\n"); |
| 173 | } |
173 | } |
| 174 | 174 | ||
| 175 | void trap_virtual_disable_irqs(__u16 irqmask) |
175 | void trap_virtual_disable_irqs(uint16_t irqmask) |
| 176 | { |
176 | { |
| 177 | if (disable_irqs_function) |
177 | if (disable_irqs_function) |
| 178 | disable_irqs_function(irqmask); |
178 | disable_irqs_function(irqmask); |
| 179 | else |
179 | else |
| 180 | panic("no disable_irqs_function\n"); |
180 | panic("no disable_irqs_function\n"); |
| Line 195... | Line 195... | ||
| 195 | trap_virtual_eoi(); |
195 | trap_virtual_eoi(); |
| 196 | } |
196 | } |
| 197 | 197 | ||
| 198 | 198 | ||
| 199 | /* Reregister irq to be IPC-ready */ |
199 | /* Reregister irq to be IPC-ready */ |
| 200 | void irq_ipc_bind_arch(__native irq) |
200 | void irq_ipc_bind_arch(unative_t irq) |
| 201 | { |
201 | { |
| 202 | if (irq == IRQ_CLK) |
202 | if (irq == IRQ_CLK) |
| 203 | return; |
203 | return; |
| 204 | exc_register(IVT_IRQBASE+irq, "ipc_int", ipc_int); |
204 | exc_register(IVT_IRQBASE+irq, "ipc_int", ipc_int); |
| 205 | trap_virtual_enable_irqs(1 << irq); |
205 | trap_virtual_enable_irqs(1 << irq); |