summaryrefslogtreecommitdiff
path: root/kernel
diff options
context:
space:
mode:
authorMiguel <m.i@gmx.at>2018-09-21 12:56:51 +0200
committerMiguel <m.i@gmx.at>2018-09-21 12:56:51 +0200
commitc298ca7e6beaad0bcc32af6d4cf50d41b79f13b7 (patch)
treeb28e9c052cff3264439cad3c41b29262c60ba6ac /kernel
parentf5281689c95758f17628f0286e0265ecf3385a8e (diff)
fix framebufffer/ textmode and clean userspace a little bit more
Diffstat (limited to 'kernel')
-rw-r--r--kernel/kernel.c3
-rw-r--r--kernel/scheduler.c7
-rw-r--r--kernel/syscalls.c19
-rw-r--r--kernel/syscalls.h5
4 files changed, 25 insertions, 9 deletions
diff --git a/kernel/kernel.c b/kernel/kernel.c
index 247e978..ab4332a 100644
--- a/kernel/kernel.c
+++ b/kernel/kernel.c
@@ -119,6 +119,9 @@ void kernel_main(uint32_t eax,uint32_t ebx)
uint32_t addr= ext2_inode_blockstart( VMEM_EXT2_RAMIMAGE,inode,0);
vesa_init(cfg_multiboot->vbe_control_info,cfg_multiboot->vbe_mode_info,addr);
+ // -- STD STREAMS -- //
+ fd_init_std_streams(0,cfg_multiboot->framebuffer_type!=2);
+
// -- KB -- //
klog("Keyboard init ...");
keyboard_init(0);
diff --git a/kernel/scheduler.c b/kernel/scheduler.c
index c13fd4e..667abf8 100644
--- a/kernel/scheduler.c
+++ b/kernel/scheduler.c
@@ -82,8 +82,7 @@ volatile void scheduler_init(uint32_t cpu, void *dir)
task_list[cpu][0].vmem=dir;
task_list[cpu][0].esp = VMEM_CPU_STACK_TOP-0x200;
task_list[cpu][0].esp0 = 0; // esp0 not needed by kernel space tasks
- fd_init_std_streams(task_list[cpu][0].pid);
-
+ fd_init_std_streams(task_list[cpu][0].pid,0);
// this will go to userspace
task_list[cpu][1].parent=0;
@@ -94,7 +93,7 @@ volatile void scheduler_init(uint32_t cpu, void *dir)
task_list[cpu][1].vmem=dir;
task_list[cpu][1].esp = kballoc(4)+4*4096-0x200; // 4 pages stack
task_list[cpu][1].esp0 =kballoc(4)+4*4096; // esp0 not needed by kernel space tasks
- fd_init_std_streams(task_list[cpu][1].pid);
+ fd_init_std_streams(task_list[cpu][1].pid,0);
// sleeper
@@ -106,7 +105,7 @@ volatile void scheduler_init(uint32_t cpu, void *dir)
task_list[cpu][2].vmem=dir;
task_list[cpu][2].esp = kballoc(4)+4*4096-0x200; // 4 pages stack
task_list[cpu][2].esp0 =kballoc(4)+4*4096; // esp0 not needed by kernel space tasks
- fd_init_std_streams(task_list[cpu][2].pid);
+ fd_init_std_streams(task_list[cpu][2].pid,0);
// stacks
task_pusha(task_list[cpu][0].esp);
diff --git a/kernel/syscalls.c b/kernel/syscalls.c
index edc4751..2952c11 100644
--- a/kernel/syscalls.c
+++ b/kernel/syscalls.c
@@ -30,14 +30,24 @@
static fd fds[MAX_PID][MAX_FD];
static bool open_fd[MAX_PID][MAX_FD];
-void fd_init_std_streams(uint32_t pid)
+void fd_init_std_streams(uint32_t pid,bool fb)
{
- if(pid==0)
+ static bool first=true;
+ if(pid==0&&first)
{
+ first=false;
//stdin / stdout /stderr
fds[0][0]=fd_from_ringbuffer();
- fds[0][1]=fd_from_fb_term();
- fds[0][2]=fd_from_fb_term();
+ if(!fb) // ega text mode
+ {
+ fds[0][1]=fd_from_term();
+ fds[0][2]=fd_from_term();
+ }
+ else
+ {
+ fds[0][1]=fd_from_fb_term();
+ fds[0][2]=fd_from_fb_term();
+ }
open_fd[0][0]=true;
open_fd[0][1]=true;
open_fd[0][2]=true;
@@ -52,6 +62,7 @@ void fd_init_std_streams(uint32_t pid)
open_fd[pid][2]=true;
}
}
+//
/** errno helper */
void set_errno(int no)
diff --git a/kernel/syscalls.h b/kernel/syscalls.h
index d90e314..7216a46 100644
--- a/kernel/syscalls.h
+++ b/kernel/syscalls.h
@@ -12,6 +12,9 @@
*
*/
+#include <stdint.h>
+#include <stdbool.h>
+
#define SYSCALL_EXIT 60
#define SYSCALL_EXECVE 64
#define SYSCALL_FORK 72
@@ -40,7 +43,7 @@
#define SYSCALL_DUP2 86
/** Todo move somewhere else and init per process , think how to make thread safe */
-void fd_init_std_streams(uint32_t pid);
+void fd_init_std_streams(uint32_t pid, bool use_framebuffer);
/** returns string representation of the syscall from its number */
char* syscall_get_name(uint32_t num);