blob: 9ddd23d32048c9f2b0bc1bd12ab7882a3a0c1ed6 [file] [log] [blame]
/** @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;
}