merge mainline into crypto
This commit is contained in:
commit
ba136b293a
165 changed files with 4910 additions and 1858 deletions
|
@ -26,8 +26,10 @@
|
|||
# include <grub/efi/efi.h>
|
||||
# define grub_autoefi_get_memory_map grub_efi_get_memory_map
|
||||
# define grub_autoefi_finish_boot_services grub_efi_finish_boot_services
|
||||
# define grub_autoefi_exit_boot_services grub_efi_exit_boot_services
|
||||
# define grub_autoefi_system_table grub_efi_system_table
|
||||
# define grub_autoefi_mmap_iterate grub_machine_mmap_iterate
|
||||
# define grub_autoefi_set_virtual_address_map grub_efi_set_virtual_address_map
|
||||
static inline grub_err_t grub_autoefi_prepare (void)
|
||||
{
|
||||
return GRUB_ERR_NONE;
|
||||
|
@ -53,9 +55,11 @@ static inline grub_err_t grub_autoefi_prepare (void)
|
|||
# include <grub/efiemu/efiemu.h>
|
||||
# define grub_autoefi_get_memory_map grub_efiemu_get_memory_map
|
||||
# define grub_autoefi_finish_boot_services grub_efiemu_finish_boot_services
|
||||
# define grub_autoefi_exit_boot_services grub_efiemu_exit_boot_services
|
||||
# define grub_autoefi_system_table grub_efiemu_system_table
|
||||
# define grub_autoefi_mmap_iterate grub_efiemu_mmap_iterate
|
||||
# define grub_autoefi_prepare grub_efiemu_prepare
|
||||
# define grub_autoefi_set_virtual_address_map grub_efiemu_set_virtual_address_map
|
||||
# define GRUB_AUTOEFI_MEMORY_AVAILABLE GRUB_EFIEMU_MEMORY_AVAILABLE
|
||||
# define GRUB_AUTOEFI_MEMORY_RESERVED GRUB_EFIEMU_MEMORY_RESERVED
|
||||
# define GRUB_AUTOEFI_MEMORY_ACPI GRUB_EFIEMU_MEMORY_ACPI
|
||||
|
|
112
include/grub/charset.h
Normal file
112
include/grub/charset.h
Normal file
|
@ -0,0 +1,112 @@
|
|||
/*
|
||||
* GRUB -- GRand Unified Bootloader
|
||||
* Copyright (C) 1999,2000,2001,2002,2003,2004,2005,2006,2007,2008,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/>.
|
||||
*/
|
||||
|
||||
#ifndef GRUB_CHARSET_HEADER
|
||||
#define GRUB_CHARSET_HEADER 1
|
||||
|
||||
#include <grub/types.h>
|
||||
|
||||
#define GRUB_UINT8_1_LEADINGBIT 0x80
|
||||
#define GRUB_UINT8_2_LEADINGBITS 0xc0
|
||||
#define GRUB_UINT8_3_LEADINGBITS 0xe0
|
||||
#define GRUB_UINT8_4_LEADINGBITS 0xf0
|
||||
#define GRUB_UINT8_5_LEADINGBITS 0xf8
|
||||
#define GRUB_UINT8_6_LEADINGBITS 0xfc
|
||||
#define GRUB_UINT8_7_LEADINGBITS 0xfe
|
||||
|
||||
#define GRUB_UINT8_1_TRAILINGBIT 0x01
|
||||
#define GRUB_UINT8_2_TRAILINGBITS 0x03
|
||||
#define GRUB_UINT8_3_TRAILINGBITS 0x07
|
||||
#define GRUB_UINT8_4_TRAILINGBITS 0x0f
|
||||
#define GRUB_UINT8_5_TRAILINGBITS 0x1f
|
||||
#define GRUB_UINT8_6_TRAILINGBITS 0x3f
|
||||
|
||||
#define GRUB_UCS2_LIMIT 0x10000
|
||||
#define GRUB_UTF16_UPPER_SURROGATE(code) \
|
||||
(0xD800 + ((((code) - GRUB_UCS2_LIMIT) >> 12) & 0xfff))
|
||||
#define GRUB_UTF16_LOWER_SURROGATE(code) \
|
||||
(0xDC00 + (((code) - GRUB_UCS2_LIMIT) & 0xfff))
|
||||
|
||||
grub_ssize_t
|
||||
grub_utf8_to_utf16 (grub_uint16_t *dest, grub_size_t destsize,
|
||||
const grub_uint8_t *src, grub_size_t srcsize,
|
||||
const grub_uint8_t **srcend);
|
||||
|
||||
/* Convert UTF-16 to UTF-8. */
|
||||
static inline grub_uint8_t *
|
||||
grub_utf16_to_utf8 (grub_uint8_t *dest, grub_uint16_t *src,
|
||||
grub_size_t size)
|
||||
{
|
||||
grub_uint32_t code_high = 0;
|
||||
|
||||
while (size--)
|
||||
{
|
||||
grub_uint32_t code = *src++;
|
||||
|
||||
if (code_high)
|
||||
{
|
||||
if (code >= 0xDC00 && code <= 0xDFFF)
|
||||
{
|
||||
/* Surrogate pair. */
|
||||
code = ((code_high - 0xD800) << 12) + (code - 0xDC00) + 0x10000;
|
||||
|
||||
*dest++ = (code >> 18) | 0xF0;
|
||||
*dest++ = ((code >> 12) & 0x3F) | 0x80;
|
||||
*dest++ = ((code >> 6) & 0x3F) | 0x80;
|
||||
*dest++ = (code & 0x3F) | 0x80;
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Error... */
|
||||
*dest++ = '?';
|
||||
}
|
||||
|
||||
code_high = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (code <= 0x007F)
|
||||
*dest++ = code;
|
||||
else if (code <= 0x07FF)
|
||||
{
|
||||
*dest++ = (code >> 6) | 0xC0;
|
||||
*dest++ = (code & 0x3F) | 0x80;
|
||||
}
|
||||
else if (code >= 0xD800 && code <= 0xDBFF)
|
||||
{
|
||||
code_high = code;
|
||||
continue;
|
||||
}
|
||||
else if (code >= 0xDC00 && code <= 0xDFFF)
|
||||
{
|
||||
/* Error... */
|
||||
*dest++ = '?';
|
||||
}
|
||||
else
|
||||
{
|
||||
*dest++ = (code >> 12) | 0xE0;
|
||||
*dest++ = ((code >> 6) & 0x3F) | 0x80;
|
||||
*dest++ = (code & 0x3F) | 0x80;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return dest;
|
||||
}
|
||||
|
||||
#endif
|
|
@ -21,6 +21,7 @@
|
|||
#define GRUB_EFI_API_HEADER 1
|
||||
|
||||
#include <grub/types.h>
|
||||
#include <grub/symbol.h>
|
||||
|
||||
/* For consistency and safety, we name the EFI-defined types differently.
|
||||
All names are transformed into lower case, _t appended, and
|
||||
|
|
|
@ -55,6 +55,10 @@ grub_efi_device_path_t *
|
|||
EXPORT_FUNC(grub_efi_get_device_path) (grub_efi_handle_t handle);
|
||||
int EXPORT_FUNC(grub_efi_exit_boot_services) (grub_efi_uintn_t map_key);
|
||||
int EXPORT_FUNC (grub_efi_finish_boot_services) (void);
|
||||
grub_err_t EXPORT_FUNC (grub_efi_set_virtual_address_map) (grub_efi_uintn_t memory_map_size,
|
||||
grub_efi_uintn_t descriptor_size,
|
||||
grub_efi_uint32_t descriptor_version,
|
||||
grub_efi_memory_descriptor_t *virtual_map);
|
||||
|
||||
void grub_efi_mm_init (void);
|
||||
void grub_efi_mm_fini (void);
|
||||
|
|
|
@ -268,9 +268,19 @@ void grub_efiemu_free_syms (void);
|
|||
grub_err_t grub_efiemu_write_value (void * addr, grub_uint32_t value,
|
||||
int plus_handle,
|
||||
int minus_handle, int ptv_needed, int size);
|
||||
grub_err_t grub_efiemu_write_sym_markers (void);
|
||||
grub_err_t grub_efiemu_pnvram (void);
|
||||
grub_err_t grub_efiemu_prepare (void);
|
||||
char *grub_efiemu_get_default_core_name (void);
|
||||
void grub_efiemu_pnvram_cmd_unregister (void);
|
||||
grub_err_t grub_efiemu_autocore (void);
|
||||
grub_err_t grub_efiemu_crc32 (void);
|
||||
grub_err_t grub_efiemu_crc64 (void);
|
||||
grub_err_t
|
||||
grub_efiemu_set_virtual_address_map (grub_efi_uintn_t memory_map_size,
|
||||
grub_efi_uintn_t descriptor_size,
|
||||
grub_efi_uint32_t descriptor_version
|
||||
__attribute__ ((unused)),
|
||||
grub_efi_memory_descriptor_t *virtual_map);
|
||||
|
||||
#endif /* ! GRUB_EFI_EMU_HEADER */
|
||||
|
|
|
@ -48,7 +48,8 @@ struct grub_hfs_sblock
|
|||
/* A pascal style string that holds the volumename. */
|
||||
grub_uint8_t volname[28];
|
||||
|
||||
grub_uint8_t unused5[60];
|
||||
grub_uint8_t unused5[52];
|
||||
grub_uint64_t num_serial;
|
||||
grub_uint16_t embed_sig;
|
||||
struct grub_hfs_extent embed_extent;
|
||||
grub_uint8_t unused6[4];
|
||||
|
|
|
@ -1,3 +1,26 @@
|
|||
/*
|
||||
* 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/>.
|
||||
*/
|
||||
|
||||
#ifndef GRUB_CPU_MACHO_H
|
||||
#define GRUB_CPU_MACHO_H 1
|
||||
|
||||
#include <grub/macho.h>
|
||||
|
||||
#define GRUB_MACHO_CPUTYPE_IS_HOST32(x) ((x)==0x00000007)
|
||||
#define GRUB_MACHO_CPUTYPE_IS_HOST64(x) ((x)==0x01000007)
|
||||
|
||||
|
@ -9,3 +32,15 @@ struct grub_macho_thread32
|
|||
grub_uint32_t entry_point;
|
||||
grub_uint8_t unknown2[20];
|
||||
} __attribute__ ((packed));
|
||||
|
||||
|
||||
struct grub_macho_thread64
|
||||
{
|
||||
grub_uint32_t cmd;
|
||||
grub_uint32_t cmdsize;
|
||||
grub_uint8_t unknown1[0x88];
|
||||
grub_uint64_t entry_point;
|
||||
grub_uint8_t unknown2[0x20];
|
||||
} __attribute__ ((packed));
|
||||
|
||||
#endif
|
||||
|
|
30
include/grub/i386/memory.h
Normal file
30
include/grub/i386/memory.h
Normal file
|
@ -0,0 +1,30 @@
|
|||
/* memory.h - describe the memory map */
|
||||
/*
|
||||
* GRUB -- GRand Unified Bootloader
|
||||
* Copyright (C) 2002,2007,2008,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/>.
|
||||
*/
|
||||
|
||||
#ifndef GRUB_MEMORY_CPU_HEADER
|
||||
#define GRUB_MEMORY_CPU_HEADER 1
|
||||
|
||||
/* The flag for protected mode. */
|
||||
#define GRUB_MEMORY_CPU_CR0_PE_ON 0x1
|
||||
#define GRUB_MEMORY_CPU_CR4_PAE_ON 0x00000040
|
||||
#define GRUB_MEMORY_CPU_CR0_PAGING_ON 0x80000000
|
||||
#define GRUB_MEMORY_CPU_AMD64_MSR 0xc0000080
|
||||
#define GRUB_MEMORY_CPU_AMD64_MSR_ON 0x00000100
|
||||
|
||||
#endif /* ! GRUB_MEMORY_CPU_HEADER */
|
|
@ -27,16 +27,9 @@ void grub_multiboot2_real_boot (grub_addr_t entry,
|
|||
struct multiboot_info *mbi)
|
||||
__attribute__ ((noreturn));
|
||||
|
||||
extern grub_addr_t grub_multiboot_payload_orig;
|
||||
extern grub_uint32_t grub_multiboot_payload_eip;
|
||||
extern char *grub_multiboot_payload_orig;
|
||||
extern grub_addr_t grub_multiboot_payload_dest;
|
||||
extern grub_size_t grub_multiboot_payload_size;
|
||||
extern grub_uint32_t grub_multiboot_payload_entry_offset;
|
||||
|
||||
extern grub_uint8_t grub_multiboot_forward_relocator;
|
||||
extern grub_uint8_t grub_multiboot_forward_relocator_end;
|
||||
extern grub_uint8_t grub_multiboot_backward_relocator;
|
||||
extern grub_uint8_t grub_multiboot_backward_relocator_end;
|
||||
|
||||
#define RELOCATOR_SIZEOF(x) (&grub_multiboot_##x##_relocator_end - &grub_multiboot_##x##_relocator)
|
||||
|
||||
#endif /* ! GRUB_MULTIBOOT_CPU_HEADER */
|
||||
|
|
|
@ -27,6 +27,8 @@
|
|||
#include <grub/memory.h>
|
||||
#endif
|
||||
|
||||
#include <grub/i386/memory.h>
|
||||
|
||||
/* The scratch buffer used in real mode code. */
|
||||
#define GRUB_MEMORY_MACHINE_SCRATCH_ADDR 0x68000
|
||||
#define GRUB_MEMORY_MACHINE_SCRATCH_SEG (GRUB_MEMORY_MACHINE_SCRATCH_ADDR >> 4)
|
||||
|
@ -62,9 +64,6 @@
|
|||
/* The address where another boot loader is loaded. */
|
||||
#define GRUB_MEMORY_MACHINE_BOOT_LOADER_ADDR 0x7c00
|
||||
|
||||
/* The flag for protected mode. */
|
||||
#define GRUB_MEMORY_MACHINE_CR0_PE_ON 0x1
|
||||
|
||||
/* The code segment of the protected mode. */
|
||||
#define GRUB_MEMORY_MACHINE_PROT_MODE_CSEG 0x8
|
||||
|
||||
|
|
|
@ -67,4 +67,20 @@ grub_pci_write_byte (grub_pci_address_t addr, grub_uint8_t data)
|
|||
grub_outb (data, GRUB_PCI_DATA_REG + (addr & 3));
|
||||
}
|
||||
|
||||
static inline void *
|
||||
grub_pci_device_map_range (grub_pci_device_t dev __attribute__ ((unused)),
|
||||
grub_addr_t base,
|
||||
grub_size_t size __attribute__ ((unused)))
|
||||
{
|
||||
return (void *) base;
|
||||
}
|
||||
|
||||
static inline void
|
||||
grub_pci_device_unmap_range (grub_pci_device_t dev __attribute__ ((unused)),
|
||||
void *mem __attribute__ ((unused)),
|
||||
grub_size_t size __attribute__ ((unused)))
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
#endif /* GRUB_CPU_PCI_H */
|
||||
|
|
41
include/grub/i386/relocator.h
Normal file
41
include/grub/i386/relocator.h
Normal file
|
@ -0,0 +1,41 @@
|
|||
/*
|
||||
* 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/>.
|
||||
*/
|
||||
|
||||
#ifndef GRUB_RELOCATOR_CPU_HEADER
|
||||
#define GRUB_RELOCATOR_CPU_HEADER 1
|
||||
|
||||
#include <grub/types.h>
|
||||
#include <grub/err.h>
|
||||
|
||||
struct grub_relocator32_state
|
||||
{
|
||||
grub_uint32_t esp;
|
||||
grub_uint32_t eax;
|
||||
grub_uint32_t ebx;
|
||||
grub_uint32_t ecx;
|
||||
grub_uint32_t edx;
|
||||
grub_uint32_t eip;
|
||||
};
|
||||
|
||||
void *grub_relocator32_alloc (grub_size_t size);
|
||||
grub_err_t grub_relocator32_boot (void *relocator, grub_uint32_t dest,
|
||||
struct grub_relocator32_state state);
|
||||
void *grub_relocator32_realloc (void *relocator, grub_size_t size);
|
||||
void grub_relocator32_free (void *relocator);
|
||||
|
||||
#endif /* ! GRUB_RELOCATOR_CPU_HEADER */
|
|
@ -20,6 +20,10 @@
|
|||
#define GRUB_CPU_XNU_H 1
|
||||
|
||||
#include <grub/err.h>
|
||||
#include <grub/efi/api.h>
|
||||
#include <grub/cpu/relocator.h>
|
||||
|
||||
#define XNU_RELOCATOR(x) (grub_relocator32_ ## x)
|
||||
|
||||
#define GRUB_XNU_PAGESIZE 4096
|
||||
typedef grub_uint32_t grub_xnu_ptr_t;
|
||||
|
@ -64,17 +68,54 @@ struct grub_xnu_boot_params
|
|||
/* Size of grub_efi_uintn_t in bits. */
|
||||
grub_uint8_t efi_uintnbits;
|
||||
} __attribute__ ((packed));
|
||||
#define GRUB_XNU_BOOTARGS_VERMINOR 4
|
||||
#define GRUB_XNU_BOOTARGS_VERMINOR 5
|
||||
#define GRUB_XNU_BOOTARGS_VERMAJOR 1
|
||||
|
||||
struct grub_xnu_devprop_header
|
||||
{
|
||||
grub_uint32_t length;
|
||||
/* Always set to 1. Version? */
|
||||
grub_uint32_t alwaysone;
|
||||
grub_uint32_t num_devices;
|
||||
};
|
||||
|
||||
struct grub_xnu_devprop_device_header
|
||||
{
|
||||
grub_uint32_t length;
|
||||
grub_uint32_t num_values;
|
||||
};
|
||||
|
||||
void grub_cpu_xnu_unload (void);
|
||||
|
||||
struct grub_xnu_devprop_device_descriptor;
|
||||
|
||||
struct grub_xnu_devprop_device_descriptor *
|
||||
grub_xnu_devprop_add_device (struct grub_efi_device_path *path, int length);
|
||||
grub_err_t
|
||||
grub_xnu_devprop_remove_device (struct grub_xnu_devprop_device_descriptor *dev);
|
||||
grub_err_t
|
||||
grub_xnu_devprop_remove_property (struct grub_xnu_devprop_device_descriptor *dev,
|
||||
char *name);
|
||||
grub_err_t
|
||||
grub_xnu_devprop_add_property_utf8 (struct grub_xnu_devprop_device_descriptor *dev,
|
||||
char *name, void *data, int datalen);
|
||||
grub_err_t
|
||||
grub_xnu_devprop_add_property_utf16 (struct grub_xnu_devprop_device_descriptor *dev,
|
||||
grub_uint16_t *name, int namelen,
|
||||
void *data, int datalen);
|
||||
grub_err_t
|
||||
grub_xnu_devprop_remove_property_utf8 (struct grub_xnu_devprop_device_descriptor *dev,
|
||||
char *name);
|
||||
void grub_cpu_xnu_init (void);
|
||||
void grub_cpu_xnu_fini (void);
|
||||
|
||||
extern grub_uint32_t grub_xnu_entry_point;
|
||||
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);
|
||||
grub_err_t grub_xnu_set_video (struct grub_xnu_boot_params *bootparams_relloc);
|
||||
grub_err_t
|
||||
grub_cpu_xnu_fill_devicetree (void);
|
||||
extern grub_uint32_t grub_xnu_heap_will_be_at;
|
||||
extern grub_uint8_t grub_xnu_launcher_start[];
|
||||
extern grub_uint8_t grub_xnu_launcher_end[];
|
||||
#endif
|
||||
|
|
|
@ -102,6 +102,23 @@ struct grub_macho_segment32
|
|||
grub_uint32_t flags;
|
||||
} __attribute__ ((packed));
|
||||
|
||||
/* 64-bit segment command. */
|
||||
struct grub_macho_segment64
|
||||
{
|
||||
#define GRUB_MACHO_CMD_SEGMENT64 0x19
|
||||
grub_uint32_t cmd;
|
||||
grub_uint32_t cmdsize;
|
||||
grub_uint8_t segname[16];
|
||||
grub_uint64_t vmaddr;
|
||||
grub_uint64_t vmsize;
|
||||
grub_uint64_t fileoff;
|
||||
grub_uint64_t filesize;
|
||||
grub_macho_vmprot_t maxprot;
|
||||
grub_macho_vmprot_t initprot;
|
||||
grub_uint32_t nsects;
|
||||
grub_uint32_t flags;
|
||||
} __attribute__ ((packed));
|
||||
|
||||
#define GRUB_MACHO_CMD_THREAD 5
|
||||
|
||||
#endif
|
||||
|
|
|
@ -46,17 +46,28 @@ grub_macho_t grub_macho_file (grub_file_t);
|
|||
grub_err_t grub_macho_close (grub_macho_t);
|
||||
|
||||
int grub_macho_contains_macho32 (grub_macho_t);
|
||||
grub_err_t grub_macho32_size (grub_macho_t macho, grub_addr_t *segments_start,
|
||||
grub_addr_t *segments_end, int flags);
|
||||
grub_uint32_t grub_macho32_get_entry_point (grub_macho_t macho);
|
||||
grub_err_t grub_macho_size32 (grub_macho_t macho, grub_uint32_t *segments_start,
|
||||
grub_uint32_t *segments_end, int flags);
|
||||
grub_uint32_t grub_macho_get_entry_point32 (grub_macho_t macho);
|
||||
|
||||
int grub_macho_contains_macho64 (grub_macho_t);
|
||||
grub_err_t grub_macho_size64 (grub_macho_t macho, grub_uint64_t *segments_start,
|
||||
grub_uint64_t *segments_end, int flags);
|
||||
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_macho32_load (grub_macho_t macho, char *offset, int flags);
|
||||
grub_err_t grub_macho_load32 (grub_macho_t macho, char *offset, int flags);
|
||||
grub_err_t grub_macho_load64 (grub_macho_t macho, char *offset, int flags);
|
||||
|
||||
/* Like filesize and file_read but take only 32-bit part
|
||||
for current architecture. */
|
||||
grub_size_t grub_macho32_filesize (grub_macho_t macho);
|
||||
grub_err_t grub_macho32_readfile (grub_macho_t macho, void *dest);
|
||||
grub_size_t grub_macho_filesize32 (grub_macho_t macho);
|
||||
grub_err_t grub_macho_readfile32 (grub_macho_t macho, void *dest);
|
||||
grub_size_t grub_macho_filesize64 (grub_macho_t macho);
|
||||
grub_err_t grub_macho_readfile64 (grub_macho_t macho, void *dest);
|
||||
|
||||
void grub_macho_parse32 (grub_macho_t macho);
|
||||
void grub_macho_parse64 (grub_macho_t macho);
|
||||
|
||||
#endif /* ! GRUB_MACHOLOAD_HEADER */
|
||||
|
|
|
@ -171,6 +171,9 @@ char *EXPORT_FUNC(grub_strndup) (const char *s, grub_size_t n);
|
|||
void *EXPORT_FUNC(grub_memset) (void *s, int c, grub_size_t n);
|
||||
grub_size_t EXPORT_FUNC(grub_strlen) (const char *s);
|
||||
int EXPORT_FUNC(grub_printf) (const char *fmt, ...) __attribute__ ((format (printf, 1, 2)));
|
||||
int EXPORT_FUNC(grub_printf_) (const char *fmt, ...) __attribute__ ((format (printf, 1, 2)));
|
||||
int EXPORT_FUNC(grub_puts) (const char *s);
|
||||
int EXPORT_FUNC(grub_puts_) (const char *s);
|
||||
void EXPORT_FUNC(grub_real_dprintf) (const char *file,
|
||||
const int line,
|
||||
const char *condition,
|
||||
|
@ -180,9 +183,6 @@ int EXPORT_FUNC(grub_sprintf) (char *str, const char *fmt, ...) __attribute__ ((
|
|||
int EXPORT_FUNC(grub_vsprintf) (char *str, const char *fmt, va_list args);
|
||||
void EXPORT_FUNC(grub_exit) (void) __attribute__ ((noreturn));
|
||||
void EXPORT_FUNC(grub_abort) (void) __attribute__ ((noreturn));
|
||||
grub_uint8_t *EXPORT_FUNC(grub_utf16_to_utf8) (grub_uint8_t *dest,
|
||||
grub_uint16_t *src,
|
||||
grub_size_t size);
|
||||
grub_ssize_t EXPORT_FUNC(grub_utf8_to_ucs4) (grub_uint32_t *dest,
|
||||
grub_size_t destsize,
|
||||
const grub_uint8_t *src,
|
||||
|
|
|
@ -30,6 +30,9 @@
|
|||
/* The maximum size of a command-line. */
|
||||
#define GRUB_MAX_CMDLINE 1600
|
||||
|
||||
/* The standard left and right margin for some messages. */
|
||||
#define STANDARD_MARGIN 6
|
||||
|
||||
/* The type of a completion item. */
|
||||
enum grub_completion_type
|
||||
{
|
||||
|
@ -73,6 +76,14 @@ void grub_parse_color_name_pair (grub_uint8_t *ret, const char *name);
|
|||
|
||||
/* Defined in `menu_text.c'. */
|
||||
void grub_wait_after_message (void);
|
||||
int grub_utf8_to_ucs4_alloc (const char *msg, grub_uint32_t **unicode_msg,
|
||||
grub_uint32_t **last_position);
|
||||
void grub_print_ucs4 (const grub_uint32_t * str,
|
||||
const grub_uint32_t * last_position);
|
||||
grub_ssize_t grub_getstringwidth (grub_uint32_t * str,
|
||||
const grub_uint32_t * last_position);
|
||||
void grub_print_message_indented (const char *msg, int margin_left,
|
||||
int margin_right);
|
||||
|
||||
/* Defined in `handler.c'. */
|
||||
void read_handler_list (void);
|
||||
|
|
|
@ -73,6 +73,7 @@
|
|||
#define MAX_IDX (16384 >> BLK_SHR)
|
||||
|
||||
#define COM_LEN 4096
|
||||
#define COM_LOG_LEN 12
|
||||
#define COM_SEC (COM_LEN >> BLK_SHR)
|
||||
|
||||
#define AF_ALST 1
|
||||
|
@ -164,7 +165,7 @@ struct grub_ntfs_comp
|
|||
struct grub_ntfs_rlst
|
||||
{
|
||||
int flags;
|
||||
grub_uint32_t target_vcn, curr_vcn, next_vcn, curr_lcn;
|
||||
grub_disk_addr_t target_vcn, curr_vcn, next_vcn, curr_lcn;
|
||||
char *cur_run;
|
||||
struct grub_ntfs_attr *attr;
|
||||
struct grub_ntfs_comp comp;
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
/*
|
||||
* GRUB -- GRand Unified Bootloader
|
||||
* Copyright (C) 2008 Free Software Foundation, Inc.
|
||||
* Copyright (C) 2008,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
|
||||
|
@ -36,15 +36,44 @@
|
|||
#define GRUB_PCI_ADDR_IO_MASK ~0x03
|
||||
|
||||
typedef grub_uint32_t grub_pci_id_t;
|
||||
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,
|
||||
int function, int reg);
|
||||
#ifdef GRUB_UTIL
|
||||
#include <grub/pciutils.h>
|
||||
#else
|
||||
typedef grub_uint32_t grub_pci_address_t;
|
||||
struct grub_pci_device
|
||||
{
|
||||
int bus;
|
||||
int device;
|
||||
int function;
|
||||
};
|
||||
typedef struct grub_pci_device grub_pci_device_t;
|
||||
static inline int
|
||||
grub_pci_get_bus (grub_pci_device_t dev)
|
||||
{
|
||||
return dev.bus;
|
||||
}
|
||||
|
||||
static inline int
|
||||
grub_pci_get_device (grub_pci_device_t dev)
|
||||
{
|
||||
return dev.device;
|
||||
}
|
||||
|
||||
static inline int
|
||||
grub_pci_get_function (grub_pci_device_t dev)
|
||||
{
|
||||
return dev.function;
|
||||
}
|
||||
#include <grub/cpu/pci.h>
|
||||
#endif
|
||||
|
||||
typedef int NESTED_FUNC_ATTR (*grub_pci_iteratefunc_t)
|
||||
(grub_pci_device_t dev, grub_pci_id_t pciid);
|
||||
|
||||
grub_pci_address_t EXPORT_FUNC(grub_pci_make_address) (grub_pci_device_t dev,
|
||||
int reg);
|
||||
|
||||
void EXPORT_FUNC(grub_pci_iterate) (grub_pci_iteratefunc_t hook);
|
||||
|
||||
#include <grub/cpu/pci.h>
|
||||
|
||||
#endif /* GRUB_PCI_H */
|
||||
|
|
103
include/grub/pciutils.h
Normal file
103
include/grub/pciutils.h
Normal file
|
@ -0,0 +1,103 @@
|
|||
/*
|
||||
* GRUB -- GRand Unified Bootloader
|
||||
* Copyright (C) 2008,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/>.
|
||||
*/
|
||||
|
||||
#ifndef GRUB_PCIUTILS_H
|
||||
#define GRUB_PCIUTILS_H 1
|
||||
|
||||
#include <pciaccess.h>
|
||||
|
||||
typedef struct pci_device *grub_pci_device_t;
|
||||
|
||||
static inline int
|
||||
grub_pci_get_bus (grub_pci_device_t dev)
|
||||
{
|
||||
return dev->bus;
|
||||
}
|
||||
|
||||
static inline int
|
||||
grub_pci_get_device (grub_pci_device_t dev)
|
||||
{
|
||||
return dev->dev;
|
||||
}
|
||||
|
||||
static inline int
|
||||
grub_pci_get_function (grub_pci_device_t dev)
|
||||
{
|
||||
return dev->func;
|
||||
}
|
||||
|
||||
struct grub_pci_address
|
||||
{
|
||||
grub_pci_device_t dev;
|
||||
int pos;
|
||||
};
|
||||
|
||||
typedef struct grub_pci_address grub_pci_address_t;
|
||||
|
||||
static inline grub_uint32_t
|
||||
grub_pci_read (grub_pci_address_t addr)
|
||||
{
|
||||
grub_uint32_t ret;
|
||||
pci_device_cfg_read_u32 (addr.dev, &ret, addr.pos);
|
||||
return ret;
|
||||
}
|
||||
|
||||
static inline grub_uint16_t
|
||||
grub_pci_read_word (grub_pci_address_t addr)
|
||||
{
|
||||
grub_uint16_t ret;
|
||||
pci_device_cfg_read_u16 (addr.dev, &ret, addr.pos);
|
||||
return ret;
|
||||
}
|
||||
|
||||
static inline grub_uint8_t
|
||||
grub_pci_read_byte (grub_pci_address_t addr)
|
||||
{
|
||||
grub_uint8_t ret;
|
||||
pci_device_cfg_read_u8 (addr.dev, &ret, addr.pos);
|
||||
return ret;
|
||||
}
|
||||
|
||||
static inline void
|
||||
grub_pci_write (grub_pci_address_t addr, grub_uint32_t data)
|
||||
{
|
||||
pci_device_cfg_write_u32 (addr.dev, data, addr.pos);
|
||||
}
|
||||
|
||||
static inline void
|
||||
grub_pci_write_word (grub_pci_address_t addr, grub_uint16_t data)
|
||||
{
|
||||
pci_device_cfg_write_u16 (addr.dev, data, addr.pos);
|
||||
}
|
||||
|
||||
static inline void
|
||||
grub_pci_write_byte (grub_pci_address_t addr, grub_uint8_t data)
|
||||
{
|
||||
pci_device_cfg_write_u8 (addr.dev, data, addr.pos);
|
||||
}
|
||||
|
||||
void *
|
||||
grub_pci_device_map_range (grub_pci_device_t dev, grub_addr_t base,
|
||||
grub_size_t size);
|
||||
|
||||
void
|
||||
grub_pci_device_unmap_range (grub_pci_device_t dev, void *mem,
|
||||
grub_size_t size);
|
||||
|
||||
|
||||
#endif /* GRUB_PCIUTILS_H */
|
|
@ -22,8 +22,6 @@
|
|||
#include <config.h>
|
||||
#include <grub/cpu/types.h>
|
||||
|
||||
#define UNUSED __attribute__ ((unused))
|
||||
|
||||
#ifdef GRUB_UTIL
|
||||
# define GRUB_CPU_SIZEOF_VOID_P SIZEOF_VOID_P
|
||||
# define GRUB_CPU_SIZEOF_LONG SIZEOF_LONG
|
||||
|
|
|
@ -64,9 +64,6 @@ grub_usb_err_t grub_usb_clear_halt (grub_usb_device_t dev, int endpoint);
|
|||
grub_usb_err_t grub_usb_set_configuration (grub_usb_device_t dev,
|
||||
int configuration);
|
||||
|
||||
grub_usb_err_t grub_usb_get_string (grub_usb_device_t dev, grub_uint8_t index,
|
||||
int langid, char **string);
|
||||
|
||||
void grub_usb_controller_dev_register (grub_usb_controller_dev_t usb);
|
||||
|
||||
void grub_usb_controller_dev_unregister (grub_usb_controller_dev_t usb);
|
||||
|
|
|
@ -21,6 +21,7 @@
|
|||
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <stdarg.h>
|
||||
#include <setjmp.h>
|
||||
#include <unistd.h>
|
||||
|
||||
|
@ -57,12 +58,20 @@ void grub_util_write_image (const char *img, size_t size, FILE *out);
|
|||
void grub_util_write_image_at (const void *img, size_t size, off_t offset,
|
||||
FILE *out);
|
||||
|
||||
#ifndef HAVE_VASPRINTF
|
||||
|
||||
int vasprintf (char **buf, const char *fmt, va_list ap);
|
||||
|
||||
#endif
|
||||
|
||||
#ifndef HAVE_ASPRINTF
|
||||
|
||||
int asprintf (char **buf, const char *fmt, ...);
|
||||
|
||||
#endif
|
||||
|
||||
char *xasprintf (const char *fmt, ...);
|
||||
|
||||
#ifdef __MINGW32__
|
||||
|
||||
#define fseeko fseeko64
|
||||
|
|
1
include/grub/x86_64/relocator.h
Normal file
1
include/grub/x86_64/relocator.h
Normal file
|
@ -0,0 +1 @@
|
|||
#include <grub/i386/relocator.h>
|
|
@ -76,6 +76,8 @@ struct grub_xnu_extheader
|
|||
grub_uint32_t infoplistsize;
|
||||
grub_uint32_t binaryaddr;
|
||||
grub_uint32_t binarysize;
|
||||
grub_uint32_t nameaddr;
|
||||
grub_uint32_t namesize;
|
||||
} __attribute__ ((packed));
|
||||
|
||||
struct grub_xnu_devtree_key *grub_xnu_create_key (struct grub_xnu_devtree_key **parent,
|
||||
|
@ -92,6 +94,7 @@ struct grub_xnu_devtree_key *grub_xnu_create_value (struct grub_xnu_devtree_key
|
|||
void grub_xnu_lock (void);
|
||||
void grub_xnu_unlock (void);
|
||||
grub_err_t grub_xnu_resume (char *imagename);
|
||||
grub_err_t grub_xnu_boot_resume (void);
|
||||
struct grub_xnu_devtree_key *grub_xnu_find_key (struct grub_xnu_devtree_key *parent,
|
||||
char *name);
|
||||
grub_err_t grub_xnu_align_heap (int align);
|
||||
|
@ -100,8 +103,10 @@ grub_err_t grub_xnu_scan_dir_for_kexts (char *dirname, char *osbundlerequired,
|
|||
grub_err_t grub_xnu_load_kext_from_dir (char *dirname, char *osbundlerequired,
|
||||
int maxrecursion);
|
||||
void *grub_xnu_heap_malloc (int size);
|
||||
grub_err_t grub_xnu_fill_devicetree (void);
|
||||
extern grub_uint32_t grub_xnu_heap_real_start;
|
||||
extern grub_size_t grub_xnu_heap_size;
|
||||
extern char *grub_xnu_heap_start;
|
||||
extern void *grub_xnu_heap_start;
|
||||
extern struct grub_video_bitmap *grub_xnu_bitmap;
|
||||
extern int grub_xnu_is_64bit;
|
||||
#endif
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue