- if (ReservedMemSize > SMM_BOOT_RECORD_COMM_SIZE) {\r
- SmmBootRecordCommBuffer = (VOID *) (UINTN) SmmCommMemRegion->PhysicalStart;\r
- SmmCommBufferHeader = (EFI_SMM_COMMUNICATE_HEADER*)SmmBootRecordCommBuffer;\r
- SmmCommData = (SMM_BOOT_RECORD_COMMUNICATE*)SmmCommBufferHeader->Data;\r
- ZeroMem((UINT8*)SmmCommData, sizeof(SMM_BOOT_RECORD_COMMUNICATE));\r
- \r
- CopyGuid (&SmmCommBufferHeader->HeaderGuid, &gEfiFirmwarePerformanceGuid);\r
- SmmCommBufferHeader->MessageLength = sizeof(SMM_BOOT_RECORD_COMMUNICATE);\r
- CommSize = SMM_BOOT_RECORD_COMM_SIZE;\r
- \r
- //\r
- // Get the size of boot records.\r
- //\r
- SmmCommData->Function = SMM_FPDT_FUNCTION_GET_BOOT_RECORD_SIZE;\r
- SmmCommData->BootRecordData = NULL;\r
- Status = Communication->Communicate (Communication, SmmBootRecordCommBuffer, &CommSize);\r
- ASSERT_EFI_ERROR (Status);\r
- \r
- if (!EFI_ERROR (SmmCommData->ReturnStatus) && SmmCommData->BootRecordSize != 0) {\r
- //\r
- // Get all boot records\r
- //\r
- SmmCommData->Function = SMM_FPDT_FUNCTION_GET_BOOT_RECORD_DATA_BY_OFFSET;\r
- SmmBootRecordDataSize = SmmCommData->BootRecordSize;\r
- SmmBootRecordData = AllocateZeroPool(SmmBootRecordDataSize);\r
- ASSERT (SmmBootRecordData != NULL);\r
- SmmCommData->BootRecordOffset = 0;\r
- SmmCommData->BootRecordData = (VOID *) ((UINTN) SmmCommMemRegion->PhysicalStart + SMM_BOOT_RECORD_COMM_SIZE);\r
- SmmCommData->BootRecordSize = ReservedMemSize - SMM_BOOT_RECORD_COMM_SIZE;\r
- while (SmmCommData->BootRecordOffset < SmmBootRecordDataSize) {\r
- Status = Communication->Communicate (Communication, SmmBootRecordCommBuffer, &CommSize);\r
- ASSERT_EFI_ERROR (Status);\r
- ASSERT_EFI_ERROR(SmmCommData->ReturnStatus);\r
- CopyMem ((UINT8 *) SmmBootRecordData + SmmCommData->BootRecordOffset, SmmCommData->BootRecordData, SmmCommData->BootRecordSize);\r
- SmmCommData->BootRecordOffset = SmmCommData->BootRecordOffset + SmmCommData->BootRecordSize;\r
- }\r
- }\r
- }\r