]> git.proxmox.com Git - mirror_edk2.git/blame_incremental - MdeModulePkg/Include/Guid/SmmVariableCommon.h
UefiCpuPkg: Move AsmRelocateApLoopStart from Mpfuncs.nasm to AmdSev.nasm
[mirror_edk2.git] / MdeModulePkg / Include / Guid / SmmVariableCommon.h
... / ...
CommitLineData
1/** @file\r
2 The file defined some common structures used for communicating between SMM variable module and SMM variable wrapper module.\r
3\r
4Copyright (c) 2011 - 2019, Intel Corporation. All rights reserved.<BR>\r
5SPDX-License-Identifier: BSD-2-Clause-Patent\r
6\r
7**/\r
8\r
9#ifndef _SMM_VARIABLE_COMMON_H_\r
10#define _SMM_VARIABLE_COMMON_H_\r
11\r
12#include <Guid/VariableFormat.h>\r
13#include <Protocol/VarCheck.h>\r
14\r
15#define EFI_SMM_VARIABLE_WRITE_GUID \\r
16 { 0x93ba1826, 0xdffb, 0x45dd, { 0x82, 0xa7, 0xe7, 0xdc, 0xaa, 0x3b, 0xbd, 0xf3 } }\r
17\r
18extern EFI_GUID gSmmVariableWriteGuid;\r
19\r
20//\r
21// This structure is used for SMM variable. the collected statistics data is saved in SMRAM. It can be got from\r
22// SMI handler. The communication buffer should be:\r
23// EFI_MM_COMMUNICATE_HEADER + SMM_VARIABLE_COMMUNICATE_HEADER + payload.\r
24//\r
25typedef struct {\r
26 UINTN Function;\r
27 EFI_STATUS ReturnStatus;\r
28 UINT8 Data[1];\r
29} SMM_VARIABLE_COMMUNICATE_HEADER;\r
30\r
31//\r
32// The payload for this function is SMM_VARIABLE_COMMUNICATE_ACCESS_VARIABLE.\r
33//\r
34#define SMM_VARIABLE_FUNCTION_GET_VARIABLE 1\r
35//\r
36// The payload for this function is SMM_VARIABLE_COMMUNICATE_GET_NEXT_VARIABLE_NAME.\r
37//\r
38#define SMM_VARIABLE_FUNCTION_GET_NEXT_VARIABLE_NAME 2\r
39//\r
40// The payload for this function is SMM_VARIABLE_COMMUNICATE_ACCESS_VARIABLE.\r
41//\r
42#define SMM_VARIABLE_FUNCTION_SET_VARIABLE 3\r
43//\r
44// The payload for this function is SMM_VARIABLE_COMMUNICATE_QUERY_VARIABLE_INFO.\r
45//\r
46#define SMM_VARIABLE_FUNCTION_QUERY_VARIABLE_INFO 4\r
47//\r
48// It is a notify event, no extra payload for this function.\r
49//\r
50#define SMM_VARIABLE_FUNCTION_READY_TO_BOOT 5\r
51//\r
52// It is a notify event, no extra payload for this function.\r
53//\r
54#define SMM_VARIABLE_FUNCTION_EXIT_BOOT_SERVICE 6\r
55//\r
56// The payload for this function is VARIABLE_INFO_ENTRY. The GUID in EFI_MM_COMMUNICATE_HEADER\r
57// is gEfiSmmVariableProtocolGuid.\r
58//\r
59#define SMM_VARIABLE_FUNCTION_GET_STATISTICS 7\r
60//\r
61// The payload for this function is SMM_VARIABLE_COMMUNICATE_LOCK_VARIABLE\r
62//\r
63#define SMM_VARIABLE_FUNCTION_LOCK_VARIABLE 8\r
64\r
65#define SMM_VARIABLE_FUNCTION_VAR_CHECK_VARIABLE_PROPERTY_SET 9\r
66\r
67#define SMM_VARIABLE_FUNCTION_VAR_CHECK_VARIABLE_PROPERTY_GET 10\r
68\r
69#define SMM_VARIABLE_FUNCTION_GET_PAYLOAD_SIZE 11\r
70//\r
71// The payload for this function is SMM_VARIABLE_COMMUNICATE_RUNTIME_VARIABLE_CACHE_CONTEXT\r
72//\r
73#define SMM_VARIABLE_FUNCTION_INIT_RUNTIME_VARIABLE_CACHE_CONTEXT 12\r
74\r
75#define SMM_VARIABLE_FUNCTION_SYNC_RUNTIME_CACHE 13\r
76//\r
77// The payload for this function is SMM_VARIABLE_COMMUNICATE_GET_RUNTIME_CACHE_INFO\r
78//\r
79#define SMM_VARIABLE_FUNCTION_GET_RUNTIME_CACHE_INFO 14\r
80\r
81///\r
82/// Size of SMM communicate header, without including the payload.\r
83///\r
84#define SMM_COMMUNICATE_HEADER_SIZE (OFFSET_OF (EFI_MM_COMMUNICATE_HEADER, Data))\r
85\r
86///\r
87/// Size of SMM variable communicate header, without including the payload.\r
88///\r
89#define SMM_VARIABLE_COMMUNICATE_HEADER_SIZE (OFFSET_OF (SMM_VARIABLE_COMMUNICATE_HEADER, Data))\r
90\r
91///\r
92/// This structure is used to communicate with SMI handler by SetVariable and GetVariable.\r
93///\r
94typedef struct {\r
95 EFI_GUID Guid;\r
96 UINTN DataSize;\r
97 UINTN NameSize;\r
98 UINT32 Attributes;\r
99 CHAR16 Name[1];\r
100} SMM_VARIABLE_COMMUNICATE_ACCESS_VARIABLE;\r
101\r
102///\r
103/// This structure is used to communicate with SMI handler by GetNextVariableName.\r
104///\r
105typedef struct {\r
106 EFI_GUID Guid;\r
107 UINTN NameSize; // Return name buffer size\r
108 CHAR16 Name[1];\r
109} SMM_VARIABLE_COMMUNICATE_GET_NEXT_VARIABLE_NAME;\r
110\r
111///\r
112/// This structure is used to communicate with SMI handler by QueryVariableInfo.\r
113///\r
114typedef struct {\r
115 UINT64 MaximumVariableStorageSize;\r
116 UINT64 RemainingVariableStorageSize;\r
117 UINT64 MaximumVariableSize;\r
118 UINT32 Attributes;\r
119} SMM_VARIABLE_COMMUNICATE_QUERY_VARIABLE_INFO;\r
120\r
121typedef SMM_VARIABLE_COMMUNICATE_GET_NEXT_VARIABLE_NAME SMM_VARIABLE_COMMUNICATE_LOCK_VARIABLE;\r
122\r
123typedef struct {\r
124 EFI_GUID Guid;\r
125 UINTN NameSize;\r
126 VAR_CHECK_VARIABLE_PROPERTY VariableProperty;\r
127 CHAR16 Name[1];\r
128} SMM_VARIABLE_COMMUNICATE_VAR_CHECK_VARIABLE_PROPERTY;\r
129\r
130typedef struct {\r
131 UINTN VariablePayloadSize;\r
132} SMM_VARIABLE_COMMUNICATE_GET_PAYLOAD_SIZE;\r
133\r
134typedef struct {\r
135 BOOLEAN *ReadLock;\r
136 BOOLEAN *PendingUpdate;\r
137 BOOLEAN *HobFlushComplete;\r
138 VARIABLE_STORE_HEADER *RuntimeHobCache;\r
139 VARIABLE_STORE_HEADER *RuntimeNvCache;\r
140 VARIABLE_STORE_HEADER *RuntimeVolatileCache;\r
141} SMM_VARIABLE_COMMUNICATE_RUNTIME_VARIABLE_CACHE_CONTEXT;\r
142\r
143typedef struct {\r
144 UINTN TotalHobStorageSize;\r
145 UINTN TotalNvStorageSize;\r
146 UINTN TotalVolatileStorageSize;\r
147 BOOLEAN AuthenticatedVariableUsage;\r
148} SMM_VARIABLE_COMMUNICATE_GET_RUNTIME_CACHE_INFO;\r
149\r
150#endif // _SMM_VARIABLE_COMMON_H_\r