176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/* 276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * GRUB -- GRand Unified Bootloader 376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * Copyright (C) 2000 Free Software Foundation, Inc. 476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * 576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * This program is free software; you can redistribute it and/or modify 676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * it under the terms of the GNU General Public License as published by 776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * the Free Software Foundation; either version 2 of the License, or 876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * (at your option) any later version. 976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * 1076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * This program is distributed in the hope that it will be useful, 1176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * but WITHOUT ANY WARRANTY; without even the implied warranty of 1276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 1376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * GNU General Public License for more details. 1476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * 1576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * You should have received a copy of the GNU General Public License 1676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * along with this program; if not, write to the Free Software 1776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 1876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman */ 1976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 2076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#ifndef MBOOT_MB_HEADER_H 2176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define MBOOT_MB_HEADER_H 2276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 2376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#include <inttypes.h> 2476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 2576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/* 2676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * MultiBoot Header description 2776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman */ 2876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 2976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanstruct multiboot_header { 3076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman /* Must be MULTIBOOT_MAGIC - see below. */ 3176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint32_t magic; 3276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 3376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman /* Feature flags - see below. */ 3476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint32_t flags; 3576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 3676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman /* 3776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * Checksum 3876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * 3976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * The above fields plus this one must equal 0 mod 2^32. 4076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman */ 4176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint32_t checksum; 4276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 4376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman /* These are only valid if MULTIBOOT_AOUT_KLUDGE is set. */ 4476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint32_t header_addr; 4576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint32_t load_addr; 4676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint32_t load_end_addr; 4776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint32_t bss_end_addr; 4876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint32_t entry_addr; 4976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 5076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman /* These are only valid if MULTIBOOT_VIDEO_MODE is set. */ 5176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint32_t mode_type; 5276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint32_t width; 5376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint32_t height; 5476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint32_t depth; 5576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman}; 5676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 5776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/* 5876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * The entire multiboot_header must be contained 5976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * within the first MULTIBOOT_SEARCH bytes of the kernel image. 6076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman */ 6176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define MULTIBOOT_SEARCH 8192 6276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 6376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/* Magic value identifying the multiboot_header. */ 6476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define MULTIBOOT_MAGIC 0x1BADB002 6576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 6676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/* 6776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * Features flags for 'flags'. 6876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * If a boot loader sees a flag in MULTIBOOT_MUSTKNOW set 6976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * and it doesn't understand it, it must fail. 7076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman */ 7176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define MULTIBOOT_MUSTKNOW 0x0000FFFF 7276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 7376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/* currently unsupported flags... this is a kind of version number. */ 7476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define MULTIBOOT_UNSUPPORTED 0x0000FFF8 7576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 7676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/* Align all boot modules on i386 page (4KB) boundaries. */ 7776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define MULTIBOOT_PAGE_ALIGN 0x00000001 7876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 7976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/* Must pass memory information to OS. */ 8076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define MULTIBOOT_MEMORY_INFO 0x00000002 8176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 8276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/* Must pass video information to OS. */ 8376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define MULTIBOOT_VIDEO_MODE 0x00000004 8476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 8576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/* This flag indicates the use of the address fields in the header. */ 8676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define MULTIBOOT_AOUT_KLUDGE 0x00010000 8776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 8876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#endif /* MBOOT_MB_HEADER_H */ 89