Support v2 xnu boot arguments.
* grub-core/loader/i386/xnu.c (grub_cpu_xnu_fill_devicetree): New argument fsbfreq_out. (grub_xnu_set_video): Receive an argument grub_xnu_boot_params_common. (grub_xnu_boot): Support v2 arguments. Disable PIC so that APIC can be used. * grub-core/loader/machoXX.c (grub_macho_load): New argument darwin_version. * grub-core/loader/xnu.c (grub_xnu_darwin_version): New variable. * include/grub/i386/xnu.h (grub_xnu_boot_params_common): New struct. (grub_xnu_boot_params): Rename to ... (grub_xnu_boot_params_v1): ...this. Use grub_xnu_boot_params_common. (grub_xnu_boot_params_v2): New struct.
This commit is contained in:
parent
dc693fe67c
commit
83ddae2333
7 changed files with 154 additions and 52 deletions
|
@ -28,10 +28,8 @@
|
|||
#define GRUB_XNU_PAGESIZE 4096
|
||||
typedef grub_uint32_t grub_xnu_ptr_t;
|
||||
|
||||
struct grub_xnu_boot_params
|
||||
struct grub_xnu_boot_params_common
|
||||
{
|
||||
grub_uint16_t verminor;
|
||||
grub_uint16_t vermajor;
|
||||
/* Command line passed to xnu. */
|
||||
grub_uint8_t cmdline[1024];
|
||||
|
||||
|
@ -59,17 +57,50 @@ struct grub_xnu_boot_params
|
|||
grub_xnu_ptr_t heap_start;
|
||||
/* Last used address by kernel or boot structures minus previous value. */
|
||||
grub_uint32_t heap_size;
|
||||
|
||||
/* First memory page containing runtime code or data. */
|
||||
grub_uint32_t efi_runtime_first_page;
|
||||
/* First memory page containing runtime code or data minus previous value. */
|
||||
grub_uint32_t efi_runtime_npages;
|
||||
} __attribute__ ((packed));
|
||||
|
||||
struct grub_xnu_boot_params_v1
|
||||
{
|
||||
grub_uint16_t verminor;
|
||||
grub_uint16_t vermajor;
|
||||
struct grub_xnu_boot_params_common common;
|
||||
|
||||
grub_uint32_t efi_system_table;
|
||||
/* Size of grub_efi_uintn_t in bits. */
|
||||
grub_uint8_t efi_uintnbits;
|
||||
} __attribute__ ((packed));
|
||||
#define GRUB_XNU_BOOTARGS_VERMINOR 5
|
||||
#define GRUB_XNU_BOOTARGS_VERMAJOR 1
|
||||
#define GRUB_XNU_BOOTARGSV1_VERMINOR 5
|
||||
#define GRUB_XNU_BOOTARGSV1_VERMAJOR 1
|
||||
|
||||
struct grub_xnu_boot_params_v2
|
||||
{
|
||||
grub_uint16_t verminor;
|
||||
grub_uint16_t vermajor;
|
||||
|
||||
/* Size of grub_efi_uintn_t in bits. */
|
||||
grub_uint8_t efi_uintnbits;
|
||||
grub_uint8_t unused[3];
|
||||
|
||||
struct grub_xnu_boot_params_common common;
|
||||
|
||||
grub_uint64_t efi_runtime_first_page_virtual;
|
||||
grub_uint32_t efi_system_table;
|
||||
grub_uint32_t unused2[11];
|
||||
grub_uint64_t fsbfreq;
|
||||
grub_uint32_t unused3[734];
|
||||
} __attribute__ ((packed));
|
||||
#define GRUB_XNU_BOOTARGSV2_VERMINOR 0
|
||||
#define GRUB_XNU_BOOTARGSV2_VERMAJOR 2
|
||||
|
||||
union grub_xnu_boot_params_any
|
||||
{
|
||||
struct grub_xnu_boot_params_v1 v1;
|
||||
struct grub_xnu_boot_params_v2 v2;
|
||||
};
|
||||
|
||||
struct grub_xnu_devprop_header
|
||||
{
|
||||
|
@ -114,5 +145,4 @@ extern grub_uint32_t grub_xnu_stack;
|
|||
extern grub_uint32_t grub_xnu_arg1;
|
||||
extern char grub_xnu_cmdline[1024];
|
||||
grub_err_t grub_xnu_boot (void);
|
||||
grub_err_t grub_cpu_xnu_fill_devicetree (void);
|
||||
#endif
|
||||
|
|
|
@ -58,9 +58,9 @@ grub_uint64_t grub_macho_get_entry_point64 (grub_macho_t macho);
|
|||
/* Ignore BSS segments when loading. */
|
||||
#define GRUB_MACHO_NOBSS 0x1
|
||||
grub_err_t grub_macho_load32 (grub_macho_t macho, const char *filename,
|
||||
char *offset, int flags);
|
||||
char *offset, int flags, int *darwin_version);
|
||||
grub_err_t grub_macho_load64 (grub_macho_t macho, const char *filename,
|
||||
char *offset, int flags);
|
||||
char *offset, int flags, int *darwin_version);
|
||||
|
||||
/* Like filesize and file_read but take only 32-bit part
|
||||
for current architecture. */
|
||||
|
|
|
@ -115,4 +115,5 @@ typedef enum {GRUB_XNU_BITMAP_CENTER, GRUB_XNU_BITMAP_STRETCH}
|
|||
extern grub_xnu_bitmap_mode_t grub_xnu_bitmap_mode;
|
||||
extern int grub_xnu_is_64bit;
|
||||
extern grub_addr_t grub_xnu_heap_target_start;
|
||||
extern int grub_xnu_darwin_version;
|
||||
#endif
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue