Index: kernel/generic/include/ipc/irq.h
===================================================================
--- kernel/generic/include/ipc/irq.h	(revision 9201f474bc6e1a292f3bc7545adaad0ef1175b9b)
+++ kernel/generic/include/ipc/irq.h	(revision 25b9e2c5197173ccff86ba173e54eee48b85e79f)
@@ -47,8 +47,24 @@
     unative_t method, irq_code_t *ucode);
 extern void ipc_irq_send_notif(irq_t *irq);
-extern void ipc_irq_send_msg(irq_t *irq, unative_t a1, unative_t a2,
-    unative_t a3);
 extern void ipc_irq_unregister(answerbox_t *box, inr_t inr, devno_t devno);
 extern void ipc_irq_cleanup(answerbox_t *box);
+
+/*
+ * User friendly wrappers for ipc_irq_send_msg(). They are in the form
+ * ipc_irq_send_msg_m(), where m is the number of payload arguments.
+ */
+#define ipc_irq_send_msg_1(irq, a1) \
+    ipc_irq_send_msg((irq), (a1), 0, 0, 0, 0)
+#define ipc_irq_send_msg_2(irq, a1, a2) \
+    ipc_irq_send_msg((irq), (a1), (a2), 0, 0, 0)
+#define ipc_irq_send_msg_3(irq, a1, a2, a3) \
+    ipc_irq_send_msg((irq), (a1), (a2), (a3), 0, 0)
+#define ipc_irq_send_msg_4(irq, a1, a2, a3, a4) \
+    ipc_irq_send_msg((irq), (a1), (a2), (a3), (a4), 0)
+#define ipc_irq_send_msg_5(irq, a1, a2, a3, a4, a5) \
+    ipc_irq_send_msg((irq), (a1), (a2), (a3), (a4), (a5))
+
+extern void ipc_irq_send_msg(irq_t *irq, unative_t a1, unative_t a2,
+    unative_t a3, unative_t a4, unative_t a5);
 
 #endif
Index: kernel/generic/src/console/klog.c
===================================================================
--- kernel/generic/src/console/klog.c	(revision 9201f474bc6e1a292f3bc7545adaad0ef1175b9b)
+++ kernel/generic/src/console/klog.c	(revision 25b9e2c5197173ccff86ba173e54eee48b85e79f)
@@ -130,5 +130,5 @@
 			goto out;
 	}
-	ipc_irq_send_msg(&klog_irq, klogpos, ret, 0);
+	ipc_irq_send_msg_2(&klog_irq, klogpos, ret);
 	klogpos += ret;
 	if (klogpos >= klogsize)
Index: kernel/generic/src/ipc/irq.c
===================================================================
--- kernel/generic/src/ipc/irq.c	(revision 9201f474bc6e1a292f3bc7545adaad0ef1175b9b)
+++ kernel/generic/src/ipc/irq.c	(revision 25b9e2c5197173ccff86ba173e54eee48b85e79f)
@@ -90,11 +90,14 @@
 			break;
 		case CMD_MEM_WRITE_2:
-			*((uint16_t *) code->cmds[i].addr) = code->cmds[i].value;
+			*((uint16_t *) code->cmds[i].addr) =
+			    code->cmds[i].value;
 			break;
 		case CMD_MEM_WRITE_4:
-			*((uint32_t *) code->cmds[i].addr) = code->cmds[i].value;
+			*((uint32_t *) code->cmds[i].addr) =
+			    code->cmds[i].value;
 			break;
 		case CMD_MEM_WRITE_8:
-			*((uint64_t *) code->cmds[i].addr) = code->cmds[i].value;
+			*((uint64_t *) code->cmds[i].addr) =
+			    code->cmds[i].value;
 			break;
 #if defined(ia32) || defined(amd64)
@@ -119,5 +122,6 @@
 			break;
 		}
-		if (code->cmds[i].dstarg && code->cmds[i].dstarg < 4) {
+		if (code->cmds[i].dstarg && code->cmds[i].dstarg <
+		    IPC_CALL_LEN) {
 			call->data.args[code->cmds[i].dstarg] = dstval;
 		}
@@ -283,6 +287,9 @@
  * @param a2		Driver-specific payload argument.
  * @param a3		Driver-specific payload argument.
- */
-void ipc_irq_send_msg(irq_t *irq, unative_t a1, unative_t a2, unative_t a3)
+ * @param a4		Driver-specific payload argument.
+ * @param a5		Driver-specific payload argument.
+ */
+void ipc_irq_send_msg(irq_t *irq, unative_t a1, unative_t a2, unative_t a3,
+    unative_t a4, unative_t a5)
 {
 	call_t *call;
@@ -301,4 +308,6 @@
 		IPC_SET_ARG2(call->data, a2);
 		IPC_SET_ARG3(call->data, a3);
+		IPC_SET_ARG4(call->data, a4);
+		IPC_SET_ARG5(call->data, a5);
 		/* Put a counter to the message */
 		call->priv = ++irq->notif_cfg.counter;
