diff options
Diffstat (limited to 'kernel')
| -rw-r--r-- | kernel/kernel.c | 3 | ||||
| -rw-r--r-- | kernel/scheduler.c | 7 | ||||
| -rw-r--r-- | kernel/syscalls.c | 19 | ||||
| -rw-r--r-- | kernel/syscalls.h | 5 |
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); |
