1/* SPDX-License-Identifier: GPL-2.0+ */ 2/* 3 * Defines data structures and APIs that allow an OS to interact with UEFI 4 * firmware to query information about the device 5 * 6 * This file refers the following TCG specification. 7 * - TCG PC Client Platform Firmware Profile Specification 8 * https://trustedcomputinggroup.org/resource/pc-client-specific-platform-firmware-profile-specification/ 9 * 10 * - TCG EFI Protocol Specification 11 * https://trustedcomputinggroup.org/resource/tcg-efi-protocol-specification/ 12 * 13 * Copyright (c) 2020, Linaro Limited 14 */ 15 16#if !defined _EFI_TCG2_PROTOCOL_H_ 17#define _EFI_TCG2_PROTOCOL_H_ 18 19#include <efi_api.h> 20#include <tpm-v2.h> 21 22/* TPMV2 only */ 23#define TCG2_EVENT_LOG_FORMAT_TCG_2 0x00000002 24#define EFI_TCG2_EXTEND_ONLY 0x0000000000000001 25#define PE_COFF_IMAGE 0x0000000000000010 26 27#define EFI_TCG2_MAX_PCR_INDEX 23 28 29/* Algorithm Registry */ 30#define EFI_TCG2_BOOT_HASH_ALG_SHA1 0x00000001 31#define EFI_TCG2_BOOT_HASH_ALG_SHA256 0x00000002 32#define EFI_TCG2_BOOT_HASH_ALG_SHA384 0x00000004 33#define EFI_TCG2_BOOT_HASH_ALG_SHA512 0x00000008 34#define EFI_TCG2_BOOT_HASH_ALG_SM3_256 0x00000010 35 36#define EFI_TCG2_FINAL_EVENTS_TABLE_VERSION 1 37 38#define TPM2_EVENT_LOG_SIZE CONFIG_EFI_TCG2_PROTOCOL_EVENTLOG_SIZE 39 40typedef u32 efi_tcg_event_log_bitmap; 41typedef u32 efi_tcg_event_log_format; 42typedef u32 efi_tcg_event_algorithm_bitmap; 43 44/** 45 * struct tdEFI_TCG2_VERSION - structure of EFI TCG2 version 46 * @major: major version 47 * @minor: minor version 48 */ 49struct efi_tcg2_version { 50 u8 major; 51 u8 minor; 52}; 53 54/** 55 * struct tdEFI_TCG2_EVENT_HEADER - structure of EFI TCG2 event header 56 * @header_size: size of the event header 57 * @header_version: header version 58 * @pcr_index: index of the PCR that is extended 59 * @event_type: type of the event that is extended 60 */ 61struct efi_tcg2_event_header { 62 u32 header_size; 63 u16 header_version; 64 u32 pcr_index; 65 u32 event_type; 66} __packed; 67 68/** 69 * struct tdEFI_TCG2_EVENT - structure of EFI TCG2 event 70 * @size: total size of the event including the size component, the header 71 * and the event data 72 * @header: event header 73 * @event: event to add 74 */ 75struct efi_tcg2_event { 76 u32 size; 77 struct efi_tcg2_event_header header; 78 u8 event[]; 79} __packed; 80 81/** 82 * struct tdUEFI_IMAGE_LOAD_EVENT - structure of PE/COFF image measurement 83 * @image_location_in_memory: image address 84 * @image_length_in_memory: image size 85 * @image_link_time_address: image link time address 86 * @length_of_device_path: devive path size 87 * @device_path: device path 88 */ 89struct uefi_image_load_event { 90 efi_physical_addr_t image_location_in_memory; 91 u64 image_length_in_memory; 92 u64 image_link_time_address; 93 u64 length_of_device_path; 94 struct efi_device_path device_path[]; 95}; 96 97/** 98 * struct tdEFI_TCG2_BOOT_SERVICE_CAPABILITY - protocol capability information 99 * @size: allocated size of the structure 100 * @structure_version: version of this structure 101 * @protocol_version: version of the EFI TCG2 protocol. 102 * @hash_algorithm_bitmap: supported hash algorithms 103 * @supported_event_logs: bitmap of supported event log formats 104 * @tpm_present_flag: false = TPM not present 105 * @max_command_size: max size (in bytes) of a command 106 * that can be sent to the TPM 107 * @max_response_size: max size (in bytes) of a response that 108 * can be provided by the TPM 109 * @manufacturer_id: 4-byte Vendor ID 110 * @number_of_pcr_banks: maximum number of PCR banks 111 * @active_pcr_banks: bitmap of currently active 112 * PCR banks (hashing algorithms). 113 */ 114struct efi_tcg2_boot_service_capability { 115 u8 size; 116 struct efi_tcg2_version structure_version; 117 struct efi_tcg2_version protocol_version; 118 efi_tcg_event_algorithm_bitmap hash_algorithm_bitmap; 119 efi_tcg_event_log_bitmap supported_event_logs; 120 u8 tpm_present_flag; 121 u16 max_command_size; 122 u16 max_response_size; 123 u32 manufacturer_id; 124 u32 number_of_pcr_banks; 125 efi_tcg_event_algorithm_bitmap active_pcr_banks; 126}; 127 128/* up to and including the vendor ID (manufacturer_id) field */ 129#define BOOT_SERVICE_CAPABILITY_MIN \ 130 offsetof(struct efi_tcg2_boot_service_capability, number_of_pcr_banks) 131 132/** 133 * struct tdEFI_TCG2_FINAL_EVENTS_TABLE - log entries after Get Event Log 134 * @version: version number for this structure 135 * @number_of_events: number of events recorded after invocation of 136 * GetEventLog() 137 * @event: List of events of type tcg_pcr_event2 138 */ 139struct efi_tcg2_final_events_table { 140 u64 version; 141 u64 number_of_events; 142 struct tcg_pcr_event2 event[]; 143}; 144 145/** 146 * struct tdUEFI_VARIABLE_DATA - event log structure of UEFI variable 147 * @variable_name: The vendorGUID parameter in the 148 * GetVariable() API. 149 * @unicode_name_length: The length in CHAR16 of the Unicode name of 150 * the variable. 151 * @variable_data_length: The size of the variable data. 152 * @unicode_name: The CHAR16 unicode name of the variable 153 * without NULL-terminator followed by data. 154 */ 155struct efi_tcg2_uefi_variable_data { 156 efi_guid_t variable_name; 157 u64 unicode_name_length; 158 u64 variable_data_length; 159 u16 unicode_name[]; 160 // u8 variable_data[]; 161}; 162 163/** 164 * struct tdUEFI_HANDOFF_TABLE_POINTERS2 - event log structure of SMBOIS tables 165 * @table_description_size: size of table description 166 * @table_description: table description 167 * @number_of_tables: number of uefi configuration table 168 * @table_entry: uefi configuration table entry 169 */ 170#define SMBIOS_HANDOFF_TABLE_DESC "SmbiosTable" 171struct smbios_handoff_table_pointers2 { 172 u8 table_description_size; 173 u8 table_description[sizeof(SMBIOS_HANDOFF_TABLE_DESC)]; 174 u64 number_of_tables; 175 struct efi_configuration_table table_entry[]; 176} __packed; 177 178/** 179 * struct tdUEFI_GPT_DATA - event log structure of industry standard tables 180 * @uefi_partition_header: gpt partition header 181 * @number_of_partitions: the number of partition 182 * @partitions: partition entries 183 */ 184struct efi_gpt_data { 185 gpt_header uefi_partition_header; 186 u64 number_of_partitions; 187 gpt_entry partitions[]; 188} __packed; 189 190/** 191 * struct tdUEFI_PLATFORM_FIRMWARE_BLOB2 192 * @blob_description_size: Byte size of @data 193 * @data: Description data 194 */ 195struct uefi_platform_firmware_blob2 { 196 u8 blob_description_size; 197 u8 data[]; 198} __packed; 199 200struct efi_tcg2_protocol { 201 efi_status_t (EFIAPI * get_capability)(struct efi_tcg2_protocol *this, 202 struct efi_tcg2_boot_service_capability *capability); 203 efi_status_t (EFIAPI * get_eventlog)(struct efi_tcg2_protocol *this, 204 efi_tcg_event_log_format log_format, 205 u64 *event_log_location, u64 *event_log_last_entry, 206 bool *event_log_truncated); 207 efi_status_t (EFIAPI * hash_log_extend_event)(struct efi_tcg2_protocol *this, 208 u64 flags, 209 efi_physical_addr_t data_to_hash, 210 u64 data_to_hash_len, 211 struct efi_tcg2_event *efi_tcg_event); 212 efi_status_t (EFIAPI * submit_command)(struct efi_tcg2_protocol *this, 213 u32 input_parameter_block_size, 214 u8 *input_parameter_block, 215 u32 output_parameter_block_size, 216 u8 *output_parameter_block); 217 efi_status_t (EFIAPI * get_active_pcr_banks)(struct efi_tcg2_protocol *this, 218 u32 *active_pcr_banks); 219 efi_status_t (EFIAPI * set_active_pcr_banks)(struct efi_tcg2_protocol *this, 220 u32 active_pcr_banks); 221 efi_status_t (EFIAPI * get_result_of_set_active_pcr_banks)(struct efi_tcg2_protocol *this, 222 u32 *operation_present, 223 u32 *response); 224}; 225#endif 226