syscall: add intial CreateServer call

Signed-off-by: Sean Cross <sean@xobs.io>
This commit is contained in:
Sean Cross 2020-03-13 22:39:49 +08:00
parent c2008e5fe8
commit 7a3e038e6b
8 changed files with 28 additions and 7 deletions

View file

@ -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};

View file

@ -1,4 +1,4 @@
use crate::processtable::ProcessContext;
use crate::services::ProcessContext;
use riscv::register::{sepc, sstatus};
extern "C" {

View file

@ -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];

View file

@ -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))]

View file

@ -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;

View file

@ -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" {

View file

@ -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),
}