REF: https://bugzilla.tianocore.org/show_bug.cgi?id=3737 Apply uncrustify changes to .c/.h files in the MdeModulePkg package Cc: Andrew Fish <afish@apple.com> Cc: Leif Lindholm <leif@nuviainc.com> Cc: Michael D Kinney <michael.d.kinney@intel.com> Signed-off-by: Michael Kubacki <michael.kubacki@microsoft.com> Reviewed-by: Liming Gao <gaoliming@byosoft.com.cn>
		
			
				
	
	
		
			467 lines
		
	
	
		
			18 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			467 lines
		
	
	
		
			18 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/** @file
 | 
						|
  Memory profile data structure.
 | 
						|
 | 
						|
  Copyright (c) 2014 - 2018, Intel Corporation. All rights reserved.<BR>
 | 
						|
  SPDX-License-Identifier: BSD-2-Clause-Patent
 | 
						|
 | 
						|
**/
 | 
						|
 | 
						|
#ifndef _MEMORY_PROFILE_H_
 | 
						|
#define _MEMORY_PROFILE_H_
 | 
						|
 | 
						|
#include <Pi/PiFirmwareFile.h>
 | 
						|
 | 
						|
//
 | 
						|
// For BIOS MemoryType (0 ~ EfiMaxMemoryType - 1), it is recorded in UsageByType[MemoryType]. (Each valid entry has one entry)
 | 
						|
// For OS MemoryType (0x80000000 ~ 0xFFFFFFFF), it is recorded in UsageByType[EfiMaxMemoryType]. (All types are combined into one entry)
 | 
						|
// For OEM MemoryType (0x70000000 ~ 0x7FFFFFFF), it is recorded in UsageByType[EfiMaxMemoryType + 1]. (All types are combined into one entry)
 | 
						|
//
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  UINT32    Signature;
 | 
						|
  UINT16    Length;
 | 
						|
  UINT16    Revision;
 | 
						|
} MEMORY_PROFILE_COMMON_HEADER;
 | 
						|
 | 
						|
#define MEMORY_PROFILE_CONTEXT_SIGNATURE  SIGNATURE_32 ('M','P','C','T')
 | 
						|
#define MEMORY_PROFILE_CONTEXT_REVISION   0x0002
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  MEMORY_PROFILE_COMMON_HEADER    Header;
 | 
						|
  UINT64                          CurrentTotalUsage;
 | 
						|
  UINT64                          PeakTotalUsage;
 | 
						|
  UINT64                          CurrentTotalUsageByType[EfiMaxMemoryType + 2];
 | 
						|
  UINT64                          PeakTotalUsageByType[EfiMaxMemoryType + 2];
 | 
						|
  UINT64                          TotalImageSize;
 | 
						|
  UINT32                          ImageCount;
 | 
						|
  UINT32                          SequenceCount;
 | 
						|
} MEMORY_PROFILE_CONTEXT;
 | 
						|
 | 
						|
#define MEMORY_PROFILE_DRIVER_INFO_SIGNATURE  SIGNATURE_32 ('M','P','D','I')
 | 
						|
#define MEMORY_PROFILE_DRIVER_INFO_REVISION   0x0003
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  MEMORY_PROFILE_COMMON_HEADER    Header;
 | 
						|
  EFI_GUID                        FileName;
 | 
						|
  PHYSICAL_ADDRESS                ImageBase;
 | 
						|
  UINT64                          ImageSize;
 | 
						|
  PHYSICAL_ADDRESS                EntryPoint;
 | 
						|
  UINT16                          ImageSubsystem;
 | 
						|
  EFI_FV_FILETYPE                 FileType;
 | 
						|
  UINT8                           Reserved[1];
 | 
						|
  UINT32                          AllocRecordCount;
 | 
						|
  UINT64                          CurrentUsage;
 | 
						|
  UINT64                          PeakUsage;
 | 
						|
  UINT64                          CurrentUsageByType[EfiMaxMemoryType + 2];
 | 
						|
  UINT64                          PeakUsageByType[EfiMaxMemoryType + 2];
 | 
						|
  UINT16                          PdbStringOffset;
 | 
						|
  UINT8                           Reserved2[6];
 | 
						|
  // CHAR8                         PdbString[];
 | 
						|
} MEMORY_PROFILE_DRIVER_INFO;
 | 
						|
 | 
						|
