2006-04-18 Yoshinori K. Okuji <okuji@enbug.org>
* DISTLIST: Added conf/i386-efi.mk, conf/i386-efi.rmk, include/grub/efi/api.h, include/grub/efi/console_control.h, include/grub/efi/efi.h, include/grub/efi/pe32.h, include/grub/i386/efi/time.h, kern/efi/efi.c, kern/i386/efi/init.c, kern/i386/efi/startup.S, and util/i386/efi/grub-mkimage.c. * Makefile.in (RMKFILES): Added i386-efi.rmk. * genmk.rb (PModule#rule): Do not export symbols if #{prefix}_EXPORTS is set to "no". * conf/i386-efi.mk: New file. * conf/i386-efi.rmk: Likewise. * include/grub/efi/api.h: Likewise. * include/grub/efi/console_control.h: Likewise. * include/grub/efi/efi.h: Likewise. * include/grub/efi/pe32.h: Likewise. * include/grub/i386/efi/time.h: Likewise. * kern/efi/efi.c: Likewise. * kern/i386/efi/init.c: Likewise. * kern/i386/efi/startup.S: Likewise. * util/i386/efi/grub-mkimage.c: Likewise.
This commit is contained in:
parent
bfa2bd9efb
commit
837091258d
19 changed files with 3804 additions and 182 deletions
653
include/grub/efi/api.h
Normal file
653
include/grub/efi/api.h
Normal file
|
@ -0,0 +1,653 @@
|
|||
/* efi.h - declare EFI types and functions */
|
||||
/*
|
||||
* GRUB -- GRand Unified Bootloader
|
||||
* Copyright (C) 2006 Free Software Foundation, Inc.
|
||||
*
|
||||
* This program 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 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program 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 this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*/
|
||||
|
||||
#ifndef GRUB_EFI_API_HEADER
|
||||
#define GRUB_EFI_API_HEADER 1
|
||||
|
||||
#include <grub/types.h>
|
||||
|
||||
/* For consistency and safety, we name the EFI-defined types differently.
|
||||
All names are transformed into lower case, _t appended, and
|
||||
grub_efi_ prepended. */
|
||||
|
||||
/* Constants. */
|
||||
#define GRUB_EFI_EVT_TIMER 0x80000000
|
||||
#define GRUB_EFI_EVT_RUNTIME 0x40000000
|
||||
#define GRUB_EFI_EVT_RUNTIME_CONTEXT 0x20000000
|
||||
#define GRUB_EFI_EVT_NOTIFY_WAIT 0x00000100
|
||||
#define GRUB_EFI_EVT_NOTIFY_SIGNAL 0x00000200
|
||||
#define GRUB_EFI_EVT_SIGNAL_EXIT_BOOT_SERVICES 0x00000201
|
||||
#define GRUB_EFI_EVT_SIGNAL_VIRTUAL_ADDRESS_CHANGE 0x60000202
|
||||
|
||||
#define GRUB_EFI_TPL_APPLICATION 4
|
||||
#define GRUB_EFI_TPL_CALLBACK 8
|
||||
#define GRUB_EFI_TPL_NOTIFY 16
|
||||
#define GRUB_EFI_TPL_HIGH_LEVEL 31
|
||||
|
||||
#define GRUB_EFI_MEMORY_UC 0x0000000000000001
|
||||
#define GRUB_EFI_MEMORY_WC 0x0000000000000002
|
||||
#define GRUB_EFI_MEMORY_WT 0x0000000000000004
|
||||
#define GRUB_EFI_MEMORY_WB 0x0000000000000008
|
||||
#define GRUB_EFI_MEMORY_UCE 0x0000000000000010
|
||||
#define GRUB_EFI_MEMORY_WP 0x0000000000001000
|
||||
#define GRUB_EFI_MEMORY_RP 0x0000000000002000
|
||||
#define GRUB_EFI_MEMORY_XP 0x0000000000004000
|
||||
#define GRUB_EFI_MEMORY_RUNTIME 0x8000000000000000
|
||||
|
||||
#define GRUB_EFI_OPEN_PROTOCOL_BY_HANDLE_PROTOCOL 0x00000001
|
||||
#define GRUB_EFI_OPEN_PROTOCOL_GET_PROTOCOL 0x00000002
|
||||
#define GRUB_EFI_OPEN_PROTOCOL_TEST_PROTOCOL 0x00000004
|
||||
#define GRUB_EFI_OPEN_PROTOCOL_BY_CHILD_CONTROLLER 0x00000008
|
||||
#define GRUB_EFI_OPEN_PROTOCOL_BY_DRIVER 0x00000010
|
||||
#define GRUB_EFI_OPEN_PROTOCOL_BY_EXCLUSIVE 0x00000020
|
||||
|
||||
#define GRUB_EFI_VARIABLE_NON_VOLATILE 0x0000000000000001
|
||||
#define GRUB_EFI_VARIABLE_BOOTSERVICE_ACCESS 0x0000000000000002
|
||||
#define GRUB_EFI_VARIABLE_RUNTIME_ACCESS 0x0000000000000004
|
||||
|
||||
#define GRUB_EFI_TIME_ADJUST_DAYLIGHT 0x01
|
||||
#define GRUB_EFI_TIME_IN_DAYLIGHT 0x02
|
||||
|
||||
#define GRUB_EFI_UNSPECIFIED_TIMEZONE 0x07FF
|
||||
|
||||
#define GRUB_EFI_OPTIONAL_PTR 0x00000001
|
||||
|
||||
/* Enumerations. */
|
||||
enum grub_efi_timer_delay
|
||||
{
|
||||
GRUB_EFI_TIMER_CANCEL,
|
||||
GRUB_EFI_TIMER_PERIODIC,
|
||||
GRUB_EFI_TIMER_RELATIVE
|
||||
};
|
||||
typedef enum grub_efi_timer_delay grub_efi_timer_delay_t;
|
||||
|
||||
enum grub_efi_allocate_type
|
||||
{
|
||||
GRUB_EFI_ALLOCATE_ANY_PAGES,
|
||||
GRUB_EFI_ALLOCATE_MAX_ADDRESS,
|
||||
GRUB_EFI_ALLOCATE_ADDRESS,
|
||||
GRUB_EFI_MAX_ALLOCATION_TYPE
|
||||
};
|
||||
typedef enum grub_efi_allocate_type grub_efi_allocate_type_t;
|
||||
|
||||
enum grub_efi_memory_type
|
||||
{
|
||||
GRUB_EFI_RESERVED_MEMORY_TYPE,
|
||||
GRUB_EFI_LOADER_CODE,
|
||||
GRUB_EFI_LOADER_DATA,
|
||||
GRUB_EFI_BOOT_SERVICES_CODE,
|
||||
GRUB_EFI_BOOT_SERVICES_DATA,
|
||||
GRUB_EFI_RUNTIME_SERVICES_CODE,
|
||||
GRUB_EFI_RUNTIME_SERVICES_DATA,
|
||||
GRUB_EFI_CONVENTIONAL_MEMORY,
|
||||
GRUB_EFI_UNUSABLE_MEMORY,
|
||||
GRUB_EFI_ACPI_RECLAIM_MEMORY,
|
||||
GRUB_EFI_ACPI_MEMORY_NVS,
|
||||
GRUB_EFI_MEMORY_MAPPED_IO,
|
||||
GRUB_EFI_MEMORY_MAPPED_IO_PORT_SPACE,
|
||||
GRUB_EFI_PAL_CODE,
|
||||
GRUB_EFI_MAX_MEMORY_TYPE
|
||||
};
|
||||
typedef enum grub_efi_memory_type grub_efi_memory_type_t;
|
||||
|
||||
enum grub_efi_interface_type
|
||||
{
|
||||
GRUB_EFI_NATIVE_INTERFACE
|
||||
};
|
||||
typedef enum grub_efi_interface_type grub_efi_interface_type_t;
|
||||
|
||||
enum grub_efi_locate_search_type
|
||||
{
|
||||
GRUB_EFI_ALL_HANDLES,
|
||||
GRUB_EFI_BY_REGISTER_NOTIFY,
|
||||
GRUB_EFI_BY_PROTOCOL
|
||||
};
|
||||
typedef enum grub_efi_locate_search_type grub_efi_locate_search_type_t;
|
||||
|
||||
enum grub_efi_reset_type
|
||||
{
|
||||
GRUB_EFI_RESET_COLD,
|
||||
GRUB_EFI_RESET_WARM,
|
||||
GRUB_EFI_RESET_SHUTDOWN
|
||||
};
|
||||
typedef enum grub_efi_reset_type grub_efi_reset_type_t;
|
||||
|
||||
/* Types. */
|
||||
typedef char grub_efi_boolean_t;
|
||||
typedef long grub_efi_intn_t;
|
||||
typedef unsigned long grub_efi_uintn_t;
|
||||
typedef grub_int8_t grub_efi_int8_t;
|
||||
typedef grub_uint8_t grub_efi_uint8_t;
|
||||
typedef grub_int16_t grub_efi_int16_t;
|
||||
typedef grub_uint16_t grub_efi_uint16_t;
|
||||
typedef grub_int32_t grub_efi_int32_t;
|
||||
typedef grub_uint32_t grub_efi_uint32_t;
|
||||
typedef grub_int64_t grub_efi_int64_t;
|
||||
typedef grub_uint64_t grub_efi_uint64_t;
|
||||
typedef grub_uint8_t grub_efi_char8_t;
|
||||
typedef grub_uint16_t grub_efi_char16_t;
|
||||
|
||||
typedef grub_efi_intn_t grub_efi_status_t;
|
||||
|
||||
#define GRUB_EFI_ERROR_CODE(value) \
|
||||
((1 << (sizeof (grub_efi_status_t) * 8 - 1)) | (value))
|
||||
|
||||
#define GRUB_EFI_WARNING_CODE(value) (value)
|
||||
|
||||
#define GRUB_EFI_SUCCESS 0
|
||||
|
||||
#define GRUB_EFI_LOAD_ERROR GRUB_EFI_ERROR_CODE (1)
|
||||
#define GRUB_EFI_INVALID_PARAMETER GRUB_EFI_ERROR_CODE (2)
|
||||
#define GRUB_EFI_UNSUPPORTED GRUB_EFI_ERROR_CODE (3)
|
||||
#define GRUB_EFI_BAD_BUFFER_SIZE GRUB_EFI_ERROR_CODE (4)
|
||||
#define GRUB_EFI_BUFFER_TOO_SMALL GRUB_EFI_ERROR_CODE (5)
|
||||
#define GRUB_EFI_NOT_READY GRUB_EFI_ERROR_CODE (6)
|
||||
#define GRUB_EFI_DEVICE_ERROR GRUB_EFI_ERROR_CODE (7)
|
||||
#define GRUB_EFI_WRITE_PROTECTED GRUB_EFI_ERROR_CODE (8)
|
||||
#define GRUB_EFI_OUT_OF_RESOURCES GRUB_EFI_ERROR_CODE (9)
|
||||
#define GRUB_EFI_VOLUME_CORRUPTED GRUB_EFI_ERROR_CODE (10)
|
||||
#define GRUB_EFI_VOLUME_FULL GRUB_EFI_ERROR_CODE (11)
|
||||
#define GRUB_EFI_NO_MEDIA GRUB_EFI_ERROR_CODE (12)
|
||||
#define GRUB_EFI_MEDIA_CHANGED GRUB_EFI_ERROR_CODE (13)
|
||||
#define GRUB_EFI_NOT_FOUND GRUB_EFI_ERROR_CODE (14)
|
||||
#define GRUB_EFI_ACCESS_DENIED GRUB_EFI_ERROR_CODE (15)
|
||||
#define GRUB_EFI_NO_RESPONSE GRUB_EFI_ERROR_CODE (16)
|
||||
#define GRUB_EFI_NO_MAPPING GRUB_EFI_ERROR_CODE (17)
|
||||
#define GRUB_EFI_TIMEOUT GRUB_EFI_ERROR_CODE (18)
|
||||
#define GRUB_EFI_NOT_STARTED GRUB_EFI_ERROR_CODE (19)
|
||||
#define GRUB_EFI_ALREADY_STARTED GRUB_EFI_ERROR_CODE (20)
|
||||
#define GRUB_EFI_ABORTED GRUB_EFI_ERROR_CODE (21)
|
||||
#define GRUB_EFI_ICMP_ERROR GRUB_EFI_ERROR_CODE (22)
|
||||
#define GRUB_EFI_TFTP_ERROR GRUB_EFI_ERROR_CODE (23)
|
||||
#define GRUB_EFI_PROTOCOL_ERROR GRUB_EFI_ERROR_CODE (24)
|
||||
#define GRUB_EFI_INCOMPATIBLE_VERSION GRUB_EFI_ERROR_CODE (25)
|
||||
#define GRUB_EFI_SECURITY_VIOLATION GRUB_EFI_ERROR_CODE (26)
|
||||
#define GRUB_EFI_CRC_ERROR GRUB_EFI_ERROR_CODE (27)
|
||||
|
||||
#define GRUB_EFI_WARN_UNKNOWN_GLYPH GRUB_EFI_WARNING_CODE (1)
|
||||
#define GRUB_EFI_WARN_DELETE_FAILURE GRUB_EFI_WARNING_CODE (2)
|
||||
#define GRUB_EFI_WARN_WRITE_FAILURE GRUB_EFI_WARNING_CODE (3)
|
||||
#define GRUB_EFI_WARN_BUFFER_TOO_SMALL GRUB_EFI_WARNING_CODE (4)
|
||||
|
||||
typedef void *grub_efi_handle_t;
|
||||
typedef void *grub_efi_event_t;
|
||||
typedef grub_efi_uint64_t grub_efi_lba_t;
|
||||
typedef grub_efi_uintn_t grub_efi_tpl_t;
|
||||
typedef grub_uint8_t grub_efi_mac_address_t[32];
|
||||
typedef grub_uint8_t grub_efi_ipv4_address_t[4];
|
||||
typedef grub_uint8_t grub_efi_ipv6_address_t[8];
|
||||
typedef grub_uint8_t grub_efi_ip_address_t[8] __attribute__ ((aligned(4)));
|
||||
typedef grub_efi_uint64_t grub_efi_physical_address_t;
|
||||
typedef grub_efi_uint64_t grub_efi_virtual_address_t;
|
||||
|
||||
struct grub_efi_guid
|
||||
{
|
||||
grub_uint32_t data1;
|
||||
grub_uint16_t data2;
|
||||
grub_uint16_t data3;
|
||||
grub_uint8_t data4;
|
||||
grub_uint8_t data5;
|
||||
grub_uint8_t data6;
|
||||
grub_uint8_t data7;
|
||||
grub_uint8_t data8;
|
||||
grub_uint8_t data9;
|
||||
grub_uint8_t data10;
|
||||
grub_uint8_t data11;
|
||||
} __attribute__ ((aligned(8)));
|
||||
typedef struct grub_efi_guid grub_efi_guid_t;
|
||||
|
||||
struct grub_efi_memory_descriptor
|
||||
{
|
||||
grub_efi_uint32_t type;
|
||||
grub_efi_physical_address_t physical_start;
|
||||
grub_efi_virtual_address_t virtual_start;
|
||||
grub_efi_uint64_t num_pages;
|
||||
grub_efi_uint64_t attribute;
|
||||
};
|
||||
typedef struct grub_efi_memory_descriptor grub_efi_memory_descriptor_t;
|
||||
|
||||
struct grub_efi_device_path
|
||||
{
|
||||
grub_efi_uint8_t type;
|
||||
grub_efi_uint8_t sub_type;
|
||||
grub_efi_uint8_t length[2];
|
||||
};
|
||||
typedef struct grub_efi_device_path grub_efi_device_path_t;
|
||||
/* XXX EFI does not define EFI_DEVICE_PATH_PROTOCOL but uses it.
|
||||
It seems to be identical to EFI_DEVICE_PATH. */
|
||||
typedef struct grub_efi_device_path grub_efi_device_path_protocol_t;
|
||||
|
||||
struct grub_efi_open_protocol_information_entry
|
||||
{
|
||||
grub_efi_handle_t agent_handle;
|
||||
grub_efi_handle_t controller_handle;
|
||||
grub_efi_uint32_t attributes;
|
||||
grub_efi_uint32_t open_count;
|
||||
};
|
||||
typedef struct grub_efi_open_protocol_information_entry grub_efi_open_protocol_information_entry_t;
|
||||
|
||||
struct grub_efi_time
|
||||
{
|
||||
grub_efi_uint16_t year;
|
||||
grub_efi_uint8_t month;
|
||||
grub_efi_uint8_t day;
|
||||
grub_efi_uint8_t hour;
|
||||
grub_efi_uint8_t minute;
|
||||
grub_efi_uint8_t second;
|
||||
grub_efi_uint8_t pad1;
|
||||
grub_efi_uint32_t nanosecond;
|
||||
grub_efi_int16_t time_zone;
|
||||
grub_efi_uint8_t daylight;
|
||||
grub_efi_uint8_t pad2;
|
||||
};
|
||||
typedef struct grub_efi_time grub_efi_time_t;
|
||||
|
||||
struct grub_efi_time_capabilities
|
||||
{
|
||||
grub_efi_uint32_t resolution;
|
||||
grub_efi_uint32_t accuracy;
|
||||
grub_efi_boolean_t sets_to_zero;
|
||||
};
|
||||
typedef struct grub_efi_time_capabilities grub_efi_time_capabilities_t;
|
||||
|
||||
struct grub_efi_input_key
|
||||
{
|
||||
grub_efi_uint16_t scan_code;
|
||||
grub_efi_char16_t unicode_char;
|
||||
};
|
||||
typedef struct grub_efi_input_key grub_efi_input_key_t;
|
||||
|
||||
struct grub_efi_simple_text_output_mode
|
||||
{
|
||||
grub_efi_int32_t max_mode;
|
||||
grub_efi_int32_t mode;
|
||||
grub_efi_int32_t attribute;
|
||||
grub_efi_int32_t cursor_column;
|
||||
grub_efi_int32_t cursor_row;
|
||||
grub_efi_boolean_t cursor_visible;
|
||||
};
|
||||
typedef struct grub_efi_simple_text_output_mode grub_efi_simple_text_output_mode_t;
|
||||
|
||||
/* Tables. */
|
||||
struct grub_efi_table_header
|
||||
{
|
||||
grub_efi_uint64_t signature;
|
||||
grub_efi_uint32_t revision;
|
||||
grub_efi_uint32_t header_size;
|
||||
grub_efi_uint32_t crc32;
|
||||
grub_efi_uint32_t reserved;
|
||||
};
|
||||
typedef struct grub_efi_table_header grub_efi_table_header_t;
|
||||
|
||||
struct grub_efi_boot_services
|
||||
{
|
||||
grub_efi_table_header_t hdr;
|
||||
|
||||
grub_efi_tpl_t
|
||||
(*raise_tpl) (grub_efi_tpl_t new_tpl);
|
||||
|
||||
void
|
||||
(*restore_tpl) (grub_efi_tpl_t old_tpl);
|
||||
|
||||
grub_efi_status_t
|
||||
(*allocate_pages) (grub_efi_allocate_type_t type,
|
||||
grub_efi_memory_type_t memory_type,
|
||||
grub_efi_uintn_t pages,
|
||||
grub_efi_physical_address_t *memory);
|
||||
|
||||
grub_efi_status_t
|
||||
(*free_pages) (grub_efi_physical_address_t memory,
|
||||
grub_efi_uintn_t pages);
|
||||
|
||||
grub_efi_status_t
|
||||
(*get_memory_map) (grub_efi_uintn_t *memory_map_size,
|
||||
grub_efi_memory_descriptor_t *memory_map,
|
||||
grub_efi_uintn_t *map_key,
|
||||
grub_efi_uintn_t *descriptor_size,
|
||||
grub_efi_uint32_t *descriptor_version);
|
||||
|
||||
grub_efi_status_t
|
||||
(*allocate_pool) (grub_efi_memory_type_t pool_type,
|
||||
grub_efi_uintn_t size,
|
||||
void **buffer);
|
||||
|
||||
grub_efi_status_t
|
||||
(*free_pool) (void *buffer);
|
||||
|
||||
grub_efi_status_t
|
||||
(*create_event) (grub_efi_uint32_t type,
|
||||
grub_efi_tpl_t notify_tpl,
|
||||
void (*notify_function) (grub_efi_event_t event,
|
||||
void *context),
|
||||
void *notify_context,
|
||||
grub_efi_event_t *event);
|
||||
|
||||
grub_efi_status_t
|
||||
|
||||
(*set_timer) (grub_efi_event_t event,
|
||||
grub_efi_timer_delay_t type,
|
||||
grub_efi_uint64_t trigger_time);
|
||||
|
||||
grub_efi_status_t
|
||||
(*wait_for_event) (grub_efi_uintn_t num_events,
|
||||
grub_efi_event_t *event,
|
||||
grub_efi_uintn_t *index);
|
||||
|
||||
grub_efi_status_t
|
||||
(*signal_event) (grub_efi_event_t event);
|
||||
|
||||
grub_efi_status_t
|
||||
(*close_event) (grub_efi_event_t event);
|
||||
|
||||
grub_efi_status_t
|
||||
(*check_event) (grub_efi_event_t event);
|
||||
|
||||
grub_efi_status_t
|
||||
(*install_protocol_interface) (grub_efi_handle_t *handle,
|
||||
grub_efi_guid_t *protocol,
|
||||
grub_efi_interface_type_t interface_type,
|
||||
void *interface);
|
||||
|
||||
grub_efi_status_t
|
||||
(*reinstall_protocol_interface) (grub_efi_handle_t handle,
|
||||
grub_efi_guid_t *protocol,
|
||||
void *old_interface,
|
||||
void *new_inteface);
|
||||
|
||||
grub_efi_status_t
|
||||
(*uninstall_protocol_interface) (grub_efi_handle_t handle,
|
||||
grub_efi_guid_t *protocol,
|
||||
void *interface);
|
||||
|
||||
grub_efi_status_t
|
||||
(*handle_protocol) (grub_efi_handle_t handle,
|
||||
grub_efi_guid_t *protocol,
|
||||
void **interface);
|
||||
|
||||
void *reserved;
|
||||
|
||||
grub_efi_status_t
|
||||
(*register_protocol_notify) (grub_efi_guid_t *protocol,
|
||||
grub_efi_event_t event,
|
||||
void **registration);
|
||||
|
||||
grub_efi_status_t
|
||||
(*locate_handle) (grub_efi_locate_search_type_t search_type,
|
||||
grub_efi_guid_t *protocol,
|
||||
void *search_key,
|
||||
grub_efi_uintn_t *buffer_size,
|
||||
grub_efi_handle_t *buffer);
|
||||
|
||||
grub_efi_status_t
|
||||
(*locate_device_path) (grub_efi_guid_t *protocol,
|
||||
grub_efi_device_path_t **device_path,
|
||||
grub_efi_handle_t *device);
|
||||
|
||||
grub_efi_status_t
|
||||
(*install_configuration_table) (grub_efi_guid_t *guid, void *table);
|
||||
|
||||
grub_efi_status_t
|
||||
(*load_image) (grub_efi_boolean_t boot_policy,
|
||||
grub_efi_handle_t parent_image_handle,
|
||||
grub_efi_device_path_t *file_path,
|
||||
void *source_buffer,
|
||||
grub_efi_uintn_t source_size,
|
||||
grub_efi_handle_t *image_handle);
|
||||
|
||||
grub_efi_status_t
|
||||
(*start_image) (grub_efi_handle_t image_handle,
|
||||
grub_efi_uintn_t *exit_data_size,
|
||||
grub_efi_char16_t **exit_data);
|
||||
|
||||
grub_efi_status_t
|
||||
(*exit) (grub_efi_handle_t image_handle,
|
||||
grub_efi_status_t exit_status,
|
||||
grub_efi_uintn_t exit_data_size,
|
||||
grub_efi_char16_t *exit_data) __attribute__((noreturn));
|
||||
|
||||
grub_efi_status_t
|
||||
(*unload_image) (grub_efi_handle_t image_handle);
|
||||
|
||||
grub_efi_status_t
|
||||
(*exit_boot_services) (grub_efi_handle_t image_handle,
|
||||
grub_efi_uintn_t map_key);
|
||||
|
||||
grub_efi_status_t
|
||||
(*get_next_monotonic_count) (grub_efi_uint64_t *count);
|
||||
|
||||
grub_efi_status_t
|
||||
(*stall) (grub_efi_uintn_t microseconds);
|
||||
|
||||
grub_efi_status_t
|
||||
(*set_watchdog_timer) (grub_efi_uintn_t timeout,
|
||||
grub_efi_uint64_t watchdog_code,
|
||||
grub_efi_uintn_t data_size,
|
||||
grub_efi_char16_t *watchdog_data);
|
||||
|
||||
grub_efi_status_t
|
||||
(*connect_controller) (grub_efi_handle_t controller_handle,
|
||||
grub_efi_handle_t *driver_image_handle,
|
||||
grub_efi_device_path_protocol_t *remaining_device_path,
|
||||
grub_efi_boolean_t recursive);
|
||||
|
||||
grub_efi_status_t
|
||||
(*disconnect_controller) (grub_efi_handle_t controller_handle,
|
||||
grub_efi_handle_t driver_image_handle,
|
||||
grub_efi_handle_t child_handle);
|
||||
|
||||
grub_efi_status_t
|
||||
(*open_protocol) (grub_efi_handle_t handle,
|
||||
grub_efi_guid_t *protocol,
|
||||
void **interface,
|
||||
grub_efi_handle_t agent_handle,
|
||||
grub_efi_handle_t controller_handle,
|
||||
grub_efi_uint32_t attributes);
|
||||
|
||||
grub_efi_status_t
|
||||
(*close_protocol) (grub_efi_handle_t handle,
|
||||
grub_efi_guid_t *protocol,
|
||||
grub_efi_handle_t agent_handle,
|
||||
grub_efi_handle_t controller_handle);
|
||||
|
||||
grub_efi_status_t
|
||||
(*open_protocol_information) (grub_efi_handle_t handle,
|
||||
grub_efi_guid_t *protocol,
|
||||
grub_efi_open_protocol_information_entry_t **entry_buffer,
|
||||
grub_efi_uintn_t *entry_count);
|
||||
|
||||
grub_efi_status_t
|
||||
(*protocols_per_handle) (grub_efi_handle_t handle,
|
||||
grub_efi_guid_t ***protocol_buffer,
|
||||
grub_efi_uintn_t *protocol_buffer_count);
|
||||
|
||||
grub_efi_status_t
|
||||
(*locate_handle_buffer) (grub_efi_locate_search_type_t search_type,
|
||||
grub_efi_guid_t *protocol,
|
||||
void *search_key,
|
||||
grub_efi_uintn_t *no_handles,
|
||||
grub_efi_handle_t **buffer);
|
||||
|
||||
grub_efi_status_t
|
||||
(*locate_protocol) (grub_efi_guid_t *protocol,
|
||||
void *registration,
|
||||
void **interface);
|
||||
|
||||
grub_efi_status_t
|
||||
(*install_multiple_protocol_interfaces) (grub_efi_handle_t *handle, ...);
|
||||
|
||||
grub_efi_status_t
|
||||
(*uninstall_multiple_protocol_interfaces) (grub_efi_handle_t handle, ...);
|
||||
|
||||
grub_efi_status_t
|
||||
(*calculate_crc32) (void *data,
|
||||
grub_efi_uintn_t data_size,
|
||||
grub_efi_uint32_t *crc32);
|
||||
|
||||
void
|
||||
(*copy_mem) (void *destination, void *source, grub_efi_uintn_t length);
|
||||
|
||||
void
|
||||
(*set_mem) (void *buffer, grub_efi_uintn_t size, grub_efi_uint8_t value);
|
||||
};
|
||||
typedef struct grub_efi_boot_services grub_efi_boot_services_t;
|
||||
|
||||
struct grub_efi_runtime_services
|
||||
{
|
||||
grub_efi_table_header_t hdr;
|
||||
|
||||
grub_efi_status_t
|
||||
(*get_time) (grub_efi_time_t *time,
|
||||
grub_efi_time_capabilities_t *capabilities);
|
||||
|
||||
grub_efi_status_t
|
||||
(*set_time) (grub_efi_time_t *time);
|
||||
|
||||
grub_efi_status_t
|
||||
(*get_wakeup_time) (grub_efi_boolean_t *enabled,
|
||||
grub_efi_boolean_t *pending,
|
||||
grub_efi_time_t *time);
|
||||
|
||||
grub_efi_status_t
|
||||
(*set_wakeup_time) (grub_efi_boolean_t enabled,
|
||||
grub_efi_time_t *time);
|
||||
|
||||
grub_efi_status_t
|
||||
(*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);
|
||||
|
||||
grub_efi_status_t
|
||||
(*convert_pointer) (grub_efi_uintn_t debug_disposition, void **address);
|
||||
|
||||
grub_efi_status_t
|
||||
(*get_variable) (grub_efi_char16_t *variable_name,
|
||||
grub_efi_guid_t *vendor_guid,
|
||||
grub_efi_uint32_t *attributes,
|
||||
grub_efi_uintn_t *data_size,
|
||||
void *data);
|
||||
|
||||
grub_efi_status_t
|
||||
(*get_next_variable_name) (grub_efi_uintn_t *variable_name_size,
|
||||
grub_efi_char16_t *variable_name,
|
||||
grub_efi_guid_t *vendor_guid);
|
||||
|
||||
grub_efi_status_t
|
||||
(*set_variable) (grub_efi_char16_t *variable_name,
|
||||
grub_efi_guid_t *vendor_guid,
|
||||
grub_efi_uint32_t attributes,
|
||||
grub_efi_uintn_t data_size,
|
||||
void *data);
|
||||
|
||||
grub_efi_status_t
|
||||
(*get_next_high_monotonic_count) (grub_efi_uint32_t *high_count);
|
||||
|
||||
void
|
||||
(*reset_system) (grub_efi_reset_type_t reset_type,
|
||||
grub_efi_status_t reset_status,
|
||||
grub_efi_uintn_t data_size,
|
||||
grub_efi_char16_t *reset_data);
|
||||
};
|
||||
typedef struct grub_efi_runtime_services grub_efi_runtime_services_t;
|
||||
|
||||
struct grub_efi_configuration_table
|
||||
{
|
||||
grub_efi_guid_t vendor_guid;
|
||||
void *vendor_table;
|
||||
};
|
||||
typedef struct grub_efi_configuration_table grub_efi_configuration_table_t;
|
||||
|
||||
struct grub_efi_simple_input_interface
|
||||
{
|
||||
grub_efi_status_t
|
||||
(*reset) (struct grub_efi_simple_input_interface *this,
|
||||
grub_efi_boolean_t extended_verification);
|
||||
|
||||
grub_efi_status_t
|
||||
(*read_key_stroke) (struct grub_efi_simple_input_interface *this,
|
||||
grub_efi_input_key_t *key);
|
||||
|
||||
grub_efi_event_t wait_for_key;
|
||||
};
|
||||
typedef struct grub_efi_simple_input_interface grub_efi_simple_input_interface_t;
|
||||
|
||||
struct grub_efi_simple_text_output_interface
|
||||
{
|
||||
grub_efi_status_t
|
||||
(*reset) (struct grub_efi_simple_text_output_interface *this,
|
||||
grub_efi_boolean_t extended_verification);
|
||||
|
||||
grub_efi_status_t
|
||||
(*output_string) (struct grub_efi_simple_text_output_interface *this,
|
||||
grub_efi_char16_t *string);
|
||||
|
||||
grub_efi_status_t
|
||||
(*test_string) (struct grub_efi_simple_text_output_interface *this,
|
||||
grub_efi_char16_t *string);
|
||||
|
||||
grub_efi_status_t
|
||||
(*query_mode) (struct grub_efi_simple_text_output_interface *this,
|
||||
grub_efi_uintn_t mode_number,
|
||||
grub_efi_uintn_t *columns,
|
||||
grub_efi_uintn_t *rows);
|
||||
|
||||
grub_efi_status_t
|
||||
(*set_mode) (struct grub_efi_simple_text_output_interface *this,
|
||||
grub_efi_uintn_t mode_number);
|
||||
|
||||
grub_efi_status_t
|
||||
(*set_attributes) (struct grub_efi_simple_text_output_interface *this,
|
||||
grub_efi_uintn_t attribute);
|
||||
|
||||
grub_efi_status_t
|
||||
(*clear_screen) (struct grub_efi_simple_text_output_interface *this);
|
||||
|
||||
grub_efi_status_t
|
||||
(*set_cursor_position) (struct grub_efi_simple_text_output_interface *this,
|
||||
grub_efi_uintn_t column,
|
||||
grub_efi_uintn_t row);
|
||||
|
||||
grub_efi_status_t
|
||||
(*enable_cursor) (struct grub_efi_simple_text_output_interface *this,
|
||||
grub_efi_boolean_t visible);
|
||||
|
||||
grub_efi_simple_text_output_mode_t *mode;
|
||||
};
|
||||
typedef struct grub_efi_simple_text_output_interface grub_efi_simple_text_output_interface_t;
|
||||
|
||||
struct grub_efi_system_table
|
||||
{
|
||||
grub_efi_table_header_t hdr;
|
||||
grub_efi_char16_t *firmware_vendor;
|
||||
grub_efi_uint32_t firmware_revision;
|
||||
grub_efi_handle_t console_in_handler;
|
||||
grub_efi_simple_input_interface_t *con_in;
|
||||
grub_efi_handle_t console_out_handler;
|
||||
grub_efi_simple_text_output_interface_t *con_out;
|
||||
grub_efi_handle_t standard_error_handle;
|
||||
grub_efi_simple_text_output_interface_t *std_err;
|
||||
grub_efi_runtime_services_t *runtime_services;
|
||||
grub_efi_boot_services_t *boot_services;
|
||||
grub_efi_uintn_t num_table_entries;
|
||||
grub_efi_configuration_table_t *configuration_table;
|
||||
};
|
||||
typedef struct grub_efi_system_table grub_efi_system_table_t;
|
||||
|
||||
#endif /* ! GRUB_EFI_API_HEADER */
|
56
include/grub/efi/console_control.h
Normal file
56
include/grub/efi/console_control.h
Normal file
|
@ -0,0 +1,56 @@
|
|||
/* console_control.h - definitions of the console control protocol */
|
||||
/*
|
||||
* GRUB -- GRand Unified Bootloader
|
||||
* Copyright (C) 2006 Free Software Foundation, Inc.
|
||||
*
|
||||
* This program 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 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program 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 this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*/
|
||||
|
||||
/* The console control protocol is not a part of the EFI spec,
|
||||
but defined in Intel's Sample Implementation. */
|
||||
|
||||
#ifndef GRUB_EFI_CONSOLE_CONTROL_HEADER
|
||||
#define GRUB_EFI_CONSOLE_CONTROL_HEADER 1
|
||||
|
||||
#define GRUB_EFI_CONSOLE_CONTROL_GUID \
|
||||
{ 0xf42f7782, 0x12e, 0x4c12, 0x99, 0x56, 0x49, 0xf9, 0x43, 0x4, 0xf7, 0x21 }
|
||||
|
||||
enum grub_efi_screen_mode
|
||||
{
|
||||
GRUB_EFI_SCREEN_TEXT,
|
||||
GRUB_EFI_SCREEN_GRAPHICS,
|
||||
GRUB_EFI_SCREEN_TEXT_MAX_VALUE
|
||||
};
|
||||
typedef enum grub_efi_screen_mode grub_efi_screen_mode_t;
|
||||
|
||||
struct grub_efi_console_control_protocol
|
||||
{
|
||||
grub_efi_status_t
|
||||
(*get_mode) (struct grub_efi_console_control_protocol *this,
|
||||
grub_efi_screen_mode_t *mode,
|
||||
grub_efi_boolean_t *uga_exists,
|
||||
grub_efi_boolean_t *std_in_locked);
|
||||
|
||||
grub_efi_status_t
|
||||
(*set_mode) (struct grub_efi_console_control_protocol *this,
|
||||
grub_efi_screen_mode_t mode);
|
||||
|
||||
grub_efi_status_t
|
||||
(*lock_std_in) (struct grub_efi_console_control_protocol *this,
|
||||
grub_efi_char16_t *password);
|
||||
};
|
||||
typedef struct grub_efi_console_control_protocol grub_efi_console_control_protocol_t;
|
||||
|
||||
#endif /* ! GRUB_EFI_CONSOLE_CONTROL_HEADER */
|
39
include/grub/efi/efi.h
Normal file
39
include/grub/efi/efi.h
Normal file
|
@ -0,0 +1,39 @@
|
|||
/* efi.h - declare variables and functions for EFI support */
|
||||
/*
|
||||
* GRUB -- GRand Unified Bootloader
|
||||
* Copyright (C) 2006 Free Software Foundation, Inc.
|
||||
*
|
||||
* This program 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 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program 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 this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*/
|
||||
|
||||
#ifndef GRUB_EFI_EFI_HEADER
|
||||
#define GRUB_EFI_EFI_HEADER 1
|
||||
|
||||
#include <grub/types.h>
|
||||
#include <grub/dl.h>
|
||||
#include <grub/efi/api.h>
|
||||
|
||||
/* Functions. */
|
||||
void *EXPORT_FUNC(grub_efi_locate_protocol) (grub_efi_guid_t *protocol,
|
||||
void *registration);
|
||||
int EXPORT_FUNC(grub_efi_set_text_mode) (int on);
|
||||
void EXPORT_FUNC(grub_efi_exit) (void) __attribute__((noreturn));
|
||||
int EXPORT_FUNC(grub_efi_output_string) (const char *str);
|
||||
|
||||
/* Variables. */
|
||||
extern grub_efi_system_table_t *EXPORT_VAR(grub_efi_system_table);
|
||||
extern grub_efi_handle_t EXPORT_VAR(grub_efi_image_handle);
|
||||
|
||||
#endif /* ! GRUB_EFI_EFI_HEADER */
|
199
include/grub/efi/pe32.h
Normal file
199
include/grub/efi/pe32.h
Normal file
|
@ -0,0 +1,199 @@
|
|||
/*
|
||||
* GRUB -- GRand Unified Bootloader
|
||||
* Copyright (C) 2006 Free Software Foundation, Inc.
|
||||
*
|
||||
* This program 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 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program 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 this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*/
|
||||
|
||||
#ifndef GRUB_EFI_PE32_HEADER
|
||||
#define GRUB_EFI_PE32_HEADER 1
|
||||
|
||||
#include <grub/types.h>
|
||||
|
||||
/* The MSDOS compatibility stub. This was copied from the output of
|
||||
objcopy, and it is not necessary to care about what this means. */
|
||||
#define GRUB_PE32_MSDOS_STUB \
|
||||
{ \
|
||||
0x4d, 0x5a, 0x90, 0x00, 0x03, 0x00, 0x00, 0x00, \
|
||||
0x04, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, \
|
||||
0xb8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
|
||||
0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
|
||||
0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, \
|
||||
0x0e, 0x1f, 0xba, 0x0e, 0x00, 0xb4, 0x09, 0xcd, \
|
||||
0x21, 0xb8, 0x01, 0x4c, 0xcd, 0x21, 0x54, 0x68, \
|
||||
0x69, 0x73, 0x20, 0x70, 0x72, 0x6f, 0x67, 0x72, \
|
||||
0x61, 0x6d, 0x20, 0x63, 0x61, 0x6e, 0x6e, 0x6f, \
|
||||
0x74, 0x20, 0x62, 0x65, 0x20, 0x72, 0x75, 0x6e, \
|
||||
0x20, 0x69, 0x6e, 0x20, 0x44, 0x4f, 0x53, 0x20, \
|
||||
0x6d, 0x6f, 0x64, 0x65, 0x2e, 0x0d, 0x0d, 0x0a, \
|
||||
0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 \
|
||||
}
|
||||
|
||||
#define GRUB_PE32_MSDOS_STUB_SIZE 0x80
|
||||
|
||||
/* According to the spec, the minimal alignment is 512 bytes...
|
||||
But some examples (such as EFI drivers in the Intel
|
||||
Sample Implementation) use 32 bytes (0x20) instead, and it seems
|
||||
to be working. For now, GRUB uses 512 bytes for safety. */
|
||||
#define GRUB_PE32_SECTION_ALIGNMENT 0x200
|
||||
#define GRUB_PE32_FILE_ALIGNMENT GRUB_PE32_SECTION_ALIGNMENT
|
||||
|
||||
struct grub_pe32_coff_header
|
||||
{
|
||||
grub_uint16_t machine;
|
||||
grub_uint16_t num_sections;
|
||||
grub_uint32_t time;
|
||||
grub_uint32_t symtab_offset;
|
||||
grub_uint32_t num_symbols;
|
||||
grub_uint16_t optional_header_size;
|
||||
grub_uint16_t characteristics;
|
||||
};
|
||||
|
||||
#define GRUB_PE32_MACHINE_I386 0x14c
|
||||
|
||||
#define GRUB_PE32_RELOCS_STRIPPED 0x0001
|
||||
#define GRUB_PE32_EXECUTABLE_IMAGE 0x0002
|
||||
#define GRUB_PE32_LINE_NUMS_STRIPPED 0x0004
|
||||
#define GRUB_PE32_LOCAL_SYMS_STRIPPED 0x0008
|
||||
#define GRUB_PE32_AGGRESSIVE_WS_TRIM 0x0010
|
||||
#define GRUB_PE32_LARGE_ADDRESS_AWARE 0x0020
|
||||
#define GRUB_PE32_16BIT_MACHINE 0x0040
|
||||
#define GRUB_PE32_BYTES_REVERSED_LO 0x0080
|
||||
#define GRUB_PE32_32BIT_MACHINE 0x0100
|
||||
#define GRUB_PE32_DEBUG_STRIPPED 0x0200
|
||||
#define GRUB_PE32_REMOVABLE_RUN_FROM_SWAP 0x0400
|
||||
#define GRUB_PE32_SYSTEM 0x1000
|
||||
#define GRUB_PE32_DLL 0x2000
|
||||
#define GRUB_PE32_UP_SYSTEM_ONLY 0x4000
|
||||
#define GRUB_PE32_BYTES_REVERSED_HI 0x8000
|
||||
|
||||
struct grub_pe32_data_directory
|
||||
{
|
||||
grub_uint32_t rva;
|
||||
grub_uint32_t size;
|
||||
};
|
||||
|
||||
struct grub_pe32_optional_header
|
||||
{
|
||||
grub_uint16_t magic;
|
||||
grub_uint8_t major_linker_version;
|
||||
grub_uint8_t minor_linker_version;
|
||||
grub_uint32_t code_size;
|
||||
grub_uint32_t data_size;
|
||||
grub_uint32_t bss_size;
|
||||
grub_uint32_t entry_addr;
|
||||
grub_uint32_t code_base;
|
||||
|
||||
grub_uint32_t data_base;
|
||||
|
||||
grub_uint32_t image_base;
|
||||
grub_uint32_t section_alignment;
|
||||
grub_uint32_t file_alignment;
|
||||
grub_uint16_t major_os_version;
|
||||
grub_uint16_t minor_os_version;
|
||||
grub_uint16_t major_image_version;
|
||||
grub_uint16_t minor_image_version;
|
||||
grub_uint16_t major_subsystem_version;
|
||||
grub_uint16_t minor_subsystem_version;
|
||||
grub_uint32_t reserved;
|
||||
grub_uint32_t image_size;
|
||||
grub_uint32_t header_size;
|
||||
grub_uint32_t checksum;
|
||||
grub_uint16_t subsystem;
|
||||
grub_uint16_t dll_characteristics;
|
||||
grub_uint32_t stack_reserve_size;
|
||||
grub_uint32_t stack_commit_size;
|
||||
grub_uint32_t heap_reserve_size;
|
||||
grub_uint32_t heap_commit_size;
|
||||
grub_uint32_t loader_flags;
|
||||
grub_uint32_t num_data_directories;
|
||||
|
||||
/* Data directories. */
|
||||
struct grub_pe32_data_directory export_table;
|
||||
struct grub_pe32_data_directory import_table;
|
||||
struct grub_pe32_data_directory resource_table;
|
||||
struct grub_pe32_data_directory exception_table;
|
||||
struct grub_pe32_data_directory certificate_table;
|
||||
struct grub_pe32_data_directory base_relocation_table;
|
||||
struct grub_pe32_data_directory debug;
|
||||
struct grub_pe32_data_directory architecture;
|
||||
struct grub_pe32_data_directory global_ptr;
|
||||
struct grub_pe32_data_directory tls_table;
|
||||
struct grub_pe32_data_directory load_config_table;
|
||||
struct grub_pe32_data_directory bound_import;
|
||||
struct grub_pe32_data_directory iat;
|
||||
struct grub_pe32_data_directory delay_import_descriptor;
|
||||
struct grub_pe32_data_directory com_runtime_header;
|
||||
struct grub_pe32_data_directory reserved_entry;
|
||||
};
|
||||
|
||||
#define GRUB_PE32_PE32_MAGIC 0x10b
|
||||
|
||||
#define GRUB_PE32_SUBSYSTEM_EFI_APPLICATION 10
|
||||
|
||||
#define GRUB_PE32_NUM_DATA_DIRECTORIES 16
|
||||
|
||||
struct grub_pe32_section_table
|
||||
{
|
||||
char name[8];
|
||||
grub_uint32_t virtual_size;
|
||||
grub_uint32_t virtual_address;
|
||||
grub_uint32_t raw_data_size;
|
||||
grub_uint32_t raw_data_offset;
|
||||
grub_uint32_t relocations_offset;
|
||||
grub_uint32_t line_numbers_offset;
|
||||
grub_uint16_t num_relocations;
|
||||
grub_uint16_t num_line_numbers;
|
||||
grub_uint32_t characteristics;
|
||||
};
|
||||
|
||||
#define GRUB_PE32_SCN_CNT_CODE 0x00000020
|
||||
#define GRUB_PE32_SCN_CNT_INITIALIZED_DATA 0x00000040
|
||||
#define GRUB_PE32_SCN_MEM_DISCARDABLE 0x02000000
|
||||
#define GRUB_PE32_SCN_MEM_EXECUTE 0x20000000
|
||||
#define GRUB_PE32_SCN_MEM_READ 0x40000000
|
||||
#define GRUB_PE32_SCN_MEM_WRITE 0x80000000
|
||||
|
||||
struct grub_pe32_header
|
||||
{
|
||||
/* This should be filled in with GRUB_PE32_MSDOS_STUB. */
|
||||
grub_uint8_t msdos_stub[GRUB_PE32_MSDOS_STUB_SIZE];
|
||||
|
||||
/* This is always PE\0\0. */
|
||||
char signature[4];
|
||||
|
||||
/* The COFF file header. */
|
||||
struct grub_pe32_coff_header coff_header;
|
||||
|
||||
/* The Optional header. */
|
||||
struct grub_pe32_optional_header optional_header;
|
||||
};
|
||||
|
||||
struct grub_pe32_fixup_block
|
||||
{
|
||||
grub_uint32_t page_rva;
|
||||
grub_uint32_t block_size;
|
||||
grub_uint16_t entries[0];
|
||||
};
|
||||
|
||||
#define GRUB_PE32_FIXUP_ENTRY(type, offset) (((type) << 12) | (offset))
|
||||
|
||||
#define GRUB_PE32_REL_BASED_ABSOLUTE 0
|
||||
#define GRUB_PE32_REL_BASED_HIGHLOW 3
|
||||
|
||||
#endif /* ! GRUB_EFI_PE32_HEADER */
|
31
include/grub/i386/efi/time.h
Normal file
31
include/grub/i386/efi/time.h
Normal file
|
@ -0,0 +1,31 @@
|
|||
/*
|
||||
* GRUB -- GRand Unified Bootloader
|
||||
* Copyright (C) 2006 Free Software Foundation, Inc.
|
||||
*
|
||||
* This program 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 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program 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 this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
|
||||
* MA 02110-1301, USA.
|
||||
*/
|
||||
|
||||
#ifndef KERNEL_TIME_HEADER
|
||||
#define KERNEL_TIME_HEADER 1
|
||||
|
||||
#include <grub/symbol.h>
|
||||
|
||||
#define GRUB_TICKS_PER_SECOND 1193
|
||||
|
||||
/* Return the real time in ticks. */
|
||||
grub_uint32_t EXPORT_FUNC (grub_get_rtc) (void);
|
||||
|
||||
#endif /* ! KERNEL_TIME_HEADER */
|
Loading…
Add table
Add a link
Reference in a new issue