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