Index: uspace/drv/char/ns8250/ns8250.c
===================================================================
--- uspace/drv/char/ns8250/ns8250.c	(revision 53a309ecb415a7ff296b01590de2f9ff2e5714cd)
+++ uspace/drv/char/ns8250/ns8250.c	(revision 07cb0108f9a269b86e7dd3c0635e5f78a12c9a37)
@@ -780,5 +780,5 @@
 	
 	ns8250_read_from_device(ns);
-	irc_disable_interrupt(ns->irq);
+	irc_clear_interrupt(ns->irq);
 }
 
Index: uspace/lib/c/generic/irc.c
===================================================================
--- uspace/lib/c/generic/irc.c	(revision 53a309ecb415a7ff296b01590de2f9ff2e5714cd)
+++ uspace/lib/c/generic/irc.c	(revision 07cb0108f9a269b86e7dd3c0635e5f78a12c9a37)
@@ -61,4 +61,6 @@
 /** Enable interrupt.
  *
+ * Allow interrupt delivery.
+ *
  * @param irq	IRQ number
  */
@@ -80,10 +82,35 @@
 }
 
-
 /** Disable interrupt.
+ *
+ * Disallow interrupt delivery.
  *
  * @param irq	IRQ number
  */
 int irc_disable_interrupt(int irq)
+{
+	int rc;
+
+	if (irc_sess == NULL) {
+		rc = irc_init();
+		if (rc != EOK)
+			return rc;
+	}
+
+	async_exch_t *exch = async_exchange_begin(irc_sess);
+	rc = async_req_1_0(exch, IRC_DISABLE_INTERRUPT, irq);
+	async_exchange_end(exch);
+
+	return rc;
+}
+
+/** Clear interrupt.
+ *
+ * Clear/acknowledge interrupt in interrupt controller so that
+ * another interrupt can be delivered.
+ *
+ * @param irq	IRQ number
+ */
+int irc_clear_interrupt(int irq)
 {
 	int rc;
Index: uspace/lib/c/include/ipc/irc.h
===================================================================
--- uspace/lib/c/include/ipc/irc.h	(revision 53a309ecb415a7ff296b01590de2f9ff2e5714cd)
+++ uspace/lib/c/include/ipc/irc.h	(revision 07cb0108f9a269b86e7dd3c0635e5f78a12c9a37)
@@ -40,4 +40,5 @@
 typedef enum {
 	IRC_ENABLE_INTERRUPT = IPC_FIRST_USER_METHOD,
+	IRC_DISABLE_INTERRUPT,
 	IRC_CLEAR_INTERRUPT
 } irc_request_t;
Index: uspace/lib/c/include/irc.h
===================================================================
--- uspace/lib/c/include/irc.h	(revision 53a309ecb415a7ff296b01590de2f9ff2e5714cd)
+++ uspace/lib/c/include/irc.h	(revision 07cb0108f9a269b86e7dd3c0635e5f78a12c9a37)
@@ -38,4 +38,5 @@
 extern int irc_enable_interrupt(int);
 extern int irc_disable_interrupt(int);
+extern int irc_clear_interrupt(int);
 
 #endif
Index: uspace/srv/hw/irc/apic/apic.c
===================================================================
--- uspace/srv/hw/irc/apic/apic.c	(revision 53a309ecb415a7ff296b01590de2f9ff2e5714cd)
+++ uspace/srv/hw/irc/apic/apic.c	(revision 07cb0108f9a269b86e7dd3c0635e5f78a12c9a37)
@@ -185,4 +185,8 @@
 			async_answer_0(callid, apic_enable_irq(IPC_GET_ARG1(call)));
 			break;
+		case IRC_DISABLE_INTERRUPT:
+			/* XXX TODO */
+			async_answer_0(callid, EOK);
+			break;
 		case IRC_CLEAR_INTERRUPT:
 			/* Noop */
Index: uspace/srv/hw/irc/i8259/i8259.c
===================================================================
--- uspace/srv/hw/irc/i8259/i8259.c	(revision 53a309ecb415a7ff296b01590de2f9ff2e5714cd)
+++ uspace/srv/hw/irc/i8259/i8259.c	(revision 07cb0108f9a269b86e7dd3c0635e5f78a12c9a37)
@@ -120,4 +120,8 @@
 			async_answer_0(callid, pic_enable_irq(IPC_GET_ARG1(call)));
 			break;
+		case IRC_DISABLE_INTERRUPT:
+			/* XXX TODO */
+			async_answer_0(callid, EOK);
+			break;
 		case IRC_CLEAR_INTERRUPT:
 			/* Noop */
Index: uspace/srv/hw/irc/icp-ic/icp-ic.c
===================================================================
--- uspace/srv/hw/irc/icp-ic/icp-ic.c	(revision 53a309ecb415a7ff296b01590de2f9ff2e5714cd)
+++ uspace/srv/hw/irc/icp-ic/icp-ic.c	(revision 07cb0108f9a269b86e7dd3c0635e5f78a12c9a37)
@@ -101,4 +101,8 @@
 			    icpic_enable_irq(IPC_GET_ARG1(call)));
 			break;
+		case IRC_DISABLE_INTERRUPT:
+			/* XXX TODO */
+			async_answer_0(callid, EOK);
+			break;
 		case IRC_CLEAR_INTERRUPT:
 			/* Noop */
Index: uspace/srv/hw/irc/obio/obio.c
===================================================================
--- uspace/srv/hw/irc/obio/obio.c	(revision 53a309ecb415a7ff296b01590de2f9ff2e5714cd)
+++ uspace/srv/hw/irc/obio/obio.c	(revision 07cb0108f9a269b86e7dd3c0635e5f78a12c9a37)
@@ -98,4 +98,8 @@
 			async_answer_0(callid, EOK);
 			break;
+		case IRC_DISABLE_INTERRUPT:
+			/* XXX TODO */
+			async_answer_0(callid, EOK);
+			break;
 		case IRC_CLEAR_INTERRUPT:
 			inr = IPC_GET_ARG1(call);
