//
// Created by Stepan Usatiuk on 12.08.2023.
//

#ifndef FICUS_MEMMAN_H
#define FICUS_MEMMAN_H

#include "limine.h"
enum PageStatus {
    MEMMAN_STATE_FREE        = 1,
    MEMMAN_STATE_USED        = 2,
    MEMMAN_STATE_RESERVED    = 0,
    MEMMAN_STATE_RECLAIMABLE = 3,
};

struct FourPages {
    enum PageStatus first  : 2;
    enum PageStatus second : 2;
    enum PageStatus third  : 2;
    enum PageStatus fourth : 2;
} __attribute__((packed));
static_assert(sizeof(FourPages) == 1);

void parse_limine_memmap(struct limine_memmap_entry *entries, unsigned int num, uint64_t what_is_considered_free);

void    *get4k();
void     free4k(void *page);
uint64_t get_free();

#endif //FICUS_MEMMAN_H
