- Status = Communication->Communicate (Communication, SmmBootRecordCommBuffer, &CommSize);\r
- ASSERT_EFI_ERROR (Status);\r
- ASSERT_EFI_ERROR(SmmCommData->ReturnStatus);\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