Index: kernel/arch/amd64/src/interrupt.c
===================================================================
--- kernel/arch/amd64/src/interrupt.c	(revision fd67c9f8dcdd34e9ee9ae504ae566e0d47cebb67)
+++ kernel/arch/amd64/src/interrupt.c	(revision e28175d7eb3aea0200054019deabcae2e8f6cefd)
@@ -38,4 +38,5 @@
 #include <panic.h>
 #include <genarch/drivers/i8259/i8259.h>
+#include <genarch/pic/pic_ops.h>
 #include <halt.h>
 #include <cpu.h>
@@ -57,9 +58,5 @@
  * Interrupt and exception dispatching.
  */
-
-void (*disable_irqs_function)(uint16_t irqmask) = NULL;
-void (*enable_irqs_function)(uint16_t irqmask) = NULL;
-void (*eoi_function)(unsigned int) = NULL;
-const char *irqs_info = NULL;
+pic_ops_t *pic_ops = NULL;
 
 void istate_decode(istate_t *istate)
@@ -89,13 +86,4 @@
 	    "r14=%0#18" PRIx64 "\tr15=%0#18" PRIx64 "\n",
 	    istate->r12, istate->r13, istate->r14, istate->r15);
-}
-
-static void trap_virtual_eoi(unsigned int irq)
-{
-	if (eoi_function)
-		eoi_function(irq);
-	else
-		panic("No eoi_function.");
-
 }
 
@@ -157,5 +145,5 @@
 static void tlb_shootdown_ipi(unsigned int n, istate_t *istate)
 {
-	trap_virtual_eoi(0);
+	pic_ops->eoi(0);
 	tlb_shootdown_ipi_recv();
 }
@@ -182,5 +170,5 @@
 		if (irq->preack) {
 			/* Send EOI before processing the interrupt */
-			trap_virtual_eoi(inum);
+			pic_ops->eoi(inum);
 			ack = true;
 		}
@@ -195,5 +183,5 @@
 
 	if (!ack)
-		trap_virtual_eoi(inum);
+		pic_ops->eoi(inum);
 }
 
@@ -201,10 +189,10 @@
 {
 	unsigned int inum = n - IVT_IRQBASE;
-	if (!pic_is_spurious(inum)) {
+	if (!pic_ops->is_spurious(inum)) {
 		/* This is actually not a spurious IRQ, so proceed as usual. */
 		irq_interrupt(n, istate);
 		return;
 	}
-	pic_handle_spurious(n);
+	pic_ops->handle_spurious(n);
 #ifdef CONFIG_DEBUG
 	log(LF_ARCH, LVL_DEBUG, "cpu%u: PIC spurious interrupt %u", CPU->id,
@@ -242,20 +230,4 @@
 }
 
-void trap_virtual_enable_irqs(uint16_t irqmask)
-{
-	if (enable_irqs_function)
-		enable_irqs_function(irqmask);
-	else
-		panic("No enable_irqs_function.");
-}
-
-void trap_virtual_disable_irqs(uint16_t irqmask)
-{
-	if (disable_irqs_function)
-		disable_irqs_function(irqmask);
-	else
-		panic("No disable_irqs_function.");
-}
-
 /** @}
  */
