diff options
-rw-r--r-- | kernel/arch/i386/mmu.c | 2 | ||||
-rw-r--r-- | kernel/cpu/idt.c | 8 | ||||
-rw-r--r-- | kernel/drivers/ahci.c | 8 | ||||
-rw-r--r-- | kernel/drivers/ata.c | 8 | ||||
-rw-r--r-- | kernel/elf.c | 2 | ||||
-rw-r--r-- | kernel/fs/ext2.c | 16 | ||||
-rw-r--r-- | kernel/fs/vfs.c | 4 | ||||
-rw-r--r-- | kernel/init/kernel.c | 18 | ||||
-rw-r--r-- | kernel/kmalloc.c | 2 | ||||
-rw-r--r-- | kernel/libc/include/stdio.h | 3 | ||||
-rw-r--r-- | kernel/libc/stdio/print.c | 20 | ||||
-rw-r--r-- | kernel/log.c | 20 | ||||
-rw-r--r-- | kernel/log.h | 2 | ||||
-rw-r--r-- | kernel/network/arp.c | 2 | ||||
-rw-r--r-- | kernel/random.c | 4 | ||||
-rw-r--r-- | kernel/sched/scheduler.c | 2 |
16 files changed, 63 insertions, 58 deletions
diff --git a/kernel/arch/i386/mmu.c b/kernel/arch/i386/mmu.c index 28f6fd2..3043816 100644 --- a/kernel/arch/i386/mmu.c +++ b/kernel/arch/i386/mmu.c @@ -150,7 +150,7 @@ int get_free_frame(u32 *frame) { } } } - klog("MMU: Ran out of free frames. TODO: free up memory", LOG_WARN); + klog(LOG_WARN, "MMU: Ran out of free frames. TODO: free up memory"); *frame = 0; return 0; } diff --git a/kernel/cpu/idt.c b/kernel/cpu/idt.c index 7ad0be1..a7a93f6 100644 --- a/kernel/cpu/idt.c +++ b/kernel/cpu/idt.c @@ -50,7 +50,7 @@ __attribute__((no_caller_saved_registers)) void EOI(u8 irq) { } void general_protection_fault(reg_t *regs) { - klog("General Protetion Fault", 0x1); + klog(LOG_ERROR, "General Protetion Fault"); kprintf(" Error Code: %x\n", regs->error_code); kprintf("Instruction Pointer: %x\n", regs->eip); if (current_task) { @@ -64,12 +64,12 @@ void general_protection_fault(reg_t *regs) { void double_fault(registers_t *regs) { (void)regs; - klog("DOUBLE FAULT", LOG_ERROR); + klog(LOG_ERROR, "DOUBLE FAULT"); halt(); } void invalid_opcode(reg_t *regs) { - klog("Invalid opcode", LOG_ERROR); + klog(LOG_ERROR, "Invalid opcode"); kprintf("Instruction Pointer: %x\n", regs->eip); dump_backtrace(8); halt(); @@ -90,7 +90,7 @@ void page_fault(reg_t *regs) { return; } - klog("Page Fault", LOG_ERROR); + klog(LOG_ERROR, "Page Fault"); kprintf("CR2: %x\n", cr2); if (current_task) { kprintf("PID: %x\n", current_task->pid); diff --git a/kernel/drivers/ahci.c b/kernel/drivers/ahci.c index 34de443..22468ff 100644 --- a/kernel/drivers/ahci.c +++ b/kernel/drivers/ahci.c @@ -313,7 +313,7 @@ u8 ahci_perform_command(volatile struct HBA_PORT *port, u32 startl, u32 starth, u8 err; u32 command_slot = get_free_command_slot(port, &err); if (err) { - klog("AHCI No command slot found", LOG_WARN); + klog(LOG_WARN, "AHCI No command slot found"); return 0; } struct HBA_CMD_HEADER *cmdheader = @@ -373,7 +373,7 @@ u8 ahci_perform_command(volatile struct HBA_PORT *port, u32 startl, u32 starth, spin++; } if (spin == 10000) { - klog("AHCI port is hung", LOG_ERROR); + klog(LOG_ERROR, "AHCI port is hung"); return 0; } @@ -387,14 +387,14 @@ u8 ahci_perform_command(volatile struct HBA_PORT *port, u32 startl, u32 starth, break; } if (port->is & HBA_PxIS_TFES) { - klog("AHCI command failed", LOG_ERROR); + klog(LOG_ERROR, "AHCI command failed"); return 0; } } // Check again if (port->is & HBA_PxIS_TFES) { - klog("AHCI command failed", LOG_ERROR); + klog(LOG_ERROR, "AHCI command failed"); return 0; } diff --git a/kernel/drivers/ata.c b/kernel/drivers/ata.c index 0537f6e..9116da9 100644 --- a/kernel/drivers/ata.c +++ b/kernel/drivers/ata.c @@ -56,7 +56,7 @@ int identify(int master_slave) { // non-zero. If so, the drive is not ATA, and we // should stop polling. if (0 != inb(io_base + LBAmid) || 0 != inb(io_base + LBAhi)) { - klog("Drive is not ATA.", LOG_ERROR); + klog(LOG_ERROR, "Drive is not ATA."); return -1; } @@ -64,7 +64,7 @@ int identify(int master_slave) { status = inb(io_base + STATUS_PORT); if (1 == (status & STATUS_ERR)) { - klog("Drive ERR set.", LOG_ERROR); + klog(LOG_ERROR, "Drive ERR set."); return -2; } @@ -95,7 +95,7 @@ int poll_status(void) { // ERR or // DF sets if ((status & STATUS_ERR) || (status & STATUS_DF)) { - klog("Drive error set.", LOG_ERROR); + klog(LOG_ERROR, "Drive error set."); return 0; } @@ -205,7 +205,7 @@ void ata_init(void) { // 0xFF is an illegal status value, and // indicates that the bus has no drives if (0xFF == inb(io_base + STATUS_PORT)) { - klog("Bus has no drives", LOG_ERROR); + klog(LOG_ERROR, "Bus has no drives"); } // Issue IDENTIFY command diff --git a/kernel/elf.c b/kernel/elf.c index f8cc6a2..3c7f96e 100644 --- a/kernel/elf.c +++ b/kernel/elf.c @@ -17,7 +17,7 @@ void *load_elf_file(const char *f, u32 *ds) { } if (0 != memcmp(header.e_ident, "\x7F\x45\x4C\x46" /* "\x7FELF" */, 4)) { - klog("Incorrect ELF signature", LOG_ERROR); + klog(LOG_ERROR, "Incorrect ELF signature"); return NULL; } diff --git a/kernel/fs/ext2.c b/kernel/fs/ext2.c index 18ce8c7..4a0dbd0 100644 --- a/kernel/fs/ext2.c +++ b/kernel/fs/ext2.c @@ -496,7 +496,7 @@ int read_inode(int inode_num, u8 *data, u64 size, u64 offset, u64 *file_size) { for (int i = block_start; size; i++) { u32 block = get_block(inode, i); if (0 == block) { - klog("Filesystem EXT2: Unable to find block", LOG_WARN); + klog(LOG_WARN, "Filesystem EXT2: Unable to find block"); return -1; } @@ -708,7 +708,7 @@ int ext2_create_directory(const char *path, int mode) { // Check if the directory already exists u32 inode_num = ext2_find_inode(path); if (0 != inode_num) { - klog("ext2_create_directory: Directory already exists", LOG_WARN); + klog(LOG_WARN, "ext2_create_directory: Directory already exists"); return inode_num; } @@ -718,13 +718,13 @@ int ext2_create_directory(const char *path, int mode) { char *filename; strcpy(path_buffer, path); if (!ext2_find_parent(path_buffer, &parent_inode, &filename)) { - klog("ext2_create_file: Parent does not exist", LOG_WARN); + klog(LOG_WARN, "ext2_create_file: Parent does not exist"); return -1; } int new_file_inode = get_free_inode(1); if (-1 == new_file_inode) { - klog("ext2_create_file: Unable to find free inode", LOG_WARN); + klog(LOG_WARN, "ext2_create_file: Unable to find free inode"); return -1; } assert(0 != new_file_inode); @@ -768,7 +768,7 @@ int ext2_create_file(const char *path, int mode) { // Check if the file already exists u32 inode_num = ext2_find_inode(path); if (0 != inode_num) { - klog("ext2_create_file: File already exists", LOG_WARN); + klog(LOG_WARN, "ext2_create_file: File already exists"); return inode_num; } @@ -778,13 +778,13 @@ int ext2_create_file(const char *path, int mode) { char *filename; strcpy(path_buffer, path); if (!ext2_find_parent(path_buffer, &parent_inode, &filename)) { - klog("ext2_create_file: Parent does not exist", LOG_WARN); + klog(LOG_WARN, "ext2_create_file: Parent does not exist"); return -1; } int new_file_inode = get_free_inode(1); if (-1 == new_file_inode) { - klog("ext2_create_file: Unable to find free inode", LOG_WARN); + klog(LOG_WARN, "ext2_create_file: Unable to find free inode"); return -1; } assert(0 != new_file_inode); @@ -839,7 +839,7 @@ void parse_superblock(void) { block_byte_size = 1024 << superblock->block_size; if (0xEF53 != superblock->ext2_signature) { - klog("Incorrect ext2 signature in superblock.", LOG_ERROR); + klog(LOG_ERROR, "Incorrect ext2 signature in superblock."); for (;;) ; // TODO: Fail properly } diff --git a/kernel/fs/vfs.c b/kernel/fs/vfs.c index 59149f5..666dfc9 100644 --- a/kernel/fs/vfs.c +++ b/kernel/fs/vfs.c @@ -274,10 +274,10 @@ int vfs_open(const char *file, int flags, int mode) { if (0 == inode) { if (flags & O_CREAT) { if (vfs_create_file(resolved_path)) { - klog("VFS: File created", LOG_NOTE); + klog(LOG_NOTE, "VFS: File created"); return vfs_open(file, flags, mode); } - klog("VFS: Could not create file", LOG_WARN); + klog(LOG_WARN, "VFS: Could not create file"); } return -ENOENT; } diff --git a/kernel/init/kernel.c b/kernel/init/kernel.c index 090e03f..105e947 100644 --- a/kernel/init/kernel.c +++ b/kernel/init/kernel.c @@ -56,34 +56,34 @@ void kernel_main(u32 kernel_end, unsigned long magic, unsigned long addr, u64 memsize_kb = mem_mb * 1000 + mem_kb; paging_init(memsize_kb, mb); - klog("Paging Initalized", LOG_SUCCESS); + klog(LOG_SUCCESS, "Paging Initalized"); mb = mmu_map_frames((multiboot_info_t *)addr, sizeof(multiboot_info_t)); assert(mb); gdt_init(); - klog("GDT Initalized", LOG_SUCCESS); + klog(LOG_SUCCESS, "GDT Initalized"); idt_init(); - klog("IDT Initalized", LOG_SUCCESS); + klog(LOG_SUCCESS, "IDT Initalized"); syscalls_init(); - klog("Syscalls Initalized", LOG_SUCCESS); + klog(LOG_SUCCESS, "Syscalls Initalized"); pit_install(); set_pit_count(1000); - klog("PIT driver installed", LOG_SUCCESS); + klog(LOG_SUCCESS, "PIT driver installed"); ata_init(); - klog("ATA Initalized", LOG_SUCCESS); + klog(LOG_SUCCESS, "ATA Initalized"); tasking_init(); - klog("Tasking Initalized", LOG_SUCCESS); + klog(LOG_SUCCESS, "Tasking Initalized"); install_mouse(); - klog("PS2 Mouse driver installed", LOG_SUCCESS); + klog(LOG_SUCCESS, "PS2 Mouse driver installed"); install_keyboard(); - klog("PS2 Keyboard driver installed", LOG_SUCCESS); + klog(LOG_SUCCESS, "PS2 Keyboard driver installed"); global_socket_init(); diff --git a/kernel/kmalloc.c b/kernel/kmalloc.c index a652962..f9513d7 100644 --- a/kernel/kmalloc.c +++ b/kernel/kmalloc.c @@ -184,7 +184,7 @@ void *int_kmalloc(size_t s) { MallocHeader *free_entry = find_free_entry(s); if (!free_entry) { if (!add_heap_memory(s)) { - klog("Ran out of memory.", LOG_ERROR); + klog(LOG_ERROR, "Ran out of memory."); return NULL; } return kmalloc(s); diff --git a/kernel/libc/include/stdio.h b/kernel/libc/include/stdio.h index f2bbb32..9dd496e 100644 --- a/kernel/libc/include/stdio.h +++ b/kernel/libc/include/stdio.h @@ -1,9 +1,10 @@ #ifndef STDIO_H #define STDIO_H +#include <stdarg.h> void putc(const char c); -int puts(char *str); void delete_characther(void); int kprintf(const char *format, ...); +int vkprintf(const char *format, va_list list); #endif diff --git a/kernel/libc/stdio/print.c b/kernel/libc/stdio/print.c index 93393ee..e8b245f 100644 --- a/kernel/libc/stdio/print.c +++ b/kernel/libc/stdio/print.c @@ -1,7 +1,6 @@ -#include "../../drivers/serial.h" -#include "../include/assert.h" -#include "../include/stdio.h" -#include <stdarg.h> +#include <assert.h> +#include <drivers/serial.h> +#include <stdio.h> #define TAB_SIZE 8 @@ -55,11 +54,8 @@ int kprint_int(int num) { return c; } -int kprintf(const char *format, ...) { +int vkprintf(const char *format, va_list list) { int c = 0; - va_list list; - va_start(list, format); - const char *s = format; for (; *s; s++) { if ('%' != *s) { @@ -101,6 +97,10 @@ int kprintf(const char *format, ...) { return c; } -int puts(char *str) { - return kprintf("%s\n", str); +int kprintf(const char *format, ...) { + va_list list; + va_start(list, format); + int rc = vkprintf(format, list); + va_end(list); + return rc; } diff --git a/kernel/log.c b/kernel/log.c index ff6f45b..47f6d6f 100644 --- a/kernel/log.c +++ b/kernel/log.c @@ -1,6 +1,7 @@ #include "log.h" #include <cpu/arch_inst.h> #include <sched/scheduler.h> +#include <stdarg.h> struct stackframe { struct stackframe *ebp; @@ -8,7 +9,7 @@ struct stackframe { }; void dump_backtrace(u32 max_frames) { - struct stackframe *stk = (void*)get_current_sbp(); + struct stackframe *stk = (void *)get_current_sbp(); kprintf("Stack trace:\n"); for (u32 frame = 0; stk && frame < max_frames; ++frame) { kprintf(" 0x%x\n", stk->eip); @@ -19,22 +20,25 @@ void dump_backtrace(u32 max_frames) { } } -void klog(char *str, int code) { +void klog(int code, char *fmt, ...) { + va_list list; + va_start(list, fmt); switch (code) { + case LOG_SUCCESS: + kprintf("[SUCCESS] "); + break; case LOG_NOTE: kprintf("[NOTE] "); break; case LOG_WARN: kprintf("[WARN] "); break; + default: case LOG_ERROR: kprintf("[ERROR] "); break; - default: - case LOG_SUCCESS: - kprintf("[SUCCESS] "); - break; } - - puts(str); + vkprintf(fmt, list); + va_end(list); + kprintf("\n"); } diff --git a/kernel/log.h b/kernel/log.h index 10164d0..fb1ce34 100644 --- a/kernel/log.h +++ b/kernel/log.h @@ -6,5 +6,5 @@ #define LOG_ERROR 1 #define LOG_SUCCESS 0 -void klog(char *str, int code); +void klog(int code, char *fmt, ...); void dump_backtrace(u32 max_frames); diff --git a/kernel/network/arp.c b/kernel/network/arp.c index d4cf0dd..33aaaec 100644 --- a/kernel/network/arp.c +++ b/kernel/network/arp.c @@ -112,7 +112,7 @@ int get_mac_from_ip(const ipv4_t ip, u8 mac[6]) { memcpy(mac, arp_table[i].mac, sizeof(u8[6])); return 1; } - klog("ARP cache miss", LOG_NOTE); + klog(LOG_NOTE, "ARP cache miss"); enable_interrupts(); send_arp_request(ip); // TODO: Maybe wait a bit? diff --git a/kernel/random.c b/kernel/random.c index 2d77ccd..80337bc 100644 --- a/kernel/random.c +++ b/kernel/random.c @@ -119,14 +119,14 @@ void setup_random(void) { BYTE seed[1024]; int rand_fd = vfs_open("/etc/seed", O_RDWR, 0); if (0 > rand_fd) { - klog("/etc/seed not found", LOG_WARN); + klog(LOG_WARN, "/etc/seed not found"); return; } size_t offset = 0; for (int rc; (rc = vfs_pread(rand_fd, seed, 1024, offset)); offset += rc) { if (0 > rc) { - klog("/etc/seed read error", LOG_WARN); + klog(LOG_WARN, "/etc/seed read error"); break; } add_entropy(seed, rc); diff --git a/kernel/sched/scheduler.c b/kernel/sched/scheduler.c index 4657ebf..31d5257 100644 --- a/kernel/sched/scheduler.c +++ b/kernel/sched/scheduler.c @@ -594,7 +594,7 @@ void *mmap(void *addr, size_t length, int prot, int flags, int fd, MemoryMap **ptr = get_free_map(); if (!ptr) { - klog("mmap(): No free memory map.", LOG_WARN); + klog(LOG_WARN, "mmap(): No free memory map."); return (void *)-1; } *ptr = kmalloc(sizeof(MemoryMap)); |