From 586b8191b48079605e4ebbc45a529fbc8d7b2c39 Mon Sep 17 00:00:00 2001 From: Rick Rongen Date: Wed, 10 Mar 2021 22:01:13 +0100 Subject: [PATCH] feat: reformatted code base to be more standard --- CMakeLists.txt | 2 + include/errno.h | 8 ++++ include/fs/fat.h | 8 ---- include/libc/kprintf.h | 12 ----- include/libc/libc.h | 25 ---------- include/libc/sort.h | 11 ----- include/{ => myke}/attributes.h | 0 include/{ => myke}/command.h | 0 include/{ => myke}/cpu/cpu.h | 2 +- include/{ => myke}/cpu/cpuidx.h | 0 include/{ => myke}/cpu/idt.h | 4 +- include/{ => myke}/cpu/isr.h | 4 +- include/{ => myke}/cpu/syscall_handler.h | 2 +- include/{ => myke}/cpu/timer.h | 2 +- include/{ => myke}/debug/debug.h | 6 ++- include/{ => myke}/driver.h | 4 +- include/{ => myke}/drivers/ide.h | 2 +- include/{ => myke}/drivers/keyboard.h | 2 +- include/{ => myke}/drivers/pci.h | 6 +-- include/{ => myke}/drivers/pci_devices.h | 2 +- include/{ => myke}/drivers/ports.h | 0 include/{ => myke}/drivers/serial.h | 0 include/{ => myke}/drivers/vgascreen.h | 0 include/{ => myke}/elf.h | 4 +- include/{ => myke}/fs/blockdev.h | 4 +- include/{ => myke}/fs/mbr.h | 2 +- include/{ => myke}/libc/ringqueue.h | 2 +- include/{ => myke}/libk/kprint.h | 2 +- include/{ => myke}/libk/libk.h | 2 +- include/{ => myke}/libk/syscall.h | 4 +- include/{ => myke}/mem/malloc.h | 4 +- include/{ => myke}/mem/mem.h | 0 include/{ => myke}/mem/paging.h | 0 include/{ => myke}/mem/pmm.h | 2 +- include/{ => myke}/preprocessor_format_zero.h | 0 include/{ => myke}/tasks/locking.h | 2 +- include/{ => myke}/tasks/task.h | 2 +- include/{ => myke}/util/power.h | 2 +- include/{ => myke}/util/stream.h | 0 include/{libc => readline}/readline.h | 0 include/stdio.h | 46 +++++++++++++++++++ include/stdlib.h | 36 +++++++++++++++ include/{libc => }/string.h | 8 +++- include/sys/param.h | 11 +++++ include/{ => sys}/types.h | 2 + include/time.h | 8 ++++ include/unistd.h | 15 ++++++ kernel/command.c | 36 +++++++-------- kernel/cpu/cpuidx.c | 8 ++-- kernel/cpu/idt.c | 2 +- kernel/cpu/isr.c | 17 ++++--- kernel/cpu/syscall_handler.c | 6 +-- kernel/cpu/timer.c | 19 ++++---- kernel/debug/debug.c | 40 ++++++++-------- kernel/drivers/ide.c | 25 +++++----- kernel/drivers/keyboard.c | 15 +++--- kernel/drivers/pci.c | 12 ++--- kernel/drivers/ports.c | 2 +- kernel/drivers/serial.c | 6 +-- kernel/drivers/vgascreen.c | 6 +-- kernel/fs/blockdev.c | 17 +++---- kernel/fs/fat.c | 13 +++--- kernel/fs/mbr.c | 20 ++++---- kernel/kernel.c | 37 ++++++++------- kernel/libc/kprintf.c | 17 ++++--- kernel/libc/readline.c | 13 +++--- kernel/libc/ringqueue.c | 6 +-- kernel/libc/sort.c | 6 +-- kernel/libc/{libc.c => stdlib.c} | 45 ++++++------------ kernel/libc/string.c | 27 ++++++++--- kernel/libk/kprint.c | 12 ++--- kernel/libk/libk.c | 11 ++--- kernel/libk/syscall.c | 9 ++-- kernel/mem/malloc.c | 9 ++-- kernel/mem/mem.c | 13 +++--- kernel/mem/paging.c | 7 +-- kernel/mem/pmm.c | 7 +-- kernel/tasks/locking.c | 13 +++--- kernel/tasks/task.c | 16 +++---- kernel/util/power.c | 8 ++-- kernel/util/stream.c | 9 ++-- 81 files changed, 431 insertions(+), 338 deletions(-) create mode 100644 include/errno.h delete mode 100644 include/fs/fat.h delete mode 100644 include/libc/kprintf.h delete mode 100644 include/libc/libc.h delete mode 100644 include/libc/sort.h rename include/{ => myke}/attributes.h (100%) rename include/{ => myke}/command.h (100%) rename include/{ => myke}/cpu/cpu.h (95%) rename include/{ => myke}/cpu/cpuidx.h (100%) rename include/{ => myke}/cpu/idt.h (94%) rename include/{ => myke}/cpu/isr.h (97%) rename include/{ => myke}/cpu/syscall_handler.h (88%) rename include/{ => myke}/cpu/timer.h (91%) rename include/{ => myke}/debug/debug.h (90%) rename include/{ => myke}/driver.h (88%) rename include/{ => myke}/drivers/ide.h (91%) rename include/{ => myke}/drivers/keyboard.h (95%) rename include/{ => myke}/drivers/pci.h (98%) rename include/{ => myke}/drivers/pci_devices.h (99%) rename include/{ => myke}/drivers/ports.h (100%) rename include/{ => myke}/drivers/serial.h (100%) rename include/{ => myke}/drivers/vgascreen.h (100%) rename include/{ => myke}/elf.h (96%) rename include/{ => myke}/fs/blockdev.h (97%) rename include/{ => myke}/fs/mbr.h (87%) rename include/{ => myke}/libc/ringqueue.h (93%) rename include/{ => myke}/libk/kprint.h (93%) rename include/{ => myke}/libk/libk.h (93%) rename include/{ => myke}/libk/syscall.h (88%) rename include/{ => myke}/mem/malloc.h (85%) rename include/{ => myke}/mem/mem.h (100%) rename include/{ => myke}/mem/paging.h (100%) rename include/{ => myke}/mem/pmm.h (92%) rename include/{ => myke}/preprocessor_format_zero.h (100%) rename include/{ => myke}/tasks/locking.h (96%) rename include/{ => myke}/tasks/task.h (95%) rename include/{ => myke}/util/power.h (84%) rename include/{ => myke}/util/stream.h (100%) rename include/{libc => readline}/readline.h (100%) create mode 100644 include/stdio.h create mode 100644 include/stdlib.h rename include/{libc => }/string.h (65%) create mode 100644 include/sys/param.h rename include/{ => sys}/types.h (91%) create mode 100644 include/time.h create mode 100644 include/unistd.h rename kernel/libc/{libc.c => stdlib.c} (70%) diff --git a/CMakeLists.txt b/CMakeLists.txt index e6d50be..f2fde70 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -22,6 +22,8 @@ FILE(GLOB_RECURSE kernel_src kernel/**.c) FILE(GLOB_RECURSE kernel_asm kernel/**.S) FILE(GLOB_RECURSE boot_asm boot/boot.S) +add_compile_definitions(__kernel__) + # Run IDE in DMA mode if available (NYI) #add_compile_definitions(IDE_ENABLE_INTERRUPT) # Run the kernel shell as the main task diff --git a/include/errno.h b/include/errno.h new file mode 100644 index 0000000..41d292c --- /dev/null +++ b/include/errno.h @@ -0,0 +1,8 @@ +// +// Created by rick on 10-03-21. +// + +#ifndef NEW_KERNEL_ERRNO_H +#define NEW_KERNEL_ERRNO_H + +#endif //NEW_KERNEL_ERRNO_H diff --git a/include/fs/fat.h b/include/fs/fat.h deleted file mode 100644 index c01a75b..0000000 --- a/include/fs/fat.h +++ /dev/null @@ -1,8 +0,0 @@ -// -// Created by rick on 07-02-21. -// - -#ifndef NEW_KERNEL_FAT_H -#define NEW_KERNEL_FAT_H - -#endif //NEW_KERNEL_FAT_H diff --git a/include/libc/kprintf.h b/include/libc/kprintf.h deleted file mode 100644 index adf08eb..0000000 --- a/include/libc/kprintf.h +++ /dev/null @@ -1,12 +0,0 @@ -// -// Created by rick on 06-02-21. -// - -#ifndef NEW_KERNEL_KPRINTF_H -#define NEW_KERNEL_KPRINTF_H - -int printf(const char *fmt, ...); - -int sprintf(char *target, const char *fmt, ...); - -#endif //NEW_KERNEL_KPRINTF_H diff --git a/include/libc/libc.h b/include/libc/libc.h deleted file mode 100644 index 2fe3c76..0000000 --- a/include/libc/libc.h +++ /dev/null @@ -1,25 +0,0 @@ -/* - * libc.h - * - * Created on: Oct 11, 2018 - * Author: rick - */ - -#ifndef KERNEL_LIBC_LIBC_H_ -#define KERNEL_LIBC_LIBC_H_ - -#include - -int memcpy(uint8_t *dst, const uint8_t *src, int amount); - -int memset(uint8_t *dst, char data, int amount); - -char *itoa(int value, char *buffer, int base); - -int abs(int val); - -int maxi(int a, int b); - -int mini(int a, int b); - -#endif /* KERNEL_LIBC_LIBC_H_ */ diff --git a/include/libc/sort.h b/include/libc/sort.h deleted file mode 100644 index 5add42e..0000000 --- a/include/libc/sort.h +++ /dev/null @@ -1,11 +0,0 @@ -// -// Created by rick on 06-03-21. -// - -#ifndef NEW_KERNEL_SORT_H -#define NEW_KERNEL_SORT_H -#include - -void qsort(void *base, size_t num, size_t size, int (*compar)(const void *, const void *)); - -#endif //NEW_KERNEL_SORT_H diff --git a/include/attributes.h b/include/myke/attributes.h similarity index 100% rename from include/attributes.h rename to include/myke/attributes.h diff --git a/include/command.h b/include/myke/command.h similarity index 100% rename from include/command.h rename to include/myke/command.h diff --git a/include/cpu/cpu.h b/include/myke/cpu/cpu.h similarity index 95% rename from include/cpu/cpu.h rename to include/myke/cpu/cpu.h index 130ded5..d78156e 100644 --- a/include/cpu/cpu.h +++ b/include/myke/cpu/cpu.h @@ -4,7 +4,7 @@ #ifndef NEW_KERNEL_CPU_H #define NEW_KERNEL_CPU_H -#include +#include typedef struct { uint32_t edi, esi, ebx, ebp, eip; diff --git a/include/cpu/cpuidx.h b/include/myke/cpu/cpuidx.h similarity index 100% rename from include/cpu/cpuidx.h rename to include/myke/cpu/cpuidx.h diff --git a/include/cpu/idt.h b/include/myke/cpu/idt.h similarity index 94% rename from include/cpu/idt.h rename to include/myke/cpu/idt.h index 91346db..2c33864 100644 --- a/include/cpu/idt.h +++ b/include/myke/cpu/idt.h @@ -1,11 +1,11 @@ // // Created by rick on 8/18/19. // -#include +#include #ifndef MY_KERNEL_IDT_H #define MY_KERNEL_IDT_H -#include +#include #define KERNEL_CS 0x08 diff --git a/include/cpu/isr.h b/include/myke/cpu/isr.h similarity index 97% rename from include/cpu/isr.h rename to include/myke/cpu/isr.h index 4129708..837ae00 100644 --- a/include/cpu/isr.h +++ b/include/myke/cpu/isr.h @@ -2,12 +2,12 @@ // Created by rick on 8/18/19. // -#include +#include #ifndef MY_KERNEL_ISR_H #define MY_KERNEL_ISR_H -#include +#include /* ISRs reserved for CPU exceptions */ extern void isr0(); diff --git a/include/cpu/syscall_handler.h b/include/myke/cpu/syscall_handler.h similarity index 88% rename from include/cpu/syscall_handler.h rename to include/myke/cpu/syscall_handler.h index 508667e..b378ac1 100644 --- a/include/cpu/syscall_handler.h +++ b/include/myke/cpu/syscall_handler.h @@ -4,7 +4,7 @@ #ifndef NEW_KERNEL_SYSCALL_HANDLER_H #define NEW_KERNEL_SYSCALL_HANDLER_H -#include +#include void syscall_handle(isr_registers_t *registers); diff --git a/include/cpu/timer.h b/include/myke/cpu/timer.h similarity index 91% rename from include/cpu/timer.h rename to include/myke/cpu/timer.h index 1b493c4..e9c4656 100644 --- a/include/cpu/timer.h +++ b/include/myke/cpu/timer.h @@ -5,7 +5,7 @@ #ifndef MY_KERNEL_TIMER_H #define MY_KERNEL_TIMER_H -#include +#include int init_timer(uint32_t freq); diff --git a/include/debug/debug.h b/include/myke/debug/debug.h similarity index 90% rename from include/debug/debug.h rename to include/myke/debug/debug.h index 9f08881..6ce3430 100644 --- a/include/debug/debug.h +++ b/include/myke/debug/debug.h @@ -4,10 +4,14 @@ #ifndef NEW_KERNEL_DEBUG_H #define NEW_KERNEL_DEBUG_H -#include + #include +#ifdef DEBUG_INIT +#include + void debug_store_info(struct multiboot_info *info); +#endif void debug_backtrace(bool do_sync); diff --git a/include/driver.h b/include/myke/driver.h similarity index 88% rename from include/driver.h rename to include/myke/driver.h index 2fdda68..41bbf72 100644 --- a/include/driver.h +++ b/include/myke/driver.h @@ -4,8 +4,8 @@ #ifndef NEW_KERNEL_DRIVER_H #define NEW_KERNEL_DRIVER_H -#include -#include +#include +#include #ifndef STRUCT_ALIGNMENT #define STRUCT_ALIGNMENT 16 diff --git a/include/drivers/ide.h b/include/myke/drivers/ide.h similarity index 91% rename from include/drivers/ide.h rename to include/myke/drivers/ide.h index 5b7e5cd..5c226af 100644 --- a/include/drivers/ide.h +++ b/include/myke/drivers/ide.h @@ -5,7 +5,7 @@ #ifndef NEW_KERNEL_IDE_H #define NEW_KERNEL_IDE_H -#include +#include uint8_t ide_access(uint8_t direction, uint8_t drive, uint32_t lba, uint8_t numsects, void *target); diff --git a/include/drivers/keyboard.h b/include/myke/drivers/keyboard.h similarity index 95% rename from include/drivers/keyboard.h rename to include/myke/drivers/keyboard.h index 355227d..937d3f7 100644 --- a/include/drivers/keyboard.h +++ b/include/myke/drivers/keyboard.h @@ -5,7 +5,7 @@ #ifndef MY_KERNEL_KEYBOARD_H #define MY_KERNEL_KEYBOARD_H -#include +#include typedef struct KeyEvent_t { // KeyCode key; diff --git a/include/drivers/pci.h b/include/myke/drivers/pci.h similarity index 98% rename from include/drivers/pci.h rename to include/myke/drivers/pci.h index 0617c46..39af85d 100644 --- a/include/drivers/pci.h +++ b/include/myke/drivers/pci.h @@ -5,10 +5,10 @@ #ifndef NEW_KERNEL_PCI_H #define NEW_KERNEL_PCI_H -#include -#include +#include +#include #include -#include +#include #define PCI_CLASS_MASS_STORAGE 0x01 #define PCI_CLASS_BRIDGE 0x06 diff --git a/include/drivers/pci_devices.h b/include/myke/drivers/pci_devices.h similarity index 99% rename from include/drivers/pci_devices.h rename to include/myke/drivers/pci_devices.h index 5a70271..658bc14 100644 --- a/include/drivers/pci_devices.h +++ b/include/myke/drivers/pci_devices.h @@ -4,7 +4,7 @@ #ifndef NEW_KERNEL_PCI_DEVICES_H #define NEW_KERNEL_PCI_DEVICES_H -#include +#include typedef struct pci_device_info_t { uint8_t code; diff --git a/include/drivers/ports.h b/include/myke/drivers/ports.h similarity index 100% rename from include/drivers/ports.h rename to include/myke/drivers/ports.h diff --git a/include/drivers/serial.h b/include/myke/drivers/serial.h similarity index 100% rename from include/drivers/serial.h rename to include/myke/drivers/serial.h diff --git a/include/drivers/vgascreen.h b/include/myke/drivers/vgascreen.h similarity index 100% rename from include/drivers/vgascreen.h rename to include/myke/drivers/vgascreen.h diff --git a/include/elf.h b/include/myke/elf.h similarity index 96% rename from include/elf.h rename to include/myke/elf.h index fbb9976..de61f73 100644 --- a/include/elf.h +++ b/include/myke/elf.h @@ -5,8 +5,8 @@ #ifndef NEW_KERNEL_ELF_H #define NEW_KERNEL_ELF_H -#include -#include +#include +#include #define SHT_NULL 0 #define SHT_PROGBITS 1 diff --git a/include/fs/blockdev.h b/include/myke/fs/blockdev.h similarity index 97% rename from include/fs/blockdev.h rename to include/myke/fs/blockdev.h index dc4f32b..ff0895f 100644 --- a/include/fs/blockdev.h +++ b/include/myke/fs/blockdev.h @@ -5,8 +5,8 @@ #ifndef NEW_KERNEL_BLOCKDEV_H #define NEW_KERNEL_BLOCKDEV_H -#include -#include +#include +#include #define BLOCK_DEV_ACCESS_OK 0 #define BLOCK_DEV_ACCESS_ERR 1 diff --git a/include/fs/mbr.h b/include/myke/fs/mbr.h similarity index 87% rename from include/fs/mbr.h rename to include/myke/fs/mbr.h index 1fbc29b..7b0d99c 100644 --- a/include/fs/mbr.h +++ b/include/myke/fs/mbr.h @@ -5,7 +5,7 @@ #ifndef NEW_KERNEL_MBR_H #define NEW_KERNEL_MBR_H -#include +#include void mbr_read_from_ide(uint8_t ide_drive); diff --git a/include/libc/ringqueue.h b/include/myke/libc/ringqueue.h similarity index 93% rename from include/libc/ringqueue.h rename to include/myke/libc/ringqueue.h index 70a9934..1e7161d 100644 --- a/include/libc/ringqueue.h +++ b/include/myke/libc/ringqueue.h @@ -5,7 +5,7 @@ #ifndef NEW_KERNEL_RINGQUEUE_H #define NEW_KERNEL_RINGQUEUE_H -#include +#include #include void *create_buffer(int count, int object_size); diff --git a/include/libk/kprint.h b/include/myke/libk/kprint.h similarity index 93% rename from include/libk/kprint.h rename to include/myke/libk/kprint.h index d045e1b..6503ead 100644 --- a/include/libk/kprint.h +++ b/include/myke/libk/kprint.h @@ -7,7 +7,7 @@ #endif //NEW_KERNEL_KPRINT_H -#include +#include typedef void (*kprint_handler)(const char *); diff --git a/include/libk/libk.h b/include/myke/libk/libk.h similarity index 93% rename from include/libk/libk.h rename to include/myke/libk/libk.h index 9352359..69a30c3 100644 --- a/include/libk/libk.h +++ b/include/myke/libk/libk.h @@ -4,7 +4,7 @@ #ifndef NEW_KERNEL_LIBK_H #define NEW_KERNEL_LIBK_H -#include +#include #include extern void* _kernel_start; diff --git a/include/libk/syscall.h b/include/myke/libk/syscall.h similarity index 88% rename from include/libk/syscall.h rename to include/myke/libk/syscall.h index 3278e5c..150cecf 100644 --- a/include/libk/syscall.h +++ b/include/myke/libk/syscall.h @@ -4,8 +4,8 @@ #ifndef NEW_KERNEL_SYSCALL_H #define NEW_KERNEL_SYSCALL_H -#include -#include +#include +#include #define SYSCALL_START_SCHEDULER 0x01 #define SYSCALL_YIELD_JOB 0x02 diff --git a/include/mem/malloc.h b/include/myke/mem/malloc.h similarity index 85% rename from include/mem/malloc.h rename to include/myke/mem/malloc.h index 3099835..2caa61a 100644 --- a/include/mem/malloc.h +++ b/include/myke/mem/malloc.h @@ -5,7 +5,7 @@ #ifndef NEW_KERNEL_MALLOC_H #define NEW_KERNEL_MALLOC_H // retrieved from https://github.com/blanham/liballoc -#include +#include void *malloc(size_t); @@ -15,6 +15,8 @@ void *calloc(size_t, size_t); void free(void *); +#ifndef INCLUDE_STDLIB void print_malloc_info(); +#endif #endif //NEW_KERNEL_MALLOC_H diff --git a/include/mem/mem.h b/include/myke/mem/mem.h similarity index 100% rename from include/mem/mem.h rename to include/myke/mem/mem.h diff --git a/include/mem/paging.h b/include/myke/mem/paging.h similarity index 100% rename from include/mem/paging.h rename to include/myke/mem/paging.h diff --git a/include/mem/pmm.h b/include/myke/mem/pmm.h similarity index 92% rename from include/mem/pmm.h rename to include/myke/mem/pmm.h index ba6d34d..5c71e16 100644 --- a/include/mem/pmm.h +++ b/include/myke/mem/pmm.h @@ -4,7 +4,7 @@ #ifndef NEW_KERNEL_PMM_H #define NEW_KERNEL_PMM_H -#include +#include // 4k blocks #define PAGE_SIZE 4096 diff --git a/include/preprocessor_format_zero.h b/include/myke/preprocessor_format_zero.h similarity index 100% rename from include/preprocessor_format_zero.h rename to include/myke/preprocessor_format_zero.h diff --git a/include/tasks/locking.h b/include/myke/tasks/locking.h similarity index 96% rename from include/tasks/locking.h rename to include/myke/tasks/locking.h index eed27d0..90db234 100644 --- a/include/tasks/locking.h +++ b/include/myke/tasks/locking.h @@ -5,7 +5,7 @@ #ifndef NEW_KERNEL_LOCKING_H #define NEW_KERNEL_LOCKING_H -#include +#include typedef struct semaphore semaphore_t; diff --git a/include/tasks/task.h b/include/myke/tasks/task.h similarity index 95% rename from include/tasks/task.h rename to include/myke/tasks/task.h index 2c9e75b..b246d3e 100644 --- a/include/tasks/task.h +++ b/include/myke/tasks/task.h @@ -5,7 +5,7 @@ #ifndef NEW_KERNEL_TASK_H #define NEW_KERNEL_TASK_H -#include +#include typedef void (*task_entrypoint)(void *entry_data); diff --git a/include/util/power.h b/include/myke/util/power.h similarity index 84% rename from include/util/power.h rename to include/myke/util/power.h index 17b1400..7321eaf 100644 --- a/include/util/power.h +++ b/include/myke/util/power.h @@ -4,7 +4,7 @@ #ifndef NEW_KERNEL_POWER_H #define NEW_KERNEL_POWER_H -#include +#include void noreturn power_shutdown(); diff --git a/include/util/stream.h b/include/myke/util/stream.h similarity index 100% rename from include/util/stream.h rename to include/myke/util/stream.h diff --git a/include/libc/readline.h b/include/readline/readline.h similarity index 100% rename from include/libc/readline.h rename to include/readline/readline.h diff --git a/include/stdio.h b/include/stdio.h new file mode 100644 index 0000000..c698124 --- /dev/null +++ b/include/stdio.h @@ -0,0 +1,46 @@ +// +// Created by rick on 10-03-21. +// + +#ifndef NEW_KERNEL_STDIO_H +#define NEW_KERNEL_STDIO_H + +#include +#include + +#define SEEK_SET 0 + +// todo +typedef struct { + int unused; +} FILE; +extern FILE *stderr; +// todo +#define stderr stderr + +void fclose(FILE *); + +void fflush(FILE *); + +FILE *fopen(const char *, const char *); + +void fprintf(FILE *, const char *, ...); + +size_t fread(void *, size_t, size_t, FILE *); + +int fseek(FILE *, long, int); + +long ftell(FILE *); + +size_t fwrite(const void *, size_t, size_t, FILE *); + +void sebuf(FILE *, char *); + +int vfprintf(FILE *, const char *, va_list); + +int printf(const char *fmt, ...); + +int sprintf(char *target, const char *fmt, ...); + + +#endif //NEW_KERNEL_STDIO_H diff --git a/include/stdlib.h b/include/stdlib.h new file mode 100644 index 0000000..196789a --- /dev/null +++ b/include/stdlib.h @@ -0,0 +1,36 @@ +// +// Created by rick on 10-03-21. +// + +#ifndef NEW_KERNEL_STDLIB_H +#define NEW_KERNEL_STDLIB_H + +#ifdef __kernel__ +#define INCLUDE_STDLIB + +#include + +#undef INCLUDE_STDLIB +#else +#error "Userspace not implemented" +#endif + +void abort(); + +int atexit(void (*)(void)); + +int atoi(const char *); + +char *itoa(int value, char *buffer, int base); + +char *getenv(const char *); + +int abs(int val); + +long labs(long val); + +long long llabs(long long val); + +void qsort(void *base, size_t num, size_t size, int (*compar)(const void *, const void *)); + +#endif //NEW_KERNEL_STDLIB_H diff --git a/include/libc/string.h b/include/string.h similarity index 65% rename from include/libc/string.h rename to include/string.h index 234daad..844cd5f 100644 --- a/include/libc/string.h +++ b/include/string.h @@ -5,9 +5,15 @@ #ifndef NEW_KERNEL_STRING_H #define NEW_KERNEL_STRING_H +#include + +int memcpy(void *dst, const void *src, size_t amount); + +int memset(void *dst, int data, size_t amount); + int strcpy(char *dst, char *src); -int strlen(const char *str); +size_t strlen(const char *str); const char *strchr(const char *s, char c); diff --git a/include/sys/param.h b/include/sys/param.h new file mode 100644 index 0000000..bd9c3d5 --- /dev/null +++ b/include/sys/param.h @@ -0,0 +1,11 @@ +// +// Created by rick on 10-03-21. +// + +#ifndef NEW_KERNEL_PARAM_H +#define NEW_KERNEL_PARAM_H + +#define MIN(a,b) (((a)<(b))?(a):(b)) +#define MAX(a,b) (((a)>(b))?(a):(b)) + +#endif //NEW_KERNEL_PARAM_H diff --git a/include/types.h b/include/sys/types.h similarity index 91% rename from include/types.h rename to include/sys/types.h index 1ee9b5b..80aae26 100644 --- a/include/types.h +++ b/include/sys/types.h @@ -11,4 +11,6 @@ #include #include +typedef int pid_t; + #endif /* KERNEL_LIBC_TYPES_H_ */ diff --git a/include/time.h b/include/time.h new file mode 100644 index 0000000..259e8fe --- /dev/null +++ b/include/time.h @@ -0,0 +1,8 @@ +// +// Created by rick on 10-03-21. +// + +#ifndef NEW_KERNEL_TIME_H +#define NEW_KERNEL_TIME_H + +#endif //NEW_KERNEL_TIME_H diff --git a/include/unistd.h b/include/unistd.h new file mode 100644 index 0000000..37f3085 --- /dev/null +++ b/include/unistd.h @@ -0,0 +1,15 @@ +// +// Created by rick on 10-03-21. +// + +#ifndef NEW_KERNEL_UNISTD_H +#define NEW_KERNEL_UNISTD_H +#include + +int execv(const char*, char* const[]); +int execve(const char*, char* const[], char* const[]); +int execvp(const char*, char* const[]); + +pid_t fork(void); + +#endif //NEW_KERNEL_UNISTD_H diff --git a/kernel/command.c b/kernel/command.c index de38ae6..89dfac9 100644 --- a/kernel/command.c +++ b/kernel/command.c @@ -1,25 +1,23 @@ // // Created by rick on 23-02-21. // - -#include -#include "libk/kprint.h" -#include "libk/libk.h" -#include -#include +#include #include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include #define BOOTLOADER_NAME_MAX_LENGTH 64 #define CMDLINE_MAX_LENGTH 256 @@ -77,7 +75,7 @@ void print_bootinfo() { void help(const char *arg) { - kprint("Available commands:\n"); + printf("Available commands:\n"); int index = 0; while (true) { if (cmd_handlers[index].cmd == NULL) { diff --git a/kernel/cpu/cpuidx.c b/kernel/cpu/cpuidx.c index c374705..a0579f1 100644 --- a/kernel/cpu/cpuidx.c +++ b/kernel/cpu/cpuidx.c @@ -2,11 +2,11 @@ // Created by rick on 12-02-21. // -#include - -#include #include -#include +#include +#include + +#include union cpu_name { uint32_t parts[3]; diff --git a/kernel/cpu/idt.c b/kernel/cpu/idt.c index 56bb512..cd8d0eb 100644 --- a/kernel/cpu/idt.c +++ b/kernel/cpu/idt.c @@ -2,7 +2,7 @@ // Created by rick on 8/18/19. // -#include +#include idt_gate_t idt[IDT_REGISTERS]; idt_register_t idt_reg; diff --git a/kernel/cpu/isr.c b/kernel/cpu/isr.c index dcb8eb3..e14da65 100644 --- a/kernel/cpu/isr.c +++ b/kernel/cpu/isr.c @@ -2,16 +2,15 @@ // Created by rick on 8/18/19. // -#include +#include -#include -#include -#include -#include -#include -#include -#include -#include +#include +#include +#include +#include +#include +#include +#include #define PIC_END_OF_INTERRUPT 0x20 diff --git a/kernel/cpu/syscall_handler.c b/kernel/cpu/syscall_handler.c index 530f0c1..038458a 100644 --- a/kernel/cpu/syscall_handler.c +++ b/kernel/cpu/syscall_handler.c @@ -2,9 +2,9 @@ // Created by rick on 24-02-21. // -#include -#include -#include +#include +#include +#include void syscall_handle(isr_registers_t *registers) { switch (registers->eax) { diff --git a/kernel/cpu/timer.c b/kernel/cpu/timer.c index 9f6eea3..3d086ea 100644 --- a/kernel/cpu/timer.c +++ b/kernel/cpu/timer.c @@ -2,14 +2,15 @@ // Created by rick on 9/22/19. // -#include +#include +#include -#include -#include -#include -#include -#include -#include +#include +#include +#include +#include +#include +#include // https://wiki.osdev.org/PIT #define PIT_MODE_BIN_BCD (1 << 0) @@ -63,8 +64,8 @@ int init_timer(uint32_t freq) { register_interrupt_handler(IRQ0, timer_callback); uint32_t divisor = 1193180 / freq; - uint8_t low = (uint8_t)(divisor & 0xFF); - uint8_t high = (uint8_t)((divisor >> 8) & 0xFF); + uint8_t low = (uint8_t) (divisor & 0xFF); + uint8_t high = (uint8_t) ((divisor >> 8) & 0xFF); port_byte_out(PORT_PIT_COMMAND, PIT_MODE_BIN | PIT_MODE_HARDWARE_SQUARE_WAVE_GENERATOR | PIT_ACCESS_MODE_LH | PIT_CHANNEL_0); port_byte_out(PORT_PIT_DATA_0, low); diff --git a/kernel/debug/debug.c b/kernel/debug/debug.c index a1998e3..7629a10 100644 --- a/kernel/debug/debug.c +++ b/kernel/debug/debug.c @@ -2,25 +2,27 @@ // Created by rick on 08-03-21. // -#include -#include -#include -#include -#include -#include -#include +#include +#include -static struct elf32_section_header* elf_headers = NULL; -static struct elf32_section_header* elf_shstrtab = NULL; -static struct elf32_section_header* elf_symtab = NULL; -static struct elf32_section_header* elf_strtab = NULL; +#define DEBUG_INIT + +#include +#include +#include +#include + +static struct elf32_section_header *elf_headers = NULL; +static struct elf32_section_header *elf_shstrtab = NULL; +static struct elf32_section_header *elf_symtab = NULL; +static struct elf32_section_header *elf_strtab = NULL; static uint32_t elf_header_cnt; -static const char* elf_name_symtab = ".symtab"; -static const char* elf_name_strtab = ".strtab"; +static const char *elf_name_symtab = ".symtab"; +static const char *elf_name_strtab = ".strtab"; struct stackframe { - struct stackframe* ebp; + struct stackframe *ebp; uint32_t eip; }; @@ -31,7 +33,7 @@ char *debug_get_shstrtab_entry(uint32_t ndx) { if (ndx > elf_shstrtab->sh_size) { return NULL; } - return ((char*)elf_shstrtab->sh_addr + ndx); + return ((char *) elf_shstrtab->sh_addr + ndx); } char *debug_get_strtab_entry(uint32_t ndx) { @@ -41,7 +43,7 @@ char *debug_get_strtab_entry(uint32_t ndx) { if (ndx > elf_strtab->sh_size) { return NULL; } - return ((char*)elf_strtab->sh_addr + ndx); + return ((char *) elf_strtab->sh_addr + ndx); } void debug_find_sections(uint32_t shndx) { @@ -76,11 +78,11 @@ void debug_store_info(struct multiboot_info *info) { debug_find_sections(info->u.elf_sec.shndx); } -struct elf32_symtab_entry* debug_get_entry_for_addr(uint32_t addr) { +struct elf32_symtab_entry *debug_get_entry_for_addr(uint32_t addr) { if (elf_symtab == NULL) { return NULL; } - struct elf32_symtab_entry* first = (struct elf32_symtab_entry *) elf_symtab->sh_addr; + struct elf32_symtab_entry *first = (struct elf32_symtab_entry *) elf_symtab->sh_addr; uint32_t num = elf_symtab->sh_size / sizeof(struct elf32_symtab_entry); for (uint32_t i = 0; i < num; ++i) { // only functions for now @@ -96,7 +98,7 @@ struct elf32_symtab_entry* debug_get_entry_for_addr(uint32_t addr) { void debug_backtrace(bool do_sync) { struct stackframe *frame = __builtin_frame_address(0); - void (*printer)(const char*) = do_sync ? kprint_sync : kprint; + void (*printer)(const char *) = do_sync ? kprint_sync : kprint; printer("\n\n## Stack Trace ##\n"); char msg[1024] = {0}; while (frame->ebp != NULL) { diff --git a/kernel/drivers/ide.c b/kernel/drivers/ide.c index 9653112..e7987f3 100644 --- a/kernel/drivers/ide.c +++ b/kernel/drivers/ide.c @@ -3,19 +3,20 @@ // // https://wiki.osdev.org/PCI_IDE_Controller -#include -#include -#include -#include -#include -#include #include -#include -#include -#include -#include -#include -#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include #define ATA_SR_BSY 0x80 // Busy #define ATA_SR_DRDY 0x40 // Drive ready diff --git a/kernel/drivers/keyboard.c b/kernel/drivers/keyboard.c index ff957f8..e9336a5 100644 --- a/kernel/drivers/keyboard.c +++ b/kernel/drivers/keyboard.c @@ -1,14 +1,13 @@ // // Created by rick on 23-03-20. // -#include - -#include -#include -#include -#include -#include -#include +#include +#include +#include +#include +#include +#include +#include const char scancode_map_lowercase[] = { diff --git a/kernel/drivers/pci.c b/kernel/drivers/pci.c index 34cc59b..90aa38b 100644 --- a/kernel/drivers/pci.c +++ b/kernel/drivers/pci.c @@ -3,16 +3,16 @@ // // https://wiki.osdev.org/PCI -#include +#include +#include -#include -#include -#include -#include +#include +#include +#include #ifdef ENABLE_PCIPP -#include +#include #endif diff --git a/kernel/drivers/ports.c b/kernel/drivers/ports.c index 2e0c05d..f133877 100644 --- a/kernel/drivers/ports.c +++ b/kernel/drivers/ports.c @@ -6,7 +6,7 @@ */ -#include +#include /** * Read a byte from the specified port diff --git a/kernel/drivers/serial.c b/kernel/drivers/serial.c index 5544c61..d05abc9 100644 --- a/kernel/drivers/serial.c +++ b/kernel/drivers/serial.c @@ -2,9 +2,9 @@ // Created by rick on 28-01-21. // -#include -#include -#include +#include +#include +#include #define SERIAL_INTERRUPT_DATA_AVAILABLE (1 << 0) #define SERIAL_INTERRUPT_TRANSMITTER_EMPTY (1 << 1) diff --git a/kernel/drivers/vgascreen.c b/kernel/drivers/vgascreen.c index 5f07807..2c491c8 100644 --- a/kernel/drivers/vgascreen.c +++ b/kernel/drivers/vgascreen.c @@ -2,10 +2,10 @@ // Created by rick on 8/18/19. // -#include +#include +#include -#include -#include +#include char *_vga_character_memory = (char *) VGA_CHARACTER_MEMORY_LOCATION; diff --git a/kernel/fs/blockdev.c b/kernel/fs/blockdev.c index 714e600..110a9f4 100644 --- a/kernel/fs/blockdev.c +++ b/kernel/fs/blockdev.c @@ -2,14 +2,15 @@ // Created by rick on 06-02-21. // -#include -#include -#include -#include -#include -#include -#include -#include +#include +#include +#include + +#include +#include +#include +#include +#include #define MAX_BLOCK_DEVS 64 diff --git a/kernel/fs/fat.c b/kernel/fs/fat.c index 74089d2..91c147c 100644 --- a/kernel/fs/fat.c +++ b/kernel/fs/fat.c @@ -2,14 +2,13 @@ // Created by rick on 07-02-21. // -#include -#include +#include +#include +#include -#include -#include -#include -#include -#include +#include +#include +#include #define FAT_TYPE_12 1 #define FAT_TYPE_16 2 diff --git a/kernel/fs/mbr.c b/kernel/fs/mbr.c index 4d9d2f3..1e5930a 100644 --- a/kernel/fs/mbr.c +++ b/kernel/fs/mbr.c @@ -2,14 +2,15 @@ // Created by rick on 06-02-21. // -#include -#include -#include -#include -#include -#include -#include -#include +#include +#include +#include +#include + +#include +#include +#include +#include typedef struct { uint8_t bootable; @@ -36,7 +37,8 @@ typedef struct { uint32_t start_lba; } mbr_block_driver_info; -uint8_t mbr_block_dev_access(const block_device *device, uint8_t direction, uint32_t lba, uint8_t sectors, void *target) { +uint8_t +mbr_block_dev_access(const block_device *device, uint8_t direction, uint32_t lba, uint8_t sectors, void *target) { if (!device->flags.present || lba > device->num_lba) { return BLOCK_DEV_ACCESS_ERR; } diff --git a/kernel/kernel.c b/kernel/kernel.c index bdd50f6..4bac1b7 100644 --- a/kernel/kernel.c +++ b/kernel/kernel.c @@ -1,21 +1,24 @@ -#include -#include -#include -#include -#include +#include #include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include + +#define DEBUG_INIT + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include const int version_major = 0, version_minor = 0, diff --git a/kernel/libc/kprintf.c b/kernel/libc/kprintf.c index aa92ed2..35d2116 100644 --- a/kernel/libc/kprintf.c +++ b/kernel/libc/kprintf.c @@ -2,14 +2,17 @@ // Created by rick on 06-02-21. // -#include -#include -#include +#include #include -#include -#include -#include -const char* printf_null_str = "NULL"; +#include +#include +#include + +#include +#include + +const char *printf_null_str = "NULL"; + /* * Integer to string */ diff --git a/kernel/libc/readline.c b/kernel/libc/readline.c index 8ba1599..57ab6fb 100644 --- a/kernel/libc/readline.c +++ b/kernel/libc/readline.c @@ -2,12 +2,13 @@ // Created by rick on 01-02-21. // -#include -#include -#include -#include -#include -#include +#include +#include + +#include + +#include +#include #define RESULT_SIZE 256 diff --git a/kernel/libc/ringqueue.c b/kernel/libc/ringqueue.c index 03ad3a3..aa01416 100644 --- a/kernel/libc/ringqueue.c +++ b/kernel/libc/ringqueue.c @@ -2,9 +2,9 @@ // Created by rick on 30-01-21. // -#include -#include -#include +#include +#include +#include #define calc_pos(buffer, index) ((buffer->object_size) * (index)) diff --git a/kernel/libc/sort.c b/kernel/libc/sort.c index b1d053d..00f36e0 100644 --- a/kernel/libc/sort.c +++ b/kernel/libc/sort.c @@ -2,9 +2,9 @@ // Created by rick on 06-03-21. // -#include -#include -#include +#include +#include +#include // taken from https://github.com/DevSolar/pdclib/blob/master/functions/stdlib/qsort.c diff --git a/kernel/libc/libc.c b/kernel/libc/stdlib.c similarity index 70% rename from kernel/libc/libc.c rename to kernel/libc/stdlib.c index 41cae02..d3c1373 100644 --- a/kernel/libc/libc.c +++ b/kernel/libc/stdlib.c @@ -5,28 +5,23 @@ * Author: rick */ -#include -#include +#include -int memcpy(uint8_t *dst, const uint8_t *src, int amount) { - for (int i = 0; i < amount; i++) { - dst[i] = src[i]; - } - return 0; -} +/* everything of stdlib is implemented in this file except for: + * - qsort + **/ -int memset(uint8_t *dst, char data, int amount) { - for (int i = 0; i < amount; ++i) { - dst[i] = data; - } - return 0; -} int abs(int val) { - if (val >= 0) { - return val; - } - return val * -1; + return val >= 0 ? val : (val * -1); +} + +long labs(long val) { + return val >= 0 ? val : (val * -1); +} + +long long llabs(long long val) { + return val >= 0 ? val : (val * -1); } // next stolen form https://www.techiedelight.com/implement-itoa-function-in-c/ @@ -81,17 +76,3 @@ char *itoa(int value, char *buffer, int base) { // reverse the string and return it return reverse(buffer, 0, i - 1); } - -int maxi(int a, int b) { - if (a >= b) { - return a; - } - return b; -} - -int mini(int a, int b) { - if (a <= b) { - return a; - } - return b; -} diff --git a/kernel/libc/string.c b/kernel/libc/string.c index f73146b..55a251b 100644 --- a/kernel/libc/string.c +++ b/kernel/libc/string.c @@ -2,16 +2,29 @@ // Created by rick on 01-02-21. // -#include -#include -#include -#include +#include +#include + +int memcpy(void *dst, const void *src, size_t amount) { + for (size_t i = 0; i < amount; i++) { + ((char *) dst)[i] = ((const char *) src)[i]; + } + return 0; +} + +int memset(void *dst, int data, size_t amount) { + for (size_t i = 0; i < amount; ++i) { + ((char *) dst)[i] = (char) data; + } + return 0; +} + int strcpy(char *dst, char *src) { return memcpy(dst, src, strlen(src) + 1); } -int strlen(const char *str) { +size_t strlen(const char *str) { int length = 0; while (str[length] != 0) { length++; @@ -22,12 +35,12 @@ int strlen(const char *str) { int strcmp(const char *s1, const char *s2) { int len1 = strlen(s1); int len2 = strlen(s2); - return strncmp(s1, s2, maxi(len1, len2)); + return strncmp(s1, s2, MAX(len1, len2)); } const char *strchr(const char *s, char c) { int index = 0; - while (true) { + while (1) { if (s[index] == c) { return &s[index]; } diff --git a/kernel/libk/kprint.c b/kernel/libk/kprint.c index db8ac53..18d76fd 100644 --- a/kernel/libk/kprint.c +++ b/kernel/libk/kprint.c @@ -2,13 +2,13 @@ // Created by rick on 28-01-21. // -#include -#include +#include #include -#include -#include -#include -#include + +#include +#include +#include +#include #define MAX_HANDLERS 8 #define STREAM_SIZE (32*1024) diff --git a/kernel/libk/libk.c b/kernel/libk/libk.c index b5ad0da..7afd4e7 100644 --- a/kernel/libk/libk.c +++ b/kernel/libk/libk.c @@ -2,12 +2,11 @@ // Created by rick on 02-02-21. // -#include -#include -#include -#include +#include +#include +#include -bool k_addr_in_kspace(void* addr) { +bool k_addr_in_kspace(void *addr) { return addr > kernel_start && addr < kernel_end; } @@ -23,7 +22,7 @@ void noreturn k_panics(const char *msg) { void noreturn k_panic() { kprint_sync("PANIC!"); - while (true) { + while (1) { __asm__ __volatile__("cli;" "hlt;"); } diff --git a/kernel/libk/syscall.c b/kernel/libk/syscall.c index f6a8920..8648bc3 100644 --- a/kernel/libk/syscall.c +++ b/kernel/libk/syscall.c @@ -2,9 +2,10 @@ // Created by rick on 22-02-21. // -#include -#include -#include +#include + +#include +#include void syscall1(uint32_t arg1) { __asm__("int $0x80" @@ -28,7 +29,7 @@ void syscall_yield_job() { } void syscall_yield_irq(uint16_t irq) { - syscall2(SYSCALL_YIELD_IRQ, irq ); + syscall2(SYSCALL_YIELD_IRQ, irq); } void syscall_job_suspend() { diff --git a/kernel/mem/malloc.c b/kernel/mem/malloc.c index 63c32e5..d59caaa 100644 --- a/kernel/mem/malloc.c +++ b/kernel/mem/malloc.c @@ -2,10 +2,11 @@ // Created by rick on 23-02-21. // -#include -#include -#include -#include +#include + +#include +#include +#include // retrieved from https://github.com/blanham/liballoc diff --git a/kernel/mem/mem.c b/kernel/mem/mem.c index 91086b2..4526681 100644 --- a/kernel/mem/mem.c +++ b/kernel/mem/mem.c @@ -2,12 +2,13 @@ // Created by rick on 22-04-20. // -#include -#include -#include -#include -#include -#include +#include +#include + +#include +#include +#include +#include #define MEMMAP_ENTRIES 16 diff --git a/kernel/mem/paging.c b/kernel/mem/paging.c index e1e1a36..ac9371c 100644 --- a/kernel/mem/paging.c +++ b/kernel/mem/paging.c @@ -2,10 +2,11 @@ // Created by rick on 21-02-21. // -#include -#include #include -#include +#include + +#include +#include #define TABLE_ADDR_MASK 0xFFFFF000 #define DIRECTORY_SIZE 1024 diff --git a/kernel/mem/pmm.c b/kernel/mem/pmm.c index bde9984..97061bd 100644 --- a/kernel/mem/pmm.c +++ b/kernel/mem/pmm.c @@ -3,9 +3,10 @@ // #include -#include -#include -#include +#include + +#include +#include #define NUM_PAGING_INFOS 16 diff --git a/kernel/tasks/locking.c b/kernel/tasks/locking.c index 5476474..cb74032 100644 --- a/kernel/tasks/locking.c +++ b/kernel/tasks/locking.c @@ -2,13 +2,14 @@ // Created by rick on 27-02-21. // -#include -#include -#include -#include +#include +#include #include -#include -#include +#include + +#include +#include +#include typedef struct lock_fifo_entry { uint32_t tid; diff --git a/kernel/tasks/task.c b/kernel/tasks/task.c index e8f786b..028e1e3 100644 --- a/kernel/tasks/task.c +++ b/kernel/tasks/task.c @@ -2,15 +2,15 @@ // Created by rick on 22-02-21. // -#include -#include +#include #include -#include -#include -#include +#include -#include -#include +#include +#include +#include +#include +#include #define stack_end(task) ((task)->stack + ((task)->stack_page_count * PAGE_SIZE)) @@ -83,7 +83,7 @@ void task_lock_acquire() { } void task_lock_free() { - if (__sync_sub_and_fetch(&task_locked, 1) == UINT32_MAX) { + if (__sync_sub_and_fetch(&task_locked, 1) == UINT32_MAX) { k_panics("To many task free's"); } } diff --git a/kernel/util/power.c b/kernel/util/power.c index b48b2fa..79c455d 100644 --- a/kernel/util/power.c +++ b/kernel/util/power.c @@ -2,10 +2,10 @@ // Created by rick on 03-03-21. // -#include -#include -#include -#include +#include +#include +#include +#include void noreturn power_shutdown() { port_word_out(PORT_ACPI, PORT_ACPI_SHUTDOWN); diff --git a/kernel/util/stream.c b/kernel/util/stream.c index cf56909..5fe33ff 100644 --- a/kernel/util/stream.c +++ b/kernel/util/stream.c @@ -2,10 +2,11 @@ // Created by rick on 02-03-21. // -#include -#include -#include -#include +#include +#include + +#include +#include struct stream { uint8_t *data;