176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/* 276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * GRUB -- GRand Unified Bootloader 376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * Copyright (C) 2000 Free Software Foundation, Inc. 476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * 576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * This program is free software; you can redistribute it and/or modify 676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * it under the terms of the GNU General Public License as published by 776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * the Free Software Foundation; either version 2 of the License, or 876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * (at your option) any later version. 976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * 1076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * This program is distributed in the hope that it will be useful, 1176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * but WITHOUT ANY WARRANTY; without even the implied warranty of 1276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 1376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * GNU General Public License for more details. 1476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * 1576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * You should have received a copy of the GNU General Public License 1676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * along with this program; if not, write to the Free Software 1776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 1876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman */ 1976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 2076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/* 2176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * The structure type "mod_list" is used by the "multiboot_info" structure. 2276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman */ 2376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 2476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#ifndef MBOOT_MB_INFO_H 2576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define MBOOT_MB_INFO_H 2676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 2776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#include <inttypes.h> 2876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 2976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanstruct mod_list { 3076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman /* the memory used goes from bytes 'mod_start' to 'mod_end-1' inclusive */ 3176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint32_t mod_start; 3276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint32_t mod_end; 3376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 3476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman /* Module command line */ 3576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint32_t cmdline; 3676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 3776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman /* padding to take it to 16 bytes (must be zero) */ 3876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint32_t pad; 3976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman}; 4076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 4176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/* 4276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * INT-15, AX=E820 style "AddressRangeDescriptor" 4376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * ...with a "size" parameter on the front which is the structure size - 4, 4476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * pointing to the next one, up until the full buffer length of the memory 4576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * map has been reached. 4676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman */ 4776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 4876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanstruct AddrRangeDesc { 4976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint32_t size; 5076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint64_t BaseAddr; 5176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint64_t Length; 5276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint32_t Type; 5376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman /* unspecified optional padding... */ 5476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} __attribute__ ((packed)); 5576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 5676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/* usable memory "Type", all others are reserved. */ 5776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define MB_ARD_MEMORY 1 5876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 5976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/* Drive Info structure. */ 6076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanstruct drive_info { 6176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman /* The size of this structure. */ 6276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint32_t size; 6376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 6476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman /* The BIOS drive number. */ 6576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint8_t drive_number; 6676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 6776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman /* The access mode (see below). */ 6876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint8_t drive_mode; 6976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 7076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman /* The BIOS geometry. */ 7176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint16_t drive_cylinders; 7276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint8_t drive_heads; 7376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint8_t drive_sectors; 7476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 7576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman /* The array of I/O ports used for the drive. */ 7676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint16_t drive_ports[0]; 7776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman}; 7876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 7976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/* Drive Mode. */ 8076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define MB_DI_CHS_MODE 0 8176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define MB_DI_LBA_MODE 1 8276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 8376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/* APM BIOS info. */ 8476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanstruct apm_info { 8576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint16_t version; 8676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint16_t cseg; 8776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint32_t offset; 8876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint16_t cseg_16; 8976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint16_t dseg_16; 9076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint16_t cseg_len; 9176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint16_t cseg_16_len; 9276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint16_t dseg_16_len; 9376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman}; 9476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 9576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/* 9676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * MultiBoot Info description 9776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * 9876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * This is the struct passed to the boot image. This is done by placing 9976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * its address in the EAX register. 10076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman */ 10176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 10276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanstruct multiboot_info { 10376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman /* MultiBoot info version number */ 10476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint32_t flags; 10576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 10676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman /* Available memory from BIOS */ 10776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint32_t mem_lower; 10876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint32_t mem_upper; 10976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 11076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman /* "root" partition */ 11176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint32_t boot_device; 11276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 11376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman /* Kernel command line */ 11476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint32_t cmdline; 11576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 11676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman /* Boot-Module list */ 11776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint32_t mods_count; 11876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint32_t mods_addr; 11976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 12076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman union { 12176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman struct { 12276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman /* (a.out) Kernel symbol table info */ 12376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint32_t tabsize; 12476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint32_t strsize; 12576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint32_t addr; 12676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint32_t pad; 12776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman } a; 12876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman struct { 12976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman /* (ELF) Kernel section header table */ 13076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint32_t num; 13176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint32_t size; 13276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint32_t addr; 13376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint32_t shndx; 13476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman } e; 13576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman } syms; 13676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 13776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman /* Memory Mapping buffer */ 13876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint32_t mmap_length; 13976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint32_t mmap_addr; 14076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 14176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman /* Drive Info buffer */ 14276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint32_t drives_length; 14376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint32_t drives_addr; 14476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 14576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman /* ROM configuration table */ 14676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint32_t config_table; 14776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 14876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman /* Boot Loader Name */ 14976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint32_t boot_loader_name; 15076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 15176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman /* APM table */ 15276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint32_t apm_table; 15376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 15476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman /* Video */ 15576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint32_t vbe_control_info; 15676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint32_t vbe_mode_info; 15776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint16_t vbe_mode; 15876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint16_t vbe_interface_seg; 15976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint16_t vbe_interface_off; 16076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint16_t vbe_interface_len; 16176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman}; 16276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 16376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/* 16476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * Flags to be set in the 'flags' parameter above 16576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman */ 16676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 16776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/* is there basic lower/upper memory information? */ 16876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define MB_INFO_MEMORY 0x00000001 16976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/* is there a boot device set? */ 17076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define MB_INFO_BOOTDEV 0x00000002 17176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/* is the command-line defined? */ 17276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define MB_INFO_CMDLINE 0x00000004 17376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/* are there modules to do something with? */ 17476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define MB_INFO_MODS 0x00000008 17576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 17676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/* These next two are mutually exclusive */ 17776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 17876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/* is there a symbol table loaded? */ 17976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define MB_INFO_AOUT_SYMS 0x00000010 18076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/* is there an ELF section header table? */ 18176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define MB_INFO_ELF_SHDR 0x00000020 18276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 18376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/* is there a full memory map? */ 18476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define MB_INFO_MEM_MAP 0x00000040 18576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 18676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/* Is there drive info? */ 18776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define MB_INFO_DRIVE_INFO 0x00000080 18876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 18976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/* Is there a config table? */ 19076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define MB_INFO_CONFIG_TABLE 0x00000100 19176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 19276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/* Is there a boot loader name? */ 19376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define MB_INFO_BOOT_LOADER_NAME 0x00000200 19476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 19576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/* Is there a APM table? */ 19676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define MB_INFO_APM_TABLE 0x00000400 19776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 19876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/* Is there video information? */ 19976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define MB_INFO_VIDEO_INFO 0x00000800 20076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 20176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/* 20276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * The following value must be present in the EAX register. 20376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman */ 20476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 20576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define MULTIBOOT_VALID 0x2BADB002 20676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 20776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#endif /* MBOOT_MB_INFO_H */ 208