You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
qemu/include/hw/uefi/var-service-edk2.h

228 lines
6.5 KiB
C

/*
* SPDX-License-Identifier: GPL-2.0-or-later
*
* uefi-vars device - structs and defines from edk2
*
* Note: The edk2 UINTN type has been mapped to uint64_t,
* so the structs are compatible with 64bit edk2 builds.
*/
#ifndef QEMU_UEFI_VAR_SERVICE_EDK2_H
#define QEMU_UEFI_VAR_SERVICE_EDK2_H
#include "qemu/uuid.h"
#define MAX_BIT 0x8000000000000000ULL
#define ENCODE_ERROR(StatusCode) (MAX_BIT | (StatusCode))
#define EFI_SUCCESS 0
#define EFI_INVALID_PARAMETER ENCODE_ERROR(2)
#define EFI_UNSUPPORTED ENCODE_ERROR(3)
#define EFI_BAD_BUFFER_SIZE ENCODE_ERROR(4)
#define EFI_BUFFER_TOO_SMALL ENCODE_ERROR(5)
#define EFI_WRITE_PROTECTED ENCODE_ERROR(8)
#define EFI_OUT_OF_RESOURCES ENCODE_ERROR(9)
#define EFI_NOT_FOUND ENCODE_ERROR(14)
#define EFI_ACCESS_DENIED ENCODE_ERROR(15)
#define EFI_ALREADY_STARTED ENCODE_ERROR(20)
#define EFI_SECURITY_VIOLATION ENCODE_ERROR(26)
#define EFI_VARIABLE_NON_VOLATILE 0x01
#define EFI_VARIABLE_BOOTSERVICE_ACCESS 0x02
#define EFI_VARIABLE_RUNTIME_ACCESS 0x04
#define EFI_VARIABLE_HARDWARE_ERROR_RECORD 0x08
#define EFI_VARIABLE_AUTHENTICATED_WRITE_ACCESS 0x10 /* deprecated */
#define EFI_VARIABLE_TIME_BASED_AUTHENTICATED_WRITE_ACCESS 0x20
#define EFI_VARIABLE_APPEND_WRITE 0x40
/* SecureBootEnable */
#define SECURE_BOOT_ENABLE 1
#define SECURE_BOOT_DISABLE 0
/* SecureBoot */
#define SECURE_BOOT_MODE_ENABLE 1
#define SECURE_BOOT_MODE_DISABLE 0
/* CustomMode */
#define CUSTOM_SECURE_BOOT_MODE 1
#define STANDARD_SECURE_BOOT_MODE 0
/* SetupMode */
#define SETUP_MODE 1
#define USER_MODE 0
typedef uint64_t efi_status;
typedef struct mm_header mm_header;
/* EFI_MM_COMMUNICATE_HEADER */
struct mm_header {
QemuUUID guid;
uint64_t length;
};
/* --- EfiSmmVariableProtocol ---------------------------------------- */
#define SMM_VARIABLE_FUNCTION_GET_VARIABLE 1
#define SMM_VARIABLE_FUNCTION_GET_NEXT_VARIABLE_NAME 2
#define SMM_VARIABLE_FUNCTION_SET_VARIABLE 3
#define SMM_VARIABLE_FUNCTION_QUERY_VARIABLE_INFO 4
#define SMM_VARIABLE_FUNCTION_READY_TO_BOOT 5
#define SMM_VARIABLE_FUNCTION_EXIT_BOOT_SERVICE 6
#define SMM_VARIABLE_FUNCTION_LOCK_VARIABLE 8
#define SMM_VARIABLE_FUNCTION_GET_PAYLOAD_SIZE 11
typedef struct mm_variable mm_variable;
typedef struct mm_variable_access mm_variable_access;
typedef struct mm_next_variable mm_next_variable;
typedef struct mm_next_variable mm_lock_variable;
typedef struct mm_variable_info mm_variable_info;
typedef struct mm_get_payload_size mm_get_payload_size;
/* SMM_VARIABLE_COMMUNICATE_HEADER */
struct mm_variable {
uint64_t function;
uint64_t status;
};
/* SMM_VARIABLE_COMMUNICATE_ACCESS_VARIABLE */
struct QEMU_PACKED mm_variable_access {
QemuUUID guid;
uint64_t data_size;
uint64_t name_size;
uint32_t attributes;
/* Name */
/* Data */
};
/* SMM_VARIABLE_COMMUNICATE_GET_NEXT_VARIABLE_NAME */
struct mm_next_variable {
QemuUUID guid;
uint64_t name_size;
/* Name */
};
/* SMM_VARIABLE_COMMUNICATE_QUERY_VARIABLE_INFO */
struct QEMU_PACKED mm_variable_info {
uint64_t max_storage_size;
uint64_t free_storage_size;
uint64_t max_variable_size;
uint32_t attributes;
};
/* SMM_VARIABLE_COMMUNICATE_GET_PAYLOAD_SIZE */
struct mm_get_payload_size {
uint64_t payload_size;
};
/* --- VarCheckPolicyLibMmiHandler ----------------------------------- */
#define VAR_CHECK_POLICY_COMMAND_DISABLE 0x01
#define VAR_CHECK_POLICY_COMMAND_IS_ENABLED 0x02
#define VAR_CHECK_POLICY_COMMAND_REGISTER 0x03
#define VAR_CHECK_POLICY_COMMAND_DUMP 0x04
#define VAR_CHECK_POLICY_COMMAND_LOCK 0x05
typedef struct mm_check_policy mm_check_policy;
typedef struct mm_check_policy_is_enabled mm_check_policy_is_enabled;
typedef struct mm_check_policy_dump_params mm_check_policy_dump_params;
/* VAR_CHECK_POLICY_COMM_HEADER */
struct QEMU_PACKED mm_check_policy {
uint32_t signature;
uint32_t revision;
uint32_t command;
uint64_t result;
};
/* VAR_CHECK_POLICY_COMM_IS_ENABLED_PARAMS */
struct QEMU_PACKED mm_check_policy_is_enabled {
uint8_t state;
};
/* VAR_CHECK_POLICY_COMM_DUMP_PARAMS */
struct QEMU_PACKED mm_check_policy_dump_params {
uint32_t page_requested;
uint32_t total_size;
uint32_t page_size;
uint8_t has_more;
};
/* --- Edk2VariablePolicyProtocol ------------------------------------ */
#define VARIABLE_POLICY_ENTRY_REVISION 0x00010000
#define VARIABLE_POLICY_TYPE_NO_LOCK 0
#define VARIABLE_POLICY_TYPE_LOCK_NOW 1
#define VARIABLE_POLICY_TYPE_LOCK_ON_CREATE 2
#define VARIABLE_POLICY_TYPE_LOCK_ON_VAR_STATE 3
typedef struct variable_policy_entry variable_policy_entry;
typedef struct variable_lock_on_var_state variable_lock_on_var_state;
/* VARIABLE_POLICY_ENTRY */
struct variable_policy_entry {
uint32_t version;
uint16_t size;
uint16_t offset_to_name;
QemuUUID namespace;
uint32_t min_size;
uint32_t max_size;
uint32_t attributes_must_have;
uint32_t attributes_cant_have;
uint8_t lock_policy_type;
uint8_t padding[3];
/* LockPolicy */
/* Name */
};
/* VARIABLE_LOCK_ON_VAR_STATE_POLICY */
struct variable_lock_on_var_state {
QemuUUID namespace;
uint8_t value;
uint8_t padding;
/* Name */
};
/* --- variable authentication --------------------------------------- */
#define WIN_CERT_TYPE_EFI_GUID 0x0EF1
typedef struct efi_time efi_time;
typedef struct efi_siglist efi_siglist;
typedef struct variable_auth_2 variable_auth_2;
/* EFI_TIME */
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;
};
/* EFI_SIGNATURE_LIST */
struct efi_siglist {
QemuUUID guid_type;
uint32_t siglist_size;
uint32_t header_size;
uint32_t sig_size;
};
/* EFI_VARIABLE_AUTHENTICATION_2 */
struct variable_auth_2 {
struct efi_time timestamp;
/* WIN_CERTIFICATE_UEFI_GUID */
uint32_t hdr_length;
uint16_t hdr_revision;
uint16_t hdr_cert_type;
QemuUUID guid_cert_type;
uint8_t cert_data[];
};
#endif /* QEMU_UEFI_VAR_SERVICE_EDK2_H */