Index: kernel/arch/abs32le/Makefile.inc
===================================================================
--- kernel/arch/abs32le/Makefile.inc	(revision 8cd680c007c2a69075a82a05402c553e68bbac00)
+++ kernel/arch/abs32le/Makefile.inc	(revision 6eeb4a3e81a72dcdffeb1256ea248c75983514ab)
@@ -50,5 +50,4 @@
 	arch/$(KARCH)/src/userspace.c \
 	arch/$(KARCH)/src/cpu/cpu.c \
-	arch/$(KARCH)/src/ddi/ddi.c \
 	arch/$(KARCH)/src/smp/smp.c \
 	arch/$(KARCH)/src/smp/ipi.c \
Index: kernel/arch/abs32le/src/ddi/ddi.c
===================================================================
--- kernel/arch/abs32le/src/ddi/ddi.c	(revision 8cd680c007c2a69075a82a05402c553e68bbac00)
+++ 	(revision )
@@ -1,57 +1,0 @@
-/*
- * Copyright (c) 2010 Martin Decky
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup abs32leddi
- * @{
- */
-/** @file
- *  @brief DDI.
- */
-
-#include <ddi/ddi.h>
-#include <proc/task.h>
-#include <typedefs.h>
-
-/** Enable I/O space range for task.
- *
- */
-int ddi_iospace_enable_arch(task_t *task, uintptr_t ioaddr, size_t size)
-{
-	return 0;
-}
-
-/** 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 8cd680c007c2a69075a82a05402c553e68bbac00)
+++ kernel/arch/amd64/src/ddi/ddi.c	(revision 6eeb4a3e81a72dcdffeb1256ea248c75983514ab)
@@ -45,103 +45,4 @@
 #include <arch.h>
 #include <align.h>
-
-/** Enable 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_enable_arch(task_t *task, uintptr_t ioaddr, size_t size)
-{
-	size_t elements = ioaddr + size;
-	if (elements > IO_PORTS)
-		return ENOENT;
-	
-	if (task->arch.iomap.elements < elements) {
-		/*
-		 * The I/O permission bitmap is too small and needs to be grown.
-		 */
-		
-		void *store = malloc(bitmap_size(elements), FRAME_ATOMIC);
-		if (!store)
-			return ENOMEM;
-		
-		bitmap_t oldiomap;
-		bitmap_initialize(&oldiomap, task->arch.iomap.elements,
-		    task->arch.iomap.bits);
-		
-		bitmap_initialize(&task->arch.iomap, elements, store);
-		
-		/*
-		 * Mark the new range inaccessible.
-		 */
-		bitmap_set_range(&task->arch.iomap, oldiomap.elements,
-		    elements - oldiomap.elements);
-		
-		/*
-		 * In case there really existed smaller iomap,
-		 * copy its contents and deallocate it.
-		 */
-		if (oldiomap.bits) {
-			bitmap_copy(&task->arch.iomap, &oldiomap,
-			    oldiomap.elements);
-			
-			free(oldiomap.bits);
-		}
-	}
-	
-	/*
-	 * Enable the range and we are done.
-	 */
-	bitmap_clear_range(&task->arch.iomap, (size_t) ioaddr, size);
-	
-	/*
-	 * Increment I/O Permission bitmap generation counter.
-	 */
-	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;
-}
 
 /** Install I/O Permission bitmap.
Index: kernel/arch/arm32/Makefile.inc
===================================================================
--- kernel/arch/arm32/Makefile.inc	(revision 8cd680c007c2a69075a82a05402c553e68bbac00)
+++ kernel/arch/arm32/Makefile.inc	(revision 6eeb4a3e81a72dcdffeb1256ea248c75983514ab)
@@ -54,5 +54,4 @@
 	arch/$(KARCH)/src/dummy.S \
 	arch/$(KARCH)/src/cpu/cpu.c \
-	arch/$(KARCH)/src/ddi/ddi.c \
 	arch/$(KARCH)/src/interrupt.c \
 	arch/$(KARCH)/src/exception.c \
Index: kernel/arch/arm32/src/ddi/ddi.c
===================================================================
--- kernel/arch/arm32/src/ddi/ddi.c	(revision 8cd680c007c2a69075a82a05402c553e68bbac00)
+++ 	(revision )
@@ -1,71 +1,0 @@
-/*
- * Copyright (c) 2006 Jakub Jermar
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup arm32ddi
- * @{
- */
-/** @file
- *  @brief DDI.
- */
-
-#include <ddi/ddi.h>
-#include <proc/task.h>
-#include <typedefs.h>
-
-/** Enable 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 enabled I/O range.
- *
- * @return 0 on success or an error code from errno.h.
- */
-int ddi_iospace_enable_arch(task_t *task, uintptr_t ioaddr, size_t size)
-{
-	return 0;
-}
-
-/** 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 8cd680c007c2a69075a82a05402c553e68bbac00)
+++ kernel/arch/ia32/src/ddi/ddi.c	(revision 6eeb4a3e81a72dcdffeb1256ea248c75983514ab)
@@ -45,104 +45,4 @@
 #include <arch.h>
 #include <align.h>
-
-/** Enable 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 0 on success or an error code from errno.h.
- *
- */
-int ddi_iospace_enable_arch(task_t *task, uintptr_t ioaddr, size_t size)
-{
-	size_t elements = ioaddr + size;
-	if (elements > IO_PORTS)
-		return ENOENT;
-	
-	if (task->arch.iomap.elements < elements) {
-		/*
-		 * The I/O permission bitmap is too small and needs to be grown.
-		 */
-		
-		void *store = malloc(bitmap_size(elements), FRAME_ATOMIC);
-		if (!store)
-			return ENOMEM;
-		
-		bitmap_t oldiomap;
-		bitmap_initialize(&oldiomap, task->arch.iomap.elements,
-		    task->arch.iomap.bits);
-		
-		bitmap_initialize(&task->arch.iomap, elements, store);
-		
-		/*
-		 * Mark the new range inaccessible.
-		 */
-		bitmap_set_range(&task->arch.iomap, oldiomap.elements,
-		    elements - oldiomap.elements);
-		
-		/*
-		 * In case there really existed smaller iomap,
-		 * copy its contents and deallocate it.
-		 */
-		if (oldiomap.bits) {
-			bitmap_copy(&task->arch.iomap, &oldiomap,
-			    oldiomap.elements);
-			
-			free(oldiomap.bits);
-		}
-	}
-	
-	/*
-	 * Enable the range and we are done.
-	 */
-	bitmap_clear_range(&task->arch.iomap, (size_t) ioaddr, size);
-	
-	/*
-	 * Increment I/O Permission bitmap generation counter.
-	 */
-	task->arch.iomapver++;
-	
-	return 0;
-}
-
-/** 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/mips32/Makefile.inc
===================================================================
--- kernel/arch/mips32/Makefile.inc	(revision 8cd680c007c2a69075a82a05402c553e68bbac00)
+++ kernel/arch/mips32/Makefile.inc	(revision 6eeb4a3e81a72dcdffeb1256ea248c75983514ab)
@@ -70,5 +70,4 @@
 	arch/$(KARCH)/src/mm/as.c \
 	arch/$(KARCH)/src/fpu_context.c \
-	arch/$(KARCH)/src/ddi/ddi.c \
 	arch/$(KARCH)/src/smp/smp.c \
 	arch/$(KARCH)/src/machine_func.c
Index: kernel/arch/mips32/src/ddi/ddi.c
===================================================================
--- kernel/arch/mips32/src/ddi/ddi.c	(revision 8cd680c007c2a69075a82a05402c553e68bbac00)
+++ 	(revision )
@@ -1,73 +1,0 @@
-/*
- * Copyright (c) 2006 Jakub Jermar
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup mips32ddi
- * @{
- */
-/** @file
- */
-
-#include <ddi/ddi.h>
-#include <proc/task.h>
-#include <typedefs.h>
-#include <security/cap.h>
-#include <arch.h>
-#include <arch/cp0.h>
-
-/** Enable I/O space range for task.
- *
- * Interrupts are disabled and task is locked.
- *
- * @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.
- */
-int ddi_iospace_enable_arch(task_t *task, uintptr_t ioaddr, size_t size)
-{
-	return 0;
-}
-
-/** 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/mips64/Makefile.inc
===================================================================
--- kernel/arch/mips64/Makefile.inc	(revision 8cd680c007c2a69075a82a05402c553e68bbac00)
+++ kernel/arch/mips64/Makefile.inc	(revision 6eeb4a3e81a72dcdffeb1256ea248c75983514ab)
@@ -60,5 +60,4 @@
 	arch/$(KARCH)/src/mm/as.c \
 	arch/$(KARCH)/src/fpu_context.c \
-	arch/$(KARCH)/src/ddi/ddi.c \
 	arch/$(KARCH)/src/smp/dorder.c \
 	arch/$(KARCH)/src/smp/smp.c
Index: kernel/arch/mips64/src/ddi
===================================================================
--- kernel/arch/mips64/src/ddi	(revision 8cd680c007c2a69075a82a05402c553e68bbac00)
+++ 	(revision )
@@ -1,1 +1,0 @@
-../../mips32/src/ddi
Index: kernel/arch/ppc32/Makefile.inc
===================================================================
--- kernel/arch/ppc32/Makefile.inc	(revision 8cd680c007c2a69075a82a05402c553e68bbac00)
+++ kernel/arch/ppc32/Makefile.inc	(revision 6eeb4a3e81a72dcdffeb1256ea248c75983514ab)
@@ -51,5 +51,4 @@
 	arch/$(KARCH)/src/cpu/cpu.c \
 	arch/$(KARCH)/src/proc/scheduler.c \
-	arch/$(KARCH)/src/ddi/ddi.c \
 	arch/$(KARCH)/src/mm/km.c \
 	arch/$(KARCH)/src/mm/as.c \
Index: kernel/arch/ppc32/src/ddi/ddi.c
===================================================================
--- kernel/arch/ppc32/src/ddi/ddi.c	(revision 8cd680c007c2a69075a82a05402c553e68bbac00)
+++ 	(revision )
@@ -1,72 +1,0 @@
-/*
- * Copyright (c) 2006 Jakub Jermar
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup ppc32ddi
- * @{
- */
-/** @file
- */
-
-#include <ddi/ddi.h>
-#include <proc/task.h>
-#include <typedefs.h>
-
-/** Enable 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 0 on success or an error code from errno.h.
- *
- */
-int ddi_iospace_enable_arch(task_t *task, uintptr_t ioaddr, size_t size)
-{
-	return 0;
-}
-
-/** 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/Makefile.inc
===================================================================
--- kernel/arch/sparc32/Makefile.inc	(revision 8cd680c007c2a69075a82a05402c553e68bbac00)
+++ kernel/arch/sparc32/Makefile.inc	(revision 6eeb4a3e81a72dcdffeb1256ea248c75983514ab)
@@ -45,5 +45,4 @@
 	arch/$(KARCH)/src/exception.c \
 	arch/$(KARCH)/src/cpu/cpu.c \
-	arch/$(KARCH)/src/ddi/ddi.c \
 	arch/$(KARCH)/src/smp/smp.c \
 	arch/$(KARCH)/src/smp/ipi.c \
Index: kernel/arch/sparc32/src/ddi/ddi.c
===================================================================
--- kernel/arch/sparc32/src/ddi/ddi.c	(revision 8cd680c007c2a69075a82a05402c553e68bbac00)
+++ 	(revision )
@@ -1,57 +1,0 @@
-/*
- * Copyright (c) 2010 Martin Decky
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup sparc32ddi
- * @{
- */
-/** @file
- *  @brief DDI.
- */
-
-#include <ddi/ddi.h>
-#include <proc/task.h>
-#include <typedefs.h>
-
-/** Enable I/O space range for task.
- *
- */
-int ddi_iospace_enable_arch(task_t *task, uintptr_t ioaddr, size_t size)
-{
-	return 0;
-}
-
-/** 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/Makefile.inc
===================================================================
--- kernel/arch/sparc64/Makefile.inc	(revision 8cd680c007c2a69075a82a05402c553e68bbac00)
+++ kernel/arch/sparc64/Makefile.inc	(revision 6eeb4a3e81a72dcdffeb1256ea248c75983514ab)
@@ -81,5 +81,4 @@
 	arch/$(KARCH)/src/trap/exception.c \
 	arch/$(KARCH)/src/trap/interrupt.c \
-	arch/$(KARCH)/src/ddi/ddi.c \
 	arch/$(KARCH)/src/drivers/tick.c \
 	arch/$(KARCH)/src/drivers/kbd.c \
Index: kernel/arch/sparc64/src/ddi/ddi.c
===================================================================
--- kernel/arch/sparc64/src/ddi/ddi.c	(revision 8cd680c007c2a69075a82a05402c553e68bbac00)
+++ 	(revision )
@@ -1,70 +1,0 @@
-/*
- * Copyright (c) 2006 Jakub Jermar
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup sparc64ddi
- * @{
- */
-/** @file
- */
-
-#include <ddi/ddi.h>
-#include <proc/task.h>
-#include <typedefs.h>
-
-/** Enable 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_enable_arch(task_t *task, uintptr_t ioaddr, size_t size)
-{
-	return 0;
-}
-
-/** 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;
-}
-
-/** @}
- */
Index: kernel/genarch/Makefile.inc
===================================================================
--- kernel/genarch/Makefile.inc	(revision 8cd680c007c2a69075a82a05402c553e68bbac00)
+++ kernel/genarch/Makefile.inc	(revision 6eeb4a3e81a72dcdffeb1256ea248c75983514ab)
@@ -181,2 +181,13 @@
 		genarch/src/drivers/ega/ega.c
 endif
