|  | /* | 
|  | * 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> | 
|  |  | 
|  | #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_ */ |