2008-08-17 Robert Millan * include/grub/i386/linux.h (LINUX_LOADER_ID_LILO) (LINUX_LOADER_ID_LOADLIN, LINUX_LOADER_ID_BOOTSECT) (LINUX_LOADER_ID_SYSLINUX, LINUX_LOADER_ID_ETHERBOOT) (LINUX_LOADER_ID_ELILO, LINUX_LOADER_ID_GRUB, LINUX_LOADER_ID_UBOOT) (LINUX_LOADER_ID_XEN, LINUX_LOADER_ID_GUJIN, LINUX_LOADER_ID_QEMU): New macros. (GRUB_LINUX_CL_OFFSET, GRUB_LINUX_CL_END_OFFSET): Move from here ... * loader/i386/pc/linux.c (GRUB_LINUX_CL_OFFSET) (GRUB_LINUX_CL_END_OFFSET): ... to here. * loader/i386/efi/linux.c (GRUB_EFI_CL_OFFSET): Rename to ... (GRUB_LINUX_CL_OFFSET): ... this. Update all users. (GRUB_EFI_CL_END_OFFSET): Rename to ... (GRUB_LINUX_CL_END_OFFSET): ... this. Update all users. (grub_rescue_cmd_linux): Macroify `type_of_loader' initialization. Initialize `params->video_cursor_x' and `params->video_cursor_y' portably using grub_getxy(). Remove '-EFI' suffix from boot message. Index: include/grub/i386/linux.h =================================================================== --- include/grub/i386/linux.h (revision 1817) +++ include/grub/i386/linux.h (working copy) @@ -39,8 +39,6 @@ #define GRUB_LINUX_VID_MODE_EXTENDED 0xFFFE #define GRUB_LINUX_VID_MODE_ASK 0xFFFD -#define GRUB_LINUX_CL_OFFSET 0x9000 -#define GRUB_LINUX_CL_END_OFFSET 0x90FF #define GRUB_LINUX_SETUP_MOVE_SIZE 0x9100 #define GRUB_LINUX_CL_MAGIC 0xA33F @@ -104,6 +102,17 @@ struct linux_kernel_header grub_uint16_t start_sys; /* The load-low segment (obsolete) */ grub_uint16_t kernel_version; /* Points to kernel version string */ grub_uint8_t type_of_loader; /* Boot loader identifier */ +#define LINUX_LOADER_ID_LILO 0x0 +#define LINUX_LOADER_ID_LOADLIN 0x1 +#define LINUX_LOADER_ID_BOOTSECT 0x2 +#define LINUX_LOADER_ID_SYSLINUX 0x3 +#define LINUX_LOADER_ID_ETHERBOOT 0x4 +#define LINUX_LOADER_ID_ELILO 0x5 +#define LINUX_LOADER_ID_GRUB 0x7 +#define LINUX_LOADER_ID_UBOOT 0x8 +#define LINUX_LOADER_ID_XEN 0x9 +#define LINUX_LOADER_ID_GUJIN 0xa +#define LINUX_LOADER_ID_QEMU 0xb grub_uint8_t loadflags; /* Boot protocol option flags */ grub_uint16_t setup_move_size; /* Move to high memory size */ grub_uint32_t code32_start; /* Boot loader hook */ Index: loader/i386/pc/linux.c =================================================================== --- loader/i386/pc/linux.c (revision 1817) +++ loader/i386/pc/linux.c (working copy) @@ -31,6 +31,9 @@ #include #include +#define GRUB_LINUX_CL_OFFSET 0x9000 +#define GRUB_LINUX_CL_END_OFFSET 0x90FF + static grub_dl_t my_mod; static grub_size_t linux_mem_size; Index: loader/i386/efi/linux.c =================================================================== --- loader/i386/efi/linux.c (revision 1817) +++ loader/i386/efi/linux.c (working copy) @@ -1,6 +1,6 @@ /* * GRUB -- GRand Unified Bootloader - * Copyright (C) 2006,2007 Free Software Foundation, Inc. + * Copyright (C) 2006,2007,2008 Free Software Foundation, Inc. * * GRUB is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -33,8 +33,8 @@ #include #include -#define GRUB_EFI_CL_OFFSET 0x1000 -#define GRUB_EFI_CL_END_OFFSET 0x2000 +#define GRUB_LINUX_CL_OFFSET 0x1000 +#define GRUB_LINUX_CL_END_OFFSET 0x2000 #define NEXT_MEMORY_DESCRIPTOR(desc, size) \ ((grub_efi_memory_descriptor_t *) ((char *) (desc) + (size))) @@ -166,7 +166,7 @@ allocate_pages (grub_size_t prot_size) grub_size_t real_size; /* Make sure that each size is aligned to a page boundary. */ - real_size = GRUB_EFI_CL_END_OFFSET; + real_size = GRUB_LINUX_CL_END_OFFSET; prot_size = page_align (prot_size); mmap_size = find_mmap_size (); @@ -634,7 +634,7 @@ grub_rescue_cmd_linux (int argc, char *a goto fail; params = (struct linux_kernel_params *) real_mode_mem; - grub_memset (params, 0, GRUB_EFI_CL_END_OFFSET); + grub_memset (params, 0, GRUB_LINUX_CL_END_OFFSET); grub_memcpy (¶ms->setup_sects, &lh.setup_sects, sizeof (lh) - 0x1F1); params->ps_mouse = params->padding10 = 0; @@ -647,7 +647,7 @@ grub_rescue_cmd_linux (int argc, char *a } /* XXX Linux assumes that only elilo can boot Linux on EFI!!! */ - params->type_of_loader = 0x50; + params->type_of_loader = (LINUX_LOADER_ID_ELILO << 4); params->cl_magic = GRUB_LINUX_CL_MAGIC; params->cl_offset = 0x1000; @@ -664,8 +664,8 @@ grub_rescue_cmd_linux (int argc, char *a params->ext_mem = ((32 * 0x100000) >> 10); params->alt_mem = ((32 * 0x100000) >> 10); - params->video_cursor_x = grub_efi_system_table->con_out->mode->cursor_column; - params->video_cursor_y = grub_efi_system_table->con_out->mode->cursor_row; + params->video_cursor_x = grub_getxy () >> 8; + params->video_cursor_y = grub_getxy () & 0xff; params->video_page = 0; /* ??? */ params->video_mode = grub_efi_system_table->con_out->mode->mode; params->video_width = (grub_getwh () >> 8); @@ -758,7 +758,7 @@ grub_rescue_cmd_linux (int argc, char *a grub_file_seek (file, real_size + GRUB_DISK_SECTOR_SIZE); /* XXX there is no way to know if the kernel really supports EFI. */ - grub_printf (" [Linux-EFI, setup=0x%x, size=0x%x]\n", + grub_printf (" [Linux, setup=0x%x, size=0x%x]\n", (unsigned) real_size, (unsigned) prot_size); /* Detect explicitly specified memory size, if any. */ @@ -814,7 +814,7 @@ grub_rescue_cmd_linux (int argc, char *a } /* Specify the boot file. */ - dest = grub_stpcpy ((char *) real_mode_mem + GRUB_EFI_CL_OFFSET, + dest = grub_stpcpy ((char *) real_mode_mem + GRUB_LINUX_CL_OFFSET, "BOOT_IMAGE="); dest = grub_stpcpy (dest, argv[0]); @@ -822,7 +822,7 @@ grub_rescue_cmd_linux (int argc, char *a for (i = 1; i < argc && dest + grub_strlen (argv[i]) + 1 < ((char *) real_mode_mem - + GRUB_EFI_CL_END_OFFSET); + + GRUB_LINUX_CL_END_OFFSET); i++) { *dest++ = ' ';