diff options
39 files changed, 158 insertions, 44 deletions
@@ -36,12 +36,19 @@ CFLAGS+=-gstabs #CFLAGS+= -w # disable all warnings #CFLAGS+= -Wimplicit-function-declaration +CFLAGS+= -Wall #CFLAGS+= -Wextra -#CFLAGS+= -Wall -#CFLAGS+= -Werror -#CFLAGS+= -Werror=implicit-function-declaration +#CFLAGS+= -pedantic +CFLAGS+= -Werror +CFLAGS+= -Werror=implicit-function-declaration + +CFLAGS+= -Wno-unused-variable CFLAGS+= -Wno-int-conversion +CFLAGS+= -Wno-implicit-int CFLAGS+= -Wno-incompatible-pointer-types +CFLAGS+= -Wno-discarded-qualifiers + +#CFLAGS+ = -Wall -Wextra -std=c89 -pedantic -Wmissing-prototypes -Wstrict-prototypes -Wold-style-definition ######## linker flags #################### LDFLAGS= diff --git a/asm/asm_gdt.h b/asm/asm_gdt.h index 523b783..128dbf3 100644 --- a/asm/asm_gdt.h +++ b/asm/asm_gdt.h @@ -4,4 +4,4 @@ */ /** call as asm_setup_gdt(GDT,sizeof(GDT)) */ -void asm_setup_gdt(uint32_t addr, uint32_t size) +void asm_setup_gdt(uint32_t addr, uint32_t size); diff --git a/asm/asm_mp.h b/asm/asm_mp.h index 3ace14a..f207c12 100644 --- a/asm/asm_mp.h +++ b/asm/asm_mp.h @@ -1,2 +1,3 @@ /** Application processors */ void smp_start(); +void asm_smp_unlock(); diff --git a/asm/asm_pit.h b/asm/asm_pit.h index 58067bf..785acb3 100644 --- a/asm/asm_pit.h +++ b/asm/asm_pit.h @@ -20,3 +20,13 @@ void asm_pit_tick(); /** get number of ticks */ uint32_t asm_pit_get_ticks(); + +void asm_pit_sleep_50ms(); +void asm_pit_sleep_40ms(); +void asm_pit_sleep_10ms(); +void asm_pit_sleep_1ms(); + +void asm_pit_rate_50ms(); +void asm_pit_rate_40ms(); +void asm_pit_rate_10ms(); +void asm_pit_rate_1ms(); diff --git a/asm/asm_task.h b/asm/asm_task.h index 40a8c17..d0babb0 100644 --- a/asm/asm_task.h +++ b/asm/asm_task.h @@ -1 +1 @@ -/* empty */ +void task_pusha(uint32_t esp); diff --git a/driver/keyboard.c b/driver/keyboard.c index 7cc93ec..f188cfc 100644 --- a/driver/keyboard.c +++ b/driver/keyboard.c @@ -3,6 +3,8 @@ #include "asm_x86.h" +#include "keyboard.h" +#include "syscalls.h" #include <stdbool.h> @@ -15,7 +17,7 @@ static uint32_t kb_stream; static void put(uint8_t c) { - syscall_write(kb_stream,&c,1); + syscall_write(kb_stream,(char *)&c,1); } void keyboard_init(uint32_t s) diff --git a/driver/keyboard.h b/driver/keyboard.h index 8b13789..03462f3 100644 --- a/driver/keyboard.h +++ b/driver/keyboard.h @@ -1 +1,2 @@ - +void keyboard_init(uint32_t s); +void keyboard_handle(uint8_t in); diff --git a/driver/mouse.c b/driver/mouse.c index ab7ec58..b9e0079 100644 --- a/driver/mouse.c +++ b/driver/mouse.c @@ -1,5 +1,6 @@ #include "kernel/kernel.h" - +#include "mouse.h" +#include "driver/vesa.h" //http://forum.osdev.org/viewtopic.php?t=10247 //based on Mouse.inc by SANiK @@ -130,7 +131,7 @@ void mouse_log() //klog("%d / %d / %02x ",mouse_x, mouse_y,mouse_byte[2]); if (mouse_byte[0] & 1)vesa_put_rect(mouse_x,600-mouse_y,10,10,0x00ffff); //else vesa_put_rect(mouse_x,600-mouse_y,10,10,0x0000ff); - PutFont('X', mouse_x,600-mouse_y, 0xff0000); + PutFont('X', mouse_x,600-mouse_y, 0xff0000,0); } diff --git a/driver/mouse.h b/driver/mouse.h index dbf7393..95bf088 100644 --- a/driver/mouse.h +++ b/driver/mouse.h @@ -1 +1,2 @@ void mouse_handler(); +void mouse_init(); diff --git a/driver/screen.c b/driver/screen.c index f095a15..4d39b77 100644 --- a/driver/screen.c +++ b/driver/screen.c @@ -1,12 +1,13 @@ #include "screen.h" #include "kernel/kernel.h" +#include "asm_x86.h" //#define FOOLOS_CONSOLE static int posx=0; static int posy=0; -static void scr_nextline(); +//static void scr_nextline(); void update_cursor(uint32_t col,uint32_t row) { diff --git a/driver/serial.c b/driver/serial.c index 4e43251..0088868 100644 --- a/driver/serial.c +++ b/driver/serial.c @@ -1,6 +1,7 @@ #include "serial.h" #include "asm_x86.h" // provides x86_inb() and x86_outb() + /** COM1 Port */ static const PORT=0x3f8; diff --git a/driver/terminal.c b/driver/terminal.c index 6ac1533..978a7be 100644 --- a/driver/terminal.c +++ b/driver/terminal.c @@ -38,8 +38,8 @@ typedef enum { ecma48_fg_magenta, ecma48_fg_cyan, ecma48_fg_white, - ecma48_undersore_on, // set def color - ecma48_undersore_off, // set def color + ecma48_underscore_on, // set def color + ecma48_underscore_off, // set def color ecma48_bg_black, ecma48_bg_red, @@ -78,6 +78,32 @@ static void process_graphic_npar(terminal_tty *tty, terminal_settings s) switch(s) { + case ecma48_null_mapping_2: + break; + case ecma48_null_mapping_1: + break; + case ecma48_reset_mapping: + break; + case ecma48_blinkoff: + break; + case ecma48_blink: + break; + case ecma48_nounderline: + break; + case ecma48_underscore_on: + break; + case ecma48_underscore_off: + break; + case ecma48_underscore: + break; + case ecma48_halfbright: + break; + case ecma48_normalbright_1: + break; + case ecma48_normalbright_2: + break; + case ecma48_bold: + break; case ecma48_reset: tty->fg=SCR_WHITE; tty->bg=SCR_BLACK; @@ -285,7 +311,7 @@ void terminal_kb(terminal_tty *tty, uint8_t c) */ // send one ASCII character to the terminal -bool terminal_put(terminal_tty *tty, uint8_t c) +void terminal_put(terminal_tty *tty, uint8_t c) { // CONTROL CHARACTERS @@ -316,7 +342,7 @@ bool terminal_put(terminal_tty *tty, uint8_t c) if(c==0x08) //BACKSPACE { - if(tty->x>0&&tty->command_l>0||!tty->set_echo) + if((tty->x>0&&tty->command_l>0)||!tty->set_echo) { set_char(tty,tty->x-1,tty->y,' ',tty->fg,tty->bg); tty->x--; @@ -525,6 +551,6 @@ bool terminal_put(terminal_tty *tty, uint8_t c) //cusor pos tty->screen->update_cursor(tty->x,tty->y); - return true; + return; } diff --git a/driver/terminal.h b/driver/terminal.h index be711f5..fac513d 100644 --- a/driver/terminal.h +++ b/driver/terminal.h @@ -71,7 +71,7 @@ typedef struct terminal_tty_struct terminal_tty terminal_init(term_out *screen,term_in *input); -bool terminal_put(terminal_tty *tty, uint8_t c); +void terminal_put(terminal_tty *tty, uint8_t c); void terminal_kb(terminal_tty *tty, uint8_t c); #endif diff --git a/driver/timer.c b/driver/timer.c index d30a299..1ceebc5 100644 --- a/driver/timer.c +++ b/driver/timer.c @@ -1,6 +1,7 @@ #include "timer.h" #include "asm_x86.h" +#include "asm_pit.h" static volatile uint64_t task_system_clock_start=0; diff --git a/driver/vesa.c b/driver/vesa.c index 090596c..bdf1c9a 100644 --- a/driver/vesa.c +++ b/driver/vesa.c @@ -34,12 +34,14 @@ void vesa_update_cursor(uint32_t col,uint32_t row) } // helper_funcs +/* static void vesa_print_char_col(int x, int y, char c, char col_fg, char col_bg) { // uint16_t attrib = (col_bg << 4) | (col_fg & 0x0F); // uint16_t* video_mem=(uint16_t *)SCR_VIDEOMEM+(x+y*SCR_REAL_WIDTH); // *video_mem=c | (attrib << 8) ; } +*/ // same colors as in screen.h static uint32_t cols[] = { diff --git a/driver/vesa.h b/driver/vesa.h index ec98e84..7122d68 100644 --- a/driver/vesa.h +++ b/driver/vesa.h @@ -48,3 +48,5 @@ uint32_t vesa_init(vbeinfo *info,vbemodeinfo *mode,foolfont *rawfont); void PutConsoleChar(char c, int color); void PutConsole(char *str, int color); +void vesa_put_rect(int x, int y, int w , int h, int color); +void PutFont(char c, int x,int y, int color_fg,int color_bg); @@ -1,6 +1,7 @@ #include "kernel/kernel.h" #include <stdint.h> #include "ext2.h" +#include "lib/string/string.h" #define EI_NIDENT 16 @@ -149,14 +150,14 @@ uint32_t load_elf(char *name, uint32_t *alloc) //uint8_t *data=vaddr+phdr->p_offset; uint8_t *data=vaddr+phdr->p_offset+phdr->p_filesz-1; - for(uint8_t *addr=phdr->p_vaddr+phdr->p_filesz-1; addr>=phdr->p_vaddr; addr--) + for(uint8_t *addr=phdr->p_vaddr+phdr->p_filesz-1; (uint32_t)addr>=phdr->p_vaddr; addr--) { *addr=*data; data--; } // let's zero init bss and set alloc (heap) just right after it! - for(uint8_t *addr=phdr->p_vaddr+phdr->p_filesz; addr<=phdr->p_vaddr+phdr->p_memsz; addr++) + for(uint8_t *addr=phdr->p_vaddr+phdr->p_filesz; (uint32_t)addr<=phdr->p_vaddr+phdr->p_memsz; addr++) { *addr=0; } @@ -1,2 +1 @@ - uint32_t load_elf(char *name, uint32_t *alloc); @@ -1,6 +1,9 @@ #include "kernel/kernel.h" // ext2 minidriver // based on osdev wiki article: http://wiki.osdev.org/Ext2 +// +// +#include "lib/string/string.h" @@ -116,12 +119,13 @@ int ext2_check(uint8_t *ram) ext2_superblock super; ext2_superblock_ext super_ext; uint8_t *ptr=ram+1024; - ram_read(ptr,&super,sizeof(super),1); + ram_read((char*)ptr,&super,sizeof(super),1); if(super.ext2_sig!=0xef53){ klog("addr: 0x%08X",ram); kpanic("no ext2 signature found, where ram-image expected"); } + return 1; } ext2_inode ext2_get_inode(uint8_t *ram,int inode_num) @@ -133,7 +137,7 @@ ext2_inode ext2_get_inode(uint8_t *ram,int inode_num) ext2_inode inode; uint8_t *ptr=ram+1024; - ram_read(ptr,&super,sizeof(super),1); + ram_read((char*)ptr,&super,sizeof(super),1); if(super.ext2_sig!=0xef53) { klog("addr: 0x%08X",ram); @@ -150,13 +154,13 @@ ext2_inode ext2_get_inode(uint8_t *ram,int inode_num) ptr=ram+block_size*descriptor_start_block; ptr+=sizeof(desc)*block_group; // skip to our descriptor; - ram_read(ptr,&desc,sizeof(desc),1); // read descriptor + ram_read((char*)ptr,&desc,sizeof(desc),1); // read descriptor // read our inode; ptr=ram+block_size*desc.addr_inode_table; ptr+=128*((inode_num-1)%super.inodes_per_group); - ram_read(ptr,&inode,sizeof(inode),1); //get inode 2 (rood-directory) + ram_read((char*)ptr,&inode,sizeof(inode),1); //get inode 2 (rood-directory) return inode; @@ -189,8 +193,8 @@ void* ext2_get_indirectstart_double(void *start, uint32_t block_size, uint32_t i int ext2_inode_content(char *ram,int inode_nr,uint8_t *ramdest,int max) { - ext2_check(ram); - ext2_inode inode=ext2_get_inode(ram,inode_nr); + ext2_check((uint8_t *)ram); + ext2_inode inode=ext2_get_inode((uint8_t*)ram,inode_nr); int pos=0; int block=0; @@ -248,7 +252,7 @@ int ext2_inode_content(char *ram,int inode_nr,uint8_t *ramdest,int max) } klog("Fool Check Sum: 0x%08X for %d bytes",sum,count); - + return 1; } int ext2_filename_to_inode_traverse(uint8_t *ram, char *path,int inode_start) @@ -322,11 +326,11 @@ int ext2_read_dir(uint8_t *ram, int inode_nr,fs_dirent *dirs,int max) // read dir data ext2_dir dir; - ram_read(ptr,&dir,sizeof(dir),1); + ram_read((char*)ptr,&dir,sizeof(dir),1); // read name ptr+=sizeof(dir); - ram_read(ptr,&buf,sizeof(char),dir.name_length_low); + ram_read((char*)ptr,&buf,sizeof(char),dir.name_length_low); ptr+=dir.name_length_low; buf[dir.name_length_low]=0; @@ -13,7 +13,7 @@ typedef struct int(* wrtie)(char *buf, int len); int(* close)(); - int(* stat)(struct stat *buf); + int(* stat)(void *buf); void *data; //opaque @@ -20,6 +20,8 @@ typedef struct fs_dirent_struct }fs_dirent; int fs_readdir(const char *name,fs_dirent *dirs,int max); +void fs_content(char *path, uint32_t dest, uint32_t max_bytes); void fs_mount(multiboot_information *info); // mounts ext2 ramimage from module as root +uint32_t fs_get_root_ext2_ramimage(); #endif @@ -12,7 +12,7 @@ typedef struct mount_struct char path[256]; // where are we mounted int (*getdents) (struct mount_struct*, uint32_t file_desciptor, fs_dirent *entries, uint32_t max_count); file (*open) (struct mount_struct*,char *path); - void *data //opaque + void *data; //opaque }mount; 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); |
