1d00ed85e0ab212b988458b2fe98f20cb295637adgdong/** @file
2d00ed85e0ab212b988458b2fe98f20cb295637adgdong  The file defined some common structures used for communicating between SMM variable module and SMM variable wrapper module.
3d00ed85e0ab212b988458b2fe98f20cb295637adgdong
4efb01a104d58942a27aa83643a910b6e76fb7bf8Star ZengCopyright (c) 2011 - 2015, Intel Corporation. All rights reserved.<BR>
5fa0737a839d070be2a53016a16abba29502b2510Star ZengThis program and the accompanying materials are licensed and made available under
6fa0737a839d070be2a53016a16abba29502b2510Star Zengthe terms and conditions of the BSD License that accompanies this distribution.
7d00ed85e0ab212b988458b2fe98f20cb295637adgdongThe full text of the license may be found at
8fa0737a839d070be2a53016a16abba29502b2510Star Zenghttp://opensource.org/licenses/bsd-license.php.
9d00ed85e0ab212b988458b2fe98f20cb295637adgdong
10fa0737a839d070be2a53016a16abba29502b2510Star ZengTHE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
11d00ed85e0ab212b988458b2fe98f20cb295637adgdongWITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
12d00ed85e0ab212b988458b2fe98f20cb295637adgdong
13d00ed85e0ab212b988458b2fe98f20cb295637adgdong**/
14d00ed85e0ab212b988458b2fe98f20cb295637adgdong
15d00ed85e0ab212b988458b2fe98f20cb295637adgdong#ifndef _SMM_VARIABLE_COMMON_H_
16d00ed85e0ab212b988458b2fe98f20cb295637adgdong#define _SMM_VARIABLE_COMMON_H_
17d00ed85e0ab212b988458b2fe98f20cb295637adgdong
18efb01a104d58942a27aa83643a910b6e76fb7bf8Star Zeng#include <Protocol/VarCheck.h>
19efb01a104d58942a27aa83643a910b6e76fb7bf8Star Zeng
20d00ed85e0ab212b988458b2fe98f20cb295637adgdong#define EFI_SMM_VARIABLE_WRITE_GUID \
21d00ed85e0ab212b988458b2fe98f20cb295637adgdong  { 0x93ba1826, 0xdffb, 0x45dd, { 0x82, 0xa7, 0xe7, 0xdc, 0xaa, 0x3b, 0xbd, 0xf3 } }
22d00ed85e0ab212b988458b2fe98f20cb295637adgdong
23d00ed85e0ab212b988458b2fe98f20cb295637adgdongextern EFI_GUID gSmmVariableWriteGuid;
24d00ed85e0ab212b988458b2fe98f20cb295637adgdong
25d00ed85e0ab212b988458b2fe98f20cb295637adgdong//
26fa0737a839d070be2a53016a16abba29502b2510Star Zeng// This structure is used for SMM variable. the collected statistics data is saved in SMRAM. It can be got from
27fa0737a839d070be2a53016a16abba29502b2510Star Zeng// SMI handler. The communication buffer should be:
28d00ed85e0ab212b988458b2fe98f20cb295637adgdong// EFI_SMM_COMMUNICATE_HEADER + SMM_VARIABLE_COMMUNICATE_HEADER + payload.
29d00ed85e0ab212b988458b2fe98f20cb295637adgdong//
30d00ed85e0ab212b988458b2fe98f20cb295637adgdongtypedef struct {
31d00ed85e0ab212b988458b2fe98f20cb295637adgdong  UINTN       Function;
32d00ed85e0ab212b988458b2fe98f20cb295637adgdong  EFI_STATUS  ReturnStatus;
33d00ed85e0ab212b988458b2fe98f20cb295637adgdong  UINT8       Data[1];
34d00ed85e0ab212b988458b2fe98f20cb295637adgdong} SMM_VARIABLE_COMMUNICATE_HEADER;
35d00ed85e0ab212b988458b2fe98f20cb295637adgdong
36d00ed85e0ab212b988458b2fe98f20cb295637adgdong//
37d00ed85e0ab212b988458b2fe98f20cb295637adgdong// The payload for this function is SMM_VARIABLE_COMMUNICATE_ACCESS_VARIABLE.
38d00ed85e0ab212b988458b2fe98f20cb295637adgdong//
39d00ed85e0ab212b988458b2fe98f20cb295637adgdong#define SMM_VARIABLE_FUNCTION_GET_VARIABLE            1
40d00ed85e0ab212b988458b2fe98f20cb295637adgdong//
41d00ed85e0ab212b988458b2fe98f20cb295637adgdong// The payload for this function is SMM_VARIABLE_COMMUNICATE_GET_NEXT_VARIABLE_NAME.
42fa0737a839d070be2a53016a16abba29502b2510Star Zeng//
43d00ed85e0ab212b988458b2fe98f20cb295637adgdong#define SMM_VARIABLE_FUNCTION_GET_NEXT_VARIABLE_NAME  2
44d00ed85e0ab212b988458b2fe98f20cb295637adgdong//
45d00ed85e0ab212b988458b2fe98f20cb295637adgdong// The payload for this function is SMM_VARIABLE_COMMUNICATE_ACCESS_VARIABLE.
46fa0737a839d070be2a53016a16abba29502b2510Star Zeng//
47d00ed85e0ab212b988458b2fe98f20cb295637adgdong#define SMM_VARIABLE_FUNCTION_SET_VARIABLE            3
48d00ed85e0ab212b988458b2fe98f20cb295637adgdong//
49d00ed85e0ab212b988458b2fe98f20cb295637adgdong// The payload for this function is SMM_VARIABLE_COMMUNICATE_QUERY_VARIABLE_INFO.
50fa0737a839d070be2a53016a16abba29502b2510Star Zeng//
51d00ed85e0ab212b988458b2fe98f20cb295637adgdong#define SMM_VARIABLE_FUNCTION_QUERY_VARIABLE_INFO     4
52d00ed85e0ab212b988458b2fe98f20cb295637adgdong//
53d00ed85e0ab212b988458b2fe98f20cb295637adgdong// It is a notify event, no extra payload for this function.
54fa0737a839d070be2a53016a16abba29502b2510Star Zeng//
55d00ed85e0ab212b988458b2fe98f20cb295637adgdong#define SMM_VARIABLE_FUNCTION_READY_TO_BOOT           5
56d00ed85e0ab212b988458b2fe98f20cb295637adgdong//
57d00ed85e0ab212b988458b2fe98f20cb295637adgdong// It is a notify event, no extra payload for this function.
58fa0737a839d070be2a53016a16abba29502b2510Star Zeng//
59d00ed85e0ab212b988458b2fe98f20cb295637adgdong#define SMM_VARIABLE_FUNCTION_EXIT_BOOT_SERVICE       6
60d00ed85e0ab212b988458b2fe98f20cb295637adgdong//
61fa0737a839d070be2a53016a16abba29502b2510Star Zeng// The payload for this function is VARIABLE_INFO_ENTRY. The GUID in EFI_SMM_COMMUNICATE_HEADER
62d00ed85e0ab212b988458b2fe98f20cb295637adgdong// is gEfiSmmVariableProtocolGuid.
63d00ed85e0ab212b988458b2fe98f20cb295637adgdong//
64d00ed85e0ab212b988458b2fe98f20cb295637adgdong#define SMM_VARIABLE_FUNCTION_GET_STATISTICS          7
65ff8438477f2dcea28149514de25368ac0b2c02eeniruiyu//
66ff8438477f2dcea28149514de25368ac0b2c02eeniruiyu// The payload for this function is SMM_VARIABLE_COMMUNICATE_LOCK_VARIABLE
67ff8438477f2dcea28149514de25368ac0b2c02eeniruiyu//
68ff8438477f2dcea28149514de25368ac0b2c02eeniruiyu#define SMM_VARIABLE_FUNCTION_LOCK_VARIABLE           8
69d00ed85e0ab212b988458b2fe98f20cb295637adgdong
70efb01a104d58942a27aa83643a910b6e76fb7bf8Star Zeng#define SMM_VARIABLE_FUNCTION_VAR_CHECK_VARIABLE_PROPERTY_SET  9
71efb01a104d58942a27aa83643a910b6e76fb7bf8Star Zeng
72efb01a104d58942a27aa83643a910b6e76fb7bf8Star Zeng#define SMM_VARIABLE_FUNCTION_VAR_CHECK_VARIABLE_PROPERTY_GET  10
73efb01a104d58942a27aa83643a910b6e76fb7bf8Star Zeng
74fa0737a839d070be2a53016a16abba29502b2510Star Zeng#define SMM_VARIABLE_FUNCTION_GET_PAYLOAD_SIZE        11
75fa0737a839d070be2a53016a16abba29502b2510Star Zeng
76d00ed85e0ab212b988458b2fe98f20cb295637adgdong///
77d00ed85e0ab212b988458b2fe98f20cb295637adgdong/// Size of SMM communicate header, without including the payload.
78d00ed85e0ab212b988458b2fe98f20cb295637adgdong///
79d00ed85e0ab212b988458b2fe98f20cb295637adgdong#define SMM_COMMUNICATE_HEADER_SIZE  (OFFSET_OF (EFI_SMM_COMMUNICATE_HEADER, Data))
80d00ed85e0ab212b988458b2fe98f20cb295637adgdong
81d00ed85e0ab212b988458b2fe98f20cb295637adgdong///
82d00ed85e0ab212b988458b2fe98f20cb295637adgdong/// Size of SMM variable communicate header, without including the payload.
83d00ed85e0ab212b988458b2fe98f20cb295637adgdong///
84d00ed85e0ab212b988458b2fe98f20cb295637adgdong#define SMM_VARIABLE_COMMUNICATE_HEADER_SIZE  (OFFSET_OF (SMM_VARIABLE_COMMUNICATE_HEADER, Data))
85d00ed85e0ab212b988458b2fe98f20cb295637adgdong
86d00ed85e0ab212b988458b2fe98f20cb295637adgdong///
87d00ed85e0ab212b988458b2fe98f20cb295637adgdong/// This structure is used to communicate with SMI handler by SetVariable and GetVariable.
88d00ed85e0ab212b988458b2fe98f20cb295637adgdong///
89d00ed85e0ab212b988458b2fe98f20cb295637adgdongtypedef struct {
90d00ed85e0ab212b988458b2fe98f20cb295637adgdong  EFI_GUID    Guid;
91d00ed85e0ab212b988458b2fe98f20cb295637adgdong  UINTN       DataSize;
92d00ed85e0ab212b988458b2fe98f20cb295637adgdong  UINTN       NameSize;
93fa0737a839d070be2a53016a16abba29502b2510Star Zeng  UINT32      Attributes;
94d00ed85e0ab212b988458b2fe98f20cb295637adgdong  CHAR16      Name[1];
95d00ed85e0ab212b988458b2fe98f20cb295637adgdong} SMM_VARIABLE_COMMUNICATE_ACCESS_VARIABLE;
96d00ed85e0ab212b988458b2fe98f20cb295637adgdong
97d00ed85e0ab212b988458b2fe98f20cb295637adgdong///
98d00ed85e0ab212b988458b2fe98f20cb295637adgdong/// This structure is used to communicate with SMI handler by GetNextVariableName.
99d00ed85e0ab212b988458b2fe98f20cb295637adgdong///
100d00ed85e0ab212b988458b2fe98f20cb295637adgdongtypedef struct {
101d00ed85e0ab212b988458b2fe98f20cb295637adgdong  EFI_GUID    Guid;
1020c55190f40bff9d286f51d42b0275324497f7461czhang  UINTN       NameSize;     // Return name buffer size
103d00ed85e0ab212b988458b2fe98f20cb295637adgdong  CHAR16      Name[1];
104d00ed85e0ab212b988458b2fe98f20cb295637adgdong} SMM_VARIABLE_COMMUNICATE_GET_NEXT_VARIABLE_NAME;
105d00ed85e0ab212b988458b2fe98f20cb295637adgdong
106d00ed85e0ab212b988458b2fe98f20cb295637adgdong///
107d00ed85e0ab212b988458b2fe98f20cb295637adgdong/// This structure is used to communicate with SMI handler by QueryVariableInfo.
108d00ed85e0ab212b988458b2fe98f20cb295637adgdong///
109d00ed85e0ab212b988458b2fe98f20cb295637adgdongtypedef struct {
110d00ed85e0ab212b988458b2fe98f20cb295637adgdong  UINT64          MaximumVariableStorageSize;
111d00ed85e0ab212b988458b2fe98f20cb295637adgdong  UINT64          RemainingVariableStorageSize;
112d00ed85e0ab212b988458b2fe98f20cb295637adgdong  UINT64          MaximumVariableSize;
113fa0737a839d070be2a53016a16abba29502b2510Star Zeng  UINT32          Attributes;
114d00ed85e0ab212b988458b2fe98f20cb295637adgdong} SMM_VARIABLE_COMMUNICATE_QUERY_VARIABLE_INFO;
115d00ed85e0ab212b988458b2fe98f20cb295637adgdong
116ff8438477f2dcea28149514de25368ac0b2c02eeniruiyutypedef SMM_VARIABLE_COMMUNICATE_GET_NEXT_VARIABLE_NAME SMM_VARIABLE_COMMUNICATE_LOCK_VARIABLE;
117ff8438477f2dcea28149514de25368ac0b2c02eeniruiyu
118efb01a104d58942a27aa83643a910b6e76fb7bf8Star Zengtypedef struct {
119efb01a104d58942a27aa83643a910b6e76fb7bf8Star Zeng  EFI_GUID                      Guid;
120efb01a104d58942a27aa83643a910b6e76fb7bf8Star Zeng  UINTN                         NameSize;
121efb01a104d58942a27aa83643a910b6e76fb7bf8Star Zeng  VAR_CHECK_VARIABLE_PROPERTY   VariableProperty;
122efb01a104d58942a27aa83643a910b6e76fb7bf8Star Zeng  CHAR16                        Name[1];
123efb01a104d58942a27aa83643a910b6e76fb7bf8Star Zeng} SMM_VARIABLE_COMMUNICATE_VAR_CHECK_VARIABLE_PROPERTY;
124efb01a104d58942a27aa83643a910b6e76fb7bf8Star Zeng
125fa0737a839d070be2a53016a16abba29502b2510Star Zengtypedef struct {
126fa0737a839d070be2a53016a16abba29502b2510Star Zeng  UINTN                         VariablePayloadSize;
127fa0737a839d070be2a53016a16abba29502b2510Star Zeng} SMM_VARIABLE_COMMUNICATE_GET_PAYLOAD_SIZE;
128fa0737a839d070be2a53016a16abba29502b2510Star Zeng
129fa0737a839d070be2a53016a16abba29502b2510Star Zeng#endif // _SMM_VARIABLE_COMMON_H_
130