mirror of
https://git.proxmox.com/git/grub2
synced 2025-05-19 05:58:22 +00:00

* include/pupa/i386/pc/linux.h: New file. * loader/i386/pc/linux.c: Likewise. * loader/i386/pc/chainloader.c (pupa_chainloader_boot_sector): Removed. (pupa_chainloader_unload): Return PUPA_ERR_NONE. (pupa_rescue_cmd_chainloader): Read the image to 0x7C00 instead of PUPA_CHAINLOADER_BOOT_SECTOR. * kern/i386/pc/startup.S: Include pupa/machine/linux.h. (pupa_linux_prot_size): New variable. (pupa_linux_tmp_addr): Likewise. (pupa_linux_real_addr): Likewise. (pupa_linux_boot_zimage): New function. (pupa_linux_boot_bzimage): Likewise. * kern/i386/pc/init.c (struct mem_region): New structure. (MAX_REGIONS): New macro. (mem_regions): New variable. (num_regions): Likewise. (pupa_os_area_addr): Likewise. (pupa_os_area_size): Likewise. (pupa_lower_mem): Likewise. (pupa_upper_mem): Likewise. (add_mem_region): New function. (compact_mem_regions): Likewise. (pupa_machine_init): Set PUPA_LOWER_MEM and PUPA_UPPER_MEM to the size of the conventional memory and that of so-called upper memory (before the first memory hole). Instead of adding each found region to free memory, use add_mem_region and add them after removing overlaps. Also, add only 1/4 of the upper memory to free memory. The rest is used for loading OS images. Maybe this is ad hoc, but this makes it much easier to relocate OS images when booting. * kern/rescue.c (pupa_rescue_cmd_module): Removed. (pupa_enter_rescue_mode): Don't register initrd and module. * kern/mm.c: Include pupa/dl.h. * kern/main.c: Include pupa/file.h and pupa/device.h. * kern/loader.c (pupa_loader_load_module_func): Removed. (pupa_loader_load_module): Likewise. * kern/dl.c (pupa_dl_load): Use the suffix ``.mod'' instead of ``.o''. * include/pupa/i386/pc/loader.h (pupa_linux_prot_size): Declared. (pupa_linux_tmp_addr): Likewise. (pupa_linux_real_addr): Likewise. (pupa_linux_boot_zimage): Likewise. (pupa_linux_boot_bzimage): Likewise. * include/pupa/i386/pc/init.h (pupa_lower_mem): Declared. (pupa_upper_mem): Likewise. (pupa_gate_a20): Don't export, because turning off Gate A20 in a module is too dangerous. * include/pupa/loader.h (pupa_os_area_addr): Declared. (pupa_os_area_size): Likewise. (pupa_loader_set): Remove the first argument. Loader doesn't manage modules or initrd any longer. (pupa_loader_load_module): Removed. * conf/i386-pc.rmk (pkgdata_MODULES): Added linux.mod. (linux_mod_SOURCES): New variable. (linux_mod_CFLAGS): Likewise.
86 lines
3.5 KiB
C
86 lines
3.5 KiB
C
/*
|
|
* PUPA -- Preliminary Universal Programming Architecture for GRUB
|
|
* Copyright (C) 1999,2000,2001,2002 Free Software Foundation, Inc.
|
|
* Copyright (C) 2003 Yoshinori K. Okuji <okuji@enbug.org>
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License as published by
|
|
* the Free Software Foundation; either version 2 of the License, or
|
|
* (at your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program; if not, write to the Free Software
|
|
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
|
*/
|
|
|
|
#ifndef PUPA_LINUX_MACHINE_HEADER
|
|
#define PUPA_LINUX_MACHINE_HEADER 1
|
|
|
|
#define PUPA_LINUX_MAGIC_SIGNATURE 0x53726448 /* "HdrS" */
|
|
#define PUPA_LINUX_DEFAULT_SETUP_SECTS 4
|
|
#define PUPA_LINUX_FLAG_CAN_USE_HEAP 0x80
|
|
#define PUPA_LINUX_INITRD_MAX_ADDRESS 0x38000000
|
|
#define PUPA_LINUX_MAX_SETUP_SECTS 64
|
|
#define PUPA_LINUX_BOOT_LOADER_TYPE 0x72
|
|
#define PUPA_LINUX_HEAP_END_OFFSET (0x9000 - 0x200)
|
|
|
|
#define PUPA_LINUX_BZIMAGE_ADDR 0x100000
|
|
#define PUPA_LINUX_ZIMAGE_ADDR 0x10000
|
|
#define PUPA_LINUX_OLD_REAL_MODE_ADDR 0x90000
|
|
#define PUPA_LINUX_SETUP_STACK 0x9000
|
|
|
|
#define PUPA_LINUX_FLAG_BIG_KERNEL 0x1
|
|
|
|
/* Linux's video mode selection support. Actually I hate it! */
|
|
#define PUPA_LINUX_VID_MODE_NORMAL 0xFFFF
|
|
#define PUPA_LINUX_VID_MODE_EXTENDED 0xFFFE
|
|
#define PUPA_LINUX_VID_MODE_ASK 0xFFFD
|
|
|
|
#define PUPA_LINUX_CL_OFFSET 0x9000
|
|
#define PUPA_LINUX_CL_END_OFFSET 0x90FF
|
|
#define PUPA_LINUX_SETUP_MOVE_SIZE 0x9100
|
|
#define PUPA_LINUX_CL_MAGIC 0xA33F
|
|
|
|
#ifndef ASM_FILE
|
|
|
|
/* For the Linux/i386 boot protocol version 2.03. */
|
|
struct linux_kernel_header
|
|
{
|
|
pupa_uint8_t code1[0x0020];
|
|
pupa_uint16_t cl_magic; /* Magic number 0xA33F */
|
|
pupa_uint16_t cl_offset; /* The offset of command line */
|
|
pupa_uint8_t code2[0x01F1 - 0x0020 - 2 - 2];
|
|
pupa_uint8_t setup_sects; /* The size of the setup in sectors */
|
|
pupa_uint16_t root_flags; /* If the root is mounted readonly */
|
|
pupa_uint16_t syssize; /* obsolete */
|
|
pupa_uint16_t swap_dev; /* obsolete */
|
|
pupa_uint16_t ram_size; /* obsolete */
|
|
pupa_uint16_t vid_mode; /* Video mode control */
|
|
pupa_uint16_t root_dev; /* Default root device number */
|
|
pupa_uint16_t boot_flag; /* 0xAA55 magic number */
|
|
pupa_uint16_t jump; /* Jump instruction */
|
|
pupa_uint32_t header; /* Magic signature "HdrS" */
|
|
pupa_uint16_t version; /* Boot protocol version supported */
|
|
pupa_uint32_t realmode_swtch; /* Boot loader hook */
|
|
pupa_uint32_t start_sys; /* Points to kernel version string */
|
|
pupa_uint8_t type_of_loader; /* Boot loader identifier */
|
|
pupa_uint8_t loadflags; /* Boot protocol option flags */
|
|
pupa_uint16_t setup_move_size; /* Move to high memory size */
|
|
pupa_uint32_t code32_start; /* Boot loader hook */
|
|
pupa_uint32_t ramdisk_image; /* initrd load address */
|
|
pupa_uint32_t ramdisk_size; /* initrd size */
|
|
pupa_uint32_t bootsect_kludge; /* obsolete */
|
|
pupa_uint16_t heap_end_ptr; /* Free memory after setup end */
|
|
pupa_uint16_t pad1; /* Unused */
|
|
char *cmd_line_ptr; /* Points to the kernel command line */
|
|
} __attribute__ ((packed));
|
|
|
|
#endif /* ! ASM_FILE */
|
|
|
|
#endif /* ! PUPA_LINUX_MACHINE_HEADER */
|