- Buffer = AllocateZeroPool (DataSize + OFFSET_OF (EFI_SMM_COMMUNICATE_HEADER, Data) + OFFSET_OF (OPAL_SMM_COMMUNICATE_HEADER, Data));\r
+ ASSERT (SmmCommRegionTable != NULL);\r
+ SmmCommMemRegion = (EFI_MEMORY_DESCRIPTOR *) (SmmCommRegionTable + 1);\r
+ Size = 0;\r
+ for (Index = 0; Index < SmmCommRegionTable->NumberOfEntries; Index++) {\r
+ if (SmmCommMemRegion->Type == EfiConventionalMemory) {\r
+ Size = EFI_PAGES_TO_SIZE ((UINTN) SmmCommMemRegion->NumberOfPages);\r
+ if (Size >= (DataSize + OFFSET_OF (EFI_SMM_COMMUNICATE_HEADER, Data) + OFFSET_OF (OPAL_SMM_COMMUNICATE_HEADER, Data))) {\r
+ break;\r
+ }\r
+ }\r
+ SmmCommMemRegion = (EFI_MEMORY_DESCRIPTOR *) ((UINT8 *) SmmCommMemRegion + SmmCommRegionTable->DescriptorSize);\r
+ }\r
+ ASSERT (Index < SmmCommRegionTable->NumberOfEntries);\r
+\r
+ Buffer = (VOID*)(UINTN)SmmCommMemRegion->PhysicalStart;\r