/** @file
PEI Services Table Pointer Library.
According to PI specification, the peiservice pointer is stored in the SSCRATCH
register of RISC-V architecture.
Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.
Copyright (c) 2025, Ventana Micro Systems Inc. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent
**/
#include
#include
#include
#include
/**
Caches a pointer PEI Services Table.
Caches the pointer to the PEI Services Table specified by PeiServicesTablePointer
in a CPU specific manner as specified in the CPU binding section of the Platform Initialization
Pre-EFI Initialization Core Interface Specification.
If PeiServicesTablePointer is NULL, then ASSERT().
@param PeiServicesTablePointer The address of PeiServices pointer.
**/
VOID
EFIAPI
SetPeiServicesTablePointer (
IN CONST EFI_PEI_SERVICES **PeiServicesTablePointer
)
{
ASSERT (PeiServicesTablePointer != NULL);
RiscVSetSupervisorScratch ((UINT64)PeiServicesTablePointer);
}
/**
Retrieves the cached value of the PEI Services Table pointer.
Returns the cached value of the PEI Services Table pointer in a CPU specific manner
as specified in the CPU binding section of the Platform Initialization Pre-EFI
Initialization Core Interface Specification.
If the cached PEI Services Table pointer is NULL, then ASSERT().
@return The pointer to PeiServices.
**/
CONST EFI_PEI_SERVICES **
EFIAPI
GetPeiServicesTablePointer (
VOID
)
{
return (CONST EFI_PEI_SERVICES **)RiscVGetSupervisorScratch ();
}
/**
Perform CPU specific actions required to migrate the PEI Services Table
pointer from temporary RAM to permanent RAM.
**/
VOID
EFIAPI
MigratePeiServicesTablePointer (
VOID
)
{
//
// PEI Services Table pointer is stored in CSR_SSCRATCH register. No additional
// migration actions are required.
//
return;
}