/** @file | |
Library class definition of Extended SAL Library. | |
Copyright (c) 2007 - 2011, Intel Corporation. All rights reserved.<BR> | |
This program and the accompanying materials | |
are licensed and made available under the terms and conditions of the BSD License | |
which accompanies this distribution. The full text of the license may be found at | |
http://opensource.org/licenses/bsd-license.php. | |
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, | |
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. | |
**/ | |
#ifndef _EXTENDED_SAL_LIB_H__ | |
#define _EXTENDED_SAL_LIB_H__ | |
#include <IndustryStandard/Sal.h> | |
/** | |
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 |