summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorroot <root@lamia.panaceas.james.local>2013-10-23 18:24:09 +0100
committerroot <root@lamia.panaceas.james.local>2013-10-23 18:24:09 +0100
commit3314aa5e45c5b425c6ea14424dc42e8d4d784e9f (patch)
tree795aa22f001a3f89e32da71e3a6f7c356b6addda
parent41d6b314334c3129d27713618271d9b85e6a374d (diff)
downloadgrub-1.99-pq-3314aa5e45c5b425c6ea14424dc42e8d4d784e9f.tar.gz
grub-1.99-pq-3314aa5e45c5b425c6ea14424dc42e8d4d784e9f.tar.bz2
grub-1.99-pq-3314aa5e45c5b425c6ea14424dc42e8d4d784e9f.zip
disabling GOP/UGA blanks the screen - FFS apple
-rw-r--r--master/jmm/xen-multiboot174
-rw-r--r--master/status53
2 files changed, 151 insertions, 76 deletions
diff --git a/master/jmm/xen-multiboot b/master/jmm/xen-multiboot
index c2769ec..52b3e89 100644
--- a/master/jmm/xen-multiboot
+++ b/master/jmm/xen-multiboot
@@ -1,10 +1,18 @@
Index: grub2/conf/i386-efi.rmk
===================================================================
diff --git a/grub-core/loader/multiboot.c b/grub-core/loader/multiboot.c
-index d9e74b3..9277b0a 100644
+index d9e74b3..afd0e25 100644
--- a/grub-core/loader/multiboot.c
+++ b/grub-core/loader/multiboot.c
-@@ -42,6 +42,7 @@
+@@ -33,6 +33,7 @@
+ #include <grub/elf.h>
+ #include <grub/aout.h>
+ #include <grub/file.h>
++#include <grub/time.h>
+ #include <grub/err.h>
+ #include <grub/dl.h>
+ #include <grub/mm.h>
+@@ -42,6 +43,7 @@
#include <grub/video.h>
#include <grub/memory.h>
#include <grub/i18n.h>
@@ -12,11 +20,10 @@ index d9e74b3..9277b0a 100644
GRUB_MOD_LICENSE ("GPLv3+");
-@@ -51,6 +52,8 @@ GRUB_MOD_LICENSE ("GPLv3+");
+@@ -51,6 +53,7 @@ GRUB_MOD_LICENSE ("GPLv3+");
struct grub_relocator *grub_multiboot_relocator = NULL;
grub_uint32_t grub_multiboot_payload_eip;
-+void *xen_base = NULL;
+
#if defined (GRUB_MACHINE_PCBIOS) || defined (GRUB_MACHINE_MULTIBOOT) || defined (GRUB_MACHINE_COREBOOT) || defined (GRUB_MACHINE_QEMU)
#define DEFAULT_VIDEO_MODE "text"
@@ -30,7 +37,7 @@ index d9e74b3..9277b0a 100644
/* Return the length of the Multiboot mmap that will be needed to allocate
our platform's map. */
grub_uint32_t
-@@ -112,6 +117,36 @@ grub_multiboot_set_video_mode (void)
+@@ -112,6 +117,34 @@ grub_multiboot_set_video_mode (void)
}
static grub_err_t
@@ -46,9 +53,7 @@ index d9e74b3..9277b0a 100644
+ if (err)
+ return err;
+
-+ xen_setup(xen_base);
-+
-+ grub_sleep(5);
++ xen_stop_dma();
+
+#ifdef GRUB_MACHINE_EFI
+ err = grub_efi_finish_boot_services (NULL, NULL, NULL, NULL, NULL);
@@ -67,7 +72,7 @@ index d9e74b3..9277b0a 100644
grub_multiboot_boot (void)
{
grub_err_t err;
-@@ -213,6 +248,71 @@ grub_multiboot_set_console (int console_type, int accepted_consoles,
+@@ -213,6 +246,72 @@ grub_multiboot_set_console (int console_type, int accepted_consoles,
}
static grub_err_t
@@ -113,7 +118,8 @@ index d9e74b3..9277b0a 100644
+ } *gr = (struct grub_relocator *) grub_multiboot_relocator;
+
+
-+ xen_base=get_virtual_current_address (gr->chunks);
++ void * xen_base=get_virtual_current_address (gr->chunks);
++ xen_setup(xen_base);
+ }
+
+ grub_multiboot_set_bootdev ();
@@ -139,7 +145,7 @@ index d9e74b3..9277b0a 100644
grub_cmd_multiboot (grub_command_t cmd __attribute__ ((unused)),
int argc, char *argv[])
{
-@@ -329,23 +429,32 @@ grub_cmd_module (grub_command_t cmd __attribute__ ((unused)),
+@@ -329,23 +428,32 @@ grub_cmd_module (grub_command_t cmd __attribute__ ((unused)),
return GRUB_ERR_NONE;;
}
@@ -175,10 +181,10 @@ index d9e74b3..9277b0a 100644
my_mod = mod;
diff --git a/grub-core/loader/xen.c b/grub-core/loader/xen.c
new file mode 100644
-index 0000000..0e3deee
+index 0000000..63ce927
--- /dev/null
+++ b/grub-core/loader/xen.c
-@@ -0,0 +1,301 @@
+@@ -0,0 +1,303 @@
+
+#define XEN_EFI_MAGIC 0xdeadbeefef104eadULL
+#define XEN_LOADER_GRUB_64 0x0034365f36387847ULL
@@ -313,7 +319,7 @@ index 0000000..0e3deee
+
+#endif
+
-+static void stop_dma(void)
++static void xen_stop_dma(void)
+{
+
+ auto int NESTED_FUNC_ATTR stop_card_dma (grub_pci_device_t dev,
@@ -373,7 +379,8 @@ index 0000000..0e3deee
+ if (driver_id == GRUB_VIDEO_DRIVER_NONE)
+ return 1;
+
-+ err = grub_video_get_info_and_fini (&mode_info, &framebuffer);
++// err = grub_video_get_info_and_fini (&mode_info, &framebuffer);
++ err = grub_video_get_info_and_carry_on (&mode_info, &framebuffer);
+
+ if (err)
+ {
@@ -381,6 +388,8 @@ index 0000000..0e3deee
+ return 1;
+ }
+
++ grub_printf("Frame buffer is %d (stride 0x%x) x %d @ %p\n",mode_info.width,mode_info.pitch,mode_info.height, framebuffer);
++
+ bvi->orig_video_isVGA=0x23; /*XXX: what is 0x23? */
+
+ bvi->lfb_linelength=mode_info.pitch;
@@ -441,13 +450,13 @@ index 0000000..0e3deee
+ if (hdr->magic != XEN_EFI_MAGIC)
+ return grub_error (GRUB_ERR_BAD_ARGUMENT, "No EFI support in hypervisor");
+
-+ grub_printf("base addr is %p\n",base);
++ grub_printf("\nbase addr is %p\nhdr found at %p\n",base,hdr);
+
-+ realmode_available=(grub_uint8_t *)hdr->realmode_available;
++ realmode_available=(grub_uint8_t *)(grub_size_t)hdr->realmode_available;
+ grub_printf("realmode_available was %x@%p\n",(int) *realmode_available,realmode_available);
+ *realmode_available=0;
+
-+ efi_loader_signature=(grub_uint64_t*)hdr->efi_loader_signature;
++ efi_loader_signature=(grub_uint64_t*)(grub_size_t)hdr->efi_loader_signature;
+
+#if defined(__x86_64__)
+ *efi_loader_signature=XEN_LOADER_GRUB_64;
@@ -457,26 +466,145 @@ index 0000000..0e3deee
+ *efi_loader_signature=0;
+#endif
+
-+ efi_system_table_addr=(grub_uint64_t*)hdr->efi_system_table_addr;
++ efi_system_table_addr=(grub_uint64_t*)(grub_size_t)hdr->efi_system_table_addr;
+
+ grub_printf("efi_system_table_addr was %llx@%p\n",(long long unsigned) *efi_system_table_addr, efi_system_table_addr);
+
-+ *efi_system_table_addr= (grub_uint64_t) grub_efi_system_table;
++ *efi_system_table_addr= (grub_uint64_t) (grub_size_t) grub_efi_system_table;
+
-+ boot_vid_mode=(grub_uint16_t *)hdr->boot_vid_mode;
++ boot_vid_mode=(grub_uint16_t *)(grub_size_t)hdr->boot_vid_mode;
+ grub_printf("boot_vid_mode was 0x%x@%p\n",(int) *boot_vid_mode,boot_vid_mode);
+ *boot_vid_mode=0xf00;
+
-+ bvi=(struct xen_boot_video_info *)hdr->boot_vid_info;
++ bvi=(struct xen_boot_video_info *)(grub_size_t)hdr->boot_vid_info;
+ grub_printf("boot_vid_info @%p\n",bvi);
+
+ xen_setup_video (bvi);
+
+ fake_bios_data();
-+ stop_dma();
+
+ return GRUB_ERR_NONE;
+}
+
+
+
+diff --git a/grub-core/video/efi_gop.c b/grub-core/video/efi_gop.c
+index d14ae98..6045b21 100644
+--- a/grub-core/video/efi_gop.c
++++ b/grub-core/video/efi_gop.c
+@@ -378,6 +378,17 @@ grub_video_gop_set_active_render_target (struct grub_video_render_target *target
+ }
+
+ static grub_err_t
++grub_video_gop_get_info_and_carry_on (struct grub_video_mode_info *mode_info,
++ void **framebuf)
++{
++ grub_memcpy (mode_info, &(framebuffer.mode_info), sizeof (*mode_info));
++ *framebuf = (char *) framebuffer.ptr;
++
++ return GRUB_ERR_NONE;
++}
++
++
++static grub_err_t
+ grub_video_gop_get_info_and_fini (struct grub_video_mode_info *mode_info,
+ void **framebuf)
+ {
+@@ -389,6 +400,7 @@ grub_video_gop_get_info_and_fini (struct grub_video_mode_info *mode_info,
+ return GRUB_ERR_NONE;
+ }
+
++
+ static struct grub_video_adapter grub_video_gop_adapter =
+ {
+ .name = "EFI GOP driver",
+@@ -400,6 +412,7 @@ static struct grub_video_adapter grub_video_gop_adapter =
+ .fini = grub_video_gop_fini,
+ .setup = grub_video_gop_setup,
+ .get_info = grub_video_fb_get_info,
++ .get_info_and_carry_on = grub_video_gop_get_info_and_carry_on,
+ .get_info_and_fini = grub_video_gop_get_info_and_fini,
+ .set_palette = grub_video_fb_set_palette,
+ .get_palette = grub_video_fb_get_palette,
+diff --git a/grub-core/video/efi_uga.c b/grub-core/video/efi_uga.c
+index 1e709a5..af26f99 100644
+--- a/grub-core/video/efi_uga.c
++++ b/grub-core/video/efi_uga.c
+@@ -289,6 +289,16 @@ grub_video_uga_set_active_render_target (struct grub_video_render_target *target
+ }
+
+ static grub_err_t
++grub_video_uga_get_info_and_carry_on (struct grub_video_mode_info *mode_info,
++ void **framebuf)
++{
++ grub_memcpy (mode_info, &(framebuffer.mode_info), sizeof (*mode_info));
++ *framebuf = (char *) framebuffer.ptr;
++
++ return GRUB_ERR_NONE;
++}
++
++static grub_err_t
+ grub_video_uga_get_info_and_fini (struct grub_video_mode_info *mode_info,
+ void **framebuf)
+ {
+@@ -311,6 +321,7 @@ static struct grub_video_adapter grub_video_uga_adapter =
+ .fini = grub_video_uga_fini,
+ .setup = grub_video_uga_setup,
+ .get_info = grub_video_fb_get_info,
++ .get_info_and_carry_on = grub_video_uga_get_info_and_carry_on,
+ .get_info_and_fini = grub_video_uga_get_info_and_fini,
+ .set_palette = grub_video_fb_set_palette,
+ .get_palette = grub_video_fb_get_palette,
+diff --git a/grub-core/video/video.c b/grub-core/video/video.c
+index 6a1d473..3fbfed8 100644
+--- a/grub-core/video/video.c
++++ b/grub-core/video/video.c
+@@ -72,6 +72,24 @@ grub_video_get_driver_id (void)
+
+ /* Get information about active video mode. */
+ grub_err_t
++grub_video_get_info_and_carry_on (struct grub_video_mode_info *mode_info,
++ void **framebuffer)
++{
++ grub_err_t err;
++
++ if (! grub_video_adapter_active)
++ return grub_error (GRUB_ERR_BAD_DEVICE, "no video mode activated");
++
++ err = grub_video_adapter_active->get_info_and_carry_on (mode_info, framebuffer);
++ if (err)
++ return err;
++
++ return GRUB_ERR_NONE;
++}
++
++
++/* Get information about active video mode. */
++grub_err_t
+ grub_video_get_info_and_fini (struct grub_video_mode_info *mode_info,
+ void **framebuffer)
+ {
+diff --git a/include/grub/video.h b/include/grub/video.h
+index 97bd85b..8047512 100644
+--- a/include/grub/video.h
++++ b/include/grub/video.h
+@@ -255,6 +255,9 @@ struct grub_video_adapter
+
+ grub_err_t (*get_info) (struct grub_video_mode_info *mode_info);
+
++ grub_err_t (*get_info_and_carry_on) (struct grub_video_mode_info *mode_info,
++ void **framebuffer);
++
+ grub_err_t (*get_info_and_fini) (struct grub_video_mode_info *mode_info,
+ void **framebuffer);
+
+@@ -349,6 +352,9 @@ grub_err_t EXPORT_FUNC (grub_video_get_info) (struct grub_video_mode_info *mode_
+ sure that framebuffer address doesn't change. To ensure this abstraction
+ grub_video_get_info_and_fini is the only function supplying framebuffer
+ address. */
++grub_err_t EXPORT_FUNC (grub_video_get_info_and_carry_on) (struct grub_video_mode_info *mode_info,
++ void **framebuffer);
++
+ grub_err_t EXPORT_FUNC (grub_video_get_info_and_fini) (struct grub_video_mode_info *mode_info,
+ void **framebuffer);
+
diff --git a/master/status b/master/status
index 3b3541d..e69de29 100644
--- a/master/status
+++ b/master/status
@@ -1,53 +0,0 @@
-debian/olpc_prefix_hack.patch
-debian/core_in_fs.patch
-debian/dpkg_version_comparison.patch
-debian/grub_legacy_0_based_partitions.patch
-debian/disable_floppies.patch
-debian/grub.cfg_400.patch
-debian/gfxpayload_keep_default.patch
-debian/mkrescue_diet.patch
-debian/mkconfig_skip_dmcrypt.patch
-debian/install_stage2_confusion.patch
-debian/qemu_img_exists.patch
-debian/branch_devmapper.patch
-debian/branch_squash.patch
-debian/branch_longlinuxcmd.patch
-debian/branch_parse-color.patch
-debian/branch_embed-sectors.patch
-debian/branch_fuse.patch
-debian/mkrescue_efi_modules.patch
-debian/mkconfig_loopback.patch
-debian/lazy_stat.patch
-debian/btrfs_stat.patch
-debian/partition_performance.patch
-debian/kfreebsd-9_ada_devices.patch
-debian/gfxterm_background.patch
-debian/zfs_packed_la_array.patch
-debian/xen_replace.patch
-debian/kfreebsd_mfi_devices.patch
-debian/probe_canonicalise.patch
-debian/mkconfig_skip_readme.patch
-debian/kfreebsd_lvm.patch
-debian/zfs_update.patch
-debian/no_libzfs.patch
-debian/xfs_invalid_bmap.patch
-debian/handle_new_autotools.patch
-debian/bash-completion_identifiers.patch
-debian/mkconfig_gnumach.patch
-debian/gcc_4_6_space.patch
-debian/lzo.patch
-debian/fat_uuid.patch
-debian/efiemu_fix.patch
-debian/4k_sectors.patch
-debian/efi_disk_cache.patch
-debian/dirlen.patch
-debian/hurd.patch
-debian/userland-part.patch
-jmm/efi_call_7-bis
-jmm/efi-load-drivers-bis
-jmm/networking-bis
-jmm/efi-sni-bis
-jmm/copy-acpi-and-dmi-for-mb-kernels
-jmm/disable-all-pci-dma-on-boot
-jmm/xen-multiboot
-endstop