diff --git a/sandbox/vm/Makefile b/sandbox/vm/Makefile new file mode 100644 index 0000000..1c7d103 --- /dev/null +++ b/sandbox/vm/Makefile @@ -0,0 +1,2 @@ +include ../sandbox-config.mk +include ../sandbox-template.mk diff --git a/sandbox/vm/main.c b/sandbox/vm/main.c new file mode 100644 index 0000000..6d885a0 --- /dev/null +++ b/sandbox/vm/main.c @@ -0,0 +1,29 @@ +#include +#include +#include "vm.h" + +/* amount of memory to allocate for system RAM in megabytes */ +#define SIMULATED_MEMORY_MB 16 + +#define MEMPTR(offset) ((void *)((uintptr_t)system_memory) + (offset)) + +int main(int argc, const char **argv) +{ + printf("Hello, world!\n"); + + void *system_memory = mmap( + NULL, + SIMULATED_MEMORY_MB * 0x100000, + PROT_READ | PROT_WRITE, + MAP_PRIVATE | MAP_ANONYMOUS, + -1, 0); + + if (system_memory == MAP_FAILED) { + perror("mmap"); + fprintf(stderr, "cannot allocated simulated system RAM buffer\n"); + return -1; + } + + munmap(system_memory, SIMULATED_MEMORY_MB * 0x100000); + return 0; +} diff --git a/sandbox/vm/vm.h b/sandbox/vm/vm.h new file mode 100644 index 0000000..cfe9f6b --- /dev/null +++ b/sandbox/vm/vm.h @@ -0,0 +1,51 @@ +#ifndef SOCKS_VM_H_ +#define SOCKS_VM_H_ + +#include + +/******************************************* + * Beginning of machine-specific definitions + *******************************************/ +typedef enum vm_zone_id { + VM_ZONE_DMA = 0x01u, + VM_ZONE_NORMAL = 0x02u, + VM_ZONE_HIGHMEM = 0x03u, +} vm_zone_id_t; +/******************************************* + * End of machine-specific definitions. + *******************************************/ + +typedef enum vm_memory_region_status { + VM_REGION_FREE = 0x01u, + VM_REGION_RESERVED = 0x02u, +} vm_memory_region_status_t; + +typedef struct vm_zone_descriptor { + vm_zone_id_t zd_id; + phys_addr_t zd_base; + phys_addr_t zd_limit; +} vm_zone_descriptor_t; + +typedef struct vm_zone { + unsigned z_reserved[32]; +} vm_zone_t; + +typedef struct vm_region { + vm_memory_region_status_t r_status; + phys_addr_t r_base; + phys_addr_t r_limit; +} vm_region_t; + +typedef enum vm_page_flags { + VM_PAGE_RESERVED = 0x01u, +} vm_page_flags_t; + +typedef struct vm_page { + uint32_t p_flags; /* vm_page_flags_t bitfield */ +} __attribute__((packed)) vm_page_t; + +extern void vm_bootstrap(void); + +extern void vm_page_init(vm_page_t *pg); + +#endif