/** @file Library class definition of Extended SAL Library. Copyright (c) 2007 - 2018, Intel Corporation. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent **/ #ifndef _EXTENDED_SAL_LIB_H__ #define _EXTENDED_SAL_LIB_H__ #include /** Register ESAL Class and its associated global. This function Registers one or more Extended SAL services in a given class along with the associated global context. This function is only available prior to ExitBootServices(). @param ClassGuidLo GUID of function class, lower 64-bits @param ClassGuidHi GUID of function class, upper 64-bits @param ModuleGlobal Module global for Function. @param ... List of Function/FunctionId pairs, ended by NULL @retval EFI_SUCCESS The Extended SAL services were registered. @retval EFI_UNSUPPORTED This function was called after ExitBootServices(). @retval EFI_OUT_OF_RESOURCES There are not enough resources available to register one or more of the specified services. @retval Other ClassGuid could not be installed onto a new handle. **/ EFI_STATUS EFIAPI RegisterEsalClass ( IN CONST UINT64 ClassGuidLo, IN CONST UINT64 ClassGuidHi, IN VOID *ModuleGlobal, OPTIONAL ... ); /** Calls an Extended SAL Class service that was previously registered with RegisterEsalClass(). This function calls an Extended SAL Class service that was previously registered with RegisterEsalClass(). @param ClassGuidLo GUID of function, lower 64-bits @param ClassGuidHi GUID of function, upper 64-bits @param FunctionId Function in ClassGuid to call @param Arg2 Argument 2 ClassGuid/FunctionId defined @param Arg3 Argument 3 ClassGuid/FunctionId defined @param Arg4 Argument 4 ClassGuid/FunctionId defined @param Arg5 Argument 5 ClassGuid/FunctionId defined @param Arg6 Argument 6 ClassGuid/FunctionId defined @param Arg7 Argument 7 ClassGuid/FunctionId defined @param Arg8 Argument 8 ClassGuid/FunctionId defined @retval EFI_SAL_ERROR The address of ExtendedSalProc() can not be determined for the current CPU execution mode. @retval Other See the return status from ExtendedSalProc() in the EXTENDED_SAL_BOOT_SERVICE_PROTOCOL. **/ SAL_RETURN_REGS EFIAPI EsalCall ( IN UINT64 ClassGuidLo, IN UINT64 ClassGuidHi, IN UINT64 FunctionId, IN UINT64 Arg2, IN UINT64 Arg3, IN UINT64 Arg4, IN UINT64 Arg5, IN UINT64 Arg6, IN UINT64 Arg7, IN UINT64 Arg8 ); /** Wrapper for the EsalStallFunctionId service of Extended SAL Stall Services Class. This function is a wrapper for the EsalStallFunctionId service of Extended SAL Stall Services Class. See EsalStallFunctionId of Extended SAL Specification. @param Microseconds The number of microseconds to delay. @retval EFI_SAL_SUCCESS Call completed without error. @retval EFI_SAL_INVALID_ARGUMENT Invalid argument. @retval EFI_SAL_VIRTUAL_ADDRESS_ERROR Virtual address not registered **/ SAL_RETURN_REGS EFIAPI EsalStall ( IN UINTN Microseconds ); /** Wrapper for the EsalSetNewPalEntryFunctionId service of Extended SAL PAL Services Services Class. This function is a wrapper for the EsalSetNewPalEntryFunctionId service of Extended SAL PAL Services Services Class. See EsalSetNewPalEntryFunctionId of Extended SAL Specification. @param PhysicalAddress If TRUE, then PalEntryPoint is a physical address. If FALSE, then PalEntryPoint is a virtual address. @param PalEntryPoint The PAL Entry Point being set. @retval EFI_SAL_SUCCESS The PAL Entry Point was set. @retval EFI_SAL_VIRTUAL_ADDRESS_ERROR This function was called in virtual mode before virtual mappings for the specified Extended SAL Procedure are available. **/ SAL_RETURN_REGS EFIAPI EsalSetNewPalEntry ( IN BOOLEAN PhysicalAddress, IN UINT64 PalEntryPoint ); /** Wrapper for the EsalGetNewPalEntryFunctionId service of Extended SAL PAL Services Services Class. This function is a wrapper for the EsalGetNewPalEntryFunctionId service of Extended SAL PAL Services Services Class. See EsalGetNewPalEntryFunctionId of Extended SAL Specification. @param PhysicalAddress If TRUE, then PalEntryPoint is a physical address. If FALSE, then PalEntryPoint is a virtual address. @retval EFI_SAL_SUCCESS The PAL Entry Point was retrieved and returned in SAL_RETURN_REGS.r9. @retval EFI_SAL_VIRTUAL_ADDRESS_ERROR This function was called in virtual mode before virtual mappings for the specified Extended SAL Procedure are available. @return r9 PAL entry point retrieved. **/ SAL_RETURN_REGS EFIAPI EsalGetNewPalEntry ( IN BOOLEAN PhysicalAddress ); /** Wrapper for the EsalGetStateBufferFunctionId service of Extended SAL MCA Log Services Class. This function is a wrapper for the EsalGetStateBufferFunctionId service of Extended SAL MCA Log Services Class. See EsalGetStateBufferFunctionId of Extended SAL Specification. @param McaType See type parameter of SAL Procedure SAL_GET_STATE_INFO. @param McaBuffer A pointer to the base address of the returned buffer. Copied from SAL_RETURN_REGS.r9. @param BufferSize A pointer to the size, in bytes, of the returned buffer. Copied from SAL_RETURN_REGS.r10. @retval EFI_SAL_SUCCESS The memory buffer to store error records was returned in r9 and r10. @retval EFI_OUT_OF_RESOURCES A memory buffer for string error records in not available @return r9 Base address of the returned buffer @return r10 Size of the returned buffer in bytes **/ SAL_RETURN_REGS EFIAPI EsalGetStateBuffer ( IN UINT64 McaType, OUT UINT8 **McaBuffer, OUT UINTN *BufferSize ); /** Wrapper for the EsalSaveStateBufferFunctionId service of Extended SAL MCA Log Services Class. This function is a wrapper for the EsalSaveStateBufferFunctionId service of Extended SAL MCA Log Services Class. See EsalSaveStateBufferFunctionId of Extended SAL Specification. @param McaType See type parameter of SAL Procedure SAL_GET_STATE_INFO. @retval EFI_SUCCESS The memory buffer containing the error record was written to nonvolatile storage. **/ SAL_RETURN_REGS EFIAPI EsalSaveStateBuffer ( IN UINT64 McaType ); /** Wrapper for the EsalGetVectorsFunctionId service of Extended SAL Base Services Class. This function is a wrapper for the EsalGetVectorsFunctionId service of Extended SAL Base Services Class. See EsalGetVectorsFunctionId of Extended SAL Specification. @param VectorType The vector type to retrieve. 0 - MCA, 1 - BSP INIT, 2 - BOOT_RENDEZ, 3 - AP INIT. @retval EFI_SAL_SUCCESS Call completed without error. @retval EFI_SAL_INVALID_ARGUMENT Invalid argument. @retval EFI_SAL_NO_INFORMATION The requested vector has not been registered with the SAL Procedure SAL_SET_VECTORS. **/ SAL_RETURN_REGS EFIAPI EsalGetVectors ( IN UINT64 VectorType ); /** Wrapper for the EsalMcGetParamsFunctionId service of Extended SAL Base Services Class. This function is a wrapper for the EsalMcGetParamsFunctionId service of Extended SAL Base Services Class. See EsalMcGetParamsFunctionId of Extended SAL Specification. @param ParamInfoType The parameter type to retrieve. 1 - rendezvous interrupt 2 - wake up 3 - Corrected Platform Error Vector. @retval EFI_SAL_SUCCESS Call completed without error. @retval EFI_SAL_INVALID_ARGUMENT Invalid argument. @retval EFI_SAL_NO_INFORMATION The requested vector has not been registered with the SAL Procedure SAL_MC_SET_PARAMS. **/ SAL_RETURN_REGS EFIAPI EsalMcGetParams ( IN UINT64 ParamInfoType ); /** Wrapper for the EsalMcGetParamsFunctionId service of Extended SAL Base Services Class. This function is a wrapper for the EsalMcGetParamsFunctionId service of Extended SAL Base Services Class. See EsalMcGetParamsFunctionId of Extended SAL Specification. @retval EFI_SAL_SUCCESS Call completed without error. @retval EFI_SAL_NO_INFORMATION The requested vector has not been registered with the SAL Procedure SAL_MC_SET_PARAMS. **/ SAL_RETURN_REGS EFIAPI EsalMcGetMcParams ( VOID ); /** Wrapper for the EsalGetMcCheckinFlagsFunctionId service of Extended SAL Base Services Class. This function is a wrapper for the EsalGetMcCheckinFlagsFunctionId service of Extended SAL Base Services Class. See EsalGetMcCheckinFlagsFunctionId of Extended SAL Specification. @param CpuIndex The index of the CPU of set of enabled CPUs to check. @retval EFI_SAL_SUCCESS The checkin status of the requested CPU was returned. **/ SAL_RETURN_REGS EFIAPI EsalGetMcCheckinFlags ( IN UINT64 CpuIndex ); /** Wrapper for the EsalAddCpuDataFunctionId service of Extended SAL MP Services Class. This function is a wrapper for the EsalAddCpuDataFunctionId service of Extended SAL MP Services Class. See EsalAddCpuDataFunctionId of Extended SAL Specification. @param CpuGlobalId The Global ID for the CPU being added. @param Enabled The enable flag for the CPU being added. TRUE means the CPU is enabled. FALSE means the CPU is disabled. @param PalCompatibility The PAL Compatibility value for the CPU being added. @retval EFI_SAL_SUCCESS The CPU was added to the database. @retval EFI_SAL_NOT_ENOUGH_SCRATCH There are not enough resource available to add the CPU. **/ SAL_RETURN_REGS EFIAPI EsalAddCpuData ( IN UINT64 CpuGlobalId, IN BOOLEAN Enabled, IN UINT64 PalCompatibility ); /** Wrapper for the EsalRemoveCpuDataFunctionId service of Extended SAL MP Services Class. This function is a wrapper for the EsalRemoveCpuDataFunctionId service of Extended SAL MP Services Class. See EsalRemoveCpuDataFunctionId of Extended SAL Specification. @param CpuGlobalId The Global ID for the CPU being removed. @retval EFI_SAL_SUCCESS The CPU was removed from the database. @retval EFI_SAL_NO_INFORMATION The specified CPU is not in the database. **/ SAL_RETURN_REGS EFIAPI EsalRemoveCpuData ( IN UINT64 CpuGlobalId ); /** Wrapper for the EsalModifyCpuDataFunctionId service of Extended SAL MP Services Class. This function is a wrapper for the EsalModifyCpuDataFunctionId service of Extended SAL MP Services Class. See EsalModifyCpuDataFunctionId of Extended SAL Specification. @param CpuGlobalId The Global ID for the CPU being modified. @param Enabled The enable flag for the CPU being modified. TRUE means the CPU is enabled. FALSE means the CPU is disabled. @param PalCompatibility The PAL Compatibility value for the CPU being modified. @retval EFI_SAL_SUCCESS The CPU database was updated. @retval EFI_SAL_NO_INFORMATION The specified CPU is not in the database. **/ SAL_RETURN_REGS EFIAPI EsalModifyCpuData ( IN UINT64 CpuGlobalId, IN BOOLEAN Enabled, IN UINT64 PalCompatibility ); /** Wrapper for the EsalGetCpuDataByIdFunctionId service of Extended SAL MP Services Class. This function is a wrapper for the EsalGetCpuDataByIdFunctionId service of Extended SAL MP Services Class. See EsalGetCpuDataByIdFunctionId of Extended SAL Specification. @param CpuGlobalId The Global ID for the CPU being looked up. @param IndexByEnabledCpu If TRUE, then the index of set of enabled CPUs of database is returned. If FALSE, then the index of set of all CPUs of database is returned. @retval EFI_SAL_SUCCESS The information on the specified CPU was returned. @retval EFI_SAL_NO_INFORMATION The specified CPU is not in the database. **/ SAL_RETURN_REGS EFIAPI EsalGetCpuDataById ( IN UINT64 CpuGlobalId, IN BOOLEAN IndexByEnabledCpu ); /** Wrapper for the EsalGetCpuDataByIndexFunctionId service of Extended SAL MP Services Class. This function is a wrapper for the EsalGetCpuDataByIndexFunctionId service of Extended SAL MP Services Class. See EsalGetCpuDataByIndexFunctionId of Extended SAL Specification. @param Index The Global ID for the CPU being modified. @param IndexByEnabledCpu If TRUE, then the index of set of enabled CPUs of database is returned. If FALSE, then the index of set of all CPUs of database is returned. @retval EFI_SAL_SUCCESS The information on the specified CPU was returned. @retval EFI_SAL_NO_INFORMATION The specified CPU is not in the database. **/ SAL_RETURN_REGS EFIAPI EsalGetCpuDataByIndex ( IN UINT64 Index, IN BOOLEAN IndexByEnabledCpu ); /** Wrapper for the EsalWhoAmIFunctionId service of Extended SAL MP Services Class. This function is a wrapper for the EsalWhoAmIFunctionId service of Extended SAL MP Services Class. See EsalWhoAmIFunctionId of Extended SAL Specification. @param IndexByEnabledCpu If TRUE, then the index of set of enabled CPUs of database is returned. If FALSE, then the index of set of all CPUs of database is returned. @retval EFI_SAL_SUCCESS The Global ID for the calling CPU was returned. @retval EFI_SAL_NO_INFORMATION The calling CPU is not in the database. **/ SAL_RETURN_REGS EFIAPI EsalWhoAmI ( IN BOOLEAN IndexByEnabledCpu ); /** Wrapper for the EsalNumProcessors service of Extended SAL MP Services Class. This function is a wrapper for the EsalNumProcessors service of Extended SAL MP Services Class. See EsalNumProcessors of Extended SAL Specification. @retval EFI_SAL_SUCCESS The information on the number of CPUs in the platform was returned. **/ SAL_RETURN_REGS EFIAPI EsalNumProcessors ( VOID ); /** Wrapper for the EsalSetMinStateFnctionId service of Extended SAL MP Services Class. This function is a wrapper for the EsalSetMinStateFnctionId service of Extended SAL MP Services Class. See EsalSetMinStateFnctionId of Extended SAL Specification. @param CpuGlobalId The Global ID for the CPU whose MINSTATE pointer is being set. @param MinStatePointer The physical address of the MINSTATE buffer for the CPU specified by CpuGlobalId. @retval EFI_SAL_SUCCESS The MINSTATE pointer was set for the specified CPU. @retval EFI_SAL_NO_INFORMATION The specified CPU is not in the database. **/ SAL_RETURN_REGS EFIAPI EsalSetMinState ( IN UINT64 CpuGlobalId, IN EFI_PHYSICAL_ADDRESS MinStatePointer ); /** Wrapper for the EsalGetMinStateFunctionId service of Extended SAL MP Services Class. This function is a wrapper for the EsalGetMinStateFunctionId service of Extended SAL MP Services Class. See EsalGetMinStateFunctionId of Extended SAL Specification. @param CpuGlobalId The Global ID for the CPU whose MINSTATE pointer is being retrieved. @retval EFI_SAL_SUCCESS The MINSTATE pointer for the specified CPU was retrieved. @retval EFI_SAL_NO_INFORMATION The specified CPU is not in the database. **/ SAL_RETURN_REGS EFIAPI EsalGetMinState ( IN UINT64 CpuGlobalId ); /** Wrapper for the EsalMcsGetStateInfoFunctionId service of Extended SAL MCA Services Class. This function is a wrapper for the EsalMcsGetStateInfoFunctionId service of Extended SAL MCA Services Class. See EsalMcsGetStateInfoFunctionId of Extended SAL Specification. @param CpuGlobalId The Global ID for the CPU whose MCA state buffer is being retrieved. @param StateBufferPointer A pointer to the returned MCA state buffer. @param RequiredStateBufferSize A pointer to the size, in bytes, of the returned MCA state buffer. @retval EFI_SUCCESS MINSTATE successfully got and size calculated. @retval EFI_SAL_NO_INFORMATION Fail to get MINSTATE. **/ SAL_RETURN_REGS EFIAPI EsalMcaGetStateInfo ( IN UINT64 CpuGlobalId, OUT EFI_PHYSICAL_ADDRESS *StateBufferPointer, OUT UINT64 *RequiredStateBufferSize ); /** Wrapper for the EsalMcaRegisterCpuFunctionId service of Extended SAL MCA Services Class. This function is a wrapper for the EsalMcaRegisterCpuFunctionId service of Extended SAL MCA Services Class. See EsalMcaRegisterCpuFunctionId of Extended SAL Specification. @param CpuGlobalId The Global ID for the CPU whose MCA state buffer is being set. @param StateBufferPointer A pointer to the MCA state buffer. @retval EFI_SAL_NO_INFORMATION Cannot get the processor info with the CpuId @retval EFI_SUCCESS Save the processor's state info successfully **/ SAL_RETURN_REGS EFIAPI EsalMcaRegisterCpu ( IN UINT64 CpuGlobalId, IN EFI_PHYSICAL_ADDRESS StateBufferPointer ); #endif