return EFI_UNSUPPORTED;\r
}\r
\r
+/**\r
+ Register image to memory profile.\r
+\r
+ @param FileName File name of the image.\r
+ @param ImageBase Image base address.\r
+ @param ImageSize Image size.\r
+ @param FileType File type of the image.\r
+\r
+**/\r
+VOID\r
+RegisterMemoryProfileImage (\r
+ IN EFI_GUID *FileName,\r
+ IN PHYSICAL_ADDRESS ImageBase,\r
+ IN UINT64 ImageSize,\r
+ IN EFI_FV_FILETYPE FileType\r
+ )\r
+{\r
+ EFI_STATUS Status;\r
+ EDKII_MEMORY_PROFILE_PROTOCOL *ProfileProtocol;\r
+ MEDIA_FW_VOL_FILEPATH_DEVICE_PATH *FilePath;\r
+ UINT8 TempBuffer[sizeof (MEDIA_FW_VOL_FILEPATH_DEVICE_PATH) + sizeof (EFI_DEVICE_PATH_PROTOCOL)];\r
+\r
+ if ((PcdGet8 (PcdMemoryProfilePropertyMask) & BIT0) != 0) {\r
+\r
+ FilePath = (MEDIA_FW_VOL_FILEPATH_DEVICE_PATH *)TempBuffer;\r
+ Status = gBS->LocateProtocol (&gEdkiiMemoryProfileGuid, NULL, (VOID **) &ProfileProtocol);\r
+ if (!EFI_ERROR (Status)) {\r
+ EfiInitializeFwVolDevicepathNode (FilePath, FileName);\r
+ SetDevicePathEndNode (FilePath + 1);\r
+\r
+ Status = ProfileProtocol->RegisterImage (\r
+ ProfileProtocol,\r
+ (EFI_DEVICE_PATH_PROTOCOL *) FilePath,\r
+ ImageBase,\r
+ ImageSize,\r
+ FileType\r
+ );\r
+ }\r
+ }\r
+}\r
+\r
/**\r
This is the Event notification function to reload BootScriptExecutor image\r
to RESERVED mem and save it to LockBox.\r
// Flush the instruction cache so the image data is written before we execute it\r
//\r
InvalidateInstructionCacheRange ((VOID *)(UINTN)ImageContext.ImageAddress, (UINTN)ImageContext.ImageSize);\r
+\r
+ RegisterMemoryProfileImage (\r
+ &gEfiCallerIdGuid,\r
+ ImageContext.ImageAddress,\r
+ ImageContext.ImageSize,\r
+ EFI_FV_FILETYPE_DRIVER\r
+ );\r
+\r
Status = ((EFI_IMAGE_ENTRY_POINT)(UINTN)(ImageContext.EntryPoint)) (NewImageHandle, gST);\r
ASSERT_EFI_ERROR (Status);\r
\r