Ignore:
File:
1 edited

Legend:

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

    r2a103b5 rfd67c9f  
    3838#include <panic.h>
    3939#include <genarch/drivers/i8259/i8259.h>
    40 #include <genarch/pic/pic_ops.h>
    4140#include <halt.h>
    4241#include <cpu.h>
     
    5857 * Interrupt and exception dispatching.
    5958 */
    60 pic_ops_t *pic_ops = NULL;
     59
     60void (*disable_irqs_function)(uint16_t irqmask) = NULL;
     61void (*enable_irqs_function)(uint16_t irqmask) = NULL;
     62void (*eoi_function)(unsigned int) = NULL;
     63const char *irqs_info = NULL;
    6164
    6265void istate_decode(istate_t *istate)
     
    8689            "r14=%0#18" PRIx64 "\tr15=%0#18" PRIx64 "\n",
    8790            istate->r12, istate->r13, istate->r14, istate->r15);
     91}
     92
     93static void trap_virtual_eoi(unsigned int irq)
     94{
     95        if (eoi_function)
     96                eoi_function(irq);
     97        else
     98                panic("No eoi_function.");
     99
    88100}
    89101
     
    145157static void tlb_shootdown_ipi(unsigned int n, istate_t *istate)
    146158{
    147         pic_ops->eoi(0);
     159        trap_virtual_eoi(0);
    148160        tlb_shootdown_ipi_recv();
    149161}
     
    170182                if (irq->preack) {
    171183                        /* Send EOI before processing the interrupt */
    172                         pic_ops->eoi(inum);
     184                        trap_virtual_eoi(inum);
    173185                        ack = true;
    174186                }
     
    183195
    184196        if (!ack)
    185                 pic_ops->eoi(inum);
     197                trap_virtual_eoi(inum);
    186198}
    187199
     
    189201{
    190202        unsigned int inum = n - IVT_IRQBASE;
    191         if (!pic_ops->is_spurious(inum)) {
     203        if (!pic_is_spurious(inum)) {
    192204                /* This is actually not a spurious IRQ, so proceed as usual. */
    193205                irq_interrupt(n, istate);
    194206                return;
    195207        }
    196         pic_ops->handle_spurious(n);
     208        pic_handle_spurious(n);
    197209#ifdef CONFIG_DEBUG
    198210        log(LF_ARCH, LVL_DEBUG, "cpu%u: PIC spurious interrupt %u", CPU->id,
     
    230242}
    231243
     244void trap_virtual_enable_irqs(uint16_t irqmask)
     245{
     246        if (enable_irqs_function)
     247                enable_irqs_function(irqmask);
     248        else
     249                panic("No enable_irqs_function.");
     250}
     251
     252void trap_virtual_disable_irqs(uint16_t irqmask)
     253{
     254        if (disable_irqs_function)
     255                disable_irqs_function(irqmask);
     256        else
     257                panic("No disable_irqs_function.");
     258}
     259
    232260/** @}
    233261 */
Note: See TracChangeset for help on using the changeset viewer.