Interrupt wrapping and code simplifications.
* Makefile.util.def (grub-mkrescue): Use x86 tg instead of x86_noieee1275 which are functionaly equivalent in this case. (grub-install): Make source on each platform explicit. Enable on all noemu. * gentpl.py (x86_efi_pc): Removed group. (x86_noefi): Likewise. (i386_noefi): Likewise. (x86_noieee1275): Likewise. (i386_noieee1275): Likewise. (i386_noefi_noieee1275): Likewise. (i386_pc_qemu_coreboot): Likewise. (i386_coreboot_multiboot): Likewise. (i386_pc_coreboot_multiboot_qemu): Likewise. (x86_noefi_mips): Likewise. (noieee1275): Likewise. (ieee1275_mips): Likewise. (noemu_noieee1275): Likewise. (cmos): New group. (usb): Likewise. (videoinkernel): Likewise. (videomodules): Likewise. * grub-core/Makefile.am (KERNEL_HEADER_FILES): Remove include/grub/elf.h, include/grub/elfload.h, include/grub/net.h, include/grub/reader.h, include/grub/symbol.h, include/grub/types.h, include/grub/loader.h, include/grub/msdos_partition.h, include/grub/machine/biosdisk.h, include/grub/machine/boot.h, include/grub/machine/console.h, include/grub/machine/vga.h, include/grub/machine/vbe.h, include/grub/machine/init.h, include/grub/machine/kernel.h, include/grub/cpu/time.h, include/grub/cpu/types.h, include/grub/gzio.h and include/grub/menu.h (KERNEL_HEADER_FILES) [i386-pc]: Add include/grub/machine/int.h. (KERNEL_HEADER_FILES) [i386-ieee1275]: Add include/grub/i386/pit.h * grub-core/Makefile.core.def (kernel): Explicit the source for startup. Explicit the platforms using kern/generic/rtc_get_time_ms.c. Split ieee1275_mips. Remove kern/i386/halt.c. Remove kern/i386/misc.S. Enable kern/i386/pit.c on all x86. Remove kern/i386/ieee1275/init.c. Use videoinkernel tag. (usb): Enable on all usb. (usbserial_common): Likewise. (usbserial_pl2303): Likewise. (usbserial_ftdi): Likewise. (uhci): Enable on all x86. (ohci): Enable on all pci. (cmostest): Enable on all CMOS. (acpi): Include commands/acpi.c on all platforms. (halt): Add relevant lib/*/halt.c. (hdparm): Enable on all pci. (lspci): Likewise. (usbtest): Enable on all usb. (ata): Enable on all pci. (ata_pthru): Likewise. (usbms): Enable on all usb. (usb_keyboard): Likewise. (font): Use tag videomodules. (bufio): Likewise. (datetime): Use tag cmos. Enable on all noemu. (mmap): Use tags common and x86. (gfxterm): Use tag videomodules. (bitmap): Likewise. (bitmap_scale): Likewise. (video_fb): Likewise. (video): Likewise. * grub-core/bus/usb/ohci.c (grub_ohci_td): Make link_td a pointer and adjust padding accordingly. All users updated. (grub_ohci_transaction): Fix bad format specification. (GRUB_MOD_INIT): Add asserts for struct size. * grub-core/bus/usb/uhci.c (grub_uhci_pci_iter): Add explicit casts. (grub_alloc_td): Likewise. (grub_free_queue): Likewise. (grub_uhci_transfer): Likewise. (grub_uhci_transaction): Fix bad format specification. * grub-core/bus/usb/usbtrans.c (grub_usb_control_msg): Likewise. (grub_usb_bulk_readwrite): Likewise. * grub-core/kern/i386/misc.S (grub_stop): Moved from here ... * grub-core/commands/i386/pc/halt.c (stop): ...here. Transformed into C. Made static. * grub-core/lib/i386/halt.c (stop): ... and here. Transformed into C. Made static. * grub-core/kern/i386/pc/startup.S (grub_halt): Moved from here ... * grub-core/commands/i386/pc/halt.c (grub_halt): ...here. Transformed into C. * grub-core/kern/i386/pc/startup.S (grub_biosdisk_rw_int13_extensions): Moved from here ... * grub-core/disk/i386/pc/biosdisk.c (grub_biosdisk_rw_int13_extensions): ... here. Transformed into C. Made static. * grub-core/kern/i386/pc/startup.S (grub_biosdisk_rw_standard): Moved from here ... * grub-core/disk/i386/pc/biosdisk.c (grub_biosdisk_rw_standard): ... here. Transformed into C. Made static. * grub-core/kern/i386/pc/startup.S (grub_biosdisk_check_int13_extensions): Moved from here ... * grub-core/disk/i386/pc/biosdisk.c (grub_biosdisk_check_int13_extensions): ... here. Transformed into C. Made static. * grub-core/kern/i386/pc/startup.S (grub_biosdisk_get_cdinfo_int13_extensions): Moved from here ... * grub-core/disk/i386/pc/biosdisk.c (grub_biosdisk_get_cdinfo_int13_extensions): ... here. Transformed into C. Made static. * grub-core/kern/i386/pc/startup.S (grub_biosdisk_get_diskinfo_int13_extensions): Moved from here ... * grub-core/disk/i386/pc/biosdisk.c (grub_biosdisk_get_diskinfo_int13_extensions): ... here. Transformed into C. Made static. * grub-core/kern/i386/pc/startup.S (grub_biosdisk_get_diskinfo_standard): Moved from here ... * grub-core/disk/i386/pc/biosdisk.c (grub_biosdisk_get_diskinfo_standard): ... here. Transformed into C. Made static. * grub-core/kern/i386/pc/startup.S (grub_biosdisk_get_num_floppies): Moved from here ... * grub-core/disk/i386/pc/biosdisk.c (grub_biosdisk_get_num_floppies): ... here. Transformed into C. Made static. * grub-core/disk/i386/pc/biosdisk.c (grub_biosdisk_get_diskinfo_real): New function. * grub-core/kern/i386/pc/startup.S (grub_pxe_scan): Moved from here ... * grub-core/fs/i386/pc/pxe.c (grub_pxe_scan): ... here. Transformed into C. Made static. * grub-core/kern/i386/pc/startup.S (grub_rm_entry): Moved from here ... * grub-core/fs/i386/pc/pxe.c (grub_rm_entry): ... here. Transformed into C. Made static. * grub-core/kern/i386/ieee1275/init.c: Removed. * grub-core/kern/i386/misc.S: Likewise. * grub-core/kern/i386/pc/startup.S (grub_get_memsize): Splitted from here ... * grub-core/kern/i386/pc/init.c (grub_get_conv_memsize): ... here. Transformed into C. Made static. All users updated. * grub-core/kern/i386/pc/mmap.c (grub_get_ext_memsize): ... and here. Transformed into C. Made static. All users updated. * grub-core/kern/i386/pc/startup.S (grub_get_eisa_mmap): Moved from here... * grub-core/kern/i386/pc/mmap.c (grub_get_eisa_mmap): ... here. Transformed into C. Made static. All users updated. * grub-core/kern/i386/pc/startup.S (grub_get_mmap_entry): Moved from here... * grub-core/kern/i386/pc/mmap.c (grub_get_mmap_entry): ... here. Transformed into C. Made static. All users updated. * grub-core/kern/i386/pc/startup.S (grub_stop_floppy): Removed (replaced by C version). * grub-core/kern/i386/pc/startup.S (grub_vga_set_mode): Moved from here... * grub-core/video/i386/pc/vga.c (grub_vga_set_mode): ...here. Transformed into C. Made static. * grub-core/kern/i386/pc/startup.S (grub_vbe_bios_get_controller_info): Moved from here... * grub-core/video/i386/pc/vbe.c (grub_vbe_bios_get_controller_info): ... here. Transformed into C. * grub-core/kern/i386/pc/startup.S (grub_vbe_bios_get_mode_info): Moved from here... * grub-core/video/i386/pc/vbe.c (grub_vbe_bios_get_mode_info): ... here. Transformed into C. * grub-core/kern/i386/pc/startup.S (grub_vbe_bios_set_mode): Moved from here... * grub-core/video/i386/pc/vbe.c (grub_vbe_bios_set_mode): ... here. Transformed into C. Made static. * grub-core/kern/i386/pc/startup.S (grub_vbe_bios_get_mode): Moved from here... * grub-core/video/i386/pc/vbe.c (grub_vbe_bios_get_mode): ... here. Transformed into C. * grub-core/kern/i386/pc/startup.S (grub_vbe_bios_getset_dac_palette_width):Moved from here... * grub-core/video/i386/pc/vbe.c (grub_vbe_bios_getset_dac_palette_width):... here. Transformed into C. * grub-core/kern/i386/pc/startup.S (grub_vbe_bios_set_memory_window): Moved from here... * grub-core/video/i386/pc/vbe.c (grub_vbe_bios_set_memory_window): ... here. Transformed into C. * grub-core/kern/i386/pc/startup.S (grub_vbe_bios_get_memory_window): Moved from here... * grub-core/video/i386/pc/vbe.c (grub_vbe_bios_get_memory_window): ... here. Transformed into C. * grub-core/kern/i386/pc/startup.S (grub_vbe_bios_set_scanline_length): Moved from here... * grub-core/video/i386/pc/vbe.c (grub_vbe_bios_set_scanline_length): ... here. Transformed into C. * grub-core/kern/i386/pc/startup.S (grub_vbe_bios_get_scanline_length): Moved from here... * grub-core/video/i386/pc/vbe.c (grub_vbe_bios_get_scanline_length): ... here. Transformed into C. * grub-core/kern/i386/pc/startup.S (grub_vbe_bios_set_display_start): Moved from here... * grub-core/video/i386/pc/vbe.c (grub_vbe_bios_set_display_start): ... here. Transformed into C. Made static. * grub-core/kern/i386/pc/startup.S (grub_vbe_bios_get_display_start): Moved from here... * grub-core/video/i386/pc/vbe.c (grub_vbe_bios_get_display_start): ... here. Transformed into C. Made static. * grub-core/kern/i386/pc/startup.S (grub_vbe_bios_set_palette_data): Moved from here... * grub-core/video/i386/pc/vbe.c (grub_vbe_bios_set_palette_data): ... here. Transformed into C. Made static. * grub-core/kern/i386/pc/startup.S (grub_pxe_call): Receive pxe_rm_entry as third argument. (grub_bios_interrupt): New function. * grub-core/kern/i386/qemu/mmap.c: Remove useless include. * grub-core/kern/i386/qemu/startup.S (codestart): Do cli;hlt instead of calling grub_stop. * grub-core/kern/efi/efi.c (grub_halt): Moved from here ... * grub-core/lib/efi/halt.c (grub_halt): ...here. * grub-core/kern/emu/main.c (grub_halt): Moved from here ... * grub-core/lib/emu/halt.c (grub_halt): ... here. * grub-core/lib/i386/halt.c: Moved from here ... * grub-core/lib/i386/halt.c: ... here. * grub-core/kern/ieee1275/openfw.c (grub_halt): Moved from here ... * grub-core/lib/ieee1275/halt.c (grub_halt): ... here. * grub-core/loader/i386/pc/linux.c (grub_linux16_boot): Call grub_stop_floppy. * grub-core/loader/i386/xnu.c (guessfsb) [IEEE1275]: Enable. * include/grub/i386/coreboot/init.h: Removed. * include/grub/i386/multiboot/init.h: Likewise. * include/grub/i386/pc/biosdisk.h: Removed all function prototypes. * include/grub/i386/pc/init.h: Likewise except grub_gate_a20. * include/grub/i386/pc/int.h: New file. * include/grub/i386/pc/pxe.h (GRUB_PXE_SIGNATURE): New definition. (grub_pxe_scan): Removed. (grub_pxe_call): Update prototype. * include/grub/i386/pc/vbe.h: Removed EXPORT_FUNC and useless prototypes. * include/grub/i386/pc/vga.h (grub_vga_set_mode): Removed. * include/grub/i386/qemu/init.h: Removed. * include/grub/mips/yeeloong/kernel.h (grub_reboot): Add missing noreturn. (grub_halt): Likewise. * include/grub/misc.h (grub_halt): Removed EXPORT_FUNC. (grub_reboot): Likewise. * grub-core/kern/i386/coreboot/init.c (grub_stop_floppy): Moved from here... * include/grub/i386/floppy.h (grub_stop_floppy): ...here. Inlined. * grub-core/kern/i386/pc/startup.S (grub_hard_stop): Removed.
This commit is contained in:
commit
21ed554bb0
39 changed files with 1284 additions and 1501 deletions
|
@ -174,15 +174,6 @@ grub_reboot (void)
|
|||
}
|
||||
#endif
|
||||
|
||||
void
|
||||
grub_halt (void)
|
||||
{
|
||||
grub_efi_fini ();
|
||||
efi_call_4 (grub_efi_system_table->runtime_services->reset_system,
|
||||
GRUB_EFI_RESET_SHUTDOWN, GRUB_EFI_SUCCESS, 0, NULL);
|
||||
for (;;) ;
|
||||
}
|
||||
|
||||
grub_err_t
|
||||
grub_efi_set_virtual_address_map (grub_efi_uintn_t memory_map_size,
|
||||
grub_efi_uintn_t descriptor_size,
|
||||
|
|
|
@ -66,16 +66,6 @@ grub_reboot (void)
|
|||
longjmp (main_env, 1);
|
||||
}
|
||||
|
||||
void
|
||||
grub_halt (
|
||||
#ifdef GRUB_MACHINE_PCBIOS
|
||||
int no_apm __attribute__ ((unused))
|
||||
#endif
|
||||
)
|
||||
{
|
||||
grub_reboot ();
|
||||
}
|
||||
|
||||
void
|
||||
grub_machine_init (void)
|
||||
{
|
||||
|
|
|
@ -19,7 +19,6 @@
|
|||
#include <grub/kernel.h>
|
||||
#include <grub/mm.h>
|
||||
#include <grub/machine/time.h>
|
||||
#include <grub/machine/init.h>
|
||||
#include <grub/machine/memory.h>
|
||||
#include <grub/machine/console.h>
|
||||
#include <grub/types.h>
|
||||
|
@ -32,13 +31,12 @@
|
|||
#include <grub/time.h>
|
||||
#include <grub/symbol.h>
|
||||
#include <grub/cpu/io.h>
|
||||
#include <grub/cpu/floppy.h>
|
||||
#include <grub/cpu/tsc.h>
|
||||
#ifdef GRUB_MACHINE_QEMU
|
||||
#include <grub/machine/kernel.h>
|
||||
#endif
|
||||
|
||||
#define GRUB_FLOPPY_REG_DIGITAL_OUTPUT 0x3f2
|
||||
|
||||
extern char _start[];
|
||||
extern char _end[];
|
||||
|
||||
|
@ -48,14 +46,6 @@ grub_get_rtc (void)
|
|||
grub_fatal ("grub_get_rtc() is not implemented.\n");
|
||||
}
|
||||
|
||||
/* Stop the floppy drive from spinning, so that other software is
|
||||
jumped to with a known state. */
|
||||
void
|
||||
grub_stop_floppy (void)
|
||||
{
|
||||
grub_outb (0, GRUB_FLOPPY_REG_DIGITAL_OUTPUT);
|
||||
}
|
||||
|
||||
void
|
||||
grub_exit (void)
|
||||
{
|
||||
|
|
|
@ -1,42 +0,0 @@
|
|||
/*
|
||||
* GRUB -- GRand Unified Bootloader
|
||||
* Copyright (C) 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
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* GRUB 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 GRUB. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include <grub/cpu/io.h>
|
||||
#include <grub/machine/init.h>
|
||||
#include <grub/misc.h>
|
||||
|
||||
const char bochs_shutdown[] = "Shutdown";
|
||||
|
||||
void
|
||||
grub_halt (void)
|
||||
{
|
||||
unsigned int i;
|
||||
|
||||
/* Disable interrupts. */
|
||||
__asm__ __volatile__ ("cli");
|
||||
|
||||
/* Bochs, QEMU, etc. */
|
||||
for (i = 0; i < sizeof (bochs_shutdown) - 1; i++)
|
||||
grub_outb (bochs_shutdown[i], 0x8900);
|
||||
|
||||
grub_printf ("GRUB doesn't know how to halt this machine yet!\n");
|
||||
|
||||
/* In order to return we'd have to check what the previous status of IF
|
||||
flag was. But user most likely doesn't want to return anyway ... */
|
||||
grub_stop ();
|
||||
}
|
|
@ -1,28 +0,0 @@
|
|||
/* init.c -- Initialize GRUB on Open Firmware. */
|
||||
/*
|
||||
* GRUB -- GRand Unified Bootloader
|
||||
* Copyright (C) 2003,2004,2005,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
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* GRUB 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 GRUB. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include <grub/types.h>
|
||||
#include <grub/cache.h>
|
||||
|
||||
void grub_stop_floppy (void);
|
||||
|
||||
void
|
||||
grub_stop_floppy (void)
|
||||
{
|
||||
}
|
|
@ -1,29 +0,0 @@
|
|||
/*
|
||||
* GRUB -- GRand Unified Bootloader
|
||||
* Copyright (C) 1999,2000,2001,2002,2003,2005,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
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* GRUB 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 GRUB. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include <grub/symbol.h>
|
||||
|
||||
.text
|
||||
/*
|
||||
* This call is special... it never returns... in fact it should simply
|
||||
* hang at this point!
|
||||
*/
|
||||
FUNCTION(grub_stop)
|
||||
cli
|
||||
1: hlt
|
||||
jmp 1b
|
|
@ -23,6 +23,7 @@
|
|||
#include <grub/machine/memory.h>
|
||||
#include <grub/machine/console.h>
|
||||
#include <grub/machine/kernel.h>
|
||||
#include <grub/machine/int.h>
|
||||
#include <grub/types.h>
|
||||
#include <grub/err.h>
|
||||
#include <grub/dl.h>
|
||||
|
@ -139,6 +140,22 @@ compact_mem_regions (void)
|
|||
}
|
||||
}
|
||||
|
||||
/*
|
||||
*
|
||||
* grub_get_conv_memsize(i) : return the conventional memory size in KB.
|
||||
* BIOS call "INT 12H" to get conventional memory size
|
||||
* The return value in AX.
|
||||
*/
|
||||
static inline grub_uint16_t
|
||||
grub_get_conv_memsize (void)
|
||||
{
|
||||
struct grub_bios_int_registers regs;
|
||||
|
||||
regs.flags = GRUB_CPU_INT_FLAGS_DEFAULT;
|
||||
grub_bios_interrupt (0x12, ®s);
|
||||
return regs.eax & 0xffff;
|
||||
}
|
||||
|
||||
void
|
||||
grub_machine_init (void)
|
||||
{
|
||||
|
@ -148,7 +165,7 @@ grub_machine_init (void)
|
|||
/* Initialize the console as early as possible. */
|
||||
grub_console_init ();
|
||||
|
||||
grub_lower_mem = grub_get_memsize (0) << 10;
|
||||
grub_lower_mem = grub_get_conv_memsize () << 10;
|
||||
|
||||
/* Sanity check. */
|
||||
if (grub_lower_mem < GRUB_MEMORY_MACHINE_RESERVED_END)
|
||||
|
|
|
@ -17,11 +17,98 @@
|
|||
*/
|
||||
|
||||
#include <grub/machine/init.h>
|
||||
#include <grub/machine/int.h>
|
||||
#include <grub/machine/memory.h>
|
||||
#include <grub/err.h>
|
||||
#include <grub/types.h>
|
||||
#include <grub/misc.h>
|
||||
|
||||
/*
|
||||
* grub_get_ext_memsize() : return the extended memory size in KB.
|
||||
* BIOS call "INT 15H, AH=88H" to get extended memory size
|
||||
* The return value in AX.
|
||||
*
|
||||
*/
|
||||
static inline grub_uint16_t
|
||||
grub_get_ext_memsize (void)
|
||||
{
|
||||
struct grub_bios_int_registers regs;
|
||||
|
||||
regs.eax = 0x8800;
|
||||
regs.flags = GRUB_CPU_INT_FLAGS_DEFAULT;
|
||||
grub_bios_interrupt (0x15, ®s);
|
||||
return regs.eax & 0xffff;
|
||||
}
|
||||
|
||||
/* Get a packed EISA memory map. Lower 16 bits are between 1MB and 16MB
|
||||
in 1KB parts, and upper 16 bits are above 16MB in 64KB parts. If error, return zero.
|
||||
BIOS call "INT 15H, AH=E801H" to get EISA memory map,
|
||||
AX = memory between 1M and 16M in 1K parts.
|
||||
BX = memory above 16M in 64K parts.
|
||||
*/
|
||||
|
||||
static inline grub_uint32_t
|
||||
grub_get_eisa_mmap (void)
|
||||
{
|
||||
struct grub_bios_int_registers regs;
|
||||
|
||||
regs.flags = GRUB_CPU_INT_FLAGS_DEFAULT;
|
||||
regs.eax = 0xe801;
|
||||
grub_bios_interrupt (0x15, ®s);
|
||||
|
||||
if ((regs.eax & 0xff00) == 0x8600)
|
||||
return 0;
|
||||
|
||||
return (regs.eax & 0xffff) | (regs.ebx << 16);
|
||||
}
|
||||
|
||||
/*
|
||||
*
|
||||
* grub_get_mmap_entry(addr, cont) : address and old continuation value (zero to
|
||||
* start), for the Query System Address Map BIOS call.
|
||||
*
|
||||
* Sets the first 4-byte int value of "addr" to the size returned by
|
||||
* the call. If the call fails, sets it to zero.
|
||||
*
|
||||
* Returns: new (non-zero) continuation value, 0 if done.
|
||||
*/
|
||||
/* Get a memory map entry. Return next continuation value. Zero means
|
||||
the end. */
|
||||
static grub_uint32_t
|
||||
grub_get_mmap_entry (struct grub_machine_mmap_entry *entry,
|
||||
grub_uint32_t cont)
|
||||
{
|
||||
struct grub_bios_int_registers regs;
|
||||
|
||||
regs.flags = GRUB_CPU_INT_FLAGS_DEFAULT;
|
||||
|
||||
/* place address (+4) in ES:DI */
|
||||
regs.es = ((grub_addr_t) &entry->addr) >> 4;
|
||||
regs.edi = ((grub_addr_t) &entry->addr) & 0xf;
|
||||
|
||||
/* set continuation value */
|
||||
regs.ebx = cont;
|
||||
|
||||
/* set default maximum buffer size */
|
||||
regs.ecx = sizeof (*entry) - sizeof (entry->size);
|
||||
|
||||
/* set EDX to 'SMAP' */
|
||||
regs.edx = 0x534d4150;
|
||||
|
||||
regs.eax = 0xe820;
|
||||
grub_bios_interrupt (0x15, ®s);
|
||||
|
||||
/* write length of buffer (zero if error) into ADDR */
|
||||
if ((regs.flags & GRUB_CPU_INT_FLAGS_CARRY) || regs.eax != 0x534d4150
|
||||
|| regs.ecx < 0x14 || regs.ecx > 0x400)
|
||||
entry->size = 0;
|
||||
else
|
||||
entry->size = regs.ecx;
|
||||
|
||||
/* return the continuation value */
|
||||
return regs.ebx;
|
||||
}
|
||||
|
||||
grub_err_t
|
||||
grub_machine_mmap_iterate (int NESTED_FUNC_ATTR (*hook) (grub_uint64_t, grub_uint64_t, grub_uint32_t))
|
||||
{
|
||||
|
@ -61,7 +148,7 @@ grub_machine_mmap_iterate (int NESTED_FUNC_ATTR (*hook) (grub_uint64_t, grub_uin
|
|||
hook (0x1000000, eisa_mmap & ~0xFFFF, GRUB_MACHINE_MEMORY_AVAILABLE);
|
||||
}
|
||||
else
|
||||
hook (0x100000, grub_get_memsize (1) << 10, GRUB_MACHINE_MEMORY_AVAILABLE);
|
||||
hook (0x100000, grub_get_ext_memsize () << 10, GRUB_MACHINE_MEMORY_AVAILABLE);
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -16,7 +16,6 @@
|
|||
* along with GRUB. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include <grub/machine/init.h>
|
||||
#include <grub/machine/memory.h>
|
||||
#include <grub/machine/boot.h>
|
||||
#include <grub/types.h>
|
||||
|
|
|
@ -94,6 +94,9 @@ codestart:
|
|||
call EXT_C(grub_main)
|
||||
|
||||
/* This should never happen. */
|
||||
jmp EXT_C(grub_stop)
|
||||
cli
|
||||
1:
|
||||
hlt
|
||||
jmp 1b
|
||||
|
||||
#include "../realmode.S"
|
||||
|
|
|
@ -423,14 +423,3 @@ grub_reboot (void)
|
|||
for (;;) ;
|
||||
}
|
||||
#endif
|
||||
|
||||
void
|
||||
grub_halt (void)
|
||||
{
|
||||
/* Not standardized. We try three known commands. */
|
||||
|
||||
grub_ieee1275_interpret ("shut-down", 0);
|
||||
grub_ieee1275_interpret ("power-off", 0);
|
||||
grub_ieee1275_interpret ("poweroff", 0);
|
||||
for (;;) ;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue