Serenity Operating System
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;