[feat] Memory manager
This commit is contained in:
@@ -0,0 +1,9 @@
|
||||
#pragma once
|
||||
|
||||
#include <efi.h>
|
||||
|
||||
void init_heap();
|
||||
void* kmalloc(UINTN size);
|
||||
void kfree(void* ptr);
|
||||
void* kcalloc(UINTN num, UINTN size);
|
||||
void* krealloc(void* ptr, UINTN new_size);
|
||||
@@ -0,0 +1,25 @@
|
||||
#pragma once
|
||||
|
||||
#include <efi.h>
|
||||
|
||||
#define PAGE_SIZE 4096
|
||||
#define PAGE_SHIFT 12
|
||||
#define PAGE_MASK (~(PAGE_SIZE - 1ULL))
|
||||
|
||||
typedef struct {
|
||||
UINT8* bitmap;
|
||||
UINTN bitmap_size;
|
||||
UINTN total_pages;
|
||||
UINTN free_pages;
|
||||
void* free_list_head;
|
||||
UINT64 base_addr;
|
||||
UINT64 max_addr;
|
||||
} pmm_t;
|
||||
|
||||
extern pmm_t g_pmm;
|
||||
|
||||
EFI_STATUS pmm_init();
|
||||
void* pmm_alloc_pages(UINTN n);
|
||||
void pmm_free_pages(void* addr, UINTN n);
|
||||
UINTN pmm_get_free_count();
|
||||
BOOLEAN pmm_is_page_free(void* addr);
|
||||
@@ -12,4 +12,5 @@ extern serial_context g_serial;
|
||||
void serial_init(EFI_SERIAL_IO_PROTOCOL *SerialIo); // 初始化串行驱动
|
||||
void serial_write(const char *str); // 往串行写string
|
||||
void serial_write_char(char c); // 往串行写char(不推荐使用)
|
||||
void serial_write_hex(UINTN val); // 往串行写十六进制数字
|
||||
char serial_read_char(); // 读串行
|
||||
Reference in New Issue
Block a user