2022-08-21 19:18:53 +00:00
|
|
|
#pragma once
|
|
|
|
#include <stddef.h>
|
2022-09-01 14:11:35 +00:00
|
|
|
#include "../PreKernel/bootstructure.h"
|
2022-08-21 19:18:53 +00:00
|
|
|
#include "../Terminal/kterm.h"
|
|
|
|
#include "../Lib/mem.h"
|
|
|
|
#include "../bitmap.h"
|
|
|
|
|
2022-09-01 14:11:35 +00:00
|
|
|
// Asumming i386 for now!
|
|
|
|
#define BLOCK_SIZE 4092
|
2022-08-21 19:18:53 +00:00
|
|
|
|
|
|
|
#define IS_ALIGNED(addr, align) !((addr) & ~((align) - 1))
|
|
|
|
#define ALIGN(addr, align) (((addr) & ~((align) - 1 )) + (align))
|
|
|
|
|
|
|
|
struct PhysicalMemoryManagerInfoBlock
|
|
|
|
{
|
|
|
|
uint32_t* memoryBitMap;
|
|
|
|
size_t pmmap_size;
|
|
|
|
size_t max_blocks;
|
|
|
|
int used_blocks;
|
|
|
|
};
|
|
|
|
|
2022-09-01 14:11:35 +00:00
|
|
|
void SetupPhysicalMemoryManager(BootInfoBlock* memory);
|
2022-08-21 19:18:53 +00:00
|
|
|
void free_block(void* ptr);
|
|
|
|
void* allocate_block();
|
|
|
|
void allocate_region(uint32_t, uint32_t);
|
|
|
|
void deallocate_region(uint32_t , uint32_t );
|