feat(kernel): console cap gates DebugPutchar, no uart fast path; spawn start arg in a0; delegate returns slot
This commit is contained in:
@@ -8,8 +8,9 @@ use types::syscall_abi::*;
|
||||
|
||||
// ---- capabilities ----
|
||||
|
||||
pub fn delegate(slot: CapSlot, to: CapSlot, permissions: PermissionSet) -> bool {
|
||||
raw(
|
||||
/// Returns the slot the copy landed in, in `to`'s table.
|
||||
pub fn delegate(slot: CapSlot, to: CapSlot, permissions: PermissionSet) -> Option<CapSlot> {
|
||||
slot_of(raw(
|
||||
SYS_DELEGATE,
|
||||
[
|
||||
slot.value() as usize,
|
||||
@@ -19,8 +20,8 @@ pub fn delegate(slot: CapSlot, to: CapSlot, permissions: PermissionSet) -> bool
|
||||
0,
|
||||
0,
|
||||
],
|
||||
)
|
||||
.is_ok()
|
||||
))
|
||||
.ok()
|
||||
}
|
||||
|
||||
/// Copies an unbadged endpoint or notification capability with `badge`
|
||||
|
||||
@@ -46,18 +46,19 @@ pub fn create_process(create_cap: CapSlot) -> Option<CapSlot> {
|
||||
.ok()
|
||||
}
|
||||
|
||||
pub fn spawn_thread(entry: EntryPoint, stack: StackPointer) -> usize {
|
||||
raw(SYS_SPAWN_THREAD, [entry.raw(), stack.raw(), 0, 0, 0, 0]).map_or(NONE, |r| r[1])
|
||||
/// `arg` arrives in the new thread's `a0` (see `libkos::start`).
|
||||
pub fn spawn_thread(entry: EntryPoint, stack: StackPointer, arg: usize) -> usize {
|
||||
raw(SYS_SPAWN_THREAD, [entry.raw(), stack.raw(), arg, 0, 0, 0]).map_or(NONE, |r| r[1])
|
||||
}
|
||||
|
||||
pub fn spawn_thread_in(process_cap: CapSlot, entry: EntryPoint, stack: StackPointer) -> usize {
|
||||
pub fn spawn_thread_in(process_cap: CapSlot, entry: EntryPoint, stack: StackPointer, arg: usize) -> usize {
|
||||
raw(
|
||||
SYS_SPAWN_THREAD_IN,
|
||||
[
|
||||
process_cap.value() as usize,
|
||||
entry.raw(),
|
||||
stack.raw(),
|
||||
0,
|
||||
arg,
|
||||
0,
|
||||
0,
|
||||
],
|
||||
@@ -69,6 +70,6 @@ pub fn kill(process_cap: CapSlot) -> bool {
|
||||
raw(SYS_KILL, [process_cap.value() as usize, 0, 0, 0, 0, 0]).is_ok()
|
||||
}
|
||||
|
||||
pub fn debug_putchar(byte: u8) {
|
||||
let _ = raw(SYS_DEBUG_PUTCHAR, [byte as usize, 0, 0, 0, 0, 0]);
|
||||
pub fn debug_putchar(console: CapSlot, byte: u8) {
|
||||
let _ = raw(SYS_DEBUG_PUTCHAR, [console.value() as usize, byte as usize, 0, 0, 0, 0]);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user