Index: kernel/arch/amd64/include/arch/interrupt.h
===================================================================
--- kernel/arch/amd64/include/arch/interrupt.h	(revision b401b3322a451446f62c081f02087ec8f1c2f07e)
+++ kernel/arch/amd64/include/arch/interrupt.h	(revision 2a103b55952cff53f2a9d4868d024062b0d42b1e)
@@ -84,12 +84,5 @@
 #define VECTOR_DEBUG_IPI          (IVT_FREEBASE + 2)
 
-extern void (*disable_irqs_function)(uint16_t);
-extern void (*enable_irqs_function)(uint16_t);
-extern void (*eoi_function)(unsigned int);
-extern const char *irqs_info;
-
 extern void interrupt_init(void);
-extern void trap_virtual_enable_irqs(uint16_t);
-extern void trap_virtual_disable_irqs(uint16_t);
 
 #endif
Index: kernel/arch/amd64/src/amd64.c
===================================================================
--- kernel/arch/amd64/src/amd64.c	(revision b401b3322a451446f62c081f02087ec8f1c2f07e)
+++ kernel/arch/amd64/src/amd64.c	(revision 2a103b55952cff53f2a9d4868d024062b0d42b1e)
@@ -60,4 +60,5 @@
 #include <arch/vreg.h>
 #include <arch/kseg.h>
+#include <genarch/pic/pic_ops.h>
 
 #ifdef CONFIG_SMP
@@ -123,12 +124,6 @@
 		    (i8259_t *) I8259_PIC1_BASE, IVT_IRQBASE);
 
-		/*
-		 * Set the enable/disable IRQs handlers.
-		 * Set the End-of-Interrupt handler.
-		 */
-		enable_irqs_function = pic_enable_irqs;
-		disable_irqs_function = pic_disable_irqs;
-		eoi_function = pic_eoi;
-		irqs_info = "i8259";
+		/* Set PIC operations. */
+		pic_ops = &i8259_pic_ops;
 	}
 }
@@ -209,6 +204,6 @@
 			indev_t *kbrd = kbrd_wire(kbrd_instance, sink);
 			i8042_wire(i8042_instance, kbrd);
-			trap_virtual_enable_irqs(1 << IRQ_KBD);
-			trap_virtual_enable_irqs(1 << IRQ_MOUSE);
+			pic_ops->enable_irqs(1 << IRQ_KBD);
+			pic_ops->enable_irqs(1 << IRQ_MOUSE);
 		}
 	}
@@ -235,5 +230,5 @@
 			indev_t *srln = srln_wire(srln_instance, sink);
 			ns16550_wire(ns16550_instance, srln);
-			trap_virtual_enable_irqs(1 << IRQ_NS16550);
+			pic_ops->enable_irqs(1 << IRQ_NS16550);
 		}
 #endif
@@ -246,6 +241,5 @@
 #endif
 
-	if (irqs_info != NULL)
-		sysinfo_set_item_val(irqs_info, NULL, true);
+	sysinfo_set_item_val(pic_ops->get_name(), NULL, true);
 }
 
Index: kernel/arch/amd64/src/interrupt.c
===================================================================
--- kernel/arch/amd64/src/interrupt.c	(revision b401b3322a451446f62c081f02087ec8f1c2f07e)
+++ kernel/arch/amd64/src/interrupt.c	(revision 2a103b55952cff53f2a9d4868d024062b0d42b1e)
@@ -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.");
-}
-
 /** @}
  */
Index: kernel/arch/ia32/include/arch/interrupt.h
===================================================================
--- kernel/arch/ia32/include/arch/interrupt.h	(revision b401b3322a451446f62c081f02087ec8f1c2f07e)
+++ kernel/arch/ia32/include/arch/interrupt.h	(revision 2a103b55952cff53f2a9d4868d024062b0d42b1e)
@@ -88,12 +88,5 @@
 #define VECTOR_DEBUG_IPI          (IVT_FREEBASE + 2)
 
-extern void (*disable_irqs_function)(uint16_t);
-extern void (*enable_irqs_function)(uint16_t);
-extern void (*eoi_function)(unsigned int);
-extern const char *irqs_info;
-
 extern void interrupt_init(void);
