diff options
| author | Miguel <m.i@gmx.at> | 2018-09-09 11:49:30 +0200 |
|---|---|---|
| committer | Miguel <m.i@gmx.at> | 2018-09-09 11:49:30 +0200 |
| commit | e85a68e1536a0f6505300e1cb79f06b9743b00f7 (patch) | |
| tree | c503a7681720925c5f4923e26c01f7b2e697023d /kernel | |
| parent | fc1d491479abd74a1e038ad9ff7d4d330d79e4a8 (diff) | |
fixing implicit func declarations!
Diffstat (limited to 'kernel')
| -rw-r--r-- | kernel/acpi.c | 3 | ||||
| -rw-r--r-- | kernel/gdt.c | 15 | ||||
| -rw-r--r-- | kernel/gdt.h | 3 | ||||
| -rw-r--r-- | kernel/interrupts.c | 3 | ||||
| -rw-r--r-- | kernel/interrupts.h | 1 | ||||
| -rw-r--r-- | kernel/kernel.c | 7 | ||||
| -rw-r--r-- | kernel/mem.h | 1 | ||||
| -rw-r--r-- | kernel/mp.c | 9 | ||||
| -rw-r--r-- | kernel/ringbuffer.c | 1 | ||||
| -rw-r--r-- | kernel/scheduler.c | 10 | ||||
| -rw-r--r-- | kernel/scheduler.h | 2 | ||||
| -rw-r--r-- | kernel/smp.c | 5 | ||||
| -rw-r--r-- | kernel/smp.h | 6 | ||||
| -rw-r--r-- | kernel/syscalls.c | 3 | ||||
| -rw-r--r-- | kernel/syscalls.h | 5 | ||||
| -rw-r--r-- | kernel/vmem.c | 4 | ||||
| -rw-r--r-- | kernel/vmem.h | 2 |
17 files changed, 66 insertions, 14 deletions
diff --git a/kernel/acpi.c b/kernel/acpi.c index 5192c37..8b139bf 100644 --- a/kernel/acpi.c +++ b/kernel/acpi.c @@ -1,6 +1,5 @@ #include "kernel.h" #include <stdint.h> -#include <stdbool.h> #include "smp.h" #include "lib/string/string.h" @@ -170,7 +169,7 @@ bool acpi_find(smp_processors *procdata) search++; - if(search==0xa0000)search=0xe0000; + if((uint32_t)search==0xa0000)search=0xe0000; } return false; diff --git a/kernel/gdt.c b/kernel/gdt.c index bf8f203..48bc284 100644 --- a/kernel/gdt.c +++ b/kernel/gdt.c @@ -1,6 +1,8 @@ // http://wiki.osdev.org/GDT_Tutorial -#include "kernel/kernel.h" -#include "kernel/gdt.h" +#include "kernel.h" +#include "gdt.h" +#include "asm_gdt.h" +#include "kmalloc.h" #include <stdint.h> @@ -50,6 +52,11 @@ struct gdt_entry_bits unsigned int base_high :8; } __packed; //or __attribute__((packed)) +void setup_gdt(uint8_t *gdt_struct) +{ + asm_setup_gdt(&gdt_struct[0],8*GDT_SIZE); +} + /** * \param target A pointer to the 8-byte GDT entry * \param source An arbitrary structure describing the GDT entry @@ -153,7 +160,3 @@ void gdt_init() } -void setup_gdt(uint8_t *gdt_struct) -{ - asm_setup_gdt(&gdt_struct[0],8*GDT_SIZE); -} diff --git a/kernel/gdt.h b/kernel/gdt.h index a234ea4..314cc99 100644 --- a/kernel/gdt.h +++ b/kernel/gdt.h @@ -2,6 +2,8 @@ // http://wiki.osdev.org/TSS // http://wiki.osdev.org/Global_Descriptor_Table +#include <stdint.h> + typedef volatile struct strtss{ unsigned short link; unsigned short link_h; @@ -44,3 +46,4 @@ typedef volatile struct strtss{ }__attribute__((packed)) tss_struct; void gdt_init(); +void install_tss(uint32_t cpu,uint32_t esp0); diff --git a/kernel/interrupts.c b/kernel/interrupts.c index 992889f..69f5316 100644 --- a/kernel/interrupts.c +++ b/kernel/interrupts.c @@ -2,8 +2,11 @@ #include "asm_int.h" #include "asm_pit.h" #include "driver/mouse.h" +#include "driver/keyboard.h" #include "interrupts.h" +#include "scheduler.h" #include "asm_x86.h" +#include "smp.h" /** The size of our interrupts table */ #define INT_MAX 256 // 0-255 diff --git a/kernel/interrupts.h b/kernel/interrupts.h index ab76092..aafd5d4 100644 --- a/kernel/interrupts.h +++ b/kernel/interrupts.h @@ -26,4 +26,5 @@ */ void interrupts_init(uint16_t sel); +void int_install(); #endif diff --git a/kernel/kernel.c b/kernel/kernel.c index bdb34d9..5a17567 100644 --- a/kernel/kernel.c +++ b/kernel/kernel.c @@ -15,9 +15,16 @@ #include "syscalls.h" #include "fifo.h" #include "mp.h" +#include "asm_mp.h" +#include "asm_x86.h" #include "interrupts.h" #include "ringbuffer.h" #include "driver/screen.h" +#include "asm_pic.h" + +#include "fs/fs.h" +#include "kmalloc.h" +#include "driver/vesa.h" /* F00L 0S Entry point (called directly from asm/multiboot.asm */ void kernel_main(uint32_t eax,uint32_t ebx) diff --git a/kernel/mem.h b/kernel/mem.h index 42bf84d..76d12b0 100644 --- a/kernel/mem.h +++ b/kernel/mem.h @@ -3,3 +3,4 @@ typedef uint32_t physical_address; physical_address* pmmngr_alloc_block (); void pmmngr_free_block (physical_address* p); uint32_t mem_init(multiboot_information *info); +uint32_t mem_get_free_blocks_count(); diff --git a/kernel/mp.c b/kernel/mp.c index df7549a..ba6a042 100644 --- a/kernel/mp.c +++ b/kernel/mp.c @@ -4,6 +4,7 @@ #include "asm_x86.h" #include "smp.h" +#include "lib/string/string.h" typedef struct mp_fps_struct { @@ -147,9 +148,9 @@ bool mp_find(smp_processors *procdata) klog("Looking for Mp Floating Ponter Struct..."); uint8_t *addr=0x8000; - while(addr<=0xfffff) + while((uint32_t)addr<=0xfffff) { - if(!strcmp_l("_MP_",addr,4)) + if(!strcmp_l("_MP_",(char*)addr,4)) { // klog("Found at 0x%04X",addr); if(do_mp_fps(addr,procdata))return true; @@ -158,9 +159,9 @@ bool mp_find(smp_processors *procdata) } addr=0x190000-1025; - while(addr<=0x190000+1024) + while((uint32_t)addr<=0x190000+1024) { - if(!strcmp_l("_MP_",addr,4)) + if(!strcmp_l("_MP_",(char*)addr,4)) { // klog("Found at 0x%04X",addr); if(do_mp_fps(addr,procdata))return true; diff --git a/kernel/ringbuffer.c b/kernel/ringbuffer.c index d6d515d..fd87727 100644 --- a/kernel/ringbuffer.c +++ b/kernel/ringbuffer.c @@ -1,5 +1,6 @@ #include "ringbuffer.h" +#include "kmalloc.h" // TODO: this is disabled because a kb interrupt can occur anytime // and the kernel will need to access the ringbuffer while we are accessing! diff --git a/kernel/scheduler.c b/kernel/scheduler.c index 72165f9..20c6f35 100644 --- a/kernel/scheduler.c +++ b/kernel/scheduler.c @@ -1,8 +1,12 @@ #include "scheduler.h" #include "kernel.h" +#include "gdt.h" #include "mem.h" +#include "fs/elf.h" #include "asm_x86.h" +#include "asm_task.h" +#include "asm_usermode.h" #include "kmalloc.h" #include "vmem.h" @@ -32,13 +36,14 @@ static volatile struct task_list_struct volatile uint32_t ecx; volatile uint32_t edx; -}volatile task_list[MAX_TASKS]; +}task_list[MAX_TASKS]; volatile int task_reset(uint32_t pid, uint32_t entry, uint32_t stack) { uint32_t *stk=task_list[pid].esp; stk[14]=entry; stk[17]=stack; + return 1; } volatile int add_task(uint32_t parent,uint32_t vmem) @@ -199,6 +204,7 @@ volatile uint32_t task_syscall(uint32_t eax,uint32_t ebx, uint32_t ecx, uint32_t task_list[current_task].edx=edx; task_list[2].wait=false; + return 1; } //TODO: free vmem too! @@ -211,6 +217,7 @@ volatile uint32_t task_exit(uint32_t pid) task_list[parent_pid].wait=false; klog("[%d] exit", pid); vmem_free_dir(task_list[pid].vmem); + return 1; } volatile uint32_t task_wait(uint32_t pid) @@ -218,6 +225,7 @@ volatile uint32_t task_wait(uint32_t pid) klog("[%d] wait", pid); task_list[pid].wait=true; task_list[pid].eax=SYSCALL_WAIT; + return 1; } volatile uint32_t task_fork(uint32_t pid) diff --git a/kernel/scheduler.h b/kernel/scheduler.h index e89e8a3..a6eacd8 100644 --- a/kernel/scheduler.h +++ b/kernel/scheduler.h @@ -10,3 +10,5 @@ volatile uint32_t task_fork(uint32_t pid); volatile uint32_t task_clone(uint32_t pid); volatile uint32_t task_wait(uint32_t pid); volatile int task_reset(uint32_t pid, uint32_t entry, uint32_t stack); +volatile uint32_t task_syscall(uint32_t eax,uint32_t ebx, uint32_t ecx, uint32_t edx); +volatile uint32_t my_scheduler(uint32_t oldesp,uint32_t force_pid); diff --git a/kernel/smp.c b/kernel/smp.c index 0c8d2dd..c965b2e 100644 --- a/kernel/smp.c +++ b/kernel/smp.c @@ -7,9 +7,14 @@ #include <stdint.h> #include "smp.h" +#include "gdt.h" #include "mem.h" +#include "interrupts.h" +#include "kmalloc.h" #include "spinlock.h" #include "asm_x86.h" +#include "asm_pit.h" +#include "asm_mp.h" #define APIC_APICID 0x20 #define APIC_APICVER 0x30 diff --git a/kernel/smp.h b/kernel/smp.h index ef0a660..e99c77b 100644 --- a/kernel/smp.h +++ b/kernel/smp.h @@ -3,6 +3,7 @@ #include "kernel.h" +#include <stdbool.h> typedef struct { @@ -20,4 +21,9 @@ typedef struct }smp_processors; +void apicEOI(); +uint32_t apicID(); +bool acpi_find(smp_processors *procdata); +void smp_start_aps(smp_processors *pros); + #endif diff --git a/kernel/syscalls.c b/kernel/syscalls.c index 67ae48d..a49429d 100644 --- a/kernel/syscalls.c +++ b/kernel/syscalls.c @@ -95,8 +95,10 @@ int syscall_read(int file, char *buf, int len) buf++; l++; + return l; if(l==len)return l; if(c=='\n')return l; + } //TODO: replace with dirent! @@ -375,4 +377,5 @@ uint32_t syscall_generic(uint32_t nr,uint32_t p1, uint32_t p2, uint32_t p3, uint case SYSCALL_POLL : return syscall_poll(p1); } + return -1; } diff --git a/kernel/syscalls.h b/kernel/syscalls.h index 56e78a2..7335e2c 100644 --- a/kernel/syscalls.h +++ b/kernel/syscalls.h @@ -22,6 +22,11 @@ #define SYSCALL_POLL 80 //shit!? #define SYSCALL_CLONE 83 +uint32_t syscall_generic(uint32_t nr,uint32_t p1, uint32_t p2, uint32_t p3, uint32_t pid); +int chk_syscall_read(int file, char *buf, int len); +int syscall_open(char *name, int flags, int mode); +int syscall_write(int file, char *buf, int len); + // new planned syscalls for graphx // TODO: split ncurses and our syscalls?? diff --git a/kernel/vmem.c b/kernel/vmem.c index 0dd896c..3b5be30 100644 --- a/kernel/vmem.c +++ b/kernel/vmem.c @@ -4,6 +4,8 @@ #include "asm_x86.h" #include "mem.h" #include "vmem.h" +#include "kmalloc.h" +#include "lib/string/string.h" static uint32_t kernel_pages; uint32_t fb_addr; @@ -100,7 +102,7 @@ physical_addr pd_entry_get_frame (pd_entry* e) return *e&I86_PDE_FRAME; } -boolpd_entry_is_present (pd_entry e) +bool pd_entry_is_present (pd_entry e) { return e&I86_PDE_PRESENT; } diff --git a/kernel/vmem.h b/kernel/vmem.h index 541a84a..2a8e7cc 100644 --- a/kernel/vmem.h +++ b/kernel/vmem.h @@ -81,3 +81,5 @@ typedef struct pdirectory_struct { }pdirectory; pdirectory* vmem_init(uint32_t kernel_blocks,uint32_t fb_addr,uint32_t apic_addr, uint32_t ioapic_addr); +void vmem_free_dir(pdirectory *dir); +pdirectory* vmem_new_space_dir(pdirectory *copy_dir,bool stack_only); |
