Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • kernel/arch/ia32/src/interrupt.c

    r2a103b5 rfd67c9f  
    4040#include <panic.h>
    4141#include <genarch/drivers/i8259/i8259.h>
    42 #include <genarch/pic/pic_ops.h>
    4342#include <halt.h>
    4443#include <cpu.h>
     
    6261 */
    6362
    64 pic_ops_t *pic_ops = NULL;
     63void (*disable_irqs_function)(uint16_t irqmask) = NULL;
     64void (*enable_irqs_function)(uint16_t irqmask) = NULL;
     65void (*eoi_function)(unsigned int) = NULL;
     66const char *irqs_info = NULL;
    6567
    6668void istate_decode(istate_t *istate)
     
    8688            istate_from_uspace(istate) ? istate->esp :
    8789            (uint32_t) &istate->esp);
     90}
     91
     92static void trap_virtual_eoi(unsigned int inum)
     93{
     94        if (eoi_function)
     95                eoi_function(inum);
     96        else
     97                panic("No eoi_function.");
     98
    8899}
    89100
     
    168179    istate_t *istate __attribute__((unused)))
    169180{
    170         pic_ops->eoi(0);
     181        trap_virtual_eoi(0);
    171182        tlb_shootdown_ipi_recv();
    172183}
     
    191202                if (irq->preack) {
    192203                        /* Send EOI before processing the interrupt */
    193                         pic_ops->eoi(inum);
     204                        trap_virtual_eoi(inum);
    194205                        ack = true;
    195206                }
     
    204215
    205216        if (!ack)
    206                 pic_ops->eoi(inum);
     217                trap_virtual_eoi(inum);
    207218}
    208219
     
    210221{
    211222        unsigned int inum = n - IVT_IRQBASE;
    212         if (!pic_ops->is_spurious(inum)) {
     223        if (!pic_is_spurious(inum)) {
    213224                /* This is actually not a spurious IRQ, so proceed as usual. */
    214225                irq_interrupt(n, istate);
    215226                return;
    216227        }
    217         pic_ops->handle_spurious(n);
     228        pic_handle_spurious(n);
    218229#ifdef CONFIG_DEBUG
    219230        log(LF_ARCH, LVL_DEBUG, "cpu%u: PIC spurious interrupt %u", CPU->id,
     
    253264}
    254265
     266void trap_virtual_enable_irqs(uint16_t irqmask)
     267{
     268        if (enable_irqs_function)
     269                enable_irqs_function(irqmask);
     270        else
     271                panic("No enable_irqs_function.");
     272}
     273
     274void trap_virtual_disable_irqs(uint16_t irqmask)
     275{
     276        if (disable_irqs_function)
     277                disable_irqs_function(irqmask);
     278        else
     279                panic("No disable_irqs_function.");
     280}
     281
    255282/** @}
    256283 */
Note: See TracChangeset for help on using the changeset viewer.