diff options
| author | Miguel <m.i@gmx.at> | 2018-08-17 18:17:21 +0200 |
|---|---|---|
| committer | Miguel <m.i@gmx.at> | 2018-08-17 18:17:21 +0200 |
| commit | 340f513e9a41dd5815e79cffe54c3f631407f4e1 (patch) | |
| tree | 08ee2757e891513467cc6fb06f94efb58adc618e /kernel/usermode.c | |
| parent | 51d4dd040a291b62c648ff6cc0d7e0058cf4056f (diff) | |
cleaning up in progress
Diffstat (limited to 'kernel/usermode.c')
| -rw-r--r-- | kernel/usermode.c | 53 |
1 files changed, 8 insertions, 45 deletions
diff --git a/kernel/usermode.c b/kernel/usermode.c index eb19cdf..db4ac9f 100644 --- a/kernel/usermode.c +++ b/kernel/usermode.c @@ -1,64 +1,27 @@ -#include "usermode.h" #define FOOLOS_MODULE_NAME "usermode" -#include "lib/logger/log.h" -#include "syscalls.h" -#include <stddef.h> - -tss_struct sys_tss; //Define the TSS as a global structure - -// generic syscall interface! -/* -int syscall(int call, int p1, int p2, int p3) -{ - int ebx; // will hold return value; - - asm("pusha"); - - // select syscall - asm("mov %0, %%eax"::"m"(call)); - - // pass params - asm("mov %0,%%edx"::"m"(p1)); - asm("mov %0,%%ecx"::"m"(p2)); - asm("mov %0,%%ebx"::"m"(p3)); - - // interrrupt - asm("int $0x80"); +#include "usermode.h" - // get return value - asm("mov %%ebx, %0": "=b" (ebx)); +#include "syscalls.h" +#include "kmalloc.h" - asm("popa"); +#include "lib/logger/log.h" - return ebx; -} -*/ +#include <stddef.h> -/* -int write(int file, char *ptr, int len) -{ - return syscall(SYSCALL_WRITE,file,ptr,len); -} -*/ -/* -int execve(char *name, char **argv, char **env) -{ - return syscall(SYSCALL_EXECVE,name,argv,env); -} -*/ +//https://wiki.osdev.org/Task_State_Segment +tss_struct sys_tss; //Define the TSS as a global structure void install_tss(int cpu_no){ // now fill each value // set values necessary - sys_tss.ss0 = 0x10; //kernel data + sys_tss.ss0 = 0x10; //kernel data sys_tss.esp0 = kballoc(4); // now set the IO bitmap (not necessary, so set above limit) // sys_tss.iomap = ( unsigned short ) sizeof( tss_struct ); } - void switch_to_user_mode() { asm_usermode(); |
