Changeset 99404 in vbox for trunk/src/VBox/Devices/EFI/FirmwareNew/MdeModulePkg/Application/SmiHandlerProfileInfo/SmiHandlerProfileInfo.c
- Timestamp:
- Apr 14, 2023 3:17:44 PM (2 years ago)
- svn:sync-xref-src-repo-rev:
- 156854
- Location:
- trunk/src/VBox/Devices/EFI/FirmwareNew
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Devices/EFI/FirmwareNew
-
Property svn:mergeinfo
changed from (toggle deleted branches)
to (toggle deleted branches)/vendor/edk2/current 103735-103757,103769-103776,129194-145445 /vendor/edk2/current 103735-103757,103769-103776,129194-156846
-
Property svn:mergeinfo
changed from (toggle deleted branches)
-
trunk/src/VBox/Devices/EFI/FirmwareNew/MdeModulePkg/Application/SmiHandlerProfileInfo/SmiHandlerProfileInfo.c
r85718 r99404 24 24 25 25 #define PROFILE_NAME_STRING_LENGTH 64 26 CHAR8 mNameString[PROFILE_NAME_STRING_LENGTH + 1];26 CHAR8 mNameString[PROFILE_NAME_STRING_LENGTH + 1]; 27 27 28 28 VOID *mSmiHandlerProfileDatabase; … … 42 42 { 43 43 UINTN Index; 44 44 45 for (Index = 0; Index < Size; Index++) { 45 46 Print (L"%02x", (UINTN)Data[Index]); … … 54 55 **/ 55 56 VOID 56 GetSmiHandlerProfileDatabase (57 GetSmiHandlerProfileDatabase ( 57 58 VOID 58 59 ) 59 60 { 60 EFI_STATUS 61 UINTN 62 UINT8 63 EFI_SMM_COMMUNICATE_HEADER 64 SMI_HANDLER_PROFILE_PARAMETER_GET_INFO 65 SMI_HANDLER_PROFILE_PARAMETER_GET_DATA_BY_OFFSET 66 EFI_SMM_COMMUNICATION_PROTOCOL 67 UINTN 68 EDKII_PI_SMM_COMMUNICATION_REGION_TABLE 69 UINT32 70 EFI_MEMORY_DESCRIPTOR 71 VOID 72 UINTN 73 UINTN 74 75 Status = gBS->LocateProtocol (&gEfiSmmCommunicationProtocolGuid, NULL, (VOID **)&SmmCommunication);76 if (EFI_ERROR (Status)) {77 Print (L"SmiHandlerProfile: Locate SmmCommunication protocol - %r\n", Status);78 return 61 EFI_STATUS Status; 62 UINTN CommSize; 63 UINT8 *CommBuffer; 64 EFI_SMM_COMMUNICATE_HEADER *CommHeader; 65 SMI_HANDLER_PROFILE_PARAMETER_GET_INFO *CommGetInfo; 66 SMI_HANDLER_PROFILE_PARAMETER_GET_DATA_BY_OFFSET *CommGetData; 67 EFI_SMM_COMMUNICATION_PROTOCOL *SmmCommunication; 68 UINTN MinimalSizeNeeded; 69 EDKII_PI_SMM_COMMUNICATION_REGION_TABLE *PiSmmCommunicationRegionTable; 70 UINT32 Index; 71 EFI_MEMORY_DESCRIPTOR *Entry; 72 VOID *Buffer; 73 UINTN Size; 74 UINTN Offset; 75 76 Status = gBS->LocateProtocol (&gEfiSmmCommunicationProtocolGuid, NULL, (VOID **)&SmmCommunication); 77 if (EFI_ERROR (Status)) { 78 Print (L"SmiHandlerProfile: Locate SmmCommunication protocol - %r\n", Status); 79 return; 79 80 } 80 81 81 82 MinimalSizeNeeded = EFI_PAGE_SIZE; 82 83 83 Status = EfiGetSystemConfigurationTable (84 Status = EfiGetSystemConfigurationTable ( 84 85 &gEdkiiPiSmmCommunicationRegionTableGuid, 85 86 (VOID **)&PiSmmCommunicationRegionTable 86 87 ); 87 if (EFI_ERROR(Status)) { 88 Print(L"SmiHandlerProfile: Get PiSmmCommunicationRegionTable - %r\n", Status); 89 return ; 90 } 91 ASSERT(PiSmmCommunicationRegionTable != NULL); 88 if (EFI_ERROR (Status)) { 89 Print (L"SmiHandlerProfile: Get PiSmmCommunicationRegionTable - %r\n", Status); 90 return; 91 } 92 93 ASSERT (PiSmmCommunicationRegionTable != NULL); 92 94 Entry = (EFI_MEMORY_DESCRIPTOR *)(PiSmmCommunicationRegionTable + 1); 93 Size = 0;95 Size = 0; 94 96 for (Index = 0; Index < PiSmmCommunicationRegionTable->NumberOfEntries; Index++) { 95 97 if (Entry->Type == EfiConventionalMemory) { 96 Size = EFI_PAGES_TO_SIZE ((UINTN)Entry->NumberOfPages);98 Size = EFI_PAGES_TO_SIZE ((UINTN)Entry->NumberOfPages); 97 99 if (Size >= MinimalSizeNeeded) { 98 100 break; 99 101 } 100 102 } 103 101 104 Entry = (EFI_MEMORY_DESCRIPTOR *)((UINT8 *)Entry + PiSmmCommunicationRegionTable->DescriptorSize); 102 105 } 103 ASSERT(Index < PiSmmCommunicationRegionTable->NumberOfEntries); 106 107 ASSERT (Index < PiSmmCommunicationRegionTable->NumberOfEntries); 104 108 CommBuffer = (UINT8 *)(UINTN)Entry->PhysicalStart; 105 109 … … 108 112 // 109 113 CommHeader = (EFI_SMM_COMMUNICATE_HEADER *)&CommBuffer[0]; 110 CopyMem (&CommHeader->HeaderGuid, &gSmiHandlerProfileGuid, sizeof(gSmiHandlerProfileGuid));111 CommHeader->MessageLength = sizeof (SMI_HANDLER_PROFILE_PARAMETER_GET_INFO);112 113 CommGetInfo = (SMI_HANDLER_PROFILE_PARAMETER_GET_INFO *)&CommBuffer[OFFSET_OF(EFI_SMM_COMMUNICATE_HEADER, Data)];114 CommGetInfo->Header.Command = SMI_HANDLER_PROFILE_COMMAND_GET_INFO;115 CommGetInfo->Header.DataLength = sizeof(*CommGetInfo);114 CopyMem (&CommHeader->HeaderGuid, &gSmiHandlerProfileGuid, sizeof (gSmiHandlerProfileGuid)); 115 CommHeader->MessageLength = sizeof (SMI_HANDLER_PROFILE_PARAMETER_GET_INFO); 116 117 CommGetInfo = (SMI_HANDLER_PROFILE_PARAMETER_GET_INFO *)&CommBuffer[OFFSET_OF (EFI_SMM_COMMUNICATE_HEADER, Data)]; 118 CommGetInfo->Header.Command = SMI_HANDLER_PROFILE_COMMAND_GET_INFO; 119 CommGetInfo->Header.DataLength = sizeof (*CommGetInfo); 116 120 CommGetInfo->Header.ReturnStatus = (UINT64)-1; 117 CommGetInfo->DataSize = 0;118 119 CommSize = sizeof (EFI_GUID) + sizeof(UINTN) + CommHeader->MessageLength;120 Status = SmmCommunication->Communicate(SmmCommunication, CommBuffer, &CommSize);121 if (EFI_ERROR (Status)) {122 Print (L"SmiHandlerProfile: SmmCommunication - %r\n", Status);123 return 121 CommGetInfo->DataSize = 0; 122 123 CommSize = sizeof (EFI_GUID) + sizeof (UINTN) + CommHeader->MessageLength; 124 Status = SmmCommunication->Communicate (SmmCommunication, CommBuffer, &CommSize); 125 if (EFI_ERROR (Status)) { 126 Print (L"SmiHandlerProfile: SmmCommunication - %r\n", Status); 127 return; 124 128 } 125 129 126 130 if (CommGetInfo->Header.ReturnStatus != 0) { 127 Print (L"SmiHandlerProfile: GetInfo - 0x%0x\n", CommGetInfo->Header.ReturnStatus);128 return 131 Print (L"SmiHandlerProfile: GetInfo - 0x%0x\n", CommGetInfo->Header.ReturnStatus); 132 return; 129 133 } 130 134 … … 134 138 // Get Data 135 139 // 136 mSmiHandlerProfileDatabase = AllocateZeroPool (mSmiHandlerProfileDatabaseSize);140 mSmiHandlerProfileDatabase = AllocateZeroPool (mSmiHandlerProfileDatabaseSize); 137 141 if (mSmiHandlerProfileDatabase == NULL) { 138 142 Status = EFI_OUT_OF_RESOURCES; 139 Print (L"SmiHandlerProfile: AllocateZeroPool (0x%x) for dump buffer - %r\n", mSmiHandlerProfileDatabaseSize, Status);140 return 143 Print (L"SmiHandlerProfile: AllocateZeroPool (0x%x) for dump buffer - %r\n", mSmiHandlerProfileDatabaseSize, Status); 144 return; 141 145 } 142 146 143 147 CommHeader = (EFI_SMM_COMMUNICATE_HEADER *)&CommBuffer[0]; 144 CopyMem (&CommHeader->HeaderGuid, &gSmiHandlerProfileGuid, sizeof(gSmiHandlerProfileGuid));145 CommHeader->MessageLength = sizeof (SMI_HANDLER_PROFILE_PARAMETER_GET_DATA_BY_OFFSET);146 147 CommGetData = (SMI_HANDLER_PROFILE_PARAMETER_GET_DATA_BY_OFFSET *)&CommBuffer[OFFSET_OF(EFI_SMM_COMMUNICATE_HEADER, Data)];148 CommGetData->Header.Command = SMI_HANDLER_PROFILE_COMMAND_GET_DATA_BY_OFFSET;149 CommGetData->Header.DataLength = sizeof(*CommGetData);148 CopyMem (&CommHeader->HeaderGuid, &gSmiHandlerProfileGuid, sizeof (gSmiHandlerProfileGuid)); 149 CommHeader->MessageLength = sizeof (SMI_HANDLER_PROFILE_PARAMETER_GET_DATA_BY_OFFSET); 150 151 CommGetData = (SMI_HANDLER_PROFILE_PARAMETER_GET_DATA_BY_OFFSET *)&CommBuffer[OFFSET_OF (EFI_SMM_COMMUNICATE_HEADER, Data)]; 152 CommGetData->Header.Command = SMI_HANDLER_PROFILE_COMMAND_GET_DATA_BY_OFFSET; 153 CommGetData->Header.DataLength = sizeof (*CommGetData); 150 154 CommGetData->Header.ReturnStatus = (UINT64)-1; 151 155 152 CommSize = sizeof (EFI_GUID) + sizeof(UINTN) + CommHeader->MessageLength;153 Buffer = (UINT8 *)CommHeader + CommSize;154 Size -= CommSize;156 CommSize = sizeof (EFI_GUID) + sizeof (UINTN) + CommHeader->MessageLength; 157 Buffer = (UINT8 *)CommHeader + CommSize; 158 Size -= CommSize; 155 159 156 160 CommGetData->DataBuffer = (PHYSICAL_ADDRESS)(UINTN)Buffer; … … 163 167 CommGetData->DataSize = (UINT64)(mSmiHandlerProfileDatabaseSize - CommGetData->DataOffset); 164 168 } 165 Status = SmmCommunication->Communicate(SmmCommunication, CommBuffer, &CommSize); 166 ASSERT_EFI_ERROR(Status); 169 170 Status = SmmCommunication->Communicate (SmmCommunication, CommBuffer, &CommSize); 171 ASSERT_EFI_ERROR (Status); 167 172 168 173 if (CommGetData->Header.ReturnStatus != 0) { 169 FreePool (mSmiHandlerProfileDatabase);174 FreePool (mSmiHandlerProfileDatabase); 170 175 mSmiHandlerProfileDatabase = NULL; 171 Print(L"SmiHandlerProfile: GetData - 0x%x\n", CommGetData->Header.ReturnStatus); 172 return ; 173 } 174 CopyMem((UINT8 *)mSmiHandlerProfileDatabase + Offset, (VOID *)(UINTN)CommGetData->DataBuffer, (UINTN)CommGetData->DataSize); 176 Print (L"SmiHandlerProfile: GetData - 0x%x\n", CommGetData->Header.ReturnStatus); 177 return; 178 } 179 180 CopyMem ((UINT8 *)mSmiHandlerProfileDatabase + Offset, (VOID *)(UINTN)CommGetData->DataBuffer, (UINTN)CommGetData->DataSize); 175 181 } 176 182 177 183 DEBUG ((DEBUG_INFO, "SmiHandlerProfileSize - 0x%x\n", mSmiHandlerProfileDatabaseSize)); 178 184 179 return 185 return; 180 186 } 181 187 … … 194 200 VOID 195 201 GetShortPdbFileName ( 196 IN CHAR8 197 OUT CHAR8 198 ) 199 { 200 UINTN IndexPdb;// Current work location within a Pdb string.201 UINTN IndexBuffer;// Current work location within a Buffer string.202 UINTN StartIndex;203 UINTN EndIndex;202 IN CHAR8 *PdbFileName, 203 OUT CHAR8 *AsciiBuffer 204 ) 205 { 206 UINTN IndexPdb; // Current work location within a Pdb string. 207 UINTN IndexBuffer; // Current work location within a Buffer string. 208 UINTN StartIndex; 209 UINTN EndIndex; 204 210 205 211 ZeroMem (AsciiBuffer, PROFILE_NAME_STRING_LENGTH + 1); … … 209 215 } else { 210 216 StartIndex = 0; 211 for (EndIndex = 0; PdbFileName[EndIndex] != 0; EndIndex++); 217 for (EndIndex = 0; PdbFileName[EndIndex] != 0; EndIndex++) { 218 } 219 212 220 for (IndexPdb = 0; PdbFileName[IndexPdb] != 0; IndexPdb++) { 213 221 if ((PdbFileName[IndexPdb] == '\\') || (PdbFileName[IndexPdb] == '/')) { … … 249 257 ) 250 258 { 251 EFI_STATUS 252 CHAR16 253 UINTN 259 EFI_STATUS Status; 260 CHAR16 *NameString; 261 UINTN StringSize; 254 262 255 263 if (ImageStruct == NULL) { … … 261 269 // 262 270 if (ImageStruct->PdbStringOffset != 0) { 263 GetShortPdbFileName ((CHAR8 *) ((UINTN)ImageStruct + ImageStruct->PdbStringOffset), mNameString);271 GetShortPdbFileName ((CHAR8 *)((UINTN)ImageStruct + ImageStruct->PdbStringOffset), mNameString); 264 272 return mNameString; 265 273 } … … 271 279 NameString = NULL; 272 280 StringSize = 0; 273 Status = GetSectionFromAnyFv (274 &ImageStruct->FileGuid,275 EFI_SECTION_USER_INTERFACE,276 0,277 (VOID **)&NameString,278 &StringSize279 );281 Status = GetSectionFromAnyFv ( 282 &ImageStruct->FileGuid, 283 EFI_SECTION_USER_INTERFACE, 284 0, 285 (VOID **)&NameString, 286 &StringSize 287 ); 280 288 if (!EFI_ERROR (Status)) { 281 289 // … … 285 293 NameString[PROFILE_NAME_STRING_LENGTH] = 0; 286 294 } 295 287 296 UnicodeStrToAsciiStrS (NameString, mNameString, sizeof (mNameString)); 288 297 FreePool (NameString); … … 307 316 SMM_CORE_IMAGE_DATABASE_STRUCTURE * 308 317 GetImageFromRef ( 309 IN UINTN ImageRef318 IN UINTN ImageRef 310 319 ) 311 320 { … … 319 328 } 320 329 } 330 321 331 ImageStruct = (VOID *)((UINTN)ImageStruct + ImageStruct->Header.Length); 322 332 } … … 329 339 **/ 330 340 VOID 331 DumpSmmLoadedImage (341 DumpSmmLoadedImage ( 332 342 VOID 333 343 ) … … 341 351 if (ImageStruct->Header.Signature == SMM_CORE_IMAGE_DATABASE_SIGNATURE) { 342 352 NameString = GetDriverNameString (ImageStruct); 343 Print (L" <Image Name=\"%a\"", NameString);344 Print (L" Base=\"0x%lx\" Size=\"0x%lx\"", ImageStruct->ImageBase, ImageStruct->ImageSize);353 Print (L" <Image Name=\"%a\"", NameString); 354 Print (L" Base=\"0x%lx\" Size=\"0x%lx\"", ImageStruct->ImageBase, ImageStruct->ImageSize); 345 355 if (ImageStruct->EntryPoint != 0) { 346 Print(L" EntryPoint=\"0x%lx\"", ImageStruct->EntryPoint); 347 } 348 Print(L" FvFile=\"%g\"", &ImageStruct->FileGuid); 349 Print(L" RefId=\"0x%x\"", ImageStruct->ImageRef); 350 Print(L">\n"); 356 Print (L" EntryPoint=\"0x%lx\"", ImageStruct->EntryPoint); 357 } 358 359 Print (L" FvFile=\"%g\"", &ImageStruct->FileGuid); 360 Print (L" RefId=\"0x%x\"", ImageStruct->ImageRef); 361 Print (L">\n"); 351 362 if (ImageStruct->PdbStringOffset != 0) { 352 363 PdbString = (CHAR8 *)((UINTN)ImageStruct + ImageStruct->PdbStringOffset); 353 Print(L" <Pdb>%a</Pdb>\n", PdbString); 354 } 355 Print(L" </Image>\n"); 364 Print (L" <Pdb>%a</Pdb>\n", PdbString); 365 } 366 367 Print (L" </Image>\n"); 356 368 } 357 369 … … 362 374 } 363 375 364 CHAR8 *mSxTypeString[] = {376 CHAR8 *mSxTypeString[] = { 365 377 "SxS0", 366 378 "SxS1", … … 383 395 ) 384 396 { 385 if ( Type >= 0 && Type < ARRAY_SIZE(mSxTypeString)) {397 if ((Type >= 0) && (Type < ARRAY_SIZE (mSxTypeString))) { 386 398 return mSxTypeString[Type]; 387 399 } else { 388 AsciiSPrint (mNameString, sizeof (mNameString), "0x%x", Type);400 AsciiSPrint (mNameString, sizeof (mNameString), "0x%x", Type); 389 401 return mNameString; 390 402 } 391 403 } 392 404 393 CHAR8 *mSxPhaseString[] = {405 CHAR8 *mSxPhaseString[] = { 394 406 "SxEntry", 395 407 "SxExit", … … 405 417 CHAR8 * 406 418 SxPhaseToString ( 407 IN EFI_SLEEP_PHASE Phase408 ) 409 { 410 if ( Phase >= 0 && Phase < ARRAY_SIZE(mSxPhaseString)) {419 IN EFI_SLEEP_PHASE Phase 420 ) 421 { 422 if ((Phase >= 0) && (Phase < ARRAY_SIZE (mSxPhaseString))) { 411 423 return mSxPhaseString[Phase]; 412 424 } else { 413 AsciiSPrint (mNameString, sizeof (mNameString), "0x%x", Phase);425 AsciiSPrint (mNameString, sizeof (mNameString), "0x%x", Phase); 414 426 return mNameString; 415 427 } 416 428 } 417 429 418 CHAR8 *mPowerButtonPhaseString[] = {430 CHAR8 *mPowerButtonPhaseString[] = { 419 431 "PowerButtonEntry", 420 432 "PowerButtonExit", … … 433 445 ) 434 446 { 435 if ( Phase >= 0 && Phase < ARRAY_SIZE(mPowerButtonPhaseString)) {447 if ((Phase >= 0) && (Phase < ARRAY_SIZE (mPowerButtonPhaseString))) { 436 448 return mPowerButtonPhaseString[Phase]; 437 449 } else { 438 AsciiSPrint (mNameString, sizeof (mNameString), "0x%x", Phase);450 AsciiSPrint (mNameString, sizeof (mNameString), "0x%x", Phase); 439 451 return mNameString; 440 452 } 441 453 } 442 454 443 CHAR8 *mStandbyButtonPhaseString[] = {455 CHAR8 *mStandbyButtonPhaseString[] = { 444 456 "StandbyButtonEntry", 445 457 "StandbyButtonExit", … … 458 470 ) 459 471 { 460 if ( Phase >= 0 && Phase < ARRAY_SIZE(mStandbyButtonPhaseString)) {472 if ((Phase >= 0) && (Phase < ARRAY_SIZE (mStandbyButtonPhaseString))) { 461 473 return mStandbyButtonPhaseString[Phase]; 462 474 } else { 463 AsciiSPrint (mNameString, sizeof (mNameString), "0x%x", Phase);475 AsciiSPrint (mNameString, sizeof (mNameString), "0x%x", Phase); 464 476 return mNameString; 465 477 } 466 478 } 467 479 468 CHAR8 *mIoTrapTypeString[] = {480 CHAR8 *mIoTrapTypeString[] = { 469 481 "WriteTrap", 470 482 "ReadTrap", … … 484 496 ) 485 497 { 486 if ( Type >= 0 && Type < ARRAY_SIZE(mIoTrapTypeString)) {498 if ((Type >= 0) && (Type < ARRAY_SIZE (mIoTrapTypeString))) { 487 499 return mIoTrapTypeString[Type]; 488 500 } else { 489 AsciiSPrint (mNameString, sizeof (mNameString), "0x%x", Type);501 AsciiSPrint (mNameString, sizeof (mNameString), "0x%x", Type); 490 502 return mNameString; 491 503 } 492 504 } 493 505 494 CHAR8 *mUsbTypeString[] = {506 CHAR8 *mUsbTypeString[] = { 495 507 "UsbLegacy", 496 508 "UsbWake", … … 506 518 CHAR8 * 507 519 UsbTypeToString ( 508 IN EFI_USB_SMI_TYPE 509 ) 510 { 511 if ( Type >= 0 && Type < ARRAY_SIZE(mUsbTypeString)) {520 IN EFI_USB_SMI_TYPE Type 521 ) 522 { 523 if ((Type >= 0) && (Type < ARRAY_SIZE (mUsbTypeString))) { 512 524 return mUsbTypeString[Type]; 513 525 } else { 514 AsciiSPrint (mNameString, sizeof (mNameString), "0x%x", Type);526 AsciiSPrint (mNameString, sizeof (mNameString), "0x%x", Type); 515 527 return mNameString; 516 528 } … … 526 538 VOID 527 539 DumpSmiChildContext ( 528 IN EFI_GUID 529 IN VOID 530 IN UINTN 531 ) 532 { 533 CHAR16 540 IN EFI_GUID *HandlerType, 541 IN VOID *Context, 542 IN UINTN ContextSize 543 ) 544 { 545 CHAR16 *Str; 534 546 535 547 if (CompareGuid (HandlerType, &gEfiSmmSwDispatch2ProtocolGuid)) { 536 Print (L" SwSmi=\"0x%lx\"", ((SMI_HANDLER_PROFILE_SW_REGISTER_CONTEXT *)Context)->SwSmiInputValue);548 Print (L" SwSmi=\"0x%lx\"", ((SMI_HANDLER_PROFILE_SW_REGISTER_CONTEXT *)Context)->SwSmiInputValue); 537 549 } else if (CompareGuid (HandlerType, &gEfiSmmSxDispatch2ProtocolGuid)) { 538 Print (L" SxType=\"%a\"", SxTypeToString(((EFI_SMM_SX_REGISTER_CONTEXT *)Context)->Type));539 Print (L" SxPhase=\"%a\"", SxPhaseToString(((EFI_SMM_SX_REGISTER_CONTEXT *)Context)->Phase));550 Print (L" SxType=\"%a\"", SxTypeToString (((EFI_SMM_SX_REGISTER_CONTEXT *)Context)->Type)); 551 Print (L" SxPhase=\"%a\"", SxPhaseToString (((EFI_SMM_SX_REGISTER_CONTEXT *)Context)->Phase)); 540 552 } else if (CompareGuid (HandlerType, &gEfiSmmPowerButtonDispatch2ProtocolGuid)) { 541 Print (L" PowerButtonPhase=\"%a\"", PowerButtonPhaseToString(((EFI_SMM_POWER_BUTTON_REGISTER_CONTEXT *)Context)->Phase));553 Print (L" PowerButtonPhase=\"%a\"", PowerButtonPhaseToString (((EFI_SMM_POWER_BUTTON_REGISTER_CONTEXT *)Context)->Phase)); 542 554 } else if (CompareGuid (HandlerType, &gEfiSmmStandbyButtonDispatch2ProtocolGuid)) { 543 Print (L" StandbyButtonPhase=\"%a\"", StandbyButtonPhaseToString(((EFI_SMM_STANDBY_BUTTON_REGISTER_CONTEXT *)Context)->Phase));555 Print (L" StandbyButtonPhase=\"%a\"", StandbyButtonPhaseToString (((EFI_SMM_STANDBY_BUTTON_REGISTER_CONTEXT *)Context)->Phase)); 544 556 } else if (CompareGuid (HandlerType, &gEfiSmmPeriodicTimerDispatch2ProtocolGuid)) { 545 Print (L" PeriodicTimerPeriod=\"%ld\"", ((EFI_SMM_PERIODIC_TIMER_REGISTER_CONTEXT *)Context)->Period);546 Print (L" PeriodicTimerSmiTickInterval=\"%ld\"", ((EFI_SMM_PERIODIC_TIMER_REGISTER_CONTEXT *)Context)->SmiTickInterval);557 Print (L" PeriodicTimerPeriod=\"%ld\"", ((EFI_SMM_PERIODIC_TIMER_REGISTER_CONTEXT *)Context)->Period); 558 Print (L" PeriodicTimerSmiTickInterval=\"%ld\"", ((EFI_SMM_PERIODIC_TIMER_REGISTER_CONTEXT *)Context)->SmiTickInterval); 547 559 } else if (CompareGuid (HandlerType, &gEfiSmmGpiDispatch2ProtocolGuid)) { 548 Print (L" GpiNum=\"0x%lx\"", ((EFI_SMM_GPI_REGISTER_CONTEXT *)Context)->GpiNum);560 Print (L" GpiNum=\"0x%lx\"", ((EFI_SMM_GPI_REGISTER_CONTEXT *)Context)->GpiNum); 549 561 } else if (CompareGuid (HandlerType, &gEfiSmmIoTrapDispatch2ProtocolGuid)) { 550 Print (L" IoTrapAddress=\"0x%x\"", ((EFI_SMM_IO_TRAP_REGISTER_CONTEXT *)Context)->Address);551 Print (L" IoTrapLength=\"0x%x\"", ((EFI_SMM_IO_TRAP_REGISTER_CONTEXT *)Context)->Length);552 Print (L" IoTrapType=\"%a\"", IoTrapTypeToString(((EFI_SMM_IO_TRAP_REGISTER_CONTEXT *)Context)->Type));562 Print (L" IoTrapAddress=\"0x%x\"", ((EFI_SMM_IO_TRAP_REGISTER_CONTEXT *)Context)->Address); 563 Print (L" IoTrapLength=\"0x%x\"", ((EFI_SMM_IO_TRAP_REGISTER_CONTEXT *)Context)->Length); 564 Print (L" IoTrapType=\"%a\"", IoTrapTypeToString (((EFI_SMM_IO_TRAP_REGISTER_CONTEXT *)Context)->Type)); 553 565 } else if (CompareGuid (HandlerType, &gEfiSmmUsbDispatch2ProtocolGuid)) { 554 Print (L" UsbType=\"0x%x\"", UsbTypeToString(((SMI_HANDLER_PROFILE_USB_REGISTER_CONTEXT *)Context)->Type));555 Str = ConvertDevicePathToText ((EFI_DEVICE_PATH_PROTOCOL *)(((SMI_HANDLER_PROFILE_USB_REGISTER_CONTEXT *)Context) + 1), TRUE, TRUE);556 Print (L" UsbDevicePath=\"%s\"", Str);566 Print (L" UsbType=\"0x%x\"", UsbTypeToString (((SMI_HANDLER_PROFILE_USB_REGISTER_CONTEXT *)Context)->Type)); 567 Str = ConvertDevicePathToText ((EFI_DEVICE_PATH_PROTOCOL *)(((SMI_HANDLER_PROFILE_USB_REGISTER_CONTEXT *)Context) + 1), TRUE, TRUE); 568 Print (L" UsbDevicePath=\"%s\"", Str); 557 569 if (Str != NULL) { 558 570 FreePool (Str); 559 571 } 560 572 } else { 561 Print (L" Context=\"");573 Print (L" Context=\""); 562 574 InternalDumpData (Context, ContextSize); 563 Print (L"\"");575 Print (L"\""); 564 576 } 565 577 } … … 571 583 **/ 572 584 VOID 573 DumpSmiHandler (574 IN UINT32 HandlerCategory585 DumpSmiHandler ( 586 IN UINT32 HandlerCategory 575 587 ) 576 588 { … … 585 597 if ((SmiStruct->Header.Signature == SMM_CORE_SMI_DATABASE_SIGNATURE) && (SmiStruct->HandlerCategory == HandlerCategory)) { 586 598 SmiHandlerStruct = (VOID *)(SmiStruct + 1); 587 Print (L" <SmiEntry");599 Print (L" <SmiEntry"); 588 600 if (!IsZeroGuid (&SmiStruct->HandlerType)) { 589 Print(L" HandlerType=\"%g\"", &SmiStruct->HandlerType); 590 } 591 Print(L">\n"); 601 Print (L" HandlerType=\"%g\"", &SmiStruct->HandlerType); 602 } 603 604 Print (L">\n"); 592 605 for (Index = 0; Index < SmiStruct->HandlerCount; Index++) { 593 Print (L" <SmiHandler");606 Print (L" <SmiHandler"); 594 607 if (SmiHandlerStruct->ContextBufferSize != 0) { 595 608 DumpSmiChildContext (&SmiStruct->HandlerType, (UINT8 *)SmiHandlerStruct + SmiHandlerStruct->ContextBufferOffset, SmiHandlerStruct->ContextBufferSize); 596 609 } 597 Print(L">\n"); 598 ImageStruct = GetImageFromRef((UINTN)SmiHandlerStruct->ImageRef); 599 NameString = GetDriverNameString (ImageStruct); 600 Print(L" <Module RefId=\"0x%x\" Name=\"%a\">\n", SmiHandlerStruct->ImageRef, NameString); 610 611 Print (L">\n"); 612 ImageStruct = GetImageFromRef ((UINTN)SmiHandlerStruct->ImageRef); 613 NameString = GetDriverNameString (ImageStruct); 614 Print (L" <Module RefId=\"0x%x\" Name=\"%a\">\n", SmiHandlerStruct->ImageRef, NameString); 601 615 if ((ImageStruct != NULL) && (ImageStruct->PdbStringOffset != 0)) { 602 Print (L" <Pdb>%a</Pdb>\n", (UINT8 *)ImageStruct + ImageStruct->PdbStringOffset);616 Print (L" <Pdb>%a</Pdb>\n", (UINT8 *)ImageStruct + ImageStruct->PdbStringOffset); 603 617 } 604 Print(L" </Module>\n"); 605 Print(L" <Handler Address=\"0x%lx\">\n", SmiHandlerStruct->Handler); 618 619 Print (L" </Module>\n"); 620 Print (L" <Handler Address=\"0x%lx\">\n", SmiHandlerStruct->Handler); 606 621 if (ImageStruct != NULL) { 607 Print (L" <RVA>0x%x</RVA>\n", (UINTN)(SmiHandlerStruct->Handler - ImageStruct->ImageBase));622 Print (L" <RVA>0x%x</RVA>\n", (UINTN)(SmiHandlerStruct->Handler - ImageStruct->ImageBase)); 608 623 } 609 Print(L" </Handler>\n", SmiHandlerStruct->Handler); 610 Print(L" <Caller Address=\"0x%lx\">\n", SmiHandlerStruct->CallerAddr); 624 625 Print (L" </Handler>\n", SmiHandlerStruct->Handler); 626 Print (L" <Caller Address=\"0x%lx\">\n", SmiHandlerStruct->CallerAddr); 611 627 if (ImageStruct != NULL) { 612 Print (L" <RVA>0x%x</RVA>\n", (UINTN)(SmiHandlerStruct->CallerAddr - ImageStruct->ImageBase));628 Print (L" <RVA>0x%x</RVA>\n", (UINTN)(SmiHandlerStruct->CallerAddr - ImageStruct->ImageBase)); 613 629 } 614 Print(L" </Caller>\n", SmiHandlerStruct->Handler); 630 631 Print (L" </Caller>\n", SmiHandlerStruct->Handler); 615 632 SmiHandlerStruct = (VOID *)((UINTN)SmiHandlerStruct + SmiHandlerStruct->Length); 616 Print(L" </SmiHandler>\n"); 617 } 618 Print(L" </SmiEntry>\n"); 619 } 633 Print (L" </SmiHandler>\n"); 634 } 635 636 Print (L" </SmiEntry>\n"); 637 } 638 620 639 SmiStruct = (VOID *)((UINTN)SmiStruct + SmiStruct->Header.Length); 621 640 } … … 636 655 EFIAPI 637 656 SmiHandlerProfileInfoEntrypoint ( 638 IN EFI_HANDLE 639 IN EFI_SYSTEM_TABLE 640 ) 641 { 642 GetSmiHandlerProfileDatabase ();657 IN EFI_HANDLE ImageHandle, 658 IN EFI_SYSTEM_TABLE *SystemTable 659 ) 660 { 661 GetSmiHandlerProfileDatabase (); 643 662 644 663 if (mSmiHandlerProfileDatabase == NULL) { … … 649 668 // Dump all image 650 669 // 651 Print (L"<?xml version=\"1.0\" encoding=\"utf-8\"?>\n");652 Print (L"<SmiHandlerProfile>\n");653 Print (L"<ImageDatabase>\n");654 Print (L" <!-- SMM image loaded -->\n");655 DumpSmmLoadedImage ();656 Print (L"</ImageDatabase>\n\n");670 Print (L"<?xml version=\"1.0\" encoding=\"utf-8\"?>\n"); 671 Print (L"<SmiHandlerProfile>\n"); 672 Print (L"<ImageDatabase>\n"); 673 Print (L" <!-- SMM image loaded -->\n"); 674 DumpSmmLoadedImage (); 675 Print (L"</ImageDatabase>\n\n"); 657 676 658 677 // 659 678 // Dump SMI Handler 660 679 // 661 Print (L"<SmiHandlerDatabase>\n");662 Print (L" <!-- SMI Handler registered -->\n\n");663 Print (L" <SmiHandlerCategory Name=\"RootSmi\">\n");664 Print (L" <!-- The root SMI Handler registered by SmmCore -->\n");665 DumpSmiHandler (SmmCoreSmiHandlerCategoryRootHandler);666 Print (L" </SmiHandlerCategory>\n\n");667 668 Print (L" <SmiHandlerCategory Name=\"GuidSmi\">\n");669 Print (L" <!-- The GUID SMI Handler registered by SmmCore -->\n");670 DumpSmiHandler (SmmCoreSmiHandlerCategoryGuidHandler);671 Print (L" </SmiHandlerCategory>\n\n");672 673 Print (L" <SmiHandlerCategory Name=\"HardwareSmi\">\n");674 Print (L" <!-- The hardware SMI Handler registered by SmmChildDispatcher -->\n");675 DumpSmiHandler (SmmCoreSmiHandlerCategoryHardwareHandler);676 Print (L" </SmiHandlerCategory>\n\n");677 678 Print (L"</SmiHandlerDatabase>\n");679 Print (L"</SmiHandlerProfile>\n");680 Print (L"<SmiHandlerDatabase>\n"); 681 Print (L" <!-- SMI Handler registered -->\n\n"); 682 Print (L" <SmiHandlerCategory Name=\"RootSmi\">\n"); 683 Print (L" <!-- The root SMI Handler registered by SmmCore -->\n"); 684 DumpSmiHandler (SmmCoreSmiHandlerCategoryRootHandler); 685 Print (L" </SmiHandlerCategory>\n\n"); 686 687 Print (L" <SmiHandlerCategory Name=\"GuidSmi\">\n"); 688 Print (L" <!-- The GUID SMI Handler registered by SmmCore -->\n"); 689 DumpSmiHandler (SmmCoreSmiHandlerCategoryGuidHandler); 690 Print (L" </SmiHandlerCategory>\n\n"); 691 692 Print (L" <SmiHandlerCategory Name=\"HardwareSmi\">\n"); 693 Print (L" <!-- The hardware SMI Handler registered by SmmChildDispatcher -->\n"); 694 DumpSmiHandler (SmmCoreSmiHandlerCategoryHardwareHandler); 695 Print (L" </SmiHandlerCategory>\n\n"); 696 697 Print (L"</SmiHandlerDatabase>\n"); 698 Print (L"</SmiHandlerProfile>\n"); 680 699 681 700 if (mSmiHandlerProfileDatabase != NULL) { 682 FreePool (mSmiHandlerProfileDatabase);701 FreePool (mSmiHandlerProfileDatabase); 683 702 } 684 703
Note:
See TracChangeset
for help on using the changeset viewer.