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