Index: kernel/arch/ia32/src/ia32.c
===================================================================
--- kernel/arch/ia32/src/ia32.c	(revision 3daba42eca17fefb7371eb495dcaf63d5a95ed9e)
+++ kernel/arch/ia32/src/ia32.c	(revision 3e828ea40985ce126affd5d7faa6ba679802b4db)
@@ -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);
 }
 
