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