From dc3803491e0201100aad0477b4291c7176d51f10 Mon Sep 17 00:00:00 2001 From: Cetica Marco Date: Tue, 5 Jan 2021 18:43:59 +0100 Subject: [PATCH] Modified PANIC function --- Makefile | 2 +- kernel/cpu/kernel_loader.asm | 4 +- kernel/drivers/tty.c | 8 +- kernel/kernel_main.c | 25 +- kernel/libc/Makefile | 5 +- kernel/libc/assert.c | 31 -- kernel/libc/panic.c | 51 +++ kernel/libc/{assert.h => panic.h} | 5 +- kernel/mem/kheap.c | 4 +- kernel/mem/multiboot.h | 518 ++++++++++++++++++++++++++++++ kernel/mem/ordered_array.c | 4 +- kernel/mem/paging.c | 4 +- 12 files changed, 608 insertions(+), 53 deletions(-) delete mode 100644 kernel/libc/assert.c create mode 100644 kernel/libc/panic.c rename kernel/libc/{assert.h => panic.h} (88%) create mode 100644 kernel/mem/multiboot.h diff --git a/Makefile b/Makefile index 4a3e953..102b5d3 100644 --- a/Makefile +++ b/Makefile @@ -54,4 +54,4 @@ run-debug: qemu-system-x86_64 -cdrom vulcanos.iso -d exec,cpu run-curses: - qemu-system-x86_64 -cdrom vulcanos.iso -curses + qemu-system-x86_64 -cdrom vulcanos.iso -curses -cpu qemu32 diff --git a/kernel/cpu/kernel_loader.asm b/kernel/cpu/kernel_loader.asm index 4a214f7..eb08d1e 100644 --- a/kernel/cpu/kernel_loader.asm +++ b/kernel/cpu/kernel_loader.asm @@ -10,7 +10,7 @@ section .multiboot head_s: - dd 0xE85250D6 ; Multiboot header magic number + dd 0xE85250D6 ; Multiboot header magic number dd 0 ; Protected mode flag dd head_e - head_s ; Header length dd 0x100000000 - (0xE85250D6 + 0 + (head_e - head_s)) ; Checksum of above @@ -28,7 +28,7 @@ EXTERN kernel_main section .text kernel_loader: mov esp, kernel_stack + KERNEL_STACK_SZ ; Define stack pointer - push ebx ; Set multiboot header + push eax ; Set multiboot header call kernel_main ; Jump into kernel's main function .loop: jmp .loop ; If the kernel returns, go into an infinite loop. diff --git a/kernel/drivers/tty.c b/kernel/drivers/tty.c index b24b7af..0257b7b 100644 --- a/kernel/drivers/tty.c +++ b/kernel/drivers/tty.c @@ -111,10 +111,10 @@ void init_prompt() { #endif newline(); - kprint_c(user, strlen(user), LIGHT_GREEN, BLACK); - kprint_c((uint8_t*)"@", 1, BROWN, BLACK); - kprint_c(hostname, strlen(hostname), CYAN, BLACK); - kprint_c((uint8_t*)" #> ", 4, LIGHT_BROWN, BLACK); + kprint_c(user, strlen(user), LIGHT_CYAN, BLACK); + kprint_c((uint8_t*)"@", 1, LIGHT_RED, BLACK); + kprint_c(hostname, strlen(hostname), LIGHT_MAGENTA, BLACK); + kprint_c((uint8_t*)" #> ", 4, LIGHT_BLUE, BLACK); } void clear_prompt() { diff --git a/kernel/kernel_main.c b/kernel/kernel_main.c index 3fc8ff9..f927ddd 100644 --- a/kernel/kernel_main.c +++ b/kernel/kernel_main.c @@ -12,18 +12,35 @@ #include "drivers/keyboard.h" #include "mem/paging.h" #include "mem/kheap.h" +#include "mem/multiboot.h" #include "userspace/shell.h" #include "libc/stdio.h" -#include "libc/assert.h" +#include "libc/panic.h" #include #define PRTOK printf("\n["); printf_color(" OK ", LIGHT_GREEN, BLACK); printf("]"); // Ugly hack to print "[ OK ]" #define PRTAT printf("\n["); printf_color(" ** ", LIGHT_BROWN, BLACK); printf("]"); // Ugly hack to print "[ * ]" +#define PRTER printf("\n["); printf_color(" ERR ", LIGHT_RED, BLACK); printf("]"); // Ugly hack to print "[ ER ]" -void kernel_main() { + +void kernel_main(unsigned long magic, uint32_t addr) { + // First of all, check if we're booted by a Multiboot-compliant boot loader + if(magic != MULTIBOOT2_BOOTLOADER_MAGIC) { + PRTER + printf(" - Invalid magic number: %x\n", (unsigned)magic); + PANIC("Invalid multiboot magic number"); + } + + if(addr & 7) { + PRTER + printf(" - Unaligned mbi: %x\n", addr); + PANIC("Unaligned multiboot MBI"); + } + + printf("Loading kernel, wait please..."); - + gdt_setup(); // Setup Global Descriptor Table PRTOK printf(" - Loaded GDT"); @@ -57,6 +74,6 @@ void kernel_main() { PRTOK printf(" - Heap works!"); - + init_prompt(); // Initialize frame buffer } diff --git a/kernel/libc/Makefile b/kernel/libc/Makefile index f5b370e..31b2a1d 100644 --- a/kernel/libc/Makefile +++ b/kernel/libc/Makefile @@ -1,7 +1,8 @@ -OBJS = stdio.o string.o assert.o time.o +OBJS = stdio.o string.o panic.o time.o +VER := $(shell git rev-parse --short HEAD) CC = i686-elf-gcc # cross-compiler -CFLAGS = -m32 -fno-stack-protector -ffreestanding -Wall -Wextra -Werror -g -c +CFLAGS = -DVULCAN_VERSION=$(VER) -m32 -fno-stack-protector -ffreestanding -Wall -Wextra -Werror -g -c all:${OBJS} diff --git a/kernel/libc/assert.c b/kernel/libc/assert.c deleted file mode 100644 index bd93dd1..0000000 --- a/kernel/libc/assert.c +++ /dev/null @@ -1,31 +0,0 @@ -#include "assert.h" - -// We panic when we find a critical error, this function is called by assert macro -extern void panic(const char *message, const char *file, uint32_t line) { - asm volatile("cli"); // Disable interrupts - - kprint((uint8_t*)"PANIC("); - kprint((uint8_t*)message); - kprint((uint8_t*)") at "); - kprint((uint8_t*)file); - kprint((uint8_t*)":"); - kprint_dec(line); - kprint((uint8_t*)"\n"); - // Now hang on for ever - for(;;); -} - -// Check for assertion failed, this function call by assert macro -extern void panic_assert(const char *file, uint32_t line, const char *desc) { - asm volatile("cli"); // Disable interrupts - - kprint((uint8_t*)"ASSERTION-FAILED("); - kprint((uint8_t*)desc); - kprint((uint8_t*)") at "); - kprint((uint8_t*)file); - kprint((uint8_t*)":"); - kprint_dec(line); - kprint((uint8_t*)"\n"); - // Now hang on forever - for(;;); -} \ No newline at end of file diff --git a/kernel/libc/panic.c b/kernel/libc/panic.c new file mode 100644 index 0000000..d1153e1 --- /dev/null +++ b/kernel/libc/panic.c @@ -0,0 +1,51 @@ +#include "panic.h" +#include "../drivers/cpuid.h" +#include "../libc/stdio.h" +#include "../libc/string.h" + +#define KINFO printf("["); printf_color(" I ", LIGHT_RED, BLACK); printf("]: "); +#define STRINGIZE(x) #x +#define STRINGIZE_VALUE_OF(x) STRINGIZE(x) + + +// We panic when we find a critical error, this function is called by assert macro +extern void panic(const char *message, const char *file, uint32_t line) { + uint8_t version[64]; +#ifdef VULCAN_VERSION + strcpy(version, (uint8_t*)STRINGIZE_VALUE_OF(VULCAN_VERSION)); +#else + #error "-DVULCAN_VERSION flag not set" +#endif + printf_color("=============================================\n", LIGHT_MAGENTA, BLACK); + printf_color(" .:: KERNEL PANIC ::. \n", LIGHT_RED, BLACK); + printf_color("Reason: ", LIGHT_BROWN, BLACK); + printf("'%s' at '%s':%d\n", message, file, line); + KINFO + printf_color("Disabling interrupts\n", LIGHT_GREEN, BLACK); + asm volatile("cli"); // Disable interrupts + KINFO + printf_color("Dropping you into an endless loop\n", LIGHT_GREEN, BLACK); + KINFO + printf_color("Your are on your own now...good luck.\n", LIGHT_GREEN, BLACK); + KINFO + printf_color("VulcanOS version: ", LIGHT_GREEN, BLACK); + printf_color((char*)version, LIGHT_CYAN, BLACK); + printf_color("\n\t\t (c) 2019-2021 Marco Cetica", LIGHT_BROWN, BLACK); + printf_color("\n=============================================\n", LIGHT_MAGENTA, BLACK); + for(;;); +} + +// Check for assertion failed, this function is called by assert macro +extern void panic_assert(const char *file, uint32_t line, const char *desc) { + asm volatile("cli"); // Disable interrupts + + kprint((uint8_t*)"ASSERTION-FAILED("); + kprint((uint8_t*)desc); + kprint((uint8_t*)") at "); + kprint((uint8_t*)file); + kprint((uint8_t*)":"); + kprint_dec(line); + kprint((uint8_t*)"\n"); + // Now hang on forever + for(;;); +} diff --git a/kernel/libc/assert.h b/kernel/libc/panic.h similarity index 88% rename from kernel/libc/assert.h rename to kernel/libc/panic.h index ef82e89..61a0da9 100644 --- a/kernel/libc/assert.h +++ b/kernel/libc/panic.h @@ -5,12 +5,11 @@ * Released under GPLv3 * * https://github.com/ice-bit/iceOS * ***************************************/ -#ifndef ASSERT_H -#define ASSERT_H +#ifndef PANIC_H +#define PANIC_H #include #include "../drivers/tty.h" -// These functions are used for error checking #define PANIC(msg) panic(msg, __FILE__, __LINE__); #define ASSERT(b) ((b) ? (void)0 : panic_assert(__FILE__, __LINE__, #b)) diff --git a/kernel/mem/kheap.c b/kernel/mem/kheap.c index 15d1a8b..122654f 100644 --- a/kernel/mem/kheap.c +++ b/kernel/mem/kheap.c @@ -1,6 +1,6 @@ #include "kheap.h" #include "paging.h" -#include "../libc/assert.h" +#include "../libc/panic.h" extern uint32_t end; uint32_t placement_addr = (uint32_t)&end; @@ -326,4 +326,4 @@ void free(void *p, heap_t *heap) { // If required by the user, add that block to the structure if(add_to_free_hole == 1) insert_ordered_array((void*)head, &heap->index); -} \ No newline at end of file +} diff --git a/kernel/mem/multiboot.h b/kernel/mem/multiboot.h new file mode 100644 index 0000000..6169c96 --- /dev/null +++ b/kernel/mem/multiboot.h @@ -0,0 +1,518 @@ +/* multiboot2.h - Multiboot 2 header file. */ +/* Copyright (C) 1999,2003,2007,2008,2009,2010 Free Software Foundation, Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL ANY + * DEVELOPER OR DISTRIBUTOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR + * IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#ifndef MULTIBOOT_HEADER +#define MULTIBOOT_HEADER 1 + +/* How many bytes from the start of the file we search for the header. */ +#define MULTIBOOT_SEARCH 32768 +#define MULTIBOOT_HEADER_ALIGN 8 + +/* The magic field should contain this. */ +#define MULTIBOOT2_HEADER_MAGIC 0xe85250d6 + +/* This should be in %eax. */ +#define MULTIBOOT2_BOOTLOADER_MAGIC 0x36d76289 + +/* Alignment of multiboot modules. */ +#define MULTIBOOT_MOD_ALIGN 0x00001000 + +/* Alignment of the multiboot info structure. */ +#define MULTIBOOT_INFO_ALIGN 0x00000008 + +/* Flags set in the ’flags’ member of the multiboot header. */ + +#define MULTIBOOT_TAG_ALIGN 8 +#define MULTIBOOT_TAG_TYPE_END 0 +#define MULTIBOOT_TAG_TYPE_CMDLINE 1 +#define MULTIBOOT_TAG_TYPE_BOOT_LOADER_NAME 2 +#define MULTIBOOT_TAG_TYPE_MODULE 3 +#define MULTIBOOT_TAG_TYPE_BASIC_MEMINFO 4 +#define MULTIBOOT_TAG_TYPE_BOOTDEV 5 +#define MULTIBOOT_TAG_TYPE_MMAP 6 +#define MULTIBOOT_TAG_TYPE_VBE 7 +#define MULTIBOOT_TAG_TYPE_FRAMEBUFFER 8 +#define MULTIBOOT_TAG_TYPE_ELF_SECTIONS 9 +#define MULTIBOOT_TAG_TYPE_APM 10 +#define MULTIBOOT_TAG_TYPE_EFI32 11 +#define MULTIBOOT_TAG_TYPE_EFI64 12 +#define MULTIBOOT_TAG_TYPE_SMBIOS 13 +#define MULTIBOOT_TAG_TYPE_ACPI_OLD 14 +#define MULTIBOOT_TAG_TYPE_ACPI_NEW 15 +#define MULTIBOOT_TAG_TYPE_NETWORK 16 +#define MULTIBOOT_TAG_TYPE_EFI_MMAP 17 +#define MULTIBOOT_TAG_TYPE_EFI_BS 18 +#define MULTIBOOT_TAG_TYPE_EFI32_IH 19 +#define MULTIBOOT_TAG_TYPE_EFI64_IH 20 +#define MULTIBOOT_TAG_TYPE_LOAD_BASE_ADDR 21 + +#define MULTIBOOT_HEADER_TAG_END 0 +#define MULTIBOOT_HEADER_TAG_INFORMATION_REQUEST 1 +#define MULTIBOOT_HEADER_TAG_ADDRESS 2 +#define MULTIBOOT_HEADER_TAG_ENTRY_ADDRESS 3 +#define MULTIBOOT_HEADER_TAG_CONSOLE_FLAGS 4 +#define MULTIBOOT_HEADER_TAG_FRAMEBUFFER 5 +#define MULTIBOOT_HEADER_TAG_MODULE_ALIGN 6 +#define MULTIBOOT_HEADER_TAG_EFI_BS 7 +#define MULTIBOOT_HEADER_TAG_ENTRY_ADDRESS_EFI32 8 +#define MULTIBOOT_HEADER_TAG_ENTRY_ADDRESS_EFI64 9 +#define MULTIBOOT_HEADER_TAG_RELOCATABLE 10 + +#define MULTIBOOT_ARCHITECTURE_I386 0 +#define MULTIBOOT_ARCHITECTURE_MIPS32 4 +#define MULTIBOOT_HEADER_TAG_OPTIONAL 1 + +#define MULTIBOOT_LOAD_PREFERENCE_NONE 0 +#define MULTIBOOT_LOAD_PREFERENCE_LOW 1 +#define MULTIBOOT_LOAD_PREFERENCE_HIGH 2 + +#define MULTIBOOT_CONSOLE_FLAGS_CONSOLE_REQUIRED 1 +#define MULTIBOOT_CONSOLE_FLAGS_EGA_TEXT_SUPPORTED 2 + +#ifndef ASM_FILE + +typedef unsigned char multiboot_uint8_t; +typedef unsigned short multiboot_uint16_t; +typedef unsigned int multiboot_uint32_t; +typedef unsigned long long multiboot_uint64_t; + +struct multiboot_header +{ + /* Must be MULTIBOOT_MAGIC - see above. */ + multiboot_uint32_t magic; + + /* ISA */ + multiboot_uint32_t architecture; + + /* Total header length. */ + multiboot_uint32_t header_length; + + /* The above fields plus this one must equal 0 mod 2^32. */ + multiboot_uint32_t checksum; +}; + +struct multiboot_header_tag +{ + multiboot_uint16_t type; + multiboot_uint16_t flags; + multiboot_uint32_t size; +}; + +struct multiboot_header_tag_information_request +{ + multiboot_uint16_t type; + multiboot_uint16_t flags; + multiboot_uint32_t size; + multiboot_uint32_t requests[0]; +}; + +struct multiboot_header_tag_address +{ + multiboot_uint16_t type; + multiboot_uint16_t flags; + multiboot_uint32_t size; + multiboot_uint32_t header_addr; + multiboot_uint32_t load_addr; + multiboot_uint32_t load_end_addr; + multiboot_uint32_t bss_end_addr; +}; + +struct multiboot_header_tag_entry_address +{ + multiboot_uint16_t type; + multiboot_uint16_t flags; + multiboot_uint32_t size; + multiboot_uint32_t entry_addr; +}; + +struct multiboot_header_tag_console_flags +{ + multiboot_uint16_t type; + multiboot_uint16_t flags; + multiboot_uint32_t size; + multiboot_uint32_t console_flags; +}; + +struct multiboot_header_tag_framebuffer +{ + multiboot_uint16_t type; + multiboot_uint16_t flags; + multiboot_uint32_t size; + multiboot_uint32_t width; + multiboot_uint32_t height; + multiboot_uint32_t depth; +}; + +struct multiboot_header_tag_module_align +{ + multiboot_uint16_t type; + multiboot_uint16_t flags; + multiboot_uint32_t size; +}; + +/* The symbol table for a.out. */ +struct multiboot_aout_symbol_table +{ + multiboot_uint32_t tabsize; + multiboot_uint32_t strsize; + multiboot_uint32_t addr; + multiboot_uint32_t reserved; +}; +typedef struct multiboot_aout_symbol_table multiboot_aout_symbol_table_t; + +/* The section header table for ELF. */ +struct multiboot_elf_section_header_table +{ + multiboot_uint32_t num; + multiboot_uint32_t size; + multiboot_uint32_t addr; + multiboot_uint32_t shndx; +}; +typedef struct multiboot_elf_section_header_table multiboot_elf_section_header_table_t; + +struct multiboot_info +{ + /* Multiboot info version number */ + multiboot_uint32_t flags; + + /* Available memory from BIOS */ + multiboot_uint32_t mem_lower; + multiboot_uint32_t mem_upper; + + /* "root" partition */ + multiboot_uint32_t boot_device; + + /* Kernel command line */ + multiboot_uint32_t cmdline; + + /* Boot-Module list */ + multiboot_uint32_t mods_count; + multiboot_uint32_t mods_addr; + + union + { + multiboot_aout_symbol_table_t aout_sym; + multiboot_elf_section_header_table_t elf_sec; + } u; + + /* Memory Mapping buffer */ + multiboot_uint32_t mmap_length; + multiboot_uint32_t mmap_addr; + + /* Drive Info buffer */ + multiboot_uint32_t drives_length; + multiboot_uint32_t drives_addr; + + /* ROM configuration table */ + multiboot_uint32_t config_table; + + /* Boot Loader Name */ + multiboot_uint32_t boot_loader_name; + + /* APM table */ + multiboot_uint32_t apm_table; + + /* Video */ + multiboot_uint32_t vbe_control_info; + multiboot_uint32_t vbe_mode_info; + multiboot_uint16_t vbe_mode; + multiboot_uint16_t vbe_interface_seg; + multiboot_uint16_t vbe_interface_off; + multiboot_uint16_t vbe_interface_len; + + multiboot_uint64_t framebuffer_addr; + multiboot_uint32_t framebuffer_pitch; + multiboot_uint32_t framebuffer_width; + multiboot_uint32_t framebuffer_height; + multiboot_uint8_t framebuffer_bpp; +#define MULTIBOOT_FRAMEBUFFER_TYPE_INDEXED 0 +#define MULTIBOOT_FRAMEBUFFER_TYPE_RGB 1 +#define MULTIBOOT_FRAMEBUFFER_TYPE_EGA_TEXT 2 + multiboot_uint8_t framebuffer_type; + union + { + struct + { + multiboot_uint32_t framebuffer_palette_addr; + multiboot_uint16_t framebuffer_palette_num_colors; + }; + struct + { + multiboot_uint8_t framebuffer_red_field_position; + multiboot_uint8_t framebuffer_red_mask_size; + multiboot_uint8_t framebuffer_green_field_position; + multiboot_uint8_t framebuffer_green_mask_size; + multiboot_uint8_t framebuffer_blue_field_position; + multiboot_uint8_t framebuffer_blue_mask_size; + }; + }; +}; +typedef struct multiboot_info multiboot_info_t; + + +struct multiboot_header_tag_relocatable +{ + multiboot_uint16_t type; + multiboot_uint16_t flags; + multiboot_uint32_t size; + multiboot_uint32_t min_addr; + multiboot_uint32_t max_addr; + multiboot_uint32_t align; + multiboot_uint32_t preference; +}; + +struct multiboot_color +{ + multiboot_uint8_t red; + multiboot_uint8_t green; + multiboot_uint8_t blue; +}; + +struct multiboot_mmap_entry +{ + multiboot_uint32_t size; + multiboot_uint64_t addr; + multiboot_uint64_t len; +#define MULTIBOOT_MEMORY_AVAILABLE 1 +#define MULTIBOOT_MEMORY_RESERVED 2 +#define MULTIBOOT_MEMORY_ACPI_RECLAIMABLE 3 +#define MULTIBOOT_MEMORY_NVS 4 +#define MULTIBOOT_MEMORY_BADRAM 5 + multiboot_uint32_t type; + multiboot_uint32_t zero; +}; +typedef struct multiboot_mmap_entry multiboot_memory_map_t; + +struct multiboot_tag +{ + multiboot_uint32_t type; + multiboot_uint32_t size; +}; + +struct multiboot_tag_string +{ + multiboot_uint32_t type; + multiboot_uint32_t size; + char string[0]; +}; + +struct multiboot_tag_module +{ + multiboot_uint32_t type; + multiboot_uint32_t size; + multiboot_uint32_t mod_start; + multiboot_uint32_t mod_end; + char cmdline[0]; +}; + +struct multiboot_tag_basic_meminfo +{ + multiboot_uint32_t type; + multiboot_uint32_t size; + multiboot_uint32_t mem_lower; + multiboot_uint32_t mem_upper; +}; + +struct multiboot_tag_bootdev +{ + multiboot_uint32_t type; + multiboot_uint32_t size; + multiboot_uint32_t biosdev; + multiboot_uint32_t slice; + multiboot_uint32_t part; +}; + +struct multiboot_tag_mmap +{ + multiboot_uint32_t type; + multiboot_uint32_t size; + multiboot_uint32_t entry_size; + multiboot_uint32_t entry_version; + struct multiboot_mmap_entry entries[0]; +}; + +struct multiboot_vbe_info_block +{ + multiboot_uint8_t external_specification[512]; +}; + +struct multiboot_vbe_mode_info_block +{ + multiboot_uint8_t external_specification[256]; +}; + +struct multiboot_tag_vbe +{ + multiboot_uint32_t type; + multiboot_uint32_t size; + + multiboot_uint16_t vbe_mode; + multiboot_uint16_t vbe_interface_seg; + multiboot_uint16_t vbe_interface_off; + multiboot_uint16_t vbe_interface_len; + + struct multiboot_vbe_info_block vbe_control_info; + struct multiboot_vbe_mode_info_block vbe_mode_info; +}; + +struct multiboot_tag_framebuffer_common +{ + multiboot_uint32_t type; + multiboot_uint32_t size; + + multiboot_uint64_t framebuffer_addr; + multiboot_uint32_t framebuffer_pitch; + multiboot_uint32_t framebuffer_width; + multiboot_uint32_t framebuffer_height; + multiboot_uint8_t framebuffer_bpp; +#define MULTIBOOT_FRAMEBUFFER_TYPE_INDEXED 0 +#define MULTIBOOT_FRAMEBUFFER_TYPE_RGB 1 +#define MULTIBOOT_FRAMEBUFFER_TYPE_EGA_TEXT 2 + multiboot_uint8_t framebuffer_type; + multiboot_uint16_t reserved; +}; + +struct multiboot_tag_framebuffer +{ + struct multiboot_tag_framebuffer_common common; + + union + { + struct + { + multiboot_uint16_t framebuffer_palette_num_colors; + struct multiboot_color framebuffer_palette[0]; + }; + struct + { + multiboot_uint8_t framebuffer_red_field_position; + multiboot_uint8_t framebuffer_red_mask_size; + multiboot_uint8_t framebuffer_green_field_position; + multiboot_uint8_t framebuffer_green_mask_size; + multiboot_uint8_t framebuffer_blue_field_position; + multiboot_uint8_t framebuffer_blue_mask_size; + }; + }; +}; + +struct multiboot_tag_elf_sections +{ + multiboot_uint32_t type; + multiboot_uint32_t size; + multiboot_uint32_t num; + multiboot_uint32_t entsize; + multiboot_uint32_t shndx; + char sections[0]; +}; + +struct multiboot_tag_apm +{ + multiboot_uint32_t type; + multiboot_uint32_t size; + multiboot_uint16_t version; + multiboot_uint16_t cseg; + multiboot_uint32_t offset; + multiboot_uint16_t cseg_16; + multiboot_uint16_t dseg; + multiboot_uint16_t flags; + multiboot_uint16_t cseg_len; + multiboot_uint16_t cseg_16_len; + multiboot_uint16_t dseg_len; +}; + +struct multiboot_tag_efi32 +{ + multiboot_uint32_t type; + multiboot_uint32_t size; + multiboot_uint32_t pointer; +}; + +struct multiboot_tag_efi64 +{ + multiboot_uint32_t type; + multiboot_uint32_t size; + multiboot_uint64_t pointer; +}; + +struct multiboot_tag_smbios +{ + multiboot_uint32_t type; + multiboot_uint32_t size; + multiboot_uint8_t major; + multiboot_uint8_t minor; + multiboot_uint8_t reserved[6]; + multiboot_uint8_t tables[0]; +}; + +struct multiboot_tag_old_acpi +{ + multiboot_uint32_t type; + multiboot_uint32_t size; + multiboot_uint8_t rsdp[0]; +}; + +struct multiboot_tag_new_acpi +{ + multiboot_uint32_t type; + multiboot_uint32_t size; + multiboot_uint8_t rsdp[0]; +}; + +struct multiboot_tag_network +{ + multiboot_uint32_t type; + multiboot_uint32_t size; + multiboot_uint8_t dhcpack[0]; +}; + +struct multiboot_tag_efi_mmap +{ + multiboot_uint32_t type; + multiboot_uint32_t size; + multiboot_uint32_t descr_size; + multiboot_uint32_t descr_vers; + multiboot_uint8_t efi_mmap[0]; +}; + +struct multiboot_tag_efi32_ih +{ + multiboot_uint32_t type; + multiboot_uint32_t size; + multiboot_uint32_t pointer; +}; + +struct multiboot_tag_efi64_ih +{ + multiboot_uint32_t type; + multiboot_uint32_t size; + multiboot_uint64_t pointer; +}; + +struct multiboot_tag_load_base_addr +{ + multiboot_uint32_t type; + multiboot_uint32_t size; + multiboot_uint32_t load_base_addr; +}; + +#endif /* ! ASM_FILE */ + +#endif /* ! MULTIBOOT_HEADER */ diff --git a/kernel/mem/ordered_array.c b/kernel/mem/ordered_array.c index a5b3522..521e4d1 100644 --- a/kernel/mem/ordered_array.c +++ b/kernel/mem/ordered_array.c @@ -1,6 +1,6 @@ #include "ordered_array.h" #include "kheap.h" -#include "../libc/assert.h" +#include "../libc/panic.h" #include "../libc/string.h" uint8_t standard_lessthan_predicate(type_t a, type_t b) { @@ -63,4 +63,4 @@ void remove_ordered_array(uint32_t i, ordered_array_t *array) { i++; } array->size--; -} \ No newline at end of file +} diff --git a/kernel/mem/paging.c b/kernel/mem/paging.c index 198d26c..7225b9c 100644 --- a/kernel/mem/paging.c +++ b/kernel/mem/paging.c @@ -1,6 +1,6 @@ #include "paging.h" #include "../libc/string.h" -#include "../libc/assert.h" +#include "../libc/panic.h" #include "../libc/stdio.h" #include "../drivers/tty.h" @@ -138,4 +138,4 @@ void page_fault(registers_t regs) { kprint((uint8_t*)"Reserved"); printf(") at %x\n", faulting_addr); PANIC("Page fault"); -} \ No newline at end of file +}