| // Copyright 2016 The Fuchsia Authors |
| // |
| // Use of this source code is governed by a MIT-style |
| // license that can be found in the LICENSE file or at |
| // https://opensource.org/licenses/MIT |
| |
| #ifndef ZIRCON_KERNEL_LIB_EFI_INCLUDE_EFI_RUNTIME_SERVICES_H_ |
| #define ZIRCON_KERNEL_LIB_EFI_INCLUDE_EFI_RUNTIME_SERVICES_H_ |
| |
| #include <zircon/compiler.h> |
| |
| #include <efi/boot-services.h> |
| #include <efi/types.h> |
| |
| __BEGIN_CDECLS |
| |
| #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 |
| #define EFI_VARIABLE_AUTHENTICATED_WRITE_ACCESS 0x00000010 |
| #define EFI_VARIABLE_TIME_BASED_AUTHENTICATED_WRITE_ACCESS 0x00000020 |
| #define EFI_VARIABLE_APPEND_WRITE 0x00000040 |
| |
| // TODO: implement the win_certificate structs if we need them |
| // typedef struct { |
| // uint64_t MonotonicCount; |
| // win_certificate_uefi_guid AuthInfo; |
| //} efi_variable_authentication; |
| // |
| // typedef struct { |
| // efi_time TimeStamp; |
| // win_certificate_uefi_guid AuthInfo; |
| //} efi_variable_authentication_2; |
| |
| #define EFI_HARDWARE_ERROR_VARIABLE \ |
| { \ |
| 0x414e6bdd, 0xe47b, 0x47cc, { 0xb2, 0x44, 0xbb, 0x61, 0x02, 0x0c, 0xf5, 0x16 } \ |
| } |
| |
| typedef struct { |
| 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; |
| } efi_time; |
| |
| #define EFI_TIME_ADJUST_DAYLIGHT 0x01 |
| #define EFI_TIME_IN_DAYLIGHT 0x02 |
| |
| #define EFI_UNSPECIFIED_TIMEZONE 0x07FF |
| |
| typedef struct { |
| uint32_t Resolution; |
| uint32_t Accuracy; |
| bool SetsToZero; |
| } efi_time_capabilities; |
| |
| #define EFI_OPTIONAL_PTR 0x00000001 |
| |
| typedef enum { |
| EfiResetCold, |
| EfiResetWarm, |
| EfiResetShutdown, |
| EfiResetPlatformSpecific |
| } efi_reset_type; |
| |
| typedef struct { |
| uint64_t Length; |
| union { |
| efi_physical_addr DataBlock; |
| efi_physical_addr ContinuationPointer; |
| } Union; |
| } efi_capsule_block_descriptor; |
| |
| typedef struct { |
| efi_guid CapsuleGuid; |
| uint32_t HeaderSize; |
| uint32_t Flags; |
| uint32_t CapsuleImageSize; |
| } efi_capsule_header; |
| |
| #define CAPSULE_FLAGS_PERSIST_ACROSS_RESET 0x00010000 |
| #define CAPSULE_FLAGS_POPULATE_SYSTEM_TABLE 0x00020000 |
| #define CAPSULE_FLAGS_INITIATE_RESET 0x00040000 |
| |
| #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_CAPSULE_REPORT_GUID \ |
| { \ |
| 0x39b68c46, 0xf7fb, 0x441b, { 0xb6, 0xec, 0x16, 0xb0, 0xf6, 0x98, 0x21, 0xf3 } \ |
| } |
| |
| typedef struct { |
| uint32_t VariableTotalSize; |
| uint32_t Reserved; |
| efi_guid CapsuleGuid; |
| efi_time CapsuleProcessed; |
| efi_status CapsuleStatus; |
| } efi_capsule_result_variable_header; |
| |
| typedef struct { |
| efi_table_header Hdr; |
| |
| efi_status (*GetTime)(efi_time* time, efi_time_capabilities* capabilities) EFIAPI; |
| |
| efi_status (*SetTime)(efi_time* time) EFIAPI; |
| |
| efi_status (*GetWakeupTime)(bool* enabled, bool* pending, efi_time* time) EFIAPI; |
| |
| efi_status (*SetWakeupTime)(bool enable, efi_time* time) EFIAPI; |
| |
| efi_status (*SetVirtualAddressMap)(size_t memory_map_size, size_t desc_size, |
| uint32_t desc_version, |
| efi_memory_descriptor* virtual_map) EFIAPI; |
| |
| efi_status (*ConvertPointer)(size_t debug_disposition, void** addr) EFIAPI; |
| |
| efi_status (*GetVariable)(char16_t* var_name, efi_guid* vendor_guid, uint32_t* attributes, |
| size_t* data_size, void* data) EFIAPI; |
| |
| efi_status (*GetNextVariableName)(size_t* var_name_size, char16_t* var_name, |
| efi_guid* vendor_guid) EFIAPI; |
| |
| efi_status (*SetVariable)(char16_t* var_name, efi_guid* vendor_guid, uint32_t attributes, |
| size_t data_size, const void* data) EFIAPI; |
| |
| efi_status (*GetNextHighMonotonicCount)(uint32_t* high_count) EFIAPI; |
| |
| efi_status (*ResetSystem)(efi_reset_type reset_type, efi_status reset_status, size_t data_size, |
| void* reset_data) EFIAPI; |
| |
| efi_status (*UpdateCapsule)(efi_capsule_header** capsule_header_array, size_t capsule_count, |
| efi_physical_addr scatter_gather_list) EFIAPI; |
| |
| efi_status (*QueryCapsuleCapabilities)(efi_capsule_header** capsule_header_array, |
| size_t capsule_count, uint64_t* max_capsule_size, |
| efi_reset_type* reset_type) EFIAPI; |
| |
| efi_status (*QueryVariableInfo)(uint32_t attributes, uint64_t* max_var_storage_size, |
| uint64_t* remaining_var_storage_size, |
| uint64_t* max_var_size) EFIAPI; |
| } efi_runtime_services; |
| |
| __END_CDECLS |
| |
| #endif // ZIRCON_KERNEL_LIB_EFI_INCLUDE_EFI_RUNTIME_SERVICES_H_ |