blob: 233f301b48e2e52d032ca130debe2fb3fb68db5c [file] [log] [blame]
Julian Hall29f87ec2021-10-13 11:43:30 +01001/*
2 * Copyright (c) 2021, Arm Limited and Contributors. All rights reserved.
3 *
4 * SPDX-License-Identifier: BSD-3-Clause
5 */
6
7#ifndef TS_SMM_VARIABLE_PARAMETERS_H
8#define TS_SMM_VARIABLE_PARAMETERS_H
9
Imre Kis05f79362021-10-27 20:01:41 +020010#include "protocols/common/efi/efi_status.h"
11#include "protocols/common/efi/efi_types.h"
Julian Hall29f87ec2021-10-13 11:43:30 +010012
13/**
14 * C/C++ definition of smm_variable service parameters
15 *
16 * These defines are aligned to the SMM Variable definitions from EDK2. These versions
17 * of these defines are maintained in the TS project to avoid a mandatory dependency
18 * on the EDK2 project.
19 */
20
21/**
Imre Kis05f79362021-10-27 20:01:41 +020022 * SMM variable call header
23 */
24typedef struct {
25 uint64_t Function;
26 efi_status_t ReturnStatus;
27 uint8_t Data[1];
28} SMM_VARIABLE_COMMUNICATE_HEADER;
29
30#define SMM_VARIABLE_COMMUNICATE_HEADER_SIZE \
31 offsetof(SMM_VARIABLE_COMMUNICATE_HEADER, Data)
32
33/**
Julian Hall29f87ec2021-10-13 11:43:30 +010034 * Variable attributes
35 */
36#define EFI_VARIABLE_NON_VOLATILE (0x00000001)
37#define EFI_VARIABLE_BOOTSERVICE_ACCESS (0x00000002)
38#define EFI_VARIABLE_RUNTIME_ACCESS (0x00000004)
39#define EFI_VARIABLE_HARDWARE_ERROR_RECORD (0x00000008)
40#define EFI_VARIABLE_AUTHENTICATED_WRITE_ACCESS (0x00000010)
41#define EFI_VARIABLE_TIME_BASED_AUTHENTICATED_WRITE_ACCESS (0x00000020)
42#define EFI_VARIABLE_APPEND_WRITE (0x00000040)
43#define EFI_VARIABLE_MASK \
44 (EFI_VARIABLE_NON_VOLATILE | \
45 EFI_VARIABLE_BOOTSERVICE_ACCESS | \
46 EFI_VARIABLE_RUNTIME_ACCESS | \
47 EFI_VARIABLE_HARDWARE_ERROR_RECORD | \
48 EFI_VARIABLE_AUTHENTICATED_WRITE_ACCESS | \
49 EFI_VARIABLE_APPEND_WRITE)
Julian Hall4b8dd0a2021-12-02 10:15:54 +000050#define EFI_VARIABLE_AUTHENTICATED_WRITE_ACCESS_MASK \
51 (EFI_VARIABLE_AUTHENTICATED_WRITE_ACCESS | \
52 EFI_VARIABLE_TIME_BASED_AUTHENTICATED_WRITE_ACCESS)
Julian Hall29f87ec2021-10-13 11:43:30 +010053
54/**
55 * Parameter structure for SetVariable and GetVariable.
56 */
57typedef struct {
58 EFI_GUID Guid;
59 uint64_t DataSize;
60 uint64_t NameSize;
61 uint32_t Attributes;
62 int16_t Name[1];
63} SMM_VARIABLE_COMMUNICATE_ACCESS_VARIABLE;
64
65#define SMM_VARIABLE_COMMUNICATE_ACCESS_VARIABLE_NAME_OFFSET \
66 offsetof(SMM_VARIABLE_COMMUNICATE_ACCESS_VARIABLE, Name)
67
68#define SMM_VARIABLE_COMMUNICATE_ACCESS_VARIABLE_DATA_OFFSET(s) \
69 (offsetof(SMM_VARIABLE_COMMUNICATE_ACCESS_VARIABLE, Name) + s->NameSize)
70
71#define SMM_VARIABLE_COMMUNICATE_ACCESS_VARIABLE_TOTAL_SIZE(s) \
72 (offsetof(SMM_VARIABLE_COMMUNICATE_ACCESS_VARIABLE, Name) + s->NameSize + s->DataSize)
73
74#define SMM_VARIABLE_COMMUNICATE_ACCESS_VARIABLE_SIZE(name_size, data_size) \
75 (offsetof(SMM_VARIABLE_COMMUNICATE_ACCESS_VARIABLE, Name) + name_size + data_size)
76
77/**
78 * Parameter structure for GetNextVariableName.
79 */
80typedef struct {
81 EFI_GUID Guid;
82 uint64_t NameSize;
83 int16_t Name[1];
84} SMM_VARIABLE_COMMUNICATE_GET_NEXT_VARIABLE_NAME;
85
86#define SMM_VARIABLE_COMMUNICATE_GET_NEXT_VARIABLE_NAME_NAME_OFFSET \
87 offsetof(SMM_VARIABLE_COMMUNICATE_GET_NEXT_VARIABLE_NAME, Name)
88
89#define SMM_VARIABLE_COMMUNICATE_GET_NEXT_VARIABLE_NAME_TOTAL_SIZE(s) \
90 (offsetof(SMM_VARIABLE_COMMUNICATE_GET_NEXT_VARIABLE_NAME, Name) + s->NameSize)
91
92#define SMM_VARIABLE_COMMUNICATE_GET_NEXT_VARIABLE_NAME_SIZE(name_size) \
93 (offsetof(SMM_VARIABLE_COMMUNICATE_GET_NEXT_VARIABLE_NAME, Name) + name_size)
94
95/**
96 * Parameter structure for QueryVariableInfo.
97 */
98typedef struct {
99 uint64_t MaximumVariableStorageSize;
100 uint64_t RemainingVariableStorageSize;
101 uint64_t MaximumVariableSize;
102 uint32_t Attributes;
103} SMM_VARIABLE_COMMUNICATE_QUERY_VARIABLE_INFO;
104
Julian Hall0a86f762021-11-08 13:31:23 +0000105/**
106 * Variable check property structure. Specifies check constraints
107 * for a variable.
108 */
109typedef struct {
110 uint16_t Revision;
111 uint16_t Property;
112 uint32_t Attributes;
113 uint64_t MinSize;
114 uint64_t MaxSize;
115} VAR_CHECK_VARIABLE_PROPERTY;
116
117#define VAR_CHECK_VARIABLE_PROPERTY_READ_ONLY (1U << 0)
118
119/* Supported check property revision */
120#define VAR_CHECK_VARIABLE_PROPERTY_REVISION (0x0001)
121
122/**
123 * Parameter structure for VarCheckVariableProperty Set/Get
124 */
125typedef struct {
126 EFI_GUID Guid;
127 uint64_t NameSize;
128 VAR_CHECK_VARIABLE_PROPERTY VariableProperty;
129 int16_t Name[1];
130} SMM_VARIABLE_COMMUNICATE_VAR_CHECK_VARIABLE_PROPERTY;
131
132#define SMM_VARIABLE_COMMUNICATE_VAR_CHECK_VARIABLE_PROPERTY_NAME_OFFSET \
133 offsetof(SMM_VARIABLE_COMMUNICATE_VAR_CHECK_VARIABLE_PROPERTY, Name)
134
135#define SMM_VARIABLE_COMMUNICATE_VAR_CHECK_VARIABLE_PROPERTY_TOTAL_SIZE(s) \
136 (offsetof(SMM_VARIABLE_COMMUNICATE_VAR_CHECK_VARIABLE_PROPERTY, Name) + s->NameSize)
137
138#define SMM_VARIABLE_COMMUNICATE_VAR_CHECK_VARIABLE_PROPERTY_SIZE(name_size) \
139 (offsetof(SMM_VARIABLE_COMMUNICATE_VAR_CHECK_VARIABLE_PROPERTY, Name) + name_size)
140
141/**
142 * Parameter structure for GetPayloadSize.
143 */
144typedef struct {
145 uint64_t VariablePayloadSize;
146} SMM_VARIABLE_COMMUNICATE_GET_PAYLOAD_SIZE;
147
Julian Hall29f87ec2021-10-13 11:43:30 +0100148
149#endif /* TS_SMM_VARIABLE_PARAMETERS_H */