Changeset 8fb1bf82 in mainline for kernel/generic
- Timestamp:
- 2010-11-25T13:42:50Z (15 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 8df8415
- Parents:
- a93d79a (diff), eb667613 (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the(diff)links above to see all the changes relative to each parent. - Location:
- kernel/generic
- Files:
-
- 14 edited
-
include/ddi/ddi.h (modified) (2 diffs)
-
include/syscall/syscall.h (modified) (1 diff)
-
include/typedefs.h (modified) (1 diff)
-
src/adt/bitmap.c (modified) (9 diffs)
-
src/adt/btree.c (modified) (2 diffs)
-
src/ddi/ddi.c (modified) (1 diff)
-
src/ipc/kbox.c (modified) (1 diff)
-
src/main/main.c (modified) (1 diff)
-
src/mm/as.c (modified) (1 diff)
-
src/mm/frame.c (modified) (3 diffs)
-
src/synch/smc.c (modified) (1 diff)
-
src/syscall/copy.c (modified) (4 diffs)
-
src/syscall/syscall.c (modified) (1 diff)
-
src/udebug/udebug_ops.c (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
kernel/generic/include/ddi/ddi.h
ra93d79a r8fb1bf82 54 54 extern unative_t sys_physmem_map(unative_t, unative_t, unative_t, unative_t); 55 55 extern unative_t sys_iospace_enable(ddi_ioarg_t *); 56 extern unative_t sys_interrupt_enable(int irq, int enable); 56 57 57 58 /* … … 60 61 extern int ddi_iospace_enable_arch(task_t *, uintptr_t, size_t); 61 62 63 62 64 #endif 63 65 -
kernel/generic/include/syscall/syscall.h
ra93d79a r8fb1bf82 80 80 SYS_PHYSMEM_MAP, 81 81 SYS_IOSPACE_ENABLE, 82 SYS_INTERRUPT_ENABLE, 82 83 83 84 SYS_SYSINFO_GET_TAG, -
kernel/generic/include/typedefs.h
ra93d79a r8fb1bf82 40 40 #include <arch/types.h> 41 41 42 #define NULL 042 #define NULL ((void *) 0) 43 43 44 44 #define false 0 -
kernel/generic/src/adt/bitmap.c
ra93d79a r8fb1bf82 32 32 /** 33 33 * @file 34 * @brief Implementation of bitmap ADT.34 * @brief Implementation of bitmap ADT. 35 35 * 36 36 * This file implements bitmap ADT and provides functions for … … 51 51 * No portion of the bitmap is set or cleared by this function. 52 52 * 53 * @param bitmap Bitmap structure.54 * @param map Address of the memory used to hold the map.55 * @param bits Number of bits stored in bitmap.53 * @param bitmap Bitmap structure. 54 * @param map Address of the memory used to hold the map. 55 * @param bits Number of bits stored in bitmap. 56 56 */ 57 57 void bitmap_initialize(bitmap_t *bitmap, uint8_t *map, size_t bits) … … 63 63 /** Set range of bits. 64 64 * 65 * @param bitmap Bitmap structure.66 * @param start Starting bit.67 * @param bits Number of bits to set.65 * @param bitmap Bitmap structure. 66 * @param start Starting bit. 67 * @param bits Number of bits to set. 68 68 */ 69 69 void bitmap_set_range(bitmap_t *bitmap, size_t start, size_t bits) … … 71 71 size_t i = 0; 72 72 size_t aligned_start; 73 size_t lub; /* leading unaligned bits */74 size_t amb; /* aligned middle bits */75 size_t tab; /* trailing aligned bits */73 size_t lub; /* leading unaligned bits */ 74 size_t amb; /* aligned middle bits */ 75 size_t tab; /* trailing aligned bits */ 76 76 77 77 ASSERT(start + bits <= bitmap->bits); … … 82 82 tab = amb % 8; 83 83 84 if ( start + bits < aligned_start ) { 85 /* 86 * Set bits in the middle of byte 87 */ 88 bitmap->map[start / 8] |= ((1 << lub)-1) << (start&7); 89 return; 84 if (!bits) 85 return; 86 87 if (start + bits < aligned_start) { 88 /* Set bits in the middle of byte. */ 89 bitmap->map[start / 8] |= ((1 << lub) - 1) << (start & 7); 90 return; 90 91 } 91 92 92 93 if (lub) { 93 /* 94 * Make sure to set any leading unaligned bits. 95 */ 94 /* Make sure to set any leading unaligned bits. */ 96 95 bitmap->map[start / 8] |= ~((1 << (8 - lub)) - 1); 97 96 } 98 97 for (i = 0; i < amb / 8; i++) { 99 /* 100 * The middle bits can be set byte by byte. 101 */ 98 /* The middle bits can be set byte by byte. */ 102 99 bitmap->map[aligned_start / 8 + i] = ALL_ONES; 103 100 } 104 101 if (tab) { 105 /* 106 * Make sure to set any trailing aligned bits. 107 */ 102 /* Make sure to set any trailing aligned bits. */ 108 103 bitmap->map[aligned_start / 8 + i] |= (1 << tab) - 1; 109 104 } … … 113 108 /** Clear range of bits. 114 109 * 115 * @param bitmap Bitmap structure.116 * @param start Starting bit.117 * @param bits Number of bits to clear.110 * @param bitmap Bitmap structure. 111 * @param start Starting bit. 112 * @param bits Number of bits to clear. 118 113 */ 119 114 void bitmap_clear_range(bitmap_t *bitmap, size_t start, size_t bits) … … 121 116 size_t i = 0; 122 117 size_t aligned_start; 123 size_t lub; /* leading unaligned bits */124 size_t amb; /* aligned middle bits */125 size_t tab; /* trailing aligned bits */118 size_t lub; /* leading unaligned bits */ 119 size_t amb; /* aligned middle bits */ 120 size_t tab; /* trailing aligned bits */ 126 121 127 122 ASSERT(start + bits <= bitmap->bits); … … 132 127 tab = amb % 8; 133 128 134 if ( start + bits < aligned_start)135 {136 /* 137 * Set bits in the middle of byte138 */139 bitmap->map[start / 8] &= ~(((1 << lub)-1) << (start&7));140 return;129 if (!bits) 130 return; 131 132 if (start + bits < aligned_start) { 133 /* Set bits in the middle of byte */ 134 bitmap->map[start / 8] &= ~(((1 << lub) - 1) << (start & 7)); 135 return; 141 136 } 142 137 143 144 138 if (lub) { 145 /* 146 * Make sure to clear any leading unaligned bits. 147 */ 139 /* Make sure to clear any leading unaligned bits. */ 148 140 bitmap->map[start / 8] &= (1 << (8 - lub)) - 1; 149 141 } 150 142 for (i = 0; i < amb / 8; i++) { 151 /* 152 * The middle bits can be cleared byte by byte. 153 */ 143 /* The middle bits can be cleared byte by byte. */ 154 144 bitmap->map[aligned_start / 8 + i] = ALL_ZEROES; 155 145 } 156 146 if (tab) { 157 /* 158 * Make sure to clear any trailing aligned bits. 159 */ 147 /* Make sure to clear any trailing aligned bits. */ 160 148 bitmap->map[aligned_start / 8 + i] &= ~((1 << tab) - 1); 161 149 } … … 165 153 /** Copy portion of one bitmap into another bitmap. 166 154 * 167 * @param dst Destination bitmap.168 * @param src Source bitmap.169 * @param bits Number of bits to copy.155 * @param dst Destination bitmap. 156 * @param src Source bitmap. 157 * @param bits Number of bits to copy. 170 158 */ 171 159 void bitmap_copy(bitmap_t *dst, bitmap_t *src, size_t bits) -
kernel/generic/src/adt/btree.c
ra93d79a r8fb1bf82 888 888 *leaf_node = cur; 889 889 890 if (cur->keys == 0) 891 return NULL; 892 890 893 /* 891 894 * The key can be in the leftmost subtree. … … 926 929 return key == cur->key[i - 1] ? val : NULL; 927 930 } 928 descend:931 descend: 929 932 ; 930 933 } -
kernel/generic/src/ddi/ddi.c
ra93d79a r8fb1bf82 258 258 } 259 259 260 /** Disable or enable specified interrupts. 261 * 262 * @param irq the interrupt to be enabled/disabled. 263 * @param enable if true enable the interrupt, disable otherwise. 264 * 265 * @retutn Zero on success, error code otherwise. 266 */ 267 unative_t sys_interrupt_enable(int irq, int enable) 268 { 269 /* FIXME: this needs to be generic code, or better not be in kernel at all. */ 270 #if 0 271 cap_t task_cap = cap_get(TASK); 272 if (!(task_cap & CAP_IRQ_REG)) 273 return EPERM; 274 275 if (irq < 0 || irq > 16) { 276 return EINVAL; 277 } 278 279 uint16_t irq_mask = (uint16_t)(1 << irq); 280 if (enable) { 281 trap_virtual_enable_irqs(irq_mask); 282 } else { 283 trap_virtual_disable_irqs(irq_mask); 284 } 285 286 #endif 287 return 0; 288 } 289 260 290 /** @} 261 291 */ -
kernel/generic/src/ipc/kbox.c
ra93d79a r8fb1bf82 107 107 /* Terminate debugging session (if any). */ 108 108 LOG("Terminate debugging session."); 109 irq_spinlock_lock(&TASK->lock, true);109 mutex_lock(&TASK->udebug.lock); 110 110 udebug_task_cleanup(TASK); 111 irq_spinlock_unlock(&TASK->lock, true);111 mutex_unlock(&TASK->udebug.lock); 112 112 } else { 113 113 LOG("Was not debugger."); -
kernel/generic/src/main/main.c
ra93d79a r8fb1bf82 97 97 /** Boot allocations. */ 98 98 ballocs_t ballocs = { 99 .base = NULL,99 .base = (uintptr_t) NULL, 100 100 .size = 0 101 101 }; -
kernel/generic/src/mm/as.c
ra93d79a r8fb1bf82 312 312 * 313 313 */ 314 if (overlaps(va, size, NULL, PAGE_SIZE))314 if (overlaps(va, size, (uintptr_t) NULL, PAGE_SIZE)) 315 315 return false; 316 316 -
kernel/generic/src/mm/frame.c
ra93d79a r8fb1bf82 878 878 * the assert 879 879 */ 880 ASSERT(confframe != NULL);880 ASSERT(confframe != ADDR2PFN((uintptr_t ) NULL)); 881 881 882 882 /* If confframe is supposed to be inside our zone, then make sure … … 1104 1104 */ 1105 1105 pfn_t pfn = ADDR2PFN(frame); 1106 size_t znum = find_zone(pfn, 1, NULL);1106 size_t znum = find_zone(pfn, 1, 0); 1107 1107 1108 1108 ASSERT(znum != (size_t) -1); … … 1141 1141 * First, find host frame zone for addr. 1142 1142 */ 1143 size_t znum = find_zone(pfn, 1, NULL);1143 size_t znum = find_zone(pfn, 1, 0); 1144 1144 1145 1145 ASSERT(znum != (size_t) -1); -
kernel/generic/src/synch/smc.c
ra93d79a r8fb1bf82 44 44 unative_t sys_smc_coherence(uintptr_t va, size_t size) 45 45 { 46 if (overlaps(va, size, NULL, PAGE_SIZE))46 if (overlaps(va, size, (uintptr_t) NULL, PAGE_SIZE)) 47 47 return EINVAL; 48 48 -
kernel/generic/src/syscall/copy.c
ra93d79a r8fb1bf82 68 68 if (!KERNEL_ADDRESS_SPACE_SHADOWED) { 69 69 if (overlaps((uintptr_t) uspace_src, size, 70 KERNEL_ADDRESS_SPACE_START, KERNEL_ADDRESS_SPACE_END-KERNEL_ADDRESS_SPACE_START)) { 70 KERNEL_ADDRESS_SPACE_START, 71 KERNEL_ADDRESS_SPACE_END - KERNEL_ADDRESS_SPACE_START)) { 71 72 /* 72 73 * The userspace source block conflicts with kernel address space. … … 75 76 } 76 77 } 78 79 #ifdef ADDRESS_SPACE_HOLE_START 80 /* 81 * Check whether the address is outside the address space hole. 82 */ 83 if (overlaps((uintptr_t) uspace_src, size, ADDRESS_SPACE_HOLE_START, 84 ADDRESS_SPACE_HOLE_END - ADDRESS_SPACE_HOLE_START)) 85 return EPERM; 86 #endif 77 87 78 88 ipl = interrupts_disable(); … … 109 119 if (!KERNEL_ADDRESS_SPACE_SHADOWED) { 110 120 if (overlaps((uintptr_t) uspace_dst, size, 111 KERNEL_ADDRESS_SPACE_START, KERNEL_ADDRESS_SPACE_END-KERNEL_ADDRESS_SPACE_START)) { 121 KERNEL_ADDRESS_SPACE_START, 122 KERNEL_ADDRESS_SPACE_END - KERNEL_ADDRESS_SPACE_START)) { 112 123 /* 113 124 * The userspace destination block conflicts with kernel address space. … … 116 127 } 117 128 } 129 130 #ifdef ADDRESS_SPACE_HOLE_START 131 /* 132 * Check whether the address is outside the address space hole. 133 */ 134 if (overlaps((uintptr_t) uspace_dst, size, ADDRESS_SPACE_HOLE_START, 135 ADDRESS_SPACE_HOLE_END - ADDRESS_SPACE_HOLE_START)) 136 return EPERM; 137 #endif 118 138 119 139 ipl = interrupts_disable(); -
kernel/generic/src/syscall/syscall.c
ra93d79a r8fb1bf82 159 159 (syshandler_t) sys_physmem_map, 160 160 (syshandler_t) sys_iospace_enable, 161 (syshandler_t) sys_interrupt_enable, 161 162 162 163 /* Sysinfo syscalls */ -
kernel/generic/src/udebug/udebug_ops.c
ra93d79a r8fb1bf82 428 428 * @param data_size Place to store size of the data. 429 429 * 430 * @return sEOK.430 * @return EOK. 431 431 * 432 432 */
Note:
See TracChangeset
for help on using the changeset viewer.
