From 7a3e038e6b54624ef7c4fbf4fb2d4df73bb8426e Mon Sep 17 00:00:00 2001 From: Sean Cross Date: Fri, 13 Mar 2020 22:39:49 +0800 Subject: [PATCH] syscall: add intial CreateServer call Signed-off-by: Sean Cross --- kernel/src/arch/riscv/irq.rs | 2 +- kernel/src/arch/riscv/syscall.rs | 2 +- kernel/src/irq.rs | 2 +- kernel/src/main.rs | 4 ++-- kernel/src/mem.rs | 2 +- kernel/src/{processtable.rs => services.rs} | 0 kernel/src/syscall.rs | 2 +- xous-rs/src/syscall.rs | 21 +++++++++++++++++++++ 8 files changed, 28 insertions(+), 7 deletions(-) rename kernel/src/{processtable.rs => services.rs} (100%) diff --git a/kernel/src/arch/riscv/irq.rs b/kernel/src/arch/riscv/irq.rs index 9d23fb570..a7bea5825 100644 --- a/kernel/src/arch/riscv/irq.rs +++ b/kernel/src/arch/riscv/irq.rs @@ -1,7 +1,7 @@ use crate::arch::current_pid; use crate::arch::mem::MemoryMapping; use crate::mem::MemoryManagerHandle; -use crate::processtable::{ProcessContext, ProcessState, SystemServicesHandle, RETURN_FROM_ISR}; +use crate::services::{ProcessContext, ProcessState, SystemServicesHandle, RETURN_FROM_ISR}; use riscv::register::{scause, sepc, sie, sstatus, stval, vexriscv::sim, vexriscv::sip}; use xous::{SysCall, PID}; diff --git a/kernel/src/arch/riscv/syscall.rs b/kernel/src/arch/riscv/syscall.rs index 252feb6ec..4ec5f9b0f 100644 --- a/kernel/src/arch/riscv/syscall.rs +++ b/kernel/src/arch/riscv/syscall.rs @@ -1,4 +1,4 @@ -use crate::processtable::ProcessContext; +use crate::services::ProcessContext; use riscv::register::{sepc, sstatus}; extern "C" { diff --git a/kernel/src/irq.rs b/kernel/src/irq.rs index 4d6f9e921..487780448 100644 --- a/kernel/src/irq.rs +++ b/kernel/src/irq.rs @@ -1,5 +1,5 @@ use xous::PID; -use crate::processtable::SystemServicesHandle; +use crate::services::SystemServicesHandle; use crate::arch; static mut IRQ_HANDLERS: [Option<(PID, *mut usize, *mut usize)>; 32] = [None; 32]; diff --git a/kernel/src/main.rs b/kernel/src/main.rs index 9f33b1bb5..f2958d70d 100644 --- a/kernel/src/main.rs +++ b/kernel/src/main.rs @@ -16,11 +16,11 @@ mod arch; mod args; mod irq; mod mem; -mod processtable; +mod services; mod syscall; use mem::MemoryManagerHandle; -use processtable::SystemServicesHandle; +use services::SystemServicesHandle; use xous::*; #[cfg(not(test))] diff --git a/kernel/src/mem.rs b/kernel/src/mem.rs index e892478e7..3013de033 100644 --- a/kernel/src/mem.rs +++ b/kernel/src/mem.rs @@ -1,5 +1,5 @@ use crate::args::KernelArguments; -use crate::processtable::SystemServicesHandle; +use crate::services::SystemServicesHandle; use core::fmt; use core::mem; use core::slice; diff --git a/kernel/src/processtable.rs b/kernel/src/services.rs similarity index 100% rename from kernel/src/processtable.rs rename to kernel/src/services.rs diff --git a/kernel/src/syscall.rs b/kernel/src/syscall.rs index 7b8581d7f..b79673a8c 100644 --- a/kernel/src/syscall.rs +++ b/kernel/src/syscall.rs @@ -1,7 +1,7 @@ use crate::arch; use crate::irq::interrupt_claim; use crate::mem::{MemoryManagerHandle, PAGE_SIZE}; -use crate::processtable::{ProcessState, SystemServicesHandle}; +use crate::services::{ProcessState, SystemServicesHandle}; use xous::*; // extern "Rust" { diff --git a/xous-rs/src/syscall.rs b/xous-rs/src/syscall.rs index 341e44477..b0dbb11e2 100644 --- a/xous-rs/src/syscall.rs +++ b/xous-rs/src/syscall.rs @@ -219,6 +219,23 @@ pub enum SysCall { /// * **ProcessTerminated**: The process has crashed. SwitchTo(PID, usize /* thread ID */), + /// Create a new Server + /// + /// This will return a 128-bit Server ID that can be used to send messages + /// to this server. + /// + /// # Returns + /// + /// The ServerId can be assembled to form a 128-bit server ID in native + /// byte order. + /// + /// # Errors + /// + /// * **OutOfMemory**: The server table was full and a new server couldn't + /// be created. + CreateServer, + + /// This syscall does not exist Invalid(usize, usize, usize, usize, usize, usize, usize), } @@ -235,6 +252,7 @@ enum SysCallNumber { DecreaseHeap = 11, UpdateMemoryFlags = 12, SetMemRegion = 13, + CreateServer = 14, Invalid, } @@ -335,6 +353,7 @@ impl SysCall { 0, ], + SysCall::CreateServer => [SysCallNumber::CreateServer as usize, 0, 0, 0, 0, 0, 0, 0], SysCall::Invalid(a1, a2, a3, a4, a5, a6, a7) => { [SysCallNumber::Invalid as usize, a1, a2, a3, a4, a5, a6, a7] } @@ -378,6 +397,7 @@ impl SysCall { Some(SysCallNumber::SetMemRegion) => { SysCall::SetMemRegion(a1 as PID, MemoryType::from(a2), a3 as *mut usize, a4) } + Some(SysCallNumber::CreateServer) => SysCall::CreateServer, Some(SysCallNumber::Invalid) => SysCall::Invalid(a1, a2, a3, a4, a5, a6, a7), None => return Err(InvalidSyscall {}), }) @@ -399,6 +419,7 @@ pub enum Result { MemoryRange(MemoryRange), ResumeResult(usize, usize, usize, usize, usize, usize), ResumeProcess, + ServerID(usize, usize, usize, usize), UnknownResult(usize, usize, usize, usize, usize, usize, usize), }