summaryrefslogtreecommitdiff
path: root/Kernel/Multiboot.h
blob: a74c4feb34984cfb7b1db5b6f15e1b9c34afba06 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
#pragma once

#include <AK/Types.h>

struct multiboot_aout_symbol_table {
    dword tabsize;
    dword strsize;
    dword addr;
    dword reserved;
};
typedef struct multiboot_aout_symbol_table multiboot_aout_symbol_table_t;

struct multiboot_elf_section_header_table {
    dword num;
    dword size;
    dword addr;
    dword shndx;
};
typedef struct multiboot_elf_section_header_table multiboot_elf_section_header_table_t;

#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

struct multiboot_mmap_entry {
    dword size;
    qword addr;
    qword len;
    dword type;
} __attribute__((packed));
typedef struct multiboot_mmap_entry multiboot_memory_map_t;

struct multiboot_info {
    // Multiboot info version number.
    dword flags;

    // Available memory from BIOS.
    dword mem_lower;
    dword mem_upper;

    // "root" partition.
    dword boot_device;

    // Kernel command line.
    dword cmdline;

    // Boot-Module list.
    dword mods_count;
    dword mods_addr;

    union {
        multiboot_aout_symbol_table_t aout_sym;
        multiboot_elf_section_header_table_t elf_sec;
    } u;

    // Memory Mapping buffer.
    dword mmap_length;
    dword mmap_addr;

    // Drive Info buffer.
    dword drives_length;
    dword drives_addr;

    // ROM configuration table.
    dword config_table;

    // Boot Loader Name.
    dword boot_loader_name;

    // APM table.
    dword apm_table;

    // Video.
    dword vbe_control_info;
    dword vbe_mode_info;
    word vbe_mode;
    word vbe_interface_seg;
    word vbe_interface_off;
    word vbe_interface_len;

    qword framebuffer_addr;
    dword framebuffer_pitch;
    dword framebuffer_width;
    dword framebuffer_height;
    byte framebuffer_bpp;
#define MULTIBOOT_FRAMEBUFFER_TYPE_INDEXED 0
#define MULTIBOOT_FRAMEBUFFER_TYPE_RGB 1
#define MULTIBOOT_FRAMEBUFFER_TYPE_EGA_TEXT 2
    byte framebuffer_type;
    union {
        struct
        {
            dword framebuffer_palette_addr;
            word framebuffer_palette_num_colors;
        };
        struct
        {
            byte framebuffer_red_field_position;
            byte framebuffer_red_mask_size;
            byte framebuffer_green_field_position;
            byte framebuffer_green_mask_size;
            byte framebuffer_blue_field_position;
            byte framebuffer_blue_mask_size;
        };
    };
};
typedef struct multiboot_info multiboot_info_t;

extern "C" multiboot_info_t* multiboot_info_ptr;