Changeset 6eeb4a3 in mainline
- Timestamp:
- 2014-08-18T21:18:27Z (10 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- f93ba6d
- Parents:
- 8cd680c
- Files:
-
- 5 deleted
- 11 edited
- 2 moved
Legend:
- Unmodified
- Added
- Removed
-
HelenOS.config
r8cd680c r6eeb4a3 367 367 ! [PLATFORM=amd64] CONFIG_FENCES_P4 (y) 368 368 369 % IOMAP bitmap support 370 ! [PLATFORM=ia32|PLATFORM=amd64] CONFIG_IOMAP_BITMAP (y) 371 372 % IOMAP dummy support 373 ! [PLATFORM=abs32le|PLATFORM=arm32|PLATFORM=mips32|PLATFORM=mips64|PLATFORM=ppc32|PLATFORM=sparc32|PLATFORM=sparc64] CONFIG_IOMAP_DUMMY (y) 374 369 375 % ACPI support 370 376 ! [PLATFORM=ia32|PLATFORM=amd64] CONFIG_ACPI (y) -
kernel/arch/abs32le/Makefile.inc
r8cd680c r6eeb4a3 50 50 arch/$(KARCH)/src/userspace.c \ 51 51 arch/$(KARCH)/src/cpu/cpu.c \ 52 arch/$(KARCH)/src/ddi/ddi.c \53 52 arch/$(KARCH)/src/smp/smp.c \ 54 53 arch/$(KARCH)/src/smp/ipi.c \ -
kernel/arch/amd64/src/ddi/ddi.c
r8cd680c r6eeb4a3 45 45 #include <arch.h> 46 46 #include <align.h> 47 48 /** Enable I/O space range for task.49 *50 * Interrupts are disabled and task is locked.51 *52 * @param task Task.53 * @param ioaddr Starting I/O space address.54 * @param size Size of the enabled I/O range.55 *56 * @return EOK on success or an error code from errno.h.57 *58 */59 int ddi_iospace_enable_arch(task_t *task, uintptr_t ioaddr, size_t size)60 {61 size_t elements = ioaddr + size;62 if (elements > IO_PORTS)63 return ENOENT;64 65 if (task->arch.iomap.elements < elements) {66 /*67 * The I/O permission bitmap is too small and needs to be grown.68 */69 70 void *store = malloc(bitmap_size(elements), FRAME_ATOMIC);71 if (!store)72 return ENOMEM;73 74 bitmap_t oldiomap;75 bitmap_initialize(&oldiomap, task->arch.iomap.elements,76 task->arch.iomap.bits);77 78 bitmap_initialize(&task->arch.iomap, elements, store);79 80 /*81 * Mark the new range inaccessible.82 */83 bitmap_set_range(&task->arch.iomap, oldiomap.elements,84 elements - oldiomap.elements);85 86 /*87 * In case there really existed smaller iomap,88 * copy its contents and deallocate it.89 */90 if (oldiomap.bits) {91 bitmap_copy(&task->arch.iomap, &oldiomap,92 oldiomap.elements);93 94 free(oldiomap.bits);95 }96 }97 98 /*99 * Enable the range and we are done.100 */101 bitmap_clear_range(&task->arch.iomap, (size_t) ioaddr, size);102 103 /*104 * Increment I/O Permission bitmap generation counter.105 */106 task->arch.iomapver++;107 108 return EOK;109 }110 111 /** Disable I/O space range for task.112 *113 * Interrupts are disabled and task is locked.114 *115 * @param task Task.116 * @param ioaddr Starting I/O space address.117 * @param size Size of the enabled I/O range.118 *119 * @return EOK on success or an error code from errno.h.120 *121 */122 int ddi_iospace_disable_arch(task_t *task, uintptr_t ioaddr, size_t size)123 {124 size_t elements = ioaddr + size;125 if (elements > IO_PORTS)126 return ENOENT;127 128 if (ioaddr >= task->arch.iomap.elements)129 return EINVAL;130 131 if (task->arch.iomap.elements < elements)132 size -= elements - task->arch.iomap.elements;133 134 /*135 * Disable the range.136 */137 bitmap_set_range(&task->arch.iomap, (size_t) ioaddr, size);138 139 /*140 * Increment I/O Permission bitmap generation counter.141 */142 task->arch.iomapver++;143 144 return 0;145 }146 47 147 48 /** Install I/O Permission bitmap. -
kernel/arch/arm32/Makefile.inc
r8cd680c r6eeb4a3 54 54 arch/$(KARCH)/src/dummy.S \ 55 55 arch/$(KARCH)/src/cpu/cpu.c \ 56 arch/$(KARCH)/src/ddi/ddi.c \57 56 arch/$(KARCH)/src/interrupt.c \ 58 57 arch/$(KARCH)/src/exception.c \ -
kernel/arch/ia32/src/ddi/ddi.c
r8cd680c r6eeb4a3 45 45 #include <arch.h> 46 46 #include <align.h> 47 48 /** Enable I/O space range for task.49 *50 * Interrupts are disabled and task is locked.51 *52 * @param task Task.53 * @param ioaddr Starting I/O space address.54 * @param size Size of the enabled I/O range.55 *56 * @return 0 on success or an error code from errno.h.57 *58 */59 int ddi_iospace_enable_arch(task_t *task, uintptr_t ioaddr, size_t size)60 {61 size_t elements = ioaddr + size;62 if (elements > IO_PORTS)63 return ENOENT;64 65 if (task->arch.iomap.elements < elements) {66 /*67 * The I/O permission bitmap is too small and needs to be grown.68 */69 70 void *store = malloc(bitmap_size(elements), FRAME_ATOMIC);71 if (!store)72 return ENOMEM;73 74 bitmap_t oldiomap;75 bitmap_initialize(&oldiomap, task->arch.iomap.elements,76 task->arch.iomap.bits);77 78 bitmap_initialize(&task->arch.iomap, elements, store);79 80 /*81 * Mark the new range inaccessible.82 */83 bitmap_set_range(&task->arch.iomap, oldiomap.elements,84 elements - oldiomap.elements);85 86 /*87 * In case there really existed smaller iomap,88 * copy its contents and deallocate it.89 */90 if (oldiomap.bits) {91 bitmap_copy(&task->arch.iomap, &oldiomap,92 oldiomap.elements);93 94 free(oldiomap.bits);95 }96 }97 98 /*99 * Enable the range and we are done.100 */101 bitmap_clear_range(&task->arch.iomap, (size_t) ioaddr, size);102 103 /*104 * Increment I/O Permission bitmap generation counter.105 */106 task->arch.iomapver++;107 108 return 0;109 }110 111 /** Disable I/O space range for task.112 *113 * Interrupts are disabled and task is locked.114 *115 * @param task Task.116 * @param ioaddr Starting I/O space address.117 * @param size Size of the enabled I/O range.118 *119 * @return EOK on success or an error code from errno.h.120 *121 */122 int ddi_iospace_disable_arch(task_t *task, uintptr_t ioaddr, size_t size)123 {124 size_t elements = ioaddr + size;125 if (elements > IO_PORTS)126 return ENOENT;127 128 if (ioaddr >= task->arch.iomap.elements)129 return EINVAL;130 131 if (task->arch.iomap.elements < elements)132 size -= elements - task->arch.iomap.elements;133 134 /*135 * Disable the range.136 */137 bitmap_set_range(&task->arch.iomap, (size_t) ioaddr, size);138 139 /*140 * Increment I/O Permission bitmap generation counter.141 */142 task->arch.iomapver++;143 144 return 0;145 }146 147 47 148 48 /** Install I/O Permission bitmap. -
kernel/arch/mips32/Makefile.inc
r8cd680c r6eeb4a3 70 70 arch/$(KARCH)/src/mm/as.c \ 71 71 arch/$(KARCH)/src/fpu_context.c \ 72 arch/$(KARCH)/src/ddi/ddi.c \73 72 arch/$(KARCH)/src/smp/smp.c \ 74 73 arch/$(KARCH)/src/machine_func.c -
kernel/arch/mips64/Makefile.inc
r8cd680c r6eeb4a3 60 60 arch/$(KARCH)/src/mm/as.c \ 61 61 arch/$(KARCH)/src/fpu_context.c \ 62 arch/$(KARCH)/src/ddi/ddi.c \63 62 arch/$(KARCH)/src/smp/dorder.c \ 64 63 arch/$(KARCH)/src/smp/smp.c -
kernel/arch/ppc32/Makefile.inc
r8cd680c r6eeb4a3 51 51 arch/$(KARCH)/src/cpu/cpu.c \ 52 52 arch/$(KARCH)/src/proc/scheduler.c \ 53 arch/$(KARCH)/src/ddi/ddi.c \54 53 arch/$(KARCH)/src/mm/km.c \ 55 54 arch/$(KARCH)/src/mm/as.c \ -
kernel/arch/sparc32/Makefile.inc
r8cd680c r6eeb4a3 45 45 arch/$(KARCH)/src/exception.c \ 46 46 arch/$(KARCH)/src/cpu/cpu.c \ 47 arch/$(KARCH)/src/ddi/ddi.c \48 47 arch/$(KARCH)/src/smp/smp.c \ 49 48 arch/$(KARCH)/src/smp/ipi.c \ -
kernel/arch/sparc64/Makefile.inc
r8cd680c r6eeb4a3 81 81 arch/$(KARCH)/src/trap/exception.c \ 82 82 arch/$(KARCH)/src/trap/interrupt.c \ 83 arch/$(KARCH)/src/ddi/ddi.c \84 83 arch/$(KARCH)/src/drivers/tick.c \ 85 84 arch/$(KARCH)/src/drivers/kbd.c \ -
kernel/genarch/Makefile.inc
r8cd680c r6eeb4a3 181 181 genarch/src/drivers/ega/ega.c 182 182 endif 183 184 ifeq ($(CONFIG_IOMAP_BITMAP), y) 185 GENARCH_SOURCES += \ 186 genarch/src/ddi/ddi-bitmap.c 187 endif 188 189 ifeq ($(CONFIG_IOMAP_DUMMY), y) 190 GENARCH_SOURCES += \ 191 genarch/src/ddi/ddi-dummy.c 192 endif 193 -
kernel/genarch/src/ddi/ddi-bitmap.c
r8cd680c r6eeb4a3 27 27 */ 28 28 29 /** @addtogroup ppc32ddi29 /** @addtogroup amd64ddi 30 30 * @{ 31 31 */ … … 34 34 35 35 #include <ddi/ddi.h> 36 #include <arch/ddi/ddi.h> 36 37 #include <proc/task.h> 37 38 #include <typedefs.h> 39 #include <adt/bitmap.h> 40 #include <mm/slab.h> 41 #include <arch/pm.h> 42 #include <errno.h> 43 #include <arch/cpu.h> 44 #include <cpu.h> 45 #include <arch.h> 46 #include <align.h> 38 47 39 48 /** Enable I/O space range for task. … … 45 54 * @param size Size of the enabled I/O range. 46 55 * 47 * @return 0on success or an error code from errno.h.56 * @return EOK on success or an error code from errno.h. 48 57 * 49 58 */ 50 59 int ddi_iospace_enable_arch(task_t *task, uintptr_t ioaddr, size_t size) 51 60 { 52 return 0; 61 size_t elements = ioaddr + size; 62 if (elements > IO_PORTS) 63 return ENOENT; 64 65 if (task->arch.iomap.elements < elements) { 66 /* 67 * The I/O permission bitmap is too small and needs to be grown. 68 */ 69 70 void *store = malloc(bitmap_size(elements), FRAME_ATOMIC); 71 if (!store) 72 return ENOMEM; 73 74 bitmap_t oldiomap; 75 bitmap_initialize(&oldiomap, task->arch.iomap.elements, 76 task->arch.iomap.bits); 77 78 bitmap_initialize(&task->arch.iomap, elements, store); 79 80 /* 81 * Mark the new range inaccessible. 82 */ 83 bitmap_set_range(&task->arch.iomap, oldiomap.elements, 84 elements - oldiomap.elements); 85 86 /* 87 * In case there really existed smaller iomap, 88 * copy its contents and deallocate it. 89 */ 90 if (oldiomap.bits) { 91 bitmap_copy(&task->arch.iomap, &oldiomap, 92 oldiomap.elements); 93 94 free(oldiomap.bits); 95 } 96 } 97 98 /* 99 * Enable the range and we are done. 100 */ 101 bitmap_clear_range(&task->arch.iomap, (size_t) ioaddr, size); 102 103 /* 104 * Increment I/O Permission bitmap generation counter. 105 */ 106 task->arch.iomapver++; 107 108 return EOK; 53 109 } 54 110 … … 59 115 * @param task Task. 60 116 * @param ioaddr Starting I/O space address. 61 * @param size Size of the disabled I/O range.117 * @param size Size of the enabled I/O range. 62 118 * 63 * @return 0on success or an error code from errno.h.119 * @return EOK on success or an error code from errno.h. 64 120 * 65 121 */ 66 122 int ddi_iospace_disable_arch(task_t *task, uintptr_t ioaddr, size_t size) 67 123 { 124 size_t elements = ioaddr + size; 125 if (elements > IO_PORTS) 126 return ENOENT; 127 128 if (ioaddr >= task->arch.iomap.elements) 129 return EINVAL; 130 131 if (task->arch.iomap.elements < elements) 132 size -= elements - task->arch.iomap.elements; 133 134 /* 135 * Disable the range. 136 */ 137 bitmap_set_range(&task->arch.iomap, (size_t) ioaddr, size); 138 139 /* 140 * Increment I/O Permission bitmap generation counter. 141 */ 142 task->arch.iomapver++; 143 68 144 return 0; 69 145 } -
kernel/genarch/src/ddi/ddi-dummy.c
r8cd680c r6eeb4a3 27 27 */ 28 28 29 /** @addtogroup sparc64ddi29 /** @addtogroup genarch 30 30 * @{ 31 31 */ 32 32 /** @file 33 * @brief DDI. 33 34 */ 34 35
Note:
See TracChangeset
for help on using the changeset viewer.