Project

General

Profile

Statistics
| Revision:

root / lab4 / .minix-src / include / i386 / multiboot.h @ 13

History | View | Annotate | Download (8.22 KB)

1 13 up20180614
#ifndef _MACHINE_MULTIBOOT_H /* LSC: FIXME: In MINIX this header is included everywhere... */
2
#define _MACHINE_MULTIBOOT_H 1
3
4
/*        $NetBSD: multiboot.h,v 1.8 2009/02/22 18:05:42 ahoka Exp $        */
5
6
/*-
7
 * Copyright (c) 2005, 2006 The NetBSD Foundation, Inc.
8
 * All rights reserved.
9
 *
10
 * This code is derived from software contributed to The NetBSD Foundation
11
 * by Julio M. Merino Vidal.
12
 *
13
 * Redistribution and use in source and binary forms, with or without
14
 * modification, are permitted provided that the following conditions
15
 * are met:
16
 * 1. Redistributions of source code must retain the above copyright
17
 *    notice, this list of conditions and the following disclaimer.
18
 * 2. Redistributions in binary form must reproduce the above copyright
19
 *    notice, this list of conditions and the following disclaimer in the
20
 *    documentation and/or other materials provided with the distribution.
21
 *
22
 * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
23
 * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
24
 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
25
 * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
26
 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
27
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
28
 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
29
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
30
 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
31
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
32
 * POSSIBILITY OF SUCH DAMAGE.
33
 */
34
35
/* --------------------------------------------------------------------- */
36
37
/*
38
 * Multiboot header structure.
39
 */
40
#define MULTIBOOT_HEADER_MAGIC                0x1BADB002
41
#define MULTIBOOT_HEADER_MODS_ALIGNED        0x00000001
42
#define MULTIBOOT_HEADER_WANT_MEMORY        0x00000002
43
#define MULTIBOOT_HEADER_HAS_VBE        0x00000004
44
#define MULTIBOOT_HEADER_HAS_ADDR        0x00010000
45
46
#if defined(__minix) && !defined(__ASSEMBLY__) && (defined(_MINIX_SYSTEM) || defined(_STANDALONE))
47
48
#if !defined(_LOCORE)
49
50
#include <machine/types.h>
51
52
struct multiboot_header {
53
        uint32_t        mh_magic;
54
        uint32_t        mh_flags;
55
        uint32_t        mh_checksum;
56
57
        /* Valid if mh_flags sets MULTIBOOT_HEADER_HAS_ADDR. */
58
        paddr_t                mh_header_addr;
59
        paddr_t                mh_load_addr;
60
        paddr_t                mh_load_end_addr;
61
        paddr_t                mh_bss_end_addr;
62
        paddr_t                mh_entry_addr;
63
64
        /* Valid if mh_flags sets MULTIBOOT_HEADER_HAS_VBE. */
65
        uint32_t        mh_mode_type;
66
        uint32_t        mh_width;
67
        uint32_t        mh_height;
68
        uint32_t        mh_depth;
69
};
70
#endif /* !defined(_LOCORE) */
71
72
/*
73
 * Symbols defined in locore.S.
74
 */
75
#if !defined(_LOCORE) && defined(_KERNEL)
76
extern struct multiboot_header *Multiboot_Header;
77
#endif /* !defined(_LOCORE) && defined(_KERNEL) */
78
79
#endif /* defined(__minix) && !defined(__ASSEMBLY__) && (defined(_MINIX_SYSTEM) || defined(_STANDALONE))*/
80
81
/* --------------------------------------------------------------------- */
82
83
/*
84
 * Multiboot information structure.
85
 */
