Serenity Operating System
at master 130 lines 2.9 kB view raw
1/* 2 * Copyright (c) 2018-2020, Andreas Kling <kling@serenityos.org> 3 * 4 * SPDX-License-Identifier: BSD-2-Clause 5 */ 6 7#pragma once 8 9#include <AK/Types.h> 10 11struct multiboot_module_entry { 12 u32 start; 13 u32 end; 14 u32 string_addr; 15 u32 reserved; 16}; 17typedef struct multiboot_module_entry multiboot_module_entry_t; 18 19struct multiboot_aout_symbol_table { 20 u32 tabsize; 21 u32 strsize; 22 u32 addr; 23 u32 reserved; 24}; 25typedef struct multiboot_aout_symbol_table multiboot_aout_symbol_table_t; 26 27struct multiboot_elf_section_header_table { 28 u32 num; 29 u32 size; 30 u32 addr; 31 u32 shndx; 32}; 33typedef struct multiboot_elf_section_header_table multiboot_elf_section_header_table_t; 34 35#define MULTIBOOT_MEMORY_AVAILABLE 1 36#define MULTIBOOT_MEMORY_RESERVED 2 37#define MULTIBOOT_MEMORY_ACPI_RECLAIMABLE 3 38#define MULTIBOOT_MEMORY_NVS 4 39#define MULTIBOOT_MEMORY_BADRAM 5 40 41struct multiboot_mmap_entry { 42 u32 size; 43 u64 addr; 44 u64 len; 45 u32 type; 46#if ARCH(AARCH64) 47 // __attribute__((packed)) causes alignment issues on aarch64 48}; 49#else 50} __attribute__((packed)); 51#endif 52typedef struct multiboot_mmap_entry multiboot_memory_map_t; 53 54#define MULTIBOOT_INFO_FRAMEBUFFER_INFO (1 << 12) 55 56struct multiboot_info { 57 // Multiboot info version number. 58 u32 flags; 59 60 // Available memory from BIOS. 61 u32 mem_lower; 62 u32 mem_upper; 63 64 // "root" partition. 65 u32 boot_device; 66 67 // Kernel command line. 68 u32 cmdline; 69 70 // Boot-Module list. 71 u32 mods_count; 72 u32 mods_addr; 73 74 union { 75 multiboot_aout_symbol_table_t aout_sym; 76 multiboot_elf_section_header_table_t elf_sec; 77 } u; 78 79 // Memory Mapping buffer. 80 u32 mmap_length; 81 u32 mmap_addr; 82 83 // Drive Info buffer. 84 u32 drives_length; 85 u32 drives_addr; 86 87 // ROM configuration table. 88 u32 config_table; 89 90 // Boot Loader Name. 91 u32 boot_loader_name; 92 93 // APM table. 94 u32 apm_table; 95 96 // Video. 97 u32 vbe_control_info; 98 u32 vbe_mode_info; 99 u16 vbe_mode; 100 u16 vbe_interface_seg; 101 u16 vbe_interface_off; 102 u16 vbe_interface_len; 103 104 u64 framebuffer_addr; 105 u32 framebuffer_pitch; 106 u32 framebuffer_width; 107 u32 framebuffer_height; 108 u8 framebuffer_bpp; 109#define MULTIBOOT_FRAMEBUFFER_TYPE_INDEXED 0 110#define MULTIBOOT_FRAMEBUFFER_TYPE_RGB 1 111#define MULTIBOOT_FRAMEBUFFER_TYPE_EGA_TEXT 2 112 u8 framebuffer_type; 113 union { 114 struct 115 { 116 u32 framebuffer_palette_addr; 117 u16 framebuffer_palette_num_colors; 118 }; 119 struct 120 { 121 u8 framebuffer_red_field_position; 122 u8 framebuffer_red_mask_size; 123 u8 framebuffer_green_field_position; 124 u8 framebuffer_green_mask_size; 125 u8 framebuffer_blue_field_position; 126 u8 framebuffer_blue_mask_size; 127 }; 128 }; 129}; 130typedef struct multiboot_info multiboot_info_t;