feat(kernel): SystemControl cap for halt, board device table + boot caps to init, RegionAddress syscall, idle loop services irqs
This commit is contained in:
@@ -89,8 +89,10 @@ pub fn yield_now() {
|
||||
let _ = call0(SYS_YIELD);
|
||||
}
|
||||
|
||||
pub fn halt() -> ! {
|
||||
let _ = call0(SYS_HALT);
|
||||
/// Stops the machine. Needs a SystemControl capability; without one the
|
||||
/// call fails and this spins, since there is nothing sensible to return.
|
||||
pub fn halt(control: CapSlot) -> ! {
|
||||
let _ = raw(SYS_HALT, [control.value() as usize, 0, 0, 0, 0, 0]);
|
||||
loop {}
|
||||
}
|
||||
|
||||
@@ -185,6 +187,12 @@ pub fn map_region(region: CapSlot, va: VirtualAddress, perms: PagePerms) -> Resu
|
||||
.map(|_| ())
|
||||
}
|
||||
|
||||
/// The physical base of the region behind `region`, for programming a
|
||||
/// device's DMA. Pool regions are physically contiguous.
|
||||
pub fn region_address(region: CapSlot) -> Result<usize> {
|
||||
raw(SYS_REGION_ADDRESS, [region.value() as usize, 0, 0, 0, 0, 0]).map(|r| r[1])
|
||||
}
|
||||
|
||||
// ---- capabilities ----
|
||||
|
||||
pub fn delegate(slot: CapSlot, to: CapSlot, permissions: PermissionSet) -> bool {
|
||||
|
||||
Reference in New Issue
Block a user