/*
* GRUB -- GRand Unified Bootloader
* Copyright (C) 2009 Free Software Foundation, Inc.
*
* 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_EFI_EMU_HEADER
/* EFI api defined in 32-bit and 64-bit version*/
struct grub_efi_system_table32
{
} __attribute__ ((packed));
struct grub_efi_system_table64
{
} __attribute__ ((packed));
{
} __attribute__ ((packed));
{
} __attribute__ ((packed));
/* Convenience macros to access currently loaded efiemu */
? (void *) grub_efiemu_system_table64 \
: (void *) grub_efiemu_system_table32)
? grub_efiemu_system_table64->x \
? (grub_efiemu_system_table64->x \
= (y)) \
: (grub_efiemu_system_table32->x \
= (y)))
? (void *) (grub_addr_t) \
(grub_efiemu_system_table64->x) \
: (void *) (grub_addr_t) \
? (void *) \
&(grub_efiemu_system_table64->x) \
: (void *) \
&(grub_efiemu_system_table32->x))
#define GRUB_EFIEMU_SYSTEM_TABLE_SIZEOF(x) \
((grub_efiemu_sizeof_uintn_t () == 8) \
? sizeof(grub_efiemu_system_table64->x)\
: sizeof(grub_efiemu_system_table32->x))
#define GRUB_EFIEMU_SYSTEM_TABLE_SIZEOF_TOTAL ((grub_efiemu_sizeof_uintn_t () == 8) ? sizeof(*grub_efiemu_system_table64):sizeof(*grub_efiemu_system_table32))
/* ELF management definitions and functions */
struct grub_efiemu_segment
{
unsigned section;
int handle;
int ptv_rel_needed;
void *srcptr;
};
struct grub_efiemu_elf_sym
{
int handle;
unsigned section;
};
grub_err_t grub_efiemu_loadcore_load (void);
/* Configuration tables manipulation. Definitions and functions */
{
void *data;
};
{
} __attribute__ ((packed));
{
} __attribute__ ((packed));
void *data);
/* Memory management functions */
void *grub_efiemu_mm_obtain_request (int handle);
grub_err_t grub_efiemu_mm_unload (void);
grub_err_t grub_efiemu_mm_do_alloc (void);
grub_err_t grub_efiemu_mm_init (void);
void grub_efiemu_mm_return_request (int handle);
/* Drop-in replacements for grub_efi_* and grub_machine_* */
int grub_efiemu_sizeof_uintn_t (void);
/* efiemu main control definitions and functions*/
typedef enum {GRUB_EFIEMU_NOTLOADED,
struct grub_efiemu_prepare_hook
{
void *data;
};
grub_err_t grub_efiemu_unload (void);
grub_err_t grub_efiemu_prepare (void);
void *data);
/* symbols and pointers */
grub_err_t grub_efiemu_alloc_syms (void);
void grub_efiemu_free_syms (void);
int plus_handle,
grub_err_t grub_efiemu_pnvram (void);
const 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);
__attribute__ ((unused)),
#endif /* ! GRUB_EFI_EMU_HEADER */