Move more syscall usages to helper functions.

This commit is contained in:
Drew Galbraith 2024-07-28 20:10:32 -07:00
parent ca67da16e6
commit 5705f8d2ab
3 changed files with 50 additions and 33 deletions

View file

@ -1,6 +1,4 @@
use crate::init::SELF_VMAS_CAP;
use crate::syscall;
use crate::zion;
use linked_list_allocator::LockedHeap;
#[global_allocator]
@ -11,24 +9,8 @@ pub static mut CAN_ALLOC: bool = false;
pub fn init_heap() {
// 1 MiB
let size = 0x10_0000;
let mut vmmo_cap = 0;
let obj_req = zion::ZMemoryObjectCreateReq {
size,
vmmo_cap: &mut vmmo_cap as *mut u64,
};
syscall::syscall(zion::kZionMemoryObjectCreate, &obj_req)
.expect("Failed to create memory object");
let mut vaddr: u64 = 0;
let vmas_req = zion::ZAddressSpaceMapReq {
vmmo_cap,
vmas_cap: unsafe { SELF_VMAS_CAP },
align: 0x2000,
vaddr: &mut vaddr as *mut u64,
vmas_offset: 0,
};
syscall::syscall(zion::kZionAddressSpaceMap, &vmas_req).expect("Failed to map memory object");
let vmmo_cap = syscall::memory_object_create(size).expect("Failed to create memory object");
let vaddr = syscall::address_space_map(vmmo_cap).expect("Failed to map memory object");
unsafe {
ALLOCATOR.lock().init(vaddr as *mut u8, size as usize);
CAN_ALLOC = true;