typedef enum {
 | 
						|
  MemoryProfileActionAllocatePages = 1,
 | 
						|
  MemoryProfileActionFreePages     = 2,
 | 
						|
  MemoryProfileActionAllocatePool  = 3,
 | 
						|
  MemoryProfileActionFreePool      = 4,
 | 
						|
} MEMORY_PROFILE_ACTION;
 | 
						|
 | 
						|
//
 | 
						|
// Below is the detailed MEMORY_PROFILE_ACTION definition.
 | 
						|
//
 | 
						|
//  31       15      9  8  8 7  7 6   6 5-4  3 - 0
 | 
						|
// +----------------------------------------------+
 | 
						|
// |User |  |Lib|   |Re|Copy|Zero|Align|Type|Basic|
 | 
						|
// +----------------------------------------------+
 | 
						|
//
 | 
						|
 | 
						|
//
 | 
						|
// Basic Action
 | 
						|
//      1 : AllocatePages
 | 
						|
//      2 : FreePages
 | 
						|
//      3 : AllocatePool
 | 
						|
//      4 : FreePool
 | 
						|
//
 | 
						|
#define MEMORY_PROFILE_ACTION_BASIC_MASK  0xF
 | 
						|
 | 
						|
//
 | 
						|
// Extension
 | 
						|
//
 | 
						|
#define MEMORY_PROFILE_ACTION_EXTENSION_MASK               0xFFF0
 | 
						|
#define MEMORY_PROFILE_ACTION_EXTENSION_LIB_MASK           0x8000
 | 
						|
#define MEMORY_PROFILE_ACTION_EXTENSION_REALLOC_MASK       0x0200
 | 
						|
#define MEMORY_PROFILE_ACTION_EXTENSION_COPY_MASK          0x0100
 | 
						|
#define MEMORY_PROFILE_ACTION_EXTENSION_ZERO_MASK          0x0080
 | 
						|
#define MEMORY_PROFILE_ACTION_EXTENSION_ALIGN_MASK         0x0040
 | 
						|
#define MEMORY_PROFILE_ACTION_EXTENSION_MEM_TYPE_MASK      0x0030
 | 
						|
#define MEMORY_PROFILE_ACTION_EXTENSION_MEM_TYPE_BASIC     0x0000
 | 
						|
#define MEMORY_PROFILE_ACTION_EXTENSION_MEM_TYPE_RUNTIME   0x0010
 | 
						|
#define MEMORY_PROFILE_ACTION_EXTENSION_MEM_TYPE_RESERVED  0x0020
 | 
						|
 | 
						|
//
 | 
						|
// Extension (used by memory allocation lib)
 | 
						|
//
 | 
						|
#define MEMORY_PROFILE_ACTION_LIB_ALLOCATE_PAGES                   0x8001
 | 
						|
#define MEMORY_PROFILE_ACTION_LIB_ALLOCATE_RUNTIME_PAGES           0x8011
 | 
						|
#define MEMORY_PROFILE_ACTION_LIB_ALLOCATE_RESERVED_PAGES          0x8021
 | 
						|
#define MEMORY_PROFILE_ACTION_LIB_FREE_PAGES                       0x8002
 | 
						|
#define MEMORY_PROFILE_ACTION_LIB_ALLOCATE_ALIGNED_PAGES           0x8041
 | 
						|
#define MEMORY_PROFILE_ACTION_LIB_ALLOCATE_ALIGNED_RUNTIME_PAGES   0x8051
 | 
						|
#define MEMORY_PROFILE_ACTION_LIB_ALLOCATE_ALIGNED_RESERVED_PAGES  0x8061
 | 
						|
#define MEMORY_PROFILE_ACTION_LIB_FREE_ALIGNED_PAGES               0x8042
 | 
						|
#define MEMORY_PROFILE_ACTION_LIB_ALLOCATE_POOL                    0x8003
 | 
						|
#define MEMORY_PROFILE_ACTION_LIB_ALLOCATE_RUNTIME_POOL            0x8013
 | 
						|
#define MEMORY_PROFILE_ACTION_LIB_ALLOCATE_RESERVED_POOL           0x8023
 | 
						|
#define MEMORY_PROFILE_ACTION_LIB_FREE_POOL                        0x8004
 | 
						|
#define MEMORY_PROFILE_ACTION_LIB_ALLOCATE_ZERO_POOL               0x8083
 | 
						|
#define MEMORY_PROFILE_ACTION_LIB_ALLOCATE_RUNTIME_ZERO_POOL       0x8093
 | 
						|
#define MEMORY_PROFILE_ACTION_LIB_ALLOCATE_RESERVED_ZERO_POOL      0x80a3
 | 
						|
#define MEMORY_PROFILE_ACTION_LIB_ALLOCATE_COPY_POOL               0x8103
 | 
						|
#define MEMORY_PROFILE_ACTION_LIB_ALLOCATE_RUNTIME_COPY_POOL       0x8113
 | 
						|
#define MEMORY_PROFILE_ACTION_LIB_ALLOCATE_RESERVED_COPY_POOL      0x8123
 | 
						|
#define MEMORY_PROFILE_ACTION_LIB_REALLOCATE_POOL                  0x8203
 | 
						|
#define MEMORY_PROFILE_ACTION_LIB_REALLOCATE_RUNTIME_POOL          0x8213
 | 
						|
#define MEMORY_PROFILE_ACTION_LIB_REALLOCATE_RESERVED_POOL         0x8223
 | 
						|
 | 
						|
//
 | 
						|
// User defined: 0x80000000~0xFFFFFFFF
 | 
						|
//
 | 
						|
// NOTE: User defined action MUST OR the basic action,
 | 
						|
//       so that core can know the action is allocate or free,
 | 
						|
//       and the type is pages (can be freed partially)
 | 
						|
//       or pool (cannot be freed partially).
 | 
						|
//
 | 
						|
#define MEMORY_PROFILE_ACTION_USER_DEFINED_MASK  0x80000000
 | 
						|
 | 
						|
#define MEMORY_PROFILE_ALLOC_INFO_SIGNATURE  SIGNATURE_32 ('M','P','A','I')
 | 
						|
#define MEMORY_PROFILE_ALLOC_INFO_REVISION   0x0002
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  MEMORY_PROFILE_COMMON_HEADER    Header;
 | 
						|
  PHYSICAL_ADDRESS                CallerAddress;
 | 
						|
  UINT32                          SequenceId;
 | 
						|
  UINT8                           Reserved[2];
 | 
						|
  UINT16                          ActionStringOffset;
 | 
						|
  MEMORY_PROFILE_ACTION           Action;
 | 
						|
  EFI_MEMORY_TYPE                 MemoryType;
 | 
						|
  PHYSICAL_ADDRESS                Buffer;
 | 
						|
  UINT64                          Size;
 | 
						|
  // CHAR8                         ActionString[];
 | 
						|
} MEMORY_PROFILE_ALLOC_INFO;
 | 
						|
 | 
						|
#define MEMORY_PROFILE_DESCRIPTOR_SIGNATURE  SIGNATURE_32 ('M','P','D','R')
 | 
						|
#define MEMORY_PROFILE_DESCRIPTOR_REVISION   0x0001
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  MEMORY_PROFILE_COMMON_HEADER    Header;
 | 
						|
  PHYSICAL_ADDRESS                Address;
 | 
						|
  UINT64                          Size;
 | 
						|
} MEMORY_PROFILE_DESCRIPTOR;
 | 
						|
 | 
						|
#define MEMORY_PROFILE_FREE_MEMORY_SIGNATURE  SIGNATURE_32 ('M','P','R','M')
 | 
						|
#define MEMORY_PROFILE_FREE_MEMORY_REVISION   0x0001
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  MEMORY_PROFILE_COMMON_HEADER    Header;
 | 
						|
  UINT64                          TotalFreeMemoryPages;
 | 
						|
  UINT32                          FreeMemoryEntryCount;
 | 
						|
  UINT8                           Reserved[4];
 | 
						|
  // MEMORY_PROFILE_DESCRIPTOR     MemoryDescriptor[FreeMemoryEntryCount];
 | 
						|
} MEMORY_PROFILE_FREE_MEMORY;
 | 
						|
 | 
						|
