/** @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; }