diff --git a/kernel/src/services.rs b/kernel/src/services.rs index caae30f6c..2170dc01e 100644 --- a/kernel/src/services.rs +++ b/kernel/src/services.rs @@ -5,7 +5,7 @@ pub use crate::arch::ProcessContext; use crate::args::KernelArguments; use crate::mem::{MemoryManagerHandle, PAGE_SIZE}; use core::{mem, slice}; -use xous::{MemoryFlags, PID, SID}; +use xous::{MemoryFlags, CID, PID, SID}; const MAX_PROCESS_COUNT: usize = 32; const MAX_SERVER_COUNT: usize = 32; @@ -490,6 +490,12 @@ impl SystemServices { } Err(xous::Error::OutOfMemory) } + + /// Allocate a new server ID for this process and return the address. + /// If the server table is full, return an error. + pub fn connect_to_server(&mut self, sid: SID) -> Result { + Err(xous::Error::OutOfMemory) + } } /// How many people have checked out the handle object. diff --git a/kernel/src/syscall.rs b/kernel/src/syscall.rs index a9f4358b2..04644fa28 100644 --- a/kernel/src/syscall.rs +++ b/kernel/src/syscall.rs @@ -244,6 +244,12 @@ pub fn handle(call: SysCall) -> xous::Result { .map(|x| xous::Result::ServerID(x)) .unwrap_or_else(|e| xous::Result::Error(e)) } + SysCall::Connect(sid) => { + let mut ss = SystemServicesHandle::get(); + ss.connect_to_server(sid) + .map(|x| xous::Result::ConnectionID(x)) + .unwrap_or_else(|e| xous::Result::Error(e)) + } _ => xous::Result::Error(xous::Error::UnhandledSyscall), } }