Implement syscalls, hello world from userspace
This commit is contained in:
@ -1,14 +1,28 @@
|
||||
#include <stdint.h>
|
||||
#include <stddef.h>
|
||||
#include "cpu.h"
|
||||
#include "vmm.h"
|
||||
#include "pmm/pmm.h"
|
||||
#include "hal/hal.h"
|
||||
#include "bootinfo/bootinfo.h"
|
||||
|
||||
LocalCpuData HAL_CPUS[HAL_CPUS_MAX];
|
||||
|
||||
uint64_t hal_cpu_rdmsr(uint32_t id) {
|
||||
uint32_t lo, hi;
|
||||
asm volatile("rdmsr" : "=m"(lo), "=d"(hi) : "c"(id));
|
||||
asm volatile("rdmsr" : "=a"(lo), "=d"(hi) : "c"(id));
|
||||
return ((uint64_t)lo) | ((uint64_t)hi << 32);
|
||||
}
|
||||
|
||||
uint64_t hal_cpu_wrmsr(uint32_t id, uint64_t val) {
|
||||
uint32_t lo = val & 0xffffffff, hi = (val >> 32) & 0xffffffff;
|
||||
asm volatile("wrmsr" :: "a"(lo), "d"(hi), "c"(id) : "memory");
|
||||
uint32_t lo = val & 0xFFFFFFFF;
|
||||
uint32_t hi = val >> 32;
|
||||
asm volatile("wrmsr" :: "c"(id), "a"(lo), "d"(hi));
|
||||
return val;
|
||||
}
|
||||
|
||||
void hal_cpu_init(uint32_t cpu) {
|
||||
void *addr = pmm_alloc(16) + (16 * HAL_PAGE_SIZE);
|
||||
HAL_CPUS[cpu].syscall_kstack = (uint64_t *)VIRT(addr);
|
||||
HAL_CPUS[cpu].kcr3 = hal_vmm_current_cr3();
|
||||
}
|
||||
|
Reference in New Issue
Block a user