86
#define MULTIBOOT_INFO_MAGIC                        0x2BADB002
87
#define MULTIBOOT_INFO_HAS_MEMORY                0x00000001
88
#define MULTIBOOT_INFO_HAS_BOOT_DEVICE        0x00000002
89
#define MULTIBOOT_INFO_HAS_CMDLINE                0x00000004
90
#define MULTIBOOT_INFO_HAS_MODS                0x00000008
91
#define MULTIBOOT_INFO_HAS_AOUT_SYMS        0x00000010
92
#define MULTIBOOT_INFO_HAS_ELF_SYMS                0x00000020
93
#define MULTIBOOT_INFO_HAS_MMAP                0x00000040
94
#define MULTIBOOT_INFO_HAS_DRIVES                0x00000080
95
#define MULTIBOOT_INFO_HAS_CONFIG_TABLE        0x00000100
96
#define MULTIBOOT_INFO_HAS_LOADER_NAME        0x00000200
97
#define MULTIBOOT_INFO_HAS_APM_TABLE        0x00000400
98
#define MULTIBOOT_INFO_HAS_VBE                        0x00000800
99
#define MULTIBOOT_INFO_HAS_FRAMEBUFFER        0x00001000
100
101
#if defined(__minix) && !defined(__ASSEMBLY__) && (defined(_MINIX_SYSTEM) || defined(_STANDALONE))
102
103
#if !defined(_LOCORE)
104
struct multiboot_info {
105
        uint32_t        mi_flags;
106
107
        /* Valid if mi_flags sets MULTIBOOT_INFO_HAS_MEMORY. */
108
        uint32_t        mi_mem_lower;
109
        uint32_t        mi_mem_upper;
110
111
        /* Valid if mi_flags sets MULTIBOOT_INFO_HAS_BOOT_DEVICE. */
112
        uint8_t                mi_boot_device_part3;
113
        uint8_t                mi_boot_device_part2;
114
        uint8_t                mi_boot_device_part1;
115
        uint8_t                mi_boot_device_drive;
116
117
        /* Valid if mi_flags sets MULTIBOOT_INFO_HAS_CMDLINE. */
118
        char *                mi_cmdline;
119
120
        /* Valid if mi_flags sets MULTIBOOT_INFO_HAS_MODS. */
121
        uint32_t        mi_mods_count;
122
        vaddr_t                mi_mods_addr;
123
124
        /* Valid if mi_flags sets MULTIBOOT_INFO_HAS_{AOUT,ELF}_SYMS. */
125
        uint32_t        mi_elfshdr_num;
126
        uint32_t        mi_elfshdr_size;
127
        vaddr_t                mi_elfshdr_addr;
128
        uint32_t        mi_elfshdr_shndx;
129
130
        /* Valid if mi_flags sets MULTIBOOT_INFO_HAS_MMAP. */
131
        uint32_t        mi_mmap_length;
132
        vaddr_t                mi_mmap_addr;
133
134
        /* Valid if mi_flags sets MULTIBOOT_INFO_HAS_DRIVES. */
135
        uint32_t        mi_drives_length;
136
        vaddr_t                mi_drives_addr;
137
138
        /* Valid if mi_flags sets MULTIBOOT_INFO_HAS_CONFIG_TABLE. */
139
        void *                unused_mi_config_table;
140
141
        /* Valid if mi_flags sets MULTIBOOT_INFO_HAS_LOADER_NAME. */
142
        char *                mi_loader_name;
143
144
        /* Valid if mi_flags sets MULTIBOOT_INFO_HAS_APM. */
145
        void *                unused_mi_apm_table;
146
147
        /* Valid if mi_flags sets MULTIBOOT_INFO_HAS_VBE. */
148
        uint32_t vbe_control_info;
149
        uint32_t vbe_mode_info;
150
        uint16_t vbe_mode;
151
        uint16_t vbe_interface_seg;
152
        uint16_t vbe_interface_off;
153
        uint16_t vbe_interface_len;
154
155
        /* Valid if mi_flags sets MULTIBOOT_INFO_HAS_FRAMEBUFFER. */
156
        uint64_t framebuffer_addr;
157
        uint32_t framebuffer_pitch;
158
        uint32_t framebuffer_width;
159
        uint32_t framebuffer_height;
160
        uint8_t framebuffer_bpp;
161
#define MULTIBOOT_FRAMEBUFFER_TYPE_INDEXED 0
162
#define MULTIBOOT_FRAMEBUFFER_TYPE_RGB     1
163
#define MULTIBOOT_FRAMEBUFFER_TYPE_EGA_TEXT        2
164
        uint8_t framebuffer_type;
165
        union
166
        {
167
                struct
168
                {
169
                        uint32_t framebuffer_palette_addr;
170
                        uint16_t framebuffer_palette_num_colors;
171
                };
172
                struct
173
                {
174
                        uint8_t framebuffer_red_field_position;
175
                        uint8_t framebuffer_red_mask_size;
176
                        uint8_t framebuffer_green_field_position;
177
                        uint8_t framebuffer_green_mask_size;
178
                        uint8_t framebuffer_blue_field_position;
179
                        uint8_t framebuffer_blue_mask_size;
180
            };
181
        };
182
};
183
184
/* --------------------------------------------------------------------- */
185
186
/*
187
 * Drive information.  This describes an entry in the drives table as
188
 * pointed to by mi_drives_addr.
189
 */
