Add a rust user-space Capability struct.

This is a thin wrapper around a capability ptr that releases the
capability when it is done and prevents copying/cloning it.

To get a copy a caller must explicitly use duplicate.
This commit is contained in:
Drew Galbraith 2024-08-17 17:15:33 -07:00
parent 19a8ab41d4
commit 7e68c1b641
18 changed files with 215 additions and 152 deletions

View file

@ -1,3 +1,4 @@
use crate::cap::Capability;
use crate::syscall;
use crate::zion::z_cap_t;
@ -11,11 +12,12 @@ pub static mut SELF_VMAS_CAP: z_cap_t = 0;
pub static mut INIT_ENDPOINT: z_cap_t = 0;
pub fn parse_init_port(port_cap: z_cap_t) {
let init_port = Capability::take(port_cap);
loop {
let mut bytes: [u8; 8] = [0; 8];
let mut caps: [u64; 1] = [0];
let resp = syscall::port_poll(port_cap, &mut bytes, &mut caps);
let resp = syscall::port_poll(&init_port, &mut bytes, &mut caps);
if let Err(_) = resp {
break;
}