[BACK]Return to multiboot.h CVS log [TXT][DIR] Up to [cvs.NetBSD.org] / src / sys / arch / i386 / include

Annotation of src/sys/arch/i386/include/multiboot.h, Revision 1.4

1.4     ! jmmv        1: /*     $NetBSD: multiboot.h,v 1.3 2006/02/04 11:24:42 jmmv Exp $       */
1.1       jmmv        2:
                      3: /*-
                      4:  * Copyright (c) 2005, 2006 The NetBSD Foundation, Inc.
                      5:  * All rights reserved.
                      6:  *
                      7:  * This code is derived from software contributed to The NetBSD Foundation
                      8:  * by Julio M. Merino Vidal.
                      9:  *
                     10:  * Redistribution and use in source and binary forms, with or without
                     11:  * modification, are permitted provided that the following conditions
                     12:  * are met:
                     13:  * 1. Redistributions of source code must retain the above copyright
                     14:  *    notice, this list of conditions and the following disclaimer.
                     15:  * 2. Redistributions in binary form must reproduce the above copyright
                     16:  *    notice, this list of conditions and the following disclaimer in the
                     17:  *    documentation and/or other materials provided with the distribution.
                     18:  * 3. All advertising materials mentioning features or use of this software
                     19:  *    must display the following acknowledgement:
                     20:  *     This product includes software developed by the NetBSD
                     21:  *     Foundation, Inc. and its contributors.
                     22:  * 4. Neither the name of The NetBSD Foundation nor the names of its
                     23:  *    contributors may be used to endorse or promote products derived
                     24:  *    from this software without specific prior written permission.
                     25:  *
                     26:  * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
                     27:  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
                     28:  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
                     29:  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
                     30:  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
                     31:  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
                     32:  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
                     33:  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
                     34:  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
                     35:  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
                     36:  * POSSIBILITY OF SUCH DAMAGE.
                     37:  */
                     38:
                     39: #if defined(_KERNEL)
                     40:
                     41: #include "opt_multiboot.h"
                     42:
                     43: #if defined(MULTIBOOT)
                     44:
                     45: /* --------------------------------------------------------------------- */
                     46:
                     47: /*
                     48:  * Multiboot header structure.
                     49:  */
                     50: #define MULTIBOOT_HEADER_MAGIC         0x1BADB002
                     51: #define MULTIBOOT_HEADER_MODS_ALIGNED  0x00000001
                     52: #define MULTIBOOT_HEADER_WANT_MEMORY   0x00000002
                     53: #define MULTIBOOT_HEADER_HAS_VBE       0x00000004
                     54: #define MULTIBOOT_HEADER_HAS_ADDR      0x00010000
                     55:
                     56: #if !defined(_LOCORE)
                     57: struct multiboot_header {
                     58:        uint32_t        mh_magic;
                     59:        uint32_t        mh_flags;
                     60:        uint32_t        mh_checksum;
                     61:
                     62:        /* Valid if mh_flags sets MULTIBOOT_HEADER_HAS_ADDR. */
                     63:        paddr_t         mh_header_addr;
                     64:        paddr_t         mh_load_addr;
                     65:        paddr_t         mh_load_end_addr;
                     66:        paddr_t         mh_bss_end_addr;
                     67:        paddr_t         mh_entry_addr;
                     68:
                     69:        /* Valid if mh_flags sets MULTIBOOT_HEADER_HAS_VBE. */
                     70:        uint32_t        mh_mode_type;
                     71:        uint32_t        mh_width;
                     72:        uint32_t        mh_height;
                     73:        uint32_t        mh_depth;
                     74: };
                     75: #endif /* !defined(_LOCORE) */
                     76:
                     77: /*
                     78:  * Symbols defined in locore.S.
                     79:  */
                     80: #if !defined(_LOCORE)
                     81: extern struct multiboot_header *Multiboot_Header;
                     82: #endif /* !defined(_LOCORE) */
                     83:
                     84: /* --------------------------------------------------------------------- */
                     85:
                     86: /*
                     87:  * Multiboot information structure.
                     88:  */
                     89: #define MULTIBOOT_INFO_MAGIC           0x2BADB002
                     90: #define MULTIBOOT_INFO_HAS_MEMORY      0x00000001
                     91: #define MULTIBOOT_INFO_HAS_BOOT_DEVICE 0x00000002
                     92: #define MULTIBOOT_INFO_HAS_CMDLINE     0x00000004
                     93: #define MULTIBOOT_INFO_HAS_MODS                0x00000008
                     94: #define MULTIBOOT_INFO_HAS_AOUT_SYMS   0x00000010
                     95: #define MULTIBOOT_INFO_HAS_ELF_SYMS    0x00000020
                     96: #define MULTIBOOT_INFO_HAS_MMAP                0x00000040
                     97: #define MULTIBOOT_INFO_HAS_DRIVES      0x00000080
                     98: #define MULTIBOOT_INFO_HAS_CONFIG_TABLE        0x00000100
                     99: #define MULTIBOOT_INFO_HAS_LOADER_NAME 0x00000200
                    100: #define MULTIBOOT_INFO_HAS_APM_TABLE   0x00000400
                    101: #define MULTIBOOT_INFO_HAS_VBE         0x00000800
                    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        unused_mi_mods_count;
                    122:        vaddr_t         unused_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:        void *          unused_mi_vbe_control_info;
                    149:        void *          unused_mi_vbe_mode_info;
                    150:        paddr_t         unused_mi_vbe_interface_seg;
                    151:        paddr_t         unused_mi_vbe_interface_off;
                    152:        uint32_t        unused_mi_vbe_interface_len;
                    153: };
                    154:
                    155: /* --------------------------------------------------------------------- */
                    156:
                    157: /*
                    158:  * Drive information.  This describes an entry in the drives table as
                    159:  * pointed to by mi_drives_addr.
                    160:  */
                    161: struct multiboot_drive {
                    162:        uint32_t        md_length;
                    163:        uint8_t         md_number;
                    164:        uint8_t         md_mode;
                    165:        uint16_t        md_cylinders;
                    166:        uint8_t         md_heads;
                    167:        uint8_t         md_sectors;
                    168:
                    169:        /* The variable-sized 'ports' field comes here, so this structure
                    170:         * can be longer. */
                    171: };
                    172:
                    173: /* --------------------------------------------------------------------- */
                    174:
                    175: /*
                    176:  * Memory mapping.  This describes an entry in the memory mappings table
                    177:  * as pointed to by mi_mmap_addr.
                    178:  *
                    179:  * Be aware that mm_size specifies the size of all other fields *except*
                    180:  * for mm_size.  In order to jump between two different entries, you
                    181:  * have to count mm_size + 4 bytes.
                    182:  */
                    183: struct multiboot_mmap {
                    184:        uint32_t        mm_size;
                    185:        uint64_t        mm_base_addr;
                    186:        uint64_t        mm_length;
                    187:        uint32_t        mm_type;
                    188: };
                    189:
                    190: #endif /* !defined(_LOCORE) */
                    191:
                    192: /* --------------------------------------------------------------------- */
                    193:
                    194: /*
                    195:  * Prototypes for public functions defined in multiboot.c.
                    196:  */
                    197: #if !defined(_LOCORE)
                    198: void           multiboot_pre_reloc(struct multiboot_info *);
                    199: void           multiboot_post_reloc(void);
                    200: void           multiboot_print_info(void);
1.4     ! jmmv      201: boolean_t      multiboot_ksyms_init(void);
1.1       jmmv      202: #endif /* !defined(_LOCORE) */
                    203:
                    204: /* --------------------------------------------------------------------- */
                    205:
                    206: #endif /* defined(MULTIBOOT) */
                    207:
                    208: #endif /* defined(_KERNEL) */

CVSweb <webmaster@jp.NetBSD.org>