PatchworkOS  a7b3d61
A non-POSIX operating system.
Loading...
Searching...
No Matches
bitmap_find_clear_region_and_set.c
Go to the documentation of this file.
1#include <sys/bitmap.h>
2
4 uint64_t alignment)
5{
6 if (length == 0 || minIdx >= maxIdx || maxIdx > map->length)
7 {
8 return map->length;
9 }
10
11 if (alignment == 0)
12 {
13 alignment = 1;
14 }
15
16 uint64_t idx = MAX(minIdx, map->firstZeroIdx);
17 idx = ROUND_UP(idx, alignment);
18
19 while (idx <= maxIdx - length)
20 {
21 uint64_t firstSet = bitmap_find_first_set(map, idx, idx + length);
22 if (firstSet >= idx + length)
23 {
24 bitmap_set_range(map, idx, idx + length);
25 return idx;
26 }
27 idx = ROUND_UP(firstSet + 1, alignment);
28 }
29
30 return map->length;
31}
uint64_t bitmap_find_first_set(bitmap_t *map, uint64_t startIdx, uint64_t endIdx)
Find the first set bit in the bitmap.
void bitmap_set_range(bitmap_t *map, uint64_t low, uint64_t high)
Set a range of bits in the bitmap.
uint64_t bitmap_find_clear_region_and_set(bitmap_t *map, uint64_t minIdx, uintptr_t maxIdx, uint64_t length, uint64_t alignment)
Find a clear region of specified length and alignment, and set it.
#define ROUND_UP(number, multiple)
Definition math.h:19
#define MAX(x, y)
Definition math.h:15
boot_memory_map_t * map
Definition mem.c:19
__UINT64_TYPE__ uint64_t
Definition stdint.h:17
__UINTPTR_TYPE__ uintptr_t
Definition stdint.h:43
Bitmap structure.
Definition bitmap.h:22
uint64_t length
Definition boot_info.h:58