From 97629e9f86a9cf7162649550b74b112a4fb1765f Mon Sep 17 00:00:00 2001 From: John Hodge Date: Sat, 27 Jul 2013 18:25:39 +0800 Subject: [PATCH] Kernel/syscalls - Added syscall for Time_Wait --- KernelLand/Kernel/include/syscalls.h | 33 +++++++++++----------- KernelLand/Kernel/include/syscalls.inc.asm | 31 ++++++++++---------- KernelLand/Kernel/syscalls.c | 4 +++ KernelLand/Kernel/syscalls.lst | 1 + 4 files changed, 38 insertions(+), 31 deletions(-) diff --git a/KernelLand/Kernel/include/syscalls.h b/KernelLand/Kernel/include/syscalls.h index 03542e1b..a8c3b347 100644 --- a/KernelLand/Kernel/include/syscalls.h +++ b/KernelLand/Kernel/include/syscalls.h @@ -16,21 +16,22 @@ #define SYS_SETFAULTHANDLER 3 // Set signal Handler #define SYS_YIELD 4 // Yield remainder of timestamp #define SYS_SLEEP 5 // Sleep until messaged or signaled -#define SYS_WAITEVENT 6 // Wait for an event -#define SYS_WAITTID 7 // Wait for a thread to do something -#define SYS_SETNAME 8 // Sets the name of the current thread -#define SYS_GETNAME 9 // Gets the name of a thread -#define SYS_GETTID 10 // Get current thread ID -#define SYS_GETPID 11 // Get current thread group ID -#define SYS_SETPRI 12 // Set process priority -#define SYS_SENDMSG 13 // Send an IPC message -#define SYS_GETMSG 14 // Recieve an IPC message -#define SYS_GETTIME 15 // Get the current timestamp -#define SYS_SPAWN 16 // Spawn a new process -#define SYS_EXECVE 17 // Replace the current process -#define SYS_LOADBIN 18 // Load a binary into the current address space -#define SYS_UNLOADBIN 19 // Unload a loaded binary -#define SYS_LOADMOD 20 // Load a module into the kernel +#define SYS_TIMEDSLEEP 6 // Sleep until a specified time has elapsed +#define SYS_WAITEVENT 7 // Wait for an event +#define SYS_WAITTID 8 // Wait for a thread to do something +#define SYS_SETNAME 9 // Sets the name of the current thread +#define SYS_GETNAME 10 // Gets the name of a thread +#define SYS_GETTID 11 // Get current thread ID +#define SYS_GETPID 12 // Get current thread group ID +#define SYS_SETPRI 13 // Set process priority +#define SYS_SENDMSG 14 // Send an IPC message +#define SYS_GETMSG 15 // Recieve an IPC message +#define SYS_GETTIME 16 // Get the current timestamp +#define SYS_SPAWN 17 // Spawn a new process +#define SYS_EXECVE 18 // Replace the current process +#define SYS_LOADBIN 19 // Load a binary into the current address space +#define SYS_UNLOADBIN 20 // Unload a loaded binary +#define SYS_LOADMOD 21 // Load a module into the kernel #define SYS_GETPHYS 32 // Get the physical address of a page #define SYS_MAP 33 // Map a physical address #define SYS_ALLOCATE 34 // Allocate a page @@ -78,6 +79,7 @@ static const char *cSYSCALL_NAMES[] = { "SYS_SETFAULTHANDLER", "SYS_YIELD", "SYS_SLEEP", + "SYS_TIMEDSLEEP", "SYS_WAITEVENT", "SYS_WAITTID", "SYS_SETNAME", @@ -103,7 +105,6 @@ static const char *cSYSCALL_NAMES[] = { "", "", "", - "", "SYS_GETPHYS", "SYS_MAP", "SYS_ALLOCATE", diff --git a/KernelLand/Kernel/include/syscalls.inc.asm b/KernelLand/Kernel/include/syscalls.inc.asm index eec7edcd..8b54a18f 100644 --- a/KernelLand/Kernel/include/syscalls.inc.asm +++ b/KernelLand/Kernel/include/syscalls.inc.asm @@ -8,21 +8,22 @@ %define SYS_SETFAULTHANDLER 3 ;Set signal Handler %define SYS_YIELD 4 ;Yield remainder of timestamp %define SYS_SLEEP 5 ;Sleep until messaged or signaled -%define SYS_WAITEVENT 6 ;Wait for an event -%define SYS_WAITTID 7 ;Wait for a thread to do something -%define SYS_SETNAME 8 ;Sets the name of the current thread -%define SYS_GETNAME 9 ;Gets the name of a thread -%define SYS_GETTID 10 ;Get current thread ID -%define SYS_GETPID 11 ;Get current thread group ID -%define SYS_SETPRI 12 ;Set process priority -%define SYS_SENDMSG 13 ;Send an IPC message -%define SYS_GETMSG 14 ;Recieve an IPC message -%define SYS_GETTIME 15 ;Get the current timestamp -%define SYS_SPAWN 16 ;Spawn a new process -%define SYS_EXECVE 17 ;Replace the current process -%define SYS_LOADBIN 18 ;Load a binary into the current address space -%define SYS_UNLOADBIN 19 ;Unload a loaded binary -%define SYS_LOADMOD 20 ;Load a module into the kernel +%define SYS_TIMEDSLEEP 6 ;Sleep until a specified time has elapsed +%define SYS_WAITEVENT 7 ;Wait for an event +%define SYS_WAITTID 8 ;Wait for a thread to do something +%define SYS_SETNAME 9 ;Sets the name of the current thread +%define SYS_GETNAME 10 ;Gets the name of a thread +%define SYS_GETTID 11 ;Get current thread ID +%define SYS_GETPID 12 ;Get current thread group ID +%define SYS_SETPRI 13 ;Set process priority +%define SYS_SENDMSG 14 ;Send an IPC message +%define SYS_GETMSG 15 ;Recieve an IPC message +%define SYS_GETTIME 16 ;Get the current timestamp +%define SYS_SPAWN 17 ;Spawn a new process +%define SYS_EXECVE 18 ;Replace the current process +%define SYS_LOADBIN 19 ;Load a binary into the current address space +%define SYS_UNLOADBIN 20 ;Unload a loaded binary +%define SYS_LOADMOD 21 ;Load a module into the kernel %define SYS_GETPHYS 32 ;Get the physical address of a page %define SYS_MAP 33 ;Map a physical address %define SYS_ALLOCATE 34 ;Allocate a page diff --git a/KernelLand/Kernel/syscalls.c b/KernelLand/Kernel/syscalls.c index 7a960114..85fbbf8c 100644 --- a/KernelLand/Kernel/syscalls.c +++ b/KernelLand/Kernel/syscalls.c @@ -72,6 +72,10 @@ void SyscallHandler(tSyscallRegs *Regs) // -- Put the current thread to sleep case SYS_SLEEP: Threads_Sleep(); break; + + case SYS_TIMEDSLEEP: + Time_Delay(Regs->Arg1); + break; // -- Yield current timeslice case SYS_YIELD: Threads_Yield(); break; diff --git a/KernelLand/Kernel/syscalls.lst b/KernelLand/Kernel/syscalls.lst index 6a82de27..2c026d61 100644 --- a/KernelLand/Kernel/syscalls.lst +++ b/KernelLand/Kernel/syscalls.lst @@ -6,6 +6,7 @@ SYS_KILL Send a signal SYS_SETFAULTHANDLER Set signal Handler SYS_YIELD Yield remainder of timestamp SYS_SLEEP Sleep until messaged or signaled +SYS_TIMEDSLEEP Sleep until a specified time has elapsed SYS_WAITEVENT Wait for an event SYS_WAITTID Wait for a thread to do something -- 2.20.1