/** @file
  Dispatch Block to Aps in Pei phase for parallelhash algorithm.

Copyright (c) 2022, Intel Corporation. All rights reserved.<BR>
SPDX-License-Identifier: BSD-2-Clause-Patent

**/

#include "CryptParallelHash.h"
#include <Library/PeiServicesTablePointerLib.h>
#include <PiPei.h>
#include <Ppi/MpServices.h>
#include <Library/PeiServicesLib.h>

/**
  Dispatch the block task to each AP in PEI phase.

**/
VOID
EFIAPI
DispatchBlockToAp (
  VOID
  )
{
  EFI_STATUS               Status;
  CONST EFI_PEI_SERVICES   **PeiServices;
  EFI_PEI_MP_SERVICES_PPI  *MpServicesPpi;

  PeiServices = GetPeiServicesTablePointer ();
  Status      = (*PeiServices)->LocatePpi (
                                  PeiServices,
                                  &gEfiPeiMpServicesPpiGuid,
                                  0,
                                  NULL,
                                  (VOID **)&MpServicesPpi
                                  );
  if (EFI_ERROR (Status)) {
    //
    // Failed to locate MpServices Ppi, do parallel hash by one core.
    //
    DEBUG ((DEBUG_ERROR, "[DispatchBlockToApPei] Failed to locate MpServices Ppi. Status = %r\n", Status));
    return;
  }

  Status = MpServicesPpi->StartupAllAPs (
                            (CONST EFI_PEI_SERVICES **)PeiServices,
                            MpServicesPpi,
                            ParallelHashApExecute,
                            FALSE,
                            0,
                            NULL
                            );
  return;
}