#define MEMORY_PROFILE_MEMORY_RANGE_SIGNATURE  SIGNATURE_32 ('M','P','M','R')
 | 
						|
#define MEMORY_PROFILE_MEMORY_RANGE_REVISION   0x0001
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  MEMORY_PROFILE_COMMON_HEADER    Header;
 | 
						|
  UINT32                          MemoryRangeCount;
 | 
						|
  UINT8                           Reserved[4];
 | 
						|
  // MEMORY_PROFILE_DESCRIPTOR     MemoryDescriptor[MemoryRangeCount];
 | 
						|
} MEMORY_PROFILE_MEMORY_RANGE;
 | 
						|
 | 
						|
//
 | 
						|
// UEFI memory profile layout:
 | 
						|
// +--------------------------------+
 | 
						|
// | CONTEXT                        |
 | 
						|
// +--------------------------------+
 | 
						|
// | DRIVER_INFO(1)                 |
 | 
						|
// +--------------------------------+
 | 
						|
// | ALLOC_INFO(1, 1)               |
 | 
						|
// +--------------------------------+
 | 
						|
// | ALLOC_INFO(1, m1)              |
 | 
						|
// +--------------------------------+
 | 
						|
// | DRIVER_INFO(n)                 |
 | 
						|
// +--------------------------------+
 | 
						|
// | ALLOC_INFO(n, 1)               |
 | 
						|
// +--------------------------------+
 | 
						|
// | ALLOC_INFO(n, mn)              |
 | 
						|
// +--------------------------------+
 | 
						|
//
 | 
						|
 | 
						|
typedef struct _EDKII_MEMORY_PROFILE_PROTOCOL EDKII_MEMORY_PROFILE_PROTOCOL;
 | 
						|
 | 
						|
/**
 | 
						|
  Get memory profile data.
 | 
						|
 | 
						|
  @param[in]      This              The EDKII_MEMORY_PROFILE_PROTOCOL instance.
 | 
						|
  @param[in, out] ProfileSize       On entry, points to the size in bytes of the ProfileBuffer.
 | 
						|
                                    On return, points to the size of the data returned in ProfileBuffer.
 | 
						|
  @param[out]     ProfileBuffer     Profile buffer.
 | 
						|
 | 
						|
  @return EFI_SUCCESS               Get the memory profile data successfully.
 | 
						|
  @return EFI_UNSUPPORTED           Memory profile is unsupported.
 | 
						|
  @return EFI_BUFFER_TO_SMALL       The ProfileSize is too small for the resulting data.
 | 
						|
                                    ProfileSize is updated with the size required.
 | 
						|
 | 
						|
**/
 | 
						|
typedef
 | 
						|
EFI_STATUS
 | 
						|
