Changeset 2a103b5 in mainline for kernel/arch/amd64/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/amd64/src/interrupt.c
rb401b33 r2a103b5 38 38 #include <panic.h> 39 39 #include <genarch/drivers/i8259/i8259.h> 40 #include <genarch/pic/pic_ops.h> 40 41 #include <halt.h> 41 42 #include <cpu.h> … … 57 58 * Interrupt and exception dispatching. 58 59 */ 59 60 void (*disable_irqs_function)(uint16_t irqmask) = NULL; 61 void (*enable_irqs_function)(uint16_t irqmask) = NULL; 62 void (*eoi_function)(unsigned int) = NULL; 63 const char *irqs_info = NULL; 60 pic_ops_t *pic_ops = NULL; 64 61 65 62 void istate_decode(istate_t *istate) … … 89 86 "r14=%0#18" PRIx64 "\tr15=%0#18" PRIx64 "\n", 90 87 istate->r12, istate->r13, istate->r14, istate->r15); 91 }92 93 static void trap_virtual_eoi(unsigned int irq)94 {95 if (eoi_function)96 eoi_function(irq);97 else98 panic("No eoi_function.");99 100 88 } 101 89 … … 157 145 static void tlb_shootdown_ipi(unsigned int n, istate_t *istate) 158 146 { 159 trap_virtual_eoi(0);147 pic_ops->eoi(0); 160 148 tlb_shootdown_ipi_recv(); 161 149 } … … 182 170 if (irq->preack) { 183 171 /* Send EOI before processing the interrupt */ 184 trap_virtual_eoi(inum);172 pic_ops->eoi(inum); 185 173 ack = true; 186 174 } … … 195 183 196 184 if (!ack) 197 trap_virtual_eoi(inum);185 pic_ops->eoi(inum); 198 186 } 199 187 … … 201 189 { 202 190 unsigned int inum = n - IVT_IRQBASE; 203 if (!pic_ is_spurious(inum)) {191 if (!pic_ops->is_spurious(inum)) { 204 192 /* This is actually not a spurious IRQ, so proceed as usual. */ 205 193 irq_interrupt(n, istate); 206 194 return; 207 195 } 208 pic_ handle_spurious(n);196 pic_ops->handle_spurious(n); 209 197 #ifdef CONFIG_DEBUG 210 198 log(LF_ARCH, LVL_DEBUG, "cpu%u: PIC spurious interrupt %u", CPU->id, … … 242 230 } 243 231 244 void trap_virtual_enable_irqs(uint16_t irqmask)245 {246 if (enable_irqs_function)247 enable_irqs_function(irqmask);248 else249 panic("No enable_irqs_function.");250 }251 252 void trap_virtual_disable_irqs(uint16_t irqmask)253 {254 if (disable_irqs_function)255 disable_irqs_function(irqmask);256 else257 panic("No disable_irqs_function.");258 }259 260 232 /** @} 261 233 */
Note:
See TracChangeset
for help on using the changeset viewer.