diff --git a/src/call.rs b/src/call.rs index ee7e69d..6f7131e 100644 --- a/src/call.rs +++ b/src/call.rs @@ -202,6 +202,11 @@ pub fn getuid() -> Result { } /// Set the I/O privilege level +/// +/// # Errors +/// +/// * `EPERM` - `uid != 0` +/// * `EINVAL` - `level > 3` pub unsafe fn iopl(level: usize) -> Result { syscall1(SYS_IOPL, level) } @@ -238,21 +243,39 @@ pub fn open>(path: T, flags: usize) -> Result { } /// Allocate pages, linearly in physical memory +/// +/// # Errors +/// +/// * `EPERM` - `uid != 0` +/// * `ENOMEM` - the system has run out of available memory pub unsafe fn physalloc(size: usize) -> Result { syscall1(SYS_PHYSALLOC, size) } /// Free physically allocated pages +/// +/// # Errors +/// +/// * `EPERM` - `uid != 0` pub unsafe fn physfree(physical_address: usize, size: usize) -> Result { syscall2(SYS_PHYSFREE, physical_address, size) } /// Map physical memory to virtual memory +/// +/// # Errors +/// +/// * `EPERM` - `uid != 0` pub unsafe fn physmap(physical_address: usize, size: usize, flags: usize) -> Result { syscall3(SYS_PHYSMAP, physical_address, size, flags) } /// Unmap previously mapped physical memory +/// +/// # Errors +/// +/// * `EPERM` - `uid != 0` +/// * `EFAULT` - `virtual_address` has not been mapped pub unsafe fn physunmap(virtual_address: usize) -> Result { syscall1(SYS_PHYSUNMAP, virtual_address) } @@ -311,6 +334,10 @@ pub fn unlink>(path: T) -> Result { } /// Convert a virtual address to a physical one +/// +/// # Errors +/// +/// * `EPERM` - `uid != 0` pub unsafe fn virttophys(virtual_address: usize) -> Result { syscall1(SYS_VIRTTOPHYS, virtual_address) }