15b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project/* multiboot.h - the header for Multiboot */
25b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project/* Copyright (C) 1999, 2001  Free Software Foundation, Inc.
35b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
45b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project   This program is free software; you can redistribute it and/or modify
55b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project   it under the terms of the GNU General Public License as published by
65b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project   the Free Software Foundation; either version 2 of the License, or
75b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project   (at your option) any later version.
85b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
95b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project   This program is distributed in the hope that it will be useful,
105b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project   but WITHOUT ANY WARRANTY; without even the implied warranty of
115b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
125b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project   GNU General Public License for more details.
135b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
145b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project   You should have received a copy of the GNU General Public License
155b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project   along with this program; if not, write to the Free Software
165b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
175b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
185b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project/* Macros.  */
195b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
205b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project/* The magic number for the Multiboot header.  */
215b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define MULTIBOOT_HEADER_MAGIC		0x1BADB002
225b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
235b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project/* The flags for the Multiboot header.  */
245b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#ifdef __ELF__
255b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project# define MULTIBOOT_HEADER_FLAGS		0x00000003
265b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#else
275b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project# define MULTIBOOT_HEADER_FLAGS		0x00010003
285b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#endif
295b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
305b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project/* The magic number passed by a Multiboot-compliant boot loader.  */
315b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define MULTIBOOT_BOOTLOADER_MAGIC	0x2BADB002
325b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
335b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project/* The size of our stack (16KB).  */
345b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define STACK_SIZE			0x4000
355b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
365b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project/* C symbol format. HAVE_ASM_USCORE is defined by configure.  */
375b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#ifdef HAVE_ASM_USCORE
385b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project# define EXT_C(sym)			_ ## sym
395b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#else
405b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project# define EXT_C(sym)			sym
415b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#endif
425b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
435b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#ifndef ASM
445b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project/* Do not include here in boot.S.  */
455b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
465b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project/* Types.  */
475b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
485b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project/* The Multiboot header.  */
495b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projecttypedef struct multiboot_header
505b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project{
515b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  unsigned long magic;
525b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  unsigned long flags;
535b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  unsigned long checksum;
545b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  unsigned long header_addr;
555b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  unsigned long load_addr;
565b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  unsigned long load_end_addr;
575b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  unsigned long bss_end_addr;
585b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  unsigned long entry_addr;
595b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} multiboot_header_t;
605b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
615b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project/* The symbol table for a.out.  */
625b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projecttypedef struct aout_symbol_table
635b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project{
645b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  unsigned long tabsize;
655b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  unsigned long strsize;
665b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  unsigned long addr;
675b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  unsigned long reserved;
685b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} aout_symbol_table_t;
695b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
705b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project/* The section header table for ELF.  */
715b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projecttypedef struct elf_section_header_table
725b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project{
735b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  unsigned long num;
745b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  unsigned long size;
755b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  unsigned long addr;
765b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  unsigned long shndx;
775b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} elf_section_header_table_t;
785b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
795b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project/* The Multiboot information.  */
805b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projecttypedef struct multiboot_info
815b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project{
825b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  unsigned long flags;
835b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  unsigned long mem_lower;
845b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  unsigned long mem_upper;
855b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  unsigned long boot_device;
865b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  unsigned long cmdline;
875b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  unsigned long mods_count;
885b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  unsigned long mods_addr;
895b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  union
905b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  {
915b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    aout_symbol_table_t aout_sym;
925b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    elf_section_header_table_t elf_sec;
935b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  } u;
945b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  unsigned long mmap_length;
955b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  unsigned long mmap_addr;
965b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} multiboot_info_t;
975b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
985b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project/* The module structure.  */
995b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projecttypedef struct module
1005b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project{
1015b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  unsigned long mod_start;
1025b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  unsigned long mod_end;
1035b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  unsigned long string;
1045b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  unsigned long reserved;
1055b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} module_t;
1065b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
1075b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project/* The memory map. Be careful that the offset 0 is base_addr_low
1085b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project   but no size.  */
1095b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projecttypedef struct memory_map
1105b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project{
1115b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  unsigned long size;
1125b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  unsigned long base_addr_low;
1135b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  unsigned long base_addr_high;
1145b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  unsigned long length_low;
1155b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  unsigned long length_high;
1165b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  unsigned long type;
1175b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} memory_map_t;
1185b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
1195b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#endif /* ! ASM */
120