mirror of
https://github.com/Mathewnd/Astral.git
synced 2026-10-30 05:58:22 +00:00
Add a WIP VMM
As of now the VMM (pretty much a doubly linked list of regions) supports allocating and demand paging. still no deallocation though so if you allocate something you can't free it yet :')
This commit is contained in:
@@ -0,0 +1,59 @@
|
||||
#ifndef _VMM_H_INCLUDE
|
||||
#define _VMM_H_INCLUDE
|
||||
|
||||
#include <arch/mmu.h>
|
||||
#include <stdbool.h>
|
||||
#include <stddef.h>
|
||||
|
||||
#define KERNEL_SPACE_START 0xFFFF800000000000
|
||||
#define KERNEL_SPACE_END 0xFFFFFFFFFFFFFFFF
|
||||
|
||||
#define VMM_TYPE_FREE 0
|
||||
#define VMM_TYPE_ANON 1
|
||||
#define VMM_TYPE_FILE 2
|
||||
|
||||
struct vmm_cacheheader;
|
||||
|
||||
typedef struct{
|
||||
int lock;
|
||||
struct vmm_cacheheader* next;
|
||||
size_t freecount;
|
||||
} vmm_cacheheader;
|
||||
|
||||
struct vmm_mapping;
|
||||
|
||||
typedef struct _vmm_mapping {
|
||||
struct _vmm_mapping *next;
|
||||
struct _vmm_mapping *prev;
|
||||
vmm_cacheheader* cache;
|
||||
void* start;
|
||||
void* end;
|
||||
size_t mmuflags;
|
||||
size_t type;
|
||||
void* data;
|
||||
size_t offset;
|
||||
} vmm_mapping;
|
||||
|
||||
|
||||
#define VMM_CACHE_ENTRY_COUNT ((PAGE_SIZE - sizeof(vmm_cacheheader)) / sizeof(vmm_mapping))
|
||||
|
||||
typedef struct{
|
||||
vmm_cacheheader header;
|
||||
vmm_mapping mappings[VMM_CACHE_ENTRY_COUNT];
|
||||
} vmm_cache;
|
||||
|
||||
typedef struct {
|
||||
vmm_mapping* userstart;
|
||||
arch_mmu_tableptr context;
|
||||
int lock;
|
||||
} vmm_context;
|
||||
|
||||
void vmm_init();
|
||||
|
||||
bool vmm_dealwithrequest(void* addr);
|
||||
bool vmm_setused(void* addr, size_t pagec, size_t mmuflags);
|
||||
bool vmm_unmap(void* addr, size_t pagec);
|
||||
bool vmm_map(void* paddr, void* vaddr, size_t pagec, size_t mmuflags);
|
||||
void* vmm_alloc(size_t pagec, size_t mmuflags);
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user