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