625 lines
17 KiB
C
625 lines
17 KiB
C
/*
|
|
* Copyright (c) 2020 Intel Corporation
|
|
*
|
|
* SPDX-License-Identifier: Apache-2.0
|
|
*/
|
|
|
|
#ifndef ZEPHYR_ARCH_X86_EFI_H_
|
|
#define ZEPHYR_ARCH_X86_EFI_H_
|
|
|
|
#ifndef _ASMLANGUAGE
|
|
|
|
#include <stdbool.h>
|
|
#include <zephyr/sys/util.h>
|
|
|
|
#define __abi __attribute__((ms_abi))
|
|
|
|
/*
|
|
* This is a quick installment of EFI structures and functions.
|
|
* Only a very minimal subset will be used and documented, thus the
|
|
* lack of documentation at the moment.
|
|
* See the UEFI 2.8b specifications for more information
|
|
* at https://www.uefi.org/specifications
|
|
*/
|
|
|
|
/* Note: all specified attributes/parameters of type char16_t have been
|
|
* translated to uint16_t as, for now, we don't have char16_t and we don't
|
|
* care being pedantic, plus we do not use it yet.
|
|
* This will need to be changed if required.
|
|
*/
|
|
|
|
typedef uintptr_t efi_status_t;
|
|
|
|
#define EFI_STATUS(_status) (_status | BIT((BITS_PER_LONG-1)))
|
|
|
|
#define EFI_SUCCESS 0
|
|
#define EFI_LOAD_ERROR EFI_STATUS(1)
|
|
#define EFI_INVALID_PARAMETER EFI_STATUS(2)
|
|
#define EFI_UNSUPPORTED EFI_STATUS(3)
|
|
#define EFI_BAD_BUFFER_SIZE EFI_STATUS(4)
|
|
#define EFI_BUFFER_TOO_SMALL EFI_STATUS(5)
|
|
#define EFI_NOT_READY EFI_STATUS(6)
|
|
#define EFI_DEVICE_ERROR EFI_STATUS(7)
|
|
#define EFI_WRITE_PROTECTED EFI_STATUS(8)
|
|
#define EFI_OUT_OF_RESOURCES EFI_STATUS(9)
|
|
#define EFI_VOLUME_CORRUPTED EFI_STATUS(10)
|
|
#define EFI_VOLUME_FULL EFI_STATUS(11)
|
|
#define EFI_NO_MEDIA EFI_STATUS(12)
|
|
#define EFI_MEDIA_CHANGED EFI_STATUS(13)
|
|
#define EFI_NOT_FOUND EFI_STATUS(14)
|
|
#define EFI_ACCESS_DENIED EFI_STATUS(15)
|
|
#define EFI_NO_RESPONSE EFI_STATUS(16)
|
|
#define EFI_NO_MAPPING EFI_STATUS(17)
|
|
#define EFI_TIMEOUT EFI_STATUS(18)
|
|
#define EFI_NOT_STARTED EFI_STATUS(19)
|
|
#define EFI_ALREADY_STARTED EFI_STATUS(20)
|
|
#define EFI_ABORTED EFI_STATUS(21)
|
|
#define EFI_ICMP_ERROR EFI_STATUS(22)
|
|
#define EFI_TFTP_ERROR EFI_STATUS(23)
|
|
#define EFI_PROTOCOL_ERROR EFI_STATUS(24)
|
|
#define EFI_INCOMPATIBLE_VERSION EFI_STATUS(25)
|
|
#define EFI_SECURITY_VIOLATION EFI_STATUS(26)
|
|
#define EFI_CRC_ERROR EFI_STATUS(27)
|
|
#define EFI_END_OF_MEDIA EFI_STATUS(28)
|
|
#define EFI_END_OF_FILE EFI_STATUS(31)
|
|
#define EFI_INVALID_LANGUAGE EFI_STATUS(32)
|
|
#define EFI_COMPROMISED_DATA EFI_STATUS(33)
|
|
#define EFI_IP_ADDRESS_CONFLICT EFI_STATUS(34)
|
|
#define EFI_HTTP_ERROR EFI_STATUS(35)
|
|
|
|
typedef struct {
|
|
union {
|
|
struct {
|
|
uint32_t Data1;
|
|
uint16_t Data2;
|
|
uint16_t Data3;
|
|
uint8_t Data4[8];
|
|
};
|
|
|
|
/* Easier for comparison */
|
|
struct {
|
|
uint64_t Part1;
|
|
uint64_t Part2;
|
|
};
|
|
};
|
|
} efi_guid_t;
|
|
|
|
struct efi_input_key {
|
|
uint16_t ScanCode;
|
|
uint16_t UnicodeChar;
|
|
};
|
|
|
|
struct efi_table_header {
|
|
uint64_t Signature;
|
|
uint32_t Revision;
|
|
uint32_t HeaderSize;
|
|
uint32_t CRC32;
|
|
uint32_t Reserved;
|
|
};
|
|
|
|
struct efi_simple_text_input;
|
|
|
|
typedef efi_status_t __abi (*efi_input_reset_t)(
|
|
struct efi_simple_text_input *This,
|
|
bool ExtendedVerification);
|
|
typedef efi_status_t __abi (*efi_input_read_key_t)(
|
|
struct efi_simple_text_input *This,
|
|
struct efi_input_key *Key);
|
|
|
|
struct efi_simple_text_input {
|
|
efi_input_reset_t Reset;
|
|
efi_input_read_key_t ReadKeyStroke;
|
|
void *WaitForKey;
|
|
};
|
|
|
|
struct efi_simple_text_output_mode {
|
|
int32_t MaxMode;
|
|
int32_t Mode;
|
|
int32_t Attribute;
|
|
int32_t CursorColumn;
|
|
int32_t CursorRow;
|
|
bool CursorVisible;
|
|
};
|
|
|
|
struct efi_simple_text_output;
|
|
|
|
typedef efi_status_t __abi (*efi_text_reset_t)(
|
|
struct efi_simple_text_output *This,
|
|
bool ExtendedVerification);
|
|
|
|
typedef efi_status_t __abi (*efi_text_string_t)(
|
|
struct efi_simple_text_output *This,
|
|
uint16_t *String);
|
|
|
|
typedef efi_status_t __abi (*efi_text_test_string_t)(
|
|
struct efi_simple_text_output *This,
|
|
uint16_t *String);
|
|
|
|
typedef efi_status_t __abi (*efi_text_query_mode_t)(
|
|
struct efi_simple_text_output *This,
|
|
uintptr_t ModeNumber,
|
|
uintptr_t *Columns,
|
|
uintptr_t *Rows);
|
|
|
|
typedef efi_status_t __abi (*efi_text_set_mode_t)(
|
|
struct efi_simple_text_output *This,
|
|
uintptr_t ModeNumber);
|
|
|
|
typedef efi_status_t __abi (*efi_text_set_attribute_t)(
|
|
struct efi_simple_text_output *This,
|
|
uintptr_t Attribute);
|
|
|
|
typedef efi_status_t __abi (*efi_text_clear_screen_t)(
|
|
struct efi_simple_text_output *This);
|
|
|
|
typedef efi_status_t __abi (*efi_text_cursor_position_t)(
|
|
struct efi_simple_text_output *This,
|
|
uintptr_t Column,
|
|
uintptr_t Row);
|
|
|
|
typedef efi_status_t __abi (*efi_text_enable_cursor_t)(
|
|
struct efi_simple_text_output *This,
|
|
bool Visible);
|
|
|
|
struct efi_simple_text_output {
|
|
efi_text_reset_t Reset;
|
|
efi_text_string_t OutputString;
|
|
efi_text_test_string_t TestString;
|
|
efi_text_query_mode_t QueryMode;
|
|
efi_text_set_mode_t SetMode;
|
|
efi_text_set_attribute_t SetAttribute;
|
|
efi_text_clear_screen_t ClearScreen;
|
|
efi_text_cursor_position_t SetCursorPosition;
|
|
efi_text_enable_cursor_t EnableCursor;
|
|
struct efi_simple_text_output_mode *Mode;
|
|
};
|
|
|
|
struct efi_time {
|
|
uint16_t Year;
|
|
uint8_t Month;
|
|
uint8_t Day;
|
|
uint8_t Hour;
|
|
uint8_t Minute;
|
|
uint8_t Second;
|
|
uint8_t Pad1;
|
|
uint32_t NanoSecond;
|
|
int16_t TimeZone;
|
|
uint8_t DayLight;
|
|
uint8_t Pad2;
|
|
};
|
|
|
|
struct efi_time_capabilities {
|
|
uint32_t Resolution;
|
|
uint32_t Accuracy;
|
|
bool SetsToZero;
|
|
};
|
|
|
|
struct efi_memory_descriptor {
|
|
uint32_t Type;
|
|
uint64_t PhysicalStart;
|
|
uint64_t VirtualStart;
|
|
uint64_t NumberOfPages;
|
|
uint64_t Attribute;
|
|
};
|
|
|
|
typedef efi_status_t __abi (*efi_get_time_t)(
|
|
struct efi_time *Time,
|
|
struct efi_time_capabilities *Capabilities);
|
|
|
|
typedef efi_status_t __abi (*efi_set_time_t)(struct efi_time *Time);
|
|
|
|
typedef efi_status_t __abi (*efi_get_wakeup_time_t)(bool *Enabled,
|
|
bool *Pending,
|
|
struct efi_time *Time);
|
|
|
|
typedef efi_status_t __abi (*efi_set_wakeup_time_t)(bool Enabled,
|
|
struct efi_time *Time);
|
|
|
|
typedef efi_status_t __abi (*efi_set_virtual_address_map_t)(
|
|
uintptr_t MemoryMapSize,
|
|
uintptr_t DescriptorSize,
|
|
uint32_t DescriptorVersion,
|
|
struct efi_memory_descriptor *VirtualMap);
|
|
|
|
typedef efi_status_t __abi (*efi_convert_pointer_t)(uintptr_t DebugDisposition,
|
|
void **Address);
|
|
|
|
typedef efi_status_t __abi (*efi_get_variable_t)(uint16_t *VariableName,
|
|
efi_guid_t *VendorGuid,
|
|
uint32_t *Attributes,
|
|
uintptr_t *DataSize,
|
|
void *Data);
|
|
|
|
typedef efi_status_t __abi (*efi_get_next_variable_name_t)(
|
|
uintptr_t *VariableNameSize,
|
|
uint16_t *VariableName,
|
|
efi_guid_t *VendorGuid);
|
|
|
|
typedef efi_status_t __abi (*efi_set_variable_t)(uint16_t *VariableName,
|
|
efi_guid_t *VendorGuid,
|
|
uint32_t *Attributes,
|
|
uintptr_t *DataSize,
|
|
void *Data);
|
|
|
|
typedef efi_status_t __abi (*efi_get_next_high_monotonic_count_t)(
|
|
uint32_t *HighCount);
|
|
|
|
enum efi_reset_type {
|
|
EfiResetCold,
|
|
EfiResetWarm,
|
|
EfiResetShutdown,
|
|
EfiResetPlatformSpecific
|
|
};
|
|
|
|
typedef efi_status_t __abi (*efi_reset_system_t)(
|
|
enum efi_reset_type ResetType,
|
|
uintptr_t ResetStatus,
|
|
uintptr_t DataSize,
|
|
void *ResetData);
|
|
|
|
struct efi_capsule_header {
|
|
efi_guid_t CapsuleGuid;
|
|
uint32_t HeaderSize;
|
|
uint32_t Flags;
|
|
uint32_t CapsuleImageSize;
|
|
};
|
|
|
|
typedef efi_status_t __abi (*efi_update_capsule_t)(
|
|
struct efi_capsule_header **CapsuleHeaderArray,
|
|
uintptr_t CapsuleCount,
|
|
uint64_t ScatterGatherList);
|
|
|
|
typedef efi_status_t __abi (*efi_query_capsule_capabilities_t)(
|
|
struct efi_capsule_header **CapsuleHeaderArray,
|
|
uintptr_t CapsuleCount,
|
|
uint64_t *MaximumCapsuleSize,
|
|
enum efi_reset_type ResetType);
|
|
|
|
typedef efi_status_t __abi (*efi_query_variable_info_t)(
|
|
uint32_t Attributes,
|
|
uint64_t *MaximumVariableStorageSize,
|
|
uint64_t *RemainingVariableStorageSize,
|
|
uint64_t *MaximumVariableSize);
|
|
|
|
struct efi_runtime_services {
|
|
struct efi_table_header Hdr;
|
|
efi_get_time_t GetTime;
|
|
efi_set_time_t SetTime;
|
|
efi_get_wakeup_time_t GetWakeupTime;
|
|
efi_set_wakeup_time_t SetWakeupTime;
|
|
efi_set_virtual_address_map_t SetVirtualAddressMap;
|
|
efi_convert_pointer_t ConvertPointer;
|
|
efi_get_variable_t GetVariable;
|
|
efi_get_next_variable_name_t GetNextVariableName;
|
|
efi_set_variable_t SetVariable;
|
|
efi_get_next_high_monotonic_count_t GetNextHighMonotonicCount;
|
|
efi_reset_system_t ResetSystem;
|
|
efi_update_capsule_t UpdateCapsule;
|
|
efi_query_capsule_capabilities_t QueryCapsuleCapabilities;
|
|
efi_query_variable_info_t QueryVariableInfo;
|
|
};
|
|
|
|
typedef uintptr_t __abi (*efi_raise_tpl_t)(uintptr_t NewTpl);
|
|
|
|
typedef void __abi (*efi_restore_tpl_t)(uintptr_t OldTpl);
|
|
|
|
enum efi_allocate_type {
|
|
AllocateAnyPages,
|
|
AllocateMaxAddress,
|
|
AllocateAddress,
|
|
MaxAllocateType
|
|
};
|
|
|
|
enum efi_memory_type {
|
|
EfiReservedMemoryType,
|
|
EfiLoaderCode,
|
|
EfiLoaderData,
|
|
EfiBootServicesCode,
|
|
EfiBootServicesData,
|
|
EfiRuntimeServicesCode,
|
|
EfiRuntimeServicesData,
|
|
EfiConventionalMemory,
|
|
EfiUnusableMemory,
|
|
EfiACPIReclaimMemory,
|
|
EfiACPIMemoryNVS,
|
|
EfiMemoryMappedIO,
|
|
EfiMemoryMappedIOPortSpace,
|
|
EfiPalCode,
|
|
EfiPersistentMemory,
|
|
EfiMaxMemoryType
|
|
};
|
|
|
|
typedef efi_status_t __abi (*efi_allocate_pages_t)(
|
|
enum efi_allocate_type Type,
|
|
enum efi_memory_type MemoryType,
|
|
uintptr_t Pages,
|
|
uint64_t *Memory);
|
|
|
|
typedef efi_status_t __abi (*efi_free_pages_t)(uint64_t Memory,
|
|
uintptr_t Pages);
|
|
|
|
typedef efi_status_t __abi (*efi_get_memory_map_t)(
|
|
uintptr_t *MemoryMapSize,
|
|
struct efi_memory_descriptor *MemoryMap,
|
|
uintptr_t *MapKey,
|
|
uintptr_t *DescriptorSize,
|
|
uint32_t *DescriptorVersion);
|
|
|
|
typedef efi_status_t __abi (*efi_allocate_pool_t)(
|
|
enum efi_memory_type PoolType,
|
|
uintptr_t Size,
|
|
void **Buffer);
|
|
|
|
typedef efi_status_t __abi (*efi_free_pool_t)(void *Buffer);
|
|
|
|
typedef void __abi (*efi_notify_function_t)(void *Event,
|
|
void *context);
|
|
|
|
typedef efi_status_t __abi (*efi_create_event_t)(
|
|
uint32_t Type,
|
|
uintptr_t NotifyTpl,
|
|
efi_notify_function_t NotifyFunction,
|
|
void *NotifyContext,
|
|
void **Event);
|
|
|
|
enum efi_timer_delay {
|
|
TimerCancel,
|
|
TimerPeriodic,
|
|
TimerRelative
|
|
};
|
|
|
|
typedef efi_status_t __abi (*efi_set_timer_t)(void *Event,
|
|
enum efi_timer_delay Type,
|
|
uint64_t TriggerTime);
|
|
|
|
typedef efi_status_t __abi (*efi_wait_for_event_t)(uintptr_t NumberOfEvents,
|
|
void **Event,
|
|
uintptr_t *Index);
|
|
|
|
typedef efi_status_t __abi (*efi_signal_event_t)(void *Event);
|
|
|
|
typedef efi_status_t __abi (*efi_close_event_t)(void *Event);
|
|
|
|
typedef efi_status_t __abi (*efi_check_event_t)(void *Event);
|
|
|
|
enum efi_interface_type {
|
|
EFI_NATIVE_INTERFACE
|
|
};
|
|
|
|
typedef efi_status_t __abi (*efi_install_protocol_interface_t)(
|
|
void **Handle,
|
|
efi_guid_t *Protocol,
|
|
enum efi_interface_type InterfaceType,
|
|
void *Interface);
|
|
|
|
typedef efi_status_t __abi (*efi_reinstall_protocol_interface_t)(
|
|
void **Handle,
|
|
efi_guid_t *Protocol,
|
|
void *OldInterface,
|
|
void *NewInterface);
|
|
|
|
typedef efi_status_t __abi (*efi_uninstall_protocol_interface_t)(
|
|
void **Handle,
|
|
efi_guid_t *Protocol,
|
|
void *Interface);
|
|
|
|
typedef efi_status_t __abi (*efi_handle_protocol_t)(
|
|
void **Handle,
|
|
efi_guid_t *Protocol,
|
|
void **Interface);
|
|
|
|
typedef efi_status_t __abi (*efi_register_protocol_notify_t)(
|
|
efi_guid_t *Protocol,
|
|
void *Event,
|
|
void **Registration);
|
|
|
|
enum efi_locate_search_type {
|
|
AllHandles,
|
|
ByRegisterNotify,
|
|
ByProtocol
|
|
};
|
|
|
|
typedef efi_status_t __abi (*efi_locate_handle_t)(
|
|
enum efi_locate_search_type SearchType,
|
|
efi_guid_t *Protocol,
|
|
void *SearchKey,
|
|
uintptr_t *BufferSize,
|
|
void **Buffer);
|
|
|
|
struct efi_device_path_protocol {
|
|
uint8_t Type;
|
|
uint8_t SubType;
|
|
uint8_t Length[2];
|
|
};
|
|
|
|
typedef efi_status_t __abi (*efi_locate_device_path_t)(
|
|
efi_guid_t *Protocol,
|
|
struct efi_device_path_protocol **DevicePath,
|
|
void **Handle);
|
|
|
|
typedef efi_status_t __abi (*efi_install_configuration_table_t)(
|
|
efi_guid_t *Guid,
|
|
void *Table);
|
|
|
|
typedef efi_status_t __abi (*efi_load_image_t)(
|
|
bool BootPolicy,
|
|
void *ParentImageHandle,
|
|
struct efi_device_path_protocol *DevicePath,
|
|
void *SourceBuffer,
|
|
uintptr_t SourceSize,
|
|
void **ImageHandle);
|
|
|
|
typedef efi_status_t __abi (*efi_start_image_t)(void *ImageHandle,
|
|
uintptr_t *ExitDataSize,
|
|
uint16_t **ExitData);
|
|
|
|
typedef efi_status_t __abi (*efi_exit_t)(void *ImageHandle,
|
|
uintptr_t ExitStatus,
|
|
uintptr_t ExitDataSize,
|
|
uint16_t *ExitData);
|
|
|
|
typedef efi_status_t __abi (*efi_unload_image_t)(void *ImageHandle);
|
|
|
|
typedef efi_status_t __abi (*efi_exit_boot_services_t)(void *ImageHandle,
|
|
uintptr_t MapKey);
|
|
|
|
typedef efi_status_t __abi (*efi_get_next_monotonic_count_t)(uint64_t *Count);
|
|
|
|
typedef efi_status_t __abi (*efi_stall_t)(uintptr_t Microseconds);
|
|
|
|
typedef efi_status_t __abi (*efi_set_watchdog_timer_t)(uintptr_t Timeout,
|
|
uint64_t WatchdogCode,
|
|
uintptr_t DataSize,
|
|
uint16_t *WatchdogData);
|
|
|
|
typedef efi_status_t __abi (*efi_connect_controller_t)(
|
|
void *ControllerHandle,
|
|
void **DriverImageHandle,
|
|
struct efi_device_path_protocol *RemainingDevicePath,
|
|
bool Recursive);
|
|
|
|
typedef efi_status_t __abi (*efi_disconnect_controller_t)(
|
|
void *ControllerHandle,
|
|
void *DriverImageHandle,
|
|
void *ChildHandle);
|
|
|
|
typedef efi_status_t __abi (*efi_open_protocol_t)(void *Handle,
|
|
efi_guid_t *Protocol,
|
|
void **Interface,
|
|
void *AgentHandle,
|
|
void *ControllerHandle,
|
|
uint32_t Attributes);
|
|
|
|
typedef efi_status_t __abi (*efi_close_protocol_t)(void *Handle,
|
|
efi_guid_t *Protocol,
|
|
void *AgentHandle,
|
|
void *ControllerHandle);
|
|
|
|
struct efi_open_protocol_information_entry {
|
|
void *AgentHandle;
|
|
void *ControllerHandle;
|
|
uint32_t Attributes;
|
|
uint32_t OpenCount;
|
|
};
|
|
|
|
typedef efi_status_t __abi (*efi_open_protocol_information_t)(
|
|
void *Handle,
|
|
efi_guid_t *Protocol,
|
|
struct efi_open_protocol_information_entry **EntryBuffer,
|
|
uintptr_t *EntryCount);
|
|
|
|
typedef efi_status_t __abi (*efi_protocols_per_handle_t)(
|
|
void *Handle,
|
|
efi_guid_t ***ProtocolBuffer,
|
|
uintptr_t *ProtocolBufferCount);
|
|
|
|
typedef efi_status_t __abi (*efi_locate_handle_buffer_t)(
|
|
enum efi_locate_search_type SearchType,
|
|
efi_guid_t *Protocol,
|
|
void *SearchKey,
|
|
uintptr_t *NoHandles,
|
|
void ***Buffer);
|
|
|
|
typedef efi_status_t __abi (*efi_locate_protocol_t)(efi_guid_t *Protocol,
|
|
void *Registration,
|
|
void **Interface);
|
|
|
|
typedef efi_status_t __abi (*efi_multiple_protocol_interface_t)(
|
|
void *Handle, ...);
|
|
|
|
typedef efi_status_t __abi (*efi_calculate_crc32_t)(void *Data,
|
|
uintptr_t DataSize,
|
|
uint32_t CRC32);
|
|
|
|
typedef efi_status_t __abi (*efi_copy_mem_t)(void *Destination,
|
|
void *Source,
|
|
uintptr_t Size);
|
|
|
|
typedef efi_status_t __abi (*efi_set_mem_t)(void *Buffer,
|
|
uintptr_t Size,
|
|
uint8_t Value);
|
|
|
|
typedef efi_status_t __abi (*efi_create_event_ex_t)(
|
|
uint32_t Type,
|
|
uintptr_t NotifyTpl,
|
|
efi_notify_function_t NotifyFunction,
|
|
const void *NotifyContext,
|
|
const efi_guid_t *EventGroup,
|
|
void **Event);
|
|
|
|
struct efi_boot_services {
|
|
struct efi_table_header Hdr;
|
|
efi_raise_tpl_t RaiseTPL;
|
|
efi_restore_tpl_t RestoreTPL;
|
|
efi_allocate_pages_t AllocatePages;
|
|
efi_free_pages_t FreePages;
|
|
efi_get_memory_map_t GetMemoryMap;
|
|
efi_allocate_pool_t AllocatePool;
|
|
efi_free_pool_t FreePool;
|
|
efi_create_event_t CreateEvent;
|
|
efi_set_timer_t SetTimer;
|
|
efi_wait_for_event_t WaitForEvent;
|
|
efi_signal_event_t SignalEvent;
|
|
efi_close_event_t CloseEvent;
|
|
efi_check_event_t CheckEvent;
|
|
efi_install_protocol_interface_t InstallProtocolInterface;
|
|
efi_reinstall_protocol_interface_t ReinstallProtocolInterface;
|
|
efi_uninstall_protocol_interface_t UninstallProtocolInterface;
|
|
efi_handle_protocol_t HandleProtocol;
|
|
efi_register_protocol_notify_t RegisterProtocolNotify;
|
|
efi_locate_handle_t LocateHandle;
|
|
efi_locate_device_path_t LocateDevicePath;
|
|
efi_install_configuration_table_t InstallConfigurationTable;
|
|
efi_load_image_t LoadImage;
|
|
efi_start_image_t StartImage;
|
|
efi_exit_t Exit;
|
|
efi_unload_image_t UnloadImage;
|
|
efi_exit_boot_services_t ExitBootServices;
|
|
efi_get_next_monotonic_count_t GetNextMonotonicCount;
|
|
efi_stall_t Stall;
|
|
efi_set_watchdog_timer_t SetWatchdogTimer;
|
|
efi_connect_controller_t ConnectController;
|
|
efi_disconnect_controller_t DisconnectController;
|
|
efi_open_protocol_t OpenProtocol;
|
|
efi_close_protocol_t CloseProtocol;
|
|
efi_open_protocol_information_t OpenProtocolInformation;
|
|
efi_protocols_per_handle_t ProtocolsPerHandle;
|
|
efi_locate_handle_buffer_t LocateHandleBuffer;
|
|
efi_locate_protocol_t LocateProtocol;
|
|
efi_multiple_protocol_interface_t InstallMultipleProtocolInterfaces;
|
|
efi_multiple_protocol_interface_t UninstallMultipleProtocolInterfaces;
|
|
efi_calculate_crc32_t CalculateCrc32;
|
|
efi_copy_mem_t CopyMem;
|
|
efi_set_mem_t SetMem;
|
|
efi_create_event_ex_t CreateEventEx;
|
|
};
|
|
|
|
struct efi_configuration_table {
|
|
/** Vendor EFI GUID Identifier */
|
|
efi_guid_t VendorGuid;
|
|
/** Vendor table pointer */
|
|
void *VendorTable;
|
|
};
|
|
|
|
struct efi_system_table {
|
|
struct efi_table_header Hdr;
|
|
uint16_t *FirmwareVendor;
|
|
uint32_t FirmwareRevision;
|
|
void *ConsoleInHandle;
|
|
struct efi_simple_text_input *ConIn;
|
|
void *ConsoleOutHandle;
|
|
struct efi_simple_text_output *ConOut;
|
|
void *StandardErrorHandle;
|
|
struct efi_simple_text_output *StdErr;
|
|
struct efi_runtime_services *RuntimeServices;
|
|
struct efi_boot_services *BootServices;
|
|
/** The amount of entries to expect in the next attribute */
|
|
uint64_t NumberOfTableEntries;
|
|
/** A pointer to the configuration table(s) */
|
|
struct efi_configuration_table *ConfigurationTable;
|
|
};
|
|
|
|
#endif /* _ASMLANGUAGE */
|
|
|
|
#endif /* ZEPHYR_INCLUDE_ARCH_X86_EFI_H_ */
|