|
[ 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 the assembler source !! 046 /* Do not include here in boot.S. */ 047 047 048 #include <sos/types.h> << 049 << 050 << 051 /* The address of the stack of the bootstrap t << 052 extern sos_vaddr_t bootstrap_stack_bottom; << 053 extern sos_size_t bootstrap_stack_size; << 054 048 055 049 056 /* Types. */ 050 /* Types. */ 057 051 058 /* The Multiboot header. */ 052 /* The Multiboot header. */ 059 typedef struct multiboot_header 053 typedef struct multiboot_header 060 { 054 { 061 unsigned long magic; 055 unsigned long magic; 062 unsigned long flags; 056 unsigned long flags; 063 unsigned long checksum; 057 unsigned long checksum; 064 unsigned long header_addr; 058 unsigned long header_addr; 065 unsigned long load_addr; 059 unsigned long load_addr; 066 unsigned long load_end_addr; 060 unsigned long load_end_addr; 067 unsigned long bss_end_addr; 061 unsigned long bss_end_addr; 068 unsigned long entry_addr; 062 unsigned long entry_addr; 069 } multiboot_header_t; 063 } multiboot_header_t; 070 064 071 /* The symbol table for a.out. */ 065 /* The symbol table for a.out. */ 072 typedef struct aout_symbol_table 066 typedef struct aout_symbol_table 073 { 067 { 074 unsigned long tabsize; 068 unsigned long tabsize; 075 unsigned long strsize; 069 unsigned long strsize; 076 unsigned long addr; 070 unsigned long addr; 077 unsigned long reserved; 071 unsigned long reserved; 078 } aout_symbol_table_t; 072 } aout_symbol_table_t; 079 073 080 /* The section header table for ELF. */ 074 /* The section header table for ELF. */ 081 typedef struct elf_section_header_table 075 typedef struct elf_section_header_table 082 { 076 { 083 unsigned long num; 077 unsigned long num; 084 unsigned long size; 078 unsigned long size; 085 unsigned long addr; 079 unsigned long addr; 086 unsigned long shndx; 080 unsigned long shndx; 087 } elf_section_header_table_t; 081 } elf_section_header_table_t; 088 082 089 /* The Multiboot information. */ 083 /* The Multiboot information. */ 090 typedef struct multiboot_info 084 typedef struct multiboot_info 091 { 085 { 092 unsigned long flags; 086 unsigned long flags; 093 unsigned long mem_lower; 087 unsigned long mem_lower; 094 unsigned long mem_upper; 088 unsigned long mem_upper; 095 unsigned long boot_device; 089 unsigned long boot_device; 096 unsigned long cmdline; 090 unsigned long cmdline; 097 unsigned long mods_count; 091 unsigned long mods_count; 098 unsigned long mods_addr; 092 unsigned long mods_addr; 099 union 093 union 100 { 094 { 101 aout_symbol_table_t aout_sym; 095 aout_symbol_table_t aout_sym; 102 elf_section_header_table_t elf_sec; 096 elf_section_header_table_t elf_sec; 103 } u; 097 } u; 104 unsigned long mmap_length; 098 unsigned long mmap_length; 105 unsigned long mmap_addr; 099 unsigned long mmap_addr; 106 unsigned long drives_length; 100 unsigned long drives_length; 107 unsigned long drives_addr; 101 unsigned long drives_addr; 108 } multiboot_info_t; 102 } multiboot_info_t; 109 103 110 /* The module structure. */ 104 /* The module structure. */ 111 typedef struct module 105 typedef struct module 112 { 106 { 113 unsigned long mod_start; 107 unsigned long mod_start; 114 unsigned long mod_end; 108 unsigned long mod_end; 115 unsigned long string; 109 unsigned long string; 116 unsigned long reserved; 110 unsigned long reserved; 117 } module_t; 111 } module_t; 118 112 119 /* The memory map. Be careful that the offset 113 /* The memory map. Be careful that the offset 0 is base_addr_low 120 but no size. */ 114 but no size. */ 121 typedef struct memory_map 115 typedef struct memory_map 122 { 116 { 123 unsigned long size; 117 unsigned long size; 124 unsigned long base_addr_low; 118 unsigned long base_addr_low; 125 unsigned long base_addr_high; 119 unsigned long base_addr_high; 126 unsigned long length_low; 120 unsigned long length_low; 127 unsigned long length_high; 121 unsigned long length_high; 128 unsigned long type; 122 unsigned long type; 129 } memory_map_t; 123 } memory_map_t; 130 124 131 void dump_multiboot_info(multiboot_info_t *mbi 125 void dump_multiboot_info(multiboot_info_t *mbi); 132 126 133 #endif /* ! ASM */ 127 #endif /* ! ASM */ 134 128 135 #endif /* __MULTIBOOT_H__ */ 129 #endif /* __MULTIBOOT_H__ */
[ source navigation ] | [ diff markup ] | [ identifier search ] | [ general search ] |