mirror of https://github.com/tailix/libkernaux.git
61 lines
1.4 KiB
C
61 lines
1.4 KiB
C
#ifndef KERNAUX_INCLUDED_PFA
|
|
#define KERNAUX_INCLUDED_PFA 1
|
|
|
|
#include <kernaux/stdlib.h>
|
|
|
|
#define KERNAUX_PFA_ZONES_COUNT_MAX 10
|
|
#define KERNAUX_PFA_ZONE_NAME_SIZE_MAX 256
|
|
#define KERNAUX_PFA_ZONE_NAME_SLEN_MAX (KERNAUX_PFA_ZONE_NAME_SIZE_MAX - 1)
|
|
#define KERNAUX_PFA_PAGE_SIZE_MIN (4 * 1024)
|
|
#define KERNAUX_PFA_PAGE_SIZE_MAX (((unsigned long long)4) * 1024 * 1024 * 1024)
|
|
#define KERNAUX_PFA_ZONE_PAGES_COUNT_MAX (1024 * 1024)
|
|
#define KERNAUX_PFA_ZONE_PAGE_LIST_SIZE (KERNAUX_PFA_ZONE_PAGES_COUNT_MAX / 8)
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
struct KernAux_PFA_Zone {
|
|
char name[KERNAUX_PFA_ZONE_NAME_SIZE_MAX];
|
|
|
|
unsigned long long start;
|
|
unsigned long long end;
|
|
unsigned long long size;
|
|
|
|
unsigned char pages[KERNAUX_PFA_ZONE_PAGE_LIST_SIZE];
|
|
};
|
|
|
|
struct KernAux_PFA {
|
|
kernaux_bool initialized;
|
|
|
|
unsigned long long page_size;
|
|
|
|
struct KernAux_PFA_Zone zones[KERNAUX_PFA_ZONES_COUNT_MAX];
|
|
unsigned int zones_count;
|
|
};
|
|
|
|
kernaux_bool KernAux_PFA_initialize_start(
|
|
struct KernAux_PFA *pfa,
|
|
unsigned long long page_size
|
|
)
|
|
__attribute__((nonnull));
|
|
|
|
kernaux_bool KernAux_PFA_initialize_add_zone(
|
|
struct KernAux_PFA *pfa,
|
|
const char *name,
|
|
unsigned long long start,
|
|
unsigned long long end
|
|
)
|
|
__attribute__((nonnull));
|
|
|
|
kernaux_bool KernAux_PFA_initialize_finish(
|
|
struct KernAux_PFA *pfa
|
|
)
|
|
__attribute__((nonnull));
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif
|