[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[2074] 2009-04-10 Bean <address@hidden>
From: |
Bean |
Subject: |
[2074] 2009-04-10 Bean <address@hidden> |
Date: |
Fri, 10 Apr 2009 15:33:34 +0000 |
Revision: 2074
http://svn.sv.gnu.org/viewvc/?view=rev&root=grub&revision=2074
Author: bean
Date: 2009-04-10 15:33:34 +0000 (Fri, 10 Apr 2009)
Log Message:
-----------
2009-04-10 Bean <address@hidden>
* include/grub/efi/api.h (grub_efi_configuration_table): Add packed
attribute, otherwise the size would be wrong for i386 platform.
* include/grub/pci.h (grub_pci_read_word): New inline function.
(grub_pci_read_byte): Likewise.
(grub_pci_write): Likewise.
(grub_pci_write_word): Likewise.
(grub_pci_write_byte): Likewise.
* include/grub/pci.h (grub_pci_iteratefunc_t): Add NESTED_FUNC_ATTR.
* loader/i386/efi/linux.c (fake_bios_data): Moved to loadbios module.
(find_framebuf): Scan pci to locate the frame buffer address.
* commands/efi/fixvideo.c: New file.
* commands/efi/loadbios.c: Likewise.
* commands/memrw.c: Likewise.
* util/grub-dumpbios.in: Likewise.
* conf/common.rmk (grub-dumpbios): New utility.
(pkglib_MODULES): New module memrw.mod.
(memrw_mod_SOURCE): New macro.
(memrw_mod_CFLAGS): Likewise.
(memrw_mod_LDFLAGS): Likewise.
* conf/i386-efi.rmk (pkglig_MODULES): New module loadbios.mod and
fixvideo.mod.
(loadbios_mod_SOURCE): New macro.
(loadbios_mod_CFLAGS): Likewise.
(loadbios_mod_LDFLAGS): Likewise.
(fixvideo_mod_SOURCE): Likewise.
(fixvideo_mod_CFLAGS): Likewise.
(fixvideo_mod_LDFLAGS): Likewise.
* conf/x86_64.rmk (pkglig_MODULES): New module loadbios.mod and
fixvideo.mod.
(loadbios_mod_SOURCE): New macro.
(loadbios_mod_CFLAGS): Likewise.
(loadbios_mod_LDFLAGS): Likewise.
(fixvideo_mod_SOURCE): Likewise.
(fixvideo_mod_CFLAGS): Likewise.
(fixvideo_mod_LDFLAGS): Likewise.
Modified Paths:
--------------
trunk/grub2/ChangeLog
trunk/grub2/DISTLIST
trunk/grub2/conf/common.mk
trunk/grub2/conf/common.rmk
trunk/grub2/conf/i386-efi.mk
trunk/grub2/conf/i386-efi.rmk
trunk/grub2/conf/x86_64-efi.mk
trunk/grub2/conf/x86_64-efi.rmk
trunk/grub2/include/grub/efi/api.h
trunk/grub2/include/grub/i386/pci.h
trunk/grub2/include/grub/pci.h
trunk/grub2/loader/i386/efi/linux.c
Added Paths:
-----------
trunk/grub2/commands/efi/
trunk/grub2/commands/efi/fixvideo.c
trunk/grub2/commands/efi/loadbios.c
trunk/grub2/commands/memrw.c
trunk/grub2/util/grub-dumpbios.in
Modified: trunk/grub2/ChangeLog
===================================================================
--- trunk/grub2/ChangeLog 2009-04-08 15:03:50 UTC (rev 2073)
+++ trunk/grub2/ChangeLog 2009-04-10 15:33:34 UTC (rev 2074)
@@ -1,3 +1,51 @@
+2009-04-10 Bean <address@hidden>
+
+ * include/grub/efi/api.h (grub_efi_configuration_table): Add packed
+ attribute, otherwise the size would be wrong for i386 platform.
+
+ * include/grub/pci.h (grub_pci_read_word): New inline function.
+ (grub_pci_read_byte): Likewise.
+ (grub_pci_write): Likewise.
+ (grub_pci_write_word): Likewise.
+ (grub_pci_write_byte): Likewise.
+
+ * include/grub/pci.h (grub_pci_iteratefunc_t): Add NESTED_FUNC_ATTR.
+
+ * loader/i386/efi/linux.c (fake_bios_data): Moved to loadbios module.
+ (find_framebuf): Scan pci to locate the frame buffer address.
+
+ * commands/efi/fixvideo.c: New file.
+
+ * commands/efi/loadbios.c: Likewise.
+
+ * commands/memrw.c: Likewise.
+
+ * util/grub-dumpbios.in: Likewise.
+
+ * conf/common.rmk (grub-dumpbios): New utility.
+ (pkglib_MODULES): New module memrw.mod.
+ (memrw_mod_SOURCE): New macro.
+ (memrw_mod_CFLAGS): Likewise.
+ (memrw_mod_LDFLAGS): Likewise.
+
+ * conf/i386-efi.rmk (pkglig_MODULES): New module loadbios.mod and
+ fixvideo.mod.
+ (loadbios_mod_SOURCE): New macro.
+ (loadbios_mod_CFLAGS): Likewise.
+ (loadbios_mod_LDFLAGS): Likewise.
+ (fixvideo_mod_SOURCE): Likewise.
+ (fixvideo_mod_CFLAGS): Likewise.
+ (fixvideo_mod_LDFLAGS): Likewise.
+
+ * conf/x86_64.rmk (pkglig_MODULES): New module loadbios.mod and
+ fixvideo.mod.
+ (loadbios_mod_SOURCE): New macro.
+ (loadbios_mod_CFLAGS): Likewise.
+ (loadbios_mod_LDFLAGS): Likewise.
+ (fixvideo_mod_SOURCE): Likewise.
+ (fixvideo_mod_CFLAGS): Likewise.
+ (fixvideo_mod_LDFLAGS): Likewise.
+
2009-04-08 Felix Zielcke <address@hidden>
* disk/lvm.c (grub_lvm_scan_device): Add a missing NULL check.
Modified: trunk/grub2/DISTLIST
===================================================================
--- trunk/grub2/DISTLIST 2009-04-08 15:03:50 UTC (rev 2073)
+++ trunk/grub2/DISTLIST 2009-04-10 15:33:34 UTC (rev 2074)
@@ -58,6 +58,7 @@
commands/ls.c
commands/lsmmap.c
commands/lspci.c
+commands/memrw.c
commands/minicmd.c
commands/parttool.c
commands/read.c
@@ -67,6 +68,8 @@
commands/test.c
commands/usbtest.c
commands/videotest.c
+commands/efi/fixvideo.c
+commands/efi/loadbios.c
commands/i386/cpuid.c
commands/i386/pc/halt.c
commands/i386/pc/play.c
@@ -446,6 +449,7 @@
term/ieee1275/ofconsole.c
util/console.c
util/getroot.c
+util/grub-dumpbios.in
util/grub-editenv.c
util/grub-emu.c
util/grub-fstest.c
Added: trunk/grub2/commands/efi/fixvideo.c
===================================================================
--- trunk/grub2/commands/efi/fixvideo.c (rev 0)
+++ trunk/grub2/commands/efi/fixvideo.c 2009-04-10 15:33:34 UTC (rev 2074)
@@ -0,0 +1,110 @@
+/* fixvideo.c - fix video problem in efi */
+/*
+ * GRUB -- GRand Unified Bootloader
+ * Copyright (C) 2009 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/dl.h>
+#include <grub/misc.h>
+#include <grub/file.h>
+#include <grub/pci.h>
+#include <grub/command.h>
+
+static struct grub_video_patch
+{
+ const char *name;
+ grub_uint32_t pci_id;
+ grub_uint32_t mmio_bar;
+ grub_uint32_t mmio_reg;
+ grub_uint32_t mmio_old;
+} video_patches[] =
+ {
+ {"Intel 945GM", 0x27a28086, 0, 0x71184, 0x1000000}, /* DSPBBASE */
+ {"Intel 965GM", 0x2a028086, 0, 0x7119C, 0x1000000}, /* DSPBSURF */
+ {0, 0, 0, 0, 0}
+ };
+
+static int NESTED_FUNC_ATTR
+scan_card (int bus, int dev, int func, grub_pci_id_t pciid)
+{
+ grub_pci_address_t addr;
+
+ addr = grub_pci_make_address (bus, dev, func, 2);
+ if (grub_pci_read_byte (addr + 3) == 0x3)
+ {
+ struct grub_video_patch *p = video_patches;
+
+ while (p->name)
+ {
+ if (p->pci_id == pciid)
+ {
+ grub_target_addr_t base;
+
+ grub_printf ("Found graphic card: %s\n", p->name);
+ addr += 8 + p->mmio_bar * 4;
+ base = grub_pci_read (addr);
+ if ((! base) || (base & GRUB_PCI_ADDR_SPACE_IO) ||
+ (base & GRUB_PCI_ADDR_MEM_PREFETCH))
+ grub_printf ("Invalid MMIO bar %d\n", p->mmio_bar);
+ else
+ {
+ base &= GRUB_PCI_ADDR_MEM_MASK;
+ base += p->mmio_reg;
+
+ if (*((volatile grub_uint32_t *) base) != p->mmio_old)
+ grub_printf ("Old value don't match\n");
+ else
+ {
+ *((volatile grub_uint32_t *) base) = 0;
+ if (*((volatile grub_uint32_t *) base))
+ grub_printf ("Set MMIO fails\n");
+ }
+ }
+
+ return 1;
+ }
+ p++;
+ }
+
+ grub_printf ("Unknown graphic card: %x\n", pciid);
+ }
+
+ return 0;
+}
+
+static grub_err_t
+grub_cmd_fixvideo (grub_command_t cmd __attribute__ ((unused)),
+ int argc __attribute__ ((unused)),
+ char *argv[] __attribute__ ((unused)))
+{
+ grub_pci_iterate (scan_card);
+ return 0;
+}
+
+static grub_command_t cmd_fixvideo;
+
+GRUB_MOD_INIT(fixvideo)
+{
+ (void) mod; /* To stop warning. */
+ cmd_fixvideo = grub_register_command ("fix_video", grub_cmd_fixvideo,
+ 0, "Fix video problem.");
+
+}
+
+GRUB_MOD_FINI(fixvideo)
+{
+ grub_unregister_command (cmd_fixvideo);
+}
Added: trunk/grub2/commands/efi/loadbios.c
===================================================================
--- trunk/grub2/commands/efi/loadbios.c (rev 0)
+++ trunk/grub2/commands/efi/loadbios.c 2009-04-10 15:33:34 UTC (rev 2074)
@@ -0,0 +1,212 @@
+/* loadbios.c - command to load a bios dump */
+/*
+ * GRUB -- GRand Unified Bootloader
+ * Copyright (C) 2009 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/dl.h>
+#include <grub/misc.h>
+#include <grub/file.h>
+#include <grub/efi/efi.h>
+#include <grub/pci.h>
+#include <grub/command.h>
+
+static grub_efi_guid_t acpi_guid = GRUB_EFI_ACPI_TABLE_GUID;
+static grub_efi_guid_t acpi2_guid = GRUB_EFI_ACPI_20_TABLE_GUID;
+static grub_efi_guid_t smbios_guid = GRUB_EFI_SMBIOS_TABLE_GUID;
+
+#define EBDA_SEG_ADDR 0x40e
+#define LOW_MEM_ADDR 0x413
+#define FAKE_EBDA_SEG 0x9fc0
+
+#define BLANK_MEM 0xffffffff
+#define VBIOS_ADDR 0xc0000
+#define SBIOS_ADDR 0xf0000
+
+static int
+enable_rom_area (void)
+{
+ grub_pci_address_t addr;
+ grub_uint32_t *rom_ptr;
+
+ rom_ptr = (grub_uint32_t *) VBIOS_ADDR;
+ if (*rom_ptr != BLANK_MEM)
+ {
+ grub_printf ("ROM image present.\n");
+ return 0;
+ }
+
+ addr = grub_pci_make_address (0, 0, 0, 36);
+ grub_pci_write_byte (addr++, 0x30);
+ grub_pci_write_byte (addr++, 0x33);
+ grub_pci_write_byte (addr++, 0x33);
+ grub_pci_write_byte (addr++, 0x33);
+ grub_pci_write_byte (addr++, 0x33);
+ grub_pci_write_byte (addr++, 0x33);
+ grub_pci_write_byte (addr++, 0x33);
+ grub_pci_write_byte (addr, 0);
+
+ *rom_ptr = 0;
+ if (*rom_ptr != 0)
+ {
+ grub_printf ("Can\'t enable rom area.\n");
+ return 0;
+ }
+
+ return 1;
+}
+
+static void
+lock_rom_area (void)
+{
+ grub_pci_address_t addr;
+
+ addr = grub_pci_make_address (0, 0, 0, 36);
+ grub_pci_write_byte (addr++, 0x10);
+ grub_pci_write_byte (addr++, 0x11);
+ grub_pci_write_byte (addr++, 0x11);
+ grub_pci_write_byte (addr++, 0x11);
+ grub_pci_write_byte (addr, 0x11);
+}
+
+static void
+fake_bios_data (int use_rom)
+{
+ unsigned i;
+ void *acpi, *smbios;
+ grub_uint16_t *ebda_seg_ptr, *low_mem_ptr;
+
+ ebda_seg_ptr = (grub_uint16_t *) EBDA_SEG_ADDR;
+ low_mem_ptr = (grub_uint16_t *) LOW_MEM_ADDR;
+ if ((*ebda_seg_ptr) || (*low_mem_ptr))
+ return;
+
+ acpi = 0;
+ smbios = 0;
+ for (i = 0; i < grub_efi_system_table->num_table_entries; i++)
+ {
+ grub_efi_guid_t *guid =
+ &grub_efi_system_table->configuration_table[i].vendor_guid;
+
+ if (! grub_memcmp (guid, &acpi2_guid, sizeof (grub_efi_guid_t)))
+ {
+ acpi = grub_efi_system_table->configuration_table[i].vendor_table;
+ grub_dprintf ("efi", "ACPI2: %p\n", acpi);
+ }
+ else if (! grub_memcmp (guid, &acpi_guid, sizeof (grub_efi_guid_t)))
+ {
+ void *t;
+
+ t = grub_efi_system_table->configuration_table[i].vendor_table;
+ if (! acpi)
+ acpi = t;
+ grub_dprintf ("efi", "ACPI: %p\n", t);
+ }
+ else if (! grub_memcmp (guid, &smbios_guid, sizeof (grub_efi_guid_t)))
+ {
+ smbios = grub_efi_system_table->configuration_table[i].vendor_table;
+ grub_dprintf ("efi", "SMBIOS: %p\n", smbios);
+ }
+ }
+
+ *ebda_seg_ptr = FAKE_EBDA_SEG;
+ *low_mem_ptr = (FAKE_EBDA_SEG >> 6);
+
+ *((grub_uint16_t *) (FAKE_EBDA_SEG << 4)) = 640 - *low_mem_ptr;
+
+ if (acpi)
+ grub_memcpy ((char *) ((FAKE_EBDA_SEG << 4) + 16), acpi, 1024 - 16);
+
+ if ((use_rom) && (smbios))
+ grub_memcpy ((char *) SBIOS_ADDR, (char *) smbios + 16, 16);
+}
+
+static grub_err_t
+grub_cmd_fakebios (struct grub_command *cmd __attribute__ ((unused)),
+ int argc __attribute__ ((unused)),
+ char *argv[] __attribute__ ((unused)))
+{
+ if (enable_rom_area ())
+ {
+ fake_bios_data (1);
+ lock_rom_area ();
+ }
+ else
+ fake_bios_data (0);
+}
+
+static grub_err_t
+grub_cmd_loadbios (grub_command_t cmd __attribute__ ((unused)),
+ int argc, char *argv[])
+{
+ grub_file_t file;
+ int size;
+
+ if (argc == 0)
+ return grub_error (GRUB_ERR_BAD_ARGUMENT, "No rom image specified");
+
+ if (argc > 1)
+ {
+ file = grub_file_open (argv[1]);
+ if (! file)
+ return grub_errno;
+
+ if (file->size != 4)
+ grub_error (GRUB_ERR_BAD_ARGUMENT, "Invalid int10 dump size");
+ else
+ grub_file_read (file, (char *) 0x40, 4);
+
+ grub_file_close (file);
+ if (grub_errno)
+ return grub_errno;
+ }
+
+ file = grub_file_open (argv[0]);
+ if (! file)
+ return grub_errno;
+
+ size = file->size;
+ if ((size < 0x10000) || (size > 0x40000))
+ grub_error (GRUB_ERR_BAD_ARGUMENT, "Invalid bios dump size");
+ else if (enable_rom_area ())
+ {
+ grub_file_read (file, (char *) VBIOS_ADDR, size);
+ fake_bios_data (size <= 0x40000);
+ lock_rom_area ();
+ }
+
+ grub_file_close (file);
+ return grub_errno;
+}
+
+static grub_command_t cmd_fakebios, cmd_loadbios;
+
+GRUB_MOD_INIT(loadbios)
+{
+ (void) mod; /* To stop warning. */
+ cmd_fakebios = grub_register_command ("fakebios", grub_cmd_fakebios,
+ 0, "fake bios.");
+
+ cmd_loadbios = grub_register_command ("loadbios", grub_cmd_loadbios,
+ "loadbios BIOS_DUMP [INT10_DUMP]",
+ "Load bios dump.");
+}
+
+GRUB_MOD_FINI(loadbios)
+{
+ grub_unregister_command (cmd_fakebios);
+ grub_unregister_command (cmd_loadbios);
+}
Added: trunk/grub2/commands/memrw.c
===================================================================
--- trunk/grub2/commands/memrw.c (rev 0)
+++ trunk/grub2/commands/memrw.c 2009-04-10 15:33:34 UTC (rev 2074)
@@ -0,0 +1,101 @@
+/* memrw.c - command to read / write physical memory */
+/*
+ * GRUB -- GRand Unified Bootloader
+ * Copyright (C) 2009 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/dl.h>
+#include <grub/misc.h>
+#include <grub/command.h>
+
+static grub_command_t cmd_read_byte, cmd_read_word, cmd_read_dword;
+static grub_command_t cmd_write_byte, cmd_write_word, cmd_write_dword;
+
+static grub_err_t
+grub_cmd_read (grub_command_t cmd, int argc, char **argv)
+{
+ grub_target_addr_t addr;
+ grub_uint32_t value;
+
+ if (argc != 1)
+ return grub_error (GRUB_ERR_BAD_ARGUMENT, "Invalid number of arguments");
+
+ addr = grub_strtoul (argv[0], 0, 0);
+ if (cmd->name[5] == 'd')
+ value = *((grub_uint32_t *) addr);
+ else if (cmd->name[5] == 'w')
+ value = *((grub_uint16_t *) addr);
+ else
+ value = *((grub_uint8_t *) addr);
+
+ grub_printf ("0x%x\n", value);
+
+ return 0;
+}
+
+static grub_err_t
+grub_cmd_write (grub_command_t cmd, int argc, char **argv)
+{
+ grub_target_addr_t addr;
+ grub_uint32_t value;
+
+ if (argc != 2)
+ return grub_error (GRUB_ERR_BAD_ARGUMENT, "Invalid number of arguments");
+
+ addr = grub_strtoul (argv[0], 0, 0);
+ value = grub_strtoul (argv[1], 0, 0);
+ if (cmd->name[6] == 'd')
+ *((grub_uint32_t *) addr) = value;
+ else if (cmd->name[6] == 'w')
+ *((grub_uint16_t *) addr) = (grub_uint16_t) value;
+ else
+ *((grub_uint8_t *) addr) = (grub_uint8_t) value;
+
+ return 0;
+}
+
+GRUB_MOD_INIT(memrw)
+{
+ (void) mod; /* To stop warning. */
+ cmd_read_byte =
+ grub_register_command ("read_byte", grub_cmd_read,
+ "read_byte ADDR", "read byte.");
+ cmd_read_word =
+ grub_register_command ("read_word", grub_cmd_read,
+ "read_word ADDR", "read word.");
+ cmd_read_dword =
+ grub_register_command ("read_dword", grub_cmd_read,
+ "read_dword ADDR", "read dword.");
+ cmd_write_byte =
+ grub_register_command ("write_byte", grub_cmd_write,
+ "write_byte ADDR VALUE", "write byte.");
+ cmd_write_word =
+ grub_register_command ("write_word", grub_cmd_write,
+ "write_word ADDR VALUE", "write word.");
+ cmd_write_dword =
+ grub_register_command ("write_dword", grub_cmd_write,
+ "write_dword ADDR VALUE", "write dword.");
+}
+
+GRUB_MOD_FINI(memrw)
+{
+ grub_unregister_command (cmd_read_byte);
+ grub_unregister_command (cmd_read_word);
+ grub_unregister_command (cmd_read_dword);
+ grub_unregister_command (cmd_write_byte);
+ grub_unregister_command (cmd_write_word);
+ grub_unregister_command (cmd_write_dword);
+}
Modified: trunk/grub2/conf/common.mk
===================================================================
--- trunk/grub2/conf/common.mk 2009-04-08 15:03:50 UTC (rev 2073)
+++ trunk/grub2/conf/common.mk 2009-04-10 15:33:34 UTC (rev 2074)
@@ -600,6 +600,12 @@
grub-mkconfig_DATA += util/grub.d/README
+# For grub-dumpbios
+grub-dumpbios: util/grub-dumpbios.in config.status
+ ./config.status --file=$@:$<
+ chmod +x $@
+sbin_SCRIPTS += grub-dumpbios
+CLEANFILES += grub-dumpbios
# Filing systems.
pkglib_MODULES += fshelp.mod fat.mod ufs.mod ext2.mod ntfs.mod \
@@ -2444,7 +2450,8 @@
ls.mod cmp.mod cat.mod help.mod search.mod \
loopback.mod fs_uuid.mod configfile.mod echo.mod \
terminfo.mod test.mod blocklist.mod hexdump.mod \
- read.mod sleep.mod loadenv.mod crc.mod parttool.mod pcpart.mod
+ read.mod sleep.mod loadenv.mod crc.mod parttool.mod \
+ pcpart.mod memrw.mod
# For minicmd.mod.
minicmd_mod_SOURCES = commands/minicmd.c
@@ -3852,6 +3859,63 @@
crc_mod_CFLAGS = $(COMMON_CFLAGS)
crc_mod_LDFLAGS = $(COMMON_LDFLAGS)
+# For memrw.mod.
+memrw_mod_SOURCES = commands/memrw.c
+CLEANFILES += memrw.mod mod-memrw.o mod-memrw.c pre-memrw.o
memrw_mod-commands_memrw.o und-memrw.lst
+ifneq ($(memrw_mod_EXPORTS),no)
+CLEANFILES += def-memrw.lst
+DEFSYMFILES += def-memrw.lst
+endif
+MOSTLYCLEANFILES += memrw_mod-commands_memrw.d
+UNDSYMFILES += und-memrw.lst
+
+memrw.mod: pre-memrw.o mod-memrw.o $(TARGET_OBJ2ELF)
+ -rm -f $@
+ $(TARGET_CC) $(memrw_mod_LDFLAGS) $(TARGET_LDFLAGS) -Wl,-r,-d -o $@
pre-memrw.o mod-memrw.o
+ if test ! -z $(TARGET_OBJ2ELF); then ./$(TARGET_OBJ2ELF) $@ || (rm -f
$@; exit 1); fi
+ $(STRIP) --strip-unneeded -K grub_mod_init -K grub_mod_fini -K
_grub_mod_init -K _grub_mod_fini -R .note -R .comment $@
+
+pre-memrw.o: $(memrw_mod_DEPENDENCIES) memrw_mod-commands_memrw.o
+ -rm -f $@
+ $(TARGET_CC) $(memrw_mod_LDFLAGS) $(TARGET_LDFLAGS) -Wl,-r,-d -o $@
memrw_mod-commands_memrw.o
+
+mod-memrw.o: mod-memrw.c
+ $(TARGET_CC) $(TARGET_CPPFLAGS) $(TARGET_CFLAGS) $(memrw_mod_CFLAGS) -c
-o $@ $<
+
+mod-memrw.c: $(builddir)/moddep.lst $(srcdir)/genmodsrc.sh
+ sh $(srcdir)/genmodsrc.sh 'memrw' $< > $@ || (rm -f $@; exit 1)
+
+ifneq ($(memrw_mod_EXPORTS),no)
+def-memrw.lst: pre-memrw.o
+ $(NM) -g --defined-only -P -p $< | sed 's/^\([^ ]*\).*/\1 memrw/' > $@
+endif
+
+und-memrw.lst: pre-memrw.o
+ echo 'memrw' > $@
+ $(NM) -u -P -p $< | cut -f1 -d' ' >> $@
+
+memrw_mod-commands_memrw.o: commands/memrw.c $(commands/memrw.c_DEPENDENCIES)
+ $(TARGET_CC) -Icommands -I$(srcdir)/commands $(TARGET_CPPFLAGS)
$(TARGET_CFLAGS) $(memrw_mod_CFLAGS) -MD -c -o $@ $<
+-include memrw_mod-commands_memrw.d
+
+CLEANFILES += cmd-memrw_mod-commands_memrw.lst fs-memrw_mod-commands_memrw.lst
partmap-memrw_mod-commands_memrw.lst
+COMMANDFILES += cmd-memrw_mod-commands_memrw.lst
+FSFILES += fs-memrw_mod-commands_memrw.lst
+PARTMAPFILES += partmap-memrw_mod-commands_memrw.lst
+
+cmd-memrw_mod-commands_memrw.lst: commands/memrw.c
$(commands/memrw.c_DEPENDENCIES) gencmdlist.sh
+ set -e; $(TARGET_CC) -Icommands -I$(srcdir)/commands
$(TARGET_CPPFLAGS) $(TARGET_CFLAGS) $(memrw_mod_CFLAGS) -E $< | sh
$(srcdir)/gencmdlist.sh memrw > $@ || (rm -f $@; exit 1)
+
+fs-memrw_mod-commands_memrw.lst: commands/memrw.c
$(commands/memrw.c_DEPENDENCIES) genfslist.sh
+ set -e; $(TARGET_CC) -Icommands -I$(srcdir)/commands
$(TARGET_CPPFLAGS) $(TARGET_CFLAGS) $(memrw_mod_CFLAGS) -E $< | sh
$(srcdir)/genfslist.sh memrw > $@ || (rm -f $@; exit 1)
+
+partmap-memrw_mod-commands_memrw.lst: commands/memrw.c
$(commands/memrw.c_DEPENDENCIES) genpartmaplist.sh
+ set -e; $(TARGET_CC) -Icommands -I$(srcdir)/commands
$(TARGET_CPPFLAGS) $(TARGET_CFLAGS) $(memrw_mod_CFLAGS) -E $< | sh
$(srcdir)/genpartmaplist.sh memrw > $@ || (rm -f $@; exit 1)
+
+
+memrw_mod_CFLAGS = $(COMMON_CFLAGS)
+memrw_mod_LDFLAGS = $(COMMON_LDFLAGS)
+
# Common Video Subsystem specific modules.
pkglib_MODULES += video.mod videotest.mod bitmap.mod tga.mod jpeg.mod \
png.mod font.mod gfxterm.mod
Modified: trunk/grub2/conf/common.rmk
===================================================================
--- trunk/grub2/conf/common.rmk 2009-04-08 15:03:50 UTC (rev 2073)
+++ trunk/grub2/conf/common.rmk 2009-04-10 15:33:34 UTC (rev 2074)
@@ -155,6 +155,12 @@
grub-mkconfig_DATA += util/grub.d/README
+# For grub-dumpbios
+grub-dumpbios: util/grub-dumpbios.in config.status
+ ./config.status --file=$@:$<
+ chmod +x $@
+sbin_SCRIPTS += grub-dumpbios
+CLEANFILES += grub-dumpbios
# Filing systems.
pkglib_MODULES += fshelp.mod fat.mod ufs.mod ext2.mod ntfs.mod \
@@ -335,7 +341,8 @@
ls.mod cmp.mod cat.mod help.mod search.mod \
loopback.mod fs_uuid.mod configfile.mod echo.mod \
terminfo.mod test.mod blocklist.mod hexdump.mod \
- read.mod sleep.mod loadenv.mod crc.mod parttool.mod pcpart.mod
+ read.mod sleep.mod loadenv.mod crc.mod parttool.mod \
+ pcpart.mod memrw.mod
# For minicmd.mod.
minicmd_mod_SOURCES = commands/minicmd.c
@@ -452,6 +459,11 @@
crc_mod_CFLAGS = $(COMMON_CFLAGS)
crc_mod_LDFLAGS = $(COMMON_LDFLAGS)
+# For memrw.mod.
+memrw_mod_SOURCES = commands/memrw.c
+memrw_mod_CFLAGS = $(COMMON_CFLAGS)
+memrw_mod_LDFLAGS = $(COMMON_LDFLAGS)
+
# Common Video Subsystem specific modules.
pkglib_MODULES += video.mod videotest.mod bitmap.mod tga.mod jpeg.mod \
png.mod font.mod gfxterm.mod
Modified: trunk/grub2/conf/i386-efi.mk
===================================================================
--- trunk/grub2/conf/i386-efi.mk 2009-04-08 15:03:50 UTC (rev 2073)
+++ trunk/grub2/conf/i386-efi.mk 2009-04-10 15:33:34 UTC (rev 2074)
@@ -120,7 +120,7 @@
# Modules.
pkglib_MODULES = kernel.mod normal.mod chain.mod appleldr.mod \
linux.mod halt.mod reboot.mod pci.mod lspci.mod \
- datetime.mod date.mod datehook.mod
+ datetime.mod date.mod datehook.mod loadbios.mod fixvideo.mod
# For kernel.mod.
kernel_mod_EXPORTS = no
@@ -1759,5 +1759,119 @@
datehook_mod_CFLAGS = $(COMMON_CFLAGS)
datehook_mod_LDFLAGS = $(COMMON_LDFLAGS)
+# For loadbios.mod
+loadbios_mod_SOURCES = commands/efi/loadbios.c
+CLEANFILES += loadbios.mod mod-loadbios.o mod-loadbios.c pre-loadbios.o
loadbios_mod-commands_efi_loadbios.o und-loadbios.lst
+ifneq ($(loadbios_mod_EXPORTS),no)
+CLEANFILES += def-loadbios.lst
+DEFSYMFILES += def-loadbios.lst
+endif
+MOSTLYCLEANFILES += loadbios_mod-commands_efi_loadbios.d
+UNDSYMFILES += und-loadbios.lst
+
+loadbios.mod: pre-loadbios.o mod-loadbios.o $(TARGET_OBJ2ELF)
+ -rm -f $@
+ $(TARGET_CC) $(loadbios_mod_LDFLAGS) $(TARGET_LDFLAGS) -Wl,-r,-d -o $@
pre-loadbios.o mod-loadbios.o
+ if test ! -z $(TARGET_OBJ2ELF); then ./$(TARGET_OBJ2ELF) $@ || (rm -f
$@; exit 1); fi
+ $(STRIP) --strip-unneeded -K grub_mod_init -K grub_mod_fini -K
_grub_mod_init -K _grub_mod_fini -R .note -R .comment $@
+
+pre-loadbios.o: $(loadbios_mod_DEPENDENCIES)
loadbios_mod-commands_efi_loadbios.o
+ -rm -f $@
+ $(TARGET_CC) $(loadbios_mod_LDFLAGS) $(TARGET_LDFLAGS) -Wl,-r,-d -o $@
loadbios_mod-commands_efi_loadbios.o
+
+mod-loadbios.o: mod-loadbios.c
+ $(TARGET_CC) $(TARGET_CPPFLAGS) $(TARGET_CFLAGS) $(loadbios_mod_CFLAGS)
-c -o $@ $<
+
+mod-loadbios.c: $(builddir)/moddep.lst $(srcdir)/genmodsrc.sh
+ sh $(srcdir)/genmodsrc.sh 'loadbios' $< > $@ || (rm -f $@; exit 1)
+
+ifneq ($(loadbios_mod_EXPORTS),no)
+def-loadbios.lst: pre-loadbios.o
+ $(NM) -g --defined-only -P -p $< | sed 's/^\([^ ]*\).*/\1 loadbios/' >
$@
+endif
+
+und-loadbios.lst: pre-loadbios.o
+ echo 'loadbios' > $@
+ $(NM) -u -P -p $< | cut -f1 -d' ' >> $@
+
+loadbios_mod-commands_efi_loadbios.o: commands/efi/loadbios.c
$(commands/efi/loadbios.c_DEPENDENCIES)
+ $(TARGET_CC) -Icommands/efi -I$(srcdir)/commands/efi $(TARGET_CPPFLAGS)
$(TARGET_CFLAGS) $(loadbios_mod_CFLAGS) -MD -c -o $@ $<
+-include loadbios_mod-commands_efi_loadbios.d
+
+CLEANFILES += cmd-loadbios_mod-commands_efi_loadbios.lst
fs-loadbios_mod-commands_efi_loadbios.lst
partmap-loadbios_mod-commands_efi_loadbios.lst
+COMMANDFILES += cmd-loadbios_mod-commands_efi_loadbios.lst
+FSFILES += fs-loadbios_mod-commands_efi_loadbios.lst
+PARTMAPFILES += partmap-loadbios_mod-commands_efi_loadbios.lst
+
+cmd-loadbios_mod-commands_efi_loadbios.lst: commands/efi/loadbios.c
$(commands/efi/loadbios.c_DEPENDENCIES) gencmdlist.sh
+ set -e; $(TARGET_CC) -Icommands/efi -I$(srcdir)/commands/efi
$(TARGET_CPPFLAGS) $(TARGET_CFLAGS) $(loadbios_mod_CFLAGS) -E $< | sh
$(srcdir)/gencmdlist.sh loadbios > $@ || (rm -f $@; exit 1)
+
+fs-loadbios_mod-commands_efi_loadbios.lst: commands/efi/loadbios.c
$(commands/efi/loadbios.c_DEPENDENCIES) genfslist.sh
+ set -e; $(TARGET_CC) -Icommands/efi -I$(srcdir)/commands/efi
$(TARGET_CPPFLAGS) $(TARGET_CFLAGS) $(loadbios_mod_CFLAGS) -E $< | sh
$(srcdir)/genfslist.sh loadbios > $@ || (rm -f $@; exit 1)
+
+partmap-loadbios_mod-commands_efi_loadbios.lst: commands/efi/loadbios.c
$(commands/efi/loadbios.c_DEPENDENCIES) genpartmaplist.sh
+ set -e; $(TARGET_CC) -Icommands/efi -I$(srcdir)/commands/efi
$(TARGET_CPPFLAGS) $(TARGET_CFLAGS) $(loadbios_mod_CFLAGS) -E $< | sh
$(srcdir)/genpartmaplist.sh loadbios > $@ || (rm -f $@; exit 1)
+
+
+loadbios_mod_CFLAGS = $(COMMON_CFLAGS)
+loadbios_mod_LDFLAGS = $(COMMON_LDFLAGS)
+
+# For fixvideo.mod
+fixvideo_mod_SOURCES = commands/efi/fixvideo.c
+CLEANFILES += fixvideo.mod mod-fixvideo.o mod-fixvideo.c pre-fixvideo.o
fixvideo_mod-commands_efi_fixvideo.o und-fixvideo.lst
+ifneq ($(fixvideo_mod_EXPORTS),no)
+CLEANFILES += def-fixvideo.lst
+DEFSYMFILES += def-fixvideo.lst
+endif
+MOSTLYCLEANFILES += fixvideo_mod-commands_efi_fixvideo.d
+UNDSYMFILES += und-fixvideo.lst
+
+fixvideo.mod: pre-fixvideo.o mod-fixvideo.o $(TARGET_OBJ2ELF)
+ -rm -f $@
+ $(TARGET_CC) $(fixvideo_mod_LDFLAGS) $(TARGET_LDFLAGS) -Wl,-r,-d -o $@
pre-fixvideo.o mod-fixvideo.o
+ if test ! -z $(TARGET_OBJ2ELF); then ./$(TARGET_OBJ2ELF) $@ || (rm -f
$@; exit 1); fi
+ $(STRIP) --strip-unneeded -K grub_mod_init -K grub_mod_fini -K
_grub_mod_init -K _grub_mod_fini -R .note -R .comment $@
+
+pre-fixvideo.o: $(fixvideo_mod_DEPENDENCIES)
fixvideo_mod-commands_efi_fixvideo.o
+ -rm -f $@
+ $(TARGET_CC) $(fixvideo_mod_LDFLAGS) $(TARGET_LDFLAGS) -Wl,-r,-d -o $@
fixvideo_mod-commands_efi_fixvideo.o
+
+mod-fixvideo.o: mod-fixvideo.c
+ $(TARGET_CC) $(TARGET_CPPFLAGS) $(TARGET_CFLAGS) $(fixvideo_mod_CFLAGS)
-c -o $@ $<
+
+mod-fixvideo.c: $(builddir)/moddep.lst $(srcdir)/genmodsrc.sh
+ sh $(srcdir)/genmodsrc.sh 'fixvideo' $< > $@ || (rm -f $@; exit 1)
+
+ifneq ($(fixvideo_mod_EXPORTS),no)
+def-fixvideo.lst: pre-fixvideo.o
+ $(NM) -g --defined-only -P -p $< | sed 's/^\([^ ]*\).*/\1 fixvideo/' >
$@
+endif
+
+und-fixvideo.lst: pre-fixvideo.o
+ echo 'fixvideo' > $@
+ $(NM) -u -P -p $< | cut -f1 -d' ' >> $@
+
+fixvideo_mod-commands_efi_fixvideo.o: commands/efi/fixvideo.c
$(commands/efi/fixvideo.c_DEPENDENCIES)
+ $(TARGET_CC) -Icommands/efi -I$(srcdir)/commands/efi $(TARGET_CPPFLAGS)
$(TARGET_CFLAGS) $(fixvideo_mod_CFLAGS) -MD -c -o $@ $<
+-include fixvideo_mod-commands_efi_fixvideo.d
+
+CLEANFILES += cmd-fixvideo_mod-commands_efi_fixvideo.lst
fs-fixvideo_mod-commands_efi_fixvideo.lst
partmap-fixvideo_mod-commands_efi_fixvideo.lst
+COMMANDFILES += cmd-fixvideo_mod-commands_efi_fixvideo.lst
+FSFILES += fs-fixvideo_mod-commands_efi_fixvideo.lst
+PARTMAPFILES += partmap-fixvideo_mod-commands_efi_fixvideo.lst
+
+cmd-fixvideo_mod-commands_efi_fixvideo.lst: commands/efi/fixvideo.c
$(commands/efi/fixvideo.c_DEPENDENCIES) gencmdlist.sh
+ set -e; $(TARGET_CC) -Icommands/efi -I$(srcdir)/commands/efi
$(TARGET_CPPFLAGS) $(TARGET_CFLAGS) $(fixvideo_mod_CFLAGS) -E $< | sh
$(srcdir)/gencmdlist.sh fixvideo > $@ || (rm -f $@; exit 1)
+
+fs-fixvideo_mod-commands_efi_fixvideo.lst: commands/efi/fixvideo.c
$(commands/efi/fixvideo.c_DEPENDENCIES) genfslist.sh
+ set -e; $(TARGET_CC) -Icommands/efi -I$(srcdir)/commands/efi
$(TARGET_CPPFLAGS) $(TARGET_CFLAGS) $(fixvideo_mod_CFLAGS) -E $< | sh
$(srcdir)/genfslist.sh fixvideo > $@ || (rm -f $@; exit 1)
+
+partmap-fixvideo_mod-commands_efi_fixvideo.lst: commands/efi/fixvideo.c
$(commands/efi/fixvideo.c_DEPENDENCIES) genpartmaplist.sh
+ set -e; $(TARGET_CC) -Icommands/efi -I$(srcdir)/commands/efi
$(TARGET_CPPFLAGS) $(TARGET_CFLAGS) $(fixvideo_mod_CFLAGS) -E $< | sh
$(srcdir)/genpartmaplist.sh fixvideo > $@ || (rm -f $@; exit 1)
+
+
+fixvideo_mod_CFLAGS = $(COMMON_CFLAGS)
+fixvideo_mod_LDFLAGS = $(COMMON_LDFLAGS)
+
include $(srcdir)/conf/i386.mk
include $(srcdir)/conf/common.mk
Modified: trunk/grub2/conf/i386-efi.rmk
===================================================================
--- trunk/grub2/conf/i386-efi.rmk 2009-04-08 15:03:50 UTC (rev 2073)
+++ trunk/grub2/conf/i386-efi.rmk 2009-04-10 15:33:34 UTC (rev 2074)
@@ -81,7 +81,7 @@
# Modules.
pkglib_MODULES = kernel.mod normal.mod chain.mod appleldr.mod \
linux.mod halt.mod reboot.mod pci.mod lspci.mod \
- datetime.mod date.mod datehook.mod
+ datetime.mod date.mod datehook.mod loadbios.mod fixvideo.mod
# For kernel.mod.
kernel_mod_EXPORTS = no
@@ -184,5 +184,15 @@
datehook_mod_CFLAGS = $(COMMON_CFLAGS)
datehook_mod_LDFLAGS = $(COMMON_LDFLAGS)
+# For loadbios.mod
+loadbios_mod_SOURCES = commands/efi/loadbios.c
+loadbios_mod_CFLAGS = $(COMMON_CFLAGS)
+loadbios_mod_LDFLAGS = $(COMMON_LDFLAGS)
+
+# For fixvideo.mod
+fixvideo_mod_SOURCES = commands/efi/fixvideo.c
+fixvideo_mod_CFLAGS = $(COMMON_CFLAGS)
+fixvideo_mod_LDFLAGS = $(COMMON_LDFLAGS)
+
include $(srcdir)/conf/i386.mk
include $(srcdir)/conf/common.mk
Modified: trunk/grub2/conf/x86_64-efi.mk
===================================================================
--- trunk/grub2/conf/x86_64-efi.mk 2009-04-08 15:03:50 UTC (rev 2073)
+++ trunk/grub2/conf/x86_64-efi.mk 2009-04-10 15:33:34 UTC (rev 2074)
@@ -108,7 +108,7 @@
# Modules.
pkglib_MODULES = kernel.mod normal.mod chain.mod appleldr.mod \
halt.mod reboot.mod linux.mod pci.mod lspci.mod \
- datetime.mod date.mod datehook.mod
+ datetime.mod date.mod datehook.mod loadbios.mod fixvideo.mod
# For kernel.mod.
kernel_mod_EXPORTS = no
@@ -1767,5 +1767,119 @@
datehook_mod_CFLAGS = $(COMMON_CFLAGS)
datehook_mod_LDFLAGS = $(COMMON_LDFLAGS)
+# For loadbios.mod
+loadbios_mod_SOURCES = commands/efi/loadbios.c
+CLEANFILES += loadbios.mod mod-loadbios.o mod-loadbios.c pre-loadbios.o
loadbios_mod-commands_efi_loadbios.o und-loadbios.lst
+ifneq ($(loadbios_mod_EXPORTS),no)
+CLEANFILES += def-loadbios.lst
+DEFSYMFILES += def-loadbios.lst
+endif
+MOSTLYCLEANFILES += loadbios_mod-commands_efi_loadbios.d
+UNDSYMFILES += und-loadbios.lst
+
+loadbios.mod: pre-loadbios.o mod-loadbios.o $(TARGET_OBJ2ELF)
+ -rm -f $@
+ $(TARGET_CC) $(loadbios_mod_LDFLAGS) $(TARGET_LDFLAGS) -Wl,-r,-d -o $@
pre-loadbios.o mod-loadbios.o
+ if test ! -z $(TARGET_OBJ2ELF); then ./$(TARGET_OBJ2ELF) $@ || (rm -f
$@; exit 1); fi
+ $(STRIP) --strip-unneeded -K grub_mod_init -K grub_mod_fini -K
_grub_mod_init -K _grub_mod_fini -R .note -R .comment $@
+
+pre-loadbios.o: $(loadbios_mod_DEPENDENCIES)
loadbios_mod-commands_efi_loadbios.o
+ -rm -f $@
+ $(TARGET_CC) $(loadbios_mod_LDFLAGS) $(TARGET_LDFLAGS) -Wl,-r,-d -o $@
loadbios_mod-commands_efi_loadbios.o
+
+mod-loadbios.o: mod-loadbios.c
+ $(TARGET_CC) $(TARGET_CPPFLAGS) $(TARGET_CFLAGS) $(loadbios_mod_CFLAGS)
-c -o $@ $<
+
+mod-loadbios.c: $(builddir)/moddep.lst $(srcdir)/genmodsrc.sh
+ sh $(srcdir)/genmodsrc.sh 'loadbios' $< > $@ || (rm -f $@; exit 1)
+
+ifneq ($(loadbios_mod_EXPORTS),no)
+def-loadbios.lst: pre-loadbios.o
+ $(NM) -g --defined-only -P -p $< | sed 's/^\([^ ]*\).*/\1 loadbios/' >
$@
+endif
+
+und-loadbios.lst: pre-loadbios.o
+ echo 'loadbios' > $@
+ $(NM) -u -P -p $< | cut -f1 -d' ' >> $@
+
+loadbios_mod-commands_efi_loadbios.o: commands/efi/loadbios.c
$(commands/efi/loadbios.c_DEPENDENCIES)
+ $(TARGET_CC) -Icommands/efi -I$(srcdir)/commands/efi $(TARGET_CPPFLAGS)
$(TARGET_CFLAGS) $(loadbios_mod_CFLAGS) -MD -c -o $@ $<
+-include loadbios_mod-commands_efi_loadbios.d
+
+CLEANFILES += cmd-loadbios_mod-commands_efi_loadbios.lst
fs-loadbios_mod-commands_efi_loadbios.lst
partmap-loadbios_mod-commands_efi_loadbios.lst
+COMMANDFILES += cmd-loadbios_mod-commands_efi_loadbios.lst
+FSFILES += fs-loadbios_mod-commands_efi_loadbios.lst
+PARTMAPFILES += partmap-loadbios_mod-commands_efi_loadbios.lst
+
+cmd-loadbios_mod-commands_efi_loadbios.lst: commands/efi/loadbios.c
$(commands/efi/loadbios.c_DEPENDENCIES) gencmdlist.sh
+ set -e; $(TARGET_CC) -Icommands/efi -I$(srcdir)/commands/efi
$(TARGET_CPPFLAGS) $(TARGET_CFLAGS) $(loadbios_mod_CFLAGS) -E $< | sh
$(srcdir)/gencmdlist.sh loadbios > $@ || (rm -f $@; exit 1)
+
+fs-loadbios_mod-commands_efi_loadbios.lst: commands/efi/loadbios.c
$(commands/efi/loadbios.c_DEPENDENCIES) genfslist.sh
+ set -e; $(TARGET_CC) -Icommands/efi -I$(srcdir)/commands/efi
$(TARGET_CPPFLAGS) $(TARGET_CFLAGS) $(loadbios_mod_CFLAGS) -E $< | sh
$(srcdir)/genfslist.sh loadbios > $@ || (rm -f $@; exit 1)
+
+partmap-loadbios_mod-commands_efi_loadbios.lst: commands/efi/loadbios.c
$(commands/efi/loadbios.c_DEPENDENCIES) genpartmaplist.sh
+ set -e; $(TARGET_CC) -Icommands/efi -I$(srcdir)/commands/efi
$(TARGET_CPPFLAGS) $(TARGET_CFLAGS) $(loadbios_mod_CFLAGS) -E $< | sh
$(srcdir)/genpartmaplist.sh loadbios > $@ || (rm -f $@; exit 1)
+
+
+loadbios_mod_CFLAGS = $(COMMON_CFLAGS)
+loadbios_mod_LDFLAGS = $(COMMON_LDFLAGS)
+
+# For fixvideo.mod
+fixvideo_mod_SOURCES = commands/efi/fixvideo.c
+CLEANFILES += fixvideo.mod mod-fixvideo.o mod-fixvideo.c pre-fixvideo.o
fixvideo_mod-commands_efi_fixvideo.o und-fixvideo.lst
+ifneq ($(fixvideo_mod_EXPORTS),no)
+CLEANFILES += def-fixvideo.lst
+DEFSYMFILES += def-fixvideo.lst
+endif
+MOSTLYCLEANFILES += fixvideo_mod-commands_efi_fixvideo.d
+UNDSYMFILES += und-fixvideo.lst
+
+fixvideo.mod: pre-fixvideo.o mod-fixvideo.o $(TARGET_OBJ2ELF)
+ -rm -f $@
+ $(TARGET_CC) $(fixvideo_mod_LDFLAGS) $(TARGET_LDFLAGS) -Wl,-r,-d -o $@
pre-fixvideo.o mod-fixvideo.o
+ if test ! -z $(TARGET_OBJ2ELF); then ./$(TARGET_OBJ2ELF) $@ || (rm -f
$@; exit 1); fi
+ $(STRIP) --strip-unneeded -K grub_mod_init -K grub_mod_fini -K
_grub_mod_init -K _grub_mod_fini -R .note -R .comment $@
+
+pre-fixvideo.o: $(fixvideo_mod_DEPENDENCIES)
fixvideo_mod-commands_efi_fixvideo.o
+ -rm -f $@
+ $(TARGET_CC) $(fixvideo_mod_LDFLAGS) $(TARGET_LDFLAGS) -Wl,-r,-d -o $@
fixvideo_mod-commands_efi_fixvideo.o
+
+mod-fixvideo.o: mod-fixvideo.c
+ $(TARGET_CC) $(TARGET_CPPFLAGS) $(TARGET_CFLAGS) $(fixvideo_mod_CFLAGS)
-c -o $@ $<
+
+mod-fixvideo.c: $(builddir)/moddep.lst $(srcdir)/genmodsrc.sh
+ sh $(srcdir)/genmodsrc.sh 'fixvideo' $< > $@ || (rm -f $@; exit 1)
+
+ifneq ($(fixvideo_mod_EXPORTS),no)
+def-fixvideo.lst: pre-fixvideo.o
+ $(NM) -g --defined-only -P -p $< | sed 's/^\([^ ]*\).*/\1 fixvideo/' >
$@
+endif
+
+und-fixvideo.lst: pre-fixvideo.o
+ echo 'fixvideo' > $@
+ $(NM) -u -P -p $< | cut -f1 -d' ' >> $@
+
+fixvideo_mod-commands_efi_fixvideo.o: commands/efi/fixvideo.c
$(commands/efi/fixvideo.c_DEPENDENCIES)
+ $(TARGET_CC) -Icommands/efi -I$(srcdir)/commands/efi $(TARGET_CPPFLAGS)
$(TARGET_CFLAGS) $(fixvideo_mod_CFLAGS) -MD -c -o $@ $<
+-include fixvideo_mod-commands_efi_fixvideo.d
+
+CLEANFILES += cmd-fixvideo_mod-commands_efi_fixvideo.lst
fs-fixvideo_mod-commands_efi_fixvideo.lst
partmap-fixvideo_mod-commands_efi_fixvideo.lst
+COMMANDFILES += cmd-fixvideo_mod-commands_efi_fixvideo.lst
+FSFILES += fs-fixvideo_mod-commands_efi_fixvideo.lst
+PARTMAPFILES += partmap-fixvideo_mod-commands_efi_fixvideo.lst
+
+cmd-fixvideo_mod-commands_efi_fixvideo.lst: commands/efi/fixvideo.c
$(commands/efi/fixvideo.c_DEPENDENCIES) gencmdlist.sh
+ set -e; $(TARGET_CC) -Icommands/efi -I$(srcdir)/commands/efi
$(TARGET_CPPFLAGS) $(TARGET_CFLAGS) $(fixvideo_mod_CFLAGS) -E $< | sh
$(srcdir)/gencmdlist.sh fixvideo > $@ || (rm -f $@; exit 1)
+
+fs-fixvideo_mod-commands_efi_fixvideo.lst: commands/efi/fixvideo.c
$(commands/efi/fixvideo.c_DEPENDENCIES) genfslist.sh
+ set -e; $(TARGET_CC) -Icommands/efi -I$(srcdir)/commands/efi
$(TARGET_CPPFLAGS) $(TARGET_CFLAGS) $(fixvideo_mod_CFLAGS) -E $< | sh
$(srcdir)/genfslist.sh fixvideo > $@ || (rm -f $@; exit 1)
+
+partmap-fixvideo_mod-commands_efi_fixvideo.lst: commands/efi/fixvideo.c
$(commands/efi/fixvideo.c_DEPENDENCIES) genpartmaplist.sh
+ set -e; $(TARGET_CC) -Icommands/efi -I$(srcdir)/commands/efi
$(TARGET_CPPFLAGS) $(TARGET_CFLAGS) $(fixvideo_mod_CFLAGS) -E $< | sh
$(srcdir)/genpartmaplist.sh fixvideo > $@ || (rm -f $@; exit 1)
+
+
+fixvideo_mod_CFLAGS = $(COMMON_CFLAGS)
+fixvideo_mod_LDFLAGS = $(COMMON_LDFLAGS)
+
include $(srcdir)/conf/i386.mk
include $(srcdir)/conf/common.mk
Modified: trunk/grub2/conf/x86_64-efi.rmk
===================================================================
--- trunk/grub2/conf/x86_64-efi.rmk 2009-04-08 15:03:50 UTC (rev 2073)
+++ trunk/grub2/conf/x86_64-efi.rmk 2009-04-10 15:33:34 UTC (rev 2074)
@@ -83,7 +83,7 @@
# Modules.
pkglib_MODULES = kernel.mod normal.mod chain.mod appleldr.mod \
halt.mod reboot.mod linux.mod pci.mod lspci.mod \
- datetime.mod date.mod datehook.mod
+ datetime.mod date.mod datehook.mod loadbios.mod fixvideo.mod
# For kernel.mod.
kernel_mod_EXPORTS = no
@@ -187,5 +187,15 @@
datehook_mod_CFLAGS = $(COMMON_CFLAGS)
datehook_mod_LDFLAGS = $(COMMON_LDFLAGS)
+# For loadbios.mod
+loadbios_mod_SOURCES = commands/efi/loadbios.c
+loadbios_mod_CFLAGS = $(COMMON_CFLAGS)
+loadbios_mod_LDFLAGS = $(COMMON_LDFLAGS)
+
+# For fixvideo.mod
+fixvideo_mod_SOURCES = commands/efi/fixvideo.c
+fixvideo_mod_CFLAGS = $(COMMON_CFLAGS)
+fixvideo_mod_LDFLAGS = $(COMMON_LDFLAGS)
+
include $(srcdir)/conf/i386.mk
include $(srcdir)/conf/common.mk
Modified: trunk/grub2/include/grub/efi/api.h
===================================================================
--- trunk/grub2/include/grub/efi/api.h 2009-04-08 15:03:50 UTC (rev 2073)
+++ trunk/grub2/include/grub/efi/api.h 2009-04-10 15:33:34 UTC (rev 2074)
@@ -933,7 +933,7 @@
{
grub_efi_guid_t vendor_guid;
void *vendor_table;
-};
+} __attribute__ ((packed));
typedef struct grub_efi_configuration_table grub_efi_configuration_table_t;
struct grub_efi_simple_input_interface
Modified: trunk/grub2/include/grub/i386/pci.h
===================================================================
--- trunk/grub2/include/grub/i386/pci.h 2009-04-08 15:03:50 UTC (rev 2073)
+++ trunk/grub2/include/grub/i386/pci.h 2009-04-10 15:33:34 UTC (rev 2074)
@@ -32,4 +32,39 @@
return grub_inl (GRUB_PCI_DATA_REG);
}
+static inline grub_uint16_t
+grub_pci_read_word (grub_pci_address_t addr)
+{
+ grub_outl (addr & ~3, GRUB_PCI_ADDR_REG);
+ return grub_inw (GRUB_PCI_DATA_REG + (addr & 3));
+}
+
+static inline grub_uint8_t
+grub_pci_read_byte (grub_pci_address_t addr)
+{
+ grub_outl (addr & ~3, GRUB_PCI_ADDR_REG);
+ return grub_inb (GRUB_PCI_DATA_REG + (addr & 3));
+}
+
+static inline void
+grub_pci_write (grub_pci_address_t addr, grub_uint32_t data)
+{
+ grub_outl (addr, GRUB_PCI_ADDR_REG);
+ grub_outl (data, GRUB_PCI_DATA_REG);
+}
+
+static inline void
+grub_pci_write_word (grub_pci_address_t addr, grub_uint16_t data)
+{
+ grub_outl (addr & ~3, GRUB_PCI_ADDR_REG);
+ grub_outw (data, GRUB_PCI_DATA_REG + (addr & 3));
+}
+
+static inline void
+grub_pci_write_byte (grub_pci_address_t addr, grub_uint8_t data)
+{
+ grub_outl (addr & ~3, GRUB_PCI_ADDR_REG);
+ grub_outb (data, GRUB_PCI_DATA_REG + (addr & 3));
+}
+
#endif /* GRUB_CPU_PCI_H */
Modified: trunk/grub2/include/grub/pci.h
===================================================================
--- trunk/grub2/include/grub/pci.h 2009-04-08 15:03:50 UTC (rev 2073)
+++ trunk/grub2/include/grub/pci.h 2009-04-10 15:33:34 UTC (rev 2074)
@@ -36,8 +36,8 @@
#define GRUB_PCI_ADDR_IO_MASK ~0x03
typedef grub_uint32_t grub_pci_id_t;
-typedef int (*grub_pci_iteratefunc_t) (int bus, int device, int func,
- grub_pci_id_t pciid);
+typedef int NESTED_FUNC_ATTR (*grub_pci_iteratefunc_t)
+ (int bus, int device, int func, grub_pci_id_t pciid);
typedef grub_uint32_t grub_pci_address_t;
grub_pci_address_t EXPORT_FUNC(grub_pci_make_address) (int bus, int device,
Modified: trunk/grub2/loader/i386/efi/linux.c
===================================================================
--- trunk/grub2/loader/i386/efi/linux.c 2009-04-08 15:03:50 UTC (rev 2073)
+++ trunk/grub2/loader/i386/efi/linux.c 2009-04-10 15:33:34 UTC (rev 2074)
@@ -30,6 +30,7 @@
#include <grub/efi/api.h>
#include <grub/efi/efi.h>
#include <grub/efi/uga_draw.h>
+#include <grub/pci.h>
#include <grub/command.h>
#define GRUB_LINUX_CL_OFFSET 0x1000
@@ -248,9 +249,9 @@
}
grub_dprintf ("linux", "real_mode_mem = %lx, real_mode_pages = %x, "
- "prot_mode_mem = %lx, prot_mode_pages = %x\n",
- (unsigned long) real_mode_mem, (unsigned) real_mode_pages,
- (unsigned long) prot_mode_mem, (unsigned) prot_mode_pages);
+ "prot_mode_mem = %lx, prot_mode_pages = %x\n",
+ (unsigned long) real_mode_mem, (unsigned) real_mode_pages,
+ (unsigned long) prot_mode_mem, (unsigned) prot_mode_pages);
grub_free (mmap);
return 1;
@@ -263,8 +264,8 @@
static void
grub_e820_add_region (struct grub_e820_mmap *e820_map, int *e820_num,
- grub_uint64_t start, grub_uint64_t size,
- grub_uint32_t type)
+ grub_uint64_t start, grub_uint64_t size,
+ grub_uint32_t type)
{
int n = *e820_num;
@@ -283,57 +284,6 @@
}
}
-static grub_efi_guid_t acpi_guid = GRUB_EFI_ACPI_TABLE_GUID;
-static grub_efi_guid_t acpi2_guid = GRUB_EFI_ACPI_20_TABLE_GUID;
-
-#define EBDA_SEG_ADDR 0x40e
-#define LOW_MEM_ADDR 0x413
-#define FAKE_EBDA_SEG 0x9fc0
-
-static void
-fake_bios_data (void)
-{
- unsigned i;
- void *acpi;
- grub_uint16_t *ebda_seg_ptr, *low_mem_ptr;
-
- acpi = 0;
- for (i = 0; i < grub_efi_system_table->num_table_entries; i++)
- {
- grub_efi_guid_t *guid =
- &grub_efi_system_table->configuration_table[i].vendor_guid;
-
- if (! grub_memcmp (guid, &acpi2_guid, sizeof (grub_efi_guid_t)))
- {
- acpi = grub_efi_system_table->configuration_table[i].vendor_table;
- grub_dprintf ("linux", "ACPI2: %p\n", acpi);
- }
- else if (! grub_memcmp (guid, &acpi_guid, sizeof (grub_efi_guid_t)))
- {
- void *t;
-
- t = grub_efi_system_table->configuration_table[i].vendor_table;
- if (! acpi)
- acpi = t;
- grub_dprintf ("linux", "ACPI: %p\n", t);
- }
- }
-
- if (acpi == 0)
- return;
-
- ebda_seg_ptr = (grub_uint16_t *) EBDA_SEG_ADDR;
- low_mem_ptr = (grub_uint16_t *) LOW_MEM_ADDR;
-
- if ((*ebda_seg_ptr) || (*low_mem_ptr))
- return;
-
- *ebda_seg_ptr = FAKE_EBDA_SEG;
- *low_mem_ptr = FAKE_EBDA_SEG >> 6;
-
- grub_memcpy ((char *) (FAKE_EBDA_SEG << 4), acpi, 1024);
-}
-
#ifdef __x86_64__
struct
{
@@ -353,13 +303,11 @@
grub_efi_memory_descriptor_t *desc;
int e820_num;
- fake_bios_data ();
-
params = real_mode_mem;
grub_dprintf ("linux", "code32_start = %x, idt_desc = %lx, gdt_desc = %lx\n",
(unsigned) params->code32_start,
- (unsigned long) &(idt_desc.limit),
+ (unsigned long) &(idt_desc.limit),
(unsigned long) &(gdt_desc.limit));
grub_dprintf ("linux", "idt = %x:%lx, gdt = %x:%lx\n",
(unsigned) idt_desc.limit, (unsigned long) idt_desc.base,
@@ -376,69 +324,69 @@
desc = NEXT_MEMORY_DESCRIPTOR (desc, desc_size))
{
switch (desc->type)
- {
- case GRUB_EFI_ACPI_RECLAIM_MEMORY:
- grub_e820_add_region (params->e820_map, &e820_num,
- desc->physical_start,
- desc->num_pages << 12,
- GRUB_E820_ACPI);
- break;
+ {
+ case GRUB_EFI_ACPI_RECLAIM_MEMORY:
+ grub_e820_add_region (params->e820_map, &e820_num,
+ desc->physical_start,
+ desc->num_pages << 12,
+ GRUB_E820_ACPI);
+ break;
- case GRUB_EFI_ACPI_MEMORY_NVS:
- grub_e820_add_region (params->e820_map, &e820_num,
- desc->physical_start,
- desc->num_pages << 12,
- GRUB_E820_NVS);
- break;
+ case GRUB_EFI_ACPI_MEMORY_NVS:
+ grub_e820_add_region (params->e820_map, &e820_num,
+ desc->physical_start,
+ desc->num_pages << 12,
+ GRUB_E820_NVS);
+ break;
- case GRUB_EFI_RUNTIME_SERVICES_CODE:
- grub_e820_add_region (params->e820_map, &e820_num,
- desc->physical_start,
- desc->num_pages << 12,
- GRUB_E820_EXEC_CODE);
- break;
+ case GRUB_EFI_RUNTIME_SERVICES_CODE:
+ grub_e820_add_region (params->e820_map, &e820_num,
+ desc->physical_start,
+ desc->num_pages << 12,
+ GRUB_E820_EXEC_CODE);
+ break;
- case GRUB_EFI_LOADER_CODE:
- case GRUB_EFI_LOADER_DATA:
- case GRUB_EFI_BOOT_SERVICES_CODE:
- case GRUB_EFI_BOOT_SERVICES_DATA:
- case GRUB_EFI_CONVENTIONAL_MEMORY:
- {
- grub_uint64_t start, size, end;
+ case GRUB_EFI_LOADER_CODE:
+ case GRUB_EFI_LOADER_DATA:
+ case GRUB_EFI_BOOT_SERVICES_CODE:
+ case GRUB_EFI_BOOT_SERVICES_DATA:
+ case GRUB_EFI_CONVENTIONAL_MEMORY:
+ {
+ grub_uint64_t start, size, end;
- start = desc->physical_start;
- size = desc->num_pages << 12;
- end = start + size;
+ start = desc->physical_start;
+ size = desc->num_pages << 12;
+ end = start + size;
- /* Skip A0000 - 100000 region. */
- if ((start < 0x100000ULL) && (end > 0xA0000ULL))
- {
- if (start < 0xA0000ULL)
- {
- grub_e820_add_region (params->e820_map, &e820_num,
- start,
- 0xA0000ULL - start,
- GRUB_E820_RAM);
- }
+ /* Skip A0000 - 100000 region. */
+ if ((start < 0x100000ULL) && (end > 0xA0000ULL))
+ {
+ if (start < 0xA0000ULL)
+ {
+ grub_e820_add_region (params->e820_map, &e820_num,
+ start,
+ 0xA0000ULL - start,
+ GRUB_E820_RAM);
+ }
- if (end <= 0x100000ULL)
- continue;
+ if (end <= 0x100000ULL)
+ continue;
- start = 0x100000ULL;
- size = end - start;
- }
+ start = 0x100000ULL;
+ size = end - start;
+ }
- grub_e820_add_region (params->e820_map, &e820_num,
- start, size, GRUB_E820_RAM);
- break;
- }
+ grub_e820_add_region (params->e820_map, &e820_num,
+ start, size, GRUB_E820_RAM);
+ break;
+ }
- default:
- grub_e820_add_region (params->e820_map, &e820_num,
- desc->physical_start,
- desc->num_pages << 12,
- GRUB_E820_RESERVED);
- }
+ default:
+ grub_e820_add_region (params->e820_map, &e820_num,
+ desc->physical_start,
+ desc->num_pages << 12,
+ GRUB_E820_RESERVED);
+ }
}
params->mmap_size = e820_num;
@@ -520,41 +468,106 @@
#define FBTEST_STEP (0x10000 >> 2)
#define FBTEST_COUNT 8
-static grub_uint32_t fb_list[]=
- {0x40000000, 0x80000000, 0xc0000000, 0};
+static int
+find_line_len (grub_uint32_t *fb_base, grub_uint32_t *line_len)
+{
+ grub_uint32_t *base = (grub_uint32_t *) (grub_target_addr_t) *fb_base;
+ int i;
+ for (i = 0; i < FBTEST_COUNT; i++, base += FBTEST_STEP)
+ {
+ if ((*base & RGB_MASK) == RGB_MAGIC)
+ {
+ int j;
+
+ for (j = LINE_MIN; j <= LINE_MAX; j++)
+ {
+ if ((base[j] & RGB_MASK) == RGB_MAGIC)
+ {
+ *fb_base = (grub_uint32_t) (grub_target_addr_t) base;
+ *line_len = j << 2;
+
+ return 1;
+ }
+ }
+
+ break;
+ }
+ }
+
+ return 0;
+}
+
static int
find_framebuf (grub_uint32_t *fb_base, grub_uint32_t *line_len)
{
- grub_uint32_t *fb;
+ int found = 0;
- for (fb = fb_list; *fb; fb++)
+ auto int NESTED_FUNC_ATTR find_card (int bus, int dev, int func,
+ grub_pci_id_t pciid);
+
+ int NESTED_FUNC_ATTR find_card (int bus, int dev, int func,
+ grub_pci_id_t pciid)
{
- grub_uint32_t *base = (grub_uint32_t *) (grub_target_addr_t) *fb;
- int i;
+ grub_pci_address_t addr;
- for (i = 0; i < FBTEST_COUNT; i++, base += FBTEST_STEP)
- {
- if ((*base & RGB_MASK) == RGB_MAGIC)
+ addr = grub_pci_make_address (bus, dev, func, 2);
+ if (grub_pci_read (addr) >> 24 == 0x3)
+ {
+ int i;
+
+ grub_printf ("Display controller: %d:%d.%d\nDevice id: %x\n",
+ bus, dev, func, pciid);
+ addr += 8;
+ for (i = 0; i < 6; i++, addr += 4)
{
- int j;
+ grub_uint32_t old_bar1, old_bar2, type;
+ grub_uint64_t base64;
- for (j = LINE_MIN; j <= LINE_MAX; j++)
- {
- if ((base[j] & RGB_MASK) == RGB_MAGIC)
- {
- *fb_base = (grub_uint32_t) (grub_target_addr_t) base;
- *line_len = j << 2;
+ old_bar1 = grub_pci_read (addr);
+ if ((! old_bar1) || (old_bar1 & GRUB_PCI_ADDR_SPACE_IO))
+ continue;
- return 0;
- }
- }
+ type = old_bar1 & GRUB_PCI_ADDR_MEM_TYPE_MASK;
+ if (type == GRUB_PCI_ADDR_MEM_TYPE_64)
+ {
+ if (i == 5)
+ break;
- break;
- }
- }
+ old_bar2 = grub_pci_read (addr + 4);
+ }
+ else
+ old_bar2 = 0;
+
+ base64 = old_bar2;
+ base64 <<= 32;
+ base64 |= (old_bar1 & GRUB_PCI_ADDR_MEM_MASK);
+
+ grub_printf ("%s(%d): 0x%llx\n",
+ ((old_bar1 & GRUB_PCI_ADDR_MEM_PREFETCH) ?
+ "VMEM" : "MMIO"), i,
+ (unsigned long long) base64);
+
+ if ((old_bar1 & GRUB_PCI_ADDR_MEM_PREFETCH) && (! found))
+ {
+ *fb_base = base64;
+ if (find_line_len (fb_base, line_len))
+ found++;
+ }
+
+ if (type == GRUB_PCI_ADDR_MEM_TYPE_64)
+ {
+ i++;
+ addr += 4;
+ }
+ }
+ }
+
+ return found;
}
- return 1;
+
+ grub_pci_iterate (find_card);
+ return found;
}
static int
@@ -580,13 +593,13 @@
ret = find_framebuf (&fb_base, &line_len);
grub_efi_set_text_mode (1);
- if (ret)
+ if (! ret)
{
grub_printf ("Can\'t find frame buffer address\n");
return 1;
}
- grub_printf ("Video frame buffer: 0x%x\n", fb_base);
+ grub_printf ("Frame buffer base: 0x%x\n", fb_base);
grub_printf ("Video line length: %d\n", line_len);
params->lfb_width = width;
@@ -606,6 +619,9 @@
params->reserved_mask_size = 8;
params->reserved_field_pos = 24;
+ params->have_vga = GRUB_VIDEO_TYPE_VLFB;
+ params->vid_mode = 0x338; /* 1024x768x32 */
+
return 0;
}
@@ -621,7 +637,6 @@
grub_ssize_t len;
int i;
char *dest;
- int video_type;
grub_dl_ref (my_mod);
@@ -808,9 +823,10 @@
grub_printf (" [Linux-bzImage, setup=0x%x, size=0x%x]\n",
(unsigned) real_size, (unsigned) prot_size);
+ grub_linux_setup_video (params);
+
/* Detect explicitly specified memory size, if any. */
linux_mem_size = 0;
- video_type = 0;
for (i = 1; i < argc; i++)
if (grub_memcmp (argv[i], "mem=", 4) == 0)
{
@@ -846,20 +862,12 @@
linux_mem_size <<= shift;
}
}
- else if (grub_memcmp (argv[i], "video=", 6) == 0)
+ else if (grub_memcmp (argv[i], "video=efifb", 11) == 0)
{
- if (grub_memcmp (&argv[i][6], "vesafb", 6) == 0)
- video_type = GRUB_VIDEO_TYPE_VLFB;
- else if (grub_memcmp (&argv[i][6], "efifb", 5) == 0)
- video_type = GRUB_VIDEO_TYPE_EFI;
+ if (params->have_vga)
+ params->have_vga = GRUB_VIDEO_TYPE_EFI;
}
- if (video_type)
- {
- if (! grub_linux_setup_video (params))
- params->have_vga = video_type;
- }
-
/* Specify the boot file. */
dest = grub_stpcpy ((char *) real_mode_mem + GRUB_LINUX_CL_OFFSET,
"BOOT_IMAGE=");
@@ -946,7 +954,7 @@
/* Usually, the compression ratio is about 50%. */
addr_min = (grub_addr_t) prot_mode_mem + ((prot_mode_pages * 3) << 12)
- + page_align (size);
+ + page_align (size);
/* Find the highest address to put the initrd. */
mmap_size = find_mmap_size ();
@@ -968,7 +976,7 @@
physical_end = addr_max;
if (physical_end < page_align (size))
- continue;
+ continue;
physical_end -= page_align (size);
Added: trunk/grub2/util/grub-dumpbios.in
===================================================================
--- trunk/grub2/util/grub-dumpbios.in (rev 0)
+++ trunk/grub2/util/grub-dumpbios.in 2009-04-10 15:33:34 UTC (rev 2074)
@@ -0,0 +1,58 @@
+#! /bin/sh
+#
+# Copyright (C) 2009 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/>.
+
+# Usage: usage
+# Print the usage.
+usage () {
+ cat <<EOF
+Usage: $0 [OPTION]
+Create vbios and int10 dump
+
+ -o, --output=DIR set output directory
+ -h, --help print this message and exit
+ -v, --version print the version information and exit
+
+Report bugs to <address@hidden>.
+EOF
+}
+
+# Check the arguments.
+for option in "$@"; do
+ case "$option" in
+ -h | --help)
+ usage
+ exit 0 ;;
+ -v | --version)
+ echo "$0 (GNU GRUB @PACKAGE_VERSION@)"
+ exit 0 ;;
+ -o)
+ shift
+ output_dir=$1
+ ;;
+ --output=)
+ output_dir=`echo "$option" | sed 's/--output=//'`
+ ;;
+ -*)
+ echo "Unrecognized option \`$option'" 1>&2
+ usage
+ exit 1
+ ;;
+ esac
+done
+
+dd if=/dev/mem of=${output_dir}vbios.bin bs=65536 skip=12 count=1
+dd if=/dev/mem of=${output_dir}int10.bin bs=4 skip=16 count=1
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [2074] 2009-04-10 Bean <address@hidden>,
Bean <=