summaryrefslogtreecommitdiff
path: root/kernel/usermode.c
diff options
context:
space:
mode:
authorMiguel <m.i@gmx.at>2018-08-17 18:17:21 +0200
committerMiguel <m.i@gmx.at>2018-08-17 18:17:21 +0200
commit340f513e9a41dd5815e79cffe54c3f631407f4e1 (patch)
tree08ee2757e891513467cc6fb06f94efb58adc618e /kernel/usermode.c
parent51d4dd040a291b62c648ff6cc0d7e0058cf4056f (diff)
cleaning up in progress
Diffstat (limited to 'kernel/usermode.c')
-rw-r--r--kernel/usermode.c53
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();