diff options
-rw-r--r-- | arch/i386/mmu.c | 10 | ||||
-rw-r--r-- | cpu/idt.h | 18 | ||||
-rw-r--r-- | elf.c | 2 | ||||
-rw-r--r-- | fs/ext2.c | 2 | ||||
-rw-r--r-- | includes/mmu.h | 2 | ||||
-rw-r--r-- | init/kernel.c | 2 |
6 files changed, 16 insertions, 20 deletions
diff --git a/arch/i386/mmu.c b/arch/i386/mmu.c index 6fff8f2..ccfe894 100644 --- a/arch/i386/mmu.c +++ b/arch/i386/mmu.c @@ -130,7 +130,6 @@ void flush_tlb(void) { } uint32_t first_free_frame(void) { - asm("cli"); for (uint32_t i = 1; i < INDEX_FROM_BIT(num_of_frames); i++) { if (frames[i] == 0xFFFFFFFF) continue; @@ -315,11 +314,12 @@ void *mmu_find_unallocated_virtual_range(void *addr, size_t length) { return addr; } -int mmu_allocate_region(void *ptr, size_t n, mmu_flags flags) { +int mmu_allocate_region(void *ptr, size_t n, mmu_flags flags, + PageDirectory *pd) { + pd = (pd) ? pd : get_active_pagedirectory(); size_t num_pages = n / 0x1000; for (size_t i = 0; i <= num_pages; i++) { - Page *p = get_page((void *)(ptr + i * 0x1000), get_active_pagedirectory(), - PAGE_ALLOCATE, 1); + Page *p = get_page((void *)(ptr + i * 0x1000), pd, PAGE_ALLOCATE, 1); assert(p); int rw = (flags & MMU_FLAG_RW); int kernel = (flags & MMU_FLAG_KERNEL); @@ -433,7 +433,7 @@ extern uint32_t inital_esp; void __attribute__((optimize("O0"))) move_stack(uint32_t new_stack_address, uint32_t size) { mmu_allocate_region((void *)(new_stack_address - size), size, - MMU_FLAG_KERNEL); + MMU_FLAG_KERNEL, NULL); uint32_t old_stack_pointer, old_base_pointer; @@ -54,19 +54,13 @@ typedef struct registers registers_t; struct interrupt_frame; -struct kernel_registers { - // uint32_t ds; - // uint32_t edi, esi, ebp, esp, ebx, edx, ecx, eax; - // uint32_t interrupt_number, error_code; - uint32_t error_code; - uint32_t eip, cs, eflags; -}; - struct registers { - uint32_t ds; - uint32_t edi, esi, ebp, esp, ebx, edx, ecx, eax; - uint32_t interrupt_number, error_code; - uint32_t eip, cs, eflags, useresp, ss; + uint32_t error_code; + uint32_t eip; + uint32_t cs; + uint32_t eflags; + uint32_t esp; + uint32_t ss; }; void idt_init(void); @@ -51,7 +51,7 @@ void *load_elf_file(const char *f, uint32_t *ds) { pages_to_allocate /= 0x1000; mmu_allocate_region((void *)p_vaddr, pages_to_allocate * 0x1000, - MMU_FLAG_RW); + MMU_FLAG_RW, NULL); flush_tlb(); @@ -64,7 +64,7 @@ void ext2_read_block(uint32_t block, void *address, size_t size, void ext2_write_block(uint32_t block, void *address, size_t size, size_t offset) { - // Invalidate a old cache + // Invalidate a old cache for (int i = 0; i < NUM_BLOCK_CACHE; i++) { if (cache[i].block_num == block) { cache[i].block_num = 0; diff --git a/includes/mmu.h b/includes/mmu.h index 39c951b..1df337d 100644 --- a/includes/mmu.h +++ b/includes/mmu.h @@ -31,7 +31,7 @@ typedef struct PageDirectory { uint32_t physical_address; } PageDirectory; -int mmu_allocate_region(void *ptr, size_t n, mmu_flags flags); +int mmu_allocate_region(void *ptr, size_t n, mmu_flags flags, PageDirectory *pd); void mmu_allocate_shared_kernel_region(void *rc, size_t n); void *mmu_find_unallocated_virtual_range(void *addr, size_t length); void mmu_remove_virtual_physical_address_mapping(void *ptr, size_t length); diff --git a/init/kernel.c b/init/kernel.c index 9f507e0..8c0f70c 100644 --- a/init/kernel.c +++ b/init/kernel.c @@ -8,6 +8,7 @@ #include <drivers/keyboard.h> #include <drivers/mouse.h> #include <drivers/pit.h> +#include <drivers/rtl8139.h> #include <drivers/serial.h> #include <drivers/vbe.h> #include <fs/devfs.h> @@ -86,6 +87,7 @@ void kernel_main(uint32_t kernel_end, unsigned long magic, unsigned long addr, add_keyboard(); add_mouse(); + rtl8139_init(); display_driver_init(mb); add_vbe_device(); |