From: Vladimir 'phcoder' Serbinenko Date: Fri, 18 Dec 2009 14:20:21 +0000 (+0100) Subject: 2009-12-18 Vladimir Serbinenko X-Git-Tag: 1.98~307 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=b045f00a84addb4aee6a1f9a2459d3900ce11999;p=thirdparty%2Fgrub.git 2009-12-18 Vladimir Serbinenko Fix potential EfiEmu double prepare. * efiemu/main.c (prepared): New variable (grub_efiemu_unload): Set prepare to '0'. (grub_efiemu_prepare): Return if already prepared. Set prepared. set_virtual_address_map support. * include/grub/efi/efi.h (grub_efi_set_virtual_address_map): New prototype. * include/grub/efiemu/efiemu.h (grub_efiemu_write_sym_markers): New prototype. (grub_efiemu_crc32): Likewise. (grub_efiemu_crc64): Likewise. (grub_efiemu_set_virtual_address_map): Likewise. * include/grub/autoefi.h (grub_autoefi_exit_boot_services): New definition. (grub_autoefi_set_virtual_address_map): Likewise. * kern/efi/efi.c (grub_efi_set_virtual_address_map): New function. * loader/i386/xnu.c (grub_xnu_boot): Call set_virtual_address_map. Restructure flow to accomodate it. * efiemu/prepare.c (grub_efiemu_prepare): Support set_virtual_address_map. (grub_efiemu_crc): Recompute CRC32. * efiemu/runtime/efiemu.c (ptv_relocated): Renamed to ... (efiemu_ptv_relocated): ... this. Made global. All users updated. * efiemu/symbols.c (relocated_handle): New variable. (grub_efiemu_free_syms): Free relocated_handle. (grub_efiemu_alloc_syms): Allocate relocated_handle. (grub_efiemu_write_sym_markers): New function. (grub_efiemu_set_virtual_address_map): Likewise. Newer XNU parameters. * include/grub/i386/xnu.h (GRUB_XNU_BOOTARGS_VERMINOR): Change to 5. * include/grub/xnu.h (grub_xnu_extheader): Add nameaddr and namesize. (grub_xnu_fill_devicetree): New prototype. (grub_xnu_heap_real_start): New variable. * loader/xnu.c (get_name_ptr): New function. (grub_xnu_load_driver): Fill namelen and name. 64-bit xnu support. * conf/i386-efi.rmk (xnu_mod_SOURCES): Add 'loader/macho32.c' and 'loader/macho64.c'. * conf/i386-pc.rmk: Likewise. * conf/x86_64-efi.rmk: Likewise. * include/grub/i386/macho.h (grub_macho_thread64): New structure. * include/grub/xnu.h (grub_xnu_is_64bit): New variable. * include/grub/macho.h (grub_macho_segment64): New structure. * include/grub/machoload.h (grub_macho32_size): Renamed from ... (grub_macho_size32): ... to this. (grub_macho32_get_entry_point): Renamed from ... (grub_macho_get_entry_point32): ... to this. (grub_macho_contains_macho64): New prototype. (grub_macho_size64): Likewise. (grub_macho_get_entry_point64): Likewise. (grub_macho32_load): Renamed from ... (grub_macho_load32): ... to this. (grub_macho32_filesize): Renamed from ... (grub_macho_filesize32): ... to this. (grub_macho32_readfile): Renamed from ... (grub_macho_readfile32): ... to this. (grub_macho_filesize64): New prototype. (grub_macho_readfile64): Likewise. (grub_macho_parse32): Likewise. (grub_macho_parse64): Likewise. * loader/macho.c: Split into ... * loader/machoXX.c: ... and this. Replace 32 with XX. * loader/macho32.c: New file. * loader/macho64.c: Likewise. * loader/xnu.c (grub_xnu_is_64bit): New variable. (grub_cmd_xnu_kernel): Make 32-bit only. (grub_cmd_xnu_kernel64): New function. (grub_xnu_load_driver): Support Mach-O 64. (grub_cmd_xnu_mkext): Likewise. * util/grub.d/30_os-prober.in (osx_entry): New function. Generate entries for 64-bit boot too. Eliminate ad-hoc tree format in XNU and EfiEmu. * efiemu/main.c (grub_efiemu_prepare): Update comment. * efiemu/pnvram.c: Rewritten to use environment variables. All users updated. Inline utf16_to_utf8. * kern/misc.c (grub_utf16_to_utf8): Move from here ... * include/grub/charset.h (grub_utf16_to_utf8): ... to here. Inlined. All users updated. * include/grub/misc.h (grub_utf16_to_utf8): Removed. * bus/usb/usb.c (grub_usb_get_string): Move from here ... * commands/usbtest.c (grub_usb_get_string): ... move here. (usb_print_str): Fix error handling. * include/grub/usb.h (grub_usb_get_string): Remove. UTF-8 to UTF-16 transformation. * conf/common.rmk (pkglib_MODULES): Add charset.mod (charset_mod_SOURCES): New variable. (charset_mod_CFLAGS): Likewise. (charset_mod_LDFLAGS): Likewise. * include/grub/utf.h: New file. * lib/utf.c: New file. (Based on grub_utf8_to_ucs4 from kern/misc.c) Support for device properties. * include/grub/i386/xnu.h (grub_xnu_devprop_header): New structure. (grub_xnu_devprop_device_header): Likewise. (grub_xnu_devprop_device_descriptor): Likewise. (grub_xnu_devprop_add_device): New prototype. (grub_xnu_devprop_remove_device): Likewise. (grub_xnu_devprop_remove_property): Likewise. (grub_xnu_devprop_add_property_utf8): Likewise. (grub_xnu_devprop_add_property_utf16): Likewise. (grub_cpu_xnu_init): Likewise. (grub_cpu_xnu_fini): Likewise. (grub_cpu_xnu_unload): Likewise. * loader/i386/xnu.c (grub_xnu_devprop_device_descriptor): New structure. (property_descriptor): Likewise. (devices): New variable. (grub_xnu_devprop_remove_property): New function. (grub_xnu_devprop_add_device): Likewise. (grub_xnu_devprop_remove_device): Likewise. (grub_xnu_devprop_add_property): Likewise. (grub_xnu_devprop_add_property_utf8): Likewise. (grub_xnu_devprop_add_property_utf16): Likewise. (hextoval): Likewise. (grub_cpu_xnu_fill_devprop): Likewise. (grub_cmd_devprop_load): Likewise. (grub_xnu_boot): Call grub_cpu_xnu_fill_devprop, grub_xnu_fill_devicetree, grub_xnu_fill_devicetree (cmd_devprop_load): New variable. (grub_cpu_xnu_init): New function. (grub_cpu_xnu_fini): Likewise. * loader/i386/xnu.c (grub_xnu_unload): Call grub_cpu_xnu_unload. * loader/xnu.c (grub_xnu_parse_devtree): Remove. (grub_cmd_xnu_devtree): Likewise. (hextoval): New function. (unescape): Likewise. (grub_xnu_fill_devicetree): Likewise. * util/grub.d/30_os-prober.in: Load devprop.bin. Don't load devtree.txt. * util/i386/efi/grub-dumpdevtree: Generate devprop.bin. --- b045f00a84addb4aee6a1f9a2459d3900ce11999 diff --cc ChangeLog index d7d6ed847,d7d6ed847..e2606765a --- a/ChangeLog +++ b/ChangeLog @@@ -1,3 -1,3 +1,150 @@@ ++2009-12-18 Vladimir Serbinenko ++ ++ Fix potential EfiEmu double prepare. ++ ++ * efiemu/main.c (prepared): New variable ++ (grub_efiemu_unload): Set prepare to '0'. ++ (grub_efiemu_prepare): Return if already prepared. Set prepared. ++ ++ set_virtual_address_map support. ++ ++ * include/grub/efi/efi.h (grub_efi_set_virtual_address_map): New ++ prototype. ++ * include/grub/efiemu/efiemu.h (grub_efiemu_write_sym_markers): New ++ prototype. ++ (grub_efiemu_crc32): Likewise. ++ (grub_efiemu_crc64): Likewise. ++ (grub_efiemu_set_virtual_address_map): Likewise. ++ * include/grub/autoefi.h (grub_autoefi_exit_boot_services): ++ New definition. ++ (grub_autoefi_set_virtual_address_map): Likewise. ++ * kern/efi/efi.c (grub_efi_set_virtual_address_map): New function. ++ * loader/i386/xnu.c (grub_xnu_boot): Call set_virtual_address_map. ++ Restructure flow to accomodate it. ++ * efiemu/prepare.c (grub_efiemu_prepare): Support set_virtual_address_map. ++ (grub_efiemu_crc): Recompute CRC32. ++ * efiemu/runtime/efiemu.c (ptv_relocated): Renamed to ... ++ (efiemu_ptv_relocated): ... this. Made global. All users updated. ++ * efiemu/symbols.c (relocated_handle): New variable. ++ (grub_efiemu_free_syms): Free relocated_handle. ++ (grub_efiemu_alloc_syms): Allocate relocated_handle. ++ (grub_efiemu_write_sym_markers): New function. ++ (grub_efiemu_set_virtual_address_map): Likewise. ++ ++ Newer XNU parameters. ++ ++ * include/grub/i386/xnu.h (GRUB_XNU_BOOTARGS_VERMINOR): Change to 5. ++ * include/grub/xnu.h (grub_xnu_extheader): Add nameaddr and namesize. ++ (grub_xnu_fill_devicetree): New prototype. ++ (grub_xnu_heap_real_start): New variable. ++ * loader/xnu.c (get_name_ptr): New function. ++ (grub_xnu_load_driver): Fill namelen and name. ++ ++ 64-bit xnu support. ++ ++ * conf/i386-efi.rmk (xnu_mod_SOURCES): Add 'loader/macho32.c' ++ and 'loader/macho64.c'. ++ * conf/i386-pc.rmk: Likewise. ++ * conf/x86_64-efi.rmk: Likewise. ++ * include/grub/i386/macho.h (grub_macho_thread64): New structure. ++ * include/grub/xnu.h (grub_xnu_is_64bit): New variable. ++ * include/grub/macho.h (grub_macho_segment64): New structure. ++ * include/grub/machoload.h (grub_macho32_size): Renamed from ... ++ (grub_macho_size32): ... to this. ++ (grub_macho32_get_entry_point): Renamed from ... ++ (grub_macho_get_entry_point32): ... to this. ++ (grub_macho_contains_macho64): New prototype. ++ (grub_macho_size64): Likewise. ++ (grub_macho_get_entry_point64): Likewise. ++ (grub_macho32_load): Renamed from ... ++ (grub_macho_load32): ... to this. ++ (grub_macho32_filesize): Renamed from ... ++ (grub_macho_filesize32): ... to this. ++ (grub_macho32_readfile): Renamed from ... ++ (grub_macho_readfile32): ... to this. ++ (grub_macho_filesize64): New prototype. ++ (grub_macho_readfile64): Likewise. ++ (grub_macho_parse32): Likewise. ++ (grub_macho_parse64): Likewise. ++ * loader/macho.c: Split into ... ++ * loader/machoXX.c: ... and this. Replace 32 with XX. ++ * loader/macho32.c: New file. ++ * loader/macho64.c: Likewise. ++ * loader/xnu.c (grub_xnu_is_64bit): New variable. ++ (grub_cmd_xnu_kernel): Make 32-bit only. ++ (grub_cmd_xnu_kernel64): New function. ++ (grub_xnu_load_driver): Support Mach-O 64. ++ (grub_cmd_xnu_mkext): Likewise. ++ * util/grub.d/30_os-prober.in (osx_entry): New function. ++ Generate entries for 64-bit boot too. ++ ++ Eliminate ad-hoc tree format in XNU and EfiEmu. ++ ++ * efiemu/main.c (grub_efiemu_prepare): Update comment. ++ * efiemu/pnvram.c: Rewritten to use environment variables. ++ All users updated. ++ ++ Inline utf16_to_utf8. ++ ++ * kern/misc.c (grub_utf16_to_utf8): Move from here ... ++ * include/grub/charset.h (grub_utf16_to_utf8): ... to here. Inlined. ++ All users updated. ++ * include/grub/misc.h (grub_utf16_to_utf8): Removed. ++ ++ * bus/usb/usb.c (grub_usb_get_string): Move from here ... ++ * commands/usbtest.c (grub_usb_get_string): ... move here. ++ (usb_print_str): Fix error handling. ++ * include/grub/usb.h (grub_usb_get_string): Remove. ++ ++ UTF-8 to UTF-16 transformation. ++ ++ * conf/common.rmk (pkglib_MODULES): Add charset.mod ++ (charset_mod_SOURCES): New variable. ++ (charset_mod_CFLAGS): Likewise. ++ (charset_mod_LDFLAGS): Likewise. ++ * include/grub/utf.h: New file. ++ * lib/utf.c: New file. (Based on grub_utf8_to_ucs4 from kern/misc.c) ++ ++ Support for device properties. ++ ++ * include/grub/i386/xnu.h (grub_xnu_devprop_header): New structure. ++ (grub_xnu_devprop_device_header): Likewise. ++ (grub_xnu_devprop_device_descriptor): Likewise. ++ (grub_xnu_devprop_add_device): New prototype. ++ (grub_xnu_devprop_remove_device): Likewise. ++ (grub_xnu_devprop_remove_property): Likewise. ++ (grub_xnu_devprop_add_property_utf8): Likewise. ++ (grub_xnu_devprop_add_property_utf16): Likewise. ++ (grub_cpu_xnu_init): Likewise. ++ (grub_cpu_xnu_fini): Likewise. ++ (grub_cpu_xnu_unload): Likewise. ++ * loader/i386/xnu.c (grub_xnu_devprop_device_descriptor): New structure. ++ (property_descriptor): Likewise. ++ (devices): New variable. ++ (grub_xnu_devprop_remove_property): New function. ++ (grub_xnu_devprop_add_device): Likewise. ++ (grub_xnu_devprop_remove_device): Likewise. ++ (grub_xnu_devprop_add_property): Likewise. ++ (grub_xnu_devprop_add_property_utf8): Likewise. ++ (grub_xnu_devprop_add_property_utf16): Likewise. ++ (hextoval): Likewise. ++ (grub_cpu_xnu_fill_devprop): Likewise. ++ (grub_cmd_devprop_load): Likewise. ++ (grub_xnu_boot): Call grub_cpu_xnu_fill_devprop, ++ grub_xnu_fill_devicetree, grub_xnu_fill_devicetree ++ (cmd_devprop_load): New variable. ++ (grub_cpu_xnu_init): New function. ++ (grub_cpu_xnu_fini): Likewise. ++ * loader/i386/xnu.c (grub_xnu_unload): Call grub_cpu_xnu_unload. ++ * loader/xnu.c (grub_xnu_parse_devtree): Remove. ++ (grub_cmd_xnu_devtree): Likewise. ++ (hextoval): New function. ++ (unescape): Likewise. ++ (grub_xnu_fill_devicetree): Likewise. ++ ++ * util/grub.d/30_os-prober.in: Load devprop.bin. Don't load devtree.txt. ++ * util/i386/efi/grub-dumpdevtree: Generate devprop.bin. ++ 2009-12-18 Vladimir Serbinenko Workaround for broken ATI VBE.