-extern void trap_virtual_enable_irqs(uint16_t);
-extern void trap_virtual_disable_irqs(uint16_t);
 
 #endif
Index: kernel/arch/ia32/include/arch/smp/apic.h
===================================================================
--- kernel/arch/ia32/include/arch/smp/apic.h	(revision b401b3322a451446f62c081f02087ec8f1c2f07e)
+++ kernel/arch/ia32/include/arch/smp/apic.h	(revision 2a103b55952cff53f2a9d4868d024062b0d42b1e)
@@ -43,4 +43,5 @@
 #include <cpu.h>
 #include <stdint.h>
+#include <genarch/pic/pic_ops.h>
 
 #define FIXED  (0 << 0)
@@ -347,4 +348,6 @@
 } io_apic_id_t;
 
+extern pic_ops_t apic_pic_ops;
+
 extern volatile uint32_t *l_apic;
 extern volatile uint32_t *io_apic;
Index: kernel/arch/ia32/src/drivers/i8254.c
===================================================================
--- kernel/arch/ia32/src/drivers/i8254.c	(revision b401b3322a451446f62c081f02087ec8f1c2f07e)
+++ kernel/arch/ia32/src/drivers/i8254.c	(revision 2a103b55952cff53f2a9d4868d024062b0d42b1e)
@@ -96,8 +96,8 @@
 {
 	pio_write_8(CLK_PORT4, 0x36);
-	pic_disable_irqs(1 << IRQ_CLK);
+	i8259_disable_irqs(1 << IRQ_CLK);
 	pio_write_8(CLK_PORT1, (CLK_CONST / HZ) & 0xf);
 	pio_write_8(CLK_PORT1, (CLK_CONST / HZ) >> 8);
-	pic_enable_irqs(1 << IRQ_CLK);
+	i8259_enable_irqs(1 << IRQ_CLK);
 }
 
Index: kernel/arch/ia32/src/ia32.c
===================================================================
--- kernel/arch/ia32/src/ia32.c	(revision b401b3322a451446f62c081f02087ec8f1c2f07e)
+++ kernel/arch/ia32/src/ia32.c	(revision 2a103b55952cff53f2a9d4868d024062b0d42b1e)
@@ -58,4 +58,5 @@
 #include <genarch/multiboot/multiboot.h>
 #include <genarch/multiboot/multiboot2.h>
+#include <genarch/pic/pic_ops.h>
 #include <arch/pm.h>
 #include <arch/vreg.h>
@@ -112,12 +113,6 @@
 		    (i8259_t *) I8259_PIC1_BASE, IVT_IRQBASE);
 
-		/*
-		 * Set the enable/disable IRQs handlers.
-		 * Set the End-of-Interrupt handler.
-		 */
-		enable_irqs_function = pic_enable_irqs;
-		disable_irqs_function = pic_disable_irqs;
-		eoi_function = pic_eoi;
-		irqs_info = "i8259";
+		/* Set PIC operations. */
+		pic_ops = &i8259_pic_ops;
 	}
 }
@@ -194,6 +189,6 @@
 			indev_t *kbrd = kbrd_wire(kbrd_instance, sink);
 			i8042_wire(i8042_instance, kbrd);
-			trap_virtual_enable_irqs(1 << IRQ_KBD);
-			trap_virtual_enable_irqs(1 << IRQ_MOUSE);
+			pic_ops->enable_irqs(1 << IRQ_KBD);
+			pic_ops->enable_irqs(1 << IRQ_MOUSE);
 		}
 	}
@@ -220,5 +215,5 @@
 			indev_t *srln = srln_wire(srln_instance, sink);
 			ns16550_wire(ns16550_instance, srln);
-			trap_virtual_enable_irqs(1 << IRQ_NS16550);
+			pic_ops->enable_irqs(1 << IRQ_NS16550);
 		}
 #endif
@@ -231,6 +226,5 @@
 #endif
 
-	if (irqs_info != NULL)
-		sysinfo_set_item_val(irqs_info, NULL, true);
+	sysinfo_set_item_val(pic_ops->get_name(), NULL, true);
 }
 
Index: kernel/arch/ia32/src/interrupt.c
===================================================================
--- kernel/arch/ia32/src/interrupt.c	(revision b401b3322a451446f62c081f02087ec8f1c2f07e)
+++ kernel/arch/ia32/src/interrupt.c	(revision 2a103b55952cff53f2a9d4868d024062b0d42b1e)
@@ -40,4 +40,5 @@
 #include <panic.h>
 #include <genarch/drivers/i8259/i8259.h>
+#include <genarch/pic/pic_ops.h>
 #include <halt.h>
 #include <cpu.h>
@@ -61,8 +62,5 @@
  */
 
-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)
@@ -88,13 +86,4 @@
 	    istate_from_uspace(istate) ? istate->esp :
 	    (uint32_t) &istate->esp);
-}
-
-static void trap_virtual_eoi(unsigned int inum)
-{
-	if (eoi_function)
-		eoi_function(inum);
-	else
-		panic("No eoi_function.");
-
 }
 
@@ -179,5 +168,5 @@
     istate_t *istate __attribute__((unused)))
 {
-	trap_virtual_eoi(0);
+	pic_ops->eoi(0);
 	tlb_shootdown_ipi_recv();
 }
@@ -202,5 +191,5 @@
 		if (irq->preack) {
 			/* Send EOI before processing the interrupt */
-			trap_virtual_eoi(inum);
+			pic_ops->eoi(inum);
 			ack = true;
 		}
@@ -215,5 +204,5 @@
 
 	if (!ack)
-		trap_virtual_eoi(inum);
+		pic_ops->eoi(inum);
 }
 
@@ -221,10 +210,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,
@@ -264,20 +253,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.");
-}
-
 /** @}
  */
Index: kernel/arch/ia32/src/smp/apic.c
===================================================================
--- kernel/arch/ia32/src/smp/apic.c	(revision b401b3322a451446f62c081f02087ec8f1c2f07e)
+++ kernel/arch/ia32/src/smp/apic.c	(revision 2a103b55952cff53f2a9d4868d024062b0d42b1e)
@@ -47,4 +47,5 @@
 #include <arch.h>
 #include <ddi/irq.h>
+#include <genarch/pic/pic_ops.h>
 
 #ifdef CONFIG_SMP
@@ -63,4 +64,17 @@
  */
 
+static const char *apic_get_name(void);
+static bool l_apic_is_spurious(unsigned int);
+static void l_apic_handle_spurious(unsigned int);
+
+pic_ops_t apic_pic_ops = {
+	.get_name = apic_get_name,
+	.enable_irqs = io_apic_enable_irqs,
+	.disable_irqs = io_apic_disable_irqs,
+	.eoi = l_apic_eoi,
+	.is_spurious = l_apic_is_spurious,
+	.handle_spurious = l_apic_handle_spurious,
+};
+
 /*
  * These variables either stay configured as initilalized, or are changed by
@@ -125,4 +139,18 @@
 #endif /* LAPIC_VERBOSE */
 
+const char *apic_get_name(void)
+{
+	return "apic";
+}
+
+bool l_apic_is_spurious(unsigned int n)
+{
+	return n == VECTOR_APIC_SPUR;
+}
+
+void l_apic_handle_spurious(unsigned int n)
+{
+}
+
 /** APIC spurious interrupt handler.
  *
@@ -134,7 +162,4 @@
     istate_t *istate __attribute__((unused)))
 {
-#ifdef CONFIG_DEBUG
-	log(LF_ARCH, LVL_DEBUG, "cpu%u: APIC spurious interrupt", CPU->id);
-#endif
 }
 
@@ -175,8 +200,5 @@
 	    (iroutine_t) apic_spurious);
 
-	enable_irqs_function = io_apic_enable_irqs;
-	disable_irqs_function = io_apic_disable_irqs;
-	eoi_function = l_apic_eoi;
-	irqs_info = "apic";
+	pic_ops = &apic_pic_ops;
 
 	/*
Index: kernel/arch/ia32/src/smp/smp.c
===================================================================
--- kernel/arch/ia32/src/smp/smp.c	(revision b401b3322a451446f62c081f02087ec8f1c2f07e)
+++ kernel/arch/ia32/src/smp/smp.c	(revision 2a103b55952cff53f2a9d4868d024062b0d42b1e)
@@ -130,5 +130,5 @@
 	pio_write_8((ioport8_t *) 0x71, 0xa);
 
-	pic_disable_irqs(0xffff);
+	i8259_disable_irqs(0xffff);
 	apic_init();
 
Index: kernel/arch/ia64/include/arch/interrupt.h
===================================================================
--- kernel/arch/ia64/include/arch/interrupt.h	(revision b401b3322a451446f62c081f02087ec8f1c2f07e)
+++ kernel/arch/ia64/include/arch/interrupt.h	(revision 2a103b55952cff53f2a9d4868d024062b0d42b1e)
@@ -92,6 +92,4 @@
 extern void disabled_fp_register(unsigned int, istate_t *);
 
-extern void trap_virtual_enable_irqs(uint16_t);
-
 void exception_init(void);
 #endif
Index: kernel/arch/ia64/src/interrupt.c
===================================================================
--- kernel/arch/ia64/src/interrupt.c	(revision b401b3322a451446f62c081f02087ec8f1c2f07e)
+++ kernel/arch/ia64/src/interrupt.c	(revision 2a103b55952cff53f2a9d4868d024062b0d42b1e)
@@ -301,8 +301,4 @@
 }
 
-void trap_virtual_enable_irqs(uint16_t irqmask)
-{
-}
-
 void exception_init(void)
 {
Index: kernel/arch/mips32/src/mach/malta/malta.c
===================================================================
--- kernel/arch/mips32/src/mach/malta/malta.c	(revision b401b3322a451446f62c081f02087ec8f1c2f07e)
+++ kernel/arch/mips32/src/mach/malta/malta.c	(revision 2a103b55952cff53f2a9d4868d024062b0d42b1e)
@@ -75,6 +75,6 @@
 {
 	uint8_t isa_irq = host2uint32_t_le(pio_read_32(GT64120_PCI0_INTACK));
-	if (pic_is_spurious(isa_irq)) {
-		pic_handle_spurious(isa_irq);
+	if (i8259_is_spurious(isa_irq)) {
+		i8259_handle_spurious(isa_irq);
 #ifdef CONFIG_DEBUG
 		log(LF_ARCH, LVL_DEBUG, "cpu%u: PIC spurious interrupt %u",
@@ -93,5 +93,5 @@
 #endif
 	}
-	pic_eoi(isa_irq);
+	i8259_eoi(isa_irq);
 }
 
@@ -146,5 +146,5 @@
 			indev_t *srln = srln_wire(srln_instance, sink);
 			ns16550_wire(tty_instance, srln);
-			pic_enable_irqs(1 << TTY_ISA_IRQ);
+			i8259_enable_irqs(1 << TTY_ISA_IRQ);
 		}
 	}
Index: kernel/genarch/include/genarch/drivers/i8259/i8259.h
===================================================================
--- kernel/genarch/include/genarch/drivers/i8259/i8259.h	(revision b401b3322a451446f62c081f02087ec8f1c2f07e)
+++ kernel/genarch/include/genarch/drivers/i8259/i8259.h	(revision 2a103b55952cff53f2a9d4868d024062b0d42b1e)
@@ -38,4 +38,5 @@
 #include <typedefs.h>
 #include <arch/interrupt.h>
+#include <genarch/pic/pic_ops.h>
 #include <stdbool.h>
 
@@ -62,10 +63,12 @@
 } __attribute__((packed)) i8259_t;
 
+extern pic_ops_t i8259_pic_ops;
+
 extern void i8259_init(i8259_t *, i8259_t *, unsigned int);
-extern void pic_enable_irqs(uint16_t);
-extern void pic_disable_irqs(uint16_t);
-extern void pic_eoi(unsigned int);
-extern bool pic_is_spurious(unsigned int);
-extern void pic_handle_spurious(unsigned int);
+extern void i8259_enable_irqs(uint16_t);
+extern void i8259_disable_irqs(uint16_t);
+extern void i8259_eoi(unsigned int);
+extern bool i8259_is_spurious(unsigned int);
+extern void i8259_handle_spurious(unsigned int);
 
 #endif
Index: kernel/genarch/include/genarch/pic/pic_ops.h
===================================================================
--- kernel/genarch/include/genarch/pic/pic_ops.h	(revision 2a103b55952cff53f2a9d4868d024062b0d42b1e)
+++ kernel/genarch/include/genarch/pic/pic_ops.h	(revision 2a103b55952cff53f2a9d4868d024062b0d42b1e)
@@ -0,0 +1,55 @@
+/*
+ * Copyright (c) 2019 Jakub Jermar
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup kernel_genarch
+ * @{
+ */
+/** @file
+ */
+
+#ifndef KERN_PIC_OPS_H_
+#define KERN_PIC_OPS_H_
+
+#include <stdint.h>
+#include <stdbool.h>
+
+typedef struct {
+	const char *(*get_name)(void);
+	void (*disable_irqs)(uint16_t);
+	void (*enable_irqs)(uint16_t);
+	void (*eoi)(unsigned int);
+	bool (*is_spurious)(unsigned int);
+	void (*handle_spurious)(unsigned int);
+} pic_ops_t;
+
+extern pic_ops_t *pic_ops;
+
+#endif
+
+/** @}
+ */
Index: kernel/genarch/src/drivers/i8259/i8259.c
===================================================================
--- kernel/genarch/src/drivers/i8259/i8259.c	(revision b401b3322a451446f62c081f02087ec8f1c2f07e)
+++ kernel/genarch/src/drivers/i8259/i8259.c	(revision 2a103b55952cff53f2a9d4868d024062b0d42b1e)
@@ -43,4 +43,15 @@
 #include <interrupt.h>
 
