2020-11-27 10:42:13 +00:00
|
|
|
#ifndef KERNAUX_INCLUDED_PFA
|
2021-12-20 06:17:53 +00:00
|
|
|
#define KERNAUX_INCLUDED_PFA
|
2020-11-27 09:28:13 +00:00
|
|
|
|
2021-12-13 20:46:58 +00:00
|
|
|
#ifdef __cplusplus
|
|
|
|
extern "C" {
|
|
|
|
#endif
|
|
|
|
|
2020-12-06 10:16:15 +00:00
|
|
|
#include <stdbool.h>
|
2021-12-13 22:59:51 +00:00
|
|
|
#include <stddef.h>
|
2021-12-17 19:22:28 +00:00
|
|
|
#include <stdint.h>
|
2020-11-30 22:54:09 +00:00
|
|
|
|
|
|
|
#define KERNAUX_PFA_PAGE_SIZE (4 * 1024)
|
|
|
|
#define KERNAUX_PFA_PAGES_COUNT_MAX (1024 * 1024)
|
2021-12-14 18:41:11 +00:00
|
|
|
#define KERNAUX_PFA_FLAGS_SIZE (KERNAUX_PFA_PAGES_COUNT_MAX / 8)
|
2020-11-30 22:54:09 +00:00
|
|
|
|
2021-12-13 23:03:13 +00:00
|
|
|
typedef struct KernAux_PFA *KernAux_PFA;
|
|
|
|
|
2020-11-30 22:54:09 +00:00
|
|
|
struct KernAux_PFA {
|
2021-12-17 19:22:28 +00:00
|
|
|
uint8_t flags[KERNAUX_PFA_FLAGS_SIZE];
|
2020-11-30 22:54:09 +00:00
|
|
|
};
|
|
|
|
|
2021-12-14 22:10:28 +00:00
|
|
|
void KernAux_PFA_initialize(KernAux_PFA pfa);
|
2020-11-30 22:54:09 +00:00
|
|
|
|
2021-12-14 22:10:28 +00:00
|
|
|
bool KernAux_PFA_is_available(KernAux_PFA pfa, size_t page_addr);
|
2021-12-13 23:10:05 +00:00
|
|
|
|
2021-12-14 22:10:28 +00:00
|
|
|
void KernAux_PFA_mark_available(KernAux_PFA pfa, size_t start, size_t end);
|
|
|
|
void KernAux_PFA_mark_unavailable(KernAux_PFA pfa, size_t start, size_t end);
|
2020-11-30 22:54:09 +00:00
|
|
|
|
2021-12-14 22:10:28 +00:00
|
|
|
size_t KernAux_PFA_alloc_pages(KernAux_PFA pfa, size_t mem_size);
|
|
|
|
void KernAux_PFA_free_pages(KernAux_PFA pfa, size_t page_addr, size_t mem_size);
|
2021-12-14 00:39:54 +00:00
|
|
|
|
2020-11-27 09:28:13 +00:00
|
|
|
#ifdef __cplusplus
|
|
|
|
}
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#endif
|