Index: uspace/drv/char/msim-con/msim-con.c
===================================================================
--- uspace/drv/char/msim-con/msim-con.c	(revision 19d2ce011edc2ee831f0e815316d64bb3c764581)
+++ uspace/drv/char/msim-con/msim-con.c	(revision efb9fd0817dd86f59aee7c1c554279f4cef14c8c)
@@ -43,12 +43,5 @@
 static void msim_con_connection(ipc_callid_t, ipc_call_t *, void *);
 
-static irq_pio_range_t msim_ranges[] = {
-	{
-		.base = 0,
-		.size = 1
-	}
-};
-
-static irq_cmd_t msim_cmds[] = {
+static irq_cmd_t msim_cmds_proto[] = {
 	{
 		.cmd = CMD_PIO_READ_8,
@@ -59,11 +52,4 @@
 		.cmd = CMD_ACCEPT
 	}
-};
-
-static irq_code_t msim_kbd = {
-	sizeof(msim_ranges) / sizeof(irq_pio_range_t),
-	msim_ranges,
-	sizeof(msim_cmds) / sizeof(irq_cmd_t),
-	msim_cmds
 };
 
@@ -87,5 +73,12 @@
 	ddf_fun_t *fun = NULL;
 	bool subscribed = false;
+	irq_cmd_t *msim_cmds = NULL;
 	int rc;
+
+	msim_cmds = malloc(sizeof(msim_cmds_proto));
+	if (msim_cmds == NULL) {
+		rc = ENOMEM;
+		goto error;
+	}
 
 	con->res = *res;
@@ -100,7 +93,16 @@
 	ddf_fun_set_conn_handler(fun, msim_con_connection);
 
-	msim_ranges[0].base = res->base;
+	con->irq_range[0].base = res->base;
+	con->irq_range[0].size = 1;
+
+	memcpy(msim_cmds, msim_cmds_proto, sizeof(msim_cmds_proto));
 	msim_cmds[0].addr = (void *) res->base;
-	async_irq_subscribe(res->irq, msim_irq_handler, con, &msim_kbd);
+
+	con->irq_code.rangecount = 1;
+	con->irq_code.ranges = con->irq_range;
+	con->irq_code.cmdcount = sizeof(msim_cmds_proto) / sizeof(irq_cmd_t);
+	con->irq_code.cmds = msim_cmds;
+
+	async_irq_subscribe(res->irq, msim_irq_handler, con, &con->irq_code);
 	subscribed = true;
 
@@ -117,4 +119,5 @@
 	if (fun != NULL)
 		ddf_fun_destroy(fun);
+	free(msim_cmds);
 
 	return rc;
Index: uspace/drv/char/msim-con/msim-con.h
===================================================================
--- uspace/drv/char/msim-con/msim-con.h	(revision 19d2ce011edc2ee831f0e815316d64bb3c764581)
+++ uspace/drv/char/msim-con/msim-con.h	(revision efb9fd0817dd86f59aee7c1c554279f4cef14c8c)
@@ -52,4 +52,6 @@
 	ddf_dev_t *dev;
 	msim_con_res_t res;
+	irq_pio_range_t irq_range[1];
+	irq_code_t irq_code;
 } msim_con_t;
 
