BOOLEAN Volatile; ///< TRUE if volatile, FALSE if non-volatile.\r
};\r
\r
+//\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
#endif // _EFI_VARIABLE_H_\r