Defer multiboot device parsing until we're in compressed part.
* grub-core/boot/i386/pc/lnxboot.S: Remove setting dos_part and bsd_part. setdevice has fallen into disuse. * grub-core/boot/i386/pc/startup_raw.S (dos_part): Removed. (bsd_part): Likewise. (boot_dev): New variable. (multiboot_trampoline): Don't parse multiboot device. Pass multiboot device in %edx. * grub-core/disk/i386/pc/biosdisk.c (GRUB_MOD_INIT): Parse grub_boot_device. * grub-core/kern/i386/pc/init.c (grub_machine_get_bootlocation): Likewise. * grub-core/kern/i386/pc/startup.S: Save edx. (grub_boot_drive): Removed. (grub_install_dos_part): Likewise. (grub_install_bsd_part): Likewise. (grub_boot_device): New variable. * include/grub/i386/pc/kernel.h (grub_install_dos_part): Removed. (grub_install_bsd_part): Likewise. (grub_boot_drive): Likewise. (grub_boot_device): New variable. * include/grub/offsets.h (GRUB_KERNEL_I386_PC_INSTALL_DOS_PART): Removed. (GRUB_KERNEL_I386_PC_INSTALL_BSD_PART): Likewise. (GRUB_KERNEL_I386_PC_REED_SOLOMON_REDUNDANCY): Moved lower. (GRUB_KERNEL_MACHINE_INSTALL_BSD_PART): Removed. (GRUB_KERNEL_MACHINE_INSTALL_DOS_PART): Likewise. * util/grub-install.in: Remove redundant condition.
This commit is contained in:
parent
691cbb5816
commit
5fbdac149b
11 changed files with 63 additions and 171 deletions
|
@ -67,10 +67,15 @@ void
|
|||
grub_machine_get_bootlocation (char **device, char **path)
|
||||
{
|
||||
char *ptr;
|
||||
grub_uint8_t boot_drive, dos_part, bsd_part;
|
||||
|
||||
boot_drive = (grub_boot_device >> 24);
|
||||
dos_part = (grub_boot_device >> 16);
|
||||
bsd_part = (grub_boot_device >> 8);
|
||||
|
||||
/* No hardcoded root partition - make it from the boot drive and the
|
||||
partition number encoded at the install time. */
|
||||
if (grub_boot_drive == GRUB_BOOT_MACHINE_PXE_DL)
|
||||
if (boot_drive == GRUB_BOOT_MACHINE_PXE_DL)
|
||||
{
|
||||
if (grub_pc_net_config)
|
||||
grub_pc_net_config (device, path);
|
||||
|
@ -82,18 +87,18 @@ grub_machine_get_bootlocation (char **device, char **path)
|
|||
*device = grub_malloc (DEV_SIZE);
|
||||
ptr = *device;
|
||||
grub_snprintf (*device, DEV_SIZE,
|
||||
"%cd%u", (grub_boot_drive & 0x80) ? 'h' : 'f',
|
||||
grub_boot_drive & 0x7f);
|
||||
"%cd%u", (boot_drive & 0x80) ? 'h' : 'f',
|
||||
boot_drive & 0x7f);
|
||||
ptr += grub_strlen (ptr);
|
||||
|
||||
if (grub_install_dos_part >= 0)
|
||||
if (dos_part != 0xff)
|
||||
grub_snprintf (ptr, DEV_SIZE - (ptr - *device),
|
||||
",%u", grub_install_dos_part + 1);
|
||||
",%u", dos_part + 1);
|
||||
ptr += grub_strlen (ptr);
|
||||
|
||||
if (grub_install_bsd_part >= 0)
|
||||
if (bsd_part != 0xff)
|
||||
grub_snprintf (ptr, DEV_SIZE - (ptr - *device), ",%u",
|
||||
grub_install_bsd_part + 1);
|
||||
bsd_part + 1);
|
||||
ptr += grub_strlen (ptr);
|
||||
*ptr = 0;
|
||||
}
|
||||
|
|
|
@ -82,8 +82,6 @@ LOCAL(cont):
|
|||
movsb
|
||||
#endif
|
||||
|
||||
movl %eax, %esi
|
||||
|
||||
/* clean out the bss */
|
||||
movl $BSS_START_SYMBOL, %edi
|
||||
|
||||
|
@ -97,9 +95,7 @@ LOCAL(cont):
|
|||
rep
|
||||
stosb
|
||||
|
||||
movl %esi, EXT_C(grub_install_dos_part)
|
||||
movb %dl, EXT_C(grub_boot_drive)
|
||||
movl %ebx, EXT_C(grub_install_bsd_part)
|
||||
movl %edx, EXT_C(grub_boot_device)
|
||||
|
||||
/*
|
||||
* Call the start of main body of C code.
|
||||
|
@ -182,9 +178,5 @@ FUNCTION(grub_pxe_call)
|
|||
#include "../int.S"
|
||||
|
||||
.bss
|
||||
VARIABLE(grub_boot_drive)
|
||||
.byte 0
|
||||
VARIABLE(grub_install_dos_part)
|
||||
.long 0xFFFFFFFF
|
||||
VARIABLE(grub_install_bsd_part)
|
||||
.long 0xFFFFFFFF
|
||||
VARIABLE(grub_boot_device)
|
||||
.long 0
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue