/** * PROJECT: ExectOS * COPYRIGHT: See COPYING.md in the top level directory * FILE: sdk/xtdk/xtuefi.h * DESCRIPTION: XT UEFI support * DEVELOPERS: Rafal Kupiec */ #ifndef __XTDK_XTUEFI_H #define __XTDK_XTUEFI_H #include "xtdefs.h" #include "xttypes.h" #include "xtstruct.h" #include "xtcommon.h" /* EFI Pages related definitions */ #define EFI_PAGE_SIZE 4096 #define EFI_PAGE_MASK 0xFFF #define EFI_PAGE_SHIFT 12 /* DeviceType definitions according to BBS specification */ #define EFI_BBS_TYPE_FLOPPY 0x01 #define EFI_BBS_TYPE_HARDDRIVE 0x02 #define EFI_BBS_TYPE_CDROM 0x03 #define EFI_BBS_TYPE_PCMCIA 0x04 #define EFI_BBS_TYPE_USB 0x05 #define EFI_BBS_TYPE_EMBEDDED_NETWORK 0x06 #define EFI_BBS_TYPE_DEV 0x80 #define EFI_BBS_TYPE_UNKNOWN 0xFF /* Basic UEFI types */ typedef PVOID EFI_EVENT, *PEFI_EVENT; typedef PVOID EFI_HANDLE, *PEFI_HANDLE; typedef UINT64 EFI_LBA, *PEFI_LBA; typedef UINT64 EFI_PHYSICAL_ADDRESS, *PEFI_PHYSICAL_ADDRESS; typedef UINT_PTR EFI_STATUS, *PEFI_STATUS; typedef UINT_PTR EFI_TPL, *PEFI_TPL; typedef UINT64 EFI_VIRTUAL_ADDRESS, *PEFI_VIRTUAL_ADDRESS; /* Enumeration list of EFI memory allocation types */ typedef enum _EFI_ALLOCATE_TYPE { AllocateAnyPages, AllocateMaxAddress, AllocateAddress, MaxAllocateType } EFI_ALLOCATE_TYPE, *PEFI_ALLOCATE_TYPE; /* Enumeration list of reset types */ typedef enum _EFI_RESET_TYPE { EfiResetCold, EfiResetWarm, EfiResetShutdown } EFI_RESET_TYPE, *PEFI_RESET_TYPE; /* Enumeration list of timer delay types */ typedef enum _EFI_TIMER_DELAY { TimerCancel, TimerPeriodic, TimerRelative, TimerTypeMax } EFI_TIMER_DELAY, *PEFI_TIMER_DELAY; /* Enumeration list of EFI Locate Search Types */ typedef enum _EFI_LOCATE_SEARCH_TYPE { AllHandles, ByRegisterNotify, ByProtocol } EFI_LOCATE_SEARCH_TYPE, *PEFI_LOCATE_SEARCH_TYPE; /* Enumeration list of EFI Interface Types */ typedef enum _EFI_INTERFACE_TYPE { EFI_NATIVE_INTERFACE, EFI_PCODE_INTERFACE } EFI_INTERFACE_TYPE, *PEFI_INTERFACE_TYPE; /* Enumeration of memory types introduced in UEFI */ typedef enum _EFI_MEMORY_TYPE { EfiReservedMemoryType, EfiLoaderCode, EfiLoaderData, EfiBootServicesCode, EfiBootServicesData, EfiRuntimeServicesCode, EfiRuntimeServicesData, EfiConventionalMemory, EfiUnusableMemory, EfiACPIReclaimMemory, EfiACPIMemoryNVS, EfiMemoryMappedIO, EfiMemoryMappedIOPortSpace, EfiPalCode, EfiMaxMemoryType } EFI_MEMORY_TYPE, *PEFI_MEMORY_TYPE; /* Enumeration of PCI I/O protocol widths */ typedef enum _EFI_PCI_IO_PROTOCOL_WIDTH { EfiPciIoWidthUint8, EfiPciIoWidthUint16, EfiPciIoWidthUint32, EfiPciIoWidthUint64, EfiPciIoWidthFifoUint8, EfiPciIoWidthFifoUint16, EfiPciIoWidthFifoUint32, EfiPciIoWidthFifoUint64, EfiPciIoWidthFillUint8, EfiPciIoWidthFillUint16, EfiPciIoWidthFillUint32, EfiPciIoWidthFillUint64, EfiPciIoWidthMaximum } EFI_PCI_IO_PROTOCOL_WIDTH, *PEFI_PCI_IO_PROTOCOL_WIDTH; /* Enumeration of EFI PCI I/O protocol operations */ typedef enum _EFI_PCI_IO_PROTOCOL_OPERATION { EfiPciIoOperationBusMasterRead, EfiPciIoOperationBusMasterWrite, EfiPciIoOperationBusMasterCommonBuffer, EfiPciIoOperationMaximum } EFI_PCI_IO_PROTOCOL_OPERATION, *PEFI_PCI_IO_PROTOCOL_OPERATION; /* Enumeration of EFI PCI Root Bridge I/O protocol operations */ typedef enum _EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_OPERATION { EfiPciOperationBusMasterRead, EfiPciOperationBusMasterWrite, EfiPciOperationBusMasterCommonBuffer, EfiPciOperationBusMasterRead64, EfiPciOperationBusMasterWrite64, EfiPciOperationBusMasterCommonBuffer64, EfiPciOperationMaximum } EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_OPERATION, *PEFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_OPERATION; /* Enumeration of EFI PCI I/O protocol attribute operations */ typedef enum _EFI_PCI_IO_PROTOCOL_ATTRIBUTE_OPERATION { EfiPciIoAttributeOperationGet, EfiPciIoAttributeOperationSet, EfiPciIoAttributeOperationEnable, EfiPciIoAttributeOperationDisable, EfiPciIoAttributeOperationSupported, EfiPciIoAttributeOperationMaximum } EFI_PCI_IO_PROTOCOL_ATTRIBUTE_OPERATION, *PEFI_PCI_IO_PROTOCOL_ATTRIBUTE_OPERATION; /* EFI structures forward references */ typedef struct _EFI_CAPSULE_HEADER EFI_CAPSULE_HEADER, *PEFI_CAPSULE_HEADER; typedef struct _EFI_GUID EFI_GUID, *PEFI_GUID; typedef struct _EFI_MEMORY_DESCRIPTOR EFI_MEMORY_DESCRIPTOR, *PEFI_MEMORY_DESCRIPTOR; typedef struct _EFI_RUNTIME_SERVICES EFI_RUNTIME_SERVICES, *PEFI_RUNTIME_SERVICES; typedef struct _EFI_TABLE_HEADER EFI_TABLE_HEADER, *PEFI_TABLE_HEADER; typedef struct _EFI_TIME EFI_TIME, *PEFI_TIME; typedef struct _EFI_TIME_CAPABILITIES EFI_TIME_CAPABILITIES, *PEFI_TIME_CAPABILITIES; typedef struct _EFI_DEVICE_PATH_PROTOCOL EFI_DEVICE_PATH_PROTOCOL, *PEFI_DEVICE_PATH_PROTOCOL; typedef struct _EFI_CONFIGURATION_TABLE EFI_CONFIGURATION_TABLE, *PEFI_CONFIGURATION_TABLE; typedef struct _EFI_OPEN_PROTOCOL_INFORMATION_ENTRY EFI_OPEN_PROTOCOL_INFORMATION_ENTRY, *PEFI_OPEN_PROTOCOL_INFORMATION_ENTRY; typedef struct _EFI_SIMPLE_TEXT_INPUT_PROTOCOL EFI_SIMPLE_TEXT_INPUT_PROTOCOL, *PEFI_SIMPLE_TEXT_INPUT_PROTOCOL; typedef struct _EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL, *PEFI_SIMPLE_TEXT_OUTPUT_PROTOCOL; typedef struct _EFI_SIMPLE_TEXT_OUTPUT_MODE EFI_SIMPLE_TEXT_OUTPUT_MODE, *PEFI_SIMPLE_TEXT_OUTPUT_MODE; typedef struct _EFI_INPUT_KEY EFI_INPUT_KEY, *PEFI_INPUT_KEY; typedef struct _EFI_SYSTEM_TABLE EFI_SYSTEM_TABLE, *PEFI_SYSTEM_TABLE; typedef struct _EFI_IPv4_ADDRESS EFI_IPv4_ADDRESS, *PEFI_IPv4_ADDRESS; typedef struct _EFI_IPv6_ADDRESS EFI_IPv6_ADDRESS, *PEFI_IPv6_ADDRESS; typedef struct _EFI_MAC_ADDRESS EFI_MAC_ADDRESS, *PEFI_MAC_ADDRESS; typedef struct _EFI_MANAGED_NETWORK_CONFIG_DATA EFI_MANAGED_NETWORK_CONFIG_DATA, *PEFI_MANAGED_NETWORK_CONFIG_DATA; typedef struct _EFI_DEVICE_PATH_PROTOCOL EFI_DEVICE_PATH_PROTOCOL, *PEFI_DEVICE_PATH_PROTOCOL; typedef struct _EFI_PCI_DEVICE_PATH EFI_PCI_DEVICE_PATH, *PEFI_PCI_DEVICE_PATH; typedef struct _EFI_PCCARD_DEVICE_PATH EFI_PCCARD_DEVICE_PATH, *PEFI_PCCARD_DEVICE_PATH; typedef struct _EFI_MEMMAP_DEVICE_PATH EFI_MEMMAP_DEVICE_PATH, *PEFI_MEMMAP_DEVICE_PATH; typedef struct _EFI_VENDOR_DEVICE_PATH EFI_VENDOR_DEVICE_PATH, *PEFI_VENDOR_DEVICE_PATH; typedef struct _EFI_UKNOWN_DEVICE_VENDOR_DEVICE_PATH EFI_UNKNOWN_DEVICE_VENDOR_DEVICE_PATH, *PEFI_UNKNOWN_DEVICE_VENDOR_DEVICE_PATH; typedef struct _EFI_CONTROLLER_DEVICE_PATH EFI_CONTROLLER_DEVICE_PATH, *PEFI_CONTROLLER_DEVICE_PATH; typedef struct _EFI_ACPI_HID_DEVICE_PATH EFI_ACPI_HID_DEVICE_PATH, *PEFI_ACPI_HID_DEVICE_PATH; typedef struct _EFI_EXPANDED_ACPI_HID_DEVICE_PATH EFI_EXPANDED_ACPI_HID_DEVICE_PATH, *PEFI_EXPANDED_ACPI_HID_DEVICE_PATH; typedef struct _EFI_ACPI_ADR_DEVICE_PATH EFI_ACPI_ADR_DEVICE_PATH, *PEFI_ACPI_ADR_DEVICE_PATH; typedef struct _EFI_ATAPI_DEVICE_PATH EFI_ATAPI_DEVICE_PATH, *PEFI_ATAPI_DEVICE_PATH; typedef struct _EFI_SCSI_DEVICE_PATH EFI_SCSI_DEVICE_PATH, *PEFI_SCSI_DEVICE_PATH; typedef struct _EFI_FIBRECHANNEL_DEVICE_PATH EFI_FIBRECHANNEL_DEVICE_PATH, *PEFI_FIBRECHANNEL_DEVICE_PATH; typedef struct _EFI_FIBRECHANNELEX_DEVICE_PATH EFI_FIBRECHANNELEX_DEVICE_PATH, *PEFI_FIBRECHANNELEX_DEVICE_PATH; typedef struct _EFI_1394_DEVICE_PATH EFI_1394_DEVICE_PATH, *PEFI_1394_DEVICE_PATH; typedef struct _EFI_USB_DEVICE_PATH EFI_USB_DEVICE_PATH, *PEFI_USB_DEVICE_PATH; typedef struct _EFI_USB_WWID_DEVICE_PATH EFI_USB_WWID_DEVICE_PATH, *PEFI_USB_WWID_DEVICE_PATH; typedef struct _EFI_USB_CLASS_DEVICE_PATH EFI_USB_CLASS_DEVICE_PATH, *PEFI_USB_CLASS_DEVICE_PATH; typedef struct _EFI_SATA_DEVICE_PATH EFI_SATA_DEVICE_PATH, *PEFI_SATA_DEVICE_PATH; typedef struct _EFI_DEVICE_LOGICAL_UNIT_DEVICE_PATH EFI_DEVICE_LOGICAL_UNIT_DEVICE_PATH, *PEFI_DEVICE_LOGICAL_UNIT_DEVICE_PATH; typedef struct _EFI_I2O_DEVICE_PATH EFI_I2O_DEVICE_PATH, *PEFI_I2O_DEVICE_PATH; typedef struct _EFI_MAC_ADDR_DEVICE_PATH EFI_MAC_ADDR_DEVICE_PATH, *PEFI_MAC_ADDR_DEVICE_PATH; typedef struct _EFI_IPv4_DEVICE_PATH EFI_IPv4_DEVICE_PATH, *PEFI_IPv4_DEVICE_PATH; typedef struct _EFI_IPv6_DEVICE_PATH EFI_IPv6_DEVICE_PATH, *PEFI_IPv6_DEVICE_PATH; typedef struct _EFI_URI_DEVICE_PATH EFI_URI_DEVICE_PATH, *PEFI_URI_DEVICE_PATH; typedef struct _EFI_VLAN_DEVICE_PATH EFI_VLAN_DEVICE_PATH, *PEFI_VLAN_DEVICE_PATH; typedef struct _EFI_INFINIBAND_DEVICE_PATH EFI_INFINIBAND_DEVICE_PATH, *PEFI_INFINIBAND_DEVICE_PATH; typedef struct _EFI_UART_DEVICE_PATH EFI_UART_DEVICE_PATH, *PEFI_UART_DEVICE_PATH; typedef struct _EFI_HARDDRIVE_DEVICE_PATH EFI_HARDDRIVE_DEVICE_PATH, *PEFI_HARDDRIVE_DEVICE_PATH; typedef struct _EFI_CDROM_DEVICE_PATH EFI_CDROM_DEVICE_PATH, *PEFI_CDROM_DEVICE_PATH; typedef struct _EFI_FILEPATH_DEVICE_PATH EFI_FILEPATH_DEVICE_PATH, *PEFI_FILEPATH_DEVICE_PATH; typedef struct _EFI_MEDIA_PROTOCOL_DEVICE_PATH EFI_MEDIA_PROTOCOL_DEVICE_PATH, *PEFI_MEDIA_PROTOCOL_DEVICE_PATH; typedef struct _EFI_MEDIA_FW_VOL_FILEPATH_DEVICE_PATH EFI_MEDIA_FW_VOL_FILEPATH_DEVICE_PATH, *PEFI_MEDIA_FW_VOL_FILEPATH_DEVICE_PATH; typedef struct _EFI_MEDIA_FW_VOL_DEVICE_PATH EFI_MEDIA_FW_VOL_DEVICE_PATH, *PEFI_MEDIA_FW_VOL_DEVICE_PATH; typedef struct _EFI_MEDIA_RELATIVE_OFFSET_RANGE_DEVICE_PATH EFI_MEDIA_RELATIVE_OFFSET_RANGE_DEVICE_PATH, *PEFI_MEDIA_RELATIVE_OFFSET_RANGE_DEVICE_PATH; typedef struct _EFI_BBS_BBS_DEVICE_PATH EFI_BBS_BBS_DEVICE_PATH, *PEFI_BBS_BBS_DEVICE_PATH; typedef struct _EFI_DEVICE_PATH_TO_TEXT_PROTOCOL EFI_DEVICE_PATH_TO_TEXT_PROTOCOL, *PEFI_DEVICE_PATH_TO_TEXT_PROTOCOL; typedef struct _EFI_DEVICE_PATH_FROM_TEXT_PROTOCOL EFI_DEVICE_PATH_FROM_TEXT_PROTOCOL, *PEFI_DEVICE_PATH_FROM_TEXT_PROTOCOL; typedef struct _EFI_DEVICE_PATH_UTILITIES_PROTOCOL EFI_DEVICE_PATH_UTILITIES_PROTOCOL, *PEFI_DEVICE_PATH_UTILITIES_PROTOCOL; typedef struct _EFI_PCI_IO_PROTOCOL_ACCESS EFI_PCI_IO_PROTOCOL_ACCESS, *PEFI_PCI_IO_PROTOCOL_ACCESS; typedef struct _EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_ACCESS EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_ACCESS, *PEFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_ACCESS; typedef struct _EFI_PCI_IO_PROTOCOL_CONFIG_ACCESS EFI_PCI_IO_PROTOCOL_CONFIG_ACCESS, *PEFI_PCI_IO_PROTOCOL_CONFIG_ACCESS; typedef struct _EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_PCI_ADDRESS EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_PCI_ADDRESS, *PEFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_PCI_ADDRESS; typedef struct _EFI_PCI_IO_PROTOCOL EFI_PCI_IO_PROTOCOL, *PEFI_PCI_IO_PROTOCOL; typedef struct _EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL, *PEFI_PCI_ROOT_BRIDGE_IO_PROTOCOL; /* EFI unions forward references */ typedef union _EFI_DEV_PATH EFI_DEV_PATH, *PEFI_DEV_PATH; typedef union _EFI_DEV_PATH_PTR EFI_DEV_PATH_PTR, *PEFI_DEV_PATH_PTR; /* EFI routines forward references */ typedef EFI_STATUS (*PEFI_CONVERT_POINTER)(IN UINT_PTR DebugDisposition, IN OUT PVOID *Address); typedef EFI_STATUS (*PEFI_ALLOCATE_PAGES)(IN EFI_ALLOCATE_TYPE Type, IN EFI_MEMORY_TYPE MemoryType, IN UINT_PTR NoPages, OUT PEFI_PHYSICAL_ADDRESS Memory); typedef EFI_STATUS (*PEFI_ALLOCATE_POOL)(IN EFI_MEMORY_TYPE PoolType, IN UINT_PTR Size, OUT PVOID *Buffer); typedef EFI_STATUS (*PEFI_FREE_PAGES)(IN EFI_PHYSICAL_ADDRESS Memory, IN UINT_PTR NoPages); typedef EFI_STATUS (*PEFI_FREE_POOL)(IN PVOID Buffer); typedef VOID (*PEFI_EVENT_NOTIFY)(IN EFI_EVENT Event, IN PVOID Context); typedef EFI_STATUS (*PEFI_CREATE_EVENT)(IN UINT32 Type, IN EFI_TPL NotifyTpl, IN PEFI_EVENT_NOTIFY NotifyFunction, IN PVOID NotifyContext, OUT PEFI_EVENT Event); typedef EFI_STATUS (*PEFI_GET_MEMORY_MAP)(IN OUT PUINT_PTR MemoryMapSize, IN OUT PEFI_MEMORY_DESCRIPTOR MemoryMap, OUT PUINT_PTR MapKey, OUT PUINT_PTR DescriptorSize, OUT PUINT32 DescriptorVersion); typedef EFI_STATUS (*PEFI_GET_VARIABLE)(IN PUINT16 VariableName, IN PEFI_GUID VendorGuid, OUT PUINT32 Attributes, IN OUT PUINT_PTR DataSize, OUT PVOID Data); typedef EFI_STATUS (*PEFI_GET_NEXT_HIGH_MONO_COUNT)(OUT PUINT32 HighCount); typedef EFI_STATUS (*PEFI_GET_NEXT_VARIABLE_NAME)(IN OUT PUINT_PTR VariableNameSize, IN OUT PUINT16 VariableName, IN OUT PEFI_GUID VendorGuid); typedef EFI_STATUS (*PEFI_GET_TIME)(OUT PEFI_TIME Time, OUT PEFI_TIME_CAPABILITIES Capabilities); typedef EFI_STATUS (*PEFI_SET_TIME)(IN PEFI_TIME Time); typedef EFI_STATUS (*PEFI_SET_TIMER)(IN EFI_EVENT Event, IN EFI_TIMER_DELAY Type, IN UINT64 TriggerTime); typedef EFI_STATUS (*PEFI_SIGNAL_EVENT)(IN EFI_EVENT Event); typedef EFI_STATUS (*PEFI_CLOSE_EVENT)(IN EFI_EVENT Event); typedef EFI_STATUS (*PEFI_CHECK_EVENT)(IN EFI_EVENT Event); typedef EFI_STATUS (*PEFI_CREATE_EVENT_EX)(IN UINT32 Type, IN EFI_TPL NotifyTpl, IN PEFI_EVENT_NOTIFY NotifyFunction, IN CONST PVOID NotifyContext, IN CONST PEFI_GUID EventGroup, OUT PEFI_EVENT Event); typedef EFI_STATUS (*PEFI_WAIT_FOR_EVENT)(IN UINT_PTR NumberOfEvents, IN PEFI_EVENT Event, OUT PUINT_PTR Index); typedef EFI_STATUS (*PEFI_QUERY_CAPSULE_CAPABILITIES)(IN PEFI_CAPSULE_HEADER *CapsuleHeaderArray, IN UINT_PTR CapsuleCount, OUT PUINT64 MaximumCapsuleSize, OUT PEFI_RESET_TYPE ResetType); typedef EFI_STATUS (*PEFI_QUERY_VARIABLE_INFO)(IN UINT32 Attributes, OUT PUINT64 MaximumVariableStorageSize, OUT PUINT64 RemainingVariableStorageSize, OUT PUINT64 MaximumVariableSize); typedef EFI_STATUS (*PEFI_RAISE_TPL)(IN EFI_TPL NewTpl); typedef EFI_STATUS (*PEFI_RESET_SYSTEM)(IN EFI_RESET_TYPE ResetType, IN EFI_STATUS ResetStatus, IN UINT_PTR DataSize, IN PUINT16 ResetData); typedef EFI_STATUS (*PEFI_RESTORE_TPL)(IN EFI_TPL OldTpl); typedef EFI_STATUS (*PEFI_UPDATE_CAPSULE)(IN PEFI_CAPSULE_HEADER *CapsuleHeaderArray, IN UINT_PTR CapsuleCount, IN EFI_PHYSICAL_ADDRESS ScatterGatherList); typedef EFI_STATUS (*PEFI_SET_VARIABLE)(IN PUINT16 VariableName, IN PEFI_GUID VendorGuid, IN UINT32 Attributes, IN UINT_PTR DataSize, IN PVOID Data); typedef EFI_STATUS (*PEFI_SET_VIRTUAL_ADDRESS_MAP)(IN UINT_PTR MemoryMapSize, IN UINT_PTR DescriptorSize, IN UINT32 DescriptorVersion, IN PEFI_MEMORY_DESCRIPTOR VirtualMap); typedef EFI_STATUS (*PEFI_GET_WAKEUP_TIME)(OUT BOOLEAN Enabled, OUT BOOLEAN Pending, OUT PEFI_TIME Time); typedef EFI_STATUS (*PEFI_SET_WAKEUP_TIME)(IN BOOLEAN Enable, IN PEFI_TIME Time); typedef EFI_STATUS (*PEFI_INSTALL_PROTOCOL_INTERFACE)(IN OUT PEFI_HANDLE Handle, IN PEFI_GUID Protocol, IN EFI_INTERFACE_TYPE InterfaceType, IN PVOID Interface); typedef EFI_STATUS (*PEFI_REINSTALL_PROTOCOL_INTERFACE)(IN EFI_HANDLE Handle, IN PEFI_GUID Protocol, IN PVOID OldInterface, IN PVOID NewInterface); typedef EFI_STATUS (*PEFI_UNINSTALL_PROTOCOL_INTERFACE)(IN EFI_HANDLE Handle, IN PEFI_GUID Protocol, IN PVOID Interface); typedef EFI_STATUS (*PEFI_HANDLE_PROTOCOL)(IN EFI_HANDLE Handle, IN PEFI_GUID Protocol, OUT PVOID *Interface); typedef EFI_STATUS (*PEFI_REGISTER_PROTOCOL_NOTIFY)(IN PEFI_GUID Protocol, IN EFI_EVENT Event, OUT PVOID *Registration); typedef EFI_STATUS (*PEFI_LOCATE_HANDLE)(IN EFI_LOCATE_SEARCH_TYPE SearchType, IN PEFI_GUID Protocol, IN PVOID SearchKey, IN OUT PUINT_PTR BufferSize, OUT PEFI_HANDLE Buffer); typedef EFI_STATUS (*PEFI_LOCATE_DEVICE_PATH)(IN PEFI_GUID Protocol, IN OUT PEFI_DEVICE_PATH_PROTOCOL *DevicePath, OUT PEFI_HANDLE Device); typedef EFI_STATUS (*PEFI_LOCATE_HANDLE_BUFFER)(IN EFI_LOCATE_SEARCH_TYPE SearchType, IN PEFI_GUID Protocol, IN PVOID SearchKey, IN OUT PUINT_PTR NoHandles, OUT PEFI_HANDLE *Buffer); typedef EFI_STATUS (*PEFI_LOCATE_PROTOCOL)(IN PEFI_GUID Protocol, IN PVOID Registration, OUT PVOID *Interface); typedef EFI_STATUS (*PEFI_INSTALL_CONFIGURATION_TABLE)(IN PEFI_GUID Guid, IN PVOID Table); typedef EFI_STATUS (*PEFI_IMAGE_LOAD)(IN BOOLEAN BootPolicy, IN EFI_HANDLE ParentImageHandle, IN PEFI_DEVICE_PATH_PROTOCOL DevicePath, IN PVOID SourceBuffer, IN UINT_PTR SourceSize, OUT PEFI_HANDLE ImageHandle); typedef EFI_STATUS (*PEFI_IMAGE_UNLOAD)(IN EFI_HANDLE ImageHandle); typedef EFI_STATUS (*PEFI_IMAGE_START)(IN EFI_HANDLE ImageHandle, OUT PUINT_PTR ExitDataSize, OUT PUINT16 *ExitData); typedef EFI_STATUS (*PEFI_EXIT)(IN EFI_HANDLE ImageHandle, IN EFI_STATUS ExitStatus, IN UINT_PTR ExitDataSize, IN PUINT16 ExitData); typedef EFI_STATUS (*PEFI_EXIT_BOOT_SERVICES)(IN EFI_HANDLE ImageHandle, IN UINT_PTR MapKey); typedef EFI_STATUS (*PEFI_GET_NEXT_MONOTONIC_COUNT)(OUT PUINT64 Count); typedef EFI_STATUS (*PEFI_STALL)(IN UINT_PTR Microseconds); typedef EFI_STATUS (*PEFI_SET_WATCHDOG_TIMER)(IN UINT_PTR Timeout, IN UINT64 WatchdogCode, IN UINT_PTR DataSize, IN PUINT16 WatchdogData); typedef EFI_STATUS (*PEFI_CONNECT_CONTROLLER)(IN EFI_HANDLE ControllerHandle, IN PEFI_HANDLE DriverImageHandle, IN PEFI_DEVICE_PATH_PROTOCOL RemainingDevicePath, IN BOOLEAN Recursive); typedef EFI_STATUS (*PEFI_DISCONNECT_CONTROLLER)(IN EFI_HANDLE ControllerHandle, IN EFI_HANDLE DriverImageHandle, IN EFI_HANDLE ChildHandle); typedef EFI_STATUS (*PEFI_OPEN_PROTOCOL)(IN EFI_HANDLE Handle, IN PEFI_GUID Protocol, OUT PVOID *Interface, IN EFI_HANDLE AgentHandle, IN EFI_HANDLE ControllerHandle, IN UINT32 Attributes); typedef EFI_STATUS (*PEFI_CLOSE_PROTOCOL)(IN EFI_HANDLE Handle, IN PEFI_GUID Protocol, IN EFI_HANDLE AgentHandle, IN EFI_HANDLE ControllerHandle); typedef EFI_STATUS (*PEFI_OPEN_PROTOCOL_INFORMATION)(IN EFI_HANDLE Handle, IN PEFI_GUID Protocol, OUT PEFI_OPEN_PROTOCOL_INFORMATION_ENTRY *EntryBuffer, OUT PUINT_PTR EntryCount); typedef EFI_STATUS (*PEFI_PROTOCOLS_PER_HANDLE)(IN EFI_HANDLE Handle, OUT PEFI_GUID **ProtocolBuffer, OUT PUINT_PTR ProtocolBufferCount); typedef EFI_STATUS (*PEFI_INSTALL_MULTIPLE_PROTOCOL_INTERFACES)(IN OUT PEFI_HANDLE Handle, ...); typedef EFI_STATUS (*PEFI_UNINSTALL_MULTIPLE_PROTOCOL_INTERFACES)(IN OUT PEFI_HANDLE Handle, ...); typedef EFI_STATUS (*PEFI_CALCULATE_CRC32)(IN PVOID Data, IN UINT_PTR DataSize, OUT PUINT32 Crc32); typedef EFI_STATUS (*PEFI_COPY_MEM)(IN OUT PVOID Destination, IN PVOID Source, IN UINT_PTR Length); typedef EFI_STATUS (*PEFI_SET_MEM)(IN OUT PVOID Buffer, IN UINT_PTR Size, IN UINT8 Value); typedef EFI_STATUS (*PEFI_INPUT_RESET)(IN PEFI_SIMPLE_TEXT_INPUT_PROTOCOL This, IN BOOLEAN ExtendedVerification); typedef EFI_STATUS (*PEFI_INPUT_READ_KEY)(IN PEFI_SIMPLE_TEXT_INPUT_PROTOCOL This, OUT PEFI_INPUT_KEY Key); typedef EFI_STATUS (*PEFI_TEXT_RESET)(IN PEFI_SIMPLE_TEXT_OUTPUT_PROTOCOL This, IN BOOLEAN ExtendedVerification); typedef EFI_STATUS (*PEFI_TEXT_OUTPUT_STRING)(IN PEFI_SIMPLE_TEXT_OUTPUT_PROTOCOL This, IN PUINT16 String); typedef EFI_STATUS (*PEFI_TEXT_TEST_STRING)(IN PEFI_SIMPLE_TEXT_OUTPUT_PROTOCOL This, IN PUINT16 String); typedef EFI_STATUS (*PEFI_TEXT_QUERY_MODE)(IN PEFI_SIMPLE_TEXT_OUTPUT_PROTOCOL This, IN UINT_PTR ModeNumber, OUT PUINT_PTR Columns, OUT PUINT_PTR Rows); typedef EFI_STATUS (*PEFI_TEXT_SET_MODE)(IN PEFI_SIMPLE_TEXT_OUTPUT_PROTOCOL This, IN UINT_PTR ModeNumber); typedef EFI_STATUS (*PEFI_TEXT_SET_ATTRIBUTE)(IN PEFI_SIMPLE_TEXT_OUTPUT_PROTOCOL This, IN UINT_PTR Attribute); typedef EFI_STATUS (*PEFI_TEXT_CLEAR_SCREEN)(IN PEFI_SIMPLE_TEXT_OUTPUT_PROTOCOL This); typedef EFI_STATUS (*PEFI_TEXT_SET_CURSOR_POSITION)(IN PEFI_SIMPLE_TEXT_OUTPUT_PROTOCOL This, IN UINT_PTR Column, IN UINT_PTR Row); typedef EFI_STATUS (*PEFI_TEXT_ENABLE_CURSOR)(IN PEFI_SIMPLE_TEXT_OUTPUT_PROTOCOL This, IN BOOLEAN Enable); typedef PUINT16(*PEFI_DEVICE_PATH_TO_TEXT_NODE)(IN CONST PEFI_DEVICE_PATH_PROTOCOL DeviceNode, IN BOOLEAN DisplayOnly, IN BOOLEAN AllowShortcuts); typedef PUINT16(*PEFI_DEVICE_PATH_TO_TEXT_PATH)(IN CONST PEFI_DEVICE_PATH_PROTOCOL DevicePath, IN BOOLEAN DisplayOnly, IN BOOLEAN AllowShortcuts); typedef PEFI_DEVICE_PATH_PROTOCOL(*PEFI_DEVICE_PATH_FROM_TEXT_NODE)(IN CONST PUINT16 TextDeviceNode); typedef PEFI_DEVICE_PATH_PROTOCOL(*PEFI_DEVICE_PATH_FROM_TEXT_PATH)(IN CONST PUINT16 TextDevicePath); typedef UINT_PTR(*PEFI_DEVICE_PATH_UTILS_GET_DEVICE_PATH_SIZE)(IN CONST PEFI_DEVICE_PATH_PROTOCOL DevicePath); typedef PEFI_DEVICE_PATH_PROTOCOL(*PEFI_DEVICE_PATH_UTILS_DUP_DEVICE_PATH)(IN CONST PEFI_DEVICE_PATH_PROTOCOL DevicePath); typedef PEFI_DEVICE_PATH_PROTOCOL(*PEFI_DEVICE_PATH_UTILS_APPEND_PATH)(IN CONST PEFI_DEVICE_PATH_PROTOCOL Src1, IN CONST PEFI_DEVICE_PATH_PROTOCOL Src2); typedef PEFI_DEVICE_PATH_PROTOCOL(*PEFI_DEVICE_PATH_UTILS_APPEND_NODE)(IN CONST PEFI_DEVICE_PATH_PROTOCOL DevicePath, IN CONST PEFI_DEVICE_PATH_PROTOCOL DeviceNode); typedef PEFI_DEVICE_PATH_PROTOCOL(*PEFI_DEVICE_PATH_UTILS_APPEND_INSTANCE)(IN CONST PEFI_DEVICE_PATH_PROTOCOL DevicePath, IN CONST PEFI_DEVICE_PATH_PROTOCOL DevicePathInstance); typedef PEFI_DEVICE_PATH_PROTOCOL(*PEFI_DEVICE_PATH_UTILS_GET_NEXT_INSTANCE)(IN OUT PEFI_DEVICE_PATH_PROTOCOL *DevicePathInstance, OUT PUINT_PTR DevicePathInstanceSize); typedef PEFI_DEVICE_PATH_PROTOCOL(*PEFI_DEVICE_PATH_UTILS_CREATE_NODE)(IN UINT8 NodeType, IN UINT8 NodeSubType, IN UINT16 NodeLength); typedef BOOLEAN (*PEFI_DEVICE_PATH_UTILS_IS_MULTI_INSTANCE)(IN CONST PEFI_DEVICE_PATH_PROTOCOL DevicePath); typedef EFI_STATUS(*EFI_PCI_IO_PROTOCOL_POLL_IO_MEM)(IN PEFI_PCI_IO_PROTOCOL This, IN EFI_PCI_IO_PROTOCOL_WIDTH Width, IN UINT8 BarIndex, IN UINT64 Offset, IN UINT64 Mask, IN UINT64 Value, IN UINT64 Delay, OUT PUINT64 Result); typedef EFI_STATUS(*EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_POLL_IO_MEM)(IN PEFI_PCI_ROOT_BRIDGE_IO_PROTOCOL This, IN EFI_PCI_IO_PROTOCOL_WIDTH Width, IN UINT64 Address, IN UINT64 Mask, IN UINT64 Value, IN UINT64 Delay, OUT PUINT64 Result); typedef EFI_STATUS(*EFI_PCI_IO_PROTOCOL_IO_MEM)(IN PEFI_PCI_IO_PROTOCOL This, IN EFI_PCI_IO_PROTOCOL_WIDTH Width, IN UINT8 BarIndex, IN UINT64 Offset, IN UINT_PTR Count, IN OUT PVOID Buffer); typedef EFI_STATUS(*EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_IO_MEM)(IN PEFI_PCI_ROOT_BRIDGE_IO_PROTOCOL This, IN EFI_PCI_IO_PROTOCOL_WIDTH Width, IN UINT64 Address, IN UINT_PTR Count, IN OUT PVOID Buffer); typedef EFI_STATUS(*EFI_PCI_IO_PROTOCOL_CONFIG)(IN PEFI_PCI_IO_PROTOCOL This, IN EFI_PCI_IO_PROTOCOL_WIDTH Width, IN UINT32 Offset, IN UINT_PTR Count, IN OUT PVOID Buffer); typedef EFI_STATUS(*EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_CONFIGURATION)(IN PEFI_PCI_ROOT_BRIDGE_IO_PROTOCOL This, OUT PVOID *Resources); typedef EFI_STATUS(*EFI_PCI_IO_PROTOCOL_COPY_MEM)(IN PEFI_PCI_IO_PROTOCOL This, IN EFI_PCI_IO_PROTOCOL_WIDTH Width, IN UINT8 DestBarIndex, IN UINT64 DestOffset, IN UINT8 SrcBarIndex, IN UINT64 SrcOffset, IN UINT_PTR Count); typedef EFI_STATUS(*EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_COPY_MEM)(IN PEFI_PCI_ROOT_BRIDGE_IO_PROTOCOL This, IN EFI_PCI_IO_PROTOCOL_WIDTH Width, IN UINT64 DestAddress, IN UINT64 SrcAddress, IN UINT_PTR Count); typedef EFI_STATUS(*EFI_PCI_IO_PROTOCOL_MAP)(IN PEFI_PCI_IO_PROTOCOL This, IN EFI_PCI_IO_PROTOCOL_OPERATION Operation, IN PVOID HostAddress, IN OUT PUINT_PTR NumberOfBytes, OUT PEFI_PHYSICAL_ADDRESS DeviceAddress, OUT PVOID *Mapping); typedef EFI_STATUS(*EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_MAP)(IN PEFI_PCI_ROOT_BRIDGE_IO_PROTOCOL This, IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_OPERATION Operation, IN PVOID HostAddress, IN OUT PUINT_PTR NumberOfBytes, OUT PEFI_PHYSICAL_ADDRESS DeviceAddress, OUT PVOID *Mapping); typedef EFI_STATUS(*EFI_PCI_IO_PROTOCOL_UNMAP)(IN PEFI_PCI_IO_PROTOCOL This, IN PVOID Mapping); typedef EFI_STATUS(*EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_UNMAP)(IN PEFI_PCI_ROOT_BRIDGE_IO_PROTOCOL This, IN PVOID Mapping); typedef EFI_STATUS(*EFI_PCI_IO_PROTOCOL_ALLOCATE_BUFFER)(IN PEFI_PCI_IO_PROTOCOL This, IN EFI_ALLOCATE_TYPE Type, IN EFI_MEMORY_TYPE MemoryType, IN UINT_PTR Pages, OUT PVOID *HostAddress, IN UINT64 Attributes); typedef EFI_STATUS(*EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_ALLOCATE_BUFFER)(IN PEFI_PCI_ROOT_BRIDGE_IO_PROTOCOL This, IN EFI_ALLOCATE_TYPE Type, IN EFI_MEMORY_TYPE MemoryType, IN UINT_PTR Pages, IN OUT PVOID *HostAddress, IN UINT64 Attributes); typedef EFI_STATUS(*EFI_PCI_IO_PROTOCOL_FREE_BUFFER)(IN PEFI_PCI_IO_PROTOCOL This, IN UINT_PTR Pages, IN PVOID HostAddress); typedef EFI_STATUS(*EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_FREE_BUFFER)(IN PEFI_PCI_ROOT_BRIDGE_IO_PROTOCOL This, IN UINT_PTR Pages, IN PVOID HostAddress); typedef EFI_STATUS(*EFI_PCI_IO_PROTOCOL_FLUSH)(IN PEFI_PCI_IO_PROTOCOL This); typedef EFI_STATUS(*EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_FLUSH)(IN PEFI_PCI_ROOT_BRIDGE_IO_PROTOCOL This); typedef EFI_STATUS(*EFI_PCI_IO_PROTOCOL_GET_LOCATION) (IN PEFI_PCI_IO_PROTOCOL This, OUT PUINT_PTR SegmentNumber, OUT PUINT_PTR BusNumber, OUT PUINT_PTR DeviceNumber, OUT PUINT_PTR FunctionNumber); typedef EFI_STATUS(*EFI_PCI_IO_PROTOCOL_ATTRIBUTES)(IN PEFI_PCI_IO_PROTOCOL This, IN EFI_PCI_IO_PROTOCOL_ATTRIBUTE_OPERATION Operation, IN UINT64 Attributes, OUT PUINT64 Result); typedef EFI_STATUS(*EFI_PCI_IO_PROTOCOL_GET_BAR_ATTRIBUTES)(IN PEFI_PCI_IO_PROTOCOL This, IN UINT8 BarIndex, OUT PUINT64 Supports, OUT PVOID *Resources); typedef EFI_STATUS(*EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_GET_ATTRIBUTES)(IN PEFI_PCI_ROOT_BRIDGE_IO_PROTOCOL This, OUT PUINT64 Supports, OUT PUINT64 Attributes); typedef EFI_STATUS(*EFI_PCI_IO_PROTOCOL_SET_BAR_ATTRIBUTES)(IN PEFI_PCI_IO_PROTOCOL This, IN UINT64 Attributes, IN UINT8 BarIndex, IN OUT PUINT64 Offset, IN OUT PUINT64 Length); typedef EFI_STATUS(*EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_SET_ATTRIBUTES)(IN PEFI_PCI_ROOT_BRIDGE_IO_PROTOCOL This, IN UINT64 Attributes, IN OUT PUINT64 ResourceBase, IN OUT PUINT64 ResourceLength); /* 128-bit buffer containing a unique identifier value */ typedef struct _EFI_GUID { UINT32 Data1; UINT16 Data2; UINT16 Data3; UINT8 Data4[8]; } EFI_GUID, *PEFI_GUID; /* EFI Capsule Header */ typedef struct _EFI_CAPSULE_HEADER { EFI_GUID CapsuleGuid; UINT32 HeaderSize; UINT32 Flags; UINT32 CapsuleImageSize; } EFI_CAPSULE_HEADER, *PEFI_CAPSULE_HEADER; /* EFI Capsule Block Descriptor */ typedef struct _EFI_CAPSULE_BLOCK_DESCRIPTOR { UINT64 Length; union { EFI_PHYSICAL_ADDRESS DataBlock; EFI_PHYSICAL_ADDRESS ContinuationPointer; } Union; } EFI_CAPSULE_BLOCK_DESCRIPTOR, *PEFI_CAPSULE_BLOCK_DESCRIPTOR; /* Definition of an EFI memory descriptor */ typedef struct _EFI_MEMORY_DESCRIPTOR { UINT32 Type; UINT32 Pad; EFI_PHYSICAL_ADDRESS PhysicalStart; EFI_VIRTUAL_ADDRESS VirtualStart; UINT64 NumberOfPages; UINT64 Attribute; } EFI_MEMORY_DESCRIPTOR, *PEFI_MEMORY_DESCRIPTOR; /* Data structure that precedes all of the standard EFI table types */ typedef struct _EFI_TABLE_HEADER { UINT64 Signature; UINT32 Revision; UINT32 HeaderSize; UINT32 CRC32; UINT32 Reserved; } EFI_TABLE_HEADER, *PEFI_TABLE_HEADER; /* EFI Time Abstraction */ typedef struct _EFI_TIME { UINT16 Year; UINT8 Month; UINT8 Day; UINT8 Hour; UINT8 Minute; UINT8 Second; UINT8 Pad1; UINT32 Nanosecond; INT16 TimeZone; UINT8 Daylight; UINT8 PAD2; } EFI_TIME, *PEFI_TIME; /* Provides the capabilities of the RTC device as exposed through the EFI interfaces */ typedef struct _EFI_TIME_CAPABILITIES { UINT32 Resolution; UINT32 Accuracy; UCHAR SetsToZero; } EFI_TIME_CAPABILITIES, *PEFI_TIME_CAPABILITIES; /* EFI Open Protocol Information Entry */ typedef struct _EFI_OPEN_PROTOCOL_INFORMATION_ENTRY { EFI_HANDLE AgentHandle; EFI_HANDLE ControllerHandle; UINT32 Attributes; UINT32 OpenCount; } EFI_OPEN_PROTOCOL_INFORMATION_ENTRY, *PEFI_OPEN_PROTOCOL_INFORMATION_ENTRY; /* EFI Boot Services Table */ typedef struct _EFI_BOOT_SERVICES { EFI_TABLE_HEADER Hdr; PEFI_RAISE_TPL RaiseTPL; PEFI_RESTORE_TPL RestoreTPL; PEFI_ALLOCATE_PAGES AllocatePages; PEFI_FREE_PAGES FreePages; PEFI_GET_MEMORY_MAP GetMemoryMap; PEFI_ALLOCATE_POOL AllocatePool; PEFI_FREE_POOL FreePool; PEFI_CREATE_EVENT CreateEvent; PEFI_SET_TIMER SetTimer; PEFI_WAIT_FOR_EVENT WaitForEvent; PEFI_SIGNAL_EVENT SignalEvent; PEFI_CLOSE_EVENT CloseEvent; PEFI_CHECK_EVENT CheckEvent; PEFI_INSTALL_PROTOCOL_INTERFACE InstallProtocolInterface; PEFI_REINSTALL_PROTOCOL_INTERFACE ReinstallProtocolInterface; PEFI_UNINSTALL_PROTOCOL_INTERFACE UninstallProtocolInterface; PEFI_HANDLE_PROTOCOL HandleProtocol; PVOID Reserved; PEFI_REGISTER_PROTOCOL_NOTIFY RegisterProtocolNotify; PEFI_LOCATE_HANDLE LocateHandle; PEFI_LOCATE_DEVICE_PATH LocateDevicePath; PEFI_INSTALL_CONFIGURATION_TABLE InstallConfigurationTable; PEFI_IMAGE_LOAD LoadImage; PEFI_IMAGE_START StartImage; PEFI_EXIT Exit; PEFI_IMAGE_UNLOAD UnloadImage; PEFI_EXIT_BOOT_SERVICES ExitBootServices; PEFI_GET_NEXT_MONOTONIC_COUNT GetNextMonotonicCount; PEFI_STALL Stall; PEFI_SET_WATCHDOG_TIMER SetWatchdogTimer; PEFI_CONNECT_CONTROLLER ConnectController; PEFI_DISCONNECT_CONTROLLER DisconnectController; PEFI_OPEN_PROTOCOL OpenProtocol; PEFI_CLOSE_PROTOCOL CloseProtocol; PEFI_OPEN_PROTOCOL_INFORMATION OpenProtocolInformation; PEFI_PROTOCOLS_PER_HANDLE ProtocolsPerHandle; PEFI_LOCATE_HANDLE_BUFFER LocateHandleBuffer; PEFI_LOCATE_PROTOCOL LocateProtocol; PEFI_INSTALL_MULTIPLE_PROTOCOL_INTERFACES InstallMultipleProtocolInterfaces; PEFI_UNINSTALL_MULTIPLE_PROTOCOL_INTERFACES UninstallMultipleProtocolInterfaces; PEFI_CALCULATE_CRC32 CalculateCrc32; PEFI_COPY_MEM CopyMem; PEFI_SET_MEM SetMem; PEFI_CREATE_EVENT_EX CreateEventEx; } EFI_BOOT_SERVICES, *PEFI_BOOT_SERVICES; /* EFI Runtime Services Table */ typedef struct _EFI_RUNTIME_SERVICES { EFI_TABLE_HEADER Hdr; PEFI_GET_TIME GetTime; PEFI_SET_TIME SetTime; PEFI_GET_WAKEUP_TIME GetWakeupTime; PEFI_SET_WAKEUP_TIME SetWakeupTime; PEFI_SET_VIRTUAL_ADDRESS_MAP SetVirtualAddressMap; PEFI_CONVERT_POINTER ConvertPointer; PEFI_GET_VARIABLE GetVariable; PEFI_GET_NEXT_VARIABLE_NAME GetNextVariableName; PEFI_SET_VARIABLE SetVariable; PEFI_GET_NEXT_HIGH_MONO_COUNT GetNextHighMonotonicCount; PEFI_RESET_SYSTEM ResetSystem; PEFI_UPDATE_CAPSULE UpdateCapsule; PEFI_QUERY_CAPSULE_CAPABILITIES QueryCapsuleCapabilities; PEFI_QUERY_VARIABLE_INFO QueryVariableInfo; } EFI_RUNTIME_SERVICES, *PEFI_RUNTIME_SERVICES; /* Contains a set of GUID/pointer pairs comprised of the ConfigurationTable field in the EFI System Table */ typedef struct _EFI_CONFIGURATION_TABLE { EFI_GUID VendorGuid; PVOID VendorTable; } EFI_CONFIGURATION_TABLE, *PEFI_CONFIGURATION_TABLE; /* Simple Text Input protocol from the UEFI 2.0 specification */ typedef struct _EFI_SIMPLE_TEXT_INPUT_PROTOCOL { PEFI_INPUT_RESET Reset; PEFI_INPUT_READ_KEY ReadKeyStroke; EFI_EVENT WaitForKey; } EFI_SIMPLE_TEXT_INPUT_PROTOCOL, *PEFI_SIMPLE_TEXT_INPUT_PROTOCOL; /* Simple Text Output protocol from the UEFI 2.0 specification */ typedef struct _EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL { PEFI_TEXT_RESET Reset; PEFI_TEXT_OUTPUT_STRING OutputString; PEFI_TEXT_TEST_STRING TestString; PEFI_TEXT_QUERY_MODE QueryMode; PEFI_TEXT_SET_MODE SetMode; PEFI_TEXT_SET_ATTRIBUTE SetAttribute; PEFI_TEXT_CLEAR_SCREEN ClearScreen; PEFI_TEXT_SET_CURSOR_POSITION SetCursorPosition; PEFI_TEXT_ENABLE_CURSOR EnableCursor; PEFI_SIMPLE_TEXT_OUTPUT_MODE Mode; } EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL, *PEFI_SIMPLE_TEXT_OUTPUT_PROTOCOL; /* Mode Structure pointed to by Simple Text Out protocol */ typedef struct _EFI_SIMPLE_TEXT_OUTPUT_MODE { INT32 MaxMode; INT32 Mode; INT32 Attribute; INT32 CursorColumn; INT32 CursorRow; UCHAR CursorVisible; } EFI_SIMPLE_TEXT_OUTPUT_MODE, *PEFI_SIMPLE_TEXT_OUTPUT_MODE; /* The keystroke information for the key that was pressed */ typedef struct _EFI_INPUT_KEY { UINT16 ScanCode; UINT16 UnicodeChar; } EFI_INPUT_KEY, *PEFI_INPUT_KEY; /* EFI System Table */ typedef struct _EFI_SYSTEM_TABLE { EFI_TABLE_HEADER Hdr; PUINT16 FirmwareVendor; UINT32 FirmwareRevision; EFI_HANDLE ConsoleInHandle; PEFI_SIMPLE_TEXT_INPUT_PROTOCOL ConIn; EFI_HANDLE ConsoleOutHandle; PEFI_SIMPLE_TEXT_OUTPUT_PROTOCOL ConOut; EFI_HANDLE StandardErrorHandle; PEFI_SIMPLE_TEXT_OUTPUT_PROTOCOL StdErr; PEFI_RUNTIME_SERVICES RuntimeServices; PEFI_BOOT_SERVICES BootServices; UINT_PTR NumberOfTableEntries; PEFI_CONFIGURATION_TABLE ConfigurationTable; } EFI_SYSTEM_TABLE, *PEFI_SYSTEM_TABLE; /* EFI IPv4 network protocol */ typedef struct _EFI_IPv4_ADDRESS { UINT8 Addr[4]; } EFI_IPv4_ADDRESS, *PEFI_IPv4_ADDRESS; /* EFI IPv6 network protocol */ typedef struct _EFI_IPv6_ADDRESS { UINT8 Addr[16]; } EFI_IPv6_ADDRESS, *PEFI_IPv6_ADDRESS; /* EFI MAC address definition */ typedef struct _EFI_MAC_ADDRESS { UINT8 Addr[32]; } EFI_MAC_ADDRESS, *PEFI_MAC_ADDRESS; /* EFI network configuration data structure */ typedef struct _EFI_MANAGED_NETWORK_CONFIG_DATA { UINT32 ReceivedQueueTimeoutValue; UINT32 TransmitQueueTimeoutValue; UINT16 ProtocolTypeFilter; BOOLEAN EnableUnicastReceive; BOOLEAN EnableMulticastReceive; BOOLEAN EnableBroadcastReceive; BOOLEAN EnablePromiscuousReceive; BOOLEAN FlushQueuesOnReset; BOOLEAN EnableReceiveTimestamps; BOOLEAN DisableBackgroundPolling; } EFI_MANAGED_NETWORK_CONFIG_DATA, *PEFI_MANAGED_NETWORK_CONFIG_DATA; /* Describes the location of the device the handle is for */ typedef struct _EFI_DEVICE_PATH_PROTOCOL { UINT8 Type; UINT8 SubType; UINT8 Length[2]; } EFI_DEVICE_PATH_PROTOCOL, *PEFI_DEVICE_PATH_PROTOCOL; /* PCI device path node */ typedef struct _EFI_PCI_DEVICE_PATH { EFI_DEVICE_PATH_PROTOCOL Header; UINT8 Function; UINT8 Device; } EFI_PCI_DEVICE_PATH, *PEFI_PCI_DEVICE_PATH; /* PCCARD device path node */ typedef struct _EFI_PCCARD_DEVICE_PATH { EFI_DEVICE_PATH_PROTOCOL Header; UINT8 FunctionNumber; } EFI_PCCARD_DEVICE_PATH, *PEFI_PCCARD_DEVICE_PATH; /* MemMap device path node */ typedef struct _EFI_MEMMAP_DEVICE_PATH { EFI_DEVICE_PATH_PROTOCOL Header; UINT32 MemoryType; EFI_PHYSICAL_ADDRESS StartingAddress; EFI_PHYSICAL_ADDRESS EndingAddress; } EFI_MEMMAP_DEVICE_PATH, *PEFI_MEMMAP_DEVICE_PATH; /* Vendor device path node */ typedef struct _EFI_VENDOR_DEVICE_PATH { EFI_DEVICE_PATH_PROTOCOL Header; EFI_GUID Guid; } EFI_VENDOR_DEVICE_PATH, *PEFI_VENDOR_DEVICE_PATH; /* Unknown Device Vendor device path node */ typedef struct _EFI_UKNOWN_DEVICE_VENDOR_DEVICE_PATH { EFI_VENDOR_DEVICE_PATH DevicePath; UINT8 LegacyDriveLetter; } EFI_UNKNOWN_DEVICE_VENDOR_DEVICE_PATH, *PEFI_UNKNOWN_DEVICE_VENDOR_DEVICE_PATH; /* Controller device path node */ typedef struct _EFI_CONTROLLER_DEVICE_PATH { EFI_DEVICE_PATH_PROTOCOL Header; UINT32 Controller; } EFI_CONTROLLER_DEVICE_PATH, *PEFI_CONTROLLER_DEVICE_PATH; /* ACPI device path node */ typedef struct _EFI_ACPI_HID_DEVICE_PATH { EFI_DEVICE_PATH_PROTOCOL Header; UINT32 HID; UINT32 UID; } EFI_ACPI_HID_DEVICE_PATH, *PEFI_ACPI_HID_DEVICE_PATH; /* Expanded ACPI device path node */ typedef struct _EFI_EXPANDED_ACPI_HID_DEVICE_PATH { EFI_DEVICE_PATH_PROTOCOL Header; UINT32 HID; UINT32 UID; UINT32 CID; UINT8 HidStr[1]; } EFI_EXPANDED_ACPI_HID_DEVICE_PATH, *PEFI_EXPANDED_ACPI_HID_DEVICE_PATH; /* ACPI ADR device path node */ typedef struct _EFI_ACPI_ADR_DEVICE_PATH { EFI_DEVICE_PATH_PROTOCOL Header; UINT32 ADR; } EFI_ACPI_ADR_DEVICE_PATH, *PEFI_ACPI_ADR_DEVICE_PATH; /* ATAPI device path node */ typedef struct _EFI_ATAPI_DEVICE_PATH { EFI_DEVICE_PATH_PROTOCOL Header; UINT8 PrimarySecondary; UINT8 SlaveMaster; UINT16 Lun; } EFI_ATAPI_DEVICE_PATH, *PEFI_ATAPI_DEVICE_PATH; /* SCSI device path node */ typedef struct _EFI_SCSI_DEVICE_PATH { EFI_DEVICE_PATH_PROTOCOL Header; UINT16 Pun; UINT16 Lun; } EFI_SCSI_DEVICE_PATH, *PEFI_SCSI_DEVICE_PATH; /* Fibre Channel device path node */ typedef struct _EFI_FIBRECHANNEL_DEVICE_PATH { EFI_DEVICE_PATH_PROTOCOL Header; UINT32 Reserved; UINT64 WWN; UINT64 Lun; } EFI_FIBRECHANNEL_DEVICE_PATH, *PEFI_FIBRECHANNEL_DEVICE_PATH; /* Fibre Channerl EX subtype device path node */ typedef struct _EFI_FIBRECHANNELEX_DEVICE_PATH { EFI_DEVICE_PATH_PROTOCOL Header ; UINT32 Reserved; UINT8 WWN[8]; UINT8 Lun[8]; } EFI_FIBRECHANNELEX_DEVICE_PATH, *PEFI_FIBRECHANNELEX_DEVICE_PATH; /* 1394 device path node */ typedef struct _EFI_1394_DEVICE_PATH { EFI_DEVICE_PATH_PROTOCOL Header; UINT32 Reserved; UINT64 Guid; } EFI_1394_DEVICE_PATH, *PEFI_1394_DEVICE_PATH; /* USB device path node */ typedef struct _EFI_USB_DEVICE_PATH { EFI_DEVICE_PATH_PROTOCOL Header; UINT8 Port; UINT8 Endpoint; } EFI_USB_DEVICE_PATH, *PEFI_USB_DEVICE_PATH; /* USB WWID device path node */ typedef struct _EFI_USB_WWID_DEVICE_PATH { EFI_DEVICE_PATH_PROTOCOL Header; UINT16 InterfaceNumber; UINT16 VendorId; UINT16 ProductId; UINT16 SerialNumber[1]; } EFI_USB_WWID_DEVICE_PATH, *PEFI_USB_WWID_DEVICE_PATH; /* USB Class device path node */ typedef struct _EFI_USB_CLASS_DEVICE_PATH { EFI_DEVICE_PATH_PROTOCOL Header; UINT16 VendorId; UINT16 ProductId; UINT8 DeviceClass; UINT8 DeviceSubclass; UINT8 DeviceProtocol; } EFI_USB_CLASS_DEVICE_PATH, *PEFI_USB_CLASS_DEVICE_PATH; /* SATA device path node */ typedef struct _EFI_SATA_DEVICE_PATH { EFI_DEVICE_PATH_PROTOCOL Header; UINT16 HBAPortNumber; UINT16 PortMultiplierPortNumber; UINT16 Lun; } EFI_SATA_DEVICE_PATH, *PEFI_SATA_DEVICE_PATH; /* Device Logical Unit device path node */ typedef struct _EFI_DEVICE_LOGICAL_UNIT_DEVICE_PATH { EFI_DEVICE_PATH_PROTOCOL Header; UINT8 Lun; } EFI_DEVICE_LOGICAL_UNIT_DEVICE_PATH, *PEFI_DEVICE_LOGICAL_UNIT_DEVICE_PATH; /* I2O device path node */ typedef struct _EFI_I2O_DEVICE_PATH { EFI_DEVICE_PATH_PROTOCOL Header; UINT32 Tid; } EFI_I2O_DEVICE_PATH, *PEFI_I2O_DEVICE_PATH; /* MAC Address device path node */ typedef struct _EFI_MAC_ADDR_DEVICE_PATH { EFI_DEVICE_PATH_PROTOCOL Header; EFI_MAC_ADDRESS MacAddress; UINT8 IfType; } EFI_MAC_ADDR_DEVICE_PATH, *PEFI_MAC_ADDR_DEVICE_PATH; /* IPv4 device path node */ typedef struct _EFI_IPv4_DEVICE_PATH { EFI_DEVICE_PATH_PROTOCOL Header; EFI_IPv4_ADDRESS LocalIpAddress; EFI_IPv4_ADDRESS RemoteIpAddress; UINT16 LocalPort; UINT16 RemotePort; UINT16 Protocol; BOOLEAN StaticIpAddress; EFI_IPv4_ADDRESS GatewayIpAddress; EFI_IPv4_ADDRESS SubnetMask; } EFI_IPv4_DEVICE_PATH, *PEFI_IPv4_DEVICE_PATH; /* IPv6 device path node */ typedef struct _EFI_IPv6_DEVICE_PATH { EFI_DEVICE_PATH_PROTOCOL Header; EFI_IPv6_ADDRESS LocalIpAddress; EFI_IPv6_ADDRESS RemoteIpAddress; UINT16 LocalPort; UINT16 RemotePort; UINT16 Protocol; BOOLEAN IPAddressOrigin; UINT8 PrefixLength; EFI_IPv6_ADDRESS GatewayIpAddress; } EFI_IPv6_DEVICE_PATH, *PEFI_IPv6_DEVICE_PATH; /* Uniform Resource Identifiers SubType device path node */ typedef struct _EFI_URI_DEVICE_PATH { EFI_DEVICE_PATH_PROTOCOL Header; UINT8 Uri[1]; } EFI_URI_DEVICE_PATH, *PEFI_URI_DEVICE_PATH; /* VLAN device path node */ typedef struct _EFI_VLAN_DEVICE_PATH { EFI_DEVICE_PATH_PROTOCOL Header; UINT16 VlanId; } EFI_VLAN_DEVICE_PATH, *PEFI_VLAN_DEVICE_PATH; /* InfiniBand device path node */ typedef struct _EFI_INFINIBAND_DEVICE_PATH { EFI_DEVICE_PATH_PROTOCOL Header; UINT32 ResourceFlags; UINT8 PortGid[16]; UINT64 ServiceId; UINT64 TargetPortId; UINT64 DeviceId; } EFI_INFINIBAND_DEVICE_PATH, *PEFI_INFINIBAND_DEVICE_PATH; /* UART device path node */ typedef struct _EFI_UART_DEVICE_PATH { EFI_DEVICE_PATH_PROTOCOL Header; UINT32 Reserved; UINT64 BaudRate; UINT8 DataBits; UINT8 Parity; UINT8 StopBits; } EFI_UART_DEVICE_PATH, *PEFI_UART_DEVICE_PATH; /* Hard Drive device path node */ typedef struct _EFI_HARDDRIVE_DEVICE_PATH { EFI_DEVICE_PATH_PROTOCOL Header; UINT32 PartitionNumber; UINT64 PartitionStart; UINT64 PartitionSize; UINT8 Signature[16]; UINT8 MBRType; UINT8 SignatureType; } EFI_HARDDRIVE_DEVICE_PATH, *PEFI_HARDDRIVE_DEVICE_PATH; /* CDROM device path node */ typedef struct _EFI_CDROM_DEVICE_PATH { EFI_DEVICE_PATH_PROTOCOL Header; UINT32 BootEntry; UINT64 PartitionStart; UINT64 PartitionSize; } EFI_CDROM_DEVICE_PATH, *PEFI_CDROM_DEVICE_PATH; /* File Path device path node */ typedef struct _EFI_FILEPATH_DEVICE_PATH { EFI_DEVICE_PATH_PROTOCOL Header; UINT16 PathName[1]; } EFI_FILEPATH_DEVICE_PATH, *PEFI_FILEPATH_DEVICE_PATH; /* Media Protocol device path node */ typedef struct _EFI_MEDIA_PROTOCOL_DEVICE_PATH { EFI_DEVICE_PATH_PROTOCOL Header; EFI_GUID Protocol; } EFI_MEDIA_PROTOCOL_DEVICE_PATH, *PEFI_MEDIA_PROTOCOL_DEVICE_PATH; /* Media Firmware File SubType device path node */ typedef struct _EFI_MEDIA_FW_VOL_FILEPATH_DEVICE_PATH { EFI_DEVICE_PATH_PROTOCOL Header; EFI_GUID FvFileName; } EFI_MEDIA_FW_VOL_FILEPATH_DEVICE_PATH, *PEFI_MEDIA_FW_VOL_FILEPATH_DEVICE_PATH; /* Media Firmware Volume SubType device path node */ typedef struct _EFI_MEDIA_FW_VOL_DEVICE_PATH { EFI_DEVICE_PATH_PROTOCOL Header; EFI_GUID FvName; } EFI_MEDIA_FW_VOL_DEVICE_PATH, *PEFI_MEDIA_FW_VOL_DEVICE_PATH; /* Media relative offset range device path node */ typedef struct _EFI_MEDIA_RELATIVE_OFFSET_RANGE_DEVICE_PATH { EFI_DEVICE_PATH_PROTOCOL Header; UINT32 Reserved; UINT64 StartingOffset; UINT64 EndingOffset; } EFI_MEDIA_RELATIVE_OFFSET_RANGE_DEVICE_PATH, *PEFI_MEDIA_RELATIVE_OFFSET_RANGE_DEVICE_PATH; /* BIOS Boot Specification (BBS) device path node */ typedef struct _EFI_BBS_BBS_DEVICE_PATH { EFI_DEVICE_PATH_PROTOCOL Header; UINT16 DeviceType; UINT16 StatusFlag; UINT8 String[1]; } EFI_BBS_BBS_DEVICE_PATH, *PEFI_BBS_BBS_DEVICE_PATH; /* EFI device path nodes union */ typedef union _EFI_DEV_PATH { EFI_DEVICE_PATH_PROTOCOL DevPath; EFI_PCI_DEVICE_PATH Pci; EFI_PCCARD_DEVICE_PATH PcCard; EFI_MEMMAP_DEVICE_PATH MemMap; EFI_VENDOR_DEVICE_PATH Vendor; EFI_UNKNOWN_DEVICE_VENDOR_DEVICE_PATH UnknownVendor; EFI_CONTROLLER_DEVICE_PATH Controller; EFI_ACPI_HID_DEVICE_PATH Acpi; EFI_ATAPI_DEVICE_PATH Atapi; EFI_SCSI_DEVICE_PATH Scsi; EFI_FIBRECHANNEL_DEVICE_PATH FibreChannel; EFI_1394_DEVICE_PATH F1394; EFI_USB_DEVICE_PATH Usb; EFI_USB_CLASS_DEVICE_PATH UsbClass; EFI_I2O_DEVICE_PATH I2O; EFI_MAC_ADDR_DEVICE_PATH MacAddr; EFI_IPv4_DEVICE_PATH Ipv4; EFI_IPv6_DEVICE_PATH Ipv6; EFI_URI_DEVICE_PATH Uri; EFI_INFINIBAND_DEVICE_PATH InfiniBand; EFI_UART_DEVICE_PATH Uart; EFI_HARDDRIVE_DEVICE_PATH HardDrive; EFI_CDROM_DEVICE_PATH CD; EFI_FILEPATH_DEVICE_PATH FilePath; EFI_MEDIA_PROTOCOL_DEVICE_PATH MediaProtocol; EFI_BBS_BBS_DEVICE_PATH Bbs; } EFI_DEV_PATH, *PEFI_DEV_PATH; /* EFI device path node pointers union */ typedef union _EFI_DEV_PATH_PTR { PEFI_DEVICE_PATH_PROTOCOL DevPath; PEFI_PCI_DEVICE_PATH Pci; PEFI_PCCARD_DEVICE_PATH PcCard; PEFI_MEMMAP_DEVICE_PATH MemMap; PEFI_VENDOR_DEVICE_PATH Vendor; PEFI_UNKNOWN_DEVICE_VENDOR_DEVICE_PATH UnknownVendor; PEFI_CONTROLLER_DEVICE_PATH Controller; PEFI_ACPI_HID_DEVICE_PATH Acpi; PEFI_ATAPI_DEVICE_PATH Atapi; PEFI_SCSI_DEVICE_PATH Scsi; PEFI_FIBRECHANNEL_DEVICE_PATH FibreChannel; PEFI_1394_DEVICE_PATH F1394; PEFI_USB_DEVICE_PATH Usb; PEFI_USB_CLASS_DEVICE_PATH UsbClass; PEFI_I2O_DEVICE_PATH I2O; PEFI_MAC_ADDR_DEVICE_PATH MacAddr; PEFI_IPv4_DEVICE_PATH Ipv4; PEFI_IPv6_DEVICE_PATH Ipv6; PEFI_URI_DEVICE_PATH Uri; PEFI_INFINIBAND_DEVICE_PATH InfiniBand; PEFI_UART_DEVICE_PATH Uart; PEFI_HARDDRIVE_DEVICE_PATH HardDrive; PEFI_FILEPATH_DEVICE_PATH FilePath; PEFI_MEDIA_PROTOCOL_DEVICE_PATH MediaProtocol; PEFI_CDROM_DEVICE_PATH CD; PEFI_BBS_BBS_DEVICE_PATH Bbs; } EFI_DEV_PATH_PTR, *PEFI_DEV_PATH_PTR; /* EFI device path to text protocol */ typedef struct _EFI_DEVICE_PATH_TO_TEXT_PROTOCOL { PEFI_DEVICE_PATH_TO_TEXT_NODE ConvertDeviceNodeToText; PEFI_DEVICE_PATH_TO_TEXT_PATH ConvertDevicePathToText; } EFI_DEVICE_PATH_TO_TEXT_PROTOCOL, *PEFI_DEVICE_PATH_TO_TEXT_PROTOCOL; /* EFI device path from text protocol */ typedef struct _EFI_DEVICE_PATH_FROM_TEXT_PROTOCOL { PEFI_DEVICE_PATH_FROM_TEXT_NODE ConvertTextToDeviceNode; PEFI_DEVICE_PATH_FROM_TEXT_PATH ConvertTextToDevicePath; } EFI_DEVICE_PATH_FROM_TEXT_PROTOCOL, *PEFI_DEVICE_PATH_FROM_TEXT_PROTOCOL; /* EFI device path utility protocol */ typedef struct _EFI_DEVICE_PATH_UTILITIES_PROTOCOL { PEFI_DEVICE_PATH_UTILS_GET_DEVICE_PATH_SIZE GetDevicePathSize; PEFI_DEVICE_PATH_UTILS_DUP_DEVICE_PATH DuplicateDevicePath; PEFI_DEVICE_PATH_UTILS_APPEND_PATH AppendDevicePath; PEFI_DEVICE_PATH_UTILS_APPEND_NODE AppendDeviceNode; PEFI_DEVICE_PATH_UTILS_APPEND_INSTANCE AppendDevicePathInstance; PEFI_DEVICE_PATH_UTILS_GET_NEXT_INSTANCE GetNextDevicePathInstance; PEFI_DEVICE_PATH_UTILS_IS_MULTI_INSTANCE IsDevicePathMultiInstance; PEFI_DEVICE_PATH_UTILS_CREATE_NODE CreateDeviceNode; } EFI_DEVICE_PATH_UTILITIES_PROTOCOL, *PEFI_DEVICE_PATH_UTILITIES_PROTOCOL; /* PCI I/O protocol access registers */ typedef struct _EFI_PCI_IO_PROTOCOL_ACCESS { EFI_PCI_IO_PROTOCOL_IO_MEM Read; EFI_PCI_IO_PROTOCOL_IO_MEM Write; } EFI_PCI_IO_PROTOCOL_ACCESS, *PEFI_PCI_IO_PROTOCOL_ACCESS; /* PCI Root Bridge I/O protocol access registers */ typedef struct _EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_ACCESS { EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_IO_MEM Read; EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_IO_MEM Write; } EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_ACCESS, *PEFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_ACCESS; /* PCI I/O protocol configuration access registers */ typedef struct _EFI_PCI_IO_PROTOCOL_CONFIG_ACCESS { EFI_PCI_IO_PROTOCOL_CONFIG Read; EFI_PCI_IO_PROTOCOL_CONFIG Write; } EFI_PCI_IO_PROTOCOL_CONFIG_ACCESS, *PEFI_PCI_IO_PROTOCOL_CONFIG_ACCESS; /* PCI Root Bridge I/O protocol address */ typedef struct _EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_PCI_ADDRESS { UINT8 Register; UINT8 Function; UINT8 Device; UINT8 Bus; UINT32 ExtendedRegister; } EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_PCI_ADDRESS, *PEFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_PCI_ADDRESS; /* EFI PCI I/O protocol */ typedef struct _EFI_PCI_IO_PROTOCOL { EFI_PCI_IO_PROTOCOL_POLL_IO_MEM PollMem; EFI_PCI_IO_PROTOCOL_POLL_IO_MEM PollIo; EFI_PCI_IO_PROTOCOL_ACCESS Mem; EFI_PCI_IO_PROTOCOL_ACCESS Io; EFI_PCI_IO_PROTOCOL_CONFIG_ACCESS Pci; EFI_PCI_IO_PROTOCOL_COPY_MEM CopyMem; EFI_PCI_IO_PROTOCOL_MAP Map; EFI_PCI_IO_PROTOCOL_UNMAP Unmap; EFI_PCI_IO_PROTOCOL_ALLOCATE_BUFFER AllocateBuffer; EFI_PCI_IO_PROTOCOL_FREE_BUFFER FreeBuffer; EFI_PCI_IO_PROTOCOL_FLUSH Flush; EFI_PCI_IO_PROTOCOL_GET_LOCATION GetLocation; EFI_PCI_IO_PROTOCOL_ATTRIBUTES Attributes; EFI_PCI_IO_PROTOCOL_GET_BAR_ATTRIBUTES GetBarAttributes; EFI_PCI_IO_PROTOCOL_SET_BAR_ATTRIBUTES SetBarAttributes; UINT64 RomSize; PVOID RomImage; } EFI_PCI_IO_PROTOCOL, *PEFI_PCI_IO_PROTOCOL; /* EFI PCI Root Bridge I/O protocol */ typedef struct _EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL { EFI_HANDLE ParentHandle; EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_POLL_IO_MEM PollMem; EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_POLL_IO_MEM PollIo; EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_ACCESS Mem; EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_ACCESS Io; EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_ACCESS Pci; EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_COPY_MEM CopyMem; EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_MAP Map; EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_UNMAP Unmap; EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_ALLOCATE_BUFFER AllocateBuffer; EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_FREE_BUFFER FreeBuffer; EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_FLUSH Flush; EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_GET_ATTRIBUTES GetAttributes; EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_SET_ATTRIBUTES SetAttributes; EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_CONFIGURATION Configuration; UINT32 SegmentNumber; } EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL, *PEFI_PCI_ROOT_BRIDGE_IO_PROTOCOL; #endif /* __XTDK_XTUEFI_H */