+
+ifeq ($(CONFIG_IOMAP_BITMAP), y)
+	GENARCH_SOURCES += \
+		genarch/src/ddi/ddi-bitmap.c
+endif
+
+ifeq ($(CONFIG_IOMAP_DUMMY), y)
+	GENARCH_SOURCES += \
+		genarch/src/ddi/ddi-dummy.c
+endif
+
Index: kernel/genarch/src/ddi/ddi-bitmap.c
===================================================================
--- kernel/genarch/src/ddi/ddi-bitmap.c	(revision 6eeb4a3e81a72dcdffeb1256ea248c75983514ab)
+++ kernel/genarch/src/ddi/ddi-bitmap.c	(revision 6eeb4a3e81a72dcdffeb1256ea248c75983514ab)
@@ -0,0 +1,148 @@
+/*
+ * Copyright (c) 2006 Jakub Jermar
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup amd64ddi
+ * @{
+ */
+/** @file
+ */
+
+#include <ddi/ddi.h>
+#include <arch/ddi/ddi.h>
+#include <proc/task.h>
+#include <typedefs.h>
+#include <adt/bitmap.h>
+#include <mm/slab.h>
+#include <arch/pm.h>
+#include <errno.h>
+#include <arch/cpu.h>
+#include <cpu.h>
+#include <arch.h>
+#include <align.h>
+
+/** Enable 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_enable_arch(task_t *task, uintptr_t ioaddr, size_t size)
+{
+	size_t elements = ioaddr + size;
+	if (elements > IO_PORTS)
+		return ENOENT;
+	
+	if (task->arch.iomap.elements < elements) {
+		/*
+		 * The I/O permission bitmap is too small and needs to be grown.
+		 */
+		
+		void *store = malloc(bitmap_size(elements), FRAME_ATOMIC);
+		if (!store)
+			return ENOMEM;
+		
+		bitmap_t oldiomap;
+		bitmap_initialize(&oldiomap, task->arch.iomap.elements,
+		    task->arch.iomap.bits);
+		
+		bitmap_initialize(&task->arch.iomap, elements, store);
+		
+		/*
+		 * Mark the new range inaccessible.
+		 */
+		bitmap_set_range(&task->arch.iomap, oldiomap.elements,
+		    elements - oldiomap.elements);
+		
+		/*
+		 * In case there really existed smaller iomap,
+		 * copy its contents and deallocate it.
+		 */
+		if (oldiomap.bits) {
+			bitmap_copy(&task->arch.iomap, &oldiomap,
+			    oldiomap.elements);
+			
+			free(oldiomap.bits);
+		}
+	}
+	
+	/*
+	 * Enable the range and we are done.
+	 */
+	bitmap_clear_range(&task->arch.iomap, (size_t) ioaddr, size);
+	
+	/*
+	 * Increment I/O Permission bitmap generation counter.
+	 */
+	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/genarch/src/ddi/ddi-dummy.c
===================================================================
--- kernel/genarch/src/ddi/ddi-dummy.c	(revision 6eeb4a3e81a72dcdffeb1256ea248c75983514ab)
+++ kernel/genarch/src/ddi/ddi-dummy.c	(revision 6eeb4a3e81a72dcdffeb1256ea248c75983514ab)
@@ -0,0 +1,71 @@
+/*
+ * Copyright (c) 2006 Jakub Jermar
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup genarch 
+ * @{
+ */
+/** @file
+ *  @brief DDI.
+ */
+
+#include <ddi/ddi.h>
+#include <proc/task.h>
+#include <typedefs.h>
+
+/** Enable 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_enable_arch(task_t *task, uintptr_t ioaddr, size_t size)
+{
+	return 0;
+}
+
+/** 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;
+}
+
+/** @}
+ */
