65 lines
1.1 KiB
C
65 lines
1.1 KiB
C
#pragma once
|
|
/* Virtual memory management header */
|
|
|
|
#include "cdef.h"
|
|
#include "memory_layout.h"
|
|
#include "llist.h"
|
|
#include "pmm.h"
|
|
#include "spin_lock.h"
|
|
|
|
typedef uintptr vaddr;
|
|
typedef struct llist vmll;
|
|
typedef struct llist_node vm_node;
|
|
|
|
typedef struct virtual_page
|
|
{
|
|
vaddr address; // Init to 0x0
|
|
vaddr table_ptr;
|
|
vmll allocs; // Linked list of vm_atom
|
|
uint64 free;
|
|
uint8 status;
|
|
} vm_object;
|
|
|
|
typedef struct allocation
|
|
{
|
|
usize offset;
|
|
usize size;
|
|
vm_object *page_ptr;
|
|
} vm_atom;
|
|
|
|
typedef struct page_table
|
|
{
|
|
uint64 id;
|
|
usize size;
|
|
usize free;
|
|
vm_atom *map;
|
|
} vm_unit;
|
|
|
|
typedef struct allocation_sector
|
|
{
|
|
uint64 start;
|
|
uint64 end;
|
|
vm_object **actbck;
|
|
vm_object **resbck;
|
|
vm_object *largest_free;
|
|
uint16 dirty;
|
|
} vm_sector;
|
|
|
|
typedef struct page_table_entries
|
|
{
|
|
vm_unit *groups;
|
|
vm_sector sectors[3];
|
|
vm_object *pages;
|
|
|
|
vmll *global_alloc;
|
|
usize free_frames;
|
|
} vmem;
|
|
|
|
void init_vm();
|
|
|
|
void vm_issue_unit(uint64 id, usize size);
|
|
|
|
void *kalloc(usize size);
|
|
|
|
void kfree(void *ptr);
|