53 lines
1.3 KiB
C
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 |