184d9c625SLionel Sambuc #ifndef _MACHINE_MULTIBOOT_H /* LSC: FIXME: In MINIX this header is included everywhere... */ 2be9fe09eSBen Gras #define _MACHINE_MULTIBOOT_H 1 3be9fe09eSBen Gras 4f14fb602SLionel Sambuc /* $NetBSD: multiboot.h,v 1.8 2009/02/22 18:05:42 ahoka Exp $ */ 5f14fb602SLionel Sambuc 6f14fb602SLionel Sambuc /*- 7f14fb602SLionel Sambuc * Copyright (c) 2005, 2006 The NetBSD Foundation, Inc. 8f14fb602SLionel Sambuc * All rights reserved. 9f14fb602SLionel Sambuc * 10f14fb602SLionel Sambuc * This code is derived from software contributed to The NetBSD Foundation 11f14fb602SLionel Sambuc * by Julio M. Merino Vidal. 12f14fb602SLionel Sambuc * 13f14fb602SLionel Sambuc * Redistribution and use in source and binary forms, with or without 14f14fb602SLionel Sambuc * modification, are permitted provided that the following conditions 15f14fb602SLionel Sambuc * are met: 16f14fb602SLionel Sambuc * 1. Redistributions of source code must retain the above copyright 17f14fb602SLionel Sambuc * notice, this list of conditions and the following disclaimer. 18f14fb602SLionel Sambuc * 2. Redistributions in binary form must reproduce the above copyright 19f14fb602SLionel Sambuc * notice, this list of conditions and the following disclaimer in the 20f14fb602SLionel Sambuc * documentation and/or other materials provided with the distribution. 21f14fb602SLionel Sambuc * 22f14fb602SLionel Sambuc * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS 23f14fb602SLionel Sambuc * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 24f14fb602SLionel Sambuc * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 25f14fb602SLionel Sambuc * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS 26f14fb602SLionel Sambuc * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 27f14fb602SLionel Sambuc * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 28f14fb602SLionel Sambuc * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 29f14fb602SLionel Sambuc * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 30f14fb602SLionel Sambuc * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 31f14fb602SLionel Sambuc * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 32f14fb602SLionel Sambuc * POSSIBILITY OF SUCH DAMAGE. 33f14fb602SLionel Sambuc */ 34f14fb602SLionel Sambuc 35f14fb602SLionel Sambuc /* --------------------------------------------------------------------- */ 36f14fb602SLionel Sambuc 37f14fb602SLionel Sambuc /* 38f14fb602SLionel Sambuc * Multiboot header structure. 39f14fb602SLionel Sambuc */ 40f14fb602SLionel Sambuc #define MULTIBOOT_HEADER_MAGIC 0x1BADB002 41f14fb602SLionel Sambuc #define MULTIBOOT_HEADER_MODS_ALIGNED 0x00000001 42f14fb602SLionel Sambuc #define MULTIBOOT_HEADER_WANT_MEMORY 0x00000002 43f14fb602SLionel Sambuc #define MULTIBOOT_HEADER_HAS_VBE 0x00000004 44f14fb602SLionel Sambuc #define MULTIBOOT_HEADER_HAS_ADDR 0x00010000 45f14fb602SLionel Sambuc 463f38115cSBen Gras #if defined(__minix) && !defined(__ASSEMBLY__) && (defined(_MINIX_SYSTEM) || defined(_STANDALONE)) 47be9fe09eSBen Gras 48f14fb602SLionel Sambuc #if !defined(_LOCORE) 493f38115cSBen Gras 503f38115cSBen Gras #include <machine/types.h> 513f38115cSBen Gras 52f14fb602SLionel Sambuc struct multiboot_header { 53f14fb602SLionel Sambuc uint32_t mh_magic; 54f14fb602SLionel Sambuc uint32_t mh_flags; 55f14fb602SLionel Sambuc uint32_t mh_checksum; 56f14fb602SLionel Sambuc 57f14fb602SLionel Sambuc /* Valid if mh_flags sets MULTIBOOT_HEADER_HAS_ADDR. */ 58f14fb602SLionel Sambuc paddr_t mh_header_addr; 59f14fb602SLionel Sambuc paddr_t mh_load_addr; 60f14fb602SLionel Sambuc paddr_t mh_load_end_addr; 61f14fb602SLionel Sambuc paddr_t mh_bss_end_addr; 62f14fb602SLionel Sambuc paddr_t mh_entry_addr; 63f14fb602SLionel Sambuc 64f14fb602SLionel Sambuc /* Valid if mh_flags sets MULTIBOOT_HEADER_HAS_VBE. */ 65f14fb602SLionel Sambuc uint32_t mh_mode_type; 66f14fb602SLionel Sambuc uint32_t mh_width; 67f14fb602SLionel Sambuc uint32_t mh_height; 68f14fb602SLionel Sambuc uint32_t mh_depth; 69f14fb602SLionel Sambuc }; 70f14fb602SLionel Sambuc #endif /* !defined(_LOCORE) */ 71f14fb602SLionel Sambuc 72f14fb602SLionel Sambuc /* 73f14fb602SLionel Sambuc * Symbols defined in locore.S. 74f14fb602SLionel Sambuc */ 75f14fb602SLionel Sambuc #if !defined(_LOCORE) && defined(_KERNEL) 76f14fb602SLionel Sambuc extern struct multiboot_header *Multiboot_Header; 77f14fb602SLionel Sambuc #endif /* !defined(_LOCORE) && defined(_KERNEL) */ 78f14fb602SLionel Sambuc 793f38115cSBen Gras #endif /* defined(__minix) && !defined(__ASSEMBLY__) && (defined(_MINIX_SYSTEM) || defined(_STANDALONE))*/ 80be9fe09eSBen Gras 81f14fb602SLionel Sambuc /* --------------------------------------------------------------------- */ 82f14fb602SLionel Sambuc 83f14fb602SLionel Sambuc /* 84f14fb602SLionel Sambuc * Multiboot information structure. 85f14fb602SLionel Sambuc */ 86f14fb602SLionel Sambuc #define MULTIBOOT_INFO_MAGIC 0x2BADB002 87f14fb602SLionel Sambuc #define MULTIBOOT_INFO_HAS_MEMORY 0x00000001 88f14fb602SLionel Sambuc #define MULTIBOOT_INFO_HAS_BOOT_DEVICE 0x00000002 89f14fb602SLionel Sambuc #define MULTIBOOT_INFO_HAS_CMDLINE 0x00000004 90f14fb602SLionel Sambuc #define MULTIBOOT_INFO_HAS_MODS 0x00000008 91f14fb602SLionel Sambuc #define MULTIBOOT_INFO_HAS_AOUT_SYMS 0x00000010 92f14fb602SLionel Sambuc #define MULTIBOOT_INFO_HAS_ELF_SYMS 0x00000020 93f14fb602SLionel Sambuc #define MULTIBOOT_INFO_HAS_MMAP 0x00000040 94f14fb602SLionel Sambuc #define MULTIBOOT_INFO_HAS_DRIVES 0x00000080 95f14fb602SLionel Sambuc #define MULTIBOOT_INFO_HAS_CONFIG_TABLE 0x00000100 96f14fb602SLionel Sambuc #define MULTIBOOT_INFO_HAS_LOADER_NAME 0x00000200 97f14fb602SLionel Sambuc #define MULTIBOOT_INFO_HAS_APM_TABLE 0x00000400 98f14fb602SLionel Sambuc #define MULTIBOOT_INFO_HAS_VBE 0x00000800 99*b67d2ae9Srlfnb #define MULTIBOOT_INFO_HAS_FRAMEBUFFER 0x00001000 100f14fb602SLionel Sambuc 1013f38115cSBen Gras #if defined(__minix) && !defined(__ASSEMBLY__) && (defined(_MINIX_SYSTEM) || defined(_STANDALONE)) 102be9fe09eSBen Gras 103f14fb602SLionel Sambuc #if !defined(_LOCORE) 104f14fb602SLionel Sambuc struct multiboot_info { 105f14fb602SLionel Sambuc uint32_t mi_flags; 106f14fb602SLionel Sambuc 107f14fb602SLionel Sambuc /* Valid if mi_flags sets MULTIBOOT_INFO_HAS_MEMORY. */ 108f14fb602SLionel Sambuc uint32_t mi_mem_lower; 109f14fb602SLionel Sambuc uint32_t mi_mem_upper; 110f14fb602SLionel Sambuc 111f14fb602SLionel Sambuc /* Valid if mi_flags sets MULTIBOOT_INFO_HAS_BOOT_DEVICE. */ 112f14fb602SLionel Sambuc uint8_t mi_boot_device_part3; 113f14fb602SLionel Sambuc uint8_t mi_boot_device_part2; 114f14fb602SLionel Sambuc uint8_t mi_boot_device_part1; 115f14fb602SLionel Sambuc uint8_t mi_boot_device_drive; 116f14fb602SLionel Sambuc 117f14fb602SLionel Sambuc /* Valid if mi_flags sets MULTIBOOT_INFO_HAS_CMDLINE. */ 118f14fb602SLionel Sambuc char * mi_cmdline; 119f14fb602SLionel Sambuc 120f14fb602SLionel Sambuc /* Valid if mi_flags sets MULTIBOOT_INFO_HAS_MODS. */ 121f14fb602SLionel Sambuc uint32_t mi_mods_count; 122f14fb602SLionel Sambuc vaddr_t mi_mods_addr; 123f14fb602SLionel Sambuc 124f14fb602SLionel Sambuc /* Valid if mi_flags sets MULTIBOOT_INFO_HAS_{AOUT,ELF}_SYMS. */ 125f14fb602SLionel Sambuc uint32_t mi_elfshdr_num; 126f14fb602SLionel Sambuc uint32_t mi_elfshdr_size; 127f14fb602SLionel Sambuc vaddr_t mi_elfshdr_addr; 128f14fb602SLionel Sambuc uint32_t mi_elfshdr_shndx; 129f14fb602SLionel Sambuc 130f14fb602SLionel Sambuc /* Valid if mi_flags sets MULTIBOOT_INFO_HAS_MMAP. */ 131f14fb602SLionel Sambuc uint32_t mi_mmap_length; 132f14fb602SLionel Sambuc vaddr_t mi_mmap_addr; 133f14fb602SLionel Sambuc 134f14fb602SLionel Sambuc /* Valid if mi_flags sets MULTIBOOT_INFO_HAS_DRIVES. */ 135f14fb602SLionel Sambuc uint32_t mi_drives_length; 136f14fb602SLionel Sambuc vaddr_t mi_drives_addr; 137f14fb602SLionel Sambuc 138f14fb602SLionel Sambuc /* Valid if mi_flags sets MULTIBOOT_INFO_HAS_CONFIG_TABLE. */ 139f14fb602SLionel Sambuc void * unused_mi_config_table; 140f14fb602SLionel Sambuc 141f14fb602SLionel Sambuc /* Valid if mi_flags sets MULTIBOOT_INFO_HAS_LOADER_NAME. */ 142f14fb602SLionel Sambuc char * mi_loader_name; 143f14fb602SLionel Sambuc 144f14fb602SLionel Sambuc /* Valid if mi_flags sets MULTIBOOT_INFO_HAS_APM. */ 145f14fb602SLionel Sambuc void * unused_mi_apm_table; 146f14fb602SLionel Sambuc 147f14fb602SLionel Sambuc /* Valid if mi_flags sets MULTIBOOT_INFO_HAS_VBE. */ 148*b67d2ae9Srlfnb uint32_t vbe_control_info; 149*b67d2ae9Srlfnb uint32_t vbe_mode_info; 150*b67d2ae9Srlfnb uint16_t vbe_mode; 151*b67d2ae9Srlfnb uint16_t vbe_interface_seg; 152*b67d2ae9Srlfnb uint16_t vbe_interface_off; 153*b67d2ae9Srlfnb uint16_t vbe_interface_len; 154*b67d2ae9Srlfnb 155*b67d2ae9Srlfnb /* Valid if mi_flags sets MULTIBOOT_INFO_HAS_FRAMEBUFFER. */ 156*b67d2ae9Srlfnb uint64_t framebuffer_addr; 157*b67d2ae9Srlfnb uint32_t framebuffer_pitch; 158*b67d2ae9Srlfnb uint32_t framebuffer_width; 159*b67d2ae9Srlfnb uint32_t framebuffer_height; 160*b67d2ae9Srlfnb uint8_t framebuffer_bpp; 161*b67d2ae9Srlfnb #define MULTIBOOT_FRAMEBUFFER_TYPE_INDEXED 0 162*b67d2ae9Srlfnb #define MULTIBOOT_FRAMEBUFFER_TYPE_RGB 1 163*b67d2ae9Srlfnb #define MULTIBOOT_FRAMEBUFFER_TYPE_EGA_TEXT 2 164*b67d2ae9Srlfnb uint8_t framebuffer_type; 165*b67d2ae9Srlfnb union 166*b67d2ae9Srlfnb { 167*b67d2ae9Srlfnb struct 168*b67d2ae9Srlfnb { 169*b67d2ae9Srlfnb uint32_t framebuffer_palette_addr; 170*b67d2ae9Srlfnb uint16_t framebuffer_palette_num_colors; 171*b67d2ae9Srlfnb }; 172*b67d2ae9Srlfnb struct 173*b67d2ae9Srlfnb { 174*b67d2ae9Srlfnb uint8_t framebuffer_red_field_position; 175*b67d2ae9Srlfnb uint8_t framebuffer_red_mask_size; 176*b67d2ae9Srlfnb uint8_t framebuffer_green_field_position; 177*b67d2ae9Srlfnb uint8_t framebuffer_green_mask_size; 178*b67d2ae9Srlfnb uint8_t framebuffer_blue_field_position; 179*b67d2ae9Srlfnb uint8_t framebuffer_blue_mask_size; 180*b67d2ae9Srlfnb }; 181*b67d2ae9Srlfnb }; 182f14fb602SLionel Sambuc }; 183f14fb602SLionel Sambuc 184f14fb602SLionel Sambuc /* --------------------------------------------------------------------- */ 185f14fb602SLionel Sambuc 186f14fb602SLionel Sambuc /* 187f14fb602SLionel Sambuc * Drive information. This describes an entry in the drives table as 188f14fb602SLionel Sambuc * pointed to by mi_drives_addr. 189f14fb602SLionel Sambuc */ 190f14fb602SLionel Sambuc struct multiboot_drive { 191f14fb602SLionel Sambuc uint32_t md_length; 192f14fb602SLionel Sambuc uint8_t md_number; 193f14fb602SLionel Sambuc uint8_t md_mode; 194f14fb602SLionel Sambuc uint16_t md_cylinders; 195f14fb602SLionel Sambuc uint8_t md_heads; 196f14fb602SLionel Sambuc uint8_t md_sectors; 197f14fb602SLionel Sambuc 198f14fb602SLionel Sambuc /* The variable-sized 'ports' field comes here, so this structure 199f14fb602SLionel Sambuc * can be longer. */ 200f14fb602SLionel Sambuc }; 201f14fb602SLionel Sambuc 202f14fb602SLionel Sambuc /* --------------------------------------------------------------------- */ 203f14fb602SLionel Sambuc 204f14fb602SLionel Sambuc /* 205f14fb602SLionel Sambuc * Memory mapping. This describes an entry in the memory mappings table 206f14fb602SLionel Sambuc * as pointed to by mi_mmap_addr. 207f14fb602SLionel Sambuc * 208f14fb602SLionel Sambuc * Be aware that mm_size specifies the size of all other fields *except* 209f14fb602SLionel Sambuc * for mm_size. In order to jump between two different entries, you 210f14fb602SLionel Sambuc * have to count mm_size + 4 bytes. 211f14fb602SLionel Sambuc */ 212f14fb602SLionel Sambuc struct multiboot_mmap { 213f14fb602SLionel Sambuc uint32_t mm_size; 214f14fb602SLionel Sambuc uint64_t mm_base_addr; 215f14fb602SLionel Sambuc uint64_t mm_length; 216f14fb602SLionel Sambuc uint32_t mm_type; 217f14fb602SLionel Sambuc }; 218f14fb602SLionel Sambuc 219f14fb602SLionel Sambuc /* 220f14fb602SLionel Sambuc * Modules. This describes an entry in the modules table as pointed 221f14fb602SLionel Sambuc * to by mi_mods_addr. 222f14fb602SLionel Sambuc */ 223f14fb602SLionel Sambuc 224f14fb602SLionel Sambuc struct multiboot_module { 225f14fb602SLionel Sambuc uint32_t mmo_start; 226f14fb602SLionel Sambuc uint32_t mmo_end; 227f14fb602SLionel Sambuc char * mmo_string; 228f14fb602SLionel Sambuc uint32_t mmo_reserved; 229f14fb602SLionel Sambuc }; 230f14fb602SLionel Sambuc 23184d9c625SLionel Sambuc #endif /* !defined(_LOCORE) */ 232be9fe09eSBen Gras 2333f38115cSBen Gras #endif /* defined(__minix) && !defined(__ASSEMBLY__) && (defined(_MINIX_SYSTEM) || defined(_STANDALONE))*/ 234be9fe09eSBen Gras 23584d9c625SLionel Sambuc #if defined(__minix) 236be9fe09eSBen Gras 237be9fe09eSBen Gras #ifndef __ASSEMBLY__ 238be9fe09eSBen Gras typedef struct multiboot_info multiboot_info_t; 239be9fe09eSBen Gras typedef struct multiboot_module multiboot_module_t; 240be9fe09eSBen Gras typedef struct multiboot_mmap multiboot_memory_map_t; 241be9fe09eSBen Gras #endif 242be9fe09eSBen Gras 243be9fe09eSBen Gras #define MULTIBOOT_MEMORY_AVAILABLE 1 244be9fe09eSBen Gras #define MULTIBOOT_MAX_MODS 20 245be9fe09eSBen Gras 246be9fe09eSBen Gras #define mod_start mmo_start 247be9fe09eSBen Gras #define mod_end mmo_end 248be9fe09eSBen Gras 249be9fe09eSBen Gras #define mmap_addr mi_mmap_addr 250be9fe09eSBen Gras #define mmap_length mi_mmap_length 251be9fe09eSBen Gras 252be9fe09eSBen Gras #define MULTIBOOT_VIDEO_MODE 0x00000004 253be9fe09eSBen Gras #define MULTIBOOT_VIDEO_MODE_EGA 1 254be9fe09eSBen Gras #define MULTIBOOT_VIDEO_BUFFER 0xB8000 255be9fe09eSBen Gras 256be9fe09eSBen Gras #define MULTIBOOT_CONSOLE_LINES 25 257be9fe09eSBen Gras #define MULTIBOOT_CONSOLE_COLS 80 258be9fe09eSBen Gras 25984d9c625SLionel Sambuc #define MULTIBOOT_PARAM_BUF_SIZE 1024 26084d9c625SLionel Sambuc #endif /* defined(__minix) */ 261f14fb602SLionel Sambuc 262f14fb602SLionel Sambuc /* --------------------------------------------------------------------- */ 263f14fb602SLionel Sambuc 264f14fb602SLionel Sambuc /* 265f14fb602SLionel Sambuc * Prototypes for public functions defined in multiboot.c. 266f14fb602SLionel Sambuc */ 267f14fb602SLionel Sambuc #if !defined(_LOCORE) && defined(_KERNEL) 268f14fb602SLionel Sambuc void multiboot_pre_reloc(struct multiboot_info *); 269f14fb602SLionel Sambuc void multiboot_post_reloc(void); 270f14fb602SLionel Sambuc void multiboot_print_info(void); 271f14fb602SLionel Sambuc bool multiboot_ksyms_addsyms_elf(void); 272f14fb602SLionel Sambuc #endif /* !defined(_LOCORE) */ 273f14fb602SLionel Sambuc 274f14fb602SLionel Sambuc /* --------------------------------------------------------------------- */ 275f87b9a3dSAntoine Leca 27684d9c625SLionel Sambuc #endif /* _MACHINE_MULTIBOOT_H */ 277