Index: kernel/generic/src/ipc/irq.c
===================================================================
--- kernel/generic/src/ipc/irq.c	(revision bd8c6537fdd2da9a0036c819439331b3c1402b5d)
+++ kernel/generic/src/ipc/irq.c	(revision f2bbe8cb1a9ce9fb26bc0b8a05774260f7ba8175)
@@ -122,16 +122,22 @@
 	for (i = 0; i < cmdcount; i++) {
 		uintptr_t addr;
+		size_t size;
 
 		/* Process only commands that use an address. */
 		switch (cmds[i].cmd) {
 		case CMD_PIO_READ_8:
+        	case CMD_PIO_WRITE_8:
+        	case CMD_PIO_WRITE_A_8:
+			size = 1;
+			break;
         	case CMD_PIO_READ_16:
+        	case CMD_PIO_WRITE_16:
+        	case CMD_PIO_WRITE_A_16:
+			size = 2;
+			break;
         	case CMD_PIO_READ_32:
-        	case CMD_PIO_WRITE_8:
-        	case CMD_PIO_WRITE_16:
         	case CMD_PIO_WRITE_32:
-        	case CMD_PIO_WRITE_A_8:
-        	case CMD_PIO_WRITE_A_16:
         	case CMD_PIO_WRITE_A_32:
+			size = 4;
 			break;
 		default:
@@ -142,12 +148,8 @@
 		addr = (uintptr_t) cmds[i].addr;
 		
-		/* Process only memory mapped PIO addresses. */
-		if ((void *) addr < IO_SPACE_BOUNDARY)
-			continue;
-
 		for (j = 0; j < rangecount; j++) {
 
 			/* Find the matching range. */
-			if (!iswithin(pbase[j], ranges[j].size, addr, 1))
+			if (!iswithin(pbase[j], ranges[j].size, addr, size))
 				continue;
 
