Index: kernel/arch/abs32le/src/ddi/ddi.c
===================================================================
--- kernel/arch/abs32le/src/ddi/ddi.c	(revision 17af882f644f6d312e05f3965cef1fececb99062)
+++ kernel/arch/abs32le/src/ddi/ddi.c	(revision 8cd680c007c2a69075a82a05402c553e68bbac00)
@@ -46,4 +46,12 @@
 }
 
+/** Disable I/O space range for task.
+ *
+ */
+int ddi_iospace_disable_arch(task_t *task, uintptr_t ioaddr, size_t size)
+{
+	return 0;
+}
+
 /** @}
  */
Index: kernel/arch/amd64/src/ddi/ddi.c
===================================================================
--- kernel/arch/amd64/src/ddi/ddi.c	(revision 17af882f644f6d312e05f3965cef1fececb99062)
+++ kernel/arch/amd64/src/ddi/ddi.c	(revision 8cd680c007c2a69075a82a05402c553e68bbac00)
@@ -51,8 +51,8 @@
  *
  * @param task   Task.
- * @param ioaddr Startign I/O space address.
+ * @param ioaddr Starting I/O space address.
  * @param size   Size of the enabled I/O range.
  *
- * @return 0 on success or an error code from errno.h.
+ * @return EOK on success or an error code from errno.h.
  *
  */
@@ -106,4 +106,40 @@
 	task->arch.iomapver++;
 	
+	return EOK;
+}
+
+/** Disable I/O space range for task.
+ *
+ * Interrupts are disabled and task is locked.
+ *
+ * @param task   Task.
+ * @param ioaddr Starting I/O space address.
+ * @param size   Size of the enabled I/O range.
+ *
+ * @return EOK on success or an error code from errno.h.
+ *
+ */
+int ddi_iospace_disable_arch(task_t *task, uintptr_t ioaddr, size_t size)
+{
+	size_t elements = ioaddr + size;
+	if (elements > IO_PORTS)
+		return ENOENT;
+	
+	if (ioaddr >= task->arch.iomap.elements)
+		return EINVAL;	
+
+	if (task->arch.iomap.elements < elements)
+		size -= elements - task->arch.iomap.elements;
+
+	/*
+	 * Disable the range.
+	 */
+	bitmap_set_range(&task->arch.iomap, (size_t) ioaddr, size);
+	
+	/*
+	 * Increment I/O Permission bitmap generation counter.
+	 */
+	task->arch.iomapver++;
+	
 	return 0;
 }
Index: kernel/arch/arm32/src/ddi/ddi.c
===================================================================
--- kernel/arch/arm32/src/ddi/ddi.c	(revision 17af882f644f6d312e05f3965cef1fececb99062)
+++ kernel/arch/arm32/src/ddi/ddi.c	(revision 8cd680c007c2a69075a82a05402c553e68bbac00)
@@ -53,4 +53,19 @@
 }
 
+/** Disable I/O space range for task.
+ *
+ * Interrupts are disabled and task is locked.
+ *
+ * @param task Task.
+ * @param ioaddr Startign I/O space address.
+ * @param size Size of the disabled I/O range.
+ *
+ * @return 0 on success or an error code from errno.h.
+ */
+int ddi_iospace_disable_arch(task_t *task, uintptr_t ioaddr, size_t size)
+{
+	return 0;
+}
+
 /** @}
  */
Index: kernel/arch/ia32/src/ddi/ddi.c
===================================================================
--- kernel/arch/ia32/src/ddi/ddi.c	(revision 17af882f644f6d312e05f3965cef1fececb99062)
+++ kernel/arch/ia32/src/ddi/ddi.c	(revision 8cd680c007c2a69075a82a05402c553e68bbac00)
@@ -51,5 +51,5 @@
  *
  * @param task   Task.
- * @param ioaddr Startign I/O space address.
+ * @param ioaddr Starting I/O space address.
  * @param size   Size of the enabled I/O range.
  *
@@ -109,4 +109,41 @@
 }
 
+/** Disable I/O space range for task.
+ *
+ * Interrupts are disabled and task is locked.
+ *
+ * @param task   Task.
+ * @param ioaddr Starting I/O space address.
+ * @param size   Size of the enabled I/O range.
+ *
+ * @return EOK on success or an error code from errno.h.
+ *
+ */
+int ddi_iospace_disable_arch(task_t *task, uintptr_t ioaddr, size_t size)
+{
+	size_t elements = ioaddr + size;
+	if (elements > IO_PORTS)
+		return ENOENT;
+	
+	if (ioaddr >= task->arch.iomap.elements)
+		return EINVAL;	
+
+	if (task->arch.iomap.elements < elements)
+		size -= elements - task->arch.iomap.elements;
+
+	/*
+	 * Disable the range.
+	 */
+	bitmap_set_range(&task->arch.iomap, (size_t) ioaddr, size);
+	
+	/*
+	 * Increment I/O Permission bitmap generation counter.
+	 */
+	task->arch.iomapver++;
+	
+	return 0;
+}
+
+
 /** Install I/O Permission bitmap.
  *
Index: kernel/arch/ia64/src/ddi/ddi.c
===================================================================
--- kernel/arch/ia64/src/ddi/ddi.c	(revision 17af882f644f6d312e05f3965cef1fececb99062)
+++ kernel/arch/ia64/src/ddi/ddi.c	(revision 8cd680c007c2a69075a82a05402c553e68bbac00)
@@ -47,9 +47,9 @@
  * Interrupts are disabled and task is locked.
  *
- * @param task		Task.
- * @param ioaddr	Starting I/O space address.
- * @param size		Size of the enabled I/O range.
+ * @param task	 Task.
+ * @param ioaddr Starting I/O space address.
+ * @param size	 Size of the enabled I/O range.
  *
- * @return 0 on success or an error code from errno.h.
+ * @return EOK on success or an error code from errno.h.
  */
 int ddi_iospace_enable_arch(task_t *task, uintptr_t ioaddr, size_t size)