(EFIAPI *EDKII_MEMORY_PROFILE_GET_DATA)(
 | 
						|
  IN     EDKII_MEMORY_PROFILE_PROTOCOL  *This,
 | 
						|
  IN OUT UINT64                         *ProfileSize,
 | 
						|
  OUT VOID                           *ProfileBuffer
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Register image to memory profile.
 | 
						|
 | 
						|
  @param[in] This               The EDKII_MEMORY_PROFILE_PROTOCOL instance.
 | 
						|
  @param[in] FilePath           File path of the image.
 | 
						|
  @param[in] ImageBase          Image base address.
 | 
						|
  @param[in] ImageSize          Image size.
 | 
						|
  @param[in] FileType           File type of the image.
 | 
						|
 | 
						|
  @return EFI_SUCCESS           Register successfully.
 | 
						|
  @return EFI_UNSUPPORTED       Memory profile is unsupported,
 | 
						|
                                or memory profile for the image is not required.
 | 
						|
  @return EFI_OUT_OF_RESOURCES  No enough resource for this register.
 | 
						|
 | 
						|
**/
 | 
						|
typedef
 | 
						|
EFI_STATUS
 | 
						|
(EFIAPI *EDKII_MEMORY_PROFILE_REGISTER_IMAGE)(
 | 
						|
  IN EDKII_MEMORY_PROFILE_PROTOCOL      *This,
 | 
						|
  IN EFI_DEVICE_PATH_PROTOCOL           *FilePath,
 | 
						|
  IN PHYSICAL_ADDRESS                   ImageBase,
 | 
						|
  IN UINT64                             ImageSize,
 | 
						|
  IN EFI_FV_FILETYPE                    FileType
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Unregister image from memory profile.
 | 
						|
 | 
						|
  @param[in] This               The EDKII_MEMORY_PROFILE_PROTOCOL instance.
 | 
						|
  @param[in] FilePath           File path of the image.
 | 
						|
  @param[in] ImageBase          Image base address.
 | 
						|
  @param[in] ImageSize          Image size.
 | 
						|
 | 
						|
  @return EFI_SUCCESS           Unregister successfully.
 | 
						|
  @return EFI_UNSUPPORTED       Memory profile is unsupported,
 | 
						|
                                or memory profile for the image is not required.
 | 
						|
  @return EFI_NOT_FOUND         The image is not found.
 | 
						|
 | 
						|
**/
 | 
						|
typedef
 | 
						|
EFI_STATUS
 | 
						|
(EFIAPI *EDKII_MEMORY_PROFILE_UNREGISTER_IMAGE)(
 | 
						|
  IN EDKII_MEMORY_PROFILE_PROTOCOL      *This,
 | 
						|
  IN EFI_DEVICE_PATH_PROTOCOL           *FilePath,
 | 
						|
  IN PHYSICAL_ADDRESS                   ImageBase,
 | 
						|
  IN UINT64                             ImageSize
 | 
						|
  );
 | 
						|
 | 
						|
#define MEMORY_PROFILE_RECORDING_ENABLE   TRUE
 | 
						|
#define MEMORY_PROFILE_RECORDING_DISABLE  FALSE
 | 
						|
 | 
						|
/**
 | 
						|
  Get memory profile recording state.
 | 
						|
 | 
						|
  @param[in]  This              The EDKII_MEMORY_PROFILE_PROTOCOL instance.
 | 
						|
  @param[out] RecordingState    Recording state.
 | 
						|
 | 
						|
  @return EFI_SUCCESS           Memory profile recording state is returned.
 | 
						|
  @return EFI_UNSUPPORTED       Memory profile is unsupported.
 | 
						|
  @return EFI_INVALID_PARAMETER RecordingState is NULL.
 | 
						|
 | 
						|
**/
 | 
						|
typedef
 | 
						|
EFI_STATUS
 | 
						|
(EFIAPI *EDKII_MEMORY_PROFILE_GET_RECORDING_STATE)(
 | 
						|
  IN EDKII_MEMORY_PROFILE_PROTOCOL      *This,
 | 
						|
  OUT BOOLEAN                           *RecordingState
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Set memory profile recording state.
 | 
						|
 | 
						|
  @param[in] This               The EDKII_MEMORY_PROFILE_PROTOCOL instance.
 | 
						|
  @param[in] RecordingState     Recording state.
 | 
						|
 | 
						|
  @return EFI_SUCCESS           Set memory profile recording state successfully.
 | 
						|
  @return EFI_UNSUPPORTED       Memory profile is unsupported.
 | 
						|
 | 
						|
**/
 | 
						|
typedef
 | 
						|
EFI_STATUS
 | 
						|
(EFIAPI *EDKII_MEMORY_PROFILE_SET_RECORDING_STATE)(
 | 
						|
  IN EDKII_MEMORY_PROFILE_PROTOCOL      *This,
 | 
						|
  IN BOOLEAN                            RecordingState
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Record memory profile of multilevel caller.
 | 
						|
 | 
						|
  @param[in] This               The EDKII_MEMORY_PROFILE_PROTOCOL instance.
 | 
						|
  @param[in] CallerAddress      Address of caller.
 | 
						|
  @param[in] Action             Memory profile action.
 | 
						|
  @param[in] MemoryType         Memory type.
 | 
						|
                                EfiMaxMemoryType means the MemoryType is unknown.
 | 
						|
  @param[in] Buffer             Buffer address.
 | 
						|
  @param[in] Size               Buffer size.
 | 
						|
  @param[in] ActionString       String for memory profile action.
 | 
						|
                                Only needed for user defined allocate action.
 | 
						|
 | 
						|
  @return EFI_SUCCESS           Memory profile is updated.
 | 
						|
  @return EFI_UNSUPPORTED       Memory profile is unsupported,
 | 
						|
                                or memory profile for the image is not required,
 | 
						|
                                or memory profile for the memory type is not required.
 | 
						|
  @return EFI_ACCESS_DENIED     It is during memory profile data getting.
 | 
						|
  @return EFI_ABORTED           Memory profile recording is not enabled.
 | 
						|
  @return EFI_OUT_OF_RESOURCES  No enough resource to update memory profile for allocate action.
 | 
						|
  @return EFI_NOT_FOUND         No matched allocate info found for free action.
 | 
						|
 | 
						|
**/
 | 
						|
typedef
 | 
						|
EFI_STATUS
 | 
						|
(EFIAPI *EDKII_MEMORY_PROFILE_RECORD)(
 | 
						|
  IN EDKII_MEMORY_PROFILE_PROTOCOL      *This,
 | 
						|
  IN PHYSICAL_ADDRESS                   CallerAddress,
 | 
						|
  IN MEMORY_PROFILE_ACTION              Action,
 | 
						|
  IN EFI_MEMORY_TYPE                    MemoryType,
 | 
						|
  IN VOID                               *Buffer,
 | 
						|
  IN UINTN                              Size,
 | 
						|
  IN CHAR8                              *ActionString OPTIONAL
 | 
						|
  );
 | 
						|
 | 
						|
struct _EDKII_MEMORY_PROFILE_PROTOCOL {
 | 
						|
  EDKII_MEMORY_PROFILE_GET_DATA               GetData;
 | 
						|
  EDKII_MEMORY_PROFILE_REGISTER_IMAGE         RegisterImage;
 | 
						|
  EDKII_MEMORY_PROFILE_UNREGISTER_IMAGE       UnregisterImage;
 | 
						|
  EDKII_MEMORY_PROFILE_GET_RECORDING_STATE    GetRecordingState;
 | 
						|
  EDKII_MEMORY_PROFILE_SET_RECORDING_STATE    SetRecordingState;
 | 
						|
  EDKII_MEMORY_PROFILE_RECORD                 Record;
 | 
						|
};
 | 
						|
 | 
						|
//
 | 
						|
// SMRAM profile layout:
 | 
						|
// +--------------------------------+
 | 
						|
// | CONTEXT                        |
 | 
						|
// +--------------------------------+
 | 
						|
// | DRIVER_INFO(1)                 |
 | 
						|
// +--------------------------------+
 | 
						|
// | ALLOC_INFO(1, 1)               |
 | 
						|
// +--------------------------------+
 | 
						|
// | ALLOC_INFO(1, m1)              |
 | 
						|
// +--------------------------------+
 | 
						|
// | DRIVER_INFO(n)                 |
 | 
						|
// +--------------------------------+
 | 
						|
// | ALLOC_INFO(n, 1)               |
 | 
						|
// +--------------------------------+
 | 
						|
// | ALLOC_INFO(n, mn)              |
 | 
						|
// +--------------------------------+
 | 
						|
// | FREE_MEMORY                    |
 | 
						|
// +--------------------------------+
 | 
						|
// | FREE MEMORY DESCRIPTOR(1)      |
 | 
						|
// +--------------------------------+
 | 
						|
// | FREE MEMORY DESCRIPTOR(p)      |
 | 
						|
// +--------------------------------+
 | 
						|
// | MEMORY_RANGE                   |
 | 
						|
// +--------------------------------+
 | 
						|
// | MEMORY RANGE DESCRIPTOR(1)     |
 | 
						|
// +--------------------------------+
 | 
						|
// | MEMORY RANGE DESCRIPTOR(q)     |
 | 
						|
// +--------------------------------+
 | 
						|
//
 | 
						|
 | 
						|
//
 | 
						|
// SMRAM profile command
 | 
						|
//
 | 
						|
#define SMRAM_PROFILE_COMMAND_GET_PROFILE_INFO  0x1
 | 
						|
#define SMRAM_PROFILE_COMMAND_GET_PROFILE_DATA  0x2
 | 
						|
//
 | 
						|
// Below 2 commands have been deprecated. They may not be re-used.
 | 
						|
//
 | 
						|
#define SMRAM_PROFILE_COMMAND_DEPRECATED1  0x3
 | 
						|
#define SMRAM_PROFILE_COMMAND_DEPRECATED2  0x4
 | 
						|
 | 
						|
#define SMRAM_PROFILE_COMMAND_GET_PROFILE_DATA_BY_OFFSET  0x5
 | 
						|
#define SMRAM_PROFILE_COMMAND_GET_RECORDING_STATE         0x6
 | 
						|
#define SMRAM_PROFILE_COMMAND_SET_RECORDING_STATE         0x7
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  UINT32    Command;
 | 
						|
  UINT32    DataLength;
 | 
						|
  UINT64    ReturnStatus;
 | 
						|
} SMRAM_PROFILE_PARAMETER_HEADER;
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  SMRAM_PROFILE_PARAMETER_HEADER    Header;
 | 
						|
  UINT64                            ProfileSize;
 | 
						|
} SMRAM_PROFILE_PARAMETER_GET_PROFILE_INFO;
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  SMRAM_PROFILE_PARAMETER_HEADER    Header;
 | 
						|
  UINT64                            ProfileSize;
 | 
						|
  PHYSICAL_ADDRESS                  ProfileBuffer;
 | 
						|
} SMRAM_PROFILE_PARAMETER_GET_PROFILE_DATA;
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  SMRAM_PROFILE_PARAMETER_HEADER    Header;
 | 
						|
  //
 | 
						|
  // On input, profile buffer size.
 | 
						|
  // On output, actual profile data size copied.
 | 
						|
  //
 | 
						|
  UINT64                            ProfileSize;
 | 
						|
  PHYSICAL_ADDRESS                  ProfileBuffer;
 | 
						|
  //
 | 
						|
  // On input, profile buffer offset to copy.
 | 
						|
  // On output, next time profile buffer offset to copy.
 | 
						|
  //
 | 
						|
  UINT64                            ProfileOffset;
 | 
						|
} SMRAM_PROFILE_PARAMETER_GET_PROFILE_DATA_BY_OFFSET;
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  SMRAM_PROFILE_PARAMETER_HEADER    Header;
 | 
						|
  BOOLEAN                           RecordingState;
 | 
						|
} SMRAM_PROFILE_PARAMETER_RECORDING_STATE;
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  SMRAM_PROFILE_PARAMETER_HEADER    Header;
 | 
						|
  EFI_GUID                          FileName;
 | 
						|
  PHYSICAL_ADDRESS                  ImageBuffer;
 | 
						|
  UINT64                            NumberOfPage;
 | 
						|
} SMRAM_PROFILE_PARAMETER_REGISTER_IMAGE;
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  SMRAM_PROFILE_PARAMETER_HEADER    Header;
 | 
						|
  EFI_GUID                          FileName;
 | 
						|
  PHYSICAL_ADDRESS                  ImageBuffer;
 | 
						|
  UINT64                            NumberOfPage;
 | 
						|
} SMRAM_PROFILE_PARAMETER_UNREGISTER_IMAGE;
 | 
						|
 | 
						|
#define EDKII_MEMORY_PROFILE_GUID  {\
 | 
						|
  0x821c9a09, 0x541a, 0x40f6, { 0x9f, 0x43, 0xa, 0xd1, 0x93, 0xa1, 0x2c, 0xfe } \
 | 
						|
}
 | 
						|
 | 
						|
extern EFI_GUID  gEdkiiMemoryProfileGuid;
 | 
						|
 | 
						|
typedef EDKII_MEMORY_PROFILE_PROTOCOL EDKII_SMM_MEMORY_PROFILE_PROTOCOL;
 | 
						|
 | 
						|
#define EDKII_SMM_MEMORY_PROFILE_GUID  {\
 | 
						|
  0xe22bbcca, 0x516a, 0x46a8, { 0x80, 0xe2, 0x67, 0x45, 0xe8, 0x36, 0x93, 0xbd } \
 | 
						|
}
 | 
						|
 | 
						|
extern EFI_GUID  gEdkiiSmmMemoryProfileGuid;
 | 
						|
 | 
						|
#endif
 |