Rev 1262 | Rev 1702 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 1262 | Rev 1549 | ||
---|---|---|---|
Line 64... | Line 64... | ||
64 | * @param start Starting bit. |
64 | * @param start Starting bit. |
65 | * @param bits Number of bits to set. |
65 | * @param bits Number of bits to set. |
66 | */ |
66 | */ |
67 | void bitmap_set_range(bitmap_t *bitmap, index_t start, count_t bits) |
67 | void bitmap_set_range(bitmap_t *bitmap, index_t start, count_t bits) |
68 | { |
68 | { |
69 | index_t i; |
69 | index_t i=0; |
70 | index_t aligned_start; |
70 | index_t aligned_start; |
71 | count_t lub; /* leading unaligned bits */ |
71 | count_t lub; /* leading unaligned bits */ |
72 | count_t amb; /* aligned middle bits */ |
72 | count_t amb; /* aligned middle bits */ |
73 | count_t tab; /* trailing aligned bits */ |
73 | count_t tab; /* trailing aligned bits */ |
74 | 74 | ||
Line 77... | Line 77... | ||
77 | aligned_start = ALIGN_UP(start, 8); |
77 | aligned_start = ALIGN_UP(start, 8); |
78 | lub = min(aligned_start - start, bits); |
78 | lub = min(aligned_start - start, bits); |
79 | amb = bits > lub ? bits - lub : 0; |
79 | amb = bits > lub ? bits - lub : 0; |
80 | tab = amb % 8; |
80 | tab = amb % 8; |
81 | 81 | ||
- | 82 | if ( start + bits < aligned_start ) { |
|
- | 83 | /* |
|
- | 84 | * Set bits in the middle of byte |
|
- | 85 | */ |
|
- | 86 | bitmap->map[start / 8] |= ((1 << lub)-1) << (start&7); |
|
- | 87 | return; |
|
- | 88 | } |
|
- | 89 | ||
82 | if (lub) { |
90 | if (lub) { |
83 | /* |
91 | /* |
84 | * Make sure to set any leading unaligned bits. |
92 | * Make sure to set any leading unaligned bits. |
85 | */ |
93 | */ |
86 | bitmap->map[start / 8] |= ~((1 << (8 - lub)) - 1); |
94 | bitmap->map[start / 8] |= ~((1 << (8 - lub)) - 1); |
Line 106... | Line 114... | ||
106 | * @param start Starting bit. |
114 | * @param start Starting bit. |
107 | * @param bits Number of bits to clear. |
115 | * @param bits Number of bits to clear. |
108 | */ |
116 | */ |
109 | void bitmap_clear_range(bitmap_t *bitmap, index_t start, count_t bits) |
117 | void bitmap_clear_range(bitmap_t *bitmap, index_t start, count_t bits) |
110 | { |
118 | { |
111 | index_t i; |
119 | index_t i=0; |
112 | index_t aligned_start; |
120 | index_t aligned_start; |
113 | count_t lub; /* leading unaligned bits */ |
121 | count_t lub; /* leading unaligned bits */ |
114 | count_t amb; /* aligned middle bits */ |
122 | count_t amb; /* aligned middle bits */ |
115 | count_t tab; /* trailing aligned bits */ |
123 | count_t tab; /* trailing aligned bits */ |
116 | 124 | ||
Line 119... | Line 127... | ||
119 | aligned_start = ALIGN_UP(start, 8); |
127 | aligned_start = ALIGN_UP(start, 8); |
120 | lub = min(aligned_start - start, bits); |
128 | lub = min(aligned_start - start, bits); |
121 | amb = bits > lub ? bits - lub : 0; |
129 | amb = bits > lub ? bits - lub : 0; |
122 | tab = amb % 8; |
130 | tab = amb % 8; |
123 | 131 | ||
- | 132 | if ( start + bits < aligned_start ) |
|
- | 133 | { |
|
- | 134 | /* |
|
- | 135 | * Set bits in the middle of byte |
|
- | 136 | */ |
|
- | 137 | bitmap->map[start / 8] &= ~(((1 << lub)-1) << (start&7)); |
|
- | 138 | return; |
|
- | 139 | } |
|
- | 140 | ||
- | 141 | ||
124 | if (lub) { |
142 | if (lub) { |
125 | /* |
143 | /* |
126 | * Make sure to clear any leading unaligned bits. |
144 | * Make sure to clear any leading unaligned bits. |
127 | */ |
145 | */ |
128 | bitmap->map[start / 8] &= (1 << (8 - lub)) - 1; |
146 | bitmap->map[start / 8] &= (1 << (8 - lub)) - 1; |