15b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project/* shared.h - definitions used in all GRUB-specific code */
25b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project/*
35b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project *  GRUB  --  GRand Unified Bootloader
45b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project *  Copyright (C) 1999,2000,2001,2002,2003,2004  Free Software Foundation, Inc.
55b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project *
65b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project *  This program is free software; you can redistribute it and/or modify
75b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project *  it under the terms of the GNU General Public License as published by
85b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project *  the Free Software Foundation; either version 2 of the License, or
95b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project *  (at your option) any later version.
105b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project *
115b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project *  This program is distributed in the hope that it will be useful,
125b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project *  but WITHOUT ANY WARRANTY; without even the implied warranty of
135b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
145b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project *  GNU General Public License for more details.
155b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project *
165b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project *  You should have received a copy of the GNU General Public License
175b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project *  along with this program; if not, write to the Free Software
185b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
195b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project */
205b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
215b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project/*
225b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project *  Generic defines to use anywhere
235b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project */
245b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
255b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#ifndef GRUB_SHARED_HEADER
265b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define GRUB_SHARED_HEADER	1
275b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
285b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#include <config.h>
295b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
305b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project/* Add an underscore to a C symbol in assembler code if needed. */
315b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#ifdef HAVE_ASM_USCORE
325b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project# define EXT_C(sym) _ ## sym
335b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#else
345b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project# define EXT_C(sym) sym
355b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#endif
365b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
375b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project/* Maybe redirect memory requests through grub_scratch_mem. */
385b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#ifdef GRUB_UTIL
395b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectextern char *grub_scratch_mem;
405b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project# define RAW_ADDR(x) ((x) + (int) grub_scratch_mem)
415b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project# define RAW_SEG(x) (RAW_ADDR ((x) << 4) >> 4)
425b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#else
435b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project# define RAW_ADDR(x) (x)
445b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project# define RAW_SEG(x) (x)
455b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#endif
465b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
475b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project/*
485b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project *  Integer sizes
495b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project */
505b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
515b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define MAXINT     0x7FFFFFFF
525b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
535b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project/* Maximum command line size. Before you blindly increase this value,
545b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project   see the comment in char_io.c (get_cmdline).  */
555b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define MAX_CMDLINE 1600
565b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define NEW_HEAPSIZE 1500
575b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
585b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project/* 512-byte scratch area */
595b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define SCRATCHADDR  RAW_ADDR (0x77e00)
605b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define SCRATCHSEG   RAW_SEG (0x77e0)
615b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
625b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project/*
635b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project *  This is the location of the raw device buffer.  It is 31.5K
645b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project *  in size.
655b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project */
665b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
675b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define BUFFERLEN   0x7e00
685b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define BUFFERADDR  RAW_ADDR (0x70000)
695b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define BUFFERSEG   RAW_SEG (0x7000)
705b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
715b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define BOOT_PART_TABLE	RAW_ADDR (0x07be)
725b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
735b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project/*
745b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project *  BIOS disk defines
755b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project */
765b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define BIOSDISK_READ			0x0
775b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define BIOSDISK_WRITE			0x1
785b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define BIOSDISK_ERROR_GEOMETRY		0x100
795b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define BIOSDISK_FLAG_LBA_EXTENSION	0x1
805b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define BIOSDISK_FLAG_CDROM		0x2
815b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
825b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project/*
835b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project *  This is the filesystem (not raw device) buffer.
845b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project *  It is 32K in size, do not overrun!
855b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project */
865b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
875b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define FSYS_BUFLEN  0x8000
885b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define FSYS_BUF RAW_ADDR (0x68000)
895b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
905b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project/* Command-line buffer for Multiboot kernels and modules. This area
915b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project   includes the area into which Stage 1.5 and Stage 1 are loaded, but
925b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project   that's no problem.  */
935b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define MB_CMDLINE_BUF		RAW_ADDR (0x2000)
945b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define MB_CMDLINE_BUFLEN	0x6000
955b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
965b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project/* The buffer for the password.  */
975b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define PASSWORD_BUF		RAW_ADDR (0x78000)
985b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define PASSWORD_BUFLEN		0x200
995b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
1005b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project/* THe buffer for the filename of "/boot/grub/default".  */
1015b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define DEFAULT_FILE_BUF	(PASSWORD_BUF + PASSWORD_BUFLEN)
1025b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define DEFAULT_FILE_BUFLEN	0x60
1035b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
1045b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project/* The buffer for the command-line.  */
1055b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define CMDLINE_BUF		(DEFAULT_FILE_BUF + DEFAULT_FILE_BUFLEN)
1065b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define CMDLINE_BUFLEN		MAX_CMDLINE
1075b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
1085b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project/* The kill buffer for the command-line.  */
1095b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define KILL_BUF		(CMDLINE_BUF + CMDLINE_BUFLEN)
1105b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define KILL_BUFLEN		MAX_CMDLINE
1115b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
1125b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project/* The history buffer for the command-line.  */
1135b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define HISTORY_BUF		(KILL_BUF + KILL_BUFLEN)
1145b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define HISTORY_SIZE		5
1155b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define HISTORY_BUFLEN		(MAX_CMDLINE * HISTORY_SIZE)
1165b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
1175b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project/* The buffer for the completion.  */
1185b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define COMPLETION_BUF		(HISTORY_BUF + HISTORY_BUFLEN)
1195b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define COMPLETION_BUFLEN	MAX_CMDLINE
1205b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
1215b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project/* The buffer for the unique string.  */
1225b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define UNIQUE_BUF		(COMPLETION_BUF + COMPLETION_BUFLEN)
1235b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define UNIQUE_BUFLEN		MAX_CMDLINE
1245b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
1255b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project/* The buffer for the menu entries.  */
1265b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define MENU_BUF		(UNIQUE_BUF + UNIQUE_BUFLEN)
1275b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define MENU_BUFLEN		(0x8000 + PASSWORD_BUF - MENU_BUF)
1285b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
1295b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project/* The size of the drive map.  */
1305b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define DRIVE_MAP_SIZE		8
1315b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
1325b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project/* The size of the key map.  */
1335b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define KEY_MAP_SIZE		128
1345b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
1355b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project/* The size of the io map.  */
1365b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define IO_MAP_SIZE		128
1375b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
1385b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project/*
1395b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project *  Linux setup parameters
1405b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project */
1415b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
1425b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define LINUX_MAGIC_SIGNATURE		0x53726448	/* "HdrS" */
1435b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define LINUX_DEFAULT_SETUP_SECTS	4
1445b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define LINUX_FLAG_CAN_USE_HEAP		0x80
1455b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define LINUX_INITRD_MAX_ADDRESS	0x38000000
1465b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define LINUX_MAX_SETUP_SECTS		64
1475b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define LINUX_BOOT_LOADER_TYPE		0x71
1485b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define LINUX_HEAP_END_OFFSET		(0x9000 - 0x200)
1495b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
1505b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define LINUX_BZIMAGE_ADDR		RAW_ADDR (0x100000)
1515b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define LINUX_ZIMAGE_ADDR		RAW_ADDR (0x10000)
1525b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define LINUX_OLD_REAL_MODE_ADDR	RAW_ADDR (0x90000)
1535b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define LINUX_SETUP_STACK		0x9000
1545b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
1555b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define LINUX_FLAG_BIG_KERNEL		0x1
1565b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
1575b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project/* Linux's video mode selection support. Actually I hate it!  */
1585b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define LINUX_VID_MODE_NORMAL		0xFFFF
1595b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define LINUX_VID_MODE_EXTENDED		0xFFFE
1605b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define LINUX_VID_MODE_ASK		0xFFFD
1615b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
1625b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define LINUX_CL_OFFSET			0x9000
1635b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define LINUX_CL_END_OFFSET		0x90FF
1645b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define LINUX_SETUP_MOVE_SIZE		0x9100
1655b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define LINUX_CL_MAGIC			0xA33F
1665b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
1675b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project/*
1685b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project *  General disk stuff
1695b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project */
1705b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
1715b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define SECTOR_SIZE		0x200
1725b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define SECTOR_BITS		9
1735b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define BIOS_FLAG_FIXED_DISK	0x80
1745b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
1755b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define BOOTSEC_LOCATION		RAW_ADDR (0x7C00)
1765b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define BOOTSEC_SIGNATURE		0xAA55
1775b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define BOOTSEC_BPB_OFFSET		0x3
1785b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define BOOTSEC_BPB_LENGTH		0x3B
1795b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define BOOTSEC_BPB_SYSTEM_ID		0x3
1805b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define BOOTSEC_BPB_HIDDEN_SECTORS	0x1C
1815b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define BOOTSEC_PART_OFFSET		0x1BE
1825b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define BOOTSEC_PART_LENGTH		0x40
1835b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define BOOTSEC_SIG_OFFSET		0x1FE
1845b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define BOOTSEC_LISTSIZE		8
1855b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
1865b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project/* Not bad, perhaps.  */
1875b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define NETWORK_DRIVE	0x20
1885b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
1895b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project/*
1905b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project *  GRUB specific information
1915b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project *    (in LSB order)
1925b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project */
1935b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
1945b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#include <stage1.h>
1955b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
1965b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define STAGE2_VER_MAJ_OFFS	0x6
1975b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define STAGE2_INSTALLPART	0x8
1985b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define STAGE2_SAVED_ENTRYNO	0xc
1995b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define STAGE2_STAGE2_ID	0x10
2005b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define STAGE2_FORCE_LBA	0x11
2015b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define STAGE2_VER_STR_OFFS	0x12
2025b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
2035b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project/* Stage 2 identifiers */
2045b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define STAGE2_ID_STAGE2		0
2055b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define STAGE2_ID_FFS_STAGE1_5		1
2065b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define STAGE2_ID_E2FS_STAGE1_5		2
2075b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define STAGE2_ID_FAT_STAGE1_5		3
2085b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define STAGE2_ID_MINIX_STAGE1_5	4
2095b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define STAGE2_ID_REISERFS_STAGE1_5	5
2105b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define STAGE2_ID_VSTAFS_STAGE1_5	6
2115b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define STAGE2_ID_JFS_STAGE1_5		7
2125b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define STAGE2_ID_XFS_STAGE1_5		8
2135b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define STAGE2_ID_ISO9660_STAGE1_5	9
2145b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define STAGE2_ID_UFS2_STAGE1_5		10
2155b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
2165b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#ifndef STAGE1_5
2175b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project# define STAGE2_ID	STAGE2_ID_STAGE2
2185b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#else
2195b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project# if defined(FSYS_FFS)
2205b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#  define STAGE2_ID	STAGE2_ID_FFS_STAGE1_5
2215b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project# elif defined(FSYS_EXT2FS)
2225b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#  define STAGE2_ID	STAGE2_ID_E2FS_STAGE1_5
2235b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project# elif defined(FSYS_FAT)
2245b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#  define STAGE2_ID	STAGE2_ID_FAT_STAGE1_5
2255b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project# elif defined(FSYS_MINIX)
2265b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#  define STAGE2_ID	STAGE2_ID_MINIX_STAGE1_5
2275b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project# elif defined(FSYS_REISERFS)
2285b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#  define STAGE2_ID	STAGE2_ID_REISERFS_STAGE1_5
2295b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project# elif defined(FSYS_VSTAFS)
2305b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#  define STAGE2_ID	STAGE2_ID_VSTAFS_STAGE1_5
2315b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project# elif defined(FSYS_JFS)
2325b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#  define STAGE2_ID	STAGE2_ID_JFS_STAGE1_5
2335b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project# elif defined(FSYS_XFS)
2345b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#  define STAGE2_ID	STAGE2_ID_XFS_STAGE1_5
2355b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project# elif defined(FSYS_ISO9660)
2365b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#  define STAGE2_ID	STAGE2_ID_ISO9660_STAGE1_5
2375b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project# elif defined(FSYS_UFS2)
2385b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#  define STAGE2_ID	STAGE2_ID_UFS2_STAGE1_5
2395b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project# else
2405b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#  error "unknown Stage 2"
2415b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project# endif
2425b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#endif
2435b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
2445b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project/*
2455b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project *  defines for use when switching between real and protected mode
2465b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project */
2475b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
2485b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define CR0_PE_ON	0x1
2495b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define CR0_PE_OFF	0xfffffffe
2505b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define PROT_MODE_CSEG	0x8
2515b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define PROT_MODE_DSEG  0x10
2525b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define PSEUDO_RM_CSEG	0x18
2535b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define PSEUDO_RM_DSEG	0x20
2545b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define STACKOFF	(0x2000 - 0x10)
2555b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define PROTSTACKINIT   (FSYS_BUF - 0x10)
2565b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
2575b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
2585b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project/*
2595b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project * Assembly code defines
2605b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project *
2615b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project * "EXT_C" is assumed to be defined in the Makefile by the configure
2625b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project *   command.
2635b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project */
2645b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
2655b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define ENTRY(x) .globl EXT_C(x) ; EXT_C(x):
2665b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define VARIABLE(x) ENTRY(x)
2675b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
2685b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
2695b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define K_RDWR  	0x60	/* keyboard data & cmds (read/write) */
2705b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define K_STATUS	0x64	/* keyboard status */
2715b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define K_CMD		0x64	/* keybd ctlr command (write-only) */
2725b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
2735b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define K_OBUF_FUL 	0x01	/* output buffer full */
2745b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define K_IBUF_FUL 	0x02	/* input buffer full */
2755b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
2765b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define KC_CMD_WIN	0xd0	/* read  output port */
2775b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define KC_CMD_WOUT	0xd1	/* write output port */
2785b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define KB_OUTPUT_MASK  0xdd	/* enable output buffer full interrupt
2795b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project				   enable data line
2805b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project				   enable clock line */
2815b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define KB_A20_ENABLE   0x02
2825b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
2835b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project/* Codes for getchar. */
2845b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define ASCII_CHAR(x)   ((x) & 0xFF)
2855b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#if !defined(GRUB_UTIL) || !defined(HAVE_LIBCURSES)
2865b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project# define KEY_LEFT        0x4B00
2875b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project# define KEY_RIGHT       0x4D00
2885b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project# define KEY_UP          0x4800
2895b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project# define KEY_DOWN        0x5000
2905b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project# define KEY_IC          0x5200	/* insert char */
2915b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project# define KEY_DC          0x5300	/* delete char */
2925b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project# define KEY_BACKSPACE   0x0008
2935b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project# define KEY_HOME        0x4700
2945b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project# define KEY_END         0x4F00
2955b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project# define KEY_NPAGE       0x5100
2965b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project# define KEY_PPAGE       0x4900
2975b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project# define A_NORMAL        0x7
2985b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project# define A_REVERSE       0x70
2995b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#elif defined(HAVE_NCURSES_CURSES_H)
3005b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project# include <ncurses/curses.h>
3015b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#elif defined(HAVE_NCURSES_H)
3025b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project# include <ncurses.h>
3035b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#elif defined(HAVE_CURSES_H)
3045b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project# include <curses.h>
3055b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#endif
3065b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
3075b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project/* In old BSD curses, A_NORMAL and A_REVERSE are not defined, so we
3085b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project   define them here if they are undefined.  */
3095b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#ifndef A_NORMAL
3105b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project# define A_NORMAL	0
3115b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#endif /* ! A_NORMAL */
3125b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#ifndef A_REVERSE
3135b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project# ifdef A_STANDOUT
3145b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#  define A_REVERSE	A_STANDOUT
3155b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project# else /* ! A_STANDOUT */
3165b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#  define A_REVERSE	0
3175b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project# endif /* ! A_STANDOUT */
3185b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#endif /* ! A_REVERSE */
3195b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
3205b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project/* Define ACS_* ourselves, since the definitions are not consistent among
3215b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project   various curses implementations.  */
3225b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#undef ACS_ULCORNER
3235b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#undef ACS_URCORNER
3245b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#undef ACS_LLCORNER
3255b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#undef ACS_LRCORNER
3265b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#undef ACS_HLINE
3275b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#undef ACS_VLINE
3285b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#undef ACS_LARROW
3295b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#undef ACS_RARROW
3305b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#undef ACS_UARROW
3315b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#undef ACS_DARROW
3325b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
3335b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define ACS_ULCORNER	'+'
3345b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define ACS_URCORNER	'+'
3355b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define ACS_LLCORNER	'+'
3365b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define ACS_LRCORNER	'+'
3375b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define ACS_HLINE	'-'
3385b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define ACS_VLINE	'|'
3395b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define ACS_LARROW	'<'
3405b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define ACS_RARROW	'>'
3415b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define ACS_UARROW	'^'
3425b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define ACS_DARROW	'v'
3435b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
3445b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project/* Special graphics characters for IBM displays. */
3455b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define DISP_UL		218
3465b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define DISP_UR		191
3475b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define DISP_LL		192
3485b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define DISP_LR		217
3495b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define DISP_HORIZ	196
3505b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define DISP_VERT	179
3515b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define DISP_LEFT	0x1b
3525b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define DISP_RIGHT	0x1a
3535b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define DISP_UP		0x18
3545b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define DISP_DOWN	0x19
3555b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
3565b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project/* Remap some libc-API-compatible function names so that we prevent
3575b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project   circularararity. */
3585b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#ifndef WITHOUT_LIBC_STUBS
3595b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define memmove grub_memmove
3605b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define memcpy grub_memmove	/* we don't need a separate memcpy */
3615b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define memset grub_memset
3625b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define isspace grub_isspace
3635b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define printf grub_printf
3645b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define sprintf grub_sprintf
3655b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#undef putchar
3665b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define putchar grub_putchar
3675b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define strncat grub_strncat
3685b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define strstr grub_strstr
3695b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define memcmp grub_memcmp
3705b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define strcmp grub_strcmp
3715b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define tolower grub_tolower
3725b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define strlen grub_strlen
3735b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define strcpy grub_strcpy
3745b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#endif /* WITHOUT_LIBC_STUBS */
3755b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
3765b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
3775b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#ifndef ASM_FILE
3785b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project/*
3795b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project *  Below this should be ONLY defines and other constructs for C code.
3805b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project */
3815b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
3825b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project/* multiboot stuff */
3835b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
3845b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#include "mb_header.h"
3855b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#include "mb_info.h"
3865b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
3875b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project/* For the Linux/i386 boot protocol version 2.03.  */
3885b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectstruct linux_kernel_header
3895b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project{
3905b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  char code1[0x0020];
3915b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  unsigned short cl_magic;		/* Magic number 0xA33F */
3925b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  unsigned short cl_offset;		/* The offset of command line */
3935b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  char code2[0x01F1 - 0x0020 - 2 - 2];
3945b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  unsigned char setup_sects;		/* The size of the setup in sectors */
3955b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  unsigned short root_flags;		/* If the root is mounted readonly */
3965b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  unsigned short syssize;		/* obsolete */
3975b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  unsigned short swap_dev;		/* obsolete */
3985b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  unsigned short ram_size;		/* obsolete */
3995b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  unsigned short vid_mode;		/* Video mode control */
4005b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  unsigned short root_dev;		/* Default root device number */
4015b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  unsigned short boot_flag;		/* 0xAA55 magic number */
4025b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  unsigned short jump;			/* Jump instruction */
4035b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  unsigned long header;			/* Magic signature "HdrS" */
4045b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  unsigned short version;		/* Boot protocol version supported */
4055b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  unsigned long realmode_swtch;		/* Boot loader hook */
4065b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  unsigned long start_sys;		/* Points to kernel version string */
4075b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  unsigned char type_of_loader;		/* Boot loader identifier */
4085b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  unsigned char loadflags;		/* Boot protocol option flags */
4095b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  unsigned short setup_move_size;	/* Move to high memory size */
4105b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  unsigned long code32_start;		/* Boot loader hook */
4115b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  unsigned long ramdisk_image;		/* initrd load address */
4125b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  unsigned long ramdisk_size;		/* initrd size */
4135b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  unsigned long bootsect_kludge;	/* obsolete */
4145b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  unsigned short heap_end_ptr;		/* Free memory after setup end */
4155b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  unsigned short pad1;			/* Unused */
4165b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  char *cmd_line_ptr;			/* Points to the kernel command line */
4175b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  unsigned long initrd_addr_max;	/* The highest address of initrd */
4185b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} __attribute__ ((packed));
4195b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
4205b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project/* Memory map address range descriptor used by GET_MMAP_ENTRY. */
4215b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectstruct mmar_desc
4225b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project{
4235b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  unsigned long desc_len;	/* Size of this descriptor. */
4245b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  unsigned long long addr;	/* Base address. */
4255b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  unsigned long long length;	/* Length in bytes. */
4265b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  unsigned long type;		/* Type of address range. */
4275b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} __attribute__ ((packed));
4285b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
4295b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project/* VBE controller information.  */
4305b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectstruct vbe_controller
4315b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project{
4325b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  unsigned char signature[4];
4335b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  unsigned short version;
4345b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  unsigned long oem_string;
4355b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  unsigned long capabilities;
4365b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  unsigned long video_mode;
4375b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  unsigned short total_memory;
4385b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  unsigned short oem_software_rev;
4395b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  unsigned long oem_vendor_name;
4405b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  unsigned long oem_product_name;
4415b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  unsigned long oem_product_rev;
4425b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  unsigned char reserved[222];
4435b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  unsigned char oem_data[256];
4445b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} __attribute__ ((packed));
4455b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
4465b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project/* VBE mode information.  */
4475b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectstruct vbe_mode
4485b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project{
4495b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  unsigned short mode_attributes;
4505b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  unsigned char win_a_attributes;
4515b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  unsigned char win_b_attributes;
4525b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  unsigned short win_granularity;
4535b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  unsigned short win_size;
4545b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  unsigned short win_a_segment;
4555b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  unsigned short win_b_segment;
4565b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  unsigned long win_func;
4575b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  unsigned short bytes_per_scanline;
4585b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
4595b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  /* >=1.2 */
4605b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  unsigned short x_resolution;
4615b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  unsigned short y_resolution;
4625b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  unsigned char x_char_size;
4635b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  unsigned char y_char_size;
4645b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  unsigned char number_of_planes;
4655b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  unsigned char bits_per_pixel;
4665b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  unsigned char number_of_banks;
4675b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  unsigned char memory_model;
4685b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  unsigned char bank_size;
4695b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  unsigned char number_of_image_pages;
4705b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  unsigned char reserved0;
4715b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
4725b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  /* direct color */
4735b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  unsigned char red_mask_size;
4745b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  unsigned char red_field_position;
4755b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  unsigned char green_mask_size;
4765b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  unsigned char green_field_position;
4775b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  unsigned char blue_mask_size;
4785b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  unsigned char blue_field_position;
4795b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  unsigned char reserved_mask_size;
4805b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  unsigned char reserved_field_position;
4815b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  unsigned char direct_color_mode_info;
4825b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
4835b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  /* >=2.0 */
4845b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  unsigned long phys_base;
4855b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  unsigned long reserved1;
4865b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  unsigned short reversed2;
4875b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
4885b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  /* >=3.0 */
4895b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  unsigned short linear_bytes_per_scanline;
4905b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  unsigned char banked_number_of_image_pages;
4915b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  unsigned char linear_number_of_image_pages;
4925b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  unsigned char linear_red_mask_size;
4935b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  unsigned char linear_red_field_position;
4945b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  unsigned char linear_green_mask_size;
4955b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  unsigned char linear_green_field_position;
4965b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  unsigned char linear_blue_mask_size;
4975b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  unsigned char linear_blue_field_position;
4985b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  unsigned char linear_reserved_mask_size;
4995b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  unsigned char linear_reserved_field_position;
5005b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  unsigned long max_pixel_clock;
5015b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
5025b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  unsigned char reserved3[189];
5035b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} __attribute__ ((packed));
5045b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
5055b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
5065b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#undef NULL
5075b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define NULL         ((void *) 0)
5085b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
5095b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project/* Error codes (descriptions are in common.c) */
5105b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projecttypedef enum
5115b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project{
5125b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  ERR_NONE = 0,
5135b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  ERR_BAD_FILENAME,
5145b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  ERR_BAD_FILETYPE,
5155b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  ERR_BAD_GZIP_DATA,
5165b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  ERR_BAD_GZIP_HEADER,
5175b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  ERR_BAD_PART_TABLE,
5185b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  ERR_BAD_VERSION,
5195b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  ERR_BELOW_1MB,
5205b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  ERR_BOOT_COMMAND,
5215b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  ERR_BOOT_FAILURE,
5225b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  ERR_BOOT_FEATURES,
5235b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  ERR_DEV_FORMAT,
5245b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  ERR_DEV_VALUES,
5255b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  ERR_EXEC_FORMAT,
5265b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  ERR_FILELENGTH,
5275b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  ERR_FILE_NOT_FOUND,
5285b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  ERR_FSYS_CORRUPT,
5295b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  ERR_FSYS_MOUNT,
5305b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  ERR_GEOM,
5315b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  ERR_NEED_LX_KERNEL,
5325b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  ERR_NEED_MB_KERNEL,
5335b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  ERR_NO_DISK,
5345b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  ERR_NO_PART,
5355b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  ERR_NUMBER_PARSING,
5365b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  ERR_OUTSIDE_PART,
5375b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  ERR_READ,
5385b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  ERR_SYMLINK_LOOP,
5395b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  ERR_UNRECOGNIZED,
5405b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  ERR_WONT_FIT,
5415b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  ERR_WRITE,
5425b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  ERR_BAD_ARGUMENT,
5435b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  ERR_UNALIGNED,
5445b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  ERR_PRIVILEGED,
5455b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  ERR_DEV_NEED_INIT,
5465b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  ERR_NO_DISK_SPACE,
5475b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  ERR_NUMBER_OVERFLOW,
5485b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
5495b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  MAX_ERR_NUM
5505b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project} grub_error_t;
5515b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
5525b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectextern unsigned long install_partition;
5535b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectextern unsigned long boot_drive;
5545b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectextern unsigned long install_second_sector;
5555b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectextern struct apm_info apm_bios_info;
5565b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectextern unsigned long boot_part_addr;
5575b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectextern int saved_entryno;
5585b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectextern unsigned char force_lba;
5595b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectextern char version_string[];
5605b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectextern char config_file[];
5615b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectextern unsigned long linux_text_len;
5625b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectextern char *linux_data_tmp_addr;
5635b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectextern char *linux_data_real_addr;
5645b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
5655b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#ifdef GRUB_UTIL
5665b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project/* If not using config file, this variable is set to zero,
5675b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project   otherwise non-zero.  */
5685b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectextern int use_config_file;
5695b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project/* If using the preset menu, this variable is set to non-zero,
5705b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project   otherwise zero.  */
5715b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectextern int use_preset_menu;
5725b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project/* If not using curses, this variable is set to zero, otherwise non-zero.  */
5735b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectextern int use_curses;
5745b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project/* The flag for verbose messages.  */
5755b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectextern int verbose;
5765b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project/* The flag for read-only.  */
5775b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectextern int read_only;
5785b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project/* The number of floppies to be probed.  */
5795b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectextern int floppy_disks;
5805b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project/* The map between BIOS drives and UNIX device file names.  */
5815b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectextern char **device_map;
5825b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project/* The filename which stores the information about a device map.  */
5835b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectextern char *device_map_file;
5845b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project/* The array of geometries.  */
5855b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectextern struct geometry *disks;
5865b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project/* Assign DRIVE to a device name DEVICE.  */
5875b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectextern void assign_device_name (int drive, const char *device);
5885b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#endif
5895b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
5905b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#ifndef STAGE1_5
5915b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project/* GUI interface variables. */
5925b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project# define MAX_FALLBACK_ENTRIES	8
5935b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectextern int fallback_entries[MAX_FALLBACK_ENTRIES];
5945b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectextern int fallback_entryno;
5955b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectextern int default_entry;
5965b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectextern int current_entryno;
5975b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
5985b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project/* The constants for password types.  */
5995b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projecttypedef enum
6005b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project{
6015b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  PASSWORD_PLAIN,
6025b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  PASSWORD_MD5,
6035b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  PASSWORD_UNSUPPORTED
6045b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
6055b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectpassword_t;
6065b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
6075b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectextern char *password;
6085b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectextern password_t password_type;
6095b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectextern int auth;
6105b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectextern char commands[];
6115b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
6125b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project/* For `more'-like feature.  */
6135b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectextern int max_lines;
6145b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectextern int count_lines;
6155b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectextern int use_pager;
6165b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#endif
6175b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
6185b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#ifndef NO_DECOMPRESSION
6195b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectextern int no_decompression;
6205b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectextern int compressed_file;
6215b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#endif
6225b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
6235b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project/* instrumentation variables */
6245b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectextern void (*disk_read_hook) (int, int, int);
6255b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectextern void (*disk_read_func) (int, int, int);
6265b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
6275b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#ifndef STAGE1_5
6285b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project/* The flag for debug mode.  */
6295b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectextern int debug;
6305b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#endif /* STAGE1_5 */
6315b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
6325b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectextern unsigned long current_drive;
6335b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectextern unsigned long current_partition;
6345b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
6355b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectextern int fsys_type;
6365b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
6375b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project/* The information for a disk geometry. The CHS information is only for
6385b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project   DOS/Partition table compatibility, and the real number of sectors is
6395b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project   stored in TOTAL_SECTORS.  */
6405b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectstruct geometry
6415b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project{
6425b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  /* The number of cylinders */
6435b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  unsigned long cylinders;
6445b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  /* The number of heads */
6455b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  unsigned long heads;
6465b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  /* The number of sectors */
6475b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  unsigned long sectors;
6485b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  /* The total number of sectors */
6495b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  unsigned long total_sectors;
6505b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  /* Device sector size */
6515b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  unsigned long sector_size;
6525b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  /* Flags */
6535b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  unsigned long flags;
6545b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project};
6555b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
6565b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectextern unsigned long part_start;
6575b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectextern unsigned long part_length;
6585b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
6595b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectextern int current_slice;
6605b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
6615b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectextern int buf_drive;
6625b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectextern int buf_track;
6635b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectextern struct geometry buf_geom;
6645b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
6655b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project/* these are the current file position and maximum file position */
6665b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectextern int filepos;
6675b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectextern int filemax;
6685b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
6695b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project/*
6705b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project *  Common BIOS/boot data.
6715b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project */
6725b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
6735b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectextern struct multiboot_info mbi;
6745b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectextern unsigned long saved_drive;
6755b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectextern unsigned long saved_partition;
6765b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectextern unsigned long cdrom_drive;
6775b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#ifndef STAGE1_5
6785b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectextern unsigned long saved_mem_upper;
6795b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectextern unsigned long extended_memory;
6805b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#endif
6815b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
6825b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project/*
6835b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project *  Error variables.
6845b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project */
6855b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
6865b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectextern grub_error_t errnum;
6875b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectextern char *err_list[];
6885b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
6895b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project/* Simplify declaration of entry_addr. */
6905b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projecttypedef void (*entry_func) (int, int, int, int, int, int)
6915b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project     __attribute__ ((noreturn));
6925b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
6935b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectextern entry_func entry_addr;
6945b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
6955b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project/* Enter the stage1.5/stage2 C code after the stack is set up. */
6965b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectvoid cmain (void);
6975b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
6985b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project/* Halt the processor (called after an unrecoverable error). */
6995b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectvoid stop (void) __attribute__ ((noreturn));
7005b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
7015b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project/* Reboot the system.  */
7025b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectvoid grub_reboot (void) __attribute__ ((noreturn));
7035b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
7045b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project/* Halt the system, using APM if possible. If NO_APM is true, don't use
7055b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project   APM even if it is available.  */
7065b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectvoid grub_halt (int no_apm) __attribute__ ((noreturn));
7075b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
7085b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project/* Copy MAP to the drive map and set up int13_handler.  */
7095b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectvoid set_int13_handler (unsigned short *map);
7105b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
7115b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project/* Set up int15_handler.  */
7125b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectvoid set_int15_handler (void);
7135b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
7145b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project/* Restore the original int15 handler.  */
7155b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectvoid unset_int15_handler (void);
7165b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
7175b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project/* Track the int13 handler to probe I/O address space.  */
7185b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectvoid track_int13 (int drive);
7195b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
7205b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project/* The key map.  */
7215b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectextern unsigned short bios_key_map[];
7225b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectextern unsigned short ascii_key_map[];
7235b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectextern unsigned short io_map[];
7245b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
7255b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project/* calls for direct boot-loader chaining */
7265b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectvoid chain_stage1 (unsigned long segment, unsigned long offset,
7275b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project		   unsigned long part_table_addr)
7285b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project     __attribute__ ((noreturn));
7295b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectvoid chain_stage2 (unsigned long segment, unsigned long offset,
7305b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project		   int second_sector)
7315b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project     __attribute__ ((noreturn));
7325b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
7335b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project/* do some funky stuff, then boot linux */
7345b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectvoid linux_boot (void) __attribute__ ((noreturn));
7355b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
7365b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project/* do some funky stuff, then boot bzImage linux */
7375b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectvoid big_linux_boot (void) __attribute__ ((noreturn));
7385b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
7395b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project/* booting a multiboot executable */
7405b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectvoid multi_boot (int start, int mb_info) __attribute__ ((noreturn));
7415b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
7425b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project/* If LINEAR is nonzero, then set the Intel processor to linear mode.
7435b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project   Otherwise, bit 20 of all memory accesses is always forced to zero,
7445b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project   causing a wraparound effect for bugwards compatibility with the
7455b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project   8086 CPU. */
7465b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectvoid gateA20 (int linear);
7475b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
7485b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project/* memory probe routines */
7495b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectint get_memsize (int type);
7505b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectint get_eisamemsize (void);
7515b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
7525b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project/* Fetch the next entry in the memory map and return the continuation
7535b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project   value.  DESC is a pointer to the descriptor buffer, and CONT is the
7545b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project   previous continuation value (0 to get the first entry in the
7555b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project   map). */
7565b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectint get_mmap_entry (struct mmar_desc *desc, int cont);
7575b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
7585b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project/* Get the linear address of a ROM configuration table. Return zero,
7595b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project   if fails.  */
7605b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectunsigned long get_rom_config_table (void);
7615b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
7625b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project/* Get APM BIOS information.  */
7635b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectvoid get_apm_info (void);
7645b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
7655b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project/* Get VBE controller information.  */
7665b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectint get_vbe_controller_info (struct vbe_controller *controller);
7675b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
7685b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project/* Get VBE mode information.  */
7695b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectint get_vbe_mode_info (int mode_number, struct vbe_mode *mode);
7705b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
7715b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project/* Set VBE mode.  */
7725b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectint set_vbe_mode (int mode_number);
7735b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
7745b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project/* Return the data area immediately following our code. */
7755b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectint get_code_end (void);
7765b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
7775b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project/* low-level timing info */
7785b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectint getrtsecs (void);
7795b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectint currticks (void);
7805b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
7815b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project/* Clear the screen. */
7825b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectvoid cls (void);
7835b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
7845b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project/* Turn on/off cursor. */
7855b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectint setcursor (int on);
7865b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
7875b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project/* Get the current cursor position (where 0,0 is the top left hand
7885b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project   corner of the screen).  Returns packed values, (RET >> 8) is x,
7895b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project   (RET & 0xff) is y. */
7905b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectint getxy (void);
7915b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
7925b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project/* Set the cursor position. */
7935b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectvoid gotoxy (int x, int y);
7945b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
7955b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project/* Displays an ASCII character.  IBM displays will translate some
7965b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project   characters to special graphical ones (see the DISP_* constants). */
7975b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectvoid grub_putchar (int c);
7985b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
7995b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project/* Wait for a keypress, and return its packed BIOS/ASCII key code.
8005b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project   Use ASCII_CHAR(ret) to extract the ASCII code. */
8015b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectint getkey (void);
8025b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
8035b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project/* Like GETKEY, but doesn't block, and returns -1 if no keystroke is
8045b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project   available. */
8055b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectint checkkey (void);
8065b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
8075b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project/* Low-level disk I/O */
8085b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectint get_diskinfo (int drive, struct geometry *geometry);
8095b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectint biosdisk (int subfunc, int drive, struct geometry *geometry,
8105b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project	      int sector, int nsec, int segment);
8115b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectvoid stop_floppy (void);
8125b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
8135b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project/* Command-line interface functions. */
8145b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#ifndef STAGE1_5
8155b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
8165b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project/* The flags for the builtins.  */
8175b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define BUILTIN_CMDLINE		0x1	/* Run in the command-line.  */
8185b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define BUILTIN_MENU		0x2	/* Run in the menu.  */
8195b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define BUILTIN_TITLE		0x4	/* Only for the command title.  */
8205b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define BUILTIN_SCRIPT		0x8	/* Run in the script.  */
8215b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define BUILTIN_NO_ECHO		0x10	/* Don't print command on booting. */
8225b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define BUILTIN_HELP_LIST	0x20	/* Show help in listing.  */
8235b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
8245b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project/* The table for a builtin.  */
8255b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectstruct builtin
8265b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project{
8275b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  /* The command name.  */
8285b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  char *name;
8295b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  /* The callback function.  */
8305b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  int (*func) (char *, int);
8315b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  /* The combination of the flags defined above.  */
8325b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  int flags;
8335b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  /* The short version of the documentation.  */
8345b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  char *short_doc;
8355b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  /* The long version of the documentation.  */
8365b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  char *long_doc;
8375b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project};
8385b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
8395b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project/* All the builtins are registered in this.  */
8405b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectextern struct builtin *builtin_table[];
8415b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
8425b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project/* The constants for kernel types.  */
8435b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projecttypedef enum
8445b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project{
8455b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  KERNEL_TYPE_NONE,		/* None is loaded.  */
8465b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  KERNEL_TYPE_MULTIBOOT,	/* Multiboot.  */
8475b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  KERNEL_TYPE_LINUX,		/* Linux.  */
8485b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  KERNEL_TYPE_BIG_LINUX,	/* Big Linux.  */
8495b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  KERNEL_TYPE_FREEBSD,		/* FreeBSD.  */
8505b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  KERNEL_TYPE_NETBSD,		/* NetBSD.  */
8515b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  KERNEL_TYPE_CHAINLOADER	/* Chainloader.  */
8525b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project}
8535b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectkernel_t;
8545b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
8555b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectextern kernel_t kernel_type;
8565b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectextern int show_menu;
8575b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectextern int grub_timeout;
8585b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
8595b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectvoid init_builtins (void);
8605b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectvoid init_config (void);
8615b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectchar *skip_to (int after_equal, char *cmdline);
8625b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectstruct builtin *find_command (char *command);
8635b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectvoid print_cmdline_message (int forever);
8645b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectvoid enter_cmdline (char *heap, int forever);
8655b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectint run_script (char *script, char *heap);
8665b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#endif
8675b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
8685b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project/* C library replacement functions with identical semantics. */
8695b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectvoid grub_printf (const char *format,...);
8705b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectint grub_sprintf (char *buffer, const char *format, ...);
8715b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectint grub_tolower (int c);
8725b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectint grub_isspace (int c);
8735b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectint grub_strncat (char *s1, const char *s2, int n);
8745b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectvoid *grub_memmove (void *to, const void *from, int len);
8755b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectvoid *grub_memset (void *start, int c, int len);
8765b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectint grub_strncat (char *s1, const char *s2, int n);
8775b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectchar *grub_strstr (const char *s1, const char *s2);
8785b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectint grub_memcmp (const char *s1, const char *s2, int n);
8795b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectint grub_strcmp (const char *s1, const char *s2);
8805b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectint grub_strlen (const char *str);
8815b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectchar *grub_strcpy (char *dest, const char *src);
8825b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
8835b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#ifndef GRUB_UTIL
8845b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projecttypedef unsigned long grub_jmp_buf[6];
8855b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#else
8865b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project/* In the grub shell, use the libc jmp_buf instead.  */
8875b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project# include <setjmp.h>
8885b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project# define grub_jmp_buf jmp_buf
8895b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#endif
8905b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
8915b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#ifdef GRUB_UTIL
8925b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project# define grub_setjmp	setjmp
8935b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project# define grub_longjmp	longjmp
8945b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#else /* ! GRUB_UTIL */
8955b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectint grub_setjmp (grub_jmp_buf env);
8965b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectvoid grub_longjmp (grub_jmp_buf env, int val);
8975b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#endif /* ! GRUB_UTIL */
8985b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
8995b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project/* The environment for restarting Stage 2.  */
9005b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectextern grub_jmp_buf restart_env;
9015b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project/* The environment for restarting the command-line interface.  */
9025b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectextern grub_jmp_buf restart_cmdline_env;
9035b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
9045b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project/* misc */
9055b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectvoid init_page (void);
9065b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectvoid print_error (void);
9075b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectchar *convert_to_ascii (char *buf, int c, ...);
9085b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectint get_cmdline (char *prompt, char *cmdline, int maxlen,
9095b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project		 int echo_char, int history);
9105b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectint substring (const char *s1, const char *s2);
9115b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectint nul_terminate (char *str);
9125b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectint get_based_digit (int c, int base);
9135b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectint safe_parse_maxint (char **str_ptr, int *myint_ptr);
9145b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectint memcheck (int start, int len);
9155b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectvoid grub_putstr (const char *str);
9165b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
9175b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#ifndef NO_DECOMPRESSION
9185b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project/* Compression support. */
9195b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectint gunzip_test_header (void);
9205b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectint gunzip_read (char *buf, int len);
9215b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#endif /* NO_DECOMPRESSION */
9225b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
9235b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectint rawread (int drive, int sector, int byte_offset, int byte_len, char *buf);
9245b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectint devread (int sector, int byte_offset, int byte_len, char *buf);
9255b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectint rawwrite (int drive, int sector, char *buf);
9265b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectint devwrite (int sector, int sector_len, char *buf);
9275b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
9285b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project/* Parse a device string and initialize the global parameters. */
9295b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectchar *set_device (char *device);
9305b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectint open_device (void);
9315b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectint real_open_partition (int flags);
9325b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectint open_partition (void);
9335b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectint next_partition (unsigned long drive, unsigned long dest,
9345b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project		    unsigned long *partition, int *type,
9355b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project		    unsigned long *start, unsigned long *len,
9365b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project		    unsigned long *offset, int *entry,
9375b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project		    unsigned long *ext_offset, char *buf);
9385b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
9395b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project/* Sets device to the one represented by the SAVED_* parameters. */
9405b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectint make_saved_active (void);
9415b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
9425b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project/* Set or clear the current root partition's hidden flag.  */
9435b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectint set_partition_hidden_flag (int hidden);
9445b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
9455b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project/* Open a file or directory on the active device, using GRUB's
9465b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project   internal filesystem support. */
9475b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectint grub_open (char *filename);
9485b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
9495b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project/* Read LEN bytes into BUF from the file that was opened with
9505b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project   GRUB_OPEN.  If LEN is -1, read all the remaining data in the file.  */
9515b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectint grub_read (char *buf, int len);
9525b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
9535b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project/* Reposition a file offset.  */
9545b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectint grub_seek (int offset);
9555b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
9565b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project/* Close a file.  */
9575b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectvoid grub_close (void);
9585b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
9595b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project/* List the contents of the directory that was opened with GRUB_OPEN,
9605b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project   printing all completions. */
9615b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectint dir (char *dirname);
9625b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
9635b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectint set_bootdev (int hdbias);
9645b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
9655b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project/* Display statistics on the current active device. */
9665b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectvoid print_fsys_type (void);
9675b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
9685b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project/* Display device and filename completions. */
9695b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectvoid print_a_completion (char *filename);
9705b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectint print_completions (int is_filename, int is_completion);
9715b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
9725b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project/* Copies the current partition data to the desired address. */
9735b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectvoid copy_current_part_entry (char *buf);
9745b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
9755b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#ifndef STAGE1_5
9765b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectvoid bsd_boot (kernel_t type, int bootdev, char *arg)
9775b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project     __attribute__ ((noreturn));
9785b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
9795b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project/* Define flags for load_image here.  */
9805b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project/* Don't pass a Linux's mem option automatically.  */
9815b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define KERNEL_LOAD_NO_MEM_OPTION	(1 << 0)
9825b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
9835b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectkernel_t load_image (char *kernel, char *arg, kernel_t suggested_type,
9845b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project		     unsigned long load_flags);
9855b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
9865b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectint load_module (char *module, char *arg);
9875b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectint load_initrd (char *initrd);
9885b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
9895b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectint check_password(char *entered, char* expected, password_t type);
9905b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#endif
9915b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
9925b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectvoid init_bios_info (void);
9935b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
9945b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#endif /* ASM_FILE */
9955b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
9965b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#endif /* ! GRUB_SHARED_HEADER */
997