33 static inline int page_allocator_handle_size(
unsigned int nr_of_pages)
38 #define BYTE_IDX(j) ((j) >> 3)
39 #define BIT_IDX(j) ((j) & 0x07)
40 #define BIT_MASK(j) (0x01 << BIT_IDX(j))
45 static inline void initialize_header(
struct page_allocator *handle,
unsigned int base,
unsigned int size)
48 unsigned int bit_count;
51 handle->
base = (
unsigned int)base;
54 for (bit_count = 0, i = 1; i < handle->
nr_of_pages; i <<= 1, bit_count++);
95 static inline void initialize_bitmap(
struct page_allocator *handle)
101 unsigned int start_idx;
119 idx = (0x01 << (handle->
max_order - order));
122 while (tmp <= nr_of_pages) {
130 }
while (nr_of_pages > 0);
134 static inline void debug_dump_bitmap(
struct page_allocator *handle)
147 for (i = 0; i < handle->
bitmap_sz; i++) {
148 for (bit_idx = 0; bit_idx < 8; bit_idx++) {
150 if (cnt++ == (line - 1)) {
165 for (i = 0; i < handle->
bitmap_sz; i++) {
166 for (bit_idx = 0; bit_idx < 8; bit_idx++) {
168 if (cnt++ == (line - 1)) {
196 initialize_header(handle, (
unsigned int)addr, size);
197 initialize_bitmap(handle);
211 static inline int validate_power_of_two(
unsigned int nr_of_pages,
unsigned int *order)
217 for (_order = 0, i = 1; i <
nr_of_pages; i <<= 1, _order++) {
245 if (!validate_power_of_two(nr_of_pages, &order)) {
250 idx = 0x01 << (handle->
max_order - order);
255 for (i = idx; i < total; i++) {
259 i = (i - idx) << order;
283 for (i = idx; i < total; i++) {
306 idx = (0x01 << (handle->
max_order - j)) - 1;
309 }
while (j != order);
311 i = (i - idx) << order;
335 for (order = 0; order <= handle->
max_order; order++) {
337 idx = (0x01 << (handle->
max_order - order)) - 1;
345 buddy = idx + i + (((idx + i) & 0x01) ? 1 : -1);
356 idx = (0x01 << (handle->
max_order - order)) - 1;
388 debug_dump_bitmap(handle);
400 if (size & (page_size_bits - 1)) {
422 *start = handle->
base;