use crate::cap::boot_untyped; use crate::proc::context::CpuContext; use super::{SyscallResult, try_syscall}; pub fn sys_boot_untyped_info(ctx: &mut CpuContext) { let pid = crate::arch::syscall::current_pid(); if pid != crate::types::Pid::INIT { ctx.rax = SyscallResult::error(crate::error::KernelError::PermissionDenied).raw(); return; } let index = ctx.rdi; let meta = try_syscall!( ctx, boot_untyped::metadata().ok_or(crate::error::KernelError::NotInitialized) ); if index == u64::MAX { ctx.rax = SyscallResult::success(meta.len() as u64).raw(); return; } let idx = try_syscall!(ctx, super::u32_from_reg(index)) as usize; if idx >= meta.len() { ctx.rax = SyscallResult::error(crate::error::KernelError::InvalidParameter).raw(); return; } let info = &meta.as_slice()[idx]; ctx.rax = SyscallResult::success(info.cnode_slot).raw(); ctx.rsi = info.phys_base; ctx.rdx = (info.size_bits as u64) | ((info.is_device as u64) << 8); }