#ifndef EFI_RUNTIME_SERVICES_H #define EFI_RUNTIME_SERVICES_H #include "efi_types.h" #define EFI_RUNTIME_SERVICES_SIGNATURE 0x56524553544e5552 #define EFI_RUNTIME_SERVICES_REVISION EFI_SPECIFICATION_VERSION #define EFI_VARIABLE_NON_VOLATILE 0x00000001 #define EFI_VARIABLE_BOOTSERVICE_ACCESS 0x00000002 #define EFI_VARIABLE_RUNTIME_ACCESS 0x00000004 #define EFI_VARIABLE_HARDWARE_ERROR_RECORD 0x00000008 // NOTE: EFI_VARIABLE_AUTHENTICATED_WRITE_ACCESS is deprecated // and should be considered reserved. #define EFI_VARIABLE_AUTHENTICATED_WRITE_ACCESS 0x00000010 #define EFI_VARIABLE_TIME_BASED_AUTHENTICATED_WRITE_ACCESS 0x00000020 #define EFI_VARIABLE_APPEND_WRITE 0x00000040 #define EFI_VARIABLE_ENHANCED_AUTHENTICATED_ACCESS 0x00000080 #define EFI_VARIABLE_AUTHENTICATION_3_CERT_ID_SHA256 1 #define EFI_VARIABLE_AUTHENTICATION_3_TIMESTAMP_TYPE 1 #define EFI_VARIABLE_AUTHENTICATION_3_NONCE_TYPE 2 #define EFI_HARDWARE_ERROR_VARIABLE {0x414e6Bdd,0xe47b,0x47cc, {0xb2,0x44,0xbb,0x61,0x02,0x0c,0xf5,0x16}} #define EFI_TIME_ADJUST_DAYLIGHT 0x01 #define EFI_TIME_IN_DAYLIGHT 0x02 #define EFI_UNSPECIFIED_TIMEZONE 0x07FF #define EFI_OPTIONAL_PTR 0x00000001 #define CAPSULE_FLAGS_PERSIST_ACROSS_RESET 0x00010000 #define CAPSULE_FLAGS_POPULATE_SYSTEM_TABLE 0x00020000 #define CAPSULE_FLAGS_INITIATE_RESET 0x00040000 #define EFI_MEMORY_RANGE_CAPSULE_GUID {0xde9f0ec,0x88b6,0x428f, {0x97,0x7a,0x25,0x8f,0x1d,0xe,0x5e,0x72}} #define EFI_OS_INDICATIONS_BOOT_TO_FW_UI 0x0000000000000001 #define EFI_OS_INDICATIONS_TIMESTAMP_REVOCATION 0x0000000000000002 #define EFI_OS_INDICATIONS_FILE_CAPSULE_DELIVERY_SUPPORTED 0x0000000000000004 #define EFI_OS_INDICATIONS_FMP_CAPSULE_SUPPORTED 0x0000000000000008 #define EFI_OS_INDICATIONS_CAPSULE_RESULT_VAR_SUPPORTED 0x0000000000000010 #define EFI_OS_INDICATIONS_START_OS_RECOVERY 0x0000000000000020 #define EFI_OS_INDICATIONS_START_PLATFORM_RECOVERY 0x0000000000000040 #define EFI_OS_INDICATIONS_JSON_CONFIG_DATA_REFRESH 0x0000000000000080 #define EFI_CAPSULE_REPORT_GUID {0x39b68c46,0xf7fb,0x441b, {0xb6,0xec,0x16,0xb0,0xf6,0x98,0x21,0xf3}} #define EFI_GLOBAL_VARIABLE {0x8be4df61,0x93ca,0x11d2, {0xaa,0x0d,0x00,0xe0,0x98,0x03,0x2b,0x8c}} typedef struct _EFI_RUNTIME_SERVICES EFI_RUNTIME_SERVICES; typedef enum { EfiResetCold, EfiResetWarm, EfiResetShutdown, EfiResetPlatformSpecific } EFI_RESET_TYPE; typedef struct { EFI_UINT16 Year; EFI_UINT8 Month; EFI_UINT8 Day; EFI_UINT8 Hour; EFI_UINT8 Minute; EFI_UINT8 Second; EFI_UINT8 Pad1; EFI_UINT32 Nanosecond; EFI_INT16 TimeZone; EFI_UINT8 Daylight; EFI_UINT8 Pad2; } EFI_TIME; typedef struct { EFI_UINT32 Resolution; EFI_UINT32 Accuracy; EFI_BOOLEAN SetsToZero; } EFI_TIME_CAPABILITIES; // NOTE: EFI_VARIABLE_AUTHENTICATION is deprecated typedef struct { EFI_UINT64 MonotonicCount; //WIN_CERTIFICATE_UEFI_GUID AuthInfo; } EFI_VARIABLE_AUTHENTICATION; typedef struct { EFI_TIME TimeStamp; //WIN_CERTIFICATE_UEFI_GUID AuthInfo; } EFI_VARIABLE_AUTHENTICATION_2; typedef struct { EFI_UINT8 Version; EFI_UINT8 Type; EFI_UINT32 MetadataSize; EFI_UINT32 Flags; } EFI_VARIABLE_AUTHENTICATION_3; typedef struct { EFI_UINT8 Type; EFI_UINT32 IdSize; //EFI_UINT8 Id[IdSize]; } EFI_VARIABLE_AUTHENTICATION_3_CERT_ID; typedef struct { EFI_UINT32 NonceSize; //EFI_UINT8 Nonce[NonceSize]; } EFI_VARIABLE_AUTHENTICATION_3_NONCE; typedef struct { EFI_GUID CapsuleGuid; EFI_UINT32 HeaderSize; EFI_UINT32 Flags; EFI_UINT32 CapsuleImageSize; } EFI_CAPSULE_HEADER; typedef struct { EFI_UINT32 CapsuleArrayNumber; VOID *CapsulePtr[1]; } EFI_CAPSULE_TABLE; typedef struct { EFI_UINT64 Length; union { EFI_PHYSICAL_ADDRESS DataBlock; EFI_PHYSICAL_ADDRESS ContinuationPointer; } Union; } EFI_CAPSULE_BLOCK_DESCRIPTOR; typedef struct { EFI_PHYSICAL_ADDRESS Address; EFI_UINT64 Length; } EFI_MEMORY_RANGE; typedef struct { EFI_CAPSULE_HEADER Header; EFI_UINT32 OsRequestedMemoryType; EFI_UINT64 NumberOfMemoryRanges; EFI_MEMORY_RANGE MemoryRanges[]; } EFI_MEMORY_RANGE_CAPSULE; typedef struct { EFI_UINT64 FirmwareMemoryRequirement; EFI_UINT64 NumberOfMemoryRanges; } EFI_MEMORY_RANGE_CAPSULE_RESULT; typedef struct { EFI_UINT32 VariableTotalSize; EFI_UINT32 Reserved; EFI_GUID CapsuleGuid; EFI_TIME CapsuleProcessed; EFI_STATUS CapsuleStatus; } EFI_CAPSULE_RESULT_VARIABLE_HEADER; typedef struct { EFI_UINT16 Version; EFI_UINT8 PayloadIndex; EFI_UINT8 UpdateImageIndex; EFI_GUID UpdateImageTypeId; //CHAR16 CapsuleFileName[]; //CHAR16 CapsuleTarget[]; } EFI_CAPSULE_RESULT_VARIABLE_FMP; typedef struct { EFI_UINT32 Version; EFI_UINT32 CapsuleId; EFI_UINT32 RespLength; EFI_UINT8 Resp[]; } EFI_CAPSULE_RESULT_VARIABLE_JSON; typedef EFI_STATUS (EFIAPI *EFI_GET_TIME)( OUT EFI_TIME *Time, OUT EFI_TIME_CAPABILITIES *Capabilities OPTIONAL ); typedef EFI_STATUS (EFIAPI *EFI_SET_TIME)( IN EFI_TIME *Time ); typedef EFI_STATUS (EFIAPI *EFI_GET_WAKEUP_TIME)( OUT EFI_BOOLEAN *Enable, OUT EFI_BOOLEAN *Pending, OUT EFI_TIME *Time ); typedef EFI_STATUS (EFIAPI *EFI_SET_WAKEUP_TIME)( IN EFI_BOOLEAN Enable, IN EFI_TIME *Time ); typedef EFI_STATUS (EFIAPI *EFI_SET_VIRTUAL_ADDRESS_MAP)( IN EFI_UINTN MemoryMapSize, IN EFI_UINTN DescriptorSize, IN EFI_UINT32 DescriptorVersion, IN EFI_MEMORY_DESCRIPTOR *VirtualMap ); typedef EFI_STATUS (EFIAPI *EFI_CONVERT_POINTER)( IN EFI_UINTN DebugDisposition, IN VOID **Address ); typedef EFI_STATUS (EFIAPI *EFI_GET_VARIABLE)( IN CHAR16 *VariableName, IN EFI_GUID *VendorGuid, OUT EFI_UINT32 *Attributes OPTIONAL, IN OUT EFI_UINTN *DataSize, OUT VOID *Data OPTIONAL ); typedef EFI_STATUS (EFIAPI *EFI_GET_NEXT_VARIABLE_NAME)( IN OUT EFI_UINTN *VariableNameSize, IN OUT CHAR16 *VariableName, IN OUT EFI_GUID *VendorGuid ); typedef EFI_STATUS (EFIAPI *EFI_SET_VARIABLE)( IN CHAR16 *VariableName, IN EFI_GUID *VendorGuid, IN EFI_UINT32 Attributes, IN EFI_UINTN DataSize, IN VOID *Data ); typedef EFI_STATUS (EFIAPI *EFI_GET_NEXT_HIGH_MONOTONIC_COUNT)( OUT EFI_UINT32 *HighCount ); typedef EFI_STATUS (EFIAPI *EFI_RESET_SYSTEM)( IN EFI_RESET_TYPE ResetType, IN EFI_STATUS ResetStatus, IN EFI_UINTN DataSize, IN VOID *ResetData OPTIONAL ); typedef EFI_STATUS (EFIAPI *EFI_UPDATE_CAPSULE)( IN EFI_CAPSULE_HEADER **CapsuleHeaderArray, IN EFI_UINTN CapsuleCount, IN EFI_PHYSICAL_ADDRESS ScatterGatherList OPTIONAL ); typedef EFI_STATUS (EFIAPI *EFI_QUERY_CAPSULE_CAPABILITIES)( IN EFI_CAPSULE_HEADER **CapsuleHeaderArray, IN EFI_UINTN CapsuleCount, OUT EFI_UINT64 *MaximumCapsuleSize, OUT EFI_RESET_TYPE *ResetType ); typedef EFI_STATUS (EFIAPI *EFI_QUERY_VARIABLE_INFO)( IN EFI_UINT32 Attributes, OUT EFI_UINT64 *MaximumVariableStorageSize, OUT EFI_UINT64 *RemainingVariableStorageSize, OUT EFI_UINT64 *MaximumVariableSize ); // EFI Runtime Services typedef struct _EFI_RUNTIME_SERVICES { EFI_TABLE_HEADER Hdr; // Time Services EFI_GET_TIME GetTime; EFI_SET_TIME SetTime; EFI_GET_WAKEUP_TIME GetWakeupTime; EFI_SET_WAKEUP_TIME SetWakeupTime; // Virtual Memory Services EFI_SET_VIRTUAL_ADDRESS_MAP SetVirtualAddressMap; EFI_CONVERT_POINTER ConvertPointer; // Variable Services EFI_GET_VARIABLE GetVariable; EFI_GET_NEXT_VARIABLE_NAME GetNextVariableName; EFI_SET_VARIABLE SetVariable; // Miscellaneous Services EFI_GET_NEXT_HIGH_MONOTONIC_COUNT GetNextHighMonotonicCount; EFI_RESET_SYSTEM ResetSystem; // UEFI 2.0 Capsule Services EFI_UPDATE_CAPSULE UpdateCapsule; EFI_QUERY_CAPSULE_CAPABILITIES QueryCapsuleCapabilities; // Miscellaneous UEFI 2.0 Service EFI_QUERY_VARIABLE_INFO QueryVariableInfo; } EFI_RUNTIME_SERVICES; #endif /* EFI_RUNTIME_SERVICES_H */