+static const char *i8259_get_name(void);
+
+pic_ops_t i8259_pic_ops = {
+	.get_name = i8259_get_name,
+	.enable_irqs = i8259_enable_irqs,
+	.disable_irqs = i8259_disable_irqs,
+	.eoi = i8259_eoi,
+	.is_spurious = i8259_is_spurious,
+	.handle_spurious = i8259_handle_spurious
+};
+
 // XXX: need to change pic_* API to get rid of these
 static i8259_t *saved_pic0;
@@ -76,9 +87,14 @@
 	pio_write_8(&pic1->port2, 1);
 
-	pic_disable_irqs(0xffff);		/* disable all irq's */
-	pic_enable_irqs(1 << PIC0_IRQ_PIC1);	/* but enable PIC0_IRQ_PIC1 */
+	i8259_disable_irqs(0xffff);		/* disable all irq's */
+	i8259_enable_irqs(1 << PIC0_IRQ_PIC1);	/* but enable PIC0_IRQ_PIC1 */
 }
 
-void pic_enable_irqs(uint16_t irqmask)
+const char *i8259_get_name(void)
+{
+	return "i8259";
+}
+
+void i8259_enable_irqs(uint16_t irqmask)
 {
 	uint8_t x;
@@ -96,5 +112,5 @@
 }
 
-void pic_disable_irqs(uint16_t irqmask)
+void i8259_disable_irqs(uint16_t irqmask)
 {
 	uint8_t x;
@@ -112,5 +128,5 @@
 }
 
-void pic_eoi(unsigned int irq)
+void i8259_eoi(unsigned int irq)
 {
 	if (irq >= PIC0_IRQ_COUNT)
@@ -119,5 +135,5 @@
 }
 
-bool pic_is_spurious(unsigned int irq)
+bool i8259_is_spurious(unsigned int irq)
 {
 	pio_write_8(&saved_pic0->port1, PIC_OCW3 | PIC_OCW3_READ_ISR);
@@ -128,5 +144,5 @@
 }
 
-void pic_handle_spurious(unsigned int irq)
+void i8259_handle_spurious(unsigned int irq)
 {
 	/* For spurious IRQs from pic1, we need to isssue an EOI to pic0 */