@@ -72,5 +72,27 @@
 	bitmap_set_range(task->arch.iomap, iopage, size / 4);
 	
-	return 0;
+	return EOK;
+}
+
+/** Disable I/O space range for task.
+ *
+ * Interrupts are disabled and task is locked.
+ *
+ * @param task	 Task.
+ * @param ioaddr Starting I/O space address.
+ * @param size	 Size of the disabled I/O range.
+ *
+ * @return EOK on success or an error code from errno.h.
+ */
+int ddi_iospace_disable_arch(task_t *task, uintptr_t ioaddr, size_t size)
+{
+	if (!task->arch.iomap)
+		return EINVAL;
+
+	uintptr_t iopage = ioaddr / PORTS_PER_PAGE;
+	size = ALIGN_UP(size + ioaddr - 4 * iopage, PORTS_PER_PAGE);
+	bitmap_clear_range(task->arch.iomap, iopage, size / 4);
+	
+	return EOK;
 }
 
Index: kernel/arch/mips32/src/ddi/ddi.c
===================================================================
--- kernel/arch/mips32/src/ddi/ddi.c	(revision 17af882f644f6d312e05f3965cef1fececb99062)
+++ kernel/arch/mips32/src/ddi/ddi.c	(revision 8cd680c007c2a69075a82a05402c553e68bbac00)
@@ -44,7 +44,7 @@
  * Interrupts are disabled and task is locked.
  *
- * @param task Task.
- * @param ioaddr Startign I/O space address.
- * @param size Size of the enabled I/O range.
+ * @param task   Task.
+ * @param ioaddr Startinig I/O space address.
+ * @param size   Size of the enabled I/O range.
  *
  * @return 0 on success or an error code from errno.h.
@@ -55,4 +55,19 @@
 }
 
+/** Disable I/O space range for task.
+ *
+ * Interrupts are disabled and task is locked.
+ *
+ * @param task   Task.
+ * @param ioaddr Starting I/O space address.
+ * @param size   Size of the disabled I/O range.
+ *
+ * @return 0 on success or an error code from errno.h.
+ */
+int ddi_iospace_disable_arch(task_t *task, uintptr_t ioaddr, size_t size)
+{
+	return 0;
+}
+
 /** @}
  */
Index: kernel/arch/ppc32/src/ddi/ddi.c
===================================================================
--- kernel/arch/ppc32/src/ddi/ddi.c	(revision 17af882f644f6d312e05f3965cef1fececb99062)
+++ kernel/arch/ppc32/src/ddi/ddi.c	(revision 8cd680c007c2a69075a82a05402c553e68bbac00)
@@ -41,7 +41,7 @@
  * Interrupts are disabled and task is locked.
  *
- * @param task Task.
- * @param ioaddr Startign I/O space address.
- * @param size Size of the enabled I/O range.
+ * @param task   Task.
+ * @param ioaddr Starting I/O space address.
+ * @param size   Size of the enabled I/O range.
  *
  * @return 0 on success or an error code from errno.h.
@@ -53,4 +53,20 @@
 }
 
+/** Disable I/O space range for task.
+ *
+ * Interrupts are disabled and task is locked.
+ *
+ * @param task   Task.
+ * @param ioaddr Starting I/O space address.
+ * @param size   Size of the disabled I/O range.
+ *
+ * @return 0 on success or an error code from errno.h.
+ *
+ */
+int ddi_iospace_disable_arch(task_t *task, uintptr_t ioaddr, size_t size)
+{
+	return 0;
+}
+
 /** @}
  */
Index: kernel/arch/sparc32/src/ddi/ddi.c
===================================================================
--- kernel/arch/sparc32/src/ddi/ddi.c	(revision 17af882f644f6d312e05f3965cef1fececb99062)
+++ kernel/arch/sparc32/src/ddi/ddi.c	(revision 8cd680c007c2a69075a82a05402c553e68bbac00)
@@ -46,4 +46,12 @@
 }
 
+/** Disable I/O space range for task.
+ *
+ */
+int ddi_iospace_disable_arch(task_t *task, uintptr_t ioaddr, size_t size)
+{
+	return 0;
+}
+
 /** @}
  */
Index: kernel/arch/sparc64/src/ddi/ddi.c
===================================================================
--- kernel/arch/sparc64/src/ddi/ddi.c	(revision 17af882f644f6d312e05f3965cef1fececb99062)
+++ kernel/arch/sparc64/src/ddi/ddi.c	(revision 8cd680c007c2a69075a82a05402c553e68bbac00)
@@ -41,9 +41,9 @@
  * Interrupts are disabled and task is locked.
  *
- * @param task Task.
+ * @param task   Task.
  * @param ioaddr Starting I/O space address.
- * @param size Size of the enabled I/O range.
+ * @param size   Size of the enabled I/O range.
  *
- * @return 0 on success or an error code from errno.h.
+ * @return EOK on success or an error code from errno.h.
  */
 int ddi_iospace_enable_arch(task_t *task, uintptr_t ioaddr, size_t size)
@@ -52,4 +52,19 @@
 }
 
+/** Disable I/O space range for task.
+ *
+ * Interrupts are disabled and task is locked.
+ *
+ * @param task   Task.
+ * @param ioaddr Starting I/O space address.
+ * @param size   Size of the disabled I/O range.
+ *
+ * @return EOK on success or an error code from errno.h.
+ */
+int ddi_iospace_disable_arch(task_t *task, uintptr_t ioaddr, size_t size)
+{
+	return 0;
+}
+
 /** @}
  */
