Changes in kernel/generic/src/adt/bitmap.c [4fe18151:98000fb] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
kernel/generic/src/adt/bitmap.c
r4fe18151 r98000fb 32 32 /** 33 33 * @file 34 * @brief 34 * @brief Implementation of bitmap ADT. 35 35 * 36 36 * This file implements bitmap ADT and provides functions for … … 39 39 40 40 #include <adt/bitmap.h> 41 #include < typedefs.h>41 #include <arch/types.h> 42 42 #include <align.h> 43 43 #include <debug.h> … … 51 51 * No portion of the bitmap is set or cleared by this function. 52 52 * 53 * @param bitmap 54 * @param map 55 * @param bits 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 66 * @param start 67 * @param bits 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 (!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; 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; 91 90 } 92 91 93 92 if (lub) { 94 /* Make sure to set any leading unaligned bits. */ 93 /* 94 * Make sure to set any leading unaligned bits. 95 */ 95 96 bitmap->map[start / 8] |= ~((1 << (8 - lub)) - 1); 96 97 } 97 98 for (i = 0; i < amb / 8; i++) { 98 /* The middle bits can be set byte by byte. */ 99 /* 100 * The middle bits can be set byte by byte. 101 */ 99 102 bitmap->map[aligned_start / 8 + i] = ALL_ONES; 100 103 } 101 104 if (tab) { 102 /* Make sure to set any trailing aligned bits. */ 105 /* 106 * Make sure to set any trailing aligned bits. 107 */ 103 108 bitmap->map[aligned_start / 8 + i] |= (1 << tab) - 1; 104 109 } … … 108 113 /** Clear range of bits. 109 114 * 110 * @param bitmap 111 * @param start 112 * @param bits 115 * @param bitmap Bitmap structure. 116 * @param start Starting bit. 117 * @param bits Number of bits to clear. 113 118 */ 114 119 void bitmap_clear_range(bitmap_t *bitmap, size_t start, size_t bits) … … 116 121 size_t i = 0; 117 122 size_t aligned_start; 118 size_t lub; /* leading unaligned bits */119 size_t amb; /* aligned middle bits */120 size_t tab; /* trailing aligned bits */123 size_t lub; /* leading unaligned bits */ 124 size_t amb; /* aligned middle bits */ 125 size_t tab; /* trailing aligned bits */ 121 126 122 127 ASSERT(start + bits <= bitmap->bits); … … 127 132 tab = amb % 8; 128 133 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 134 if ( start + bits < aligned_start ) 135 { 136 /* 137 * Set bits in the middle of byte 138 */ 139 bitmap->map[start / 8] &= ~(((1 << lub)-1) << (start&7)); 140 return; 136 141 } 137 142 143 138 144 if (lub) { 139 /* Make sure to clear any leading unaligned bits. */ 145 /* 146 * Make sure to clear any leading unaligned bits. 147 */ 140 148 bitmap->map[start / 8] &= (1 << (8 - lub)) - 1; 141 149 } 142 150 for (i = 0; i < amb / 8; i++) { 143 /* The middle bits can be cleared byte by byte. */ 151 /* 152 * The middle bits can be cleared byte by byte. 153 */ 144 154 bitmap->map[aligned_start / 8 + i] = ALL_ZEROES; 145 155 } 146 156 if (tab) { 147 /* Make sure to clear any trailing aligned bits. */ 157 /* 158 * Make sure to clear any trailing aligned bits. 159 */ 148 160 bitmap->map[aligned_start / 8 + i] &= ~((1 << tab) - 1); 149 161 } … … 153 165 /** Copy portion of one bitmap into another bitmap. 154 166 * 155 * @param dst 156 * @param src 157 * @param bits 167 * @param dst Destination bitmap. 168 * @param src Source bitmap. 169 * @param bits Number of bits to copy. 158 170 */ 159 171 void bitmap_copy(bitmap_t *dst, bitmap_t *src, size_t bits)
Note:
See TracChangeset
for help on using the changeset viewer.