35#define EFIAPI __attribute__((ms_abi))
40#define EFIAPI __attribute__((cdecl,regparm(0)))
53#define EFI_HANDLE STUPID_EFI_HANDLE
54#define EFI_EVENT STUPID_EFI_EVENT
56#define _Static_assert(expr, msg)
98#define EFI_PROTOCOLS __table ( struct efi_protocol, "efi_protocols" )
101#define __efi_protocol __table_entry ( EFI_PROTOCOLS, 01 )
108#define EFI_REQUIRE_PROTOCOL( _protocol, _ptr ) \
109 struct efi_protocol __ ## _protocol __efi_protocol = { \
110 .guid = _protocol ## _GUID, \
111 .protocol = ( ( void ** ) ( void * ) \
112 ( ( (_ptr) == ( ( _protocol ** ) (_ptr) ) ) ? \
113 (_ptr) : (_ptr) ) ), \
122#define EFI_REQUEST_PROTOCOL( _protocol, _ptr ) \
123 struct efi_protocol __ ## _protocol __efi_protocol = { \
124 .guid = _protocol ## _GUID, \
125 .protocol = ( ( void ** ) ( void * ) \
126 ( ( (_ptr) == ( ( _protocol ** ) (_ptr) ) ) ? \
127 (_ptr) : (_ptr) ) ), \
142#define EFI_CONFIG_TABLES \
143 __table ( struct efi_config_table, "efi_config_tables" )
146#define __efi_config_table __table_entry ( EFI_CONFIG_TABLES, 01 )
154#define EFI_USE_TABLE( _table, _ptr, _required ) \
155 struct efi_config_table __ ## _table __efi_config_table = { \
156 .guid = _table ## _GUID, \
157 .table = ( ( void ** ) ( void * ) (_ptr) ), \
158 .required = (_required), \
167#define EFIRC( rc ) ERRNO_TO_PLATFORM ( -(rc) )
175#define EEFI( efirc ) EPLATFORM ( EINFO_EPLATFORM, efirc )
299#define DBG_EFI_OPENER_IF( level, handle, protocol, \
301 if ( DBG_ ## level ) { \
302 dbg_efi_opener ( handle, protocol, \
307#define DBG_EFI_OPENERS_IF( level, handle, protocol ) do { \
308 if ( DBG_ ## level ) { \
309 dbg_efi_openers ( handle, protocol ); \
313#define DBG_EFI_PROTOCOLS_IF( level, handle ) do { \
314 if ( DBG_ ## level ) { \
315 dbg_efi_protocols ( handle ); \
319#define DBGC_EFI_OPENER_IF( level, id, ... ) do { \
320 DBG_AC_IF ( level, id ); \
321 DBG_EFI_OPENER_IF ( level, __VA_ARGS__ ); \
322 DBG_DC_IF ( level ); \
325#define DBGC_EFI_OPENERS_IF( level, id, ... ) do { \
326 DBG_AC_IF ( level, id ); \
327 DBG_EFI_OPENERS_IF ( level, __VA_ARGS__ ); \
328 DBG_DC_IF ( level ); \
331#define DBGC_EFI_PROTOCOL_IF( level, id, ... ) do { \
332 DBG_AC_IF ( level, id ); \
333 DBG_EFI_PROTOCOL_IF ( level, __VA_ARGS__ ); \
334 DBG_DC_IF ( level ); \
337#define DBGC_EFI_PROTOCOLS_IF( level, id, ... ) do { \
338 DBG_AC_IF ( level, id ); \
339 DBG_EFI_PROTOCOLS_IF ( level, __VA_ARGS__ ); \
340 DBG_DC_IF ( level ); \
343#define DBGC_EFI_OPENER( ... ) \
344 DBGC_EFI_OPENER_IF ( LOG, ##__VA_ARGS__ )
345#define DBGC_EFI_OPENERS( ... ) \
346 DBGC_EFI_OPENERS_IF ( LOG, ##__VA_ARGS__ )
347#define DBGC_EFI_PROTOCOL( ... ) \
348 DBGC_EFI_PROTOCOL_IF ( LOG, ##__VA_ARGS__ )
349#define DBGC_EFI_PROTOCOLS( ... ) \
350 DBGC_EFI_PROTOCOLS_IF ( LOG, ##__VA_ARGS__ )
352#define DBGC2_EFI_OPENER( ... ) \
353 DBGC_EFI_OPENER_IF ( EXTRA, ##__VA_ARGS__ )
354#define DBGC2_EFI_OPENERS( ... ) \
355 DBGC_EFI_OPENERS_IF ( EXTRA, ##__VA_ARGS__ )
356#define DBGC2_EFI_PROTOCOL( ... ) \
357 DBGC_EFI_PROTOCOL_IF ( EXTRA, ##__VA_ARGS__ )
358#define DBGC2_EFI_PROTOCOLS( ... ) \
359 DBGC_EFI_PROTOCOLS_IF ( EXTRA, ##__VA_ARGS__ )
361#define DBGCP_EFI_OPENER( ... ) \
362 DBGC_EFI_OPENER_IF ( PROFILE, ##__VA_ARGS__ )
363#define DBGCP_EFI_OPENERS( ... ) \
364 DBGC_EFI_OPENERS_IF ( PROFILE, ##__VA_ARGS__ )
365#define DBGCP_EFI_PROTOCOL( ... ) \
366 DBGC_EFI_PROTOCOL_IF ( PROFILE, ##__VA_ARGS__ )
367#define DBGCP_EFI_PROTOCOLS( ... ) \
368 DBGC_EFI_PROTOCOLS_IF ( PROFILE, ##__VA_ARGS__ )
372#define EFI_INTF_OP INTF_OP
374#define EFI_INTF_OP UNUSED_INTF_OP
433#define efi_test( handle, protocol ) \
434 efi_open_untyped ( (handle), (protocol), NULL )
444#define efi_open( handle, protocol, interface ) ( { \
445 typeof ( *(interface) ) check_ptr_ptr = NULL; \
446 efi_open_untyped ( (handle), (protocol), \
447 ( ( void ) check_ptr_ptr, \
448 ( void ** ) (interface) ) ); \
459#define efi_open_unsafe( handle, protocol, interface ) ( { \
460 typeof ( *(interface) ) check_ptr_ptr = NULL; \
461 efi_open_unsafe_untyped ( (handle), (protocol), \
462 ( ( void ) check_ptr_ptr, \
463 ( void ** ) (interface) ) ); \
474#define efi_open_by_driver( handle, protocol, interface ) ( { \
475 typeof ( *(interface) ) check_ptr_ptr = NULL; \
476 efi_open_by_driver_untyped ( (handle), (protocol), \
477 ( ( void ) check_ptr_ptr, \
478 ( void ** ) (interface) ) ); \
490#define efi_open_by_child( handle, protocol, child, interface ) ( { \
491 typeof ( *(interface) ) check_ptr_ptr = NULL; \
492 efi_open_by_child_untyped ( (handle), (protocol), (child), \
493 ( ( void ) check_ptr_ptr, \
494 ( void ** ) (interface) ) ); \
#define CONST
Datum is read-only.
UEFI 2.0 Loaded image protocol definition.
Root include file for Mde Package DXE_CORE, DXE, RUNTIME, SMM, SAL type modules.
Defines data types and constants introduced in UEFI.
RETURN_STATUS EFI_STATUS
Function return status for EFI API.
UINTN EFI_TPL
Task priority level.
GUID EFI_GUID
128-bit buffer containing a unique identifier value.
EFI_LOCATE_SEARCH_TYPE
Enumeration of EFI Locate Search Types.
Root include file for Mde Package UEFI, UEFI_APPLICATION type modules.
EFI_GUID efi_udp6_service_binding_protocol_guid
UDPv6 service binding protocol GUID.
EFI_GUID efi_serial_io_protocol_guid
Serial I/O protocol GUID.
EFI_GUID efi_loaded_image_protocol_guid
Loaded image protocol GUID.
EFI_GUID efi_udp4_service_binding_protocol_guid
UDPv4 service binding protocol GUID.
EFI_GUID efi_dhcp6_protocol_guid
DHCPv6 protocol GUID.
EFI_GUID efi_component_name2_protocol_guid
Component name 2 protocol GUID.
EFI_GUID efi_supplicant_protocol_guid
Supplicant protocol GUID.
EFI_GUID efi_acpi_20_table_guid
ACPI 2.0 table GUID.
EFI_GUID efi_ip4_protocol_guid
IPv4 protocol GUID.
EFI_GUID efi_load_file2_protocol_guid
Load file 2 protocol GUID.
EFI_GUID efi_acpi_10_table_guid
ACPI 1.0 table GUID.
EFI_GUID efi_mtftp6_protocol_guid
MTFTPv6 protocol GUID.
EFI_GUID efi_tcg2_protocol_guid
TCG2 protocol GUID.
EFI_GUID efi_graphics_output_protocol_guid
Graphics output protocol GUID.
EFI_GUID efi_simple_network_protocol_guid
Simple network protocol GUID.
EFI_GUID efi_shim_lock_protocol_guid
Shim lock protocol GUID.
EFI_GUID efi_block_io_protocol_guid
Block I/O protocol GUID.
EFI_GUID efi_dhcp6_service_binding_protocol_guid
DHCPv6 service binding protocol GUID.
EFI_GUID efi_loaded_image_device_path_protocol_guid
Loaded image device path protocol GUID.
EFI_GUID efi_file_system_info_id
File system information GUID.
EFI_GUID efi_device_path_protocol_guid
Device path protocol GUID.
EFI_GUID efi_tcp6_service_binding_protocol_guid
TCPv6 service binding protocol GUID.
EFI_GUID efi_console_control_protocol_guid
Console control protocol GUID.
EFI_GUID efi_adapter_information_protocol_guid
Adapter information protocol GUID.
EFI_GUID efi_vlan_config_protocol_guid
VLAN configuration protocol GUID.
EFI_GUID efi_dns4_service_binding_protocol_guid
DNSv4 service binding protocol GUID.
EFI_GUID efi_ip4_config_protocol_guid
IPv4 configuration protocol GUID.
EFI_GUID efi_load_file_protocol_guid
Load file protocol GUID.
EFI_GUID efi_hii_font_protocol_guid
HII font protocol GUID.
EFI_GUID efi_absolute_pointer_protocol_guid
Absolute pointer protocol GUID.
EFI_GUID efi_udp4_protocol_guid
UDPv4 protocol GUID.
EFI_GUID efi_http_protocol_guid
HTTP protocol GUID.
EFI_GUID efi_simple_text_output_protocol_guid
Simple text output protocol GUID.
EFI_GUID efi_nii_protocol_guid
Network interface identifier protocol GUID (old version)
EFI_GUID efi_pci_root_bridge_io_protocol_guid
PCI root bridge I/O protocol GUID.
EFI_GUID efi_mtftp6_service_binding_protocol_guid
MTFTPv6 service binding protocol GUID.
EFI_GUID efi_tcp6_protocol_guid
TCPv6 protocol GUID.
EFI_GUID efi_udp6_protocol_guid
UDPv6 protocol GUID.
EFI_GUID efi_dns6_service_binding_protocol_guid
DNSv6 service binding protocol GUID.
EFI_GUID efi_disk_io_protocol_guid
Disk I/O protocol GUID.
EFI_GUID efi_simple_file_system_protocol_guid
Simple file system protocol GUID.
EFI_GUID efi_dhcp4_protocol_guid
DHCPv4 protocol GUID.
EFI_GUID efi_tls_ca_certificate_guid
TLS CA certificate variable GUID.
EFI_GUID efi_tcp4_service_binding_protocol_guid
TCPv4 service binding protocol GUID.
EFI_GUID efi_hii_config_access_protocol_guid
HII configuration access protocol GUID.
EFI_GUID efi_usb_hc_protocol_guid
USB host controller protocol GUID.
EFI_GUID efi_arp_protocol_guid
ARP protocol GUID.
EFI_GUID efi_file_info_id
File information GUID.
EFI_GUID efi_ip4_config2_protocol_guid
IPv4 configuration 2 protocol GUID.
EFI_GUID efi_acpi_table_protocol_guid
ACPI table protocol GUID.
EFI_GUID efi_wifi2_protocol_guid
WiFi 2 protocol GUID.
EFI_GUID efi_storage_security_command_protocol_guid
Storage security protocol GUID.
EFI_GUID efi_pxe_base_code_protocol_guid
PXE base code protocol GUID.
EFI_GUID efi_global_variable
Global variable GUID.
EFI_GUID efi_arp_service_binding_protocol_guid
ARP service binding protocol GUID.
EFI_GUID efi_cert_x509_guid
X.509 certificate GUID.
EFI_GUID efi_ip6_config_protocol_guid
IPv6 configuration protocol GUID.
EFI_GUID efi_tcg_protocol_guid
TCG protocol GUID.
EFI_GUID efi_rng_protocol_guid
Random number generator protocol GUID.
EFI_GUID efi_ip6_protocol_guid
IPv6 protocol GUID.
EFI_GUID efi_dns6_protocol_guid
DNSv6 protocol GUID.
EFI_GUID efi_nii31_protocol_guid
Network interface identifier protocol GUID (new version)
EFI_GUID efi_driver_binding_protocol_guid
Driver binding protocol GUID.
EFI_GUID efi_microsoft_vendor_guid
Microsoft vendor GUID.
EFI_GUID efi_image_security_database_guid
Image security database GUID.
EFI_GUID efi_mtftp4_service_binding_protocol_guid
MTFTPv4 service binding protocol GUID.
EFI_GUID efi_simple_text_input_protocol_guid
Simple text input protocol GUID.
EFI_GUID efi_ip6_service_binding_protocol_guid
IPv6 service binding protocol GUID.
EFI_GUID efi_eap_configuration_protocol_guid
EAP configuration protocol GUID.
EFI_GUID efi_ip4_service_binding_protocol_guid
IPv4 service binding protocol GUID.
EFI_GUID efi_usb_io_protocol_guid
USB I/O protocol GUID.
EFI_GUID efi_fdt_table_guid
FDT table GUID.
EFI_GUID efi_pci_io_protocol_guid
PCI I/O protocol GUID.
EFI_GUID efi_managed_network_service_binding_protocol_guid
Managed network service binding protocol GUID.
EFI_GUID efi_dhcp4_service_binding_protocol_guid
DHCPv4 service binding protocol GUID.
EFI_GUID efi_simple_text_input_ex_protocol_guid
Simple text input extension protocol GUID.
EFI_GUID efi_mtftp4_protocol_guid
MTFTPv4 protocol GUID.
EFI_GUID efi_dns4_protocol_guid
DNSv4 protocol GUID.
EFI_GUID efi_smbios_table_guid
SMBIOS table GUID.
EFI_GUID efi_bus_specific_driver_override_protocol_guid
Bus specific driver override protocol GUID.
EFI_GUID efi_usb2_hc_protocol_guid
USB2 host controller protocol GUID.
EFI_GUID efi_unicode_collation_protocol_guid
Unicode collation protocol GUID.
EFI_GUID efi_apple_net_boot_protocol_guid
Apple NetBoot protocol GUID.
EFI_GUID efi_managed_network_protocol_guid
Managed network protocol GUID.
EFI_GUID efi_tcp4_protocol_guid
TCPv4 protocol GUID.
EFI_GUID efi_block_io2_protocol_guid
Block I/O version 2 protocol GUID.
EFI_GUID efi_simple_pointer_protocol_guid
Simple pointer protocol GUID.
EFI_GUID efi_tree_protocol_guid
TrEE protocol GUID.
EFI_GUID efi_component_name_protocol_guid
Component name protocol GUID.
EFI_GUID efi_uga_draw_protocol_guid
UGA draw protocol GUID.
EFI_GUID efi_http_service_binding_protocol_guid
HTTP service binding protocol GUID.
EFI_TPL efi_external_tpl
External task priority level.
EFI_TPL efi_internal_tpl
Internal task priority level.
EFI_DEVICE_PATH_PROTOCOL * efi_loaded_image_path
Device path for the loaded image's device handle.
unsigned long __stack_chk_guard
Stack cookie.
EFI_LOADED_IMAGE_PROTOCOL * efi_loaded_image
Loaded image protocol for this image.
EFI_HANDLE efi_image_handle
Image handle passed to entry point.
int efi_shutdown_in_progress
EFI shutdown is in progress.
#define FILE_LICENCE(_licence)
Declare a particular licence as applying to a file.
#define FILE_SECBOOT(_status)
Declare a file's UEFI Secure Boot permission status.
const char * efi_handle_name(EFI_HANDLE handle)
Get name of an EFI handle.
void __stack_chk_fail(void)
Abort on stack check failure.
EFI_STATUS efi_init(EFI_HANDLE image_handle, EFI_SYSTEM_TABLE *systab)
Initialise EFI environment.
int efi_disconnect(EFI_HANDLE device, EFI_HANDLE driver)
Disconnect UEFI driver(s)
const char * efi_open_attributes_name(unsigned int attributes)
Name protocol open attributes.
void efi_close_by_driver(EFI_HANDLE handle, EFI_GUID *protocol)
Close protocol opened for persistent use by a driver.
const char * efi_guid_ntoa(CONST EFI_GUID *guid)
Convert GUID to a printable string.
void efi_close_by_child(EFI_HANDLE handle, EFI_GUID *protocol, EFI_HANDLE child)
Close protocol opened for persistent use by a child controller.
int efi_open_by_child_untyped(EFI_HANDLE handle, EFI_GUID *protocol, EFI_HANDLE child, void **interface)
Open protocol for persistent use by a child controller.
const char * efi_locate_search_type_name(EFI_LOCATE_SEARCH_TYPE search_type)
Name locate search type.
void efi_close_unsafe(EFI_HANDLE handle, EFI_GUID *protocol)
Close protocol opened for unsafe persistent use.
unsigned long efi_stack_cookie(EFI_HANDLE handle)
Construct a stack cookie value.
static void efi_init_stack_guard(EFI_HANDLE handle)
Initialise stack cookie.
const char * efi_devpath_text(EFI_DEVICE_PATH_PROTOCOL *path)
Get textual representation of device path.
EFI_GUID efi_smbios2_table_guid
void dbg_efi_openers(EFI_HANDLE handle, EFI_GUID *protocol)
Print list of openers of a given protocol on a given handle.
void efi_raise_tpl(struct efi_saved_tpl *tpl)
Raise task priority level to internal level.
int efi_open_by_driver_untyped(EFI_HANDLE handle, EFI_GUID *protocol, void **interface)
Open protocol for persistent use by a driver.
void dbg_efi_protocol(EFI_HANDLE handle, EFI_GUID *protocol)
Print protocol information on a given handle.
int efi_connect(EFI_HANDLE device, EFI_HANDLE driver)
Connect UEFI driver(s)
int efi_open_untyped(EFI_HANDLE handle, EFI_GUID *protocol, void **interface)
Open (or test) protocol for ephemeral use.
void dbg_efi_protocols(EFI_HANDLE handle)
Print list of protocol handlers attached to a handle.
void efi_restore_tpl(struct efi_saved_tpl *tpl)
Restore task priority level.
const char * efi_tpl_name(EFI_TPL tpl)
Name EFI TPL.
EFI_SYSTEM_TABLE * efi_systab
void dbg_efi_opener(EFI_HANDLE handle, EFI_GUID *protocol, EFI_OPEN_PROTOCOL_INFORMATION_ENTRY *opener)
Print opened protocol information.
int efi_open_unsafe_untyped(EFI_HANDLE handle, EFI_GUID *protocol, void **interface)
Open protocol for unsafe persistent use.
uint16_t protocol
Protocol ID.
This protocol can be used on any device handle to obtain generic path/location information concerning...
Can be used on any image handle to obtain information about the loaded image.
EFI Oprn Protocol Information Entry.
An EFI configuration table used by iPXE.
int required
Table is required for operation.
void ** table
Variable containing pointer to configuration table.
An EFI protocol used by iPXE.
int required
Protocol is required.
void ** protocol
Variable containing pointer to protocol structure.
An EFI saved task priority level.
EFI_TPL previous
Previous external TPL.
EFI_TPL current
Current external TPL.