Index: kernel/generic/include/ddi/ddi.h
===================================================================
--- kernel/generic/include/ddi/ddi.h	(revision 5af21c54a30301453f80f290f919569942bc2d67)
+++ kernel/generic/include/ddi/ddi.h	(revision 953bc1efafe8161834d87acae8f871ef640154a5)
@@ -56,4 +56,5 @@
 extern unative_t sys_iospace_enable(ddi_ioarg_t *uspace_io_arg);
 extern unative_t sys_preempt_control(int enable);
+extern unative_t sys_interrupt_enable(int irq, int enable);
 
 /*
@@ -62,4 +63,5 @@
 extern int ddi_iospace_enable_arch(task_t *task, uintptr_t ioaddr, size_t size);
 
+
 #endif
 
Index: kernel/generic/include/syscall/syscall.h
===================================================================
--- kernel/generic/include/syscall/syscall.h	(revision 5af21c54a30301453f80f290f919569942bc2d67)
+++ kernel/generic/include/syscall/syscall.h	(revision 953bc1efafe8161834d87acae8f871ef640154a5)
@@ -81,4 +81,5 @@
 	SYS_IOSPACE_ENABLE,
 	SYS_PREEMPT_CONTROL,
+	SYS_INTERRUPT_ENABLE,
 	
 	SYS_SYSINFO_VALID,
Index: kernel/generic/src/ddi/ddi.c
===================================================================
--- kernel/generic/src/ddi/ddi.c	(revision 5af21c54a30301453f80f290f919569942bc2d67)
+++ kernel/generic/src/ddi/ddi.c	(revision 953bc1efafe8161834d87acae8f871ef640154a5)
@@ -287,4 +287,31 @@
 }
 
+/** Disable or enable specified interrupts.
+ * 
+ * @param irq the interrupt to be enabled/disabled.
+ * @param enable if true enable the interrupt, disable otherwise.
+ * 
+ * @retutn Zero on success, error code otherwise.
+ */
+unative_t sys_interrupt_enable(int irq, int enable)
+{	
+	cap_t task_cap = cap_get(TASK);
+	if (!(task_cap & CAP_PREEMPT_CONTROL) || !(task_cap & CAP_IRQ_REG))
+		return EPERM;
+		
+	if (irq < 0 || irq > 16) {
+		return EINVAL;
+	}
+	
+	uint16_t irq_mask = (uint16_t)(1 << irq);
+	if (enable) {
+		trap_virtual_enable_irqs(irq_mask);
+	} else {
+		trap_virtual_disable_irqs(irq_mask);
+	}
+	
+	return 0;	
+}
+
 /** @}
  */
Index: kernel/generic/src/syscall/syscall.c
===================================================================
--- kernel/generic/src/syscall/syscall.c	(revision 5af21c54a30301453f80f290f919569942bc2d67)
+++ kernel/generic/src/syscall/syscall.c	(revision 953bc1efafe8161834d87acae8f871ef640154a5)
@@ -151,4 +151,5 @@
 	(syshandler_t) sys_iospace_enable,
 	(syshandler_t) sys_preempt_control,
+	(syshandler_t) sys_interrupt_enable,
 	
 	/* Sysinfo syscalls */
Index: uspace/app/trace/syscalls.c
===================================================================
--- uspace/app/trace/syscalls.c	(revision 5af21c54a30301453f80f290f919569942bc2d67)
+++ uspace/app/trace/syscalls.c	(revision 953bc1efafe8161834d87acae8f871ef640154a5)
@@ -74,4 +74,5 @@
     [SYS_IOSPACE_ENABLE] = { "iospace_enable",		1,	V_ERRNO },
     [SYS_PREEMPT_CONTROL] = { "preempt_control",	1,	V_ERRNO },
+	[SYS_INTERRUPT_ENABLE] = { "interrupt_enable",	2,	V_ERRNO },
 
     [SYS_SYSINFO_VALID] = { "sysinfo_valid",		2,	V_HASH },
Index: uspace/lib/libc/generic/ddi.c
===================================================================
--- uspace/lib/libc/generic/ddi.c	(revision 5af21c54a30301453f80f290f919569942bc2d67)
+++ uspace/lib/libc/generic/ddi.c	(revision 953bc1efafe8161834d87acae8f871ef640154a5)
@@ -105,4 +105,16 @@
 }
 
+/** Enable/disable interrupt.
+ * 
+ * @param irq the interrupt.
+ * @param enable 1 - enable interrupt, 0 - disable interrupt.
+ * 
+ * @return Zero on success, negative error code otherwise. 
+ */
+int interrupt_enable(int irq, int enable) 
+{
+	return __SYSCALL2(SYS_INTERRUPT_ENABLE, (sysarg_t) irq, (sysarg_t) enable);
+}
+
 /** Enable PIO for specified I/O range.
  *
Index: uspace/lib/libc/include/ddi.h
===================================================================
--- uspace/lib/libc/include/ddi.h	(revision 5af21c54a30301453f80f290f919569942bc2d67)
+++ uspace/lib/libc/include/ddi.h	(revision 953bc1efafe8161834d87acae8f871ef640154a5)
@@ -43,4 +43,5 @@
 extern int preemption_control(int);
 extern int pio_enable(void *, size_t, void **);
+extern int interrupt_enable(int, int);
 
 #endif
