diff --git a/ProjectTree b/ProjectTree index 290b5cf..72efbbb 100644 --- a/ProjectTree +++ b/ProjectTree @@ -129,18 +129,17 @@ │   │   ├── kalbase.h │   │   ├── kaleid.h │   │   ├── kalext.h -│   │   ├── kernel -│   │   │   ├── base.h -│   │   │   ├── cpu.h -│   │   │   ├── heap.h -│   │   │   ├── iomisc.h -│   │   │   ├── mm.h -│   │   │   ├── panic.h -│   │   │   ├── proc.h -│   │   │   ├── sched.h -│   │   │   └── term.h -│   │   └── multiboot -│   │   └── multiboot.h +│   │   └── kernel +│   │   ├── base.h +│   │   ├── cpu.h +│   │   ├── heap.h +│   │   ├── iomisc.h +│   │   ├── mm.h +│   │   ├── multiboot.h +│   │   ├── panic.h +│   │   ├── proc.h +│   │   ├── sched.h +│   │   └── term.h │   └── kernel │   ├── cpu │   │   └── cpuid.c @@ -168,4 +167,4 @@ ├── qemu.log └── Readme.md -31 directories, 112 files +30 directories, 112 files diff --git a/kaleid/include/kernel/mm.h b/kaleid/include/kernel/mm.h index cece795..3ef8494 100644 --- a/kaleid/include/kernel/mm.h +++ b/kaleid/include/kernel/mm.h @@ -22,7 +22,7 @@ // along with OS/K. If not, see . // //----------------------------------------------------------------------------// -#include +#include #include // @@ -33,6 +33,6 @@ void *GetMemoryMap(void); // // Initializes the memory map structure // -void InitMemoryMap(void); +error_t InitMemoryMap(void); // -------------------------------------------------------------------------- // diff --git a/kaleid/include/multiboot/multiboot.h b/kaleid/include/multiboot/multiboot.h deleted file mode 100644 index d1f8516..0000000 --- a/kaleid/include/multiboot/multiboot.h +++ /dev/null @@ -1,276 +0,0 @@ -//----------------------------------------------------------------------------// -// GNU GPL OS/K // -// // -// Desc: multiboot.h - Multiboot header file. // -// // -// // -// Copyright © 1999,2003,2007-2010 Free Software Foundation, Inc. // -// Copyright © 2018-2019 The OS/K Team // -// // -// This file is part of OS/K. // -// // -// OS/K is free software: you can redistribute it and/or modify // -// it under the terms of the GNU General Public License as published by // -// the Free Software Foundation, either version 3 of the License, or // -// any later version. // -// // -// OS/K is distributed in the hope that it will be useful, // -// but WITHOUT ANY WARRANTY//without even the implied warranty of // -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // -// GNU General Public License for more details. // -// // -// You should have received a copy of the GNU General Public License // -// along with OS/K. If not, see . // -//----------------------------------------------------------------------------// - -#ifndef MULTIBOOT_HEADER -#define MULTIBOOT_HEADER 1 - -/* How many bytes from the start of the file we search for the header. */ -#define MULTIBOOT_SEARCH 8192 -#define MULTIBOOT_HEADER_ALIGN 4 - -/* The magic field should contain this. */ -#define MULTIBOOT_HEADER_MAGIC 0x1BADB002 - -/* This should be in %eax. */ -#define MULTIBOOT_BOOTLOADER_MAGIC 0x2BADB002 - -/* Alignment of multiboot modules. */ -#define MULTIBOOT_MOD_ALIGN 0x00001000 - -/* Alignment of the multiboot info structure. */ -#define MULTIBOOT_INFO_ALIGN 0x00000004 - -/* Flags set in the 'flags' member of the multiboot header. */ - -/* Align all boot modules on i386 page (4KB) boundaries. */ -#define MULTIBOOT_PAGE_ALIGN 0x00000001 - -/* Must pass memory information to OS. */ -#define MULTIBOOT_MEMORY_INFO 0x00000002 - -/* Must pass video information to OS. */ -#define MULTIBOOT_VIDEO_MODE 0x00000004 - -/* This flag indicates the use of the address fields in the header. */ -#define MULTIBOOT_AOUT_KLUDGE 0x00010000 - - -#define MULTIBOOT_INFO_MEMORY 0x00000001 -/* is there a boot device set? */ -#define MULTIBOOT_INFO_BOOTDEV 0x00000002 -/* is the command-line defined? */ -#define MULTIBOOT_INFO_CMDLINE 0x00000004 -/* are there modules to do something with? */ -#define MULTIBOOT_INFO_MODS 0x00000008 - -/* These next two are mutually exclusive */ - -/* is there a symbol table loaded? */ -#define MULTIBOOT_INFO_AOUT_SYMS 0x00000010 -/* is there an ELF section header table? */ -#define MULTIBOOT_INFO_ELF_SHDR 0x00000020 - -/* is there a full memory map? */ -#define MULTIBOOT_INFO_MEM_MAP 0x00000040 - -/* Is there drive info? */ -#define MULTIBOOT_INFO_DRIVE_INFO 0x00000080 - -/* Is there a config table? */ -#define MULTIBOOT_INFO_CONFIG_TABLE 0x00000100 - -/* Is there a boot loader name? */ -#define MULTIBOOT_INFO_BOOT_LOADER_NAME 0x00000200 - -/* Is there a APM table? */ -#define MULTIBOOT_INFO_APM_TABLE 0x00000400 - -/* Is there video information? */ -#define MULTIBOOT_INFO_VBE_INFO 0x00000800 -#define MULTIBOOT_INFO_FRAMEBUFFER_INFO 0x00001000 - -#ifndef ASM_FILE - -typedef unsigned char uchar; -typedef unsigned short ushort; -typedef unsigned int uint; -typedef unsigned long long ullong; - -struct multiboot_header -{ - /* Must be MULTIBOOT_MAGIC - see above. */ - uint magic; - - /* Feature flags. */ - uint flags; - - /* The above fields plus this one must equal 0 mod 2^32. */ - uint checksum; - - /* These are only valid if MULTIBOOT_AOUT_KLUDGE is set. */ - uint header_addr; - uint load_addr; - uint load_end_addr; - uint bss_end_addr; - uint entry_addr; - - /* These are only valid if MULTIBOOT_VIDEO_MODE is set. */ - uint mode_type; - uint width; - uint height; - uint depth; -}; - -/* The symbol table for a.out. */ -struct multiboot_aout_symbol_table -{ - uint tabsize; - uint strsize; - uint addr; - uint reserved; -}; -typedef struct multiboot_aout_symbol_table multiboot_aout_symbol_table_t; - -/* The section header table for ELF. */ -struct multiboot_elf_section_header_table -{ - uint num; - uint size; - uint addr; - uint shndx; -}; -typedef struct multiboot_elf_section_header_table multiboot_elf_section_header_table_t; - -struct multiboot_info -{ - /* Multiboot info version number */ - uint flags; - - /* Available memory from BIOS */ - uint mem_lower; - uint mem_upper; - - /* "root" partition */ - uint boot_device; - - /* Kernel command line */ - uint cmdline; - - /* Boot-Module list */ - uint mods_count; - uint mods_addr; - - union - { - multiboot_aout_symbol_table_t aout_sym; - multiboot_elf_section_header_table_t elf_sec; - } u; - - /* Memory Mapping buffer */ - uint mmap_length; - uint mmap_addr; - - /* Drive Info buffer */ - uint drives_length; - uint drives_addr; - - /* ROM configuration table */ - uint config_table; - - /* Boot Loader Name */ - uint boot_loader_name; - - /* APM table */ - uint apm_table; - - /* Video */ - uint vbe_control_info; - uint vbe_mode_info; - ushort vbe_mode; - ushort vbe_interface_seg; - ushort vbe_interface_off; - ushort vbe_interface_len; - - ullong framebuffer_addr; - uint framebuffer_pitch; - uint framebuffer_width; - uint framebuffer_height; - uchar framebuffer_bpp; -#define MULTIBOOT_FRAMEBUFFER_TYPE_INDEXED 0 -#define MULTIBOOT_FRAMEBUFFER_TYPE_RGB 1 -#define MULTIBOOT_FRAMEBUFFER_TYPE_EGA_TEXT 2 - uchar framebuffer_type; - union - { - struct - { - uint framebuffer_palette_addr; - ushort framebuffer_palette_num_colors; - }; - struct - { - uchar framebuffer_red_field_position; - uchar framebuffer_red_mask_size; - uchar framebuffer_green_field_position; - uchar framebuffer_green_mask_size; - uchar framebuffer_blue_field_position; - uchar framebuffer_blue_mask_size; - }; - }; -}; -typedef struct multiboot_info multiboot_info_t; - -struct multiboot_color -{ - uchar red; - uchar green; - uchar blue; -}; - -struct multiboot_mmap_entry -{ - uint size; - ullong addr; - ullong 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 - uint type; -} __attribute__((packed)); -typedef struct multiboot_mmap_entry multiboot_memory_map_t; - -struct multiboot_mod_list -{ - /* the memory used goes from bytes 'mod_start' to 'mod_end-1' inclusive */ - uint mod_start; - uint mod_end; - - /* Module command line */ - uint cmdline; - - /* padding to take it to 16 bytes (must be zero) */ - uint pad; -}; -typedef struct multiboot_mod_list multiboot_module_t; - -/* APM BIOS info. */ -struct multiboot_apm_info -{ - ushort version; - ushort cseg; - uint offset; - ushort cseg_16; - ushort dseg; - ushort flags; - ushort cseg_len; - ushort cseg_16_len; - ushort dseg_len; -}; - -#endif /* ! ASM_FILE */ - -#endif /* ! MULTIBOOT_HEADER */ diff --git a/kaleid/kernel/init/init.c b/kaleid/kernel/init/init.c index 163b457..466c6fb 100644 --- a/kaleid/kernel/init/init.c +++ b/kaleid/kernel/init/init.c @@ -22,7 +22,7 @@ // along with OS/K. If not, see . // //----------------------------------------------------------------------------// -#include +#include #include #include #include @@ -88,6 +88,8 @@ noreturn void StartKern(multiboot_info_t *mbInfo, int mbMagic) //Hello world because why not KernLog("%c%c%c OS/K\n\n", 219, 219, 219); + + KalAlwaysAssert(mbMagic == MULTIBOOT_BOOTLOADER_MAGIC); KernLog("[Init] We have magic : %x\n", mbMagic); //Initialize the BootInfo_t structure diff --git a/kaleid/kernel/mm/map.c b/kaleid/kernel/mm/map.c index 056e71e..6d29346 100644 --- a/kaleid/kernel/mm/map.c +++ b/kaleid/kernel/mm/map.c @@ -23,17 +23,16 @@ //----------------------------------------------------------------------------// #include -#include #include -void InitMemoryMap(void) +error_t InitMemoryMap(void) { - return; + ///uint MapIsValid = (GetBootInfo(btldr).grubFlags & MULTIBOOT_INFO_MEM_MAP = MULTIBOOT_INFO_MEM_MAP ? 1 : 0); + KalAlwaysAssert(MapIsValid); + return EOK; } void *GetMemoryMap(void) { return (void*)0; } - -