Changes in kernel/generic/src/adt/bitmap.c [98000fb:4fe18151] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
kernel/generic/src/adt/bitmap.c
r98000fb r4fe18151 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 < arch/types.h>41 #include <typedefs.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; 74 size_t amb; 75 size_t tab; 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 116 * @param start 117 * @param bits 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; 124 size_t amb; 125 size_t tab; 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 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 168 * @param src 169 * @param bits 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)
Note:
See TracChangeset
for help on using the changeset viewer.