mittos65/src/kernel/include/multiboot.h

53 lines
1.3 KiB
C

#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 <stddef.h>
#include <stdint.h>
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