X-Git-Url: https://git.proxmox.com/?a=blobdiff_plain;f=MdePkg%2FLibrary%2FDxeExtendedSalLib%2FExtendedSalLib.c;fp=MdePkg%2FLibrary%2FDxeExtendedSalLib%2FExtendedSalLib.c;h=0000000000000000000000000000000000000000;hb=3cb0a311cb7e747d7be5c5076d0fff76ad256d2b;hp=6c86066550c3dc6a647ef92de34ca5043778d6f6;hpb=ba6037f8331d5a6e9acd4d26a53ded6aa2ae62fb;p=mirror_edk2.git diff --git a/MdePkg/Library/DxeExtendedSalLib/ExtendedSalLib.c b/MdePkg/Library/DxeExtendedSalLib/ExtendedSalLib.c deleted file mode 100644 index 6c86066550..0000000000 --- a/MdePkg/Library/DxeExtendedSalLib/ExtendedSalLib.c +++ /dev/null @@ -1,1001 +0,0 @@ -/** @file - The library implements the Extended SAL Library Class for boot service only modules. - - Copyright (c) 2007 - 2018, Intel Corporation. All rights reserved.
- 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. - -**/ - -#include - -#include -#include - -#include -#include -#include - -/** - Stores the physical plabel of ESAL entrypoint. - - This assembly function stores the physical plabel of ESAL entrypoint - where GetEsalEntryPoint() can easily retrieve. - - @param EntryPoint Physical address of ESAL entrypoint - @param Gp Physical GP of ESAL entrypoint - - @return r8 = EFI_SAL_SUCCESS - -**/ -SAL_RETURN_REGS -EFIAPI -SetEsalPhysicalEntryPoint ( - IN UINT64 EntryPoint, - IN UINT64 Gp - ); - -/** - Retrieves plabel of ESAL entrypoint. - - This function retrives plabel of ESAL entrypoint stored by - SetEsalPhysicalEntryPoint(). - - @return r8 = EFI_SAL_SUCCESS - r9 = Physical Plabel - r10 = Virtual Plabel - r11 = PSR - -**/ -SAL_RETURN_REGS -EFIAPI -GetEsalEntryPoint ( - VOID - ); - -EXTENDED_SAL_BOOT_SERVICE_PROTOCOL *mEsalBootService = NULL; -EFI_PLABEL mPlabel; - -/** - Constructor function to get Extended SAL Boot Service Protocol, and initializes - physical plabel of ESAL entrypoint. - - This function first locates Extended SAL Boot Service Protocol and caches it in global variable. - Then it initializes the physical plable of ESAL entrypoint, and stores - it where GetEsalEntryPoint() can easily retrieve. - - @param ImageHandle The firmware allocated handle for the EFI image. - @param SystemTable A pointer to the EFI System Table. - - @retval EFI_SUCCESS Plable of ESAL entrypoint successfully stored. - -**/ -EFI_STATUS -EFIAPI -DxeExtendedSalLibConstruct ( - IN EFI_HANDLE ImageHandle, - IN EFI_SYSTEM_TABLE *SystemTable - ) -{ - EFI_PLABEL *Plabel; - EFI_STATUS Status; - - // - // The protocol contains a function pointer, which is an indirect procedure call. - // An indirect procedure call goes through a plabel, and pointer to a function is - // a pointer to a plabel. To implement indirect procedure calls that can work in - // both physical and virtual mode, two plabels are required (one physical and one - // virtual). So lets grap the physical PLABEL for the EsalEntryPoint and store it - // away. We cache it in a module global, so we can register the vitrual version. - // - Status = gBS->LocateProtocol (&gEfiExtendedSalBootServiceProtocolGuid, NULL, (VOID **) &mEsalBootService); - ASSERT_EFI_ERROR (Status); - - Plabel = (EFI_PLABEL *) (UINTN) mEsalBootService->ExtendedSalProc; - mPlabel.EntryPoint = Plabel->EntryPoint; - mPlabel.GP = Plabel->GP; - // - // Stores the physical plabel of ESAL entrypoint where GetEsalEntryPoint() can easily retrieve. - // - SetEsalPhysicalEntryPoint (mPlabel.EntryPoint, mPlabel.GP); - - return EFI_SUCCESS; -} - -/** - Registers function of ESAL class and it's associated global. - - This function registers function of ESAL class, together with its associated global. - It is worker function for RegisterEsalClass(). - It is only for boot time. - - @param FunctionId ID of function to register - @param ClassGuidLo GUID of ESAL class, lower 64-bits - @param ClassGuidHi GUID of ESAL class, upper 64-bits - @param Function Function to register with ClassGuid/FunctionId pair - @param ModuleGlobal Module global for the function. - - @return Status returned by RegisterExtendedSalProc() of Extended SAL Boot Service Protocol - -**/ -EFI_STATUS -RegisterEsalFunction ( - IN UINT64 FunctionId, - IN UINT64 ClassGuidLo, - IN UINT64 ClassGuidHi, - IN SAL_INTERNAL_EXTENDED_SAL_PROC Function, - IN VOID *ModuleGlobal - ) -{ - return mEsalBootService->RegisterExtendedSalProc ( - mEsalBootService, - ClassGuidLo, - ClassGuidHi, - FunctionId, - Function, - ModuleGlobal - ); -} - -/** - Registers ESAL Class and it's 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 the class. - @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 - ... - ) -{ - VA_LIST Args; - EFI_STATUS Status; - SAL_INTERNAL_EXTENDED_SAL_PROC Function; - UINT64 FunctionId; - EFI_HANDLE NewHandle; - EFI_GUID ClassGuid; - - VA_START (Args, ModuleGlobal); - - // - // Register all functions of the class to register. - // - Status = EFI_SUCCESS; - while (!EFI_ERROR (Status)) { - Function = (SAL_INTERNAL_EXTENDED_SAL_PROC) VA_ARG (Args, SAL_INTERNAL_EXTENDED_SAL_PROC); - // - // NULL serves as the end mark of function list - // - if (Function == NULL) { - break; - } - - FunctionId = VA_ARG (Args, UINT64); - - Status = RegisterEsalFunction (FunctionId, ClassGuidLo, ClassGuidHi, Function, ModuleGlobal); - } - - VA_END (Args); - - if (EFI_ERROR (Status)) { - return Status; - } - - NewHandle = NULL; - *((UINT64 *)(&ClassGuid) + 0) = ClassGuidLo; - *((UINT64 *)(&ClassGuid) + 1) = ClassGuidHi; - return gBS->InstallProtocolInterface ( - &NewHandle, - &ClassGuid, - EFI_NATIVE_INTERFACE, - NULL - ); -} - -/** - Calls an Extended SAL Class service that was previously registered with RegisterEsalClass(). - - This function gets the entrypoint of Extended SAL, and calls an Extended SAL Class service - that was previously registered with RegisterEsalClass() through this entrypoint. - - @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_SUCCESS ESAL procedure successfully called. - @retval EFI_SAL_ERROR The address of ExtendedSalProc() can not be correctly - initialized. - @retval Other Status returned from ExtendedSalProc() service of - 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 - ) -{ - SAL_RETURN_REGS ReturnReg; - EXTENDED_SAL_PROC EsalProc; - - // - // Get the entrypoint of Extended SAL - // - ReturnReg = GetEsalEntryPoint (); - if (*(UINT64 *)ReturnReg.r9 == 0 && *(UINT64 *)(ReturnReg.r9 + 8) == 0) { - // - // The ESAL Entry Point could not be initialized - // - ReturnReg.Status = EFI_SAL_ERROR; - return ReturnReg; - } - - // - // Test PSR.it which is BIT36 - // - if ((ReturnReg.r11 & BIT36) != 0) { - // - // Virtual mode plabel to entry point - // - EsalProc = (EXTENDED_SAL_PROC) ReturnReg.r10; - } else { - // - // Physical mode plabel to entry point - // - EsalProc = (EXTENDED_SAL_PROC) ReturnReg.r9; - } - - return EsalProc ( - ClassGuidLo, - ClassGuidHi, - FunctionId, - Arg2, - Arg3, - Arg4, - Arg5, - Arg6, - Arg7, - 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 - ) -{ - return EsalCall ( - EFI_EXTENDED_SAL_STALL_SERVICES_PROTOCOL_GUID_LO, - EFI_EXTENDED_SAL_STALL_SERVICES_PROTOCOL_GUID_HI, - StallFunctionId, - Microseconds, - 0, - 0, - 0, - 0, - 0, - 0 - ); -} - -/** - 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 - ) -{ - return EsalCall ( - EFI_EXTENDED_SAL_PAL_SERVICES_PROTOCOL_GUID_LO, - EFI_EXTENDED_SAL_PAL_SERVICES_PROTOCOL_GUID_HI, - SetNewPalEntryFunctionId, - PhysicalAddress, - PalEntryPoint, - 0, - 0, - 0, - 0, - 0 - ); -} - -/** - 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 - ) -{ - return EsalCall ( - EFI_EXTENDED_SAL_PAL_SERVICES_PROTOCOL_GUID_LO, - EFI_EXTENDED_SAL_PAL_SERVICES_PROTOCOL_GUID_HI, - GetNewPalEntryFunctionId, - PhysicalAddress, - 0, - 0, - 0, - 0, - 0, - 0 - ); -} - -/** - 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 - ) -{ - SAL_RETURN_REGS Regs; - - Regs = EsalCall ( - EFI_EXTENDED_SAL_MCA_LOG_SERVICES_PROTOCOL_GUID_LO, - EFI_EXTENDED_SAL_MCA_LOG_SERVICES_PROTOCOL_GUID_HI, - EsalGetStateBufferFunctionId, - McaType, - 0, - 0, - 0, - 0, - 0, - 0 - ); - - *McaBuffer = (UINT8 *) Regs.r9; - *BufferSize = Regs.r10; - - return Regs; -} - -/** - 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 - ) -{ - return EsalCall ( - EFI_EXTENDED_SAL_MCA_LOG_SERVICES_PROTOCOL_GUID_LO, - EFI_EXTENDED_SAL_MCA_LOG_SERVICES_PROTOCOL_GUID_HI, - EsalSaveStateBufferFunctionId, - McaType, - 0, - 0, - 0, - 0, - 0, - 0 - ); -} - -/** - 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 - ) -{ - return EsalCall ( - EFI_EXTENDED_SAL_BASE_SERVICES_PROTOCOL_GUID_LO, - EFI_EXTENDED_SAL_BASE_SERVICES_PROTOCOL_GUID_HI, - EsalGetVectorsFunctionId, - VectorType, - 0, - 0, - 0, - 0, - 0, - 0 - ); -} - -/** - 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 - ) -{ - return EsalCall ( - EFI_EXTENDED_SAL_BASE_SERVICES_PROTOCOL_GUID_LO, - EFI_EXTENDED_SAL_BASE_SERVICES_PROTOCOL_GUID_HI, - EsalMcGetParamsFunctionId, - ParamInfoType, - 0, - 0, - 0, - 0, - 0, - 0 - ); -} - -/** - 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 - ) -{ - return EsalCall ( - EFI_EXTENDED_SAL_BASE_SERVICES_PROTOCOL_GUID_LO, - EFI_EXTENDED_SAL_BASE_SERVICES_PROTOCOL_GUID_HI, - EsalMcGetMcParamsFunctionId, - 0, - 0, - 0, - 0, - 0, - 0, - 0 - ); -} - -/** - 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 - ) -{ - return EsalCall ( - EFI_EXTENDED_SAL_BASE_SERVICES_PROTOCOL_GUID_LO, - EFI_EXTENDED_SAL_BASE_SERVICES_PROTOCOL_GUID_HI, - EsalGetMcCheckinFlagsFunctionId, - CpuIndex, - 0, - 0, - 0, - 0, - 0, - 0 - ); -} - -/** - 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 - ) -{ - return EsalCall ( - EFI_EXTENDED_SAL_MP_SERVICES_PROTOCOL_GUID_LO, - EFI_EXTENDED_SAL_MP_SERVICES_PROTOCOL_GUID_HI, - AddCpuDataFunctionId, - CpuGlobalId, - Enabled, - PalCompatibility, - 0, - 0, - 0, - 0 - ); -} - -/** - 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 - ) -{ - return EsalCall ( - EFI_EXTENDED_SAL_MP_SERVICES_PROTOCOL_GUID_LO, - EFI_EXTENDED_SAL_MP_SERVICES_PROTOCOL_GUID_HI, - RemoveCpuDataFunctionId, - CpuGlobalId, - 0, - 0, - 0, - 0, - 0, - 0 - ); -} - -/** - 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 - ) -{ - return EsalCall ( - EFI_EXTENDED_SAL_MP_SERVICES_PROTOCOL_GUID_LO, - EFI_EXTENDED_SAL_MP_SERVICES_PROTOCOL_GUID_HI, - ModifyCpuDataFunctionId, - CpuGlobalId, - Enabled, - PalCompatibility, - 0, - 0, - 0, - 0 - ); -} - -/** - 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 - ) -{ - return EsalCall ( - EFI_EXTENDED_SAL_MP_SERVICES_PROTOCOL_GUID_LO, - EFI_EXTENDED_SAL_MP_SERVICES_PROTOCOL_GUID_HI, - GetCpuDataByIDFunctionId, - CpuGlobalId, - IndexByEnabledCpu, - 0, - 0, - 0, - 0, - 0 - ); -} - -/** - 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 - ) -{ - return EsalCall ( - EFI_EXTENDED_SAL_MP_SERVICES_PROTOCOL_GUID_LO, - EFI_EXTENDED_SAL_MP_SERVICES_PROTOCOL_GUID_HI, - GetCpuDataByIndexFunctionId, - Index, - IndexByEnabledCpu, - 0, - 0, - 0, - 0, - 0 - ); -} - -/** - 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 - ) -{ - return EsalCall ( - EFI_EXTENDED_SAL_MP_SERVICES_PROTOCOL_GUID_LO, - EFI_EXTENDED_SAL_MP_SERVICES_PROTOCOL_GUID_HI, - CurrentProcInfoFunctionId, - IndexByEnabledCpu, - 0, - 0, - 0, - 0, - 0, - 0 - ); -} - -/** - 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 - ) -{ - return EsalCall ( - EFI_EXTENDED_SAL_MP_SERVICES_PROTOCOL_GUID_LO, - EFI_EXTENDED_SAL_MP_SERVICES_PROTOCOL_GUID_HI, - NumProcessorsFunctionId, - 0, - 0, - 0, - 0, - 0, - 0, - 0 - ); -} - -/** - 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 - ) -{ - return EsalCall ( - EFI_EXTENDED_SAL_MP_SERVICES_PROTOCOL_GUID_LO, - EFI_EXTENDED_SAL_MP_SERVICES_PROTOCOL_GUID_HI, - SetMinStateFunctionId, - CpuGlobalId, - MinStatePointer, - 0, - 0, - 0, - 0, - 0 - ); -} - -/** - 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 - ) -{ - return EsalCall ( - EFI_EXTENDED_SAL_MP_SERVICES_PROTOCOL_GUID_LO, - EFI_EXTENDED_SAL_MP_SERVICES_PROTOCOL_GUID_HI, - GetMinStateFunctionId, - CpuGlobalId, - 0, - 0, - 0, - 0, - 0, - 0 - ); -} - -/** - 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 - ) -{ - SAL_RETURN_REGS Regs; - - Regs = EsalCall ( - EFI_EXTENDED_SAL_MCA_SERVICES_PROTOCOL_GUID_LO, - EFI_EXTENDED_SAL_MCA_SERVICES_PROTOCOL_GUID_HI, - McaGetStateInfoFunctionId, - CpuGlobalId, - 0, - 0, - 0, - 0, - 0, - 0 - ); - - *StateBufferPointer = (EFI_PHYSICAL_ADDRESS) Regs.r9; - *RequiredStateBufferSize = (UINT64) Regs.r10; - - return Regs; -} - -/** - 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 - ) -{ - return EsalCall ( - EFI_EXTENDED_SAL_MCA_SERVICES_PROTOCOL_GUID_LO, - EFI_EXTENDED_SAL_MCA_SERVICES_PROTOCOL_GUID_HI, - McaRegisterCpuFunctionId, - CpuGlobalId, - StateBufferPointer, - 0, - 0, - 0, - 0, - 0 - ); -}