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