1253789Srpaulo// Copyright 2016 The Fuchsia Authors 2253789Srpaulo// Copyright (c) 2009 Corey Tabaka 3253789Srpaulo// 4253789Srpaulo// Use of this source code is governed by a MIT-style 5253789Srpaulo// license that can be found in the LICENSE file or at 6253789Srpaulo// https://opensource.org/licenses/MIT 7253789Srpaulo 8253789Srpaulo#ifndef __PLATFORM_MULTIBOOT_H 9253789Srpaulo#define __PLATFORM_MULTIBOOT_H 10253789Srpaulo 11253789Srpaulo/* magic number for multiboot header */ 12253789Srpaulo#define MULTIBOOT_HEADER_MAGIC 0x1BADB002 13253789Srpaulo 14253789Srpaulo// Flags for multiboot header: 15253789Srpaulo// 0x00000002: Boot loader should provide memory map. 16253789Srpaulo// 0x00010000: *_addr fields in multiboot_header_t are used. 17253789Srpaulo#define MULTIBOOT_HEADER_FLAGS 0x00010002 18253789Srpaulo 19253789Srpaulo/* magic number passed by multiboot-compliant boot loaders */ 20253789Srpaulo#define MULTIBOOT_BOOTLOADER_MAGIC 0x2BADB002 21253789Srpaulo 22253789Srpaulo#ifndef __ASSEMBLER__ 23253789Srpaulo 24253789Srpaulo#include <stdint.h> 25253789Srpaulo 26253789Srpaulo/* multiboot header */ 27253789Srpaulotypedef struct multiboot_header { 28253789Srpaulo uint32_t magic; 29287727Sadrian uint32_t flags; 30253789Srpaulo uint32_t checksum; 31253789Srpaulo uint32_t header_addr; 32253789Srpaulo uint32_t load_addr; 33253789Srpaulo uint32_t load_end_addr; 34253789Srpaulo uint32_t bss_end_addr; 35253789Srpaulo uint32_t entry_addr; 36253789Srpaulo} multiboot_header_t; 37253789Srpaulo 38253789Srpaulo/* symbol table for a.out */ 39253789Srpaulotypedef struct aout_symbol_table { 40253789Srpaulo uint32_t tabsize; 41253789Srpaulo uint32_t strsize; 42253789Srpaulo uint32_t addr; 43253789Srpaulo uint32_t reserved; 44253789Srpaulo} aout_symbol_table_t; 45253789Srpaulo 46253789Srpaulo/* section header table for ELF */ 47253789Srpaulotypedef struct elf_section_header_table { 48257176Sglebius uint32_t num; 49253789Srpaulo uint32_t size; 50253789Srpaulo uint32_t addr; 51253789Srpaulo uint32_t shndx; 52253789Srpaulo} elf_section_header_table_t; 53253789Srpaulo 54253789Srpaulo/* multiboot info */ 55253789Srpaulotypedef struct multiboot_info { 56253789Srpaulo uint32_t flags; 57253789Srpaulo uint32_t mem_lower; 58253789Srpaulo uint32_t mem_upper; 59253789Srpaulo uint32_t boot_device; 60253789Srpaulo uint32_t cmdline; 61253789Srpaulo uint32_t mods_count; 62253789Srpaulo uint32_t mods_addr; 63253789Srpaulo union { 64253789Srpaulo aout_symbol_table_t aout_sym; 65253789Srpaulo elf_section_header_table_t elf_sec; 66253789Srpaulo } u; 67253789Srpaulo uint32_t mmap_length; 68253789Srpaulo uint32_t mmap_addr; 69253789Srpaulo uint32_t drives_length; 70253789Srpaulo uint32_t drives_addr; 71253789Srpaulo uint32_t config_table; 72253789Srpaulo uint32_t boot_loader_name; 73253789Srpaulo uint32_t apm_table; 74253789Srpaulo} multiboot_info_t; 75253789Srpaulo 76276701Shselaskyenum { 77253789Srpaulo MB_INFO_MEM_SIZE = 0x001, 78287727Sadrian MB_INFO_BOOT_DEV = 0x002, 79287727Sadrian MB_INFO_CMD_LINE = 0x004, 80287727Sadrian MB_INFO_MODS = 0x008, 81287727Sadrian MB_INFO_SYMS = 0x010, 82287727Sadrian MB_INFO_SHDR = 0x020, 83287727Sadrian MB_INFO_MMAP = 0x040, 84287727Sadrian MB_INFO_DRIVES = 0x080, 85253789Srpaulo MB_INFO_CONFIG = 0x100, 86253789Srpaulo MB_INFO_BOOT_LOADER = 0x200, 87287947Sadrian MB_INFO_APM_TABLE = 0x400, 88287947Sadrian MB_INFO_VBE = 0x800, 89287947Sadrian}; 90287727Sadrian 91287727Sadrian/* module structure */ 92287727Sadriantypedef struct module { 93287727Sadrian uint32_t mod_start; 94287727Sadrian uint32_t mod_end; 95287727Sadrian uint32_t string; 96287727Sadrian uint32_t reserved; 97287727Sadrian} module_t; 98287727Sadrian 99287727Sadrian/* memory map - be careful that the offset 0 is base_addr_low without size */ 100287727Sadriantypedef struct memory_map { 101287727Sadrian uint32_t size; 102253789Srpaulo uint32_t base_addr_low; 103253789Srpaulo uint32_t base_addr_high; 104253789Srpaulo uint32_t length_low; 105253789Srpaulo uint32_t length_high; 106253789Srpaulo uint32_t type; 107253789Srpaulo} memory_map_t; 108253789Srpaulo 109253789Srpaulo/* memory map entry types */ 110253789Srpauloenum { 111253789Srpaulo MB_MMAP_TYPE_AVAILABLE = 0x01, 112253789Srpaulo MB_MMAP_TYPE_RESERVED = 0x02, 113253789Srpaulo MB_MMAP_TYPE_ACPI_RECLAIM = 0x03, 114253789Srpaulo MB_MMAP_TYPE_ACPI_NVS = 0x04, 115253789Srpaulo}; 116253789Srpaulo 117253789Srpaulo#endif 118253789Srpaulo 119253789Srpaulo#endif 120253789Srpaulo