[Denali] Interrupts working in rust.

This commit is contained in:
Drew Galbraith 2024-10-02 23:59:50 -07:00
parent df79233bbb
commit d94f61511b
8 changed files with 654 additions and 123 deletions

View file

@ -41,6 +41,19 @@ impl MemoryRegion {
})
}
pub fn contiguous_physical(size: u64) -> Result<(Self, u64), ZError> {
let (mem_cap, paddr) = syscall::memory_object_contiguous_physical(size)?;
let virt_addr = syscall::address_space_map(&mem_cap)?;
Ok((
Self {
mem_cap,
virt_addr,
size,
},
paddr,
))
}
pub fn from_cap(mem_cap: Capability) -> Result<Self, ZError> {
let virt_addr = syscall::address_space_map(&mem_cap)?;
let size = syscall::memory_object_inspect(&mem_cap)?;

View file

@ -40,6 +40,15 @@ impl PortServer {
Ok(u16::from_le_bytes(bytes))
}
pub fn recv_null(&self) -> Result<(), ZError> {
let mut caps: [z_cap_t; 0] = [];
let mut bytes: [u8; 0] = [];
port_recv(&self.port_cap, &mut bytes, &mut caps)?;
Ok(())
}
}
pub struct PortClient {

View file

@ -158,6 +158,21 @@ pub fn memory_object_direct_physical(paddr: u64, size: u64) -> Result<Capability
Ok(Capability::take(vmmo_cap))
}
pub fn memory_object_contiguous_physical(size: u64) -> Result<(Capability, u64), ZError> {
let mut vmmo_cap = 0;
let mut paddr = 0;
syscall(
zion::kZionMemoryObjectCreateContiguous,
&zion::ZMemoryObjectCreateContiguousReq {
size,
paddr: &mut paddr,
vmmo_cap: &mut vmmo_cap,
},
)?;
Ok((Capability::take(vmmo_cap), paddr))
}
pub fn memory_object_inspect(mem_cap: &Capability) -> Result<u64, ZError> {
let mut mem_size = 0;
syscall(