Changeset 2a103b5 in mainline for kernel/arch/ia32/src/interrupt.c
- Timestamp:
- 2019-06-09T11:31:38Z (5 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- c48de91
- Parents:
- b401b33
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
kernel/arch/ia32/src/interrupt.c
rb401b33 r2a103b5 40 40 #include <panic.h> 41 41 #include <genarch/drivers/i8259/i8259.h> 42 #include <genarch/pic/pic_ops.h> 42 43 #include <halt.h> 43 44 #include <cpu.h> … … 61 62 */ 62 63 63 void (*disable_irqs_function)(uint16_t irqmask) = NULL; 64 void (*enable_irqs_function)(uint16_t irqmask) = NULL; 65 void (*eoi_function)(unsigned int) = NULL; 66 const char *irqs_info = NULL; 64 pic_ops_t *pic_ops = NULL; 67 65 68 66 void istate_decode(istate_t *istate) … … 88 86 istate_from_uspace(istate) ? istate->esp : 89 87 (uint32_t) &istate->esp); 90 }91 92 static void trap_virtual_eoi(unsigned int inum)93 {94 if (eoi_function)95 eoi_function(inum);96 else97 panic("No eoi_function.");98 99 88 } 100 89 … … 179 168 istate_t *istate __attribute__((unused))) 180 169 { 181 trap_virtual_eoi(0);170 pic_ops->eoi(0); 182 171 tlb_shootdown_ipi_recv(); 183 172 } … … 202 191 if (irq->preack) { 203 192 /* Send EOI before processing the interrupt */ 204 trap_virtual_eoi(inum);193 pic_ops->eoi(inum); 205 194 ack = true; 206 195 } … … 215 204 216 205 if (!ack) 217 trap_virtual_eoi(inum);206 pic_ops->eoi(inum); 218 207 } 219 208 … … 221 210 { 222 211 unsigned int inum = n - IVT_IRQBASE; 223 if (!pic_ is_spurious(inum)) {212 if (!pic_ops->is_spurious(inum)) { 224 213 /* This is actually not a spurious IRQ, so proceed as usual. */ 225 214 irq_interrupt(n, istate); 226 215 return; 227 216 } 228 pic_ handle_spurious(n);217 pic_ops->handle_spurious(n); 229 218 #ifdef CONFIG_DEBUG 230 219 log(LF_ARCH, LVL_DEBUG, "cpu%u: PIC spurious interrupt %u", CPU->id, … … 264 253 } 265 254 266 void trap_virtual_enable_irqs(uint16_t irqmask)267 {268 if (enable_irqs_function)269 enable_irqs_function(irqmask);270 else271 panic("No enable_irqs_function.");272 }273 274 void trap_virtual_disable_irqs(uint16_t irqmask)275 {276 if (disable_irqs_function)277 disable_irqs_function(irqmask);278 else279 panic("No disable_irqs_function.");280 }281 282 255 /** @} 283 256 */
Note:
See TracChangeset
for help on using the changeset viewer.