diff options
| author | Kimplul <kimi.h.kuparinen@gmail.com> | 2022-01-07 16:32:05 +0200 |
|---|---|---|
| committer | Kimplul <kimi.h.kuparinen@gmail.com> | 2022-01-07 16:32:05 +0200 |
| commit | be78fcb0acc665d4db8edb9cda53f6863d27dd85 (patch) | |
| tree | e9e33e9e48983f630098eedd3d931edbe86e4410 /include/apos/mem_regions.h | |
| parent | 9cc125fb3cfdc2c8ae7153b5ae0fe705980835fb (diff) | |
| download | kmi-be78fcb0acc665d4db8edb9cda53f6863d27dd85.tar.gz kmi-be78fcb0acc665d4db8edb9cda53f6863d27dd85.zip | |
Improved header dependency tree
Diffstat (limited to 'include/apos/mem_regions.h')
| -rw-r--r-- | include/apos/mem_regions.h | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/include/apos/mem_regions.h b/include/apos/mem_regions.h new file mode 100644 index 0000000..eb81e63 --- /dev/null +++ b/include/apos/mem_regions.h @@ -0,0 +1,36 @@ +#ifndef APOS_MEM_REGIONS_H +#define APOS_MEM_REGIONS_H + +#include <apos/types.h> +#include <apos/sp_tree.h> + +#define mem_container(ptr)\ + container_of(ptr, struct sp_mem, sp_n) + +struct sp_reg_root { + struct sp_root free_regions; + struct sp_root used_regions; +}; + +struct sp_mem { + struct sp_node sp_n; + + struct sp_mem *next; + struct sp_mem *prev; + + char flags; + + vm_t end; + vm_t start; +}; + +stat_t sp_mem_init(struct sp_reg_root *r, vm_t start, size_t arena_size); +vm_t alloc_region(struct sp_reg_root *r, size_t size, size_t *actual_size); +vm_t alloc_fixed_region(struct sp_reg_root *r, vm_t start, size_t size, size_t *actual_size); +stat_t free_region(struct sp_reg_root *r, vm_t start); + +struct sp_mem *sp_used_find(struct sp_reg_root *r, vm_t start); +struct sp_mem *sp_find_used_closest(struct sp_reg_root *r, vm_t start); +struct sp_mem *sp_find_free(struct sp_reg_root *r, size_t size, size_t *align); + +#endif /* APOS_MEM_REGIONS_H */ |
