|
[ source navigation ] [ diff markup ] [ identifier search ] [ general search ] |
|||
|
001 #ifndef __MULTIBOOT_H__ 001 #ifndef __MULTIBOOT_H__ 002 #define __MULTIBOOT_H__ 002 #define __MULTIBOOT_H__ 003 003 004 /* multiboot.h - the header for Multiboot */ 004 /* multiboot.h - the header for Multiboot */ 005 /* Copyright (C) 1999 Free Software Foundatio 005 /* Copyright (C) 1999 Free Software Foundation, Inc. 006 006 007 This program is free software; you can redi 007 This program is free software; you can redistribute it and/or modify 008 it under the terms of the GNU General Publi 008 it under the terms of the GNU General Public License as published by 009 the Free Software Foundation; either versio 009 the Free Software Foundation; either version 2 of the License, or 010 (at your option) any later version. 010 (at your option) any later version. 011 011 012 This program is distributed in the hope tha 012 This program is distributed in the hope that it will be useful, 013 but WITHOUT ANY WARRANTY; without even the 013 but WITHOUT ANY WARRANTY; without even the implied warranty of 014 MERCHANTABILITY or FITNESS FOR A PARTICULAR 014 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 015 GNU General Public License for more details 015 GNU General Public License for more details. 016 016 017 You should have received a copy of the GNU 017 You should have received a copy of the GNU General Public License 018 along with this program; if not, write to t 018 along with this program; if not, write to the Free Software 019 Foundation, Inc., 675 Mass Ave, Cambridge, 019 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ 020 020 021 /* Macros. */ 021 /* Macros. */ 022 022 023 /* The magic number for the Multiboot header. 023 /* The magic number for the Multiboot header. */ 024 #define MULTIBOOT_HEADER_MAGIC 0x1BAD 024 #define MULTIBOOT_HEADER_MAGIC 0x1BADB002 025 025 026 /* The flags for the Multiboot header. */ 026 /* The flags for the Multiboot header. */ 027 #define MULTIBOOT_HEADER_FLAGS 0x0001 027 #define MULTIBOOT_HEADER_FLAGS 0x00010003 028 028 029 /* The magic number passed by a Multiboot-comp 029 /* The magic number passed by a Multiboot-compliant boot loader. */ 030 #define MULTIBOOT_BOOTLOADER_MAGIC 0x2BAD 030 #define MULTIBOOT_BOOTLOADER_MAGIC 0x2BADB002 031 031 032 /* The size of our stack (16KB). */ 032 /* The size of our stack (16KB). */ 033 #define MULTIBOOT_STACK_SIZE 0x4000 033 #define MULTIBOOT_STACK_SIZE 0x4000 034 034 035 #define MULTIBOOT_CMDLINE 4 035 #define MULTIBOOT_CMDLINE 4 036 #define MULTIBOOT_MODS 8 036 #define MULTIBOOT_MODS 8 037 037 038 /* C symbol format. HAVE_ASM_USCORE is defined 038 /* C symbol format. HAVE_ASM_USCORE is defined by configure. */ 039 #ifdef HAVE_ASM_USCORE 039 #ifdef HAVE_ASM_USCORE 040 # define EXT_C(sym) _ ## s 040 # define EXT_C(sym) _ ## sym 041 #else 041 #else 042 # define EXT_C(sym) sym 042 # define EXT_C(sym) sym 043 #endif 043 #endif 044 044 045 #ifndef ASM 045 #ifndef ASM 046 /* Do not include here in boot.S. */ !! 046 /* Do not include here in the assembler sources. */ 047 047 >> 048 #include <sos/types.h> >> 049 >> 050 >> 051 /* The address of the stack of the bootstrap thread */ >> 052 extern sos_vaddr_t bootstrap_stack_bottom; >> 053 extern sos_size_t bootstrap_stack_size; 048 054 049 055 050 /* Types. */ 056 /* Types. */ 051 057 052 /* The Multiboot header. */ 058 /* The Multiboot header. */ 053 typedef struct multiboot_header 059 typedef struct multiboot_header 054 { 060 { 055 unsigned long magic; 061 unsigned long magic; 056 unsigned long flags; 062 unsigned long flags; 057 unsigned long checksum; 063 unsigned long checksum; 058 unsigned long header_addr; 064 unsigned long header_addr; 059 unsigned long load_addr; 065 unsigned long load_addr; 060 unsigned long load_end_addr; 066 unsigned long load_end_addr; 061 unsigned long bss_end_addr; 067 unsigned long bss_end_addr; 062 unsigned long entry_addr; 068 unsigned long entry_addr; 063 } multiboot_header_t; 069 } multiboot_header_t; 064 070 065 /* The symbol table for a.out. */ 071 /* The symbol table for a.out. */ 066 typedef struct aout_symbol_table 072 typedef struct aout_symbol_table 067 { 073 { 068 unsigned long tabsize; 074 unsigned long tabsize; 069 unsigned long strsize; 075 unsigned long strsize; 070 unsigned long addr; 076 unsigned long addr; 071 unsigned long reserved; 077 unsigned long reserved; 072 } aout_symbol_table_t; 078 } aout_symbol_table_t; 073 079 074 /* The section header table for ELF. */ 080 /* The section header table for ELF. */ 075 typedef struct elf_section_header_table 081 typedef struct elf_section_header_table 076 { 082 { 077 unsigned long num; 083 unsigned long num; 078 unsigned long size; 084 unsigned long size; 079 unsigned long addr; 085 unsigned long addr; 080 unsigned long shndx; 086 unsigned long shndx; 081 } elf_section_header_table_t; 087 } elf_section_header_table_t; 082 088 083 /* The Multiboot information. */ 089 /* The Multiboot information. */ 084 typedef struct multiboot_info 090 typedef struct multiboot_info 085 { 091 { 086 unsigned long flags; 092 unsigned long flags; 087 unsigned long mem_lower; 093 unsigned long mem_lower; 088 unsigned long mem_upper; 094 unsigned long mem_upper; 089 unsigned long boot_device; 095 unsigned long boot_device; 090 unsigned long cmdline; 096 unsigned long cmdline; 091 unsigned long mods_count; 097 unsigned long mods_count; 092 unsigned long mods_addr; 098 unsigned long mods_addr; 093 union 099 union 094 { 100 { 095 aout_symbol_table_t aout_sym; 101 aout_symbol_table_t aout_sym; 096 elf_section_header_table_t elf_sec; 102 elf_section_header_table_t elf_sec; 097 } u; 103 } u; 098 unsigned long mmap_length; 104 unsigned long mmap_length; 099 unsigned long mmap_addr; 105 unsigned long mmap_addr; 100 unsigned long drives_length; 106 unsigned long drives_length; 101 unsigned long drives_addr; 107 unsigned long drives_addr; 102 } multiboot_info_t; 108 } multiboot_info_t; 103 109 104 /* The module structure. */ 110 /* The module structure. */ 105 typedef struct module 111 typedef struct module 106 { 112 { 107 unsigned long mod_start; 113 unsigned long mod_start; 108 unsigned long mod_end; 114 unsigned long mod_end; 109 unsigned long string; 115 unsigned long string; 110 unsigned long reserved; 116 unsigned long reserved; 111 } module_t; 117 } module_t; 112 118 113 /* The memory map. Be careful that the offset 119 /* The memory map. Be careful that the offset 0 is base_addr_low 114 but no size. */ 120 but no size. */ 115 typedef struct memory_map 121 typedef struct memory_map 116 { 122 { 117 unsigned long size; 123 unsigned long size; 118 unsigned long base_addr_low; 124 unsigned long base_addr_low; 119 unsigned long base_addr_high; 125 unsigned long base_addr_high; 120 unsigned long length_low; 126 unsigned long length_low; 121 unsigned long length_high; 127 unsigned long length_high; 122 unsigned long type; 128 unsigned long type; 123 } memory_map_t; 129 } memory_map_t; 124 130 125 void dump_multiboot_info(multiboot_info_t *mbi 131 void dump_multiboot_info(multiboot_info_t *mbi); 126 132 127 #endif /* ! ASM */ 133 #endif /* ! ASM */ 128 134 129 #endif /* __MULTIBOOT_H__ */ 135 #endif /* __MULTIBOOT_H__ */
[ source navigation ] | [ diff markup ] | [ identifier search ] | [ general search ] |