190
struct multiboot_drive {
191
        uint32_t        md_length;
192
        uint8_t                md_number;
193
        uint8_t                md_mode;
194
        uint16_t        md_cylinders;
195
        uint8_t                md_heads;
196
        uint8_t                md_sectors;
197
198
        /* The variable-sized 'ports' field comes here, so this structure
199
         * can be longer. */
200
};
201
202
/* --------------------------------------------------------------------- */
203
204
/*
205
 * Memory mapping.  This describes an entry in the memory mappings table
206
 * as pointed to by mi_mmap_addr.
207
 *
208
 * Be aware that mm_size specifies the size of all other fields *except*
209
 * for mm_size.  In order to jump between two different entries, you
210
 * have to count mm_size + 4 bytes.
211
 */
212
struct multiboot_mmap {
213
        uint32_t        mm_size;
214
        uint64_t        mm_base_addr;
215
        uint64_t        mm_length;
216
        uint32_t        mm_type;
217
};
218
219
/*
220
 * Modules. This describes an entry in the modules table as pointed
221
 * to by mi_mods_addr.
222
 */
223
224
struct multiboot_module {
225
        uint32_t        mmo_start;
226
        uint32_t        mmo_end;
227
        char *                mmo_string;
228
        uint32_t        mmo_reserved;
229
};
230
231
#endif /* !defined(_LOCORE) */
232
233
#endif /* defined(__minix) && !defined(__ASSEMBLY__) && (defined(_MINIX_SYSTEM) || defined(_STANDALONE))*/
234
235
#if defined(__minix)
236
237
#ifndef __ASSEMBLY__
238
typedef struct multiboot_info multiboot_info_t;
239
typedef struct multiboot_module multiboot_module_t;
240
typedef struct multiboot_mmap multiboot_memory_map_t;
241
#endif
242
243
#define MULTIBOOT_MEMORY_AVAILABLE              1
244
#define MULTIBOOT_MAX_MODS     20
245
246
#define mod_start mmo_start
247
#define mod_end mmo_end
248
249
#define mmap_addr mi_mmap_addr
250
#define mmap_length mi_mmap_length
251
252
#define MULTIBOOT_VIDEO_MODE 0x00000004
253
#define MULTIBOOT_VIDEO_MODE_EGA 1
254
#define MULTIBOOT_VIDEO_BUFFER 0xB8000
255
256
#define MULTIBOOT_CONSOLE_LINES 25
257
#define MULTIBOOT_CONSOLE_COLS 80
258
259
#define MULTIBOOT_PARAM_BUF_SIZE 1024
260
#endif /* defined(__minix) */
261
262
/* --------------------------------------------------------------------- */
263
264
/*
265
 * Prototypes for public functions defined in multiboot.c.
266
 */
267
#if !defined(_LOCORE) && defined(_KERNEL)
268
void                multiboot_pre_reloc(struct multiboot_info *);
269
void                multiboot_post_reloc(void);
270
void                multiboot_print_info(void);
271
bool                multiboot_ksyms_addsyms_elf(void);
272
#endif /* !defined(_LOCORE) */
273
274
/* --------------------------------------------------------------------- */
275
276
#endif /* _MACHINE_MULTIBOOT_H */