/* Send the data in communicate buffer to SMI handler and get response. */
EFI_STATUS SendCommunicateBuffer(IN OUT EFI_MM_COMMUNICATE_HEADER *SmmCommunicateHeader, IN UINTN DataSize)
/* Send the data in communicate buffer to SMI handler and get response. */
EFI_STATUS SendCommunicateBuffer(IN OUT EFI_MM_COMMUNICATE_HEADER *SmmCommunicateHeader, IN UINTN DataSize)
{
  EFI_STATUS                           Status;
  UINTN                                CommSize;
  SMM_FTW_COMMUNICATE_FUNCTION_HEADER  *SmmFtwFunctionHeader;
  CommSize = DataSize + SMM_COMMUNICATE_HEADER_SIZE + SMM_FTW_COMMUNICATE_HEADER_SIZE;
  Status   = mMmCommunication2->Communicate (
                                  mMmCommunication2,
                                  SmmCommunicateHeader,
                                  SmmCommunicateHeader,
                                  &CommSize
                                  );
  ASSERT_EFI_ERROR (Status);
  SmmFtwFunctionHeader = (SMM_FTW_COMMUNICATE_FUNCTION_HEADER *)SmmCommunicateHeader->Data;
  return SmmFtwFunctionHeader->ReturnStatus;
}