30#define GET_OCCUPIED_SIZE(ActualSize, Alignment) \
31 ((ActualSize) + (((Alignment) - ((ActualSize) & ((Alignment) - 1))) & ((Alignment) - 1)))
35 PHYSICAL_ADDRESS EntryPoint;
36 PHYSICAL_ADDRESS ImageBase;
129 for (Index = 0; Index < Size; Index++) {
130 DEBUG ((DEBUG_INFO,
"%02x ", (
UINTN)Data[Index]));
149 if ((
DevicePathType (LoadedImage->FilePath) == MEDIA_DEVICE_PATH) &&
155 if (FileName !=
NULL) {
173 IN PHYSICAL_ADDRESS ImageBase,
175 IN PHYSICAL_ADDRESS EntryPoint,
182 if (mImageStructCount >= mImageStructCountMax) {
187 CopyGuid (&mImageStruct[mImageStructCount].FileGuid, Guid);
188 mImageStruct[mImageStructCount].ImageRef = mImageStructCount;
189 mImageStruct[mImageStructCount].ImageBase = ImageBase;
190 mImageStruct[mImageStructCount].ImageSize = ImageSize;
191 mImageStruct[mImageStructCount].EntryPoint = EntryPoint;
192 if (PdbString !=
NULL) {
194 mImageStruct[mImageStructCount].PdbString =
AllocateCopyPool (PdbStringSize, PdbString);
195 if (mImageStruct[mImageStructCount].PdbString !=
NULL) {
196 mImageStruct[mImageStructCount].PdbStringSize = (UINT16)PdbStringSize;
217 for (Index = 0; Index < mImageStructCount; Index++) {
218 if ((Address >= mImageStruct[Index].ImageBase) &&
219 (Address < mImageStruct[Index].ImageBase + mImageStruct[Index].ImageSize))
221 return &mImageStruct[Index];
243 if (ImageStruct !=
NULL) {
244 return ImageStruct->ImageRef;
260 UINTN HandleBufferSize;
266 PHYSICAL_ADDRESS EntryPoint;
267 VOID *EntryPointInImage;
270 PHYSICAL_ADDRESS RealImageBase;
272 HandleBufferSize = 0;
274 Status =
gSmst->SmmLocateHandle (
276 &gEfiLoadedImageProtocolGuid,
281 if (Status != EFI_BUFFER_TOO_SMALL) {
286 if (HandleBuffer ==
NULL) {
290 Status =
gSmst->SmmLocateHandle (
292 &gEfiLoadedImageProtocolGuid,
297 if (EFI_ERROR (Status)) {
301 NoHandles = HandleBufferSize/
sizeof (
EFI_HANDLE);
302 mImageStructCountMax = (UINT32)NoHandles;
304 if (mImageStruct ==
NULL) {
308 for (Index = 0; Index < NoHandles; Index++) {
309 Status =
gSmst->SmmHandleProtocol (
311 &gEfiLoadedImageProtocolGuid,
312 (
VOID **)&LoadedImage
314 if (EFI_ERROR (Status)) {
320 DEBUG ((DEBUG_INFO,
"Image: %g ", &Guid));
324 RealImageBase = (
UINTN)LoadedImage->ImageBase;
325 if (LoadedImagePrivate->Signature == EFI_SMM_DRIVER_ENTRY_SIGNATURE) {
326 EntryPoint = LoadedImagePrivate->ImageEntryPoint;
327 if ((EntryPoint != 0) && ((EntryPoint < (
UINTN)LoadedImage->ImageBase) || (EntryPoint >= ((
UINTN)LoadedImage->ImageBase + LoadedImage->ImageSize)))) {
334 RealImageBase = (
UINTN)LoadedImage->ImageBase + EntryPoint - (
UINTN)EntryPointInImage;
338 DEBUG ((DEBUG_INFO,
"(0x%lx - 0x%lx", RealImageBase, LoadedImage->ImageSize));
339 if (EntryPoint != 0) {
340 DEBUG ((DEBUG_INFO,
", EntryPoint:0x%lx", EntryPoint));
343 DEBUG ((DEBUG_INFO,
")\n"));
345 if (RealImageBase != 0) {
346 PdbString = PeCoffLoaderGetPdbPointer ((
VOID *)(
UINTN)RealImageBase);
347 if (PdbString !=
NULL) {
348 DEBUG ((DEBUG_INFO,
" pdb - %a\n", PdbString));
354 DEBUG ((DEBUG_INFO,
" (%s)\n", PathStr));
356 AddImageStruct (RealImageBase, LoadedImage->ImageSize, EntryPoint, &Guid, PdbString);
380 if (
CompareGuid (HandlerType, &gEfiSmmSwDispatch2ProtocolGuid)) {
382 }
else if (
CompareGuid (HandlerType, &gEfiSmmSxDispatch2ProtocolGuid)) {
385 }
else if (
CompareGuid (HandlerType, &gEfiSmmPowerButtonDispatch2ProtocolGuid)) {
387 }
else if (
CompareGuid (HandlerType, &gEfiSmmStandbyButtonDispatch2ProtocolGuid)) {
389 }
else if (
CompareGuid (HandlerType, &gEfiSmmPeriodicTimerDispatch2ProtocolGuid)) {
392 }
else if (
CompareGuid (HandlerType, &gEfiSmmGpiDispatch2ProtocolGuid)) {
394 }
else if (
CompareGuid (HandlerType, &gEfiSmmIoTrapDispatch2ProtocolGuid)) {
398 }
else if (
CompareGuid (HandlerType, &gEfiSmmUsbDispatch2ProtocolGuid)) {
401 DEBUG ((DEBUG_INFO,
" UsbDevicePath - %s\n", Str));
406 DEBUG ((DEBUG_INFO,
" Context - "));
408 DEBUG ((DEBUG_INFO,
"\n"));
426 ListEntry = &SmiEntry->SmiHandlers;
427 for (ListEntry = ListEntry->ForwardLink;
428 ListEntry != &SmiEntry->SmiHandlers;
429 ListEntry = ListEntry->ForwardLink)
431 SmiHandler =
CR (ListEntry,
SMI_HANDLER, Link, SMI_HANDLER_SIGNATURE);
433 if (ImageStruct !=
NULL) {
434 DEBUG ((DEBUG_INFO,
" Module - %g", &ImageStruct->FileGuid));
437 if ((ImageStruct !=
NULL) && (ImageStruct->PdbString[0] != 0)) {
438 DEBUG ((DEBUG_INFO,
" (Pdb - %a)", ImageStruct->PdbString));
441 DEBUG ((DEBUG_INFO,
"\n"));
442 if (SmiHandler->ContextSize != 0) {
443 DumpSmiChildContext (&SmiEntry->HandlerType, SmiHandler->Context, SmiHandler->ContextSize);
446 DEBUG ((DEBUG_INFO,
" Handler - 0x%x", SmiHandler->Handler));
447 if (ImageStruct !=
NULL) {
448 DEBUG ((DEBUG_INFO,
" <== RVA - 0x%x", (
UINTN)SmiHandler->Handler - (
UINTN)ImageStruct->ImageBase));
451 DEBUG ((DEBUG_INFO,
"\n"));
452 DEBUG ((DEBUG_INFO,
" CallerAddr - 0x%x", SmiHandler->CallerAddr));
453 if (ImageStruct !=
NULL) {
454 DEBUG ((DEBUG_INFO,
" <== RVA - 0x%x", SmiHandler->CallerAddr - (
UINTN)ImageStruct->ImageBase));
457 DEBUG ((DEBUG_INFO,
"\n"));
476 ListEntry = SmiEntryList;
477 for (ListEntry = ListEntry->ForwardLink;
478 ListEntry != SmiEntryList;
479 ListEntry = ListEntry->ForwardLink)
481 SmiEntry =
CR (ListEntry,
SMI_ENTRY, AllEntries, SMI_ENTRY_SIGNATURE);
482 DEBUG ((DEBUG_INFO,
"SmiEntry - %g\n", &SmiEntry->HandlerType));
514 DEBUG ((DEBUG_INFO,
"##################\n"));
515 DEBUG ((DEBUG_INFO,
"# IMAGE DATABASE #\n"));
516 DEBUG ((DEBUG_INFO,
"##################\n"));
518 DEBUG ((DEBUG_INFO,
"\n"));
523 DEBUG ((DEBUG_INFO,
"########################\n"));
524 DEBUG ((DEBUG_INFO,
"# SMI Handler DATABASE #\n"));
525 DEBUG ((DEBUG_INFO,
"########################\n"));
527 DEBUG ((DEBUG_INFO,
"# 1. ROOT SMI Handler #\n"));
532 DEBUG ((DEBUG_INFO,
"# 2. GUID SMI Handler #\n"));
537 DEBUG ((DEBUG_INFO,
"# 3. Hardware SMI Handler #\n"));
542 DEBUG ((DEBUG_INFO,
"\n"));
546 if (mImageStruct !=
NULL) {
567 for (Index = 0; Index < mImageStructCount; Index++) {
591 ListEntry = &SmiEntry->SmiHandlers;
592 for (ListEntry = ListEntry->ForwardLink;
593 ListEntry != &SmiEntry->SmiHandlers;
594 ListEntry = ListEntry->ForwardLink)
596 SmiHandler =
CR (ListEntry,
SMI_HANDLER, Link, SMI_HANDLER_SIGNATURE);
620 ListEntry = SmiEntryList;
621 for (ListEntry = ListEntry->ForwardLink;
622 ListEntry != SmiEntryList;
623 ListEntry = ListEntry->ForwardLink)
625 SmiEntry =
CR (ListEntry,
SMI_ENTRY, AllEntries, SMI_ENTRY_SIGNATURE);
648 return mSmmImageDatabaseSize + mSmmSmiDatabaseSize + mSmmRootSmiDatabaseSize + mSmmHardwareSmiDatabaseSize;
671 for (Index = 0; Index < mImageStructCount; Index++) {
672 if (Size >= ExpectedSize) {
680 ImageStruct->Header.Signature = SMM_CORE_IMAGE_DATABASE_SIGNATURE;
682 ImageStruct->Header.Revision = SMM_CORE_IMAGE_DATABASE_REVISION;
683 CopyGuid (&ImageStruct->FileGuid, &mImageStruct[Index].FileGuid);
684 ImageStruct->ImageRef = mImageStruct[Index].ImageRef;
685 ImageStruct->EntryPoint = mImageStruct[Index].EntryPoint;
686 ImageStruct->ImageBase = mImageStruct[Index].ImageBase;
687 ImageStruct->ImageSize = mImageStruct[Index].ImageSize;
688 if (mImageStruct[Index].PdbStringSize != 0) {
690 CopyMem ((
VOID *)((
UINTN)ImageStruct + ImageStruct->PdbStringOffset), mImageStruct[Index].PdbString, mImageStruct[Index].PdbStringSize);
692 ImageStruct->PdbStringOffset = 0;
699 if (ExpectedSize != Size) {
729 SmiHandlerStruct = Data;
732 ListEntry = &SmiEntry->SmiHandlers;
733 for (ListEntry = ListEntry->ForwardLink;
734 ListEntry != &SmiEntry->SmiHandlers;
735 ListEntry = ListEntry->ForwardLink)
737 SmiHandler =
CR (ListEntry,
SMI_HANDLER, Link, SMI_HANDLER_SIGNATURE);
738 if (Size >= MaxSize) {
749 SmiHandlerStruct->CallerAddr = (
UINTN)SmiHandler->CallerAddr;
750 SmiHandlerStruct->Handler = (
UINTN)SmiHandler->Handler;
752 SmiHandlerStruct->ContextBufferSize = (UINT32)SmiHandler->ContextSize;
753 if (SmiHandler->ContextSize != 0) {
755 CopyMem ((UINT8 *)SmiHandlerStruct + SmiHandlerStruct->ContextBufferOffset, SmiHandler->Context, SmiHandler->ContextSize);
757 SmiHandlerStruct->ContextBufferOffset = 0;
781 IN UINT32 HandlerCategory,
790 UINTN SmiHandlerSize;
791 UINT32 SmiHandlerCount;
795 ListEntry = SmiEntryList;
796 for (ListEntry = ListEntry->ForwardLink;
797 ListEntry != SmiEntryList;
798 ListEntry = ListEntry->ForwardLink)
800 SmiEntry =
CR (ListEntry,
SMI_ENTRY, AllEntries, SMI_ENTRY_SIGNATURE);
801 if (Size >= ExpectedSize) {
809 SmiStruct->Header.Signature = SMM_CORE_SMI_DATABASE_SIGNATURE;
811 SmiStruct->Header.Revision = SMM_CORE_SMI_DATABASE_REVISION;
812 SmiStruct->HandlerCategory = HandlerCategory;
813 CopyGuid (&SmiStruct->HandlerType, &SmiEntry->HandlerType);
816 SmiStruct->HandlerCount = SmiHandlerCount;
817 Size += SmiHandlerSize;
818 SmiStruct->Header.Length += (UINT32)SmiHandlerSize;
819 SmiStruct = (
VOID *)((
UINTN)SmiStruct + SmiStruct->Header.Length);
822 if (ExpectedSize != Size) {
842 UINTN SmmImageDatabaseSize;
843 UINTN SmmSmiDatabaseSize;
844 UINTN SmmRootSmiDatabaseSize;
845 UINTN SmmHardwareSmiDatabaseSize;
847 DEBUG ((DEBUG_VERBOSE,
"GetSmiHandlerProfileDatabaseData\n"));
849 if (SmmImageDatabaseSize != mSmmImageDatabaseSize) {
850 DEBUG ((DEBUG_ERROR,
"GetSmiHandlerProfileDatabaseData - SmmImageDatabaseSize mismatch!\n"));
851 return EFI_INVALID_PARAMETER;
854 SmmRootSmiDatabaseSize =
GetSmmSmiDatabaseData (mSmmCoreRootSmiEntryList, SmmCoreSmiHandlerCategoryRootHandler, (UINT8 *)Data + SmmImageDatabaseSize, mSmmRootSmiDatabaseSize);
855 if (SmmRootSmiDatabaseSize != mSmmRootSmiDatabaseSize) {
856 DEBUG ((DEBUG_ERROR,
"GetSmiHandlerProfileDatabaseData - SmmRootSmiDatabaseSize mismatch!\n"));
857 return EFI_INVALID_PARAMETER;
860 SmmSmiDatabaseSize =
GetSmmSmiDatabaseData (mSmmCoreSmiEntryList, SmmCoreSmiHandlerCategoryGuidHandler, (UINT8 *)Data + SmmImageDatabaseSize + mSmmRootSmiDatabaseSize, mSmmSmiDatabaseSize);
861 if (SmmSmiDatabaseSize != mSmmSmiDatabaseSize) {
862 DEBUG ((DEBUG_ERROR,
"GetSmiHandlerProfileDatabaseData - SmmSmiDatabaseSize mismatch!\n"));
863 return EFI_INVALID_PARAMETER;
866 SmmHardwareSmiDatabaseSize =
GetSmmSmiDatabaseData (mSmmCoreHardwareSmiEntryList, SmmCoreSmiHandlerCategoryHardwareHandler, (UINT8 *)Data + SmmImageDatabaseSize + SmmRootSmiDatabaseSize + SmmSmiDatabaseSize, mSmmHardwareSmiDatabaseSize);
867 if (SmmHardwareSmiDatabaseSize != mSmmHardwareSmiDatabaseSize) {
868 DEBUG ((DEBUG_ERROR,
"GetSmiHandlerProfileDatabaseData - SmmHardwareSmiDatabaseSize mismatch!\n"));
869 return EFI_INVALID_PARAMETER;
886 mSmiHandlerProfileDatabase =
AllocatePool (mSmiHandlerProfileDatabaseSize);
887 if (mSmiHandlerProfileDatabase ==
NULL) {
892 if (EFI_ERROR (Status)) {
893 FreePool (mSmiHandlerProfileDatabase);
894 mSmiHandlerProfileDatabase =
NULL;
911 IN OUT UINT64 *DataSize,
912 IN OUT UINT64 *DataOffset
915 if (*DataOffset >= mSmiHandlerProfileDatabaseSize) {
916 *DataOffset = mSmiHandlerProfileDatabaseSize;
920 if (mSmiHandlerProfileDatabaseSize - *DataOffset < *DataSize) {
921 *DataSize = mSmiHandlerProfileDatabaseSize - *DataOffset;
926 (UINT8 *)mSmiHandlerProfileDatabase + *DataOffset,
929 *DataOffset = *DataOffset + *DataSize;
943 BOOLEAN SmiHandlerProfileRecordingStatus;
945 SmiHandlerProfileRecordingStatus = mSmiHandlerProfileRecordingStatus;
946 mSmiHandlerProfileRecordingStatus =
FALSE;
948 SmiHandlerProfileParameterGetInfo->DataSize = mSmiHandlerProfileDatabaseSize;
949 SmiHandlerProfileParameterGetInfo->Header.ReturnStatus = 0;
951 mSmiHandlerProfileRecordingStatus = SmiHandlerProfileRecordingStatus;
966 BOOLEAN SmiHandlerProfileRecordingStatus;
968 SmiHandlerProfileRecordingStatus = mSmiHandlerProfileRecordingStatus;
969 mSmiHandlerProfileRecordingStatus =
FALSE;
971 CopyMem (&SmiHandlerProfileGetDataByOffset, SmiHandlerProfileParameterGetDataByOffset,
sizeof (SmiHandlerProfileGetDataByOffset));
977 DEBUG ((DEBUG_ERROR,
"SmiHandlerProfileHandlerGetDataByOffset: SMI handler profile get data in SMRAM or overflow!\n"));
978 SmiHandlerProfileParameterGetDataByOffset->Header.ReturnStatus = (UINT64)(INT64)(
INTN)EFI_ACCESS_DENIED;
982 SmiHandlerProfileCopyData ((
VOID *)(
UINTN)SmiHandlerProfileGetDataByOffset.DataBuffer, &SmiHandlerProfileGetDataByOffset.DataSize, &SmiHandlerProfileGetDataByOffset.DataOffset);
983 CopyMem (SmiHandlerProfileParameterGetDataByOffset, &SmiHandlerProfileGetDataByOffset,
sizeof (SmiHandlerProfileGetDataByOffset));
984 SmiHandlerProfileParameterGetDataByOffset->Header.ReturnStatus = 0;
987 mSmiHandlerProfileRecordingStatus = SmiHandlerProfileRecordingStatus;
1015 UINTN TempCommBufferSize;
1017 DEBUG ((DEBUG_ERROR,
"SmiHandlerProfileHandler Enter\n"));
1019 if (mSmiHandlerProfileDatabase ==
NULL) {
1026 if ((CommBuffer ==
NULL) || (CommBufferSize ==
NULL)) {
1030 TempCommBufferSize = *CommBufferSize;
1033 DEBUG ((DEBUG_ERROR,
"SmiHandlerProfileHandler: SMM communication buffer size invalid!\n"));
1038 DEBUG ((DEBUG_ERROR,
"SmiHandlerProfileHandler: SMM communication buffer in SMRAM or overflow!\n"));
1043 SmiHandlerProfileParameterHeader->ReturnStatus = (UINT64)-1;
1045 switch (SmiHandlerProfileParameterHeader->Command) {
1046 case SMI_HANDLER_PROFILE_COMMAND_GET_INFO:
1047 DEBUG ((DEBUG_ERROR,
"SmiHandlerProfileHandlerGetInfo\n"));
1049 DEBUG ((DEBUG_ERROR,
"SmiHandlerProfileHandler: SMM communication buffer size invalid!\n"));
1055 case SMI_HANDLER_PROFILE_COMMAND_GET_DATA_BY_OFFSET:
1056 DEBUG ((DEBUG_ERROR,
"SmiHandlerProfileHandlerGetDataByOffset\n"));
1058 DEBUG ((DEBUG_ERROR,
"SmiHandlerProfileHandler: SMM communication buffer size invalid!\n"));
1068 DEBUG ((DEBUG_ERROR,
"SmiHandlerProfileHandler Exit\n"));
1084 Status =
gSmst->SmiHandlerRegister (
1086 &gSmiHandlerProfileGuid,
1114 for (Link = mHardwareSmiEntryList.ForwardLink;
1115 Link != &mHardwareSmiEntryList;
1116 Link = Link->ForwardLink)
1118 Item =
CR (Link,
SMI_ENTRY, AllEntries, SMI_ENTRY_SIGNATURE);
1119 if (
CompareGuid (&Item->HandlerType, HandlerType)) {
1132 if ((SmiEntry ==
NULL) && Create) {
1134 if (SmiEntry !=
NULL) {
1138 SmiEntry->Signature = SMI_ENTRY_SIGNATURE;
1139 CopyGuid ((
VOID *)&SmiEntry->HandlerType, HandlerType);
1165 OUT UINTN *SmiHandlerUsbContextSize
1168 UINTN DevicePathSize;
1175 if (SmiHandlerUsbContext ==
NULL) {
1176 *SmiHandlerUsbContextSize = 0;
1180 SmiHandlerUsbContext->Type = UsbContext->Type;
1181 SmiHandlerUsbContext->DevicePathSize = (UINT32)DevicePathSize;
1182 CopyMem (SmiHandlerUsbContext + 1, UsbContext->Device, DevicePathSize);
1184 return SmiHandlerUsbContext;
1208 if (SmiHandlerSwContext ==
NULL) {
1209 *SmiHandlerSwContextSize = 0;
1213 SmiHandlerSwContext->SwSmiInputValue = SwContext->SwSmiInputValue;
1215 return SmiHandlerSwContext;
1243 IN EFI_SMM_HANDLER_ENTRY_POINT2 Handler,
1244 IN PHYSICAL_ADDRESS CallerAddress,
1245 IN VOID *Context OPTIONAL,
1253 if (((ContextSize == 0) && (Context !=
NULL)) ||
1254 ((ContextSize != 0) && (Context ==
NULL)))
1256 return EFI_INVALID_PARAMETER;
1260 if (SmiHandler ==
NULL) {
1261 return EFI_OUT_OF_RESOURCES;
1264 SmiHandler->Signature = SMI_HANDLER_SIGNATURE;
1265 SmiHandler->Handler = Handler;
1266 SmiHandler->CallerAddr = (
UINTN)CallerAddress;
1267 SmiHandler->Context = Context;
1268 SmiHandler->ContextSize = ContextSize;
1270 if (Context !=
NULL) {
1271 if (
CompareGuid (HandlerGuid, &gEfiSmmUsbDispatch2ProtocolGuid)) {
1273 }
else if (
CompareGuid (HandlerGuid, &gEfiSmmSwDispatch2ProtocolGuid)) {
1280 if (SmiHandler->Context ==
NULL) {
1281 SmiHandler->ContextSize = 0;
1285 if (SmiEntry ==
NULL) {
1286 if (SmiHandler->Context !=
NULL) {
1291 return EFI_OUT_OF_RESOURCES;
1294 List = &SmiEntry->SmiHandlers;
1296 SmiHandler->SmiEntry = SmiEntry;
1324 IN EFI_SMM_HANDLER_ENTRY_POINT2 Handler,
1325 IN VOID *Context OPTIONAL,
1334 VOID *SearchContext;
1335 UINTN SearchContextSize;
1337 if (((ContextSize == 0) && (Context !=
NULL)) ||
1338 ((ContextSize != 0) && (Context ==
NULL)))
1340 return EFI_INVALID_PARAMETER;
1344 if (SmiEntry ==
NULL) {
1345 return EFI_NOT_FOUND;
1348 SearchContext = Context;
1349 SearchContextSize = ContextSize;
1350 if (Context !=
NULL) {
1351 if (
CompareGuid (HandlerGuid, &gEfiSmmUsbDispatch2ProtocolGuid)) {
1353 }
else if (
CompareGuid (HandlerGuid, &gEfiSmmSwDispatch2ProtocolGuid)) {
1358 TargetSmiHandler =
NULL;
1359 Head = &SmiEntry->SmiHandlers;
1360 for (Link = Head->ForwardLink; Link != Head; Link = Link->ForwardLink) {
1361 SmiHandler =
CR (Link,
SMI_HANDLER, Link, SMI_HANDLER_SIGNATURE);
1362 if (SmiHandler->Handler == Handler) {
1363 if ((SearchContext ==
NULL) ||
1364 ((SearchContextSize == SmiHandler->ContextSize) && (
CompareMem (SearchContext, SmiHandler->Context, SearchContextSize) == 0)))
1366 TargetSmiHandler = SmiHandler;
1372 if (SearchContext !=
NULL) {
1373 if (
CompareGuid (HandlerGuid, &gEfiSmmUsbDispatch2ProtocolGuid)) {
1378 if (TargetSmiHandler ==
NULL) {
1379 return EFI_NOT_FOUND;
1382 SmiHandler = TargetSmiHandler;
1385 if (SmiHandler->Context !=
NULL) {
1411 if ((
PcdGet8 (PcdSmiHandlerProfilePropertyMask) & 0x1) != 0) {
1414 Status =
gSmst->SmmRegisterProtocolNotify (
1415 &gEfiSmmReadyToLockProtocolGuid,
1424 &gSmiHandlerProfileGuid,
BOOLEAN EFIAPI IsListEmpty(IN CONST LIST_ENTRY *ListHead)
LIST_ENTRY *EFIAPI RemoveEntryList(IN CONST LIST_ENTRY *Entry)
LIST_ENTRY *EFIAPI InitializeListHead(IN OUT LIST_ENTRY *ListHead)
#define INITIALIZE_LIST_HEAD_VARIABLE(ListHead)
UINTN EFIAPI AsciiStrSize(IN CONST CHAR8 *String)
LIST_ENTRY *EFIAPI InsertTailList(IN OUT LIST_ENTRY *ListHead, IN OUT LIST_ENTRY *Entry)
INTN EFIAPI CompareMem(IN CONST VOID *DestinationBuffer, IN CONST VOID *SourceBuffer, IN UINTN Length)
VOID *EFIAPI CopyMem(OUT VOID *DestinationBuffer, IN CONST VOID *SourceBuffer, IN UINTN Length)
BOOLEAN EFIAPI CompareGuid(IN CONST GUID *Guid1, IN CONST GUID *Guid2)
GUID *EFIAPI CopyGuid(OUT GUID *DestinationGuid, IN CONST GUID *SourceGuid)
VOID *EFIAPI ZeroMem(OUT VOID *Buffer, IN UINTN Length)
#define MEDIA_PIWG_FW_FILE_DP
UINT8 EFIAPI DevicePathType(IN CONST VOID *Node)
UINT8 EFIAPI DevicePathSubType(IN CONST VOID *Node)
CHAR16 *EFIAPI ConvertDevicePathToText(IN CONST EFI_DEVICE_PATH_PROTOCOL *DevicePath, IN BOOLEAN DisplayOnly, IN BOOLEAN AllowShortcuts)
UINTN EFIAPI GetDevicePathSize(IN CONST EFI_DEVICE_PATH_PROTOCOL *DevicePath)
VOID *EFIAPI AllocateZeroPool(IN UINTN AllocationSize)
VOID EFIAPI FreePool(IN VOID *Buffer)
VOID *EFIAPI AllocateCopyPool(IN UINTN AllocationSize, IN CONST VOID *Buffer)
#define GLOBAL_REMOVE_IF_UNREFERENCED
#define BASE_CR(Record, TYPE, Field)
#define ASSERT_EFI_ERROR(StatusParameter)
#define DEBUG(Expression)
#define CR(Record, TYPE, Field, TestSignature)
#define DEBUG_CODE(Expression)
#define PcdGet8(TokenName)
EFI_SMM_SYSTEM_TABLE2 * gSmst
VOID *EFIAPI AllocatePool(IN UINTN AllocationSize)
VOID InternalDumpData(IN UINT8 *Data, IN UINTN Size)
UINTN GetSmmSmiDatabaseSize(IN LIST_ENTRY *SmiEntryList)
VOID RegisterSmiHandlerProfileHandler(VOID)
VOID SmmCoreInitializeSmiHandlerProfile(VOID)
SMI_ENTRY * SmmCoreFindHardwareSmiEntry(IN EFI_GUID *HandlerType, IN BOOLEAN Create)
SMI_HANDLER_PROFILE_SW_REGISTER_CONTEXT * ConvertSmiHandlerSwContext(IN EFI_SMM_SW_REGISTER_CONTEXT *SwContext, IN UINTN SwContextSize, OUT UINTN *SmiHandlerSwContextSize)
UINTN GetSmiHandlerProfileDatabaseSize(VOID)
UINT32 AddressToImageRef(IN UINTN Address)
VOID GetSmmLoadedImage(VOID)
VOID SmiHandlerProfileHandlerGetDataByOffset(IN SMI_HANDLER_PROFILE_PARAMETER_GET_DATA_BY_OFFSET *SmiHandlerProfileParameterGetDataByOffset)
EFI_STATUS GetSmiHandlerProfileDatabaseData(IN OUT VOID *Data)
SMI_HANDLER_PROFILE_USB_REGISTER_CONTEXT * ConvertSmiHandlerUsbContext(IN EFI_SMM_USB_REGISTER_CONTEXT *UsbContext, IN UINTN UsbContextSize, OUT UINTN *SmiHandlerUsbContextSize)
EFI_STATUS EFIAPI SmiHandlerProfileRegisterHandler(IN SMI_HANDLER_PROFILE_PROTOCOL *This, IN EFI_GUID *HandlerGuid, IN EFI_SMM_HANDLER_ENTRY_POINT2 Handler, IN PHYSICAL_ADDRESS CallerAddress, IN VOID *Context OPTIONAL, IN UINTN ContextSize OPTIONAL)
UINTN GetSmmSmiDatabaseData(IN LIST_ENTRY *SmiEntryList, IN UINT32 HandlerCategory, IN OUT VOID *Data, IN UINTN ExpectedSize)
VOID AddImageStruct(IN PHYSICAL_ADDRESS ImageBase, IN UINT64 ImageSize, IN PHYSICAL_ADDRESS EntryPoint, IN EFI_GUID *Guid, IN CHAR8 *PdbString)
UINTN GetSmmSmiHandlerDataOnSmiEntry(IN SMI_ENTRY *SmiEntry, IN OUT VOID *Data, IN UINTN MaxSize, OUT UINT32 *Count)
VOID DumpSmiHandlerOnSmiEntry(IN SMI_ENTRY *SmiEntry)
UINTN GetSmmImageDatabaseData(IN OUT VOID *Data, IN UINTN ExpectedSize)
VOID DumpSmiEntryList(IN LIST_ENTRY *SmiEntryList)
UINTN GetSmmSmiHandlerSizeOnSmiEntry(IN SMI_ENTRY *SmiEntry)
VOID SmiHandlerProfileCopyData(OUT VOID *DataBuffer, IN OUT UINT64 *DataSize, IN OUT UINT64 *DataOffset)
UINTN GetSmmImageDatabaseSize(VOID)
VOID BuildSmiHandlerProfileDatabase(VOID)
VOID SmiHandlerProfileHandlerGetInfo(IN SMI_HANDLER_PROFILE_PARAMETER_GET_INFO *SmiHandlerProfileParameterGetInfo)
EFI_STATUS EFIAPI SmiHandlerProfileUnregisterHandler(IN SMI_HANDLER_PROFILE_PROTOCOL *This, IN EFI_GUID *HandlerGuid, IN EFI_SMM_HANDLER_ENTRY_POINT2 Handler, IN VOID *Context OPTIONAL, IN UINTN ContextSize OPTIONAL)
RETURN_STATUS InternalPeCoffGetEntryPoint(IN VOID *Pe32Data, OUT VOID **EntryPoint)
VOID DumpSmiChildContext(IN EFI_GUID *HandlerType, IN VOID *Context, IN UINTN ContextSize)
IMAGE_STRUCT * AddressToImageStruct(IN UINTN Address)
EFI_STATUS EFIAPI SmmReadyToLockInSmiHandlerProfile(IN CONST EFI_GUID *Protocol, IN VOID *Interface, IN EFI_HANDLE Handle)
EFI_STATUS EFIAPI SmiHandlerProfileHandler(IN EFI_HANDLE DispatchHandle, IN CONST VOID *Context OPTIONAL, IN OUT VOID *CommBuffer OPTIONAL, IN OUT UINTN *CommBufferSize OPTIONAL)
VOID GetDriverGuid(IN EFI_LOADED_IMAGE_PROTOCOL *LoadedImage, OUT EFI_GUID *Guid)
BOOLEAN EFIAPI SmmIsBufferOutsideSmmValid(IN EFI_PHYSICAL_ADDRESS Buffer, IN UINT64 Length)
EFI_INSTALL_PROTOCOL_INTERFACE SmmInstallProtocolInterface