Index: kernel/arch/ppc32/src/drivers/pic.c
===================================================================
--- kernel/arch/ppc32/src/drivers/pic.c	(revision c5429fedb8216659204bbbdba42d7f5a845e4dda)
+++ kernel/arch/ppc32/src/drivers/pic.c	(revision 9be2358aadbef3865ee2b3ab546d8b1f56d79cd6)
@@ -37,6 +37,7 @@
 #include <byteorder.h>
 #include <bitops.h>
+#include <typedefs.h>
 
-static volatile uint32_t *pic = NULL;
+static ioport32_t *pic = NULL;
 
 void pic_init(uintptr_t base, size_t size, cir_t *cir, void **cir_arg)
@@ -50,20 +51,27 @@
 void pic_enable_interrupt(inr_t intnum)
 {
-	if (pic) {
-		if (intnum < 32)
-			pic[PIC_MASK_LOW] = pic[PIC_MASK_LOW] | (1 << intnum);
-		else
-			pic[PIC_MASK_HIGH] = pic[PIC_MASK_HIGH] | (1 << (intnum - 32));
+	if (!pic)
+		return;
+
+	if (intnum < 32) {
+		pio_write_32(&pic[PIC_MASK_LOW],
+		    pio_read_32(&pic[PIC_MASK_LOW]) | (1 << intnum));
+	} else {
+		pio_write_32(&pic[PIC_MASK_HIGH],
+		    pio_read_32(&pic[PIC_MASK_HIGH]) | (1 << (intnum - 32)));
 	}
-
 }
 
 void pic_disable_interrupt(inr_t intnum)
 {
-	if (pic) {
-		if (intnum < 32)
-			pic[PIC_MASK_LOW] = pic[PIC_MASK_LOW] & (~(1 << intnum));
-		else
-			pic[PIC_MASK_HIGH] = pic[PIC_MASK_HIGH] & (~(1 << (intnum - 32)));
+	if (!pic)
+		return;
+
+	if (intnum < 32) {
+		pio_write_32(&pic[PIC_MASK_LOW],
+		    pio_read_32(&pic[PIC_MASK_LOW]) & (~(1 << intnum)));
+	} else {
+		pio_write_32(&pic[PIC_MASK_HIGH],
+		    pio_read_32(&pic[PIC_MASK_HIGH]) & (~(1 << (intnum - 32))));
 	}
 }
@@ -71,9 +79,11 @@
 void pic_ack_interrupt(void *arg, inr_t intnum)
 {
-	if (pic) {
-		if (intnum < 32)
-			pic[PIC_ACK_LOW] = 1 << intnum;
-		else
-			pic[PIC_ACK_HIGH] = 1 << (intnum - 32);
+	if (!pic)
+		return;
+
+	if (intnum < 32) {
+		pio_write_32(&pic[PIC_ACK_LOW], 1 << intnum);
+	} else {
+		pio_write_32(&pic[PIC_ACK_HIGH], 1 << (intnum - 32));
 	}
 }
@@ -87,9 +97,9 @@
 		uint32_t pending;
 
-		pending = pic[PIC_PENDING_LOW];
+		pending = pio_read_32(&pic[PIC_PENDING_LOW]);
 		if (pending != 0)
 			return fnzb32(pending);
 
-		pending = pic[PIC_PENDING_HIGH];
+		pending = pio_read_32(&pic[PIC_PENDING_HIGH]);
 		if (pending != 0)
 			return fnzb32(pending) + 32;
