Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | Download | RSS feed

  1. /* multiboot.h - the header for Multiboot */
  2. /* Copyright (C) 1999, 2001  Free Software Foundation, Inc.
  3.    
  4.    This program is free software; you can redistribute it and/or modify
  5.    it under the terms of the GNU General Public License as published by
  6.    the Free Software Foundation; either version 2 of the License, or
  7.    (at your option) any later version.
  8.    
  9.    This program is distributed in the hope that it will be useful,
  10.    but WITHOUT ANY WARRANTY; without even the implied warranty of
  11.    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  12.    GNU General Public License for more details.
  13.    
  14.    You should have received a copy of the GNU General Public License
  15.    along with this program; if not, write to the Free Software
  16.    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
  17.  
  18. /* Macros.  */
  19.  
  20. /* The magic number for the Multiboot header.  */
  21. #define MULTIBOOT_HEADER_MAGIC          0x1BADB002
  22.  
  23. /* The flags for the Multiboot header.  */
  24. #ifdef __ELF__
  25. # define MULTIBOOT_HEADER_FLAGS         0x00000003
  26. #else
  27. # define MULTIBOOT_HEADER_FLAGS         0x00010003
  28. #endif
  29.  
  30. /* The magic number passed by a Multiboot-compliant boot loader.  */
  31. #define MULTIBOOT_BOOTLOADER_MAGIC      0x2BADB002
  32.  
  33. /* The size of our stack (16KB).  */
  34. #define STACK_SIZE                      0x4000
  35.  
  36. /* C symbol format. HAVE_ASM_USCORE is defined by configure.  */
  37. #ifdef HAVE_ASM_USCORE
  38. # define EXT_C(sym)                     _ ## sym
  39. #else
  40. # define EXT_C(sym)                     sym
  41. #endif
  42.  
  43. #ifndef ASM
  44. /* Do not include here in boot.S.  */
  45.  
  46. /* Types.  */
  47.  
  48. /* The Multiboot header.  */
  49. typedef struct multiboot_header
  50. {
  51.   unsigned long magic;
  52.   unsigned long flags;
  53.   unsigned long checksum;
  54.   unsigned long header_addr;
  55.   unsigned long load_addr;
  56.   unsigned long load_end_addr;
  57.   unsigned long bss_end_addr;
  58.   unsigned long entry_addr;
  59. } multiboot_header_t;
  60.  
  61. /* The symbol table for a.out.  */
  62. typedef struct aout_symbol_table
  63. {
  64.   unsigned long tabsize;
  65.   unsigned long strsize;
  66.   unsigned long addr;
  67.   unsigned long reserved;
  68. } aout_symbol_table_t;
  69.  
  70. /* The section header table for ELF.  */
  71. typedef struct elf_section_header_table
  72. {
  73.   unsigned long num;
  74.   unsigned long size;
  75.   unsigned long addr;
  76.   unsigned long shndx;
  77. } elf_section_header_table_t;
  78.  
  79. /* The Multiboot information.  */
  80. typedef struct multiboot_info
  81. {
  82.   unsigned long flags;
  83.   unsigned long mem_lower;
  84.   unsigned long mem_upper;
  85.   unsigned long boot_device;
  86.   unsigned long cmdline;
  87.   unsigned long mods_count;
  88.   unsigned long mods_addr;
  89.   union
  90.   {
  91.     aout_symbol_table_t aout_sym;
  92.     elf_section_header_table_t elf_sec;
  93.   } u;
  94.   unsigned long mmap_length;
  95.   unsigned long mmap_addr;
  96. } multiboot_info_t;
  97.  
  98. /* The module structure.  */
  99. typedef struct module
  100. {
  101.   unsigned long mod_start;
  102.   unsigned long mod_end;
  103.   unsigned long string;
  104.   unsigned long reserved;
  105. } module_t;
  106.  
  107. /* The memory map. Be careful that the offset 0 is base_addr_low
  108.    but no size.  */
  109. typedef struct memory_map
  110. {
  111.   unsigned long size;
  112.   unsigned long base_addr_low;
  113.   unsigned long base_addr_high;
  114.   unsigned long length_low;
  115.   unsigned long length_high;
  116.   unsigned long type;
  117. } memory_map_t;
  118.  
  119. #endif /* ! ASM */
  120.