]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Include/Guid/VariableFormat.h
Add SMM Variable implementation.
[mirror_edk2.git] / MdeModulePkg / Include / Guid / VariableFormat.h
index 2276262a3b9a9c4b420d155ff89c9e8c2934160b..0db3a22f34ff4b409d9cd9be5ad09237d87a15c7 100644 (file)
@@ -157,4 +157,90 @@ struct _VARIABLE_INFO_ENTRY {
   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