[Denali] Interrupts working in rust.
This commit is contained in:
parent
df79233bbb
commit
d94f61511b
8 changed files with 654 additions and 123 deletions
|
|
@ -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)?;
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -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(
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue