📄 mb-info.h
字号:
/* Project: OSLib * Description: The OS Construction Kit * Date: 1.6.2000 * Idea by: Luca Abeni & Gerardo Lamastra * * OSLib is an SO project aimed at developing a common, easy-to-use * low-level infrastructure for developing OS kernels and Embedded * Applications; it partially derives from the HARTIK project but it * currently is independently developed. * * OSLib is distributed under GPL License, and some of its code has * been derived from the Linux kernel source; also some important * ideas come from studying the DJGPP go32 extender. * * We acknowledge the Linux Community, Free Software Foundation, * D.J. Delorie and all the other developers who believe in the * freedom of software and ideas. * * For legalese, check out the included GPL license. *//* * GRUB -- GRand Unified Bootloader * Copyright (C) 1996 Erich Boleyn <erich@uruk.org> * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */#ifndef __LL_I386_MB_INFO_H__#define __LL_I386_MB_INFO_H__#include <ll/i386/defs.h>BEGIN_DEF/* * The structure type "mod_list" is used by the "multiboot_info" structure. */struct mod_list{ /* the memory used goes from bytes 'mod_start' to 'mod_end-1' inclusive */ unsigned long mod_start; unsigned long mod_end; /* Module command line */ unsigned long cmdline; /* padding to take it to 16 bytes (must be zero) */ unsigned long pad;};/* * INT-15, AX=E820 style "AddressRangeDescriptor" * ...with a "size" parameter on the front which is the structure size - 4, * pointing to the next one, up until the full buffer length of the memory * map has been reached. */struct AddrRangeDesc{ unsigned long size; unsigned long BaseAddrLow; unsigned long BaseAddrHigh; unsigned long LengthLow; unsigned long LengthHigh; unsigned long Type; /* unspecified optional padding... */};/* usable memory "Type", all others are reserved. */#define MB_ARD_MEMORY 1/* * MultiBoot Info description * * This is the struct passed to the boot image. This is done by placing * its address in the EAX register. */struct multiboot_info{ /* MultiBoot info version number */ unsigned long flags; /* Available memory from BIOS */ unsigned long mem_lower; unsigned long mem_upper; /* "root" partition */ unsigned long boot_device; /* Kernel command line */ unsigned long cmdline; /* Boot-Module list */ unsigned long mods_count; unsigned long mods_addr; union { struct { /* (a.out) Kernel symbol table info */ unsigned long tabsize; unsigned long strsize; unsigned long addr; unsigned long pad; } a; struct { /* (ELF) Kernel section header table */ unsigned long num; unsigned long size; unsigned long addr; unsigned long shndx; } e; } syms; /* Memory Mapping buffer */ unsigned long mmap_length; unsigned long mmap_addr; /* Drive Info buffer */ unsigned long drives_length; unsigned long drives_addr; /* ROM configuration table */ unsigned long config_table; /* Boot Loader Name */ unsigned long boot_loader_name; /* APM table */ unsigned long apm_table; /* Video */ unsigned long vbe_control_info; unsigned long vbe_mode_info; unsigned short vbe_mode; unsigned short vbe_interface_seg; unsigned short vbe_interface_off; unsigned short vbe_interface_len;#ifndef __OLD_MB__ /* Gerardo: I need to add also the phisical address base for both low ( < 1MB) & upper ( > 1MB) memory, as X starts from DOS which could have preallocated some of this memory... For example, GRUB assumes that mem_lowbase = 0x0 & mem_upbase = 0x100000 */ unsigned long mem_lowbase; unsigned long mem_upbase;#endif /* __OLD_MB__ */};/* * Flags to be set in the 'flags' parameter above *//* is there basic lower/upper memory information? */#define MB_INFO_MEMORY 0x1/* is there a boot device set? */#define MB_INFO_BOOTDEV 0x2/* is the command-line defined? */#define MB_INFO_CMDLINE 0x4/* are there modules to do something with? */#define MB_INFO_MODS 0x8/* These next two are mutually exclusive *//* is there a symbol table loaded? */#define MB_INFO_AOUT_SYMS 0x10/* is there an ELF section header table? */#define MB_INFO_ELF_SHDR 0x20/* is there a full memory map? */#define MB_INFO_MEM_MAP 0x40/* Is there drive info? */#define MB_INFO_DRIVE_INFO 0x00000080/* Is there a config table? */#define MB_INFO_CONFIG_TABLE 0x00000100/* Is there a boot loader name? */#define MB_INFO_BOOT_LOADER_NAME 0x00000200/* Is there a APM table? */#define MB_INFO_APM_TABLE 0x00000400/* Is there video information? */#define MB_INFO_VIDEO_INFO 0x00000800#if 0/* Gerardo: Added this! -------------------- The idea is that the BootLoader provides an interface to return back to it; this is useful to implement a DOS boot-loader, in order to use DOS as development environment.*/#define MB_INFO_USEGDT 0x80#endif/* * The following value must be present in the EAX register. */#define MULTIBOOT_VALID 0x2BADB002struct multiboot_info * mbi_address(void);END_DEF#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -