18e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin/* Copyright (C) 1999, 2001  Free Software Foundation, Inc.
28e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin
38e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin   This program is free software; you can redistribute it and/or modify
48e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin   it under the terms of the GNU General Public License as published by
58e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin   the Free Software Foundation; either version 2 of the License, or
68e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin   (at your option) any later version.
78e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin
88e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin   This program is distributed in the hope that it will be useful,
98e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin   but WITHOUT ANY WARRANTY; without even the implied warranty of
108e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
118e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin   GNU General Public License for more details.
128e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin
138e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin   You should have received a copy of the GNU General Public License
148e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin   along with this program; if not, write to the Free Software
158e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
168e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin
178e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin#ifndef __MULTIBOOT_H__
188e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin#define __MULTIBOOT_H__
198e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin
208e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin/*
218e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin * Multiboot header structure.
228e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin */
238e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin#define MULTIBOOT_HEADER_MAGIC         0x1BADB002
248e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin#define MULTIBOOT_HEADER_MODS_ALIGNED  0x00000001
258e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin#define MULTIBOOT_HEADER_WANT_MEMORY   0x00000002
268e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin#define MULTIBOOT_HEADER_HAS_VBE       0x00000004
278e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin#define MULTIBOOT_HEADER_HAS_ADDR      0x00010000
288e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin
298e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin/* The magic number passed by a Multiboot-compliant boot loader. */
308e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin#define MULTIBOOT_BOOTLOADER_MAGIC     0x2BADB002
318e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin
328e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin#define MBI_MEMLIMITS  (1u<< 0)
338e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin#define MBI_BOOTDEV    (1u<< 1)
348e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin#define MBI_CMDLINE    (1u<< 2)
358e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin#define MBI_MODULES    (1u<< 3)
368e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin#define MBI_AOUT_SYMS  (1u<< 4)
378e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin#define MBI_ELF_SYMS   (1u<< 5)
388e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin#define MBI_MEMMAP     (1u<< 6)
398e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin#define MBI_DRIVES     (1u<< 7)
408e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin#define MBI_BIOSCONFIG (1u<< 8)
418e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin#define MBI_LOADERNAME (1u<< 9)
428e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin#define MBI_APM        (1u<<10)
438e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin
448e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin#ifndef __ASSEMBLY__
458e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin
468e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin/* The symbol table for a.out.  */
478e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugintypedef struct {
488e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin	u32 tabsize;
498e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin	u32 strsize;
508e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin	u32 addr;
518e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin	u32 reserved;
528e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin} aout_symbol_table_t;
538e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin
548e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin/* The section header table for ELF.  */
558e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugintypedef struct {
568e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin	u32 num;
578e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin	u32 size;
588e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin	u32 addr;
598e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin	u32 shndx;
608e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin} elf_section_header_table_t;
618e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin
628e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin/* The Multiboot information.  */
638e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugintypedef struct {
648e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin	u32 flags;
658e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin
668e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin	/* Valid if flags sets MBI_MEMLIMITS */
678e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin	u32 mem_lower;
688e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin	u32 mem_upper;
698e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin
708e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin	/* Valid if flags sets MBI_BOOTDEV */
718e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin	u32 boot_device;
728e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin
738e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin	/* Valid if flags sets MBI_CMDLINE */
748e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin	u32 cmdline;
758e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin
768e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin	/* Valid if flags sets MBI_MODULES */
778e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin	u32 mods_count;
788e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin	u32 mods_addr;
798e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin
808e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin	/* Valid if flags sets ... */
818e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin	union {
828e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin		aout_symbol_table_t aout_sym;        /* ... MBI_AOUT_SYMS */
838e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin		elf_section_header_table_t elf_sec;  /* ... MBI_ELF_SYMS */
848e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin	} u;
858e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin
868e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin	/* Valid if flags sets MBI_MEMMAP */
878e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin	u32 mmap_length;
888e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin	u32 mmap_addr;
898e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin
908e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin	/* Valid if flags sets MBI_DRIVES */
918e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin	u32 drives_length;
928e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin	u32 drives_addr;
938e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin
948e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin	/* Valid if flags sets MBI_BIOSCONFIG */
958e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin	u32 config_table;
968e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin
978e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin	/* Valid if flags sets MBI_LOADERNAME */
988e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin	u32 boot_loader_name;
998e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin
1008e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin	/* Valid if flags sets MBI_APM */
1018e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin	u32 apm_table;
1028e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin} multiboot_info_t;
1038e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin
1048e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin/* The module structure.  */
1058e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugintypedef struct {
1068e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin	u32 mod_start;
1078e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin	u32 mod_end;
1088e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin	u32 string;
1098e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin	u32 reserved;
1108e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin} module_t;
1118e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin
1128e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin/* The memory map. Be careful that the offset 0 is base_addr_low
1138e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin   but no size.  */
1148e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugintypedef struct {
1158e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin	u32 size;
1168e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin	u32 base_addr_low;
1178e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin	u32 base_addr_high;
1188e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin	u32 length_low;
1198e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin	u32 length_high;
1208e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin	u32 type;
1218e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin} memory_map_t;
1228e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin
1238e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin
1248e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin#endif /* __ASSEMBLY__ */
1258e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin
1268e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin
1278e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin#endif /* _BOOTSTUB_MB_H */
128