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