blob: 61088244439f06c909977e3edc88f90a36a5a6ea [file] [log] [blame]
Julian Hall29f87ec2021-10-13 11:43:30 +01001/*
Julian Hall29620bf2022-06-09 10:26:37 +01002 * Copyright (c) 2021-2023, Arm Limited and Contributors. All rights reserved.
Julian Hall29f87ec2021-10-13 11:43:30 +01003 *
4 * SPDX-License-Identifier: BSD-3-Clause
5 */
6
7#ifndef TS_SMM_VARIABLE_PARAMETERS_H
8#define TS_SMM_VARIABLE_PARAMETERS_H
9
Gabor Toth75951632023-09-06 09:17:28 +020010#include <stddef.h>
11
Imre Kis05f79362021-10-27 20:01:41 +020012#include "protocols/common/efi/efi_status.h"
13#include "protocols/common/efi/efi_types.h"
Julian Hall29620bf2022-06-09 10:26:37 +010014#include "protocols/common/efi/efi_certificate.h"
15#include <protocols/common/efi/efi_global_variable.h>
16#include <protocols/common/efi/efi_image_authentication.h>
Julian Hall29f87ec2021-10-13 11:43:30 +010017
18/**
19 * C/C++ definition of smm_variable service parameters
20 *
21 * These defines are aligned to the SMM Variable definitions from EDK2. These versions
22 * of these defines are maintained in the TS project to avoid a mandatory dependency
23 * on the EDK2 project.
24 */
25
26/**
Imre Kis05f79362021-10-27 20:01:41 +020027 * SMM variable call header
28 */
29typedef struct {
30 uint64_t Function;
31 efi_status_t ReturnStatus;
32 uint8_t Data[1];
33} SMM_VARIABLE_COMMUNICATE_HEADER;
34
35#define SMM_VARIABLE_COMMUNICATE_HEADER_SIZE \
36 offsetof(SMM_VARIABLE_COMMUNICATE_HEADER, Data)
37
38/**
Julian Hall29f87ec2021-10-13 11:43:30 +010039 * Variable attributes
40 */
Julian Hall29620bf2022-06-09 10:26:37 +010041#define EFI_VARIABLE_NON_VOLATILE (0x00000001)
42#define EFI_VARIABLE_BOOTSERVICE_ACCESS (0x00000002)
43#define EFI_VARIABLE_RUNTIME_ACCESS (0x00000004)
44#define EFI_VARIABLE_HARDWARE_ERROR_RECORD (0x00000008)
45#define EFI_VARIABLE_AUTHENTICATED_WRITE_ACCESS (0x00000010)
Julian Hall29f87ec2021-10-13 11:43:30 +010046#define EFI_VARIABLE_TIME_BASED_AUTHENTICATED_WRITE_ACCESS (0x00000020)
Julian Hall29620bf2022-06-09 10:26:37 +010047#define EFI_VARIABLE_APPEND_WRITE (0x00000040)
48#define EFI_VARIABLE_ENHANCED_AUTHENTICATED_ACCESS (0x00000080)
49
Julian Hall29f87ec2021-10-13 11:43:30 +010050#define EFI_VARIABLE_MASK \
51 (EFI_VARIABLE_NON_VOLATILE | \
52 EFI_VARIABLE_BOOTSERVICE_ACCESS | \
53 EFI_VARIABLE_RUNTIME_ACCESS | \
54 EFI_VARIABLE_HARDWARE_ERROR_RECORD | \
55 EFI_VARIABLE_AUTHENTICATED_WRITE_ACCESS | \
Julian Hall29620bf2022-06-09 10:26:37 +010056 EFI_VARIABLE_TIME_BASED_AUTHENTICATED_WRITE_ACCESS | \
57 EFI_VARIABLE_APPEND_WRITE | \
58 EFI_VARIABLE_ENHANCED_AUTHENTICATED_ACCESS)
Julian Hall29f87ec2021-10-13 11:43:30 +010059
60/**
61 * Parameter structure for SetVariable and GetVariable.
62 */
63typedef struct {
64 EFI_GUID Guid;
65 uint64_t DataSize;
66 uint64_t NameSize;
67 uint32_t Attributes;
68 int16_t Name[1];
69} SMM_VARIABLE_COMMUNICATE_ACCESS_VARIABLE;
70
71#define SMM_VARIABLE_COMMUNICATE_ACCESS_VARIABLE_NAME_OFFSET \
72 offsetof(SMM_VARIABLE_COMMUNICATE_ACCESS_VARIABLE, Name)
73
74#define SMM_VARIABLE_COMMUNICATE_ACCESS_VARIABLE_DATA_OFFSET(s) \
75 (offsetof(SMM_VARIABLE_COMMUNICATE_ACCESS_VARIABLE, Name) + s->NameSize)
76
77#define SMM_VARIABLE_COMMUNICATE_ACCESS_VARIABLE_TOTAL_SIZE(s) \
78 (offsetof(SMM_VARIABLE_COMMUNICATE_ACCESS_VARIABLE, Name) + s->NameSize + s->DataSize)
79
80#define SMM_VARIABLE_COMMUNICATE_ACCESS_VARIABLE_SIZE(name_size, data_size) \
81 (offsetof(SMM_VARIABLE_COMMUNICATE_ACCESS_VARIABLE, Name) + name_size + data_size)
82
83/**
84 * Parameter structure for GetNextVariableName.
85 */
86typedef struct {
87 EFI_GUID Guid;
88 uint64_t NameSize;
89 int16_t Name[1];
90} SMM_VARIABLE_COMMUNICATE_GET_NEXT_VARIABLE_NAME;
91
92#define SMM_VARIABLE_COMMUNICATE_GET_NEXT_VARIABLE_NAME_NAME_OFFSET \
93 offsetof(SMM_VARIABLE_COMMUNICATE_GET_NEXT_VARIABLE_NAME, Name)
94
95#define SMM_VARIABLE_COMMUNICATE_GET_NEXT_VARIABLE_NAME_TOTAL_SIZE(s) \
96 (offsetof(SMM_VARIABLE_COMMUNICATE_GET_NEXT_VARIABLE_NAME, Name) + s->NameSize)
97
98#define SMM_VARIABLE_COMMUNICATE_GET_NEXT_VARIABLE_NAME_SIZE(name_size) \
99 (offsetof(SMM_VARIABLE_COMMUNICATE_GET_NEXT_VARIABLE_NAME, Name) + name_size)
100
101/**
102 * Parameter structure for QueryVariableInfo.
103 */
104typedef struct {
105 uint64_t MaximumVariableStorageSize;
106 uint64_t RemainingVariableStorageSize;
107 uint64_t MaximumVariableSize;
108 uint32_t Attributes;
109} SMM_VARIABLE_COMMUNICATE_QUERY_VARIABLE_INFO;
110
Julian Hall0a86f762021-11-08 13:31:23 +0000111/**
112 * Variable check property structure. Specifies check constraints
113 * for a variable.
114 */
115typedef struct {
116 uint16_t Revision;
117 uint16_t Property;
118 uint32_t Attributes;
119 uint64_t MinSize;
120 uint64_t MaxSize;
121} VAR_CHECK_VARIABLE_PROPERTY;
122
123#define VAR_CHECK_VARIABLE_PROPERTY_READ_ONLY (1U << 0)
124
125/* Supported check property revision */
126#define VAR_CHECK_VARIABLE_PROPERTY_REVISION (0x0001)
127
128/**
129 * Parameter structure for VarCheckVariableProperty Set/Get
130 */
131typedef struct {
132 EFI_GUID Guid;
133 uint64_t NameSize;
134 VAR_CHECK_VARIABLE_PROPERTY VariableProperty;
135 int16_t Name[1];
136} SMM_VARIABLE_COMMUNICATE_VAR_CHECK_VARIABLE_PROPERTY;
137
138#define SMM_VARIABLE_COMMUNICATE_VAR_CHECK_VARIABLE_PROPERTY_NAME_OFFSET \
139 offsetof(SMM_VARIABLE_COMMUNICATE_VAR_CHECK_VARIABLE_PROPERTY, Name)
140
141#define SMM_VARIABLE_COMMUNICATE_VAR_CHECK_VARIABLE_PROPERTY_TOTAL_SIZE(s) \
142 (offsetof(SMM_VARIABLE_COMMUNICATE_VAR_CHECK_VARIABLE_PROPERTY, Name) + s->NameSize)
143
144#define SMM_VARIABLE_COMMUNICATE_VAR_CHECK_VARIABLE_PROPERTY_SIZE(name_size) \
145 (offsetof(SMM_VARIABLE_COMMUNICATE_VAR_CHECK_VARIABLE_PROPERTY, Name) + name_size)
146
147/**
148 * Parameter structure for GetPayloadSize.
149 */
150typedef struct {
151 uint64_t VariablePayloadSize;
152} SMM_VARIABLE_COMMUNICATE_GET_PAYLOAD_SIZE;
153
Julian Hall29620bf2022-06-09 10:26:37 +0100154/**
155 * Authentication header included at the start of variable data for SetVariable operations
156 * when the EFI_VARIABLE_TIME_BASED_AUTHENTICATED_WRITE_ACCESS attribute is set.
157 */
158typedef struct {
159 EFI_TIME TimeStamp;
160 WIN_CERTIFICATE_UEFI_GUID AuthInfo;
161} EFI_VARIABLE_AUTHENTICATION_2;
Julian Hall29f87ec2021-10-13 11:43:30 +0100162
Gabor Toth073f9b62024-01-25 15:30:16 +0100163#define EFI_VARIABLE_AUTHENTICATION_2_SIZE_WITHOUT_CERTDATA \
164 offsetof(EFI_VARIABLE_AUTHENTICATION_2, AuthInfo.CertData)
165
Julian Hall29f87ec2021-10-13 11:43:30 +0100166#endif /* TS_SMM_VARIABLE_PARAMETERS_H */