| |
| /* |
| * GRUB -- GRand Unified Bootloader |
| * Copyright (C) 1996 Erich Boleyn <erich@uruk.org> |
| * |
| * This program is free software; you can redistribute it and/or modify |
| * it under the terms of the GNU General Public License as published by |
| * the Free Software Foundation; either version 2 of the License, or |
| * (at your option) any later version. |
| * |
| * This program is distributed in the hope that it will be useful, |
| * but WITHOUT ANY WARRANTY; without even the implied warranty of |
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| * GNU General Public License for more details. |
| * |
| * You should have received a copy of the GNU General Public License |
| * along with this program; if not, write to the Free Software |
| * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. |
| */ |
| |
| /* |
| * The structure type "mod_list" is used by the "multiboot_info" structure. |
| */ |
| |
| struct mod_list |
| { |
| /* the memory used goes from bytes 'mod_start' to 'mod_end-1' inclusive */ |
| unsigned long mod_start; |
| unsigned long mod_end; |
| |
| /* Module command line */ |
| unsigned long cmdline; |
| |
| /* padding to take it to 16 bytes (must be zero) */ |
| unsigned long pad; |
| }; |
| |
| |
| /* |
| * INT-15, AX=E820 style "AddressRangeDescriptor" |
| * ...with a "size" parameter on the front which is the structure size - 4, |
| * pointing to the next one, up until the full buffer length of the memory |
| * map has been reached. |
| */ |
| |
| struct AddrRangeDesc |
| { |
| unsigned long size; |
| unsigned long BaseAddrLow; |
| unsigned long BaseAddrHigh; |
| unsigned long LengthLow; |
| unsigned long LengthHigh; |
| unsigned long Type; |
| |
| /* unspecified optional padding... */ |
| }; |
| |
| /* usable memory "Type", all others are reserved. */ |
| #define MB_ARD_MEMORY 1 |
| |
| |
| /* |
| * MultiBoot Info description |
| * |
| * This is the struct passed to the boot image. This is done by placing |
| * its address in the EAX register. |
| */ |
| |
| struct multiboot_info |
| { |
| /* MultiBoot info version number */ |
| unsigned long flags; |
| |
| /* Available memory from BIOS */ |
| unsigned long mem_lower; |
| unsigned long mem_upper; |
| |
| /* "root" partition */ |
| unsigned long boot_device; |
| |
| /* Kernel command line */ |
| unsigned long cmdline; |
| |
| /* Boot-Module list */ |
| unsigned long mods_count; |
| unsigned long mods_addr; |
| |
| union |
| { |
| struct |
| { |
| /* (a.out) Kernel symbol table info */ |
| unsigned long tabsize; |
| unsigned long strsize; |
| unsigned long addr; |
| unsigned long pad; |
| } |
| a; |
| |
| struct |
| { |
| /* (ELF) Kernel section header table */ |
| unsigned long num; |
| unsigned long size; |
| unsigned long addr; |
| unsigned long shndx; |
| } |
| e; |
| } |
| syms; |
| |
| /* Memory Mapping buffer */ |
| unsigned long mmap_length; |
| unsigned long mmap_addr; |
| }; |
| |
| /* |
| * Flags to be set in the 'flags' parameter above |
| */ |
| |
| /* is there basic lower/upper memory information? */ |
| #define MB_INFO_MEMORY 0x1 |
| /* is there a boot device set? */ |
| #define MB_INFO_BOOTDEV 0x2 |
| /* is the command-line defined? */ |
| #define MB_INFO_CMDLINE 0x4 |
| /* are there modules to do something with? */ |
| #define MB_INFO_MODS 0x8 |
| |
| /* These next two are mutually exclusive */ |
| |
| /* is there a symbol table loaded? */ |
| #define MB_INFO_AOUT_SYMS 0x10 |
| /* is there an ELF section header table? */ |
| #define MB_INFO_ELF_SHDR 0x20 |
| |
| /* is there a full memory map? */ |
| #define MB_INFO_MEM_MAP 0x40 |
| |
| /* |
| * The following value must be present in the EAX register. |
| */ |
| |
| #define MULTIBOOT_VALID 0x2BADB002 |