]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Include/Guid/MemoryProfile.h
IntelSiliconPkg: Clean up source files
[mirror_edk2.git] / MdeModulePkg / Include / Guid / MemoryProfile.h
index 3c1e5e79cafd202ffc2d11175b32b168b67d894e..777f950db79a88b94b207981c48c3d57f4467d12 100644 (file)
@@ -1,7 +1,7 @@
 /** @file\r
   Memory profile data structure.\r
 \r
-  Copyright (c) 2014, Intel Corporation. All rights reserved.<BR>\r
+  Copyright (c) 2014 - 2016, Intel Corporation. All rights reserved.<BR>\r
   This program and the accompanying materials\r
   are licensed and made available under the terms and conditions of the BSD License\r
   which accompanies this distribution.  The full text of the license may be found at\r
 #ifndef _MEMORY_PROFILE_H_\r
 #define _MEMORY_PROFILE_H_\r
 \r
+#include <Pi/PiFirmwareFile.h>\r
+\r
 //\r
-// For BIOS MemoryType (0 ~ EfiMaxMemoryType), it is recorded in UsageByType[MemoryType]. (Each valid entry has one entry)\r
+// For BIOS MemoryType (0 ~ EfiMaxMemoryType - 1), it is recorded in UsageByType[MemoryType]. (Each valid entry has one entry)\r
 // For OS MemoryType (0x80000000 ~ 0xFFFFFFFF), it is recorded in UsageByType[EfiMaxMemoryType]. (All types are combined into one entry)\r
+// For OEM MemoryType (0x70000000 ~ 0x7FFFFFFF), it is recorded in UsageByType[EfiMaxMemoryType + 1]. (All types are combined into one entry)\r
 //\r
 \r
 typedef struct {\r
@@ -27,21 +30,21 @@ typedef struct {
 } MEMORY_PROFILE_COMMON_HEADER;\r
 \r
 #define MEMORY_PROFILE_CONTEXT_SIGNATURE SIGNATURE_32 ('M','P','C','T')\r
-#define MEMORY_PROFILE_CONTEXT_REVISION 0x0001\r
+#define MEMORY_PROFILE_CONTEXT_REVISION 0x0002\r
 \r
 typedef struct {\r
   MEMORY_PROFILE_COMMON_HEADER  Header;\r
   UINT64                        CurrentTotalUsage;\r
   UINT64                        PeakTotalUsage;\r
-  UINT64                        CurrentTotalUsageByType[EfiMaxMemoryType + 1];\r
-  UINT64                        PeakTotalUsageByType[EfiMaxMemoryType + 1];\r
+  UINT64                        CurrentTotalUsageByType[EfiMaxMemoryType + 2];\r
+  UINT64                        PeakTotalUsageByType[EfiMaxMemoryType + 2];\r
   UINT64                        TotalImageSize;\r
   UINT32                        ImageCount;\r
   UINT32                        SequenceCount;\r
 } MEMORY_PROFILE_CONTEXT;\r
 \r
 #define MEMORY_PROFILE_DRIVER_INFO_SIGNATURE SIGNATURE_32 ('M','P','D','I')\r
-#define MEMORY_PROFILE_DRIVER_INFO_REVISION 0x0001\r
+#define MEMORY_PROFILE_DRIVER_INFO_REVISION 0x0003\r
 \r
 typedef struct {\r
   MEMORY_PROFILE_COMMON_HEADER  Header;\r
@@ -55,8 +58,11 @@ typedef struct {
   UINT32                        AllocRecordCount;\r
   UINT64                        CurrentUsage;\r
   UINT64                        PeakUsage;\r
-  UINT64                        CurrentUsageByType[EfiMaxMemoryType + 1];\r
-  UINT64                        PeakUsageByType[EfiMaxMemoryType + 1];\r
+  UINT64                        CurrentUsageByType[EfiMaxMemoryType + 2];\r
+  UINT64                        PeakUsageByType[EfiMaxMemoryType + 2];\r
+  UINT16                        PdbStringOffset;\r
+  UINT8                         Reserved2[6];\r
+//CHAR8                         PdbString[];\r
 } MEMORY_PROFILE_DRIVER_INFO;\r
 \r
 typedef enum {\r
@@ -66,18 +72,87 @@ typedef enum {
   MemoryProfileActionFreePool = 4,\r
 } MEMORY_PROFILE_ACTION;\r
 \r
+//\r
+// Below is the detailed MEMORY_PROFILE_ACTION definition.\r
+//\r
+//  31       15      9  8  8 7  7 6   6 5-4  3 - 0\r
+// +----------------------------------------------+\r
+// |User |  |Lib|   |Re|Copy|Zero|Align|Type|Basic|\r
+// +----------------------------------------------+\r
+//\r
+\r
+//\r
+// Basic Action\r
+//      1 : AllocatePages\r
+//      2 : FreePages\r
+//      3 : AllocatePool\r
+//      4 : FreePool\r
+//\r
+#define MEMORY_PROFILE_ACTION_BASIC_MASK 0xF\r
+\r
+//\r
+// Extension\r
+//\r
+#define MEMORY_PROFILE_ACTION_EXTENSION_MASK               0xFFF0\r
+#define MEMORY_PROFILE_ACTION_EXTENSION_LIB_MASK           0x8000\r
+#define MEMORY_PROFILE_ACTION_EXTENSION_REALLOC_MASK       0x0200\r
+#define MEMORY_PROFILE_ACTION_EXTENSION_COPY_MASK          0x0100\r
+#define MEMORY_PROFILE_ACTION_EXTENSION_ZERO_MASK          0x0080\r
+#define MEMORY_PROFILE_ACTION_EXTENSION_ALIGN_MASK         0x0040\r
+#define MEMORY_PROFILE_ACTION_EXTENSION_MEM_TYPE_MASK      0x0030\r
+#define MEMORY_PROFILE_ACTION_EXTENSION_MEM_TYPE_BASIC     0x0000\r
+#define MEMORY_PROFILE_ACTION_EXTENSION_MEM_TYPE_RUNTIME   0x0010\r
+#define MEMORY_PROFILE_ACTION_EXTENSION_MEM_TYPE_RESERVED  0x0020\r
+\r
+//\r
+// Extension (used by memory allocation lib)\r
+//\r
+#define MEMORY_PROFILE_ACTION_LIB_ALLOCATE_PAGES                    0x8001\r
+#define MEMORY_PROFILE_ACTION_LIB_ALLOCATE_RUNTIME_PAGES            0x8011\r
+#define MEMORY_PROFILE_ACTION_LIB_ALLOCATE_RESERVED_PAGES           0x8021\r
+#define MEMORY_PROFILE_ACTION_LIB_FREE_PAGES                        0x8002\r
+#define MEMORY_PROFILE_ACTION_LIB_ALLOCATE_ALIGNED_PAGES            0x8041\r
+#define MEMORY_PROFILE_ACTION_LIB_ALLOCATE_ALIGNED_RUNTIME_PAGES    0x8051\r
+#define MEMORY_PROFILE_ACTION_LIB_ALLOCATE_ALIGNED_RESERVED_PAGES   0x8061\r
+#define MEMORY_PROFILE_ACTION_LIB_FREE_ALIGNED_PAGES                0x8042\r
+#define MEMORY_PROFILE_ACTION_LIB_ALLOCATE_POOL                     0x8003\r
+#define MEMORY_PROFILE_ACTION_LIB_ALLOCATE_RUNTIME_POOL             0x8013\r
+#define MEMORY_PROFILE_ACTION_LIB_ALLOCATE_RESERVED_POOL            0x8023\r
+#define MEMORY_PROFILE_ACTION_LIB_FREE_POOL                         0x8004\r
+#define MEMORY_PROFILE_ACTION_LIB_ALLOCATE_ZERO_POOL                0x8083\r
+#define MEMORY_PROFILE_ACTION_LIB_ALLOCATE_RUNTIME_ZERO_POOL        0x8093\r
+#define MEMORY_PROFILE_ACTION_LIB_ALLOCATE_RESERVED_ZERO_POOL       0x80a3\r
+#define MEMORY_PROFILE_ACTION_LIB_ALLOCATE_COPY_POOL                0x8103\r
+#define MEMORY_PROFILE_ACTION_LIB_ALLOCATE_RUNTIME_COPY_POOL        0x8113\r
+#define MEMORY_PROFILE_ACTION_LIB_ALLOCATE_RESERVED_COPY_POOL       0x8123\r
+#define MEMORY_PROFILE_ACTION_LIB_REALLOCATE_POOL                   0x8203\r
+#define MEMORY_PROFILE_ACTION_LIB_REALLOCATE_RUNTIME_POOL           0x8213\r
+#define MEMORY_PROFILE_ACTION_LIB_REALLOCATE_RESERVED_POOL          0x8223\r
+\r
+//\r
+// User defined: 0x80000000~0xFFFFFFFF\r
+//\r
+// NOTE: User defined action MUST OR the basic action,\r
+//       so that core can know the action is allocate or free,\r
+//       and the type is pages (can be freed partially)\r
+//       or pool (cannot be freed partially).\r
+//\r
+#define MEMORY_PROFILE_ACTION_USER_DEFINED_MASK           0x80000000\r
+\r
 #define MEMORY_PROFILE_ALLOC_INFO_SIGNATURE SIGNATURE_32 ('M','P','A','I')\r
-#define MEMORY_PROFILE_ALLOC_INFO_REVISION 0x0001\r
+#define MEMORY_PROFILE_ALLOC_INFO_REVISION 0x0002\r
 \r
 typedef struct {\r
   MEMORY_PROFILE_COMMON_HEADER  Header;\r
   PHYSICAL_ADDRESS              CallerAddress;\r
   UINT32                        SequenceId;\r
-  UINT8                         Reserved[4];\r
+  UINT8                         Reserved[2];\r
+  UINT16                        ActionStringOffset;\r
   MEMORY_PROFILE_ACTION         Action;\r
   EFI_MEMORY_TYPE               MemoryType;\r
   PHYSICAL_ADDRESS              Buffer;\r
   UINT64                        Size;\r
+//CHAR8                         ActionString[];\r
 } MEMORY_PROFILE_ALLOC_INFO;\r
 \r
 #define MEMORY_PROFILE_DESCRIPTOR_SIGNATURE SIGNATURE_32 ('M','P','D','R')\r
@@ -140,6 +215,7 @@ typedef struct _EDKII_MEMORY_PROFILE_PROTOCOL EDKII_MEMORY_PROFILE_PROTOCOL;
   @param[out]     ProfileBuffer     Profile buffer.\r
                       \r
   @return EFI_SUCCESS               Get the memory profile data successfully.\r
+  @return EFI_UNSUPPORTED           Memory profile is unsupported.\r
   @return EFI_BUFFER_TO_SMALL       The ProfileSize is too small for the resulting data. \r
                                     ProfileSize is updated with the size required.\r
 \r
@@ -161,8 +237,10 @@ EFI_STATUS
   @param[in] ImageSize          Image size.\r
   @param[in] FileType           File type of the image.\r
 \r
-  @return EFI_SUCCESS           Register success.\r
-  @return EFI_OUT_OF_RESOURCE   No enough resource for this register.\r
+  @return EFI_SUCCESS           Register successfully.\r
+  @return EFI_UNSUPPORTED       Memory profile is unsupported,\r
+                                or memory profile for the image is not required.\r
+  @return EFI_OUT_OF_RESOURCES  No enough resource for this register.\r
 \r
 **/\r
 typedef\r
