diff options
Diffstat (limited to 'EDK/Foundation/Library/Dxe/Include/Ipf/SalDriverLib.h')
-rw-r--r-- | EDK/Foundation/Library/Dxe/Include/Ipf/SalDriverLib.h | 1454 |
1 files changed, 1454 insertions, 0 deletions
diff --git a/EDK/Foundation/Library/Dxe/Include/Ipf/SalDriverLib.h b/EDK/Foundation/Library/Dxe/Include/Ipf/SalDriverLib.h new file mode 100644 index 0000000..c294706 --- /dev/null +++ b/EDK/Foundation/Library/Dxe/Include/Ipf/SalDriverLib.h @@ -0,0 +1,1454 @@ +/*++ + +Copyright (c) 2004, 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. + +Module Name: + + SalDriverLib.h + +Abstract: + + SAL Driver Lib + +Revision History + +--*/ + +#ifndef _SAL_DRIVER_LIB_H_ +#define _SAL_DRIVER_LIB_H_ + +#include "Tiano.h" +#include "EfiDriverLib.h" +#include "SalApi.h" + +#include EFI_PROTOCOL_DEFINITION (ExtendedSalBootService) +#include EFI_PROTOCOL_DEFINITION (ExtendedSalGuid) + +// +// Assembly Functions +// +SAL_RETURN_REGS +LibGetEsalPhyData ( + VOID + ) +/*++ + +Routine Description: + + Get Esal global data in physical mode. + +Arguments: + + None + +Returns: + + Output regs + +--*/ +; + +SAL_RETURN_REGS +LibGetEsalVirtData ( + VOID + ) +/*++ + +Routine Description: + + Get Esal global data in virtual mode. + +Arguments: + + None + +Returns: + + Output regs + +--*/ +; + +SAL_RETURN_REGS +LibSetEsalPhyData ( + IN VOID *Ptr, + IN UINT64 GP + ) +/*++ + +Routine Description: + + Set Esal global data in physical mode. + +Arguments: + + Ptr - Pointer to the data + GP - Global pointer + +Returns: + + Output regs + +--*/ +; + +SAL_RETURN_REGS +LibSetEsalVirtData ( + IN VOID *Ptr, + IN UINT64 GP + ) +/*++ + +Routine Description: + + Set Esal global data in virtual mode. + +Arguments: + + Ptr - Pointer to the data + GP - Global pointer + +Returns: + + Output regs + +--*/ +; + +SAL_RETURN_REGS +LibGetGlobalPhyData ( + VOID + ) +/*++ + +Routine Description: + + Get Esal global data in physical mode. + +Arguments: + + None + +Returns: + + Output regs + +--*/ +; + +SAL_RETURN_REGS +LibGetGlobalVirtData ( + VOID + ) +/*++ + +Routine Description: + + Get Esal global data in virtual mode. + +Arguments: + + None + +Returns: + + Output regs + +--*/ +; + +SAL_RETURN_REGS +LibSetGlobalPhyData ( + IN VOID *Ptr, + IN UINT64 GP + ) +/*++ + +Routine Description: + + Set Esal global data in physical mode. + +Arguments: + + Ptr - Pointer to the data + GP - Global pointer + +Returns: + + Output regs + +--*/ +; + +SAL_RETURN_REGS +LibSetGlobalVirtData ( + IN VOID *Ptr, + IN UINT64 GP + ) +/*++ + +Routine Description: + + Set Esal global data in virtual mode. + +Arguments: + + Ptr - Pointer to the data + GP - Global pointer + +Returns: + + Output regs + +--*/ +; + +SAL_RETURN_REGS +GetIrrData ( + VOID + ) +/*++ + +Routine Description: + + Get interrupt request register. + +Arguments: + + None + +Returns: + + Output regs + +--*/ +; + +VOID +PrepareApsForHandOverToOS ( + VOID + ) +/*++ + +Routine Description: + + Prepare AP info for hand over to OS. + +Arguments: + + None + +Returns: + + None + +--*/ +; + +VOID +HandOverApsToOS ( + IN UINT64 a1, + IN UINT64 a2, + IN UINT64 a3 + ) +/*++ + +Routine Description: + + Hand over AP info to OS. + +Arguments: + + a1 - Address to call into + + a2 - GP + + a3 - Undefined + +Returns: + + None + +--*/ +; + +SAL_RETURN_REGS +GetPsrData ( + VOID + ) +/*++ + +Routine Description: + + Get PSR register. + +Arguments: + + None + +Returns: + + Output regs. + +--*/ +; + +SAL_RETURN_REGS +GetProcIdData ( + VOID + ) +/*++ + +Routine Description: + + Get LID + +Arguments: + + None + +Returns: + + Output regs + +--*/ +; + +VOID +SwitchCpuStack ( + IN UINT64 NewBsp, + IN UINT64 OldBsp + ) +/*++ + +Routine Description: + + Switch BSP + +Arguments: + + NewBsp - New BSP index + OldBsp - Old BSP index + +Returns: + + None + +--*/ +; + +// +// SAL Reset Class +// +VOID +SalResetSystem ( + IN EFI_RESET_TYPE ResetType, + IN EFI_STATUS ResetStatus, + IN UINTN DataSize, + IN CHAR16 *ResetData + ) +/*++ + +Routine Description: + + Reset system + +Arguments: + + ResetType - Reset type + ResetStatus - Reset status + DataSize - Size of ResetData + ResetData - Description string + +Returns: + + None + +--*/ +; + +// +// PAL PROC Class +// +SAL_RETURN_REGS +SalPalProc ( + IN UINT64 Arg1, + IN UINT64 Arg2, + IN UINT64 Arg3, + IN UINT64 Arg4 + ) +/*++ + +Routine Description: + + Call pal proc. + +Arguments: + + Arg1 - Pal call index + Arg2 - First arg + Arg3 - Second arg + Arg4 - Third arg + +Returns: + + Output regs + +--*/ +; + +SAL_RETURN_REGS +SalRegisterNewPalEntry ( + IN BOOLEAN PhysicalPalAddress, + IN EFI_PHYSICAL_ADDRESS NewPalAddress + ) +/*++ + +Routine Description: + + Register Pal entry. + +Arguments: + + PhysicalPalAddress - The address is physical or virtual + NewPalAddress - New Pal entry address + +Returns: + + Output regs + +--*/ +; + +SAL_RETURN_REGS +SalGetPalEntryPointer ( + IN BOOLEAN PhysicalPalAddress + ) +/*++ + +Routine Description: + + Get Pal entry. + +Arguments: + + PhysicalPalAddress - The address is physical or virtual + +Returns: + + Output regs + +--*/ +; + +// +// SAL MTC Class +// +EFI_STATUS +SalGetNextHighMonotonicCount ( + OUT UINT32 *HighCount + ) +/*++ + +Routine Description: + + Get next high 32 bits of monotonic count. + +Arguments: + + HighCount - High 32 bits of monotonic count. + +Returns: + + Status code + +--*/ +; + +// +// SAL BASE Class +// +SAL_RETURN_REGS +SalProcSetVectors ( + IN UINT64 SalVectorType, + IN UINT64 PhyAddr1, + IN UINT64 Gp1, + IN UINT64 LengthCs1, + IN UINT64 PhyAddr2, + IN UINT64 Gp2, + IN UINT64 LengthCs2 + ) +/*++ + +Routine Description: + + Set vectors. + +Arguments: + + SalVectorType - Vector type + PhyAddr1 - OS MCA entry point + Gp1 - GP for OS MCA entry + LengthCs1 - Length of OS MCA + PhyAddr2 - OS INIT entry point + Gp2 - GP for OS Init entry + LengthCs2 - Length of OS INIT + +Returns: + + Output regs + +--*/ +; + +SAL_RETURN_REGS +SalProcMcRendez ( + VOID + ) +/*++ + +Routine Description: + + Mc rendezvous function. + +Arguments: + + None + +Returns: + + Output regs + +--*/ +; + +SAL_RETURN_REGS +SalProcMcSetParams ( + IN UINT64 ParamType, + IN UINT64 IntOrMem, + IN UINT64 IntOrMemVal, + IN UINT64 Timeout, + IN UINT64 McaOpt + ) +/*++ + +Routine Description: + + Set MCA parameters. + +Arguments: + + ParamType - Parameter type + IntOrMem - Interrupt or memory address + IntOrMemVal - Interrupt number or memory address value + Timeout - Time out value + McaOpt - Option for MCA + +Returns: + + Output regs + +--*/ +; + +SAL_RETURN_REGS +EsalProcGetVectors ( + IN UINT64 VectorType + ) +/*++ + +Routine Description: + + Get OS MCA vector. + +Arguments: + + VectorType - Vector type + +Returns: + + Output regs + +--*/ +; + +SAL_RETURN_REGS +EsalProcMcGetParams ( + IN UINT64 ParamInfoType + ) +/*++ + +Routine Description: + + Get MCA parameter. + +Arguments: + + ParamInfoType - Parameter info type + +Returns: + + Output regs + +--*/ +; + +SAL_RETURN_REGS +EsalProcMcGetMcParams ( + VOID + ) +/*++ + +Routine Description: + + Get MCA parameter. + +Arguments: + + +Returns: + + Output regs + +--*/ +; + +SAL_RETURN_REGS +EsalProcGetMcCheckinFlags ( + IN UINT64 ProcessorUnit + ) +/*++ + +Routine Description: + + Get process status. + +Arguments: + + ProcessorUnit - Processor Index + +Returns: + + Output regs + +--*/ +; + +// +// Sal Base Class enums +// +typedef enum { + McaVector, + BspInitVector, + BootRendezVector, + ApInitVector +} ESAL_GET_VECTOR_TYPE; + +// +// Sal RTC Class +// +EFI_STATUS +SalGetTime ( + OUT EFI_TIME *Time, + OUT EFI_TIME_CAPABILITIES *Capabilities + ) +/*++ + +Routine Description: + + Returns the current time and date information, and the time-keeping + capabilities of the hardware platform. + +Arguments: + + Time - A pointer to storage to receive a snapshot of the current time. + Capabilities - An optional pointer to a buffer to receive the real time clock device¡¯s + capabilities. + +Returns: + + Status code + +--*/ +; + +EFI_STATUS +SalSetTime ( + OUT EFI_TIME *Time + ) +/*++ + +Routine Description: + + Sets the current local time and date information. + +Arguments: + + Time - A pointer to the current time. + +Returns: + + Status code + +--*/ +; + +EFI_STATUS +SalGetWakeupTime ( + OUT BOOLEAN *Enabled, + OUT BOOLEAN *Pending, + OUT EFI_TIME *Time + ) +/*++ + +Routine Description: + + Returns the current wakeup alarm clock setting. + +Arguments: + + Enabled - Indicates if the alarm is currently enabled or disabled. + Pending - Indicates if the alarm signal is pending and requires acknowledgement. + Time - The current alarm setting. + +Returns: + + Status code + +--*/ +; + +EFI_STATUS +SalSetWakeupTime ( + IN BOOLEAN Enable, + IN EFI_TIME *Time + ) +/*++ + +Routine Description: + + Sets the system wakeup alarm clock time. + +Arguments: + + Enable - Enable or disable the wakeup alarm. + Time - If Enable is TRUE, the time to set the wakeup alarm for. + If Enable is FALSE, then this parameter is optional, and may be NULL. + +Returns: + + Status code + +--*/ +; + +SAL_RETURN_REGS +SalInitializeThreshold ( + IN VOID *ThresholdStruct, + IN UINT64 Count, + IN UINT64 Duration + ) +/*++ + +Routine Description: + + Init threshold structure. + +Arguments: + + ThresholdStruct - Threshold structure + Count - Threshold count + Duration - Duration + +Returns: + + Output regs + +--*/ +; + +SAL_RETURN_REGS +SalBumpThresholdCount ( + IN VOID *ThresholdStruct, + IN UINT64 Count, + IN UINT64 Duration + ) +/*++ + +Routine Description: + + Bump threshold count. + +Arguments: + + ThresholdStruct - Threshold structure + Count - Threshold count + Duration - Duration + +Returns: + + Output regs + +--*/ +; + +SAL_RETURN_REGS +SalGetThresholdCount ( + IN VOID *ThresholdStruct, + IN UINT64 Count, + IN UINT64 Duration + ) +/*++ + +Routine Description: + + Get threshold structure. + +Arguments: + + ThresholdStruct - Threshold structure + Count - Threshold count + Duration - Duration + +Returns: + + Output regs + +--*/ +; + +// +// Common Lib Function +// +EFI_STATUS +RegisterEsalFunction ( + IN UINT64 FunctionId, + IN EFI_GUID *ClassGuid, + IN SAL_INTERNAL_EXTENDED_SAL_PROC Function, + IN VOID *ModuleGlobal + ) +/*++ + +Routine Description: + + Register ESAL Class Function and it's asociated global. + This function is boot service only! + +Arguments: + FunctionId - ID of function to register + ClassGuid - GUID of function class + Function - Function to register under ClassGuid/FunctionId pair + ModuleGlobal - Module global for Function. + +Returns: + EFI_SUCCESS - If ClassGuid/FunctionId Function was registered. + +--*/ +; + +EFI_STATUS +EfiInitializeSalDriverLib ( + IN BOOLEAN Runtime + ) +/*++ + +Routine Description: + + Initialize Sal driver lib. + +Arguments: + Runtime - At runtime or not? + +Returns: + Status code + +--*/ +; + +// +// MCA PMI INIT Registeration Functions. +// +EFI_STATUS +LibRegisterMcaFunction ( + IN EFI_SAL_MCA_HANDLER McaHandler, + IN VOID *ModuleGlobal, + IN BOOLEAN MakeFirst, + IN BOOLEAN MakeLast + ) +/*++ + +Routine Description: + + Register MCA handler. + +Arguments: + McaHandler - MCA handler + ModuleGlobal - Module global for function + MakeFirst - Make it as first? + MakeLast - Make it as last? + +Returns: + Status code + +--*/ +; + +EFI_STATUS +LibRegisterPmiFunction ( + IN EFI_SAL_PMI_HANDLER PmiHandler, + IN VOID *ModuleGlobal, + IN BOOLEAN MakeFirst, + IN BOOLEAN MakeLast + ) +/*++ + +Routine Description: + + Register PMI handler. + +Arguments: + PmiHandler - PMI handler + ModuleGlobal - Module global for function + MakeFirst - Make it as first? + MakeLast - Make it as last? + +Returns: + Status code + +--*/ +; + +EFI_STATUS +LibRegisterInitFunction ( + IN EFI_SAL_INIT_HANDLER InitHandler, + IN VOID *ModuleGlobal, + IN BOOLEAN MakeFirst, + IN BOOLEAN MakeLast + ) +/*++ + +Routine Description: + + Register INIT handler. + +Arguments: + InitHandler - INIT handler + ModuleGlobal - Module global for function + MakeFirst - Make it as first? + MakeLast - Make it as last? + +Returns: + Status code + +--*/ +; + +// +// Base IO Class Functions +// +EFI_STATUS +ESalIoRead ( + IN EFI_CPU_IO_PROTOCOL_WIDTH Width, + IN UINT64 Address, + IN UINTN Count, + IN OUT VOID *Buffer + ) +/*++ + +Routine Description: + + Io read operation. + +Arguments: + + Width - Width of read operation + Address - Start IO address to read + Count - Read count + Buffer - Buffer to store result + +Returns: + + Status code + +--*/ +; + +EFI_STATUS +ESalIoWrite ( + IN EFI_CPU_IO_PROTOCOL_WIDTH Width, + IN UINT64 Address, + IN UINTN Count, + IN OUT VOID *Buffer + ) +/*++ + +Routine Description: + + Io write operation. + +Arguments: + + Width - Width of write operation + Address - Start IO address to write + Count - Write count + Buffer - Buffer to write to the address + +Returns: + + Status code + +--*/ +; + +EFI_STATUS +ESalMemRead ( + IN EFI_CPU_IO_PROTOCOL_WIDTH Width, + IN UINT64 Address, + IN UINTN Count, + IN OUT VOID *Buffer + ) +/*++ + +Routine Description: + Perform a Memory mapped IO read into Buffer. + +Arguments: + Width - Width of each read transaction. + Address - Memory mapped IO address to read + Count - Number of Width quanta to read + Buffer - Buffer to read data into. size is Width * Count + +Returns: + Status code + +--*/ +; + +EFI_STATUS +ESalMemWrite ( + IN EFI_CPU_IO_PROTOCOL_WIDTH Width, + IN UINT64 Address, + IN UINTN Count, + IN OUT VOID *Buffer + ) +/*++ + +Routine Description: + Perform a memory mapped IO write into Buffer. + +Arguments: + Width - Width of write transaction, and repeat operation to use + Address - IO address to write + Count - Number of times to write the IO address. + Buffer - Buffer to write data from. size is Width * Count + +Returns: + Status code + +--*/ +; + +// +// PCI Class Functions +// +SAL_RETURN_REGS +SalPCIConfigRead ( + IN UINT64 Address, + IN UINT64 Size + ) +/*++ + +Routine Description: + Pci config space read. + +Arguments: + Address - PCI address to read + Size - Size to read + +Returns: + Output regs + +--*/ +; + +SAL_RETURN_REGS +SalPCIConfigWrite ( + IN UINT64 Address, + IN UINT64 Size, + IN UINT64 Value + ) +/*++ + +Routine Description: + Pci config space write. + +Arguments: + Address - PCI address to write + Size - Size to write + Value - Value to write + +Returns: + Output regs + +--*/ +; + +// +// MP Class Functions +// +SAL_RETURN_REGS +LibMPAddCpuData ( + IN UINT64 CpuGlobalId, + IN BOOLEAN Enabled, + IN UINT64 PalCompatability + ) +/*++ + +Routine Description: + Add CPU data. + +Arguments: + CpuGlobalId - CPU ID + Enabled - Enabled or not + PalCompatability - Pal compatability + +Returns: + Output regs + +--*/ +; + +SAL_RETURN_REGS +LibMPRemoveCpuData ( + IN UINT64 CpuGlobalId + ) +/*++ + +Routine Description: + Remove CPU data. + +Arguments: + CpuGlobalId - CPU ID + +Returns: + Output regs + +--*/ +; + +SAL_RETURN_REGS +LibMPModifyCpuData ( + IN UINT64 CpuGlobalId, + IN BOOLEAN Enabled, + IN UINT64 PalCompatability + ) +/*++ + +Routine Description: + Modify CPU data. + +Arguments: + CpuGlobalId - CPU ID + Enabled - Enabled or not + PalCompatability - Pal compatability + +Returns: + Output regs + +--*/ +; + +SAL_RETURN_REGS +LibMPGetCpuDataByID ( + IN UINT64 CpuGlobalId, + IN BOOLEAN IndexByEnabledCpu + ) +/*++ + +Routine Description: + Get CPU data. + +Arguments: + CpuGlobalId - CPU ID + IndexByEnabledCpu - Whether indexed by enabled CPU + +Returns: + Output regs + +--*/ +; + +SAL_RETURN_REGS +LibMPGetCpuDataByIndex ( + IN UINT64 Index, + IN BOOLEAN IndexByEnabledCpu + ) +/*++ + +Routine Description: + Get CPU data. + +Arguments: + Index - CPU index + IndexByEnabledCpu - Whether indexed by enabled CPU + +Returns: + Output regs + +--*/ +; + +SAL_RETURN_REGS +LibMPSendIpi ( + IN UINT64 ProcessorNumber, + IN UINT64 VectorNumber, + IN EFI_DELIVERY_MODE DeliveryMode, + IN BOOLEAN IRFlag + ) +/*++ + +Routine Description: + Send IPI. + +Arguments: + ProcessorNumber - Processor number + VectorNumber - Vector number + DeliveryMode - Delivery mode + IRFlag - Interrupt Redirection flag + +Returns: + Output regs + +--*/ +; + +SAL_RETURN_REGS +LibMpCurrentProcessor ( + IN BOOLEAN IndexByEnabledCpu + ) +/*++ + +Routine Description: + Get current processor index. + +Arguments: + IndexByEnabledCpu - Whether indexed by enabled CPU + +Returns: + Output regs + +--*/ +; + +SAL_RETURN_REGS +LibGetNumProcessors ( + VOID + ) +/*++ + +Routine Description: + Get number of processors. + +Arguments: + None + +Returns: + Output regs + +--*/ +; + +SAL_RETURN_REGS +LibMpSaveMinStatePointer ( + IN UINT64 CpuGlobalId, + IN EFI_PHYSICAL_ADDRESS MinStatePointer + ) +/*++ + +Routine Description: + Register pointer to save min state. + +Arguments: + CpuGlobalId - CPU global ID + MinStatePointer - Pointer to save min state + +Returns: + Output regs + +--*/ +; + +SAL_RETURN_REGS +LibMpRestoreMinStatePointer ( + IN UINT64 CpuGlobalId + ) +/*++ + +Routine Description: + Restore pointer to save min state. + +Arguments: + CpuGlobalId - CPU global ID + +Returns: + Output regs + +--*/ +; + +// +// MCA Class Functions +// +EFI_STATUS +LibMcaGetStateInfo ( + IN UINT64 CpuId, + OUT EFI_PHYSICAL_ADDRESS *StateBufferPointer, + OUT UINT64 *RequiredStateBufferSize + ) +/*++ + +Routine Description: + MCA get state info. + +Arguments: + CpuId - CPU ID + StateBufferPointer - Pointer of state buffer + RequiredStateBufferSize - Size of required state buffer + +Returns: + Status code + +--*/ +; + +EFI_STATUS +LibMcaRegisterCpu ( + IN UINT64 CpuId, + IN EFI_PHYSICAL_ADDRESS StateBufferAddress + ) +/*++ + +Routine Description: + MCA register CPU state info. + +Arguments: + CpuId - CPU ID + StateBufferAddress - Pointer of state buffer + +Returns: + Status code + +--*/ +; + +// +// SAL ELOG Functions +// +EFI_STATUS +LibSalGetStateInfo ( + IN UINT64 McaType, + IN UINT8 *McaBuffer, + OUT UINTN *Size + ) +/*++ + +Routine Description: + Get state info. + +Arguments: + McaType - MCA type + McaBuffer - Info buffer provided by caller + Size - Size of info + +Returns: + Status code + +--*/ +; + +EFI_STATUS +LibSalGetStateInfoSize ( + IN UINT64 McaType, + OUT UINTN *Size + ) +/*++ + +Routine Description: + Get state info size. + +Arguments: + McaType - MCA type + Size - Size required + +Returns: + Status code + +--*/ +; + +EFI_STATUS +LibSalClearStateInfo ( + IN UINT64 McaType + ) +/*++ + +Routine Description: + Clear state info. + +Arguments: + McaType - MCA type + +Returns: + Status code + +--*/ +; + +EFI_STATUS +LibEsalGetStateBuffer ( + IN UINT64 McaType, + OUT UINT8 **McaBuffer, + OUT UINTN *Index + ) +/*++ + +Routine Description: + Get state buffer. + +Arguments: + McaType - MCA type + McaBuffer - MCA buffer + Index - CPU index + +Returns: + Status code + +--*/ +; + +EFI_STATUS +LibEsalSaveStateBuffer ( + IN UINT64 McaType + ) +/*++ + +Routine Description: + Save state buffer. + +Arguments: + McaType - MCA type + +Returns: + Status code + +--*/ +; + +#endif |