Index: kernel/arch/abs32le/src/abs32le.c
===================================================================
--- kernel/arch/abs32le/src/abs32le.c	(revision 50fda246446cc7b9ea6f17465aa5d2853fd2aa0b)
+++ kernel/arch/abs32le/src/abs32le.c	(revision 393bef130ee92b6dab40dea6285691c060527844)
@@ -102,4 +102,9 @@
 }
 
+void irq_initialize_arch(irq_t *irq)
+{
+	(void) irq;
+}
+
 /** @}
  */
Index: kernel/arch/amd64/src/amd64.c
===================================================================
--- kernel/arch/amd64/src/amd64.c	(revision 50fda246446cc7b9ea6f17465aa5d2853fd2aa0b)
+++ kernel/arch/amd64/src/amd64.c	(revision 393bef130ee92b6dab40dea6285691c060527844)
@@ -278,4 +278,9 @@
 }
 
+void irq_initialize_arch(irq_t *irq)
+{
+	(void) irq;
+}
+
 /** @}
  */
Index: kernel/arch/arm32/src/arm32.c
===================================================================
--- kernel/arch/arm32/src/arm32.c	(revision 50fda246446cc7b9ea6f17465aa5d2853fd2aa0b)
+++ kernel/arch/arm32/src/arm32.c	(revision 393bef130ee92b6dab40dea6285691c060527844)
@@ -179,4 +179,9 @@
 }
 
+void irq_initialize_arch(irq_t *irq)
+{
+	(void) irq;
+}
+
 /** @}
  */
Index: kernel/arch/ia32/src/ia32.c
===================================================================
--- kernel/arch/ia32/src/ia32.c	(revision 50fda246446cc7b9ea6f17465aa5d2853fd2aa0b)
+++ kernel/arch/ia32/src/ia32.c	(revision 393bef130ee92b6dab40dea6285691c060527844)
@@ -234,4 +234,9 @@
 }
 
+void irq_initialize_arch(irq_t *irq)
+{
+	(void) irq;
+}
+
 /** @}
  */
Index: kernel/arch/ia64/src/ia64.c
===================================================================
--- kernel/arch/ia64/src/ia64.c	(revision 50fda246446cc7b9ea6f17465aa5d2853fd2aa0b)
+++ kernel/arch/ia64/src/ia64.c	(revision 393bef130ee92b6dab40dea6285691c060527844)
@@ -44,4 +44,5 @@
 #include <arch/stack.h>
 #include <arch/mm/page.h>
+#include <interrupt.h>
 #include <mm/as.h>
 #include <config.h>
@@ -280,4 +281,9 @@
 }
 
+void irq_initialize_arch(irq_t *irq)
+{
+	(void) irq;
+}
+
 /** @}
  */
Index: kernel/arch/mips32/src/mips32.c
===================================================================
--- kernel/arch/mips32/src/mips32.c	(revision 50fda246446cc7b9ea6f17465aa5d2853fd2aa0b)
+++ kernel/arch/mips32/src/mips32.c	(revision 393bef130ee92b6dab40dea6285691c060527844)
@@ -46,4 +46,5 @@
 #include <sysinfo/sysinfo.h>
 #include <arch/interrupt.h>
+#include <interrupt.h>
 #include <console/chardev.h>
 #include <arch/barrier.h>
@@ -257,4 +258,9 @@
 }
 
+void irq_initialize_arch(irq_t *irq)
+{
+	(void) irq;
+}
+
 /** @}
  */
Index: kernel/arch/ppc32/src/ppc32.c
===================================================================
--- kernel/arch/ppc32/src/ppc32.c	(revision 50fda246446cc7b9ea6f17465aa5d2853fd2aa0b)
+++ kernel/arch/ppc32/src/ppc32.c	(revision 393bef130ee92b6dab40dea6285691c060527844)
@@ -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;
 }
 
Index: kernel/arch/sparc64/src/sparc64.c
===================================================================
--- kernel/arch/sparc64/src/sparc64.c	(revision 50fda246446cc7b9ea6f17465aa5d2853fd2aa0b)
+++ kernel/arch/sparc64/src/sparc64.c	(revision 393bef130ee92b6dab40dea6285691c060527844)
@@ -44,4 +44,5 @@
 #include <arch/mm/page.h>
 #include <arch/stack.h>
+#include <interrupt.h>
 #include <genarch/ofw/ofw_tree.h>
 #include <userspace.h>
@@ -166,4 +167,9 @@
 }
 
+void irq_initialize_arch(irq_t *irq)
+{
+	(void) irq;
+}
+
 /** @}
  */