@@ -183,7 +261,9 @@ EFI_STATUS
   @param[in] ImageBase          Image base address.\r
   @param[in] ImageSize          Image size.\r
 \r
-  @return EFI_SUCCESS           Unregister success.\r
+  @return EFI_SUCCESS           Unregister successfully.\r
+  @return EFI_UNSUPPORTED       Memory profile is unsupported,\r
+                                or memory profile for the image is not required.\r
   @return EFI_NOT_FOUND         The image is not found.\r
 \r
 **/\r
@@ -196,10 +276,86 @@ EFI_STATUS
   IN UINT64                             ImageSize\r
   );\r
 \r
+#define MEMORY_PROFILE_RECORDING_ENABLE     TRUE\r
+#define MEMORY_PROFILE_RECORDING_DISABLE    FALSE\r
+\r
+/**\r
+  Get memory profile recording state.\r
+\r
+  @param[in]  This              The EDKII_MEMORY_PROFILE_PROTOCOL instance.\r
+  @param[out] RecordingState    Recording state.\r
+\r
+  @return EFI_SUCCESS           Memory profile recording state is returned.\r
+  @return EFI_UNSUPPORTED       Memory profile is unsupported.\r
+  @return EFI_INVALID_PARAMETER RecordingState is NULL.\r
+\r
+**/\r
+typedef\r
+EFI_STATUS\r
+(EFIAPI *EDKII_MEMORY_PROFILE_GET_RECORDING_STATE) (\r
+  IN EDKII_MEMORY_PROFILE_PROTOCOL      *This,\r
+  OUT BOOLEAN                           *RecordingState\r
+  );\r
+\r
+/**\r
+  Set memory profile recording state.\r
+\r
+  @param[in] This               The EDKII_MEMORY_PROFILE_PROTOCOL instance.\r
+  @param[in] RecordingState     Recording state.\r
+\r
+  @return EFI_SUCCESS           Set memory profile recording state successfully.\r
+  @return EFI_UNSUPPORTED       Memory profile is unsupported.\r
+\r
+**/\r
+typedef\r
+EFI_STATUS\r
+(EFIAPI *EDKII_MEMORY_PROFILE_SET_RECORDING_STATE) (\r
+  IN EDKII_MEMORY_PROFILE_PROTOCOL      *This,\r
+  IN BOOLEAN                            RecordingState\r
+  );\r
+\r
+/**\r
+  Record memory profile of multilevel caller.\r
+\r
+  @param[in] This               The EDKII_MEMORY_PROFILE_PROTOCOL instance.\r
+  @param[in] CallerAddress      Address of caller.\r
+  @param[in] Action             Memory profile action.\r
+  @param[in] MemoryType         Memory type.\r
+                                EfiMaxMemoryType means the MemoryType is unknown.\r
+  @param[in] Buffer             Buffer address.\r
+  @param[in] Size               Buffer size.\r
+  @param[in] ActionString       String for memory profile action.\r
+                                Only needed for user defined allocate action.\r
+\r
+  @return EFI_SUCCESS           Memory profile is updated.\r
+  @return EFI_UNSUPPORTED       Memory profile is unsupported,\r
+                                or memory profile for the image is not required,\r
+                                or memory profile for the memory type is not required.\r
+  @return EFI_ACCESS_DENIED     It is during memory profile data getting.\r
+  @return EFI_ABORTED           Memory profile recording is not enabled.\r
+  @return EFI_OUT_OF_RESOURCES  No enough resource to update memory profile for allocate action.\r
+  @return EFI_NOT_FOUND         No matched allocate info found for free action.\r
+\r
+**/\r
+typedef\r
+EFI_STATUS\r
+(EFIAPI *EDKII_MEMORY_PROFILE_RECORD) (\r
+  IN EDKII_MEMORY_PROFILE_PROTOCOL      *This,\r
+  IN PHYSICAL_ADDRESS                   CallerAddress,\r
+  IN MEMORY_PROFILE_ACTION              Action,\r
+  IN EFI_MEMORY_TYPE                    MemoryType,\r
+  IN VOID                               *Buffer,\r
+  IN UINTN                              Size,\r
+  IN CHAR8                              *ActionString OPTIONAL\r
+  );\r
+\r
 struct _EDKII_MEMORY_PROFILE_PROTOCOL {\r
-  EDKII_MEMORY_PROFILE_GET_DATA         GetData;\r
-  EDKII_MEMORY_PROFILE_REGISTER_IMAGE   RegisterImage;\r
-  EDKII_MEMORY_PROFILE_UNREGISTER_IMAGE UnregisterImage;\r
+  EDKII_MEMORY_PROFILE_GET_DATA             GetData;\r
+  EDKII_MEMORY_PROFILE_REGISTER_IMAGE       RegisterImage;\r
+  EDKII_MEMORY_PROFILE_UNREGISTER_IMAGE     UnregisterImage;\r
+  EDKII_MEMORY_PROFILE_GET_RECORDING_STATE  GetRecordingState;\r
+  EDKII_MEMORY_PROFILE_SET_RECORDING_STATE  SetRecordingState;\r
+  EDKII_MEMORY_PROFILE_RECORD               Record;\r
 };\r
 \r
 //\r
