Index: kernel/generic/include/ddi/irq.h
===================================================================
--- kernel/generic/include/ddi/irq.h	(revision ee06f2a049baaea0e4c9fc693e7c3c34f3105202)
+++ kernel/generic/include/ddi/irq.h	(revision 6cd9aa607e6515e17e369c7e888779416251db4d)
@@ -80,8 +80,8 @@
 
 struct irq;
-typedef void (* irq_handler_t)(struct irq *irq, void *arg, ...);
+typedef void (* irq_handler_t)(struct irq *);
 
 /** Type for function used to clear the interrupt. */
-typedef void (* cir_t)(void *arg, inr_t inr);
+typedef void (* cir_t)(void *, inr_t);
 
 /** IPC notification config structure.
@@ -140,9 +140,9 @@
 	irq_trigger_t trigger;
 	/** Claim ownership of the IRQ. */
-	irq_ownership_t (* claim)(void);
+	irq_ownership_t (* claim)(void *);
 	/** Handler for this IRQ and device. */
 	irq_handler_t handler;
-	/** Argument for the handler. */
-	void *arg;
+	/** Instance argument for the handler and the claim function. */
+	void *instance;
 
 	/** Clear interrupt routine. */
@@ -155,9 +155,9 @@
 } irq_t;
 
-extern void irq_init(count_t inrs, count_t chains);
-extern void irq_initialize(irq_t *irq);
-extern void irq_register(irq_t *irq);
-extern irq_t *irq_dispatch_and_lock(inr_t inr);
-extern irq_t *irq_find_and_lock(inr_t inr, devno_t devno);
+extern void irq_init(count_t, count_t);
+extern void irq_initialize(irq_t *);
+extern void irq_register(irq_t *);
+extern irq_t *irq_dispatch_and_lock(inr_t);
+extern irq_t *irq_find_and_lock(inr_t, devno_t);
 
 #endif
Index: kernel/generic/src/console/console.c
===================================================================
--- kernel/generic/src/console/console.c	(revision ee06f2a049baaea0e4c9fc693e7c3c34f3105202)
+++ kernel/generic/src/console/console.c	(revision 6cd9aa607e6515e17e369c7e888779416251db4d)
@@ -102,5 +102,5 @@
  * @return Always returns IRQ_DECLINE.
  */
-static irq_ownership_t klog_claim(void)
+static irq_ownership_t klog_claim(void *instance)
 {
 	return IRQ_DECLINE;
Index: kernel/generic/src/console/kconsole.c
===================================================================
--- kernel/generic/src/console/kconsole.c	(revision ee06f2a049baaea0e4c9fc693e7c3c34f3105202)
+++ kernel/generic/src/console/kconsole.c	(revision 6cd9aa607e6515e17e369c7e888779416251db4d)
@@ -104,5 +104,5 @@
  *
  */
-static irq_ownership_t kconsole_claim(void)
+static irq_ownership_t kconsole_claim(void *instance)
 {
 	return IRQ_DECLINE;
Index: kernel/generic/src/ddi/irq.c
===================================================================
--- kernel/generic/src/ddi/irq.c	(revision ee06f2a049baaea0e4c9fc693e7c3c34f3105202)
+++ kernel/generic/src/ddi/irq.c	(revision 6cd9aa607e6515e17e369c7e888779416251db4d)
@@ -40,5 +40,6 @@
  * This code is designed to support:
  * - multiple devices sharing single IRQ
- * - multiple IRQs per signle device
+ * - multiple IRQs per single device
+ * - multiple instances of the same device
  *
  *
@@ -145,5 +146,5 @@
 	irq->claim = NULL;
 	irq->handler = NULL;
-	irq->arg = NULL;
+	irq->instance = NULL;
 	irq->cir = NULL;
 	irq->cir_arg = NULL;
@@ -307,5 +308,6 @@
 	if (devno == -1) {
 		/* Invoked by irq_dispatch_and_lock(). */
-		rv = ((irq->inr == inr) && (irq->claim() == IRQ_ACCEPT));
+		rv = ((irq->inr == inr) &&
+		    (irq->claim(irq->instance) == IRQ_ACCEPT));
 	} else {
 		/* Invoked by irq_find_and_lock(). */
@@ -366,5 +368,5 @@
 	if (devno == -1) {
 		/* Invoked by irq_dispatch_and_lock() */
-		rv = (irq->claim() == IRQ_ACCEPT);
+		rv = (irq->claim(irq->instance) == IRQ_ACCEPT);
 	} else {
 		/* Invoked by irq_find_and_lock() */
