x86_64: implement bootstrap function for pmap interface

This commit is contained in:
2023-02-06 20:50:28 +00:00
parent 52b3a5d6a5
commit 625eac9ca7
8 changed files with 423 additions and 4 deletions

32
include/socks/pmap.h Normal file
View File

@@ -0,0 +1,32 @@
#ifndef SOCKS_PMAP_H_
#define SOCKS_PMAP_H_
/* all the functions declared in this file are defined in arch/xyz/pmap.c */
#include <socks/vm.h>
#include <socks/status.h>
#include <socks/machine/pmap.h>
#include <stddef.h>
#define PFN(x) ((x) >> VM_PAGE_SHIFT)
typedef ml_pmap_t pmap_t;
typedef ml_pfn_t pfn_t;
typedef enum pmap_flags {
PMAP_HUGEPAGE = 0x01u,
} pmap_flags_t;
extern void pmap_bootstrap(void);
extern pmap_t pmap_create(void);
extern void pmap_destroy(pmap_t pmap);
extern void pmap_switch(pmap_t pmap);
extern kern_status_t pmap_add(pmap_t pmap, void *p, pfn_t pfn, vm_prot_t prot, pmap_flags_t flags);
extern kern_status_t pmap_add_block(pmap_t pmap, void *p, pfn_t pfn, size_t len, vm_prot_t prot, pmap_flags_t flags);
extern kern_status_t pmap_remove(pmap_t pmap, void *p);
extern kern_status_t pmap_remove_range(pmap_t pmap, void *p, size_t len);
#endif

View File

@@ -3,8 +3,10 @@
typedef unsigned int kern_status_t;
#define KERN_OK (0)
#define KERN_UNIMPLEMENTED (1)
#define KERN_NAME_EXISTS (2)
#define KERN_OK (0)
#define KERN_UNIMPLEMENTED (1)
#define KERN_NAME_EXISTS (2)
#define KERN_INVALID_ARGUMENT (3)
#define KERN_UNSUPPORTED (4)
#endif

View File

@@ -30,6 +30,14 @@ typedef struct vm_object {
unsigned int reserved;
} vm_object_t;
typedef enum vm_prot {
VM_PROT_READ = 0x01u,
VM_PROT_WRITE = 0x02u,
VM_PROT_EXEC = 0x04u,
VM_PROT_USER = 0x08u,
VM_PROT_SVR = 0x10u,
} vm_prot_t;
typedef enum vm_flags {
VM_GET_DMA = 0x01u,
} vm_flags_t;