-//\r
-// This structure is used for SMM variable. the collected statistics data is saved in SMRAM. It can be got from \r
-// SMI handler. The communication buffer should be: \r
-// EFI_SMM_COMMUNICATE_HEADER + SMM_VARIABLE_COMMUNICATE_HEADER + payload.\r
-//\r
-typedef struct {\r
- UINTN Function;\r
- EFI_STATUS ReturnStatus;\r
- UINT8 Data[1];\r
-} SMM_VARIABLE_COMMUNICATE_HEADER;\r
-\r
-//\r
-// The payload for this function is SMM_VARIABLE_COMMUNICATE_ACCESS_VARIABLE.\r
-//\r
-#define SMM_VARIABLE_FUNCTION_GET_VARIABLE 1\r
-//\r
-// The payload for this function is SMM_VARIABLE_COMMUNICATE_GET_NEXT_VARIABLE_NAME.\r
-// \r
-#define SMM_VARIABLE_FUNCTION_GET_NEXT_VARIABLE_NAME 2\r
-//\r
-// The payload for this function is SMM_VARIABLE_COMMUNICATE_ACCESS_VARIABLE.\r
-// \r
-#define SMM_VARIABLE_FUNCTION_SET_VARIABLE 3\r
-//\r
-// The payload for this function is SMM_VARIABLE_COMMUNICATE_QUERY_VARIABLE_INFO.\r
-// \r
-#define SMM_VARIABLE_FUNCTION_QUERY_VARIABLE_INFO 4\r
-//\r
-// It is a notify event, no extra payload for this function.\r
-// \r
-#define SMM_VARIABLE_FUNCTION_READY_TO_BOOT 5\r
-//\r
-// It is a notify event, no extra payload for this function.\r
-// \r
-#define SMM_VARIABLE_FUNCTION_EXIT_BOOT_SERVICE 6\r
-//\r
-// The payload for this function is VARIABLE_INFO_ENTRY. The GUID in EFI_SMM_COMMUNICATE_HEADER \r
-// is gEfiSmmVariableProtocolGuid.\r
-//\r
-#define SMM_VARIABLE_FUNCTION_GET_STATISTICS 7\r
-\r
-///\r
-/// Size of SMM communicate header, without including the payload.\r
-///\r
-#define SMM_COMMUNICATE_HEADER_SIZE (OFFSET_OF (EFI_SMM_COMMUNICATE_HEADER, Data))\r
-\r
-///\r
-/// Size of SMM variable communicate header, without including the payload.\r
-///\r
-#define SMM_VARIABLE_COMMUNICATE_HEADER_SIZE (OFFSET_OF (SMM_VARIABLE_COMMUNICATE_HEADER, Data))\r
-\r
-///\r
-/// This structure is used to communicate with SMI handler by SetVariable and GetVariable.\r
-///\r
-typedef struct {\r
- EFI_GUID Guid;\r
- UINTN DataSize;\r
- UINTN NameSize;\r
- UINT32 Attributes; \r
- CHAR16 Name[1];\r
-} SMM_VARIABLE_COMMUNICATE_ACCESS_VARIABLE;\r
-\r
-///\r
-/// This structure is used to communicate with SMI handler by GetNextVariableName.\r
-///\r
-typedef struct {\r
- EFI_GUID Guid;\r
- UINTN NameSize;\r
- CHAR16 Name[1];\r
-} SMM_VARIABLE_COMMUNICATE_GET_NEXT_VARIABLE_NAME;\r
-\r
-///\r
-/// This structure is used to communicate with SMI handler by QueryVariableInfo.\r
-///\r
-typedef struct {\r
- UINT64 MaximumVariableStorageSize;\r
- UINT64 RemainingVariableStorageSize;\r
- UINT64 MaximumVariableSize;\r
- UINT32 Attributes; \r
-} SMM_VARIABLE_COMMUNICATE_QUERY_VARIABLE_INFO;\r
-\r
-///\r
-/// This structure is used to communicate with SMI handler to get variable statistics information.\r
-///\r
-typedef VARIABLE_INFO_ENTRY SMM_VARIABLE_COMMUNICATE_VARIABLE_INFO_ENTRY;\r
-\r