summaryrefslogtreecommitdiff
path: root/kernel
diff options
context:
space:
mode:
Diffstat (limited to 'kernel')
-rw-r--r--kernel/interrupts.c5
-rw-r--r--kernel/kernel.c18
-rw-r--r--kernel/kernel.h1
-rw-r--r--kernel/log.h8
-rw-r--r--kernel/mem.c9
-rw-r--r--kernel/mem.h4
-rw-r--r--kernel/syscalls.c7
7 files changed, 40 insertions, 12 deletions
diff --git a/kernel/interrupts.c b/kernel/interrupts.c
index 94c1bb1..94eda2e 100644
--- a/kernel/interrupts.c
+++ b/kernel/interrupts.c
@@ -106,11 +106,12 @@ uint32_t interrupt_handler(uint32_t esp, uint32_t irq)
*/
void interrupts_init(uint16_t sel)
{
- klog("initializing Mouse and Kb input buffers");
+ klog("Initializing Mouse and Kb input buffers");
+ fixme("use a regular pipe-file");
kb_in=ringbuffer_init(1);// 4096 bytes ringbuffer;
mouse_in=ringbuffer_init(1);// 4096 bytes ringbuffer;
- klog("initializing. IDT: 0x%08x, IDTD: 0x%08X",&idt,&idtd);
+ klog("Initializing. IDT: 0x%08x, IDTD: 0x%08X",&idt,&idtd);
// Default interrupt handling
for(int i=0; i<INT_MAX; i++)
diff --git a/kernel/kernel.c b/kernel/kernel.c
index 072cebb..20bfab6 100644
--- a/kernel/kernel.c
+++ b/kernel/kernel.c
@@ -13,6 +13,7 @@
//-- clean below headers --//
#include "sysfs.h"
+#include "pipe.h"
#include "testing/testing.h"
#include "ext2.h"
#include "apic.h"
@@ -62,8 +63,8 @@ void kernel_main(uint32_t eax,uint32_t ebx)
// -- GET CONFIGS -- //
klog("Read Multiboot Structures ...");
multiboot_information *cfg_multiboot;
- cfg_multiboot=multiboot_read(eax, ebx,false);
- elf_multiboot_read(cfg_multiboot); // just show kernel section headers
+ cfg_multiboot=multiboot_read(eax, ebx,true); // true-silent
+ // elf_multiboot_read(cfg_multiboot); // just show kernel section headers
klog("Read Advanced Power Configuration Interface (ACPI) Structures ...");
acpi_information cfg_acpi;
@@ -96,13 +97,12 @@ void kernel_main(uint32_t eax,uint32_t ebx)
x86_set_page_directory(dir);
x86_paging_enable();
- // -- EXT2 RAM IMAGE -- //
- klog("Check ext2 ram image ... ");
+ // -- MOUNTS -- //
+ klog("Mounting ... ");
ext2_dump_info(VMEM_EXT2_RAMIMAGE);
ext2_mount("/");
-
- // -- MOUNT SYSFS --//
- sysfs_mount("/sys/");
+ sysfs_mount("/sys");
+ pipe_mount("/sys/pipes");
// -- APIC -- //
klog("Advanced Programmable Interrupt Controller (APIC) config ...");
@@ -111,7 +111,7 @@ void kernel_main(uint32_t eax,uint32_t ebx)
// -- VESA -- //
fixme("tell terminal syscall somehow if we are vga or textmode");
- klog("Video Electronics Standards Association (VESA) init ... "); // TODO check if text or fb?
+ klog("Video Electronics Standards Association (VESA) init ... ");
// binfont has to fit in ONE ext2 block //
fixme("support binfonts spanning multiple blocks?");
@@ -121,7 +121,7 @@ void kernel_main(uint32_t eax,uint32_t ebx)
// -- STDIN/STDOUT -- //
fixme("do not force order"); // now needed since ids are allocated 0,1,2...
- klog("stdin/stdout init ...");
+ klog("Streams and Pipes init ...");
uint32_t sstderr = syscall_open("~stderr",0,0); // stderr 2
uint32_t sstdout;
if(cfg_multiboot->framebuffer_type==2) // EGA-standard text mode
diff --git a/kernel/kernel.h b/kernel/kernel.h
index e3d7590..5f21bc6 100644
--- a/kernel/kernel.h
+++ b/kernel/kernel.h
@@ -25,6 +25,7 @@ REFERENCES
//#define FOOLOS_UNIT_TESTING // Run Unit Tests
//#define FOOLOS_LOG_OFF // Turn off logging
//#define FOOLOS_COLORLESS // Turn off colors in log
+#define HIDE_FIXME
#define MAX_MOUNTS 10
diff --git a/kernel/log.h b/kernel/log.h
index 74f8776..3a8c746 100644
--- a/kernel/log.h
+++ b/kernel/log.h
@@ -34,7 +34,13 @@ void log(bool color,char *module_name, int prio, char *format_string, ...);
#define klog(...) log(FOOLOS_LOG_COLOR,__FILE__ ":" S2(__LINE__), 10, LOG_LABEL_INFO __VA_ARGS__)
#define kpanic(...) {log(FOOLOS_LOG_COLOR,__FILE__ ":" S2(__LINE__) ,0, LOG_LABEL_PANIC __VA_ARGS__ ); while(1);}
+
+#ifdef HIDE_FIXME
+#define fixme(...) {}
+#else
#define fixme(...) log(FOOLOS_LOG_COLOR,__FILE__ ":" S2(__LINE__) , 10, LOG_LABEL_FIX __VA_ARGS__)
+#endif
+
#define testlog(...) log(FOOLOS_LOG_COLOR,__FILE__ ":" S2(__LINE__) , 10,LOG_LABEL_TEST __VA_ARGS__)
#endif
@@ -46,4 +52,6 @@ void log(bool color,char *module_name, int prio, char *format_string, ...);
#define fixme(...) {}
#endif
+
+
#endif
diff --git a/kernel/mem.c b/kernel/mem.c
index 97450d4..d8ac66a 100644
--- a/kernel/mem.c
+++ b/kernel/mem.c
@@ -15,6 +15,9 @@ extern uint32_t kernel_end[];
extern uint32_t stack_top[];
extern uint32_t stack_bottom[];
+// sysfs inpue
+uint32_t sysfs_in=128;
+
//memory map bit array. Each bit represents a 4KB memory block,
//so uint32_t represents 8*4 blocks
static uint32_t _mmngr_memory_map[PMMNGR_MAP_SIZE]; //128KiB
@@ -233,4 +236,10 @@ void mem_sysfs(ringbuffer *r, void (*f)(ringbuffer *r,char *fmt, ...))
f(r,"physical memory manager");
f(r,"free 4096kb blocks : %d",mem_free_blocks);
f(r,"free bytes : %d",mem_free_blocks*4096);
+ f(r,"in value : 0x%08X",sysfs_in);
+}
+
+void mem_sysfs_set(uint32_t set)
+{
+ sysfs_in=set;
}
diff --git a/kernel/mem.h b/kernel/mem.h
index 5de95a9..6223f0a 100644
--- a/kernel/mem.h
+++ b/kernel/mem.h
@@ -27,7 +27,11 @@
* This is required for memory map et al.
*/
uint32_t mem_init(multiboot_information *info);
+
void* mem_alloc_block ();
void mem_free_block(void* p);
+
uint32_t mem_get_free_blocks_count();
+
void mem_sysfs(ringbuffer *r, void (*f)(ringbuffer *r, char *fmt, ...));
+void mem_sysfs_set(uint32_t in);
diff --git a/kernel/syscalls.c b/kernel/syscalls.c
index aa20616..4f6508a 100644
--- a/kernel/syscalls.c
+++ b/kernel/syscalls.c
@@ -165,7 +165,12 @@ int syscall_read(int file, char *buf, int len)
//TODO: replace with dirent!
int syscall_readdir(const char *name,fs_dirent *dirs,int *pos)
{
- return mount_read_dir(name, dirs, pos);
+ int ret=mount_read_dir(name, dirs, pos);
+ if(ret==-1)
+ {
+ set_errno(ENOENT);
+ }
+ return ret;
}
// for non blocking io?