#pragma once #define MBOOT2_MAGIC 0xE85250D6 #define MBOOT2_REPLY 0x36D76289 #define MBOOT2_ARCH 0 #define MBOOT2_LENGTH (Multiboot2HeaderEnd - Multiboot2Header) #define MBOOT2_CHECKSUM -(MBOOT2_MAGIC + MBOOT2_ARCH + MBOOT2_LENGTH) #define MBOOT2_TAG_CMDLINE 1 #define MBOOT2_TAG_BOOTLOADER 2 #define MBOOT2_TAG_MMAP 6 #define MBOOT2_TAG_FBINFO 8 #define MBOOT2_TAG_OLD_RSDP 14 #define MBOOT2_TAG_NEW_RSDP 15 #ifndef __ASSEMBLER__ #include #include struct fbinfo { uint64_t framebuffer_addr; uint32_t framebuffer_pitch; uint32_t framebuffer_width; uint32_t framebuffer_height; uint8_t framebuffer_bpp; uint8_t framebuffer_type; uint8_t reserved; uint8_t color_info[]; }__attribute__((packed)); struct kernel_boot_data_st{ int multiboot_version; void *mboot_tags; size_t tags_length; char *bootloader; char *commandline; size_t mmap_size; unsigned int mmap_len; void *mmap; struct fbinfo *fbinfo; void *rsdp; }; #define MMAP_FREE 1 // boot/kmain.c extern struct kernel_boot_data_st kernel_boot_data; // boot/multiboot.c int multiboot_init(uint64_t magic, void *mboot_info); int multiboot_get_memory_area(size_t index, uintptr_t *start, uintptr_t *end, uint32_t *type); int multiboot_page_used(uintptr_t page); #endif