Index: kernel/arch/ppc32/src/ppc32.c
===================================================================
--- kernel/arch/ppc32/src/ppc32.c	(revision 1ac3a52793b357f936bd41ef49db586aa1e5c1a3)
+++ kernel/arch/ppc32/src/ppc32.c	(revision b73c26d0a9e1cc90dc174dbf3e084e09ed5b0e02)
@@ -39,4 +39,5 @@
 #include <genarch/kbrd/kbrd.h>
 #include <arch/interrupt.h>
+#include <interrupt.h>
 #include <genarch/fb/fb.h>
 #include <genarch/fb/visuals.h>
@@ -47,4 +48,5 @@
 #include <proc/uarg.h>
 #include <console/console.h>
+#include <sysinfo/sysinfo.h>
 #include <ddi/irq.h>
 #include <arch/drivers/pic.h>
@@ -58,4 +60,7 @@
 
 bootinfo_t bootinfo;
+
+static cir_t pic_cir;
+static void *pic_cir_arg;
 
 /** Performs ppc32-specific initialization before main_bsp() is called. */
@@ -186,8 +191,7 @@
 	if (assigned_address) {
 		/* Initialize PIC */
-		cir_t cir;
-		void *cir_arg;
-		pic_init(assigned_address[0].addr, PAGE_SIZE, &cir, &cir_arg);
-		
+		pic_init(assigned_address[0].addr, PAGE_SIZE, &pic_cir,
+		    &pic_cir_arg);
+
 #ifdef CONFIG_MAC_KBD
 		uintptr_t pa = assigned_address[0].addr + 0x16000;
@@ -201,5 +205,5 @@
 		/* Initialize I/O controller */
 		cuda_instance_t *cuda_instance =
-		    cuda_init(cuda, IRQ_CUDA, cir, cir_arg);
+		    cuda_init(cuda, IRQ_CUDA, pic_cir, pic_cir_arg);
 		if (cuda_instance) {
 			kbrd_instance_t *kbrd_instance = kbrd_init();
@@ -211,4 +215,14 @@
 			}
 		}
+
+		/*
+		 * This is the necessary evil until the userspace driver is entirely
+		 * self-sufficient.
+		 */
+		sysinfo_set_item_val("cuda", NULL, true);
+		sysinfo_set_item_val("cuda.inr", NULL, IRQ_CUDA);
+		sysinfo_set_item_val("cuda.address.physical", NULL, pa);
+		sysinfo_set_item_val("cuda.address.kernel", NULL,
+		    (uintptr_t) cuda);
 #endif
 	}
@@ -216,4 +230,11 @@
 	/* Consider only a single device for now */
 	return false;
+}
+
+void irq_initialize_arch(irq_t *irq)
+{
+	irq->cir = pic_cir;
+	irq->cir_arg = pic_cir_arg;
+	irq->preack = true;
 }
 
