diff --git a/Makefile b/Makefile index 1cb03ee..b40d4a5 100644 --- a/Makefile +++ b/Makefile @@ -23,7 +23,7 @@ os.iso: kernel/kernel.elf initrd/* kernel/kernel.elf: $(OBJ) i386-elf-ld -T linker.ld -o $@ $^ -%.o: %.c h_files +%.o: %.c $(CC) $(CFLAGS) -c $< -o $@ %.o: %.asm @@ -32,9 +32,5 @@ kernel/kernel.elf: $(OBJ) %.o: %.s i386-elf-as $< -o $@ -h_files: cpu/$(PLAT)/memory.h - rm -f cpu/memory.h - cp cpu/$(PLAT)/memory.h cpu/memory.h - clean: rm -rf $(OBJ) kernel/cstart.o cpu/memory.h os.iso */*.elf iso/boot/initrd.tar diff --git a/cpu/i386/isr.c b/cpu/i386/isr.c index c6a868c..aa3445a 100644 --- a/cpu/i386/isr.c +++ b/cpu/i386/isr.c @@ -2,6 +2,7 @@ #include "idt.h" #include "gdt.h" #include "ports.h" +#include "paging.h" #include "../halt.h" #include "../drivers/vga.h" #include "../tasking.h" @@ -172,6 +173,10 @@ void isr_handler(registers_t r) { tasking_yield(); } else if (r.eax==2) { tasking_createTask((void*)r.ebx); + } else if (r.eax==3) { + r.ebx=(uint32_t)alloc_pages(r.ebx); + } else if (r.eax==4) { + alloc_pages_virt(r.ebx,(void*)r.ecx); } break; } diff --git a/cpu/i386/memory.c b/cpu/i386/memory.c deleted file mode 100644 index 1e1fafb..0000000 --- a/cpu/i386/memory.c +++ /dev/null @@ -1,10 +0,0 @@ -#include "paging.h" -#include - -void* alloc_memory(uint32_t num_blocks) { - return alloc_pages(num_blocks); -} - -void alloc_memory_virt(uint32_t num_blocks,void* addr) { - return alloc_pages_virt(num_blocks,addr); -} diff --git a/cpu/i386/memory.h b/cpu/i386/memory.h deleted file mode 100644 index 15dba19..0000000 --- a/cpu/i386/memory.h +++ /dev/null @@ -1,10 +0,0 @@ -#ifndef CPU_MEMORY_H -#define CPU_MEMORY_H - -#include -#define BLK_SZ 4096 - -void* alloc_memory(uint32_t blocks); -void alloc_memory_virt(uint32_t num_blocks,void* addr); - -#endif diff --git a/cpu/i386/paging.c b/cpu/i386/paging.c index d9138de..a7a2c48 100644 --- a/cpu/i386/paging.c +++ b/cpu/i386/paging.c @@ -3,6 +3,8 @@ #include "paging_helpers.h" #include "paging.h" #include "pmem.h" +#include + static uint32_t page_directory[1024] __attribute__((aligned(4096))); static uint32_t kern_page_tables[NUM_KERN_DIRS*1024] __attribute__((aligned(4096))); static uint32_t smap_page_tables[2048] __attribute__((aligned(4096))); diff --git a/cpu/i386/tasking.c b/cpu/i386/tasking.c index 6772e2a..8721439 100644 --- a/cpu/i386/tasking.c +++ b/cpu/i386/tasking.c @@ -10,6 +10,7 @@ push %eax; \ #include "../../libc/stdlib.h" #include "../../libc/stdio.h" #include "memory.h" +#include "gdt.h" #include #define STACK_PAGES 2 diff --git a/kernel/kernel.c b/kernel/kernel.c index fa3e05e..7ebe72e 100644 --- a/kernel/kernel.c +++ b/kernel/kernel.c @@ -3,7 +3,6 @@ #include "../drivers/pci.h" #include "../drivers/serial.h" #include "../cpu/i386/ports.h" -#include "../cpu/memory.h" #include "vfs.h" #include "../fs/devfs.h" #include "../fs/initrd.h" @@ -11,6 +10,7 @@ #include #include #include +#include #include #include "klog.h" #include "elf.h" diff --git a/libc/memory.c b/libc/memory.c new file mode 100644 index 0000000..b66ef2b --- /dev/null +++ b/libc/memory.c @@ -0,0 +1,18 @@ +#include + +void* alloc_memory(uint32_t num_pages) { + void* address; + asm volatile(" \ + mov $3, %%eax; \ + int $80; \ + ":"=b"(address):"b"(num_pages)); + return address; +} + +void alloc_memory_virt(uint32_t num_pages,void* addr) { + void* address; + asm volatile(" \ + mov $3, %%eax; \ + int $80; \ + "::"b"(num_pages),"c"(addr)); +} diff --git a/libc/memory.h b/libc/memory.h new file mode 100644 index 0000000..10df624 --- /dev/null +++ b/libc/memory.h @@ -0,0 +1,11 @@ +#ifndef MEMORY_H +#define MEMORY_H + +#include + +#define BLK_SZ 4096 + +void* alloc_memory(uint32_t num_pages); +void alloc_memory_virt(uint32_t num_pages,void* addr); + +#endif diff --git a/libc/stdlib.c b/libc/stdlib.c index 9f1431b..d16d375 100644 --- a/libc/stdlib.c +++ b/libc/stdlib.c @@ -1,8 +1,9 @@ -#include "../cpu/memory.h" #include "string.h" #include "stdlib.h" #include "math.h" #include +#include + #define MAX_BLOCKS 512 typedef struct {