@@ -236,13 +392,17 @@ struct _EDKII_MEMORY_PROFILE_PROTOCOL {
 //\r
 // SMRAM profile command\r
 //\r
-#define SMRAM_PROFILE_COMMAND_GET_PROFILE_INFO         0x1\r
-#define SMRAM_PROFILE_COMMAND_GET_PROFILE_DATA         0x2\r
+#define SMRAM_PROFILE_COMMAND_GET_PROFILE_INFO           0x1\r
+#define SMRAM_PROFILE_COMMAND_GET_PROFILE_DATA           0x2\r
 //\r
 // Below 2 commands are now used by ECP only and only valid before SmmReadyToLock\r
 //\r
-#define SMRAM_PROFILE_COMMAND_REGISTER_IMAGE           0x3\r
-#define SMRAM_PROFILE_COMMAND_UNREGISTER_IMAGE         0x4\r
+#define SMRAM_PROFILE_COMMAND_REGISTER_IMAGE             0x3\r
+#define SMRAM_PROFILE_COMMAND_UNREGISTER_IMAGE           0x4\r
+\r
+#define SMRAM_PROFILE_COMMAND_GET_PROFILE_DATA_BY_OFFSET 0x5\r
+#define SMRAM_PROFILE_COMMAND_GET_RECORDING_STATE        0x6\r
+#define SMRAM_PROFILE_COMMAND_SET_RECORDING_STATE        0x7\r
 \r
 typedef struct {\r
   UINT32                            Command;\r
@@ -261,6 +421,26 @@ typedef struct {
   PHYSICAL_ADDRESS                  ProfileBuffer;\r
 } SMRAM_PROFILE_PARAMETER_GET_PROFILE_DATA;\r
 \r
+typedef struct {\r
+  SMRAM_PROFILE_PARAMETER_HEADER    Header;\r
+  //\r
+  // On input, profile buffer size.\r
+  // On output, actual profile data size copied.\r
+  //\r
+  UINT64                            ProfileSize;\r
+  PHYSICAL_ADDRESS                  ProfileBuffer;\r
+  //\r
+  // On input, profile buffer offset to copy.\r
+  // On output, next time profile buffer offset to copy.\r
+  //\r
+  UINT64                            ProfileOffset;\r
+} SMRAM_PROFILE_PARAMETER_GET_PROFILE_DATA_BY_OFFSET;\r
+\r
+typedef struct {\r
+  SMRAM_PROFILE_PARAMETER_HEADER    Header;\r
+  BOOLEAN                           RecordingState;\r
+} SMRAM_PROFILE_PARAMETER_RECORDING_STATE;\r
+\r
 typedef struct {\r
   SMRAM_PROFILE_PARAMETER_HEADER    Header;\r
   EFI_GUID                          FileName;\r
@@ -277,10 +457,18 @@ typedef struct {
 \r
 \r
 #define EDKII_MEMORY_PROFILE_GUID { \\r
-  0x821c9a09, 0x541a, 0x40f6, 0x9f, 0x43, 0xa, 0xd1, 0x93, 0xa1, 0x2c, 0xfe \\r
+  0x821c9a09, 0x541a, 0x40f6, { 0x9f, 0x43, 0xa, 0xd1, 0x93, 0xa1, 0x2c, 0xfe } \\r
 }\r
 \r
 extern EFI_GUID gEdkiiMemoryProfileGuid;\r
 \r
+typedef EDKII_MEMORY_PROFILE_PROTOCOL EDKII_SMM_MEMORY_PROFILE_PROTOCOL;\r
+\r
+#define EDKII_SMM_MEMORY_PROFILE_GUID { \\r
+  0xe22bbcca, 0x516a, 0x46a8, { 0x80, 0xe2, 0x67, 0x45, 0xe8, 0x36, 0x93, 0xbd } \\r
+}\r
+\r
+extern EFI_GUID gEdkiiSmmMemoryProfileGuid;\r
+\r
 #endif\r
 \r