11. Extended SAL Services
This document describes the Extended SAL support for the EDK II. The Extended SAL uses a calling convention that is very similar to the SAL calling convention. This includes the ability to call Extended SAL Procedures in physical mode prior to SetVirtualAddressMap() , and the ability to call Extended SAL Procedures in physical mode or virtual mode after SetVirtualAddressMap() .
11.1. SAL Overview
The Extended SAL can be used to implement the following services:
SAL Procedures required by the Intel Itanium Processor Family System Abstraction Layer Specification.
EFI Runtime Services required by the UEFI 2.0 Specification , that may also be required by SAL Procedures, other Extended SAL Procedures, or MCA, INIT, and PMI flows.
Services required to abstract hardware accesses from SAL Procedures and Extended SAL Procedures. This includes I/O port accesses, MMIO accesses, PCI Configuration Cycles, and access to non-volatile storage for logging purposes.
Services required during the MCA, INIT, and PMI flows.
Note
Arguments to SAL procedures are formatted the same as arguments and paramenters in this document. Example “ address parameter to …”
The Extended SAL support includes a DXE Protocol that supports the publishing of the SAL System Table along with services to register and call Extended SAL Procedures. It also includes a number of standard Extended SAL Service Classes that are required to implement EFI Runtime Services, the minimum set of required SAL Procedures, services to abstract hardware accesses, and services to support the MSA, INIT, and PMI flows. Platform developer may define addition Extended SAL Service Classes to provide platform specific functionality that requires the Extended SAL calling conventions.The SAL calling convention requires operation in both physical and virtual mode. Standard EFI runtime services work in either physical mode or virtual mode at a time. Therefore, the EFI code can call the SAL code, but not vice versa. To reduce code duplication resulting out of multiple operating modes, additional procedures called Extended SAL Procedures are implemented. Architected SAL procedures are a subset of the Extended SAL procedures. The individual Extended SAL procedures can be called through the entry point ExtendedSalProc() in the EXTENDED_SAL_BOOT_SERVICE_PROTOCOL . The cost of writing dual mode code is that one must strictly follow the SAL runtime coding rules. Experience on prior IPF platform shows us that the benefits outweigh the cost.
Note
In the figure above, arrows indicate the direction of calling. For example, OS code may call EFI runtime services or SAL_PROCs . Extended SAL functions are divided in several classes based on their functionality, with no defined hierarchy. It is legal for an EFI Boot Service Code to call ExtendedSalProc() . It is also legal for an Extended SAL procedure to call another Extended SAL Procedure via ExtendedSalProc() . These details are not shown in the figure in order to maintain clarity.
A driver with a module type of DXE_SAL_DRIVER is required to produce the EXTENDED_SAL_BOOT_SERVICE_PROTOCOL . This driver contains the entry point of the Extended SAL Procedures and dispatches previously registered procedures. It also provides services to register Extended SAL Procedures and functions to help construct the SAL System Table.
Drivers with a module type of DXE_SAL_DRIVER are required to produce the various Extended SAL Service Classes. It is expected that a single driver will supply all the Extended SAL Procedures that belong to a single Extended SAL Service Class. As each Extended SAL Service Class is registered, the GUID associated with that class is also installed into the EFI Handle Database. This allows other DXE drivers to use the Extended SAL Service Class GUIDs in their dependency expressions, so they only execute once their dependent Extended SAL Service Classes are available. Drivers register the set of Extended SAL Procedures they produce with the EXTENDED_SAL_BOOT_SERVICE_PROTOCOL . Once this registration step is complete, the Extended SAL Procedure are available for use by other drivers.
11.2. Extended SAL Boot Service Protocol
This protocol supports the creation of the SAL System Table, and provides services to register and call Extended SAL Procedures. The driver that produces this protocol is required to allocate and initialize the SAL System Table. The SAL System Table must also be registered in the list of EFI System Configuration tables. The driver that produces this protocol must be of type DXE_SAL_DRIVER . This is required because the entry point to the ExtendedSalProc() function is always available, even after the OS assumes control of the platform at ExitBootServices() .
11.2.1. EXTENDED_SAL_BOOT_SERVICE_PROTOCOL
Summary
This section provides a detailed description of the EXTENDED_SAL_BOOT_SERVICE_PROTOCOL .
GUID
#define EXTENDED_SAL_BOOT_SERVICE_PROTOCOL_GUID \
{0xde0ee9a4,0x3c7a,0x44f2, \
{0xb7,0x8b,0xe3,0xcc,0xd6,0x9c,0x3a,0xf7}}
Protocol Interface Structure
typedef struct _EXTENDED_SAL_BOOT_SERVICE_PROTOCOL {
EXTENDED_SAL_ADD_SST_INFO AddSalSystemTableInfo;
EXTENDED_SAL_ADD_SST_ENTRY AddSalSystemTableEntry;
EXTENDED_SAL_REGISTER_INTERNAL_PROC RegisterExtendedSalProc;
EXTENDED_SAL_PROC ExtendedSalProc;
} EXTENDED_SAL_BOOT_SERVICE_PROTOCOL;
Parameters
- AddSalSystemTableInfo
Adds platform specific information to the to the header of the SAL System Table. Only available prior to ExitBootServices() .
- AddSalSystemTableEntry
Add an entry into the SAL System Table. Only available prior to ExitBootServices() .
- RegisterExtendedSalProc
Registers an Extended SAL Procedure. Extended SAL Procedures are named by a (GUID, FunctionID) pair. Extended SAL Procedures are divided into classes based on the functionality they provide. Extended SAL Procedures are callable only in physical mode prior to SetVirtualAddressMap() , and are callable in both virtual and physical mode after SetVirtualAddressMap() . Only available prior to ExitBootServices() .
- ExtendedSalProc
Entry point for all extended SAL procedures. This entry point is always available.
Description
The EXTENDED_SAL_BOOT_SERVICE_PROTOCOL provides a mechanisms for platform specific drivers to update the SAL System Table and register Extended SAL Procedures that are callable in physical or virtual mode using the SAL calling convention. The services exported by the SAL System Table are typically implemented as Extended SAL Procedures. Services required by MCA, INIT, and PMI flows that are also required in the implementation of EFI Runtime Services are also typically implemented as Extended SAL Procedures. Extended SAL Procedures are named by a (GUID, FunctionID) pair. A standard set of these (GUID, FunctionID) pairs are defined in this specification. Platforms that require additional functionality from their Extended SAL Procedures may define additional (GUID, FunctionID) pairs.
11.2.2. EXTENDED_SAL_BOOT_SERVICE_PROTOCOL.AddSalSystemTableInfo()
Summary
Adds platform specific information to the to the header of the SAL System Table.
Prototype
typedef
EFI_STATUS
(EFIAPI *EXTENDED_SAL_ADD_SST_INFO) (
IN EXTENDED_SAL_BOOT_SERVICE_PROTOCOL *This,
IN UINT16 SalAVersion,
IN UINT16 SalBVersion,
IN CHAR8 *OemId,
IN CHAR8 *ProductId
);
Parameters
- This
A pointer to the EXTENDED_SAL_BOOT_SERVICE_PROTOCOL instance.
- SalAVersion
Version of recovery SAL PEIM(s) in BCD format. Higher byte contains the major revision and the lower byte contains the minor revision.
- SalBVersion
Version of DXE SAL Driver in BCD format. Higher byte contains the major revision and the lower byte contains the minor revision.
- OemId
A pointer to a Null-terminated ASCII string that contains OEM unique string. The string cannot be longer than 32 bytes in total length.
- ProductId
A pointer to a Null-terminated ASCII string that uniquely identifies a family of compatible products. The string cannot be longer than 32 bytes in total length.
Description
This function updates the platform specific information in the SAL System Table header. The SAL_A_VERSION field of the SAL System Table is set to the value specified by SalAVersion . The SAL_B_VERSION field of the SAL System Table is set to the value specified by SalBVersion . The OEM_ID field of the SAL System Table is filled in with the contents of the Null-terminated ASCII string specified by OemId . If OemId is NULL or the length of OemId is greater than 32 characters, then EFI_INVALID_PARAMETER is returned. The PRODUCT_ID field of the SAL System Table is filled in with the contents of the Null-terminated ASCII string specified by ProductId . If ProductId is NULL or the length of ProductId is greater than 32 characters, then EFI_INVALID_PARAMETER is returned. This function is also responsible for re-computing the CHECKSUM field of the SAL System Table after the SAL_A_REVISION , SAL_B_REVISION , OEM_ID , and PRODUCT_ID fields have been filled in. Once the CHEKSUM field has been updated, EFI_SUCCESS is returned.
Status Codes Returned
EFI_SUCCESS |
The SAL System Table header was updated successfully |
EFI_INVALID_PARAMETER |
OemId is NULL |
EFI_INVALID_PARAMETER |
ProductId is NULL |
EFI_INVALID_PARAMETER |
The length of OemId is greater than 32 characters |
EFI_INVALID_PARAMETER |
The length of ProductId is greater than 32 characters |
11.2.3. EXTENDED_SAL_BOOT_SERVICE_PROTOCOL.AddSalSystemTableEntry()
Summary
Adds an entry to the SAL System Table.
Prototype
typedef
EFI_STATUS
(EFIAPI *EXTENDED_SAL_ADD_SST_ENTRY) (
IN EXTENDED_SAL_BOOT_SERVICE_PROTOCOL *This,
IN UINT8 *TableEntry,
IN UINTN EntrySize
);
Parameters
- This
A pointer to the EXTENDED_SAL_BOOT_SERVICE_PROTOCOL instance.
- TableEntry
Pointer to a buffer containing a SAL System Table entry that is EntrySize bytes in length. The first byte of the TableEntry describes the type of entry. See the Intel Itanium Processor Family System Abstraction Layer Specification* for more details.
- EntrySize
The size, in bytes, of TableEntry .
Description
This function adds the SAL System Table Entry specified by TableEntry and EntrySize to the SAL System Table. If TableEntry is NULL , then EFI_INVALID_PARAMETER is returned. If the entry type specified in TableEntry is invalid, then EFI_INVALID_PARAMETER is returned. If the length of the TableEntry is not valid for the entry type specified in TableEntry , then EFI_INVALID_PARAMETER is returned. Otherwise, TableEntry is added to the SAL System Table. This function is also responsible for re-computing the CHECKSUM field of the SAL System Table. Once the CHEKSUM field has been updated, EFI_SUCCESS is returned.
Status Codes Returned
EFI_SUCCESS |
The SAL System Table was updated successfully |
EFI_INVALID_PARAMETER |
TableEntry is NULL. |
EFI_INVALID_PARAMETER |
TableEntry specifies an invalid entry type. |
EFI_INVALID_PARAMETER |
EntrySize is not valid for this type of entry. |
11.2.4. EXTENDED_SAL_BOOT_SERVICE_PROTOCOL.AddExtendedSalProc()
Summary
Registers an Extended SAL Procedure.
Prototype
typedef
EFI_STATUS
(EFIAPI *EXTENDED_SAL_REGISTER_INTERNAL_PROC) (
IN EXTENDED_SAL_BOOT_SERVICE_PROTOCOL *This,
IN UINT64 ClassGuidLo,
IN UINT64 ClassGuidHi,
IN UINT64 FunctionId,
IN SAL_INTERNAL_EXTENDED_SAL_PROC InternalSalProc,
IN VOID \
*PhysicalModuleGlobal OPTIONAL
);
Parameters
- This
A pointer to the EXTENDED_SAL_BOOT_SERVICE_PROTOCOL instance.
- ClassGuidLo
The lower 64-bits of the class GUID for the Extended SAL Procedure being added. Each class GUID contains one or more functions specified by a Function ID.
- ClassGuidHi
The upper 64-bits of the class GUID for the Extended SAL Procedure being added. Each class GUID contains one or more functions specified by a Function ID.
- FunctionId
The Function ID for the Extended SAL Procedure that is being added. This Function ID is a member of the Extended SAL Procedure class specified by ClassGuidLo and ClassGuidHi .
- InternalSalProc
A pointer to the Extended SAL Procedure being added. The Extended SAL Procedure is named by the GUID and Function ID specified by ClassGuidLo , ClassGuidHi , and FunctionId .
- PhysicalModuleGlobal
Pointer to a module global structure. This is a physical mode pointer. This pointer is passed to the Extended SAL Procedure specified by ClassGuidLo , ClassGuidHi , FunctionId , and InternalSalProc . If the system is in physical mode, then this pointer is passed unmodified to InternalSalProc . If the system is in virtual mode, then the virtual address associated with this pointer is passed to InternalSalProc . This parameter is optional and may be NULL . If it is NULL , then NULL is always passed to InternalSalProc .
typedef
SAL_RETURN_REGS
(EFIAPI *SAL_INTERNAL_EXTENDED_SAL_PROC) (
IN UINT64 FunctionId,
IN UINT64 Arg2,
IN UINT64 Arg3,
IN UINT64 Arg4,
IN UINT64 Arg5,
IN UINT64 Arg6,
IN UINT64 Arg7,
IN UINT64 Arg8,
IN BOOLEAN VirtualMode,
IN VOID *ModuleGlobal OPTIONAL
);
- FunctionId
The Function ID associated with this Extended SAL Procedure.
- Arg2
Second argument to the Extended SAL procedure.
- Arg3
Third argument to the Extended SAL procedure.
- Arg4
Fourth argument to the Extended SAL procedure.
- Arg5
Fifth argument to the Extended SAL procedure.
- Arg6
Sixth argument to the Extended SAL procedure.
- Arg7
Seventh argument to the Extended SAL procedure.
- Arg8
Eighth argument to the Extended SAL procedure.
- VirtualMode
TRUE if the Extended SAL Procedure is being invoked in virtual mode. FALSE if the Extended SAL Procedure is being invoked in physical mode.
- ModuleGlobal
A pointer to the global context associated with this Extended SAL Procedure.
Description
The Extended SAL Procedure specified by InternalSalProc and named by ClassGuidLo , ClassGuidHi , and FunctionId is added to the set of available Extended SAL Procedures. Each Extended SAL Procedure is allowed one module global to record any state information required during the execution of the Extended SAL Procedure. This module global is specified by PhysicalModuleGlobal .
If there are not enough resource available to add the Extended SAL Procedure, then EFI_OUT_OF_RESOURCES is returned.
If the Extended SAL Procedure specified by InternalSalProc and named by ClassGuidLo , ClassGuidHi , and FunctionId was not previously registered, then the Extended SAL Procedure along with its module global specified by PhysicalModuleGlobal is added to the set of Extended SAL Procedures, and EFI_SUCCESS is returned.
If the Extended SAL Procedure specified by InternalSalProc and named by ClassGuidLo , ClassGuidHi , and FunctionId was previously registered, then the module global is replaced with PhysicalModuleGlobal , and EFI_SUCCESS is returned.
Status Codes Returned
EFI_SUCCESS |
The Extended SAL Procedure was added |
EFI_OUT_OF_RESOURCES |
There are not enough resources available to add the Extended SAL Procedure |
11.2.5. EXTENDED_SAL_BOOT_SERVICE_PROTOCOL.ExtendedSalProc()
Summary
Calls a previously registered Extended SAL Procedure.
Prototype
typedef
SAL_RETURN_REGS
(EFIAPI *EXTENDED_SAL_PROC) (
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
);
Parameters
- ClassGuidLo
The lower 64-bits of the class GUID for the Extended SAL Procedure that is being called.
- ClassGuidHi
The upper 64-bits of the class GUID for the Extended SAL Procedure that is being called.
- FunctionId
Function ID for the Extended SAL Procedure being called.
- Arg2
Second argument to the Extended SAL procedure.
- Arg3
Third argument to the Extended SAL procedure.
- Arg4
Fourth argument to the Extended SAL procedure.
- Arg5
Fifth argument to the Extended SAL procedure.
- Arg6
Sixth argument to the Extended SAL procedure.
- Arg7
Seventh argument to the Extended SAL procedure.
- Arg8
Eighth argument to the Extended SAL procedure.
Description
This function calls the Extended SAL Procedure specified by ClassGuidLo , ClassGuidHi , and FunctionId . The set of previously registered Extended SAL Procedures is searched for a matching ClassGuidLo , ClassGuidHi , and FunctionId . If a match is not found, then EFI_SAL_NOT_IMPLEMENTED is returned. The module global associated with ClassGuidLo , ClassGuidHi , and FunctionId is retrieved. If that module global is not NULL and the system is in virtual mode, and the virtual address of the module global is not available, then EFI_SAL_VIRTUAL_ADDRESS_ERROR is returned. Otherwise, the Extended SAL Procedure associated with ClassGuidLo , ClassGuidHi , and FunctionId is called. The arguments specified by FunctionId , Arg2 , Arg3 , Arg4 , Arg5 , Arg6 , Arg7 , and Arg8 are passed into the Extended SAL Procedure along with the VirtrualMode flag and ModuleGlobal pointer.
If the system is in physical mode, then the ModuleGlobal that was originally registered with AddExtendedSalProc() is passed into the Extended SAL Procedure. If the system is in virtual mode, then the virtual address associated with ModuleGlobal is passed to the Extended SAL Procedure. The EFI Runtime Service ConvertPointer() is used to convert the physical address of ModuleGlobal to a virtual address. If ModuleGlobal was registered as NULL , then NULL is always passed into the Extended SAL Procedure.
The return status from this Extended SAL Procedure is returned.
Status Codes Returned
EFI_SAL_NOT_IMPLEMENTED |
The Extended SAL Procedure specified by ClassGuidLo ClassGuidHi and FunctionId has not been registered |
EFI_SAL_VIRTUAL_ADDRESS_ERROR |
This function was called in virtual mode before virtual mappings for the specified Extended SAL Procedure are available |
Other |
The result returned from the specified Extended SAL Procedure |
11.3. Extended SAL Service Classes
This chapter contains the standard set of Extended SAL service classes. These include EFI Runtime Services in the UEFI 2.0 Specification , SAL Procedures required by the Intel Itanium Processor Family System Abstraction Layer Specification , services required to abstract access to hardware devices, and services required in the handling of MCA, INIT, and PMI flows. Extended SAL Service Classes behave like PPIs and Protocols. They are named by GUID and contain a set of services for each GUID. This also allows platform developers to add new Extended SAL service classes over time to implement platform specific features that require the Extended SAL capabilities.
The following tables list the Extended SAL Service Classes defined by this specification. The following sections contain detailed descriptions of the functions in each of the classes.
Name |
Description |
---|---|
Real Time Clock Services Class |
The Extended SAL Real Time Clock Services Class provides functions to access the real time clock |
Reset Services Class |
The Extended SAL Reset Services Class provides platform reset services |
Status Code Services Class |
The Extended SAL Status Code Services Class provides services to report status code information |
Monotonic Counter Services Class |
The Extended SAL Monotonic Counter Services Class provides functions to access the monotonic counter |
Variable Services Class |
The Extended SAL Variable Services Class provides functions to access EFI variables |
Name |
Description |
---|---|
Base Services Class |
The Extended SAL Base Services Classprovides base services that do not haveany hardware dependencies including anumber of SAL Procedures required by the Intel Itanium Processor Family SystemAbstraction Layer Specification. |
Cache Services Class |
The Extended SAL Cache Services Classprovides services to initialize and flushthe caches. |
PAL Services Class |
The Extended SAL PAL Services Classprovides services to make PAL calls. |
PCI Services Class |
The Extended SAL PCI Services Classprovides services to perform PCIconfiguration cycles. |
MCA Log Services Class |
The Extended SAL MCA Log Services Classprovides logging services for MCA events. |
Name |
Description |
---|---|
Base I O Services Class |
The Extended SAL Base I O Services Class provides the basic abstractions for accessing I O ports and MMIO |
Stall Services Class |
The Extended SAL Stall Services Class provides functions to perform calibrated delays |
Firmware Volume Block Services Class |
The Extended SAL Firmware Volume Block Services Class provides services that are equivalent to the Firmware Volume Block Protocol in the Platform Initialization Specification |
Name |
Description |
---|---|
MP Services Class |
The Extended SAL MP Services Class providesservices for managing multiple CPUs. |
MCA Services Class |
TBD |
11.3.1. Extended SAL Base I/O Services Class
Summary
The Extended SAL Base I/O Services Class provides the basic abstractions for accessing I/O ports and MMIO.
GUID
#define EFI_EXTENDED_SAL_BASE_IO_SERVICES_PROTOCOL_GUID_LO \
0x451531e15aea42b5
#define EFI_EXTENDED_SAL_BASE_IO_SERVICES_PROTOCOL_GUID_HI \
0xa6657525d5b831bc
#define EFI_EXTENDED_SAL_BASE_IO_SERVICES_PROTOCOL_GUID \
{0x5aea42b5,0x31e1,0x4515,
{0xbc,0x31,0xb8,0xd5,0x25,0x75,0x65,0xa6}}
typedef enum {
IoReadFunctionId,
IoWriteFunctionId,
MemReadFunctionId,
MemWriteFunctionId,
} EFI_EXTENDED_SAL_BASE_IO_SERVICES_FUNC_ID;
Description
Name |
Description |
---|---|
ExtendedSalIoRead |
This function is equivalent in functionality to the Io Read function of the CPU I O PPI See Volume1 Platform Initialization Specification Section 7 2 The function prototype for the Io Read service is shown in Related Definitions |
ExtendedSalIoWrite |
This function is equivalent in functionality to the Io Write function of the CPU I O PPI See Volume1 Platform Initialization Specification Section 7 2 The function prototype for the Io Write service is shown in Related Definitions |
ExtendedSalMemRead |
This function is equivalent in functionality to the Mem Read function of the CPU I O PPI See Volume1 Platform Initialization Specification Section 7 2 The function prototype for the Mem Read service is shown in Related Definitions |
ExtendedSalMemWrite |
This function is equivalent in functionality to the Mem Write function of the CPU I O PPI See Volume1 Platform Initialization Specification Section 7 2 The function prototype for the Mem Write service is shown in Related Definitions |
11.3.2. ExtendedSalIoRead
Summary
This function is equivalent in functionality to the Io.Read() function of the CPU I/O PPI. See Volume1:Platform Initialization Specification Section 7.2. The function prototype for the Io.Read() service is shown in Related Definitions.
Prototype
SAL_RETURN_REGS
EFIAPI
ExtendedSalIoRead (
IN UINT64 FunctionId,
IN UINT64 Arg2,
IN UINT64 Arg3,
IN UINT64 Arg4,
IN UINT64 Arg5,
IN UINT64 Arg6,
IN UINT64 Arg7,
IN UINT64 Arg8,
IN BOOLEAN VirtualMode,
IN VOID *ModuleGlobal OPTIONAL
);
Parameters
- FunctionId
Must be
EsalIoReadFunctionId
.- Arg2
Signifies the width of the I/O read operation. This argument is interpreted as type
EFI_PEI_CPU_IO_PPI_WIDTH
. See the Width parameter in Related Definitions.- Arg3
The base address of the I/O read operation. This argument is interpreted as a UINT64. See the Address parameter in Related Definitions.
- Arg4
The number of I/O read operations to perform. This argument is interpreted as a
UINTN
. See the Count parameter in Related Definitions.- Arg5
The destination buffer to store the results. This argument is interpreted as a
VOID *
. See the Buffer parameter in Related Definitions.- Arg6
Reserved. Must be zero.
- Arg7
Reserved. Must be zero.
- Arg8
Reserved. Must be zero.
- VirtualMode
TRUE if the Extended SAL Procedure is being invoked in virtual mode. FALSE if the Extended SAL Procedure is being invoked in physical mode.
- ModuleGlobal
A pointer to the global context associated with this Extended SAL Procedure. Implementation dependent.
typedef
EFI_STATUS
(EFIAPI *EFI_PEI_CPU_IO_PPI_IO_MEM) (
IN EFI_PEI_SERVICES **PeiServices,
IN EFI_PEI_CPU_IO_PPI *This,
IN EFI_PEI_CPU_IO_PPI_WIDTH Width,
IN UINT64 Address,
IN UINTN Count,
IN OUT VOID *Buffer
);
Description
This function performs the equivalent operation as the Io.Read() function in the CPU I/O PPI. If this function is called in virtual mode before any required mapping have been converted to virtual addresses, then EFI_SAL_VIRTUAL_ADDRESS_ERROR
is returned. Otherwise, the status from performing the Io.Read() function of the CPU I/O PPI is returned.
Status Codes Returned
EFI_SAL_VIRTUAL_ADDRESS_ERROR |
This function was called in virtual mode before virtual mappings for the specified Extended SAL Procedure are available |
Other |
See the return status codes for the Io Read function in the CPU I O PPI |
11.3.3. ExtendedSalIoWrite
Summary
This function is equivalent in functionality to the Io.Write() function of the CPU I/O PPI. See Volume1:Platform Initialization Specification Section 7.2. The function prototype for the Io.Write() service is shown in Related Definitions.
Prototype
SAL_RETURN_REGS
EFIAPI
ExtendedSalIoWrite (
IN UINT64 FunctionId,
IN UINT64 Arg2,
IN UINT64 Arg3,
IN UINT64 Arg4,
IN UINT64 Arg5,
IN UINT64 Arg6,
IN UINT64 Arg7,
IN UINT64 Arg8,
IN BOOLEAN VirtualMode,
IN VOID *ModuleGlobal OPTIONAL
);
Parameters
- FunctionId
Must be EsalIoWriteFunctionId .
- Arg2
Signifies the width of the I/O write operation. This argument is interpreted as type EFI_PEI_CPU_IO_PPI_WIDTH . See the Width parameter in Related Definitions.
- Arg3
The base address of the I/O write operation. This argument is interpreted as a UINT64 . See the Address parameter in Related Definitions.
- Arg4
The number of I/O write operations to perform. This argument is interpreted as a UINTN . See the Count parameter in Related Definitions.
- Arg5
The source buffer of the value to write. This argument is interpreted as a
VOID *
. See the Buffer parameter in Related Definitions.- Arg6
Reserved. Must be zero.
- Arg7
Reserved. Must be zero.
- Arg8
Reserved. Must be zero.
- VirtualMode
TRUE if the Extended SAL Procedure is being invoked in virtual mode. FALSE if the Extended SAL Procedure is being invoked in physical mode.
- ModuleGlobal
A pointer to the global context associated with this Extended SAL Procedure. Implementation dependent.
typedef
EFI_STATUS
(EFIAPI *EFI_PEI_CPU_IO_PPI_IO_MEM) (
IN EFI_PEI_SERVICES **PeiServices,
IN EFI_PEI_CPU_IO_PPI *This,
IN EFI_PEI_CPU_IO_PPI_WIDTH Width,
IN UINT64 Address,
IN UINTN Count,
IN OUT VOID *Buffer
);
Description
This function performs the equivalent operation as the Io.Write() function in the CPU I/O PPI. If this function is called in virtual mode before any required mapping have been converted to virtual addresses, then EFI_SAL_VIRTUAL_ADDRESS_ERROR is returned. Otherwise, the status from performing the Io.Write() function of the CPU I/O PPI is returned.
Status Codes Returned
EFI_SAL_VIRTUAL_ADDRESS_ERROR |
This function was called in virtual mode before virtual mappings for the specified Extended SAL Procedure are available |
Other |
See the return status codes for the Io Write function in the CPU I O PPI |
11.3.4. ExtendedSalMemRead
Summary
This function is equivalent in functionality to the Mem.Read() function of the CPU I/O PPI. See Volume 1:Platform Initialization Specification Section 7.2. The function prototype for the Mem.Read() service is shown in Related Definitions.
Prototype
SAL_RETURN_REGS
EFIAPI
ExtendedSalMemRead (
IN UINT64 FunctionId,
IN UINT64 Arg2,
IN UINT64 Arg3,
IN UINT64 Arg4,
IN UINT64 Arg5,
IN UINT64 Arg6,
IN UINT64 Arg7,
IN UINT64 Arg8,
IN BOOLEAN VirtualMode,
IN VOID *ModuleGlobal OPTIONAL
);
Parameters
- FunctionId
Must be EsalMemReadFunctionId .
- Arg2
Signifies the width of the MMIO read operation. This argument is interpreted as type EFI_PEI_CPU_IO_PPI_WIDTH . See the Width parameter in Related Definitions.
- Arg3
The base address of the MMIO read operation. This argument is interpreted as a UINT64 . See the Address parameter in Related Definitions.
- Arg4
The number of MMIO read operations to perform. This argument is interpreted as a UINTN . See the Count parameter in Related Definitions.
- Arg5
The destination buffer to store the results. This argument is interpreted as a
VOID *
. See the Buffer parameter in Related Definitions.- Arg6
Reserved. Must be zero.
- Arg7
Reserved. Must be zero.
- Arg8
Reserved. Must be zero.
- VirtualMode
TRUE if the Extended SAL Procedure is being invoked in virtual mode. FALSE if the Extended SAL Procedure is being invoked in physical mode.
- ModuleGlobal
A pointer to the global context associated with this Extended SAL Procedure. Implementation dependent.
typedef
EFI_STATUS
(EFIAPI *EFI_PEI_CPU_IO_PPI_IO_MEM) (
IN EFI_PEI_SERVICES **PeiServices,
IN EFI_PEI_CPU_IO_PPI *This,
IN EFI_PEI_CPU_IO_PPI_WIDTH Width,
IN UINT64 Address,
IN UINTN Count,
IN OUT VOID *Buffer
);
Description
This function performs the equivalent operation as the Mem.Read() function in the CPU I/O PPI. If this function is called in virtual mode before any required mapping have been converted to virtual addresses, then EFI_SAL_VIRTUAL_ADDRESS_ERROR is returned. Otherwise, the status from performing the Mem.Read() function of the CPU I/O PPI is returned.
Status Codes Returned
EFI_SAL_VIRTUAL_ADDRESS_ERROR |
This function was called in virtual mode before virtual mappings for the specified Extended SAL Procedure are available |
Other |
See the return status codes for the Mem Read function in the CPU I O PPI |
11.3.5. ExtendedSalMemWrite
Summary
This function is equivalent in functionality to the Mem.Write() function of the CPU I/O PPI. See Volume 1:Platform Initialization Specification Section 7.2. The function prototype for the Mem.Write() service is shown in Related Definitions.
Prototype
SAL_RETURN_REGS
EFIAPI
ExtendedSalMemWrite (
IN UINT64 FunctionId,
IN UINT64 Arg2,
IN UINT64 Arg3,
IN UINT64 Arg4,
IN UINT64 Arg5,
IN UINT64 Arg6,
IN UINT64 Arg7,
IN UINT64 Arg8,
IN BOOLEAN VirtualMode,
IN VOID *ModuleGlobal OPTIONAL
);
Parameters
- FunctionId
Must be EsalMemWriteFunctionId .
- Arg2
Signifies the width of the MMIO write operation. This argument is interpreted as type EFI_PEI_CPU_IO_PPI_WIDTH . See the Width parameter in Related Definitions.
- Arg3
The base address of the MMIO write operation. This argument is interpreted as a UINT64 . See the Address parameter in Related Definitions.
- Arg4
The number of MMIO write operations to perform. This argument is interpreted as a UINTN . See the Count parameter in Related Definitions.
- Arg5
The source buffer of the value to write. This argument is interpreted as a
VOID *
. See the Buffer parameter in Related Definitions.- Arg6
Reserved. Must be zero.
- Arg7
Reserved. Must be zero.
- Arg8
Reserved. Must be zero.
- VirtualMode
TRUE if the Extended SAL Procedure is being invoked in virtual mode. FALSE if the Extended SAL Procedure is being invoked in physical mode.
- ModuleGlobal
A pointer to the global context associated with this Extended SAL Procedure. Implementation dependent.
typedef
EFI_STATUS
(EFIAPI *EFI_PEI_CPU_IO_PPI_IO_MEM) (
IN EFI_PEI_SERVICES **PeiServices,
IN EFI_PEI_CPU_IO_PPI *This,
IN EFI_PEI_CPU_IO_PPI_WIDTH Width,
IN UINT64 Address,
IN UINTN Count,
IN OUT VOID *Buffer
);
Description
This function performs the equivalent operation as the Mem.Write() function in the CPU I/O PPI. If this function is called in virtual mode before any required mapping have been converted to virtual addresses, then EFI_SAL_VIRTUAL_ADDRESS_ERROR is returned. Otherwise, the status from performing the Mem.Write() function of the CPU I/O PPI is returned.
Status Codes Returned
EFI_SAL_VIRTUAL_ADDRESS_ERROR |
This function was called in virtual mode before virtual mappings for the specified Extended SAL Procedure are available |
Other |
See the return status codes for the Mem Write function in the CPU I O PPI |
11.4. Extended SAL Stall Services Class
Summary
The Extended SAL Stall Services Class provides functions to perform calibrated delays.
GUID
#define EFI_EXTENDED_SAL_STALL_SERVICES_PROTOCOL_GUID_LO \
0x4d8cac2753a58d06
#define EFI_EXTENDED_SAL_STALL_SERVICES_PROTOCOL_GUID_HI \
0x704165808af0e9b5
#define EFI_EXTENDED_SAL_STALL_SERVICES_PROTOCOL_GUID \
{0x53a58d06,0xac27,0x4d8c,\
{0xb5,0xe9,0xf0,0x8a,0x80,0x65,0x41,0x70}}
typedef enum {
StallFunctionId,
} EFI_EXTENDED_SAL_STALL_FUNC_ID;
Description
Name |
Description |
---|---|
ExtendedSalStall |
This function is equivalent in functionality to the EFI Boot Service Stall See UEFI 2 0 Specification Section 6 5 The function prototype for the Stall service is shown in Related Definitions |
11.4.1. ExtendedSalStall
Summary
This function is equivalent in functionality to the EFI Boot Service Stall() . See UEFI 2.0 Specification Section 6.5. The function prototype for the Stall() service is shown in Related Definitions.
Prototype
SAL_RETURN_REGS
EFIAPI
ExtendedSalStall (
IN UINT64 FunctionId,
IN UINT64 Arg2,
IN UINT64 Arg3,
IN UINT64 Arg4,
IN UINT64 Arg5,
IN UINT64 Arg6,
IN UINT64 Arg7,
IN UINT64 Arg8,
IN BOOLEAN VirtualMode,
IN VOID *ModuleGlobal OPTIONAL
);
Parameters
- FunctionId
Must be EsalStallFunctionId .
- Arg2
Specifies the delay in microseconds. This argument is interpreted as type UINTN . See Microseconds in Related Definitions.
- Arg3
Reserved. Must be zero.
- Arg4
Reserved. Must be zero.
- Arg5
Reserved. Must be zero.
- Arg6
Reserved. Must be zero.
- Arg7
Reserved. Must be zero.
- Arg8
Reserved. Must be zero.
- VirtualMode
TRUE if the Extended SAL Procedure is being invoked in virtual mode. FALSE if the Extended SAL Procedure is being invoked in physical mode.
- ModuleGlobal
A pointer to the global context associated with this Extended SAL Procedure. Implementation dependent.
typedef
EFI_STATUS
(EFIAPI *EFI_STALL) (
IN UINTN Microseconds
);
Description
This function performs the equivalent operation as the Stall() function in the EFI Boot Services Table. If this function is called in virtual mode before any required mapping have been converted to virtual addresses, then EFI_SAL_VIRTUAL_ADDRESS_ERROR is returned. Otherwise, the one of the status codes defined in the Stall() function of the EFI Boot Services Table is returned.
Status Codes Returned
EFI_SAL_VIRTUAL_ADDRESS_ERROR |
This function was called in virtual mode before virtual mappings for the specified Extended SAL Procedure are available |
Other |
See the return status codes for the Stall function in the EFI Boot Services Table |
11.4.2. Extended SAL Real Time Clock Services Class
Summary
The Extended SAL Real Time Clock Services Class provides functions to access the real time clock.
GUID
#define EFI_EXTENDED_SAL_RTC_SERVICES_PROTOCOL_GUID_LO \
0x4d02efdb7e97a470
#define EFI_EXTENDED_SAL_RTC_SERVICES_PROTOCOL_GUID_HI \
0x96a27bd29061ce8f
#define EFI_EXTENDED_SAL_RTC_SERVICES_PROTOCOL_GUID \
{0x7e97a470,0xefdb,0x4d02, \
{0x8f,0xce,0x61,0x90,0xd2,0x7b,0xa2,0x96}
typedef enum {
GetTimeFunctionId,
SetTimeFunctionId,
GetWakeupTimeFunctionId,
SetWakeupTimeFunctionId,
GetRtcClassMaxFunctionId
InitializeThresholdFunctionId,
BumpThresholdCountFunctionId,
GetThresholdCountFunctionId
} EFI_EXTENDED_SAL_RTC_SERVICES_FUNC_ID;
Description
Name |
Description |
---|---|
ExtendedSalGetTime |
This function is equivalent in functionality to the EFI Boot Service GetTime See UEFI 2 0 Specification Section 7 2 The function prototype for the GetTime service is shown in Related Definitions |
ExtendedSalSetTime |
This function is equivalent in functionality to the EFI Runtime Service SetTime See UEFI 2 0 Specification Section 7 2 The function prototype for the SetTime service is shown in Related Definitions |
ExtendedSalGetWakeupTime |
This function is equivalent in functionality to the EFI Runtime Service GetWakeupTime See UEFI 2 0 Specification Section 7 2 The function prototype for the GetWakeupTime service is shown in Related Definitions |
ExtendedSalSetWakeupTime |
This function is equivalent in functionality to the EFI Runtime Service SetWakeupTime See UEFI 2 0 Specification Section 7 2 The function prototype for the SetWakeupTime service is shown in Related Definitions |
11.4.3. ExtendedSalGetTime
Summary
This function is equivalent in functionality to the EFI Runtime Service GetTime() . See UEFI 2.0 Specification Section 7.2. The function prototype for the GetTime() service is shown in Related Definitions.
Prototype
SAL_RETURN_REGS
EFIAPI
ExtendedSalGetTime (
IN UINT64 FunctionId,
IN UINT64 Arg2,
IN UINT64 Arg3,
IN UINT64 Arg4,
IN UINT64 Arg5,
IN UINT64 Arg6,
IN UINT64 Arg7,
IN UINT64 Arg8,
IN BOOLEAN VirtualMode,
IN VOID *ModuleGlobal OPTIONAL
);
Parameters
- FunctionId
Must be EsalGetTimeFunctionId .
- Arg2
This argument is interpreted as a pointer to an EFI_TIME structure. See Time in Related Definitions.
- Arg3
This argument is interpreted as a pointer to an EFI_TIME_CAPABILITIES structure. See Capabilities in Related Definitions.
- Arg4
Reserved. Must be zero.
- Arg5
Reserved. Must be zero.
- Arg6
Reserved. Must be zero.
- Arg7
Reserved. Must be zero.
- Arg8
Reserved. Must be zero.
- VirtualMode
TRUE if the Extended SAL Procedure is being invoked in virtual mode. FALSE if the Extended SAL Procedure is being invoked in physical mode.
- ModuleGlobal
A pointer to the global context associated with this Extended SAL Procedure. Implementation dependent.
typedef
EFI_STATUS
(EFIAPI *EFI_GET_TIME) (
OUT EFI_TIME *Time,
OUT EFI_TIME_CAPABILITIES *Capabilities OPTIONAL
);
Description
This function performs the equivalent operation as the GetTime() function in the EFI Runtime Services Table. If this function is called in virtual mode before any required mapping have been converted to virtual addresses, then EFI_SAL_VIRTUAL_ADDRESS_ERROR is returned. Otherwise, the one of the status codes defined in the GetTime() function of the EFI Runtime Services Table is returned.
Status Codes Returned
EFI_SAL_VIRTUAL_ADDRESS_ERROR |
This function was called in virtual mode before virtual mappings for the specified Extended SAL Procedure are available |
Other |
See the return status codes for the GetTime function in the EFI Runtime Services Table |
11.4.4. ExtendedSalSetTime
Summary
This function is equivalent in functionality to the EFI Runtime Service SetTime() . See UEFI 2.0 Specification Section 7.2. The function prototype for the SetTime() service is shown in Related Definitions.
Prototype
SAL_RETURN_REGS
EFIAPI
ExtendedSalSetTime (
IN UINT64 FunctionId,
IN UINT64 Arg2,
IN UINT64 Arg3,
IN UINT64 Arg4,
IN UINT64 Arg5,
IN UINT64 Arg6,
IN UINT64 Arg7,
IN UINT64 Arg8,
IN BOOLEAN VirtualMode,
IN VOID *ModuleGlobal OPTIONAL
);
Parameters
- FunctionId
Must be EsalGetTimeFunctionId .
- Arg2
This argument is interpreted as a pointer to an EFI_TIME structure. See Time in Related Definitions.
- Arg3
Reserved. Must be zero.
- Arg4
Reserved. Must be zero.
- Arg5
Reserved. Must be zero.
- Arg6
Reserved. Must be zero.
- Arg7
Reserved. Must be zero.
- Arg8
Reserved. Must be zero.
- VirtualMode
TRUE
if the Extended SAL Procedure is being invoked in virtual mode.FALSE
if the Extended SAL Procedure is being invoked in physical mode.- ModuleGlobal
A pointer to the global context associated with this Extended SAL Procedure. Implementation dependent.
typedef
EFI_STATUS
(EFIAPI *EFI_SET_TIME) (
IN EFI_TIME *Time
);
Description
This function performs the equivalent operation as the SetTime() function in the EFI Runtime Services Table. If this function is called in virtual mode before any required mapping have been converted to virtual addresses, then EFI_SAL_VIRTUAL_ADDRESS_ERROR is returned. Otherwise, the one of the status codes defined in the SetTime() function of the EFI Runtime Services Table is returned.
Status Codes Returned
EFI_SAL_VIRTUAL_ADDRESS_ERROR |
This function was called in virtual mode before virtual mappings for the specified Extended SAL Procedure are available |
Other |
See the return status codes for the SetTime function in the EFI Runtime Services Table |
11.4.5. ExtendedSalGetWakeupTime
Summary
This function is equivalent in functionality to the EFI Runtime Service GetWakeupTime() . See UEFI 2.0 Specification Section 7.2. The function prototype for the GetWakeupTime() service is shown in Related Definitions.
Prototype
SAL_RETURN_REGS
EFIAPI
ExtendedSalGetWakeupTime (
IN UINT64 FunctionId,
IN UINT64 Arg2,
IN UINT64 Arg3,
IN UINT64 Arg4,
IN UINT64 Arg5,
IN UINT64 Arg6,
IN UINT64 Arg7,
IN UINT64 Arg8,
IN BOOLEAN VirtualMode,
IN VOID *ModuleGlobal OPTIONAL
);
Parameters
- FunctionId
Must be EsalGetWakeupTimeFunctionId.
- Arg2
This argument is interpreted as a pointer to a BOOLEAN value. See Enabled in Related Definitions.
- Arg3
This argument is interpreted as a pointer to a BOOLEAN value. See Pending in Related Definitions.
- Arg4
This argument is interpreted as a pointer to an EFI_TIME structure. See Time in Related Definitions.
- Arg5
Reserved. Must be zero.
- Arg6
Reserved. Must be zero.
- Arg7
Reserved. Must be zero.
- Arg8
Reserved. Must be zero.
- VirtualMode
TRUE if the Extended SAL Procedure is being invoked in virtual mode. FALSE if the Extended SAL Procedure is being invoked in physical mode.
- ModuleGlobal
A pointer to the global context associated with this Extended SAL Procedure. Implementation dependent.
typedef
EFI_STATUS
(EFIAPI *EFI_GET_WAKEUP_TIME) (
OUT BOOLEAN *Enabled,
OUT BOOLEAN *Pending,
OUT EFI_TIME *Time
);
Description
This function performs the equivalent operation as the GetWakeupTime() function in the EFI Runtime Services Table. If this function is called in virtual mode before any required mapping have been converted to virtual addresses, then EFI_SAL_VIRTUAL_ADDRESS_ERROR is returned. Otherwise, the one of the status codes defined in the GetWakeupTime() function of the EFI Runtime Services Table is returned.
Status Codes Returned
EFI_SAL_VIRTUAL_ADDRESS_ERROR |
This function was called in virtual mode before virtual mappings for the specified Extended SAL Procedure are available |
Other |
See the return status codes for the GetWakeupTime function in the EFI Runtime Services Table |
11.4.6. ExtendedSalSetWakeupTime
Summary
This function is equivalent in functionality to the EFI Runtime Service SetWakeupTime() . See UEFI 2.0 Specification Section 7.2. The function prototype for the SetWakeupTime() service is shown in Related Definitions.
Prototype
SAL_RETURN_REGS
EFIAPI
ExtendedSalSetWakeupTime (
IN UINT64 FunctionId,
IN UINT64 Arg2,
IN UINT64 Arg3,
IN UINT64 Arg4,
IN UINT64 Arg5,
IN UINT64 Arg6,
IN UINT64 Arg7,
IN UINT64 Arg8,
IN BOOLEAN VirtualMode,
IN VOID *ModuleGlobal OPTIONAL
);
Parameters
- FunctionId
Must be EsalSetWakeupTimeFunctionId .
- Arg2
This argument is interpreted as a BOOLEAN value. See Enable in Related Definitions.
- Arg3
This argument is interpreted as a pointer to an EFI_TIME structure. See Time in Related Definitions.
- Arg4
Reserved. Must be zero.
- Arg5
Reserved. Must be zero.
- Arg6
Reserved. Must be zero.
- Arg7
Reserved. Must be zero.
- Arg8
Reserved. Must be zero.
- VirtualMode
TRUE if the Extended SAL Procedure is being invoked in virtual mode. FALSE if the Extended SAL Procedure is being invoked in physical mode.
- ModuleGlobal
A pointer to the global context associated with this Extended SAL Procedure. Implementation dependent.
typedef
EFI_STATUS
(EFIAPI *EFI_SET_WAKEUP_TIME) (
IN BOOLEAN Enable,
IN EFI_TIME *Time OPTIONAL
);
.._description-16
Description
This function performs the equivalent operation as the SetWakeupTime() function in the EFI Runtime Services Table. If this function is called in virtual mode before any required mapping have been converted to virtual addresses, then EFI_SAL_VIRTUAL_ADDRESS_ERROR is returned. Otherwise, the one of the status codes defined in the SetWakeupTime() function of the EFI Runtime Services Table is returned.
Status Codes Returned
EFI_SAL_VIRTUAL_ADDRESS_ERROR |
This function was called in virtual mode before virtual mappings for the specified Extended SAL Procedure are available |
Other |
See the return status codes for the SetWakeupTime function in the EFI Runtime Services Table |
11.4.7. Extended SAL Reset Services Class
Summary
The Extended SAL Reset Services Class provides platform reset services.
GUID
#define EFI_EXTENDED_SAL_RESET_SERVICES_PROTOCOL_GUID_LO \
0x46f58ce17d019990
#define EFI_EXTENDED_SAL_RESET_SERVICES_PROTOCOL_GUID_HI \
0xa06a6798513c76a7
#define EFI_EXTENDED_SAL_RESET_SERVICES_PROTOCOL_GUID \
{0x7d019990,0x8ce1,0x46f5,
{0xa7,0x76,0x3c,0x51,0x98,0x67,0x6a,0xa0}}
typedef enum {
ResetSystemFunctionId,
} EFI_EXTENDED_SAL_RESET_FUNC_ID;
Description
Name |
Description |
---|---|
ExtendedSalResetSystem |
This function is equivalent in functionality to the EFI Runtime Service ResetSystem See UEFI 2 0 Specification Section 7 4 1 The function prototype for the ResetSystem service is shown in Related Definitions |
11.4.8. ExtendedSalResetSystem
Summary
This function is equivalent in functionality to the EFI Runtime Service ResetSystem() . See UEFI 2.0 Specification Section 7.4.1. The function prototype for the ResetSystem() service is shown in Related Definitions.
Prototype
SAL_RETURN_REGS
EFIAPI
ExtendedSalResetSystem (
IN UINT64 FunctionId,
IN UINT64 Arg2,
IN UINT64 Arg3,
IN UINT64 Arg4,
IN UINT64 Arg5,
IN UINT64 Arg6,
IN UINT64 Arg7,
IN UINT64 Arg8,
IN BOOLEAN VirtualMode,
IN VOID *ModuleGlobal OPTIONAL
);
Parameters
- FunctionId
Must be EsalResetSystemFunctionId .
- Arg2
This argument is interpreted as a EFI_RESET_TYPE value. See ResetType in Related Definitions.
- Arg3
This argument is interpreted as EFI_STATUS value. See ResetStatus in Related Definitions.
- Arg4
This argument is interpreted as UINTN value. See DataSize in Related Definitions.
- Arg5
This argument is interpreted a pointer to a Unicode string. See ResetData in Related Definitions.
- Arg6
Reserved. Must be zero.
- Arg7
Reserved. Must be zero.
- Arg8
Reserved. Must be zero.
- VirtualMode
TRUE if the Extended SAL Procedure is being invoked in virtual mode. FALSE if the Extended SAL Procedure is being invoked in physical mode.
- ModuleGlobal
A pointer to the global context associated with this Extended SAL Procedure. Implementation dependent.
typedef
VOID
(EFIAPI *EFI_RESET_SYSTEM) (
IN EFI_RESET_TYPE ResetType,
IN EFI_STATUS ResetStatus,
IN UINTN DataSize,
IN CHAR16 *ResetData OPTIONAL
);
Description
This function performs the equivalent operation as the ResetSystem() function in the EFI Runtime Services Table. If this function is called in virtual mode before any required mapping have been converted to virtual addresses, then EFI_SAL_VIRTUAL_ADDRESS_ERROR is returned. Otherwise, the one of the status codes defined in the ResetSystem() function of the EFI Runtime Services Table is returned.
Status Codes Returned
EFI_SAL_VIRTUAL_ADDRESS_ERROR |
This function was called in virtual mode before virtual mappings for the specified Extended SAL Procedure are available |
Other |
See the return status codes for the ResetSystem function in the EFI Runtime Services Table |
11.4.9. Extended SAL PCI Services Class
Summary
The Extended SAL PCI Services Class provides services to perform PCI configuration cycles.
GUID
#define EFI_EXTENDED_SAL_PCI_SERVICES_PROTOCOL_GUID_LO \
0x4905ad66a46b1a31
#define EFI_EXTENDED_SAL_PCI_SERVICES_PROTOCOL_GUID_HI \
0x6330dc59462bf692
#define EFI_EXTENDED_SAL_PCI_SERVICES_PROTOCOL_GUID \
{0xa46b1a31,0xad66,0x4905,
{0x92,0xf6,0x2b,0x46,0x59,0xdc,0x30,0x63}}
typedef enum {
SalPciConfigReadFunctionId,
SalPciConfigWriteFunctionId,
} EFI_EXTENDED_SAL_PCI_SERVICES_FUNC_ID;
Description
Name |
Description |
---|---|
ExtendedSalPciRead |
This function is equivalent in functionality to the SAL Procedure SAL_PCI_CONFIG_READ See the Intel Itanium Processor Family System Abstraction Layer Specification Chapter 9 |
ExtendedSalPciWrite |
This function is equivalent in functionality to the SAL Procedure SAL_PCI_CONFIG_WRITE See the Intel Itanium Processor Family System Abstraction Layer Specification Chapter 9 |
11.4.10. ExtendedSalPciRead
Summary
This function is equivalent in functionality to the SAL Procedure SAL_PCI_CONFIG_READ . See the Intel Itanium Processor Family System Abstraction Layer Specification Chapter 9.
Prototype
SAL_RETURN_REGS
EFIAPI
ExtendedSalPciRead (
IN UINT64 FunctionId,
IN UINT64 Arg2,
IN UINT64 Arg3,
IN UINT64 Arg4,
IN UINT64 Arg5,
IN UINT64 Arg6,
IN UINT64 Arg7,
IN UINT64 Arg8,
IN BOOLEAN VirtualMode,
IN VOID *ModuleGlobal OPTIONAL
);
Parameters
- FunctionId
Must be EsalPciReadFunctionId .
- Arg2
address parameter to SAL_PCI_CONFIG_WRITE .
- Arg3
size parameter to SAL_PCI_CONFIG_WRITE .
- Arg4
address_type parameter to SAL_PCI_CONFIG_WRITE .
- Arg5
Reserved. Must be zero.
- Arg6
Reserved. Must be zero.
- Arg7
Reserved. Must be zero.
- Arg8
Reserved. Must be zero.
- VirtualMode
TRUE if the Extended SAL Procedure is being invoked in virtual mode. FALSE if the Extended SAL Procedure is being invoked in physical mode.
- ModuleGlobal
A pointer to the global context associated with this Extended SAL Procedure. Implementation dependent.
11.4.11. ExtendedSalPciWrite
Summary
This function is equivalent in functionality to the SAL Procedure SAL_PCI_CONFIG_WRITE . See the Intel Itanium Processor Family System Abstraction Layer Specification Chapter 9.
Prototype
SAL_RETURN_REGS
EFIAPI
ExtendedSalPciWrite (
IN UINT64 FunctionId,
IN UINT64 Arg2,
IN UINT64 Arg3,
IN UINT64 Arg4,
IN UINT64 Arg5,
IN UINT64 Arg6,
IN UINT64 Arg7,
IN UINT64 Arg8,
IN BOOLEAN VirtualMode,
IN VOID *ModuleGlobal OPTIONAL
);
Parameters
- FunctionId
Must be EsalPciWriteFunctionId .
- Arg2
address parameter to SAL_PCI_CONFIG_WRITE .
- Arg3
size parameter to SAL_PCI_CONFIG_WRITE .
- Arg4
value parameter to SAL_PCI_CONFIG_WRITE .
- Arg5
address_type parameter to SAL_PCI_CONFIG_WRITE .
- Arg6
Reserved. Must be zero.
- Arg7
Reserved. Must be zero.
- Arg8
Reserved. Must be zero.
- VirtualMode
TRUE if the Extended SAL Procedure is being invoked in virtual mode. FALSE if the Extended SAL Procedure is being invoked in physical mode.
- ModuleGlobal
A pointer to the global context associated with this Extended SAL Procedure. Implementation dependent.
11.4.12. Extended SAL Cache Services Class
Summary
The Extended SAL Cache Services Class provides services to initialize and flush the caches.
GUID
#define EFI_EXTENDED_SAL_CACHE_SERVICES_PROTOCOL_GUID_LO \
0x4ba52743edc9494
#define EFI_EXTENDED_SAL_CACHE_SERVICES_PROTOCOL_GUID_HI \
0x88f11352ef0a1888
#define EFI_EXTENDED_SAL_CACHE_SERVICES_PROTOCOL_GUID \
{0xedc9494,0x2743,0x4ba5,\
{0x88,0x18,0x0a,0xef,0x52,0x13,0xf1,0x88}}
typedef enum {
SalCacheInitFunctionId,
SalCacheFlushFunctionId,
SalCacheClassMaxFunctionId
} EFI_EXTENDED_SAL_CACHE_SERVICES_FUNC_ID;
Description
Name |
Description |
---|---|
ExtendedSalCacheInit |
This function is equivalent in functionality to the SAL Procedure SAL_CACHE_INIT See the Intel Itanium Processor Family System Abstraction Layer Specification Chapter 9 |
ExtendedSalCacheFlush |
This function is equivalent in functionality to the SAL Procedure SAL_CACHE_FLUSH See the Intel Itanium Processor Family System Abstraction Layer Specification Chapter 9 |
11.4.13. ExtendedSalCacheInit
Summary
This function is equivalent in functionality to the SAL Procedure SAL_CACHE_INIT . See the Intel Itanium Processor Family System Abstraction Layer Specification Chapter 9.
Prototype
SAL_RETURN_REGS
EFIAPI
ExtendedSalCacheInit (
IN UINT64 FunctionId,
IN UINT64 Arg2,
IN UINT64 Arg3,
IN UINT64 Arg4,
IN UINT64 Arg5,
IN UINT64 Arg6,
IN UINT64 Arg7,
IN UINT64 Arg8,
IN BOOLEAN VirtualMode,
IN VOID *ModuleGlobal OPTIONAL
);
Parameters
- FunctionId
Must be EsalCacheInitFunctionId .
- Arg2
Reserved. Must be zero.
- Arg3
Reserved. Must be zero.
- Arg4
Reserved. Must be zero.
- Arg5
Reserved. Must be zero.
- Arg6
Reserved. Must be zero.
- Arg7
Reserved. Must be zero.
- Arg8
Reserved. Must be zero.
- VirtualMode
TRUE if the Extended SAL Procedure is being invoked in virtual mode. FALSE if the Extended SAL Procedure is being invoked in physical mode.
- ModuleGlobal
A pointer to the global context associated with this Extended SAL Procedure. Implementation dependent.
11.4.14. ExtendedSalCacheFlush
Summary
This function is equivalent in functionality to the SAL Procedure SAL_CACHE_FLUSH . See the Intel Itanium Processor Family System Abstraction Layer Specification Chapter 9.
Prototype
SAL_RETURN_REGS
EFIAPI
ExtendedSalCacheFlush (
IN UINT64 FunctionId,
IN UINT64 Arg2,
IN UINT64 Arg3,
IN UINT64 Arg4,
IN UINT64 Arg5,
IN UINT64 Arg6,
IN UINT64 Arg7,
IN UINT64 Arg8,
IN BOOLEAN VirtualMode,
IN VOID *ModuleGlobal OPTIONAL
);
Parameters
- FunctionId
Must be EsalCacheFlushFunctionId .
- Arg2
i_or_d parameter in SAL_CACHE_FLUSH .
- Arg3
Reserved. Must be zero.
- Arg4
Reserved. Must be zero.
- Arg5
Reserved. Must be zero.
- Arg6
Reserved. Must be zero.
- Arg7
Reserved. Must be zero.
- Arg8
Reserved. Must be zero.
- VirtualMode
TRUE if the Extended SAL Procedure is being invoked in virtual mode. FALSE if the Extended SAL Procedure is being invoked in physical mode.
- ModuleGlobal
A pointer to the global context associated with this Extended SAL Procedure. Implementation dependent.
11.4.15. Extended SAL PAL Services Class
Summary
The Extended SAL PAL Services Class provides services to make PAL calls.
GUID
#define EFI_EXTENDED_SAL_PAL_SERVICES_PROTOCOL_GUID_LO \
0x438d0fc2e1cd9d21
#define EFI_EXTENDED_SAL_PAL_SERVICES_PROTOCOL_GUID_HI \
0x571e966de6040397
#define EFI_EXTENDED_SAL_PAL_SERVICES_PROTOCOL_GUID \
{0xe1cd9d21,0x0fc2,0x438d, \
{0x97,0x03,0x04,0xe6,0x6d,0x96,0x1e,0x57}}
typedef enum {
PalProcFunctionId,
SetNewPalEntryFunctionId,
GetNewPalEntryFunctionId,
EsalUpdatePalFunctionId,
} EFI_EXTENDED_SAL_PAL_SERVICES_FUNC_ID;
Description
Name |
Description |
---|---|
ExtendedSalPalProc |
This function provides a C wrapper for making PAL Procedure calls See the Intel Itanium Architecture Software Developers Manual Volume2 System Architecture Section 11 10 for details on the PAL calling conventions and the set of PAL Procedures |
ExtendedSalSetNewPalEntry |
This function records the physical or virtual PAL entry point |
ExtendedSalSetNewPalEntry |
This function retrieves the physical or virtual PAL entry point |
11.4.16. ExtendedSalPalProc
Summary
This function provides a C wrapper for making PAL Procedure calls. See the Intel Itanium Architecture Software Developers Manual Volume2: System Architecture Section 11.10 for details on the PAL calling conventions and the set of PAL Procedures.
Prototype
PAL_PROC_RETURN
EFIAPI
ExtendedSalPalProc (
IN UINT64 FunctionId,
IN UINT64 Arg2,
IN UINT64 Arg3,
IN UINT64 Arg4,
IN UINT64 Arg5,
IN UINT64 Arg6,
IN UINT64 Arg7,
IN UINT64 Arg8,
IN BOOLEAN VirtualMode,
IN VOID *ModuleGlobal OPTIONAL
);
Parameters
- FunctionId
Must be EsalPalProcFunctionId .
- Arg2
PAL_PROC Function ID.
- Arg3
Arg2of the PAL_PROC .
- Arg4
Arg3 of the PAL_PROC .
- Arg5
Arg4 of the PAL_PROC .
- Arg6
Reserved. Must be zero.
- Arg7
Reserved. Must be zero.
- Arg8
Reserved. Must be zero.
- VirtualMode
TRUE if the Extended SAL Procedure is being invoked in virtual mode. FALSE if the Extended SAL Procedure is being invoked in physical mode.
- ModuleGlobal
A pointer to the global context associated with this Extended SAL Procedure. Implementation dependent.
Description
This function provide a C wrapper for making PAL Procedure calls. The PAL_PROC Function ID in Arg2 is used to determine if the PAL_PROC is stacked or static. If the PAL has been shadowed, then the memory copy of the PAL is called. Otherwise, the ROM version of the PAL is called. The caller does not need to worry whether or not the PAL has been shadowed or not (except for the fact that some of the PAL calls don’t work until PAL has been shadowed). If this function is called in virtual mode before any required mapping have been converted to virtual addresses, then EFI_SAL_VIRTUAL_ADDRESS_ERROR is returned. Otherwise, the return status from the PAL_PROC is returned.
11.4.17. ExtendedSalSetNewPalEntry
Summary
This function records the physical or virtual PAL entry point.
Prototype
SAL_RETURN_REGS
EFIAPI
ExtendedSalSetNewPalEntry (
IN UINT64 FunctionId,
IN UINT64 Arg2,
IN UINT64 Arg3,
IN UINT64 Arg4,
IN UINT64 Arg5,
IN UINT64 Arg6,
IN UINT64 Arg7,
IN UINT64 Arg8,
IN BOOLEAN VirtualMode,
IN VOID *ModuleGlobal OPTIONAL
);
Parameters
- FunctionId
Must be EsalSetNewPalEntryFunctionId .
- Arg2
This parameter is interpreted as a BOOLEAN . If it is TRUE , then PAL Entry Point specified by Arg3 is a physical address. If it is FALSE , then the Pal Entry Point specified by Arg3 is a virtual address.
- Arg3
The PAL Entry Point that is being set.
- Arg4
Reserved. Must be zero.
- Arg5
Reserved. Must be zero.
- Arg6
Reserved. Must be zero.
- Arg7
Reserved. Must be zero.
- Arg8
Reserved. Must be zero.
- VirtualMode
TRUE if the Extended SAL Procedure is being invoked in virtual mode. FALSE if the Extended SAL Procedure is being invoked in physical mode.
- ModuleGlobal
A pointer to the global context associated with this Extended SAL Procedure. Implementation dependent.
Description
This function records the PAL Entry Point specified by Arg3 , so PAL_PROC calls can be made with the EsalPalProcFunctionId Function ID. If Arg2 is TRUE , then Arg3 is the physical address of the PAL Entry Point. If Arg2 is FALSE , then Arg3 is the virtual address of the PAL Entry Point. If this function is called in virtual mode before any required mapping have been converted to virtual addresses, then EFI_SAL_VIRTUAL_ADDRESS_ERROR is returned. Otherwise, the EFI_SAL_SUCCESS is returned.
Status Codes Returned
EFI_SAL_SUCCESS |
The PAL Entry Point was set |
EFI_SAL_VIRTUAL_ADDRESS_ERROR |
This function was called in virtual mode before virtual mappings for the specified Extended SAL Procedure are available |
11.4.18. ExtendedSalGetNewPalEntry
Summary
This function retrieves the physical or virtual PAL entry point.
Prototype
SAL_RETURN_REGS
EFIAPI
ExtendedSalGetNewPalEntry (
IN UINT64 FunctionId,
IN UINT64 Arg2,
IN UINT64 Arg3,
IN UINT64 Arg4,
IN UINT64 Arg5,
IN UINT64 Arg6,
IN UINT64 Arg7,
IN UINT64 Arg8,
IN BOOLEAN VirtualMode,
IN VOID *ModuleGlobal OPTIONAL
);
Parameters
- FunctionId
Must be EsalGetNewPalEntryFunctionId .
- Arg2
This parameter is interpreted as a BOOLEAN. If it is TRUE , then physical address of the PAL Entry Point is retrieved. If it is FALSE , then the virtual address of the Pal Entry Point is retrieved.
- Arg3
Reserved. Must be zero.
- Arg4
Reserved. Must be zero.
- Arg5
Reserved. Must be zero.
- Arg6
Reserved. Must be zero.
- Arg7
Reserved. Must be zero.
- Arg8
Reserved. Must be zero.
- VirtualMode
TRUE if the Extended SAL Procedure is being invoked in virtual mode. FALSE if the Extended SAL Procedure is being invoked in physical mode.
- ModuleGlobal
A pointer to the global context associated with this Extended SAL Procedure. Implementation dependent.
Description
This function retrieves the PAL Entry Point that as previously set with EsalSetNewPalEntryFunctionId . If Arg2 is TRUE , then the physical address of the PAL Entry Point is returned in SAL_RETURN_REGS . r9 and EFI_SAL_SUCCESS is returned. If Arg2 is FALSE and a virtual mapping for the PAL Entry Point is not available, then EFI_SAL_VIRTUAL_ADDRESS_ERROR is returned. If Arg2 is FALSE and a virtual mapping for the PAL Entry Point is available, then the virtual address of the PAL Entry Point is returned in SAL_RETURN_REGS .r9 and EFI_SAL_SUCCESS is returned.
Status Codes Returned
EFI_SAL_SUCCESS |
The PAL Entry Point was retrieved and returned in SAL_RETURN_REGS r9 |
EFI_SAL_VIRTUAL_ADDRESS_ERROR |
A request for the virtual mapping of the PAL Entry Point was requested and a virtual mapping is not currently available |
11.4.19. ExtendedSalUpdatePal
Summary
This function is equivalent in functionality to the SAL Procedure SAL_UPDATE_PAL . See the Intel Itanium Processor Family System Abstraction Layer Specification Chapter 9.
Prototype
SAL_RETURN_REGS
EFIAPI
ExtendedSalUpdatePal (
IN UINT64 FunctionId,
IN UINT64 Arg2,
IN UINT64 Arg3,
IN UINT64 Arg4,
IN UINT64 Arg5,
IN UINT64 Arg6,
IN UINT64 Arg7,
IN UINT64 Arg8,
IN BOOLEAN VirtualMode,
IN VOID *ModuleGlobal OPTIONAL
);
Parameters
- FunctionId
Must be EsalUpdatePal .
- Arg2
param_buf parameter to SAL_UPDATE_PAL .
- Arg3
scratch_buf parameter to SAL_UPDATE_PAL .
- Arg4
scratch_buf_size parameter to SAL_UPDATE_PAL .
- Arg5
Reserved. Must be zero.
- Arg6
Reserved. Must be zero.
- Arg7
Reserved. Must be zero.
- Arg8
Reserved. Must be zero.
- VirtualMode
TRUE if the Extended SAL Procedure is being invoked in virtual mode. FALSE if the Extended SAL Procedure is being invoked in physical mode.
- ModuleGlobal
A pointer to the global context associated with this Extended SAL Procedure. Implementation dependent.
11.4.20. Extended SAL Status Code Services Class
Summary
The Extended SAL Status Code Services Class provides services to report status code information.
GUID
#define EFI_EXTENDED_SAL_STATUS_CODE_SERVICES_PROTOCOL_GUID_LO \
0x420f55e9dbd91d
#define EFI_EXTENDED_SAL_STATUS_CODE_SERVICES_PROTOCOL_GUID_HI \
0x4fb437849f5e3996
#define EFI_EXTENDED_SAL_STATUS_CODE_SERVICES_PROTOCOL_GUID \
{0xdbd91d,0x55e9,0x420f,
{0x96,0x39,0x5e,0x9f,0x84,0x37,0xb4,0x4f}}
typedef enum {
ReportStatusCodeServiceFunctionId,
} EFI_EXTENDED_SAL_STATUS_CODE_SERVICES_FUNC_ID;
Description
Name |
Description |
---|---|
ExtendedSalReportStatusCode |
This function is equivalent in functionality to the ReportStatusCode service of the Status Code Runtime Protocol See Section 12 2 of the V olume 2 Platform Initialization Specification Driver Execution Environment Core Interface The function prototype for the ReportStatusCode service is shown in Related Definitions |
11.4.21. ExtendedSalReportStatusCode
Summary
This function is equivalent in functionality to the ReportStatusCode() service of the Status Code Runtime Protocol. See Section 12.2 of the Volume 2:Platform Initialization Specification, Driver Execution Environment, Core Interface . The function prototype for the ReportStatusCode() service is shown in Related Definitions.
Prototype
SAL_RETURN_REGS
EFIAPI
ExtendedSalReportStatusCode (
IN UINT64 FunctionId,
IN UINT64 Arg2,
IN UINT64 Arg3,
IN UINT64 Arg4,
IN UINT64 Arg5,
IN UINT64 Arg6,
IN UINT64 Arg7,
IN UINT64 Arg8,
IN BOOLEAN VirtualMode,
IN VOID *ModuleGlobal OPTIONAL
);
Parameters
- FunctionId
Must be EsalReportStatusCodeFunctionId .
- Arg2
This argument is interpreted as type EFI_STATUS_CODE_TYPE . See the Type parameter in Related Definitions.
- Arg3
This argument is interpreted as type EFI_STATUS_CODE_VALUE . See the Value parameter in Related Definitions.
- Arg4
This argument is interpreted as type UINT32 . See the Instance parameter in Related Definitions.
- Arg5
This argument is interpreted as a pointer to type CONST EFI_GUID . See the CallerId parameter in Related Definitions.
- Arg6
This argument is interpreted as pointer to type CONST EFI_STATUS_CODE_DATA . See the Data parameter in Related Definitions.
- Arg7
Reserved. Must be zero.
- Arg8
Reserved. Must be zero.
- VirtualMode
TRUE if the Extended SAL Procedure is being invoked in virtual mode. FALSE if the Extended SAL Procedure is being invoked in physical mode.
- ModuleGlobal
A pointer to the global context associated with this Extended SAL Procedure. Implementation dependent.
typedef
EFI_STATUS
(EFIAPI \*EFI_REPORT_STATUS_CODE) (
IN EFI_STATUS_CODE_TYPE Type,
IN EFI_STATUS_CODE_VALUE Value,
IN UINT32 Instance,
IN CONST EFI_GUID *CallerId OPTIONAL,
IN CONST EFI_STATUS_CODE_DATA *Data OPTIONAL
);
Description
This function performs the equivalent operation as the ReportStatusCode function of the Status Code Runtime Protocol. If this function is called in virtual mode before any required mapping have been converted to virtual addresses, then EFI_SAL_VIRTUAL_ADDRESS_ERROR is returned. Otherwise, the one of the status codes defined in the ReportStatusCode() function of the Status Code Runtime Protocol is returned.
Status Codes Returned
EFI_SAL_VIRTUAL_ADDRESS_ERROR |
This function was called in virtual mode before virtual mappings for the specified Extended SAL Procedure are available |
Other |
See the return status codes for the ReportStatusCode function in the Status Code Runtime Protocol |
11.4.22. Extended SAL Monotonic Counter Services Class
Summary
The Extended SAL Monotonic Counter Services Class provides functions to access the monotonic counter.
GUID
#define EFI_EXTENDED_SAL_MTC_SERVICES_PROTOCOL_GUID_LO \
0x408b75e8899afd18
#define EFI_EXTENDED_SAL_MTC_SERVICES_PROTOCOL_GUID_HI \
0x54f4cd7e2e6e1aa4
#define EFI_EXTENDED_SAL_MTC_SERVICES_PROTOCOL_GUID \
{0x899afd18,0x75e8,0x408b,\\
{0xa4,0x1a,0x6e,0x2e,0x7e,0xcd,0xf4,0x54}}
typedef enum {
GetNextHighMotonicCountFunctionId,
} EFI_EXTENDED_SAL_MTC_SERVICES_FUNC_ID;
Description
Name |
Description |
---|---|
ExtendedSalGetNextHighMtc |
This function is equivalent in functionality to the EFI Runtime Service GetNextHighMonotonicCount See UEFI 2 0 Specification Section 7 4 2 The function prototype for the GetNextHighMonotonicCount service is shown in Related Definitions |
11.4.23. ExtendedSalGetNextHighMtc
Summary
This function is equivalent in functionality to the EFI Runtime Service GetNextHighMonotonicCount() . See UEFI 2.0 Specification Section 7.4.2. The function prototype for the GetNextHighMonotonicCount() service is shown in Related Definitions.
Prototype
SAL_RETURN_REGS
EFIAPI
ExtendedSalGetNextHighMtc (
IN UINT64 FunctionId,
IN UINT64 Arg2,
IN UINT64 Arg3,
IN UINT64 Arg4,
IN UINT64 Arg5,
IN UINT64 Arg6,
IN UINT64 Arg7,
IN UINT64 Arg8,
IN BOOLEAN VirtualMode,
IN VOID *ModuleGlobal OPTIONAL
);
Parameters
- FunctionId
Must be EsalGetNextHighMtcFunctionId .
- Arg2
This argument is interpreted as a pointer to a UINT32 . See the HighCount parameter in Related Definitions.
- Arg3
Reserved. Must be zero.
- Arg4
Reserved. Must be zero.
- Arg5
Reserved. Must be zero.
- Arg6
Reserved. Must be zero.
- Arg7
Reserved. Must be zero.
- Arg8
Reserved. Must be zero.
- VirtualMode
TRUE if the Extended SAL Procedure is being invoked in virtual mode. FALSE if the Extended SAL Procedure is being invoked in physical mode.
- ModuleGlobal
A pointer to the global context associated with this Extended SAL Procedure. Implementation dependent.
typedef
EFI_STATUS
(EFIAPI *EFI_GET_NEXT_HIGH_MONO_COUNT) (
OUT UINT32 *HighCount
);
Description
This function performs the equivalent operation as the GetNextHighMonotoicCount() function in the EFI Runtime Services Table. If this function is called in virtual mode before any required mapping have been converted to virtual addresses, then EFI_SAL_VIRTUAL_ADDRESS_ERROR is returned. Otherwise, the one of the status codes defined in the GetNextHighMonotonicCount() function of the EFI Runtime Services Table is returned.
Status Codes Returned
EFI_SAL_VIRTUAL_ADDRESS_ERROR |
This function was called in virtual mode before virtual mappings for the specified Extended SAL Procedure are available |
Other |
See the return status codes for the GetNextHighMonotonicCount function in the EFI Runtime Services Table |
11.4.24. Extended SAL Variable Services Class
Summary
The Extended SAL Variable Services Class provides functions to access EFI variables.
GUID
#define
EFI_EXTENDED_SAL_VARIABLE_SERVICES_PROTOCOL_GUID_LO \
0x4370c6414ecb6c53
#define EFI_EXTENDED_SAL_VARIABLE_SERVICES_PROTOCOL_GUID_HI \
0x78836e490e3bb28c
#define EFI_EXTENDED_SAL_VARIABLE_SERVICES_PROTOCOL_GUID \
{0x4ecb6c53,0xc641,0x4370, \
{0x8c,0xb2,0x3b,0x0e,0x49,0x6e,0x83,0x78}}
typedef enum {
EsalGetVariableFunctionId,
EsalGetNextVariableNameFunctionId,
EsalSetVariableFunctionId,
EsalQueryVariableInfoFunctionId,
} EFI_EXTENDED_SAL_VARIABLE_SERVICES_FUNC_ID;
Description
Name |
Description |
---|---|
ExtendedSalGetVariable |
This function is equivalent in functionality to the EFI Runtime Service GetVariable See UEFI 2 0 Specification Section 7 1 The function prototype for the GetVariable service is shown in Related Definitions |
ExtendedSalGetNextVariableName |
This function is equivalent in functionality to the EFI Runtime Service GetNextVariableName See UEFI 2 0 Specification Section 7 1 The function prototype for the GetNextVariableName service is shown in Related Definitions |
ExtendedSalSetVariable |
This function is equivalent in functionality to the EFI Runtime Service SetVariable See UEFI 2 0 Specification Section 7 1 The function prototype for the SetVariable service is shown in Related Definitions |
ExtendedSalQueryVariableInfo |
This function is equivalent in functionality to the EFI Runtime Service QueryVariableInfo See UEFI 2 0 Specification Section 7 1 The function prototype for the QueryVariableInfo service is shown in Related Definitions |
11.4.25. ExtendedSalGetVariable
Summary
This function is equivalent in functionality to the EFI Runtime Service GetVariable() . See UEFI 2.0 Specification Section 7.1. The function prototype for the GetVariable() service is shown in Related Definitions.
Prototype
SAL_RETURN_REGS
EFIAPI
ExtendedSalGetVariable (
IN UINT64 FunctionId,
IN UINT64 Arg2,
IN UINT64 Arg3,
IN UINT64 Arg4,
IN UINT64 Arg5,
IN UINT64 Arg6,
IN UINT64 Arg7,
IN UINT64 Arg8,
IN BOOLEAN VirtualMode,
IN VOID *ModuleGlobal OPTIONAL
);
Parameters
- FunctionId
Must be EsalGetVariableFunctionId .
- Arg2
This argument is interpreted as a pointer to a Unicode string. See the VariableName parameter in Related Definitions.
- Arg3
This argument is interpreted as a pointer to an EFI_GUID . See the VendorGuid parameter in Related Definitions.
- Arg4
This argument is interpreted as a pointer to a value of type UINT32 . See the Attributes parameter in Related Definitions.
- Arg5
This argument is interpreted as a pointer to a value of type UINTN . See the DataSize parameter in Related Definitions.
- Arg6
This argument is interpreted as a pointer to a buffer with type VOID * . See the Data parameter in Related Definitions.
- Arg7
Reserved. Must be zero.
- Arg8
Reserved. Must be zero.
- VirtualMode
TRUE if the Extended SAL Procedure is being invoked in virtual mode. FALSE if the Extended SAL Procedure is being invoked in physical mode.
- ModuleGlobal
A pointer to the global context associated with this Extended SAL Procedure. Implementation dependent.
typedef
EFI_STATUS
(EFIAPI *EFI_GET_VARIABLE) (
IN CHAR16 *VariableName,
IN EFI_GUID *VendorGuid,
OUT UINT32 *Attributes, OPTIONAL
IN OUT UINTN *DataSize,
OUT VOID *Data
);
Description
This function performs the equivalent operation as the GetVariable() function in the EFI Runtime Services Table. If this function is called in virtual mode before any required mapping have been converted to virtual addresses, then EFI_SAL_VIRTUAL_ADDRESS_ERROR is returned. Otherwise, the one of the status codes defined in the GetVariable() function of the EFI Runtime Services Table is returned.
Status Codes Returned
EFI_SAL_VIRTUAL_ADDRESS_ERROR |
This function was called in virtual mode before virtual mappings for the specified Extended SAL Procedure are available |
---|---|
Other |
See the return status codes for the GetVariable function in the EFI Runtime Services Table |
11.4.26. ExtendedSalGetNextVariableName
Summary
This function is equivalent in functionality to the EFI Runtime Service GetNextVariableName() . See UEFI 2.0 Specification Section 7.1. The function prototype for the GetNextVariableName() service is shown in Related Definitions.
Prototype
SAL_RETURN_REGS
EFIAPI
ExtendedSalGetNextVariableName (
IN UINT64 FunctionId,
IN UINT64 Arg2,
IN UINT64 Arg3,
IN UINT64 Arg4,
IN UINT64 Arg5,
IN UINT64 Arg6,
IN UINT64 Arg7,
IN UINT64 Arg8,
IN BOOLEAN VirtualMode,
IN VOID *ModuleGlobal OPTIONAL
);
Parameters
- FunctionId
Must be EsalGetNextVariableNameFunctionId .
- Arg2
This argument is interpreted as a pointer to value of type UINTN . See the VariableNameSize parameter in Related Definitions.
- Arg3
This argument is interpreted as a pointer to a Unicode string. See the VendorName parameter in Related Definitions.
- Arg4
This argument is interpreted as a pointer to a value of type EFI_GUID . See the VendorGuid parameter in Related Definitions.
- Arg5
Reserved. Must be zero.
- Arg6
Reserved. Must be zero.
- Arg7
Reserved. Must be zero.
- Arg8
Reserved. Must be zero.
- VirtualMode
TRUE if the Extended SAL Procedure is being invoked in virtual mode. FALSE if the Extended SAL Procedure is being invoked in physical mode.
- ModuleGlobal
A pointer to the global context associated with this Extended SAL Procedure. Implementation dependent.
typedef
EFI_STATUS
(EFIAPI *EFI_GET_NEXT_VARIABLE_NAME) (
IN OUT UINTN *VariableNameSize,
IN OUT CHAR16 *VariableName,
IN OUT EFI_GUID *VendorGuid
);
Description
This function performs the equivalent operation as the GetNextVariableName() function in the EFI Runtime Services Table. If this function is called in virtual mode before any required mapping have been converted to virtual addresses, then EFI_SAL_VIRTUAL_ADDRESS_ERROR is returned. Otherwise, the one of the status codes defined in the GetNextVariableName() function of the EFI Runtime Services Table is returned.
Status Codes Returned
EFI_SAL_VIRTUAL_ADDRESS_ERROR |
This function was called in virtual mode before virtual mappings for the specified Extended SAL Procedure are available |
Other |
See the return status codes for the GetNextVariableName function in the EFI Runtime Services Table |
11.4.27. ExtendedSalSetVariable
Summary
This function is equivalent in functionality to the EFI Runtime Service SetVariable() . See UEFI 2.0 Specification Section 7.1. The function prototype for the SetVariable() service is shown in Related Definitions.
Prototype
SAL_RETURN_REGS
EFIAPI
ExtendedSalSetVariable (
IN UINT64 FunctionId,
IN UINT64 Arg2,
IN UINT64 Arg3,
IN UINT64 Arg4,
IN UINT64 Arg5,
IN UINT64 Arg6,
IN UINT64 Arg7,
IN UINT64 Arg8,
IN BOOLEAN VirtualMode,
IN VOID *ModuleGlobal OPTIONAL
);
Parameters
- FunctionId
Must be EsalSetVariableFunctionId .
- Arg2
This argument is interpreted as a pointer to a Unicode string. See the VariableName parameter in Related Definitions.
- Arg3
This argument is interpreted as a pointer to an EFI_GUID . See the VendorGuid parameter in Related Definitions.
- Arg4
This argument is interpreted as a value of type UINT32 . See the Attributes parameter in Related Definitions.
- Arg5
This argument is interpreted as a value of type UINTN . See the DataSize parameter in Related Definitions.
- Arg6
This argument is interpreted as a pointer to a buffer with type VOID * . See the Data parameter in Related Definitions.
- Arg7
Reserved. Must be zero.
- Arg8
Reserved. Must be zero.
- VirtualMode
TRUE if the Extended SAL Procedure is being invoked in virtual mode. FALSE if the Extended SAL Procedure is being invoked in physical mode.
- ModuleGlobal
A pointer to the global context associated with this Extended SAL Procedure. Implementation dependent.
typedef
EFI_STATUS
(EFIAPI \*EFI_SET_VARIABLE) (
IN CHAR16 *VariableName,
IN EFI_GUID *VendorGuid,
IN UINT32 Attributes,
IN UINTN DataSize,
IN VOID *Data
);
Description
This function performs the equivalent operation as the SetVariable() function in the EFI Runtime Services Table. If this function is called in virtual mode before any required mapping have been converted to virtual addresses, then EFI_SAL_VIRTUAL_ADDRESS_ERROR is returned. Otherwise, the one of the status codes defined in the SetVariable() function of the EFI Runtime Services Table is returned.
Status Codes Returned
EFI_SAL_VIRTUAL_ADDRESS_ERROR |
This function was called in virtual mode before virtual mappings for the specified Extended SAL Procedure are available |
Other |
See the return status codes for the SetVariable function in the EFI Runtime Services Table |
11.4.28. ExtendedSalQueryVariableInfo
Summary
This function is equivalent in functionality to the EFI Runtime Service QueryVariableInfo() . See UEFI 2.0 Specification Section 7.1. The function prototype for the QueryVariableInfo() service is shown in Related Definitions.
Prototype
SAL_RETURN_REGS
EFIAPI
ExtendedSalQueryVariableInfo (
IN UINT64 FunctionId,
IN UINT64 Arg2,
IN UINT64 Arg3,
IN UINT64 Arg4,
IN UINT64 Arg5,
IN UINT64 Arg6,
IN UINT64 Arg7,
IN UINT64 Arg8,
IN BOOLEAN VirtualMode,
IN VOID *ModuleGlobal OPTIONAL
);
Parameters
- FunctionId
Must be EsalQueryVariableInfoFunctionId .
- Arg2
This argument is interpreted as a value of type UINT32 . See the Attributes parameter in Related Definitions.
- Arg3
This argument is interpreted as a pointer to a value of type UINT64 . See the MaximumVariableStorageSize parameter in Related Definitions.
- Arg4
This argument is interpreted as a pointer to a value of type UINT64 . See the RemainingVariableStorageSize parameter in Related Definitions.
- Arg5
This argument is interpreted as a pointer to a value of type UINT64 . See the MaximumVariableSize parameter in Related Definitions.
- Arg6
Reserved. Must be zero.
- Arg7
Reserved. Must be zero.
- Arg8
Reserved. Must be zero.
- VirtualMode
TRUE if the Extended SAL Procedure is being invoked in virtual mode. FALSE if the Extended SAL Procedure is being invoked in physical mode.
- ModuleGlobal
A pointer to the global context associated with this Extended SAL Procedure. Implementation dependent.
typedef
EFI_STATUS
(EFIAPI *EFI_QUERY_VARIABLE_INFO) (
IN UINT32 Attributes,
OUT UINT64 *MaximumVariableStorageSize,
OUT UINT64 *RemainingVariableStorageSize,
OUT UINT64 *MaximumVariableSize
);
Description
This function performs the equivalent operation as the QueryVariableInfo() function in the EFI Runtime Services Table. If this function is called in virtual mode before any required mapping have been converted to virtual addresses, then EFI_SAL_VIRTUAL_ADDRESS_ERROR is returned. Otherwise, the one of the status codes defined in the QueryVariableInfo() function of the EFI Runtime Services Table is returned.
Status Codes Returned
EFI_SAL_VIRTUAL_ADDRESS_ERROR |
This function was called in virtual mode before virtual mappings for the specified Extended SAL Procedure are available |
Other |
See the return status codes for the QueryVariableInfo function in the EFI Runtime Services Table |
11.4.29. Extended SAL Firmware Volume Block ServicesClass
Summary
The Extended SAL Firmware Volume Block Services Class provides services that are equivalent to the Firmware Volume Block Protocol in the Platform Initialization Specification.
GUID
#define EFI_EXTENDED_SAL_FVB_SERVICES_PROTOCOL_GUID_LO \
0x4f1dbcbba2271df1
#define EFI_EXTENDED_SAL_FVB_SERVICES_PROTOCOL_GUID_HI \
0x1a072f17bc06a998
#define EFI_EXTENDED_SAL_FVB_SERVICES_PROTOCOL_GUID \
{0xa2271df1,0xbcbb,0x4f1d,\
{0x98,0xa9,0x06,0xbc,0x17,0x2f,0x07,0x1a}}
typedef enum {
ReadFunctionId,
WriteFunctionId,
EraseBlockFunctionId,
GetVolumeAttributesFunctionId,
SetVolumeAttributesFunctionId,
GetPhysicalAddressFunctionId,
GetBlockSizeFunctionId,
} EFI_EXTENDED_SAL_FV_BLOCK_SERVICES_FUNC_ID;
Description
Name |
Description |
---|---|
ExtendedSalRead |
This function is equivalent in functionality to the Read service of the EFI Firmware Volume Block Protocol See Section 2 4 of the Volume 3 Platform Initialization Specification Shared Architectural Elements The function prototype for the Read service is shown in Related Definitions |
ExtendedSalWrite |
This function is equivalent in functionality to the Write service of the EFI Firmware Volume Block Protocol See Section 2 4 of the Volume 3 Platform Initialization Specification Shared Architectural Elements The function prototype for the Write service is shown in Related Definitions |
ExtendedSalEraseBlock |
This function is equivalent in functionality to the EraseBlocks service of the EFI Firmware Volume Block Protocol except this function can only erase one block per request See Section 2 4 of the V olume 3 Platform Initialization Specification Shared Architectural Elements The function prototype for the EraseBlock service is shown in Related Definitions |
ExtendedSalGetAttributes |
This function is equivalent in functionality to the GetAttributes service of the EFI Firmware Volume Block Protocol See Section 2 4 of the Volume 3 Platform Initialization Specification Shared Architectural Elements The function prototype for the GetAttributes service is shown in Related Definitions |
ExtendedSalSetAttributes |
This function is equivalent in functionality to the SetAttributes service of the EFI Firmware Volume Block Protocol See Section 2 4 of the Volume 3 Platform Initialization Specification Shared Architectural Elements The function prototype for the SetAttributes service is shown in Related Definitions |
ExtendedSalGetPhysicalAddress |
This function is equivalent in functionality to the GetPhysicalAddress service of the EFI Firmware Volume Block Protocol See Section 2 4 of the Volume 3 Platform Initialization Specification Shared Architectural Elements The function prototype for the GetPhysicalAddress service is shown in Related Definitions |
ExtendedSalGetBlockSize |
This function is equivalent in functionality to the GetBlockSize service of the EFI Firmware Volume Block Protocol See Section 2 4 of the Volume 3 Platform Initialization Specification Shared Architectural Elements The function prototype for the GetBlockSize service is shown in Related Definitions |
ExtendedSalEraseCustomBlockRange |
This function is similar in functionality to the EraseBlocks service of the EFI Firmware Volume Block Protocol except this function can specify a range of blocks with offsets into the starting and ending block See Section 2 4 of the Volume 3 Platform Initialization Specification Shared Architectural Elements The function prototype for the EraseBlock service is shown in Related Definitions |
11.4.30. ExtendedSalRead
Summary
This function is equivalent in functionality to the Read() service of the EFI Firmware Volume Block Protocol. See Section 2.4 of the Volume 3:Platform Initialization Specification, Shared Architectural Elements . The function prototype for the Read() service is shown in Related Definitions.
Prototype
SAL_RETURN_REGS
EFIAPI
ExtendedSalRead (
IN UINT64 FunctionId,
IN UINT64 Arg2,
IN UINT64 Arg3,
IN UINT64 Arg4,
IN UINT64 Arg5,
IN UINT64 Arg6,
IN UINT64 Arg7,
IN UINT64 Arg8,
IN BOOLEAN VirtualMode,
IN VOID *ModuleGlobal OPTIONAL
);
Parameters
- FunctionId
Must be EsalFvbReadFunctionId .
- Arg2
This argument is interpreted as type UINTN that represents the Firmware Volume Block instance. This instance value is used to lookup a EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL . See the This parameter in Related Definitions.
- Arg3
This argument is interpreted as type EFI_LBA . See the Lba parameter in Related Definitions.
- Arg4
This argument is interpreted as type UINTN . See the Offset parameter in Related Definitions.
- Arg5
This argument is interpreted as a pointer to type UINTN . See the NumBytes parameter in Related Definitions.
- Arg6
This argument is interpreted as pointer to a buffer of type
VOID *
. See the Buffer parameter in Related Definitions.- Arg7
Reserved. Must be zero.
- Arg8
Reserved. Must be zero.
- VirtualMode
TRUE if the Extended SAL Procedure is being invoked in virtual mode. FALSE if the Extended SAL Procedure is being invoked in physical mode.
- ModuleGlobal
A pointer to the global context associated with this Extended SAL Procedure. Implementation dependent.
typedef
EFI_STATUS
(EFIAPI *EFI_FVB_READ) (
IN EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This,
IN EFI_LBA Lba,
IN UINTN Offset,
IN OUT UINTN *NumBytes,
OUT UINT8 *Buffer
);
Description
This function performs the equivalent operation as the Read() function of the EFI Firmware Volume Block Protocol. If this function is called in virtual mode before any required mapping have been converted to virtual addresses, then EFI_SAL_VIRTUAL_ADDRESS_ERROR is returned. Otherwise, the one of the status codes defined in the Read() function of the EFI Firmware Volume Block Protocol is returned.
Status Codes Returned
EFI_SAL_VIRTUAL_ADDRESS_ERROR |
This function was called in virtual mode before virtual mappings for the specified Extended SAL Procedure are available |
Other |
See the return status codes for the Read function in the EFI Firmware Volume Block Protocol |
11.4.31. ExtendedSalWrite
Summary
This function is equivalent in functionality to the Write() service of the EFI Firmware Volume Block Protocol. See Section 2.4 of the Volume 3:Platform Initialization Specification, Shared Architectural Elements . The function prototype for the Write() service is shown in Related Definitions.
Prototype
SAL_RETURN_REGS
EFIAPI
ExtendedSalWrite (
IN UINT64 FunctionId,
IN UINT64 Arg2,
IN UINT64 Arg3,
IN UINT64 Arg4,
IN UINT64 Arg5,
IN UINT64 Arg6,
IN UINT64 Arg7,
IN UINT64 Arg8,
IN BOOLEAN VirtualMode,
IN VOID *ModuleGlobal OPTIONAL
);
Parameters
- FunctionId
Must be EsalFvbWriteFunctionId .
- Arg2
This argument is interpreted as type UINTN that represents the Firmware Volume Block instance. This instance value is used to lookup a EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL . See the This parameter in Related Definitions.
- Arg3
This argument is interpreted as type EFI_LBA . See the Lba parameter in Related Definitions.
- Arg4
This argument is interpreted as type UINTN . See the Offset parameter in Related Definitions.
- Arg5
This argument is interpreted as a pointer to type UINTN . See the NumBytes parameter in Related Definitions.
- Arg6
This argument is interpreted as pointer to a buffer of type
VOID *
. See the Buffer parameter in Related Definitions.- Arg7
Reserved. Must be zero.
- Arg8
Reserved. Must be zero.
- VirtualMode
TRUE if the Extended SAL Procedure is being invoked in virtual mode. FALSE if the Extended SAL Procedure is being invoked in physical mode.
- ModuleGlobal
A pointer to the global context associated with this Extended SAL Procedure. Implementation dependent.
typedef
EFI_STATUS
(EFIAPI *EFI_FVB_WRITE) (
IN EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This,
IN EFI_LBA Lba,
IN UINTN Offset,
IN OUT UINTN *NumBytes,
IN UINT8 *Buffer
);
Description
This function performs the equivalent operation as the Write() function of the EFI Firmware Volume Block Protocol. If this function is called in virtual mode before any required mapping have been converted to virtual addresses, then EFI_SAL_VIRTUAL_ADDRESS_ERROR is returned. Otherwise, the one of the status codes defined in the Write() function of the EFI Firmware Volume Block Protocol is returned.
Status Codes Returned
EFI_SAL_VIRTUAL_ADDRESS_ERROR |
This function was called in virtual mode before virtual mappings for the specified Extended SAL Procedure are available |
Other |
See the return status codes for the Write function in the EFI Firmware Volume Block Protocol |
11.4.32. ExtendedSalEraseBlock
Summary
This function is equivalent in functionality to the EraseBlocks() service of the EFI Firmware Volume Block Protocol except this function can only erase one block per request. See Section 2.4 of the Volume 3:Platform Initialization Specification, Shared Architectural Elements . The function prototype for the EraseBlock() service is shown in Related Definitions.
Prototype
SAL_RETURN_REGS
EFIAPI
ExtendedSalEraseBlock (
IN UINT64 FunctionId,
IN UINT64 Arg2,
IN UINT64 Arg3,
IN UINT64 Arg4,
IN UINT64 Arg5,
IN UINT64 Arg6,
IN UINT64 Arg7,
IN UINT64 Arg8,
IN BOOLEAN VirtualMode,
IN VOID *ModuleGlobal OPTIONAL
);
Parameters
- FunctionId
Must be EsalFvbEraseBlockFunctionId .
- Arg2
This argument is interpreted as type UINTN that represents the Firmware Volume Block instance. This instance value is used to lookup a EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL . See the This parameter in Related Definitions.
- Arg3
This argument is interpreted as type EFI_LBA . This is the logical block address in the firmware volume to erase. Only a single block can be specified with this Extended SAL Procedure. The EraseBlocks() function in the EFI Firmware Volume Block Protocol supports a variable number of arguments that allow one or more block ranges to be specified.
- Arg4
Reserved. Must be zero.
- Arg5
Reserved. Must be zero.
- Arg6
Reserved. Must be zero.
- Arg7
Reserved. Must be zero.
- Arg8
Reserved. Must be zero.
- VirtualMode
TRUE if the Extended SAL Procedure is being invoked in virtual mode. FALSE if the Extended SAL Procedure is being invoked in physical mode.
- ModuleGlobal
A pointer to the global context associated with this Extended SAL Procedure. Implementation dependent.
typedef
EFI_STATUS
(EFIAPI *EFI_FVB_ERASE_BLOCKS) (
IN EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This,
...
);
Description
This function performs the equivalent operation as the EraseBlock() function of the EFI Firmware Volume Block Protocol. If this function is called in virtual mode before any required mapping have been converted to virtual addresses, then EFI_SAL_VIRTUAL_ADDRESS_ERROR is returned. Otherwise, the one of the status codes defined in the EraseBlock() function of the EFI Firmware Volume Block Protocol is returned.
Status Codes Returned
EFI_SAL_VIRTUAL_ADDRESS_ERROR |
This function was called in virtual mode before virtual mappings for the specified Extended SAL Procedure are available |
Other |
See the return status codes for the EraseBlock function in the EFI Firmware Volume Block Protocol |
11.4.33. ExtendedSalGetAttributes
Summary
This function is equivalent in functionality to the GetAttributes() service of the EFI Firmware Volume Block Protocol. See Section 2.4 of the Volume 3:Platform Initialization Specification, Shared Architectural Elements . The function prototype for the GetAttributes() service is shown in Related Definitions.
Prototype
SAL_RETURN_REGS
EFIAPI
ExtendedSalGetAttributes (
IN UINT64 FunctionId,
IN UINT64 Arg2,
IN UINT64 Arg3,
IN UINT64 Arg4,
IN UINT64 Arg5,
IN UINT64 Arg6,
IN UINT64 Arg7,
IN UINT64 Arg8,
IN BOOLEAN VirtualMode,
IN VOID *ModuleGlobal OPTIONAL
);
Parameters
- FunctionId
Must be EsalFvbGetAttributesFunctionId .
- Arg2
This argument is interpreted as type UINTN that represents the Firmware Volume Block instance. This instance value is used to lookup a EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL . See the This parameter in Related Definitions.
- Arg3
This argument is interpreted as pointer to a value of type EFI_FVB_ATTRIBUTES . See the Attributes parameter in Related Definitions.
- Arg4
Reserved. Must be zero.
- Arg5
Reserved. Must be zero.
- Arg6
Reserved. Must be zero.
- Arg7
Reserved. Must be zero.
- Arg8
Reserved. Must be zero.
- VirtualMode
TRUE if the Extended SAL Procedure is being invoked in virtual mode. FALSE if the Extended SAL Procedure is being invoked in physical mode.
- ModuleGlobal
A pointer to the global context associated with this Extended SAL Procedure. Implementation dependent.
EFI_STATUS
(EFIAPI *EFI_FVB_GET_ATTRIBUTES) (
IN EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This,
OUT EFI_FVB_ATTRIBUTES *Attributes
);
Description
This function performs the equivalent operation as the GetAttributes() function of the EFI Firmware Volume Block Protocol. If this function is called in virtual mode before any required mapping have been converted to virtual addresses, then EFI_SAL_VIRTUAL_ADDRESS_ERROR is returned. Otherwise, the one of the status codes defined in the GetAttributes() function of the EFI Firmware Volume Block Protocol is returned.
Status Codes Returned
EFI_SAL_VIRTUAL_ADDRESS_ERROR |
This function was called in virtual mode before virtual mappings for the specified Extended SAL Procedure are available |
Other |
See the return status codes for the GetAttributes function in the EFI Firmware Volume Block Protocol |
11.4.34. ExtendedSalSetAttributes
Summary
This function is equivalent in functionality to the SetAttributes() service of the EFI Firmware Volume Block Protocol. See Section 2.4 of the Volume 3:Platform Initialization Specification, Shared Architectural Elements . The function prototype for the SetAttributes() service is shown in Related Definitions.
Prototype
SAL_RETURN_REGS
EFIAPI
ExtendedSalSetAttributes (
IN UINT64 FunctionId,
IN UINT64 Arg2,
IN UINT64 Arg3,
IN UINT64 Arg4,
IN UINT64 Arg5,
IN UINT64 Arg6,
IN UINT64 Arg7,
IN UINT64 Arg8,
IN BOOLEAN VirtualMode,
IN VOID *ModuleGlobal OPTIONAL
);
Parameters
- FunctionId
Must be EsalFvbSetAttributesFunctionId .
- Arg2
This argument is interpreted as type UINTN that represents the Firmware Volume Block instance. This instance value is used to lookup a EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL . See the This parameter in Related Definitions.
- Arg3
This argument is interpreted as pointer to a value of type EFI_FVB_ATTRIBUTES . See the Attributes parameter in Related Definitions.
- Arg4
Reserved. Must be zero.
- Arg5
Reserved. Must be zero.
- Arg6
Reserved. Must be zero.
- Arg7
Reserved. Must be zero.
- Arg8
Reserved. Must be zero.
- VirtualMode
TRUE if the Extended SAL Procedure is being invoked in virtual mode. FALSE if the Extended SAL Procedure is being invoked in physical mode.
- ModuleGlobal
A pointer to the global context associated with this Extended SAL Procedure. Implementation dependent.
typedef
EFI_STATUS
(EFIAPI *EFI_FVB_SET_ATTRIBUTES) (
IN EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This,
IN OUT EFI_FVB_ATTRIBUTES *Attributes
);
Description
This function performs the equivalent operation as the SetAttributes() function of the EFI Firmware Volume Block Protocol. If this function is called in virtual mode before any required mapping have been converted to virtual addresses, then EFI_SAL_VIRTUAL_ADDRESS_ERROR is returned. Otherwise, the one of the status codes defined in the SetAttributes() function of the EFI Firmware Volume Block Protocol is returned.
Status Codes Returned
EFI_SAL_VIRTUAL_ADDRESS_ERROR |
This function was called in virtual mode before virtual mappings for the specified Extended SAL Procedure are available |
Other |
See the return status codes for the SetAttributes function in the EFI Firmware Volume Block Protocol |
11.4.35. ExtendedSalGetPhysicalAddress
Summary
This function is equivalent in functionality to the GetPhysicalAddress() service of the EFI Firmware Volume Block Protocol. See Section 2.4 of the Volume 3:Platform Initialization Specification, Shared Architectural Elements . The function prototype for the GetPhysicalAddress() service is shown in Related Definitions.
Prototype
SAL_RETURN_REGS
EFIAPI
ExtendedSalGetPhysicalAddress (
IN UINT64 FunctionId,
IN UINT64 Arg2,
IN UINT64 Arg3,
IN UINT64 Arg4,
IN UINT64 Arg5,
IN UINT64 Arg6,
IN UINT64 Arg7,
IN UINT64 Arg8,
IN BOOLEAN VirtualMode,
IN VOID *ModuleGlobal OPTIONAL
);
Parameters
- FunctionId
Must be EsalFvbGetPhysicalAddressFunctionId .
- Arg2
This argument is interpreted as type UINTN that represents the Firmware Volume Block instance. This instance value is used to lookup a EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL . See the This parameter in Related Definitions.
- Arg3
This argument is interpreted as pointer to a value of type EFI_PHYSICAL_ADDRESS . See the Address parameter in Related Definitions.
- Arg4
Reserved. Must be zero.
- Arg5
Reserved. Must be zero.
- Arg6
Reserved. Must be zero.
- Arg7
Reserved. Must be zero.
- Arg8
Reserved. Must be zero.
- VirtualMode
TRUE if the Extended SAL Procedure is being invoked in virtual mode. FALSE if the Extended SAL Procedure is being invoked in physical mode.
- ModuleGlobal
A pointer to the global context associated with this Extended SAL Procedure. Implementation dependent.
typedef
EFI_STATUS
(EFIAPI *EFI_FVB_GET_PHYSICAL_ADDRESS) (
IN EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This,
OUT EFI_PHYSICAL_ADDRESS *Address
);
Description
This function performs the equivalent operation as the GetPhysicalAddress() function of the EFI Firmware Volume Block Protocol. If this function is called in virtual mode before any required mapping have been converted to virtual addresses, then EFI_SAL_VIRTUAL_ADDRESS_ERROR is returned. Otherwise, the one of the status codes defined in the GetPhysicalAddress() function of the EFI Firmware Volume Block Protocol is returned.
Status Codes Returned
EFI_SAL_VIRTUAL_ADDRESS_ERROR |
This function was called in virtual mode before virtual mappings for the specified Extended SAL Procedure are available |
Other |
See the return status codes for the GetPhysicalAddress function in the EFI Firmware Volume Block Protocol |
11.4.36. ExtendedSalGetBlockSize
Summary
This function is equivalent in functionality to the GetBlockSize() service of the EFI Firmware Volume Block Protocol. See Section 2.4 of the Volume 3:Platform Initialization Specification, Shared Architectural Elements . The function prototype for the GetBlockSize() service is shown in Related Definitions.
Prototype
SAL_RETURN_REGS
EFIAPI
ExtendedSalGetBlockSize (
IN UINT64 FunctionId,
IN UINT64 Arg2,
IN UINT64 Arg3,
IN UINT64 Arg4,
IN UINT64 Arg5,
IN UINT64 Arg6,
IN UINT64 Arg7,
IN UINT64 Arg8,
IN BOOLEAN VirtualMode,
IN VOID *ModuleGlobal OPTIONAL
);
Parameters
- FunctionId
Must be EsalFvbGetBlockSizeFunctionId .
- Arg2
This argument is interpreted as type UINTN that represents the Firmware Volume Block instance. This instance value is used to lookup a EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL .
- Arg3
This argument is interpreted as type EFI_LBA . See Lba parameter in Related Definitions.
- Arg4
This argument is interpreted as a pointer to a value of type UINTN . See BlockSize parameter in Related Definitions.
- Arg5
This argument is interpreted as a pointer to a value of type UINTN . See NumberOfBlocks parameter in Related Definitions.
- Arg6
Reserved. Must be zero.
- Arg7
Reserved. Must be zero.
- Arg8
Reserved. Must be zero.
- VirtualMode
TRUE if the Extended SAL Procedure is being invoked in virtual mode. FALSE if the Extended SAL Procedure is being invoked in physical mode.
- ModuleGlobal
A pointer to the global context associated with this Extended SAL Procedure. Implementation dependent.
typedef
EFI_STATUS
(EFIAPI *EFI_FVB_GET_BLOCK_SIZE) (
IN EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This,
IN EFI_LBA Lba,
OUT UINTN *BlockSize,
OUT UINTN *NumberOfBlocks
);
Description
This function performs the equivalent operation as the GetBlockSize() function of the EFI Firmware Volume Block Protocol. If this function is called in virtual mode before any required mapping have been converted to virtual addresses, then EFI_SAL_VIRTUAL_ADDRESS_ERROR is returned. Otherwise, the one of the status codes defined in the GetBlockSize() function of the EFI Firmware Volume Block Protocol is returned.
Status Codes Returned
EFI_SAL_VIRTUAL_ADDRESS_ERROR |
This function was called in virtual mode before virtual mappings for the specified Extended SAL Procedure are available |
Other |
See the return status codes for the GetBlockSize function in the EFI Firmware Volume Block Protocol |
11.4.37. ExtendedSalEraseCustomBlockRange
Summary
This function is similar in functionality to the EraseBlocks() service of the EFI Firmware Volume Block Protocol except this function can specify a range of blocks with offsets into the starting and ending block. See Section 2.4 of the Volume 3:Platform Initialization Specification, Shared Architectural Elements . The function prototype for the EraseBlock() service is shown in Related Definitions.
Prototype
SAL_RETURN_REGS
EFIAPI
ExtendedSalEraseCustomBlockRange (
IN UINT64 FunctionId,
IN UINT64 Arg2,
IN UINT64 Arg3,
IN UINT64 Arg4,
IN UINT64 Arg5,
IN UINT64 Arg6,
IN UINT64 Arg7,
IN UINT64 Arg8,
IN BOOLEAN VirtualMode,
IN VOID *ModuleGlobal OPTIONAL
);
Parameters
- FunctionId
Must be EsalFvbEraseCustomBlockRangeFunctionId .
- Arg2
This argument is interpreted as type UINTN that represents the Firmware Volume Block instance. This instance value is used to lookup a EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL . See the This parameter in Related Definitions.
- Arg3
This argument is interpreted as type EFI_LBA . This is the starting logical block address in the firmware volume to erase.
- Arg4
This argument is interpreted as type UINTN . This is the offset into the starting logical block to erase.
- Arg5
This argument is interpreted as type EFI_LBA . This is the ending logical block address in the firmware volume to erase.
- Arg6
This argument is interpreted as type UINTN . This is the offset into the ending logical block to erase.
- Arg7
Reserved. Must be zero.
- Arg8
Reserved. Must be zero.
- VirtualMode
TRUE if the Extended SAL Procedure is being invoked in virtual mode. FALSE if the Extended SAL Procedure is being invoked in physical mode.
- ModuleGlobal
A pointer to the global context associated with this Extended SAL Procedure. Implementation dependent.
typedef
EFI_STATUS
(EFIAPI *EFI_FVB_ERASE_BLOCKS) (
IN EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This,
...
);
Description
This function performs a similar operation as the EraseBlock() function of the EFI Firmware Volume Block Protocol. The main difference is that this function can perform a partial erase of the starting and ending blocks. The start of the erase operation is specified by Arg3 and Arg4 . The end of the erase operation is specified by Arg5 and Arg6 . If this function is called in virtual mode before any required mapping have been converted to virtual addresses, then EFI_SAL_VIRTUAL_ADDRESS_ERROR is returned. Otherwise, the one of the status codes defined in the EraseBlock() function of the EFI Firmware Volume Block Protocol is returned.
Status Codes Returned
EFI_SAL_VIRTUAL_ADDRESS_ERROR |
This function was called in virtual mode before virtual mappings for the specified Extended SAL Procedure are available |
Other |
See the return status codes for the EraseBlock function in the EFI Firmware Volume Block Protocol |
11.4.38. Extended SAL MCA Log Services Class
Summary
The Extended SAL MCA Log Services Class provides logging services for MCA events.
GUID
#define EFI_EXTENDED_SAL_MCA_LOG_SERVICES_PROTOCOL_GUID_LO \
0x4c0338a3cb3fd86e
#define EFI_EXTENDED_SAL_MCA_LOG_SERVICES_PROTOCOL_GUID_HI \
0x7aaba2a3cf905c9a
#define EFI_EXTENDED_SAL_MCA_LOG_SERVICES_PROTOCOL_GUID \
{0xcb3fd86e,0x38a3,0x4c03,\
{0x9a,0x5c,0x90,0xcf,0xa3,0xa2,0xab,0x7a}}
typedef enum {
SalGetStateInfoFunctionId,
SalGetStateInfoSizeFunctionId,
SalClearStateInfoFunctionId,
SalGetStateBufferFunctionId,
SalSaveStateBufferFunctionId,
} EFI_EXTENDED_SAL_MCA_LOG_SERVICES_FUNC_ID;
11.4.39. ExtendedSalGetStateInfo
Summary
This function is equivalent in functionality to the SAL Procedure SAL_GET_STATE_INFO . See the Intel Itanium Processor Family System Abstraction Layer Specification Chapter 9.
Prototype
SAL_RETURN_REGS
EFIAPI
ExtendedSalGetStateInfo (
IN UINT64 FunctionId,
IN UINT64 Arg2,
IN UINT64 Arg3,
IN UINT64 Arg4,
IN UINT64 Arg5,
IN UINT64 Arg6,
IN UINT64 Arg7,
IN UINT64 Arg8,
IN BOOLEAN VirtualMode,
IN VOID *ModuleGlobal OPTIONAL
);
Parameters
- FunctionId
Must be EsalGetStateInfoFunctionId .
- Arg2
type parameter to SAL_GET_STATE_INFO .
- Arg3
Reserved. Must be zero.
- Arg4
memaddr parameter to SAL_GET_STATE_INFO .
- Arg5
Reserved. Must be zero.
- Arg6
Reserved. Must be zero.
- Arg7
Reserved. Must be zero.
- Arg8
Reserved. Must be zero.
- VirtualMode
TRUE if the Extended SAL Procedure is being invoked in virtual mode. FALSE if the Extended SAL Procedure is being invoked in physical mode.
- ModuleGlobal
A pointer to the global context associated with this Extended SAL Procedure. Implementation dependent.
11.4.40. ExtendedSalGetStateInfoSize
Summary
This function is equivalent in functionality to the SAL Procedure SAL_GET_STATE_INFO_SIZE . See the Intel Itanium Processor Family System Abstraction Layer Specification Chapter 9.
Prototype
SAL_RETURN_REGS
EFIAPI
ExtendedSalGetStateInfoSize (
IN UINT64 FunctionId,
IN UINT64 Arg2,
IN UINT64 Arg3,
IN UINT64 Arg4,
IN UINT64 Arg5,
IN UINT64 Arg6,
IN UINT64 Arg7,
IN UINT64 Arg8,
IN BOOLEAN VirtualMode,
IN VOID *ModuleGlobal OPTIONAL
);
Parameters
- FunctionId
Must be EsalGetStateInfoSizeFunctionId .
- Arg2
type parameter to SAL_GET_STATE_INFO_SIZE .
- Arg3
Reserved. Must be zero.
- Arg4
Reserved. Must be zero.
- Arg5
Reserved. Must be zero.
- Arg6
Reserved. Must be zero.
- Arg7
Reserved. Must be zero.
- Arg8
Reserved. Must be zero.
- VirtualMode
TRUE if the Extended SAL Procedure is being invoked in virtual mode. FALSE if the Extended SAL Procedure is being invoked in physical mode.
- ModuleGlobal
A pointer to the global context associated with this Extended SAL Procedure. Implementation dependent.
11.4.41. ExtendedSalClearStateInfo
Summary
This function is equivalent in functionality to the SAL Procedure SAL_CLEAR_STATE_INFO . See the Intel Itanium Processor Family System Abstraction Layer Specification Chapter 9.
Prototype
SAL_RETURN_REGS
EFIAPI
ExtendedSalClearStateInfo (
IN UINT64 FunctionId,
IN UINT64 Arg2,
IN UINT64 Arg3,
IN UINT64 Arg4,
IN UINT64 Arg5,
IN UINT64 Arg6,
IN UINT64 Arg7,
IN UINT64 Arg8,
IN BOOLEAN VirtualMode,
IN VOID *ModuleGlobal OPTIONAL
);
Parameters
- FunctionId
Must be EsalGetStateInfoFunctionId .
- Arg2
type parameter to SAL_CLEAR_STATE_INFO .
- Arg3
Reserved. Must be zero.
- Arg4
Reserved. Must be zero.
- Arg5
Reserved. Must be zero.
- Arg6
Reserved. Must be zero.
- Arg7
Reserved. Must be zero.
- Arg8
Reserved. Must be zero.
- VirtualMode
TRUE if the Extended SAL Procedure is being invoked in virtual mode. FALSE if the Extended SAL Procedure is being invoked in physical mode.
- ModuleGlobal
A pointer to the global context associated with this Extended SAL Procedure. Implementation dependent.
11.4.42. ExtendedSalGetStateBuffer
Summary
Returns a memory buffer to store error records.
Prototype
SAL_RETURN_REGS
EFIAPI
ExtendedSalGetStateBuffer (
IN UINT64 FunctionId,
IN UINT64 Arg2,
IN UINT64 Arg3,
IN UINT64 Arg4,
IN UINT64 Arg5,
IN UINT64 Arg6,
IN UINT64 Arg7,
IN UINT64 Arg8,
IN BOOLEAN VirtualMode,
IN VOID *ModuleGlobal OPTIONAL
);
Parameters
- FunctionId
Must be EsalGetStateBufferFunctionId .
- Arg2
Same as type parameter to SAL_GET_STATE_INFO .
- Arg3
Reserved. Must be zero.
- Arg4
Reserved. Must be zero.
- Arg5
Reserved. Must be zero.
- Arg6
Reserved. Must be zero.
- Arg7
Reserved. Must be zero.
- Arg8
Reserved. Must be zero.
- VirtualMode
TRUE if the Extended SAL Procedure is being invoked in virtual mode. FALSE if the Extended SAL Procedure is being invoked in physical mode.
- ModuleGlobal
A pointer to the global context associated with this Extended SAL Procedure. Implementation dependent.
Description
This function returns a memory buffer to store error records. The base address of the buffer is returned in SAL_RETURN_REGS .r9 , and the size of the buffer, in bytes, is returned in SAL_RETURN_REGS .r10 . If a buffer is not available, then EFI_OUT_OF_RESOURCES is returned. Otherwise, EFI_SUCCESS is returned.
Status Codes Returned
EFI_SUCCESS |
The memory buffer to store error records was returned in r9 and r10 |
EFI_OUT_OF_RESOURCES |
A memory buffer for string error records in not available |
11.4.43. ExtendedSalSaveStateBuffer
Summary
Saves a memory buffer containing an error records to nonvolatile storage.
Prototype
SAL_RETURN_REGS
EFIAPI
ExtendedSalSaveStateBuffer (
IN UINT64 FunctionId,
IN UINT64 Arg2,
IN UINT64 Arg3,
IN UINT64 Arg4,
IN UINT64 Arg5,
IN UINT64 Arg6,
IN UINT64 Arg7,
IN UINT64 Arg8,
IN BOOLEAN VirtualMode,
IN VOID *ModuleGlobal OPTIONAL
);
Parameters
- FunctionId
Must be EsalSaveStateBufferFunctionId .
- Arg2
Same as type parameter to SAL_GET_STATE_INFO .
- Arg3
Reserved. Must be zero.
- Arg4
Reserved. Must be zero.
- Arg5
Reserved. Must be zero.
- Arg6
Reserved. Must be zero.
- Arg7
Reserved. Must be zero.
- Arg8
Reserved. Must be zero.
- VirtualMode
TRUE if the Extended SAL Procedure is being invoked in virtual mode. FALSE if the Extended SAL Procedure is being invoked in physical mode.
- ModuleGlobal
A pointer to the global context associated with this Extended SAL Procedure. Implementation dependent.
Description
This function saved a memory buffer containing an error record to nonvolatile storage.
Status Codes Returned
EFI_SUCCESS |
The memory buffer containing the error record was written to nonvolatile storage |
TBD |
11.4.44. Extended SAL Base Services Class
Summary
The Extended SAL Base Services Class provides base services that do not have any hardware dependencies including a number of SAL Procedures required by the Intel Itanium Processor Family System Abstraction Layer Specification .
GUID
#define EFI_EXTENDED_SAL_BASE_SERVICES_PROTOCOL_GUID_LO \
0x41c30fe0d9e9fa06
#define EFI_EXTENDED_SAL_BASE_SERVICES_PROTOCOL_GUID_HI \
0xf894335a4283fb96
#define EFI_EXTENDED_SAL_BASE_SERVICES_PROTOCOL_GUID \
{0xd9e9fa06,0x0fe0,0x41c3,\
{0x96,0xfb,0x83,0x42,0x5a,0x33,0x94,0xf8}}
typedef enum {
SalSetVectorsFunctionId,
SalMcRendezFunctionId,
SalMcSetParamsFunctionId,
EsalGetVectorsFunctionId,
EsalMcGetParamsFunctionId,
EsalMcGetMcParamsFunctionId,
EsalGetMcCheckinFlagsFunctionId,
EsalGetPlatformBaseFreqFunctionId,
EsalRegisterPhysicalAddrFunctionId,
EsalBaseClassMaxFunctionId
} EFI_EXTENDED_SAL_BASE_SERVICES_FUNC_ID;
Description
Name |
Description |
---|---|
ExtendedSalSetVectors |
This function is equivalent in functionality to the SAL Procedure SAL_SET_VECTORS See the Intel Itanium Processor Family System Abstraction Layer Specification Chapter 9 |
ExtendedSalMcRendez |
This function is equivalent in functionality to the SAL Procedure SAL_MC_RENDEZ See the Intel Itanium Processor Family System Abstraction Layer Specification Chapter 9 |
ExtendedSalMcSetParams |
This function is equivalent in functionality to the SAL Procedure SAL_MC_SET_PARAMS See the Intel Itanium Processor Family System Abstraction Layer Specification Chapter 9 |
ExtendedSalGetVectors |
Retrieves information that was previously registered with the SAL Procedure SAL_SET_VECTORS |
ExtendedSalMcGetParams |
Retrieves information that was previously registered with the SAL Procedure SAL_MC_SET_PARAMS |
ExtendedSalMcGetMcParams |
Retrieves information that was previously registered with the SAL Procedure SAL_MC_SET_PARAMS |
ExtendedSalGetMcCheckinFlags |
Used to determine if a specific CPU has called the SAL Procedure SAL_MC_RENDEZ |
ExtendedSalGetPlatformBaseFreq |
This function is equivalent in functionality to the SAL Procedure SAL_FREQ_BASE with a clock_type of 0 See the Intel Itanium Processor Family System Abstraction Layer Specification Chapter 9 |
ExtendedSalRegisterPhysicalAddr |
This function is equivalent in functionality to the SAL Procedure SAL_REGISTER_PHYSICAL_ADDR See the Intel Itanium Processor Family System Abstraction Layer Specification Chapter 9 |
11.4.45. ExtendedSalSetVectors
Summary
This function is equivalent in functionality to the SAL Procedure SAL_SET_VECTORS . See the Intel Itanium Processor Family System Abstraction Layer Specification Chapter 9.
Prototype
SAL_RETURN_REGS
EFIAPI
ExtendedSalSetVectors (
IN UINT64 FunctionId,
IN UINT64 Arg2,
IN UINT64 Arg3,
IN UINT64 Arg4,
IN UINT64 Arg5,
IN UINT64 Arg6,
IN UINT64 Arg7,
IN UINT64 Arg8,
IN BOOLEAN VirtualMode,
IN VOID *ModuleGlobal OPTIONAL
);
Parameters
- FunctionId
Must be EsalSetVectorsFunctionId .
- Arg2
vector_type parameter to SAL_SET_VECTORS .
- Arg3
phys_addr_1 parameter to SAL_SET_VECTORS .
- Arg4
gp_1 parameter to SAL_SET_VECTORS .
- Arg5
length_cs_1 parameter to SAL_SET_VECTORS .
- Arg6
phys_addr_2 parameter to SAL_SET_VECTORS .
- Arg7
gp_2 parameter to SAL_SET_VECTORS .
- Arg8
length_cs_2 parameter to SAL_SET_VECTORS .
- VirtualMode
TRUE if the Extended SAL Procedure is being invoked in virtual mode. FALSE if the Extended SAL Procedure is being invoked in physical mode.
- ModuleGlobal
A pointer to the global context associated with this Extended SAL Procedure. Implementation dependent.
11.4.46. ExtendedSalMcRendez
Summary
This function is equivalent in functionality to the SAL Procedure SAL_MC_RENDEZ . See the Intel Itanium Processor Family System Abstraction Layer Specification Chapter 9.
Prototype
SAL_RETURN_REGS
EFIAPI
ExtendedSalMcRendez (
IN UINT64 FunctionId,
IN UINT64 Arg2,
IN UINT64 Arg3,
IN UINT64 Arg4,
IN UINT64 Arg5,
IN UINT64 Arg6,
IN UINT64 Arg7,
IN UINT64 Arg8,
IN BOOLEAN VirtualMode,
IN VOID *ModuleGlobal OPTIONAL
);
Parameters
- FunctionId
Must be EsalMcRendezFunctionId .
- Arg2
Reserved. Must be zero.
- Arg3
Reserved. Must be zero.
- Arg4
Reserved. Must be zero.
- Arg5
Reserved. Must be zero.
- Arg6
Reserved. Must be zero.
- Arg7
Reserved. Must be zero.
- Arg8
Reserved. Must be zero.
- VirtualMode
TRUE if the Extended SAL Procedure is being invoked in virtual mode. FALSE if the Extended SAL Procedure is being invoked in physical mode.
- ModuleGlobal
A pointer to the global context associated with this Extended SAL Procedure. Implementation dependent.
11.4.47. ExtendedSalMcSetParams
Summary
This function is equivalent in functionality to the SAL Procedure SAL_MC_SET_PARAMS. See the Intel Itanium Processor Family System Abstraction Layer Specification Chapter 9.
Prototype
SAL_RETURN_REGS
EFIAPI
ExtendedSalMcSetParams (
IN UINT64 FunctionId,
IN UINT64 Arg2,
IN UINT64 Arg3,
IN UINT64 Arg4,
IN UINT64 Arg5,
IN UINT64 Arg6,
IN UINT64 Arg7,
IN UINT64 Arg8,
IN BOOLEAN VirtualMode,
IN VOID *ModuleGlobal OPTIONAL
);
Parameters
- FunctionId
Must be EsalMcSetParamsFunctionId .
- Arg2
param_type parameter to SAL_MC_SET_PARAMS .
- Arg3
i_or_m parameter to SAL_MC_SET_PARAMS .
- Arg4
i_or_m_val parameter to SAL_MC_SET_PARAMS .
- Arg5
time_out parameter to SAL_MC_SET_PARAMS .
- Arg6
mca_opt parameter to SAL_MC_SET_PARAMS .
- Arg7
Reserved. Must be zero.
- Arg8
Reserved. Must be zero.
- VirtualMode
TRUE if the Extended SAL Procedure is being invoked in virtual mode. FALSE if the Extended SAL Procedure is being invoked in physical mode.
- ModuleGlobal
A pointer to the global context associated with this Extended SAL Procedure. Implementation dependent.
11.4.48. ExtendedSalGetVectors
Retrieves information that was previously registered with the SAL Procedure SAL_SET_VECTORS .
Prototype
SAL_RETURN_REGS
EFIAPI
ExtendedSalGetVectors (
IN UINT64 FunctionId,
IN UINT64 Arg2,
IN UINT64 Arg3,
IN UINT64 Arg4,
IN UINT64 Arg5,
IN UINT64 Arg6,
IN UINT64 Arg7,
IN UINT64 Arg8,
IN BOOLEAN VirtualMode ,
IN VOID *ModuleGlobal OPTIONAL
);
Parameters
- FunctionId
Must be EsalGetVectorsFunctionId .
- Arg2
The vector type to retrieve. 0 - MCA, 1-BSP INIT, 2 - BOOT_RENDEZ, 3 - AP INIT.
- Arg3
Reserved. Must be zero.
- Arg4
Reserved. Must be zero.
- Arg5
Reserved. Must be zero.
- Arg6
Reserved. Must be zero.
- Arg7
Reserved. Must be zero.
- Arg8
Reserved. Must be zero.
- VirtualMode
TRUE if the Extended SAL Procedure is being invoked in virtual mode. FALSE if the Extended SAL Procedure is being invoked in physical mode.
- ModuleGlobal
A pointer to the global context associated with this Extended SAL Procedure. Implementation dependent.
Description
This function returns the vector information for the vector specified by Arg2 . If the specified vector was not previously registered with the SAL Procedure SAL_SET_VECTORS , then SAL_NO_INFORMATION_AVAILABLE is returned. Otherwise, the physical address of the requested vector is returned in SAL_RETURN_REGS . r9 , the global pointer(GP) value is returned in SAL_RETURN_REGS . r10 , the length and checksum information is returned in SAL_RETURN_REGS . r10 , and EFI_SUCCESS is returned.
Status Codes Returned
EFI_SUCCESS |
The information for the requested vector was returned |
SAL_NO_INFORMATION_AVAILABLE |
The requested vector has not been registered with the SAL Procedure SAL_SET_VECTORS |
11.4.49. ExtendedSalMcGetParams
Summary
Retrieves information that was previously registered with the SAL Procedure SAL_MC_SET_PARAMS .
Prototype
SAL_RETURN_REGS
EFIAPI
ExtendedSalMcGetParams (
IN UINT64 FunctionId,
IN UINT64 Arg2,
IN UINT64 Arg3,
IN UINT64 Arg4,
IN UINT64 Arg5,
IN UINT64 Arg6,
IN UINT64 Arg7,
IN UINT64 Arg8,
IN BOOLEAN VirtualMode,
IN VOID *ModuleGlobal OPTIONAL
);
Parameters
- FunctionId
Must be EsalMcGetParamsFunctionId .
- Arg2
The parameter type to retrieve. 1 - rendezvous interrupt, 2 - wake up, 3 - Corrected Platform Error Vector.
- Arg3
Reserved. Must be zero.
- Arg4
Reserved. Must be zero.
- Arg5
Reserved. Must be zero.
- Arg6
Reserved. Must be zero.
- Arg7
Reserved. Must be zero.
- Arg8
Reserved. Must be zero.
- VirtualMode
TRUE if the Extended SAL Procedure is being invoked in virtual mode. FALSE if the Extended SAL Procedure is being invoked in physical mode.
- ModuleGlobal
A pointer to the global context associated with this Extended SAL Procedure. Implementation dependent.
Description
This function returns information for the parameter type specified by Arg2 that was previously registered with the SAL Procedure SAL_MC_SET_PARAMS . If the parameter type specified by Arg2 was not previously registered with the SAL Procedure SAL_MC_SET_PARAMS , then SAL_NO_INFORMATION_AVAILABLE is returned. Otherwise, the i_or_m value is returned in SAL_RETURN_REGS . r9 , the i_or_m_val value is returned in SAL_RETURN_REGS. r10 , and EFI_SUCCESS is returned.
Status Codes Returned
EFI_SUCCESS |
The information for the requested vector was returned |
SAL_NO_INFORMATION_AVAILABLE |
The requested vector has not been registered with the SAL Procedure SAL_SET_VECTORS |
11.4.50. ExtendedSalMcGetMcParams
Summary
Retrieves information that was previously registered with the SAL Procedure SAL_MC_SET_PARAMS .
Prototype
SAL_RETURN_REGS
EFIAPI
ExtendedSalMcGetMcParams (
IN UINT64 FunctionId,
IN UINT64 Arg2,
IN UINT64 Arg3,
IN UINT64 Arg4,
IN UINT64 Arg5,
IN UINT64 Arg6,
IN UINT64 Arg7,
IN UINT64 Arg8,
IN BOOLEAN VirtualMode,
IN VOID *ModuleGlobal OPTIONAL
);
Parameters
- FunctionId
Must be EsalMcGetMcParamsFunctionId .
- Arg2
Reserved. Must be zero.
- Arg3
Reserved. Must be zero.
- Arg4
Reserved. Must be zero.
- Arg5
Reserved. Must be zero.
- Arg6
Reserved. Must be zero.
- Arg7
Reserved. Must be zero.
- Arg8
Reserved. Must be zero.
- VirtualMode
TRUE if the Extended SAL Procedure is being invoked in virtual mode. FALSE if the Extended SAL Procedure is being invoked in physical mode.
- ModuleGlobal
A pointer to the global context associated with this Extended SAL Procedure. Implementation dependent.
Description
This function returns information that was previously registered with the SAL Procedure SAL_MC_SET_PARAMS . If the information was not previously registered with the SAL Procedure SAL_MC_SET_PARAMS , then SAL_NO_INFORMATION_AVAILABLE is returned. Otherwise, the rz_always value is returned in SAL_RETURN_REGS . r9 , time_out value is returned in SAL_RETURN_REGS . r10 , binit_escalate value is returned in SAL_RETURN_REGS. r11 .
Status Codes Returned
EFI_SUCCESS |
The information for the requested vector was returned |
SAL_NO_INFORMATION_AVAILABLE |
The requested vector has not been registered with the SAL Procedure SAL_SET_VECTORS |
11.4.51. ExtendedSalGetMcCheckinFlags
Summary
Used to determine if a specific CPU has called the SAL Procedure SAL_MC_RENDEZ .
Prototype
SAL_RETURN_REGS
EFIAPI
ExtendedSalMcGetMcCheckinFlags (
IN UINT64 FunctionId,
IN UINT64 Arg2,
IN UINT64 Arg3,
IN UINT64 Arg4,
IN UINT64 Arg5,
IN UINT64 Arg6,
IN UINT64 Arg7,
IN UINT64 Arg8,
IN BOOLEAN VirtualMode,
IN VOID *ModuleGlobal OPTIONAL
);
Parameters
- FunctionId
Must be EsalMcGetMcChckinFlagsFunctionId .
- Arg2
The index of the CPU in the set of enabled CPUs to check.
- Arg3
Reserved. Must be zero.
- Arg4
Reserved. Must be zero.
- Arg5
Reserved. Must be zero.
- Arg6
Reserved. Must be zero.
- Arg7
Reserved. Must be zero.
- Arg8
Reserved. Must be zero.
- VirtualMode
TRUE if the Extended SAL Procedure is being invoked in virtual mode. FALSE if the Extended SAL Procedure is being invoked in physical mode.
- ModuleGlobal
A pointer to the global context associated with this Extended SAL Procedure. Implementation dependent.
Description
This function check to see if the CPU index specified by Arg2 has called the SAL Procedure SAL_MC_RENDEZ . The CPU index values are assigned by the Extended SAL MP Services Class. If the CPU specified by Arg2 has called the SAL Procedure SAL_MC_RENDEZ , then 1 is returned in SAL_RETURN_REGS . r9 . Otherwise, SAL_RETURN_REGS . r9 is set to 0. EFI_SAL_SUCCESS is always returned.
Status Codes Returned
EFI_SAL_SUCCESS |
The checkin status of the requested CPU was returned. |
11.4.52. ExtendedSalGetPlatformBaseFreq
Summary
This function is equivalent in functionality to the SAL Procedure SAL_FREQ_BASE with a clock_type of 0. See the Intel Itanium Processor Family System Abstraction Layer Specification Chapter 9.
Prototype
SAL_RETURN_REGS
EFIAPI
ExtendedSalMcGetPlatformBaseFreq (
IN UINT64 FunctionId,
IN UINT64 Arg2,
IN UINT64 Arg3,
IN UINT64 Arg4,
IN UINT64 Arg5,
IN UINT64 Arg6,
IN UINT64 Arg7,
IN UINT64 Arg8,
IN BOOLEAN VirtualMode,
IN VOID *ModuleGlobal OPTIONAL
);
Parameters
- FunctionId
Must be EsalMcGetPlatformBaseFreqFunctionId .
- Arg2
Reserved. Must be zero.
- Arg3
Reserved. Must be zero.
- Arg4
Reserved. Must be zero.
- Arg5
Reserved. Must be zero.
- Arg6
Reserved. Must be zero.
- Arg7
Reserved. Must be zero.
- Arg8
Reserved. Must be zero.
- VirtualMode
TRUE if the Extended SAL Procedure is being invoked in virtual mode. FALSE if the Extended SAL Procedure is being invoked in physical mode.
- ModuleGlobal
A pointer to the global context associated with this Extended SAL Procedure. Implementation dependent.
11.4.53. ExtendedSalRegisterPhysicalAddr
Summary
This function is equivalent in functionality to the SAL Procedure SAL_REGISTER_PHYSICAL_ADDR . See the Intel Itanium Processor Family System Abstraction Layer Specification Chapter 9.
Prototype
SAL_RETURN_REGS
EFIAPI
ExtendedSalRegisterPhysicalAddr (
IN UINT64 FunctionId,
IN UINT64 Arg2,
IN UINT64 Arg3,
IN UINT64 Arg4,
IN UINT64 Arg5,
IN UINT64 Arg6,
IN UINT64 Arg7,
IN UINT64 Arg8,
IN BOOLEAN VirtualMode,
IN VOID *ModuleGlobalOPTIONAL
);
Parameters
- FunctionId
Must be EsalRegisterPhysicalAddrFunctionId .
- Arg2
phys_entity parameter to SAL_REGISTER_PHYSICAL_ADDRESS .
- Arg3
paddr parameter to SAL_REGISTER_PHYSICAL_ADDRESS .
- Arg4
Reserved. Must be zero.
- Arg5
Reserved. Must be zero.
- Arg6
Reserved. Must be zero.
- Arg7
Reserved. Must be zero.
- Arg8
Reserved. Must be zero.
- VirtualMode
TRUE if the Extended SAL Procedure is being invoked in virtual mode. FALSE if the Extended SAL Procedure is being invoked in physical mode.
- ModuleGlobal
A pointer to the global context associated with this Extended SAL Procedure. Implementation dependent.
11.4.54. Extended SAL MP Services Class
Summary
The Extended SAL MP Services Class provides services for managing multiple CPUs.
GUID
#define EFI_EXTENDED_SAL_MP_SERVICES_PROTOCOL_GUID_LO \
0x4dc0cf18697d81a2
#define EFI_EXTENDED_SAL_MP_SERVICES_PROTOCOL_GUID_HI \
0x3f8a613b11060d9e
#define EFI_EXTENDED_SAL_MP_SERVICES_PROTOCOL_GUID \
{0x697d81a2,0xcf18,0x4dc0,\
{0x9e,0x0d,0x06,0x11,0x3b,0x61,0x8a,0x3f}}
typedef enum {
AddCpuDataFunctionId,
RemoveCpuDataFunctionId,
ModifyCpuDataFunctionId,
GetCpuDataByIdFunctionId,
GetCpuDataByIndexFunctionId,
SendIpiFunctionId,
CurrentProcInfoFunctionId,
NumProcessorsFunctionId,
SetMinStateFunctionId,
GetMinStateFunctionId,
EsalPhysicalIdInfo,
} EFI_EXTENDED_SAL_MP_SERVICES_FUNC_ID;
Description
Name |
Description |
---|---|
ExtendedSalAddCpuData |
Add a CPU to the database of CPUs |
ExtendedSalRemoveCpuData |
Add a CPU to the database of CPUs |
ExtendedSalModifyCpuData |
Updates the data for a CPU that is already in the database of CPUs |
ExtendedSalGetCpuDataById |
Returns the information on a CPU specified by a Global ID |
ExtendedSalGetCpuDataByIndex |
Returns information on a CPU specified by an index |
ExtendedSalWhoAmI |
Returns the Global ID for the calling CPU |
ExtendedSalNumProcessors |
Returns the number of currently enabled CPUs the total number of CPUs and the maximum number of CPUs that the platform supports |
ExtendedSalSetMinState |
Sets the MINSTATE pointer for the CPU specified by a Global ID |
ExtendedSalGetMinState |
Retrieves the MINSTATE pointer for the CPU specified by a Global ID |
ExtendedSalPhysicalIdInfo |
Retrieves the Physical ID of a CPU in the platform |
11.4.55. ExtendedSalAddCpuData
Summary
Add a CPU to the database of CPUs.
Prototype
SAL_RETURN_REGS
EFIAPI
ExtendedSalAddCpuData (
IN UINT64 FunctionId,
IN UINT64 Arg2,
IN UINT64 Arg3,
IN UINT64 Arg4,
IN UINT64 Arg5,
IN UINT64 Arg6,
IN UINT64 Arg7,
IN UINT64 Arg8,
IN BOOLEAN VirtualMode,
IN VOID *ModuleGlobal OPTIONAL
);
Parameters
- FunctionId
Must be EsalAddCpuDataFunctionId .
- Arg2
The 64-bit Global ID of the CPU being added.
- Arg3
The enable flag for the CPU being added. This value is interpreted as type BOOLEAN . TRUE means the CPU is enabled. FALSE means the CPU is disabled.
- Arg4
The PAL Compatibility value for the CPU being added.
- Arg5
The 16-bit Platform ID of the CPU being added.
- Arg6
Reserved. Must be zero.
- Arg7
Reserved. Must be zero.
- Arg8
Reserved. Must be zero.
- VirtualMode
TRUE if the Extended SAL Procedure is being invoked in virtual mode. FALSE if the Extended SAL Procedure is being invoked in physical mode.
- ModuleGlobal
A pointer to the global context associated with this Extended SAL Procedure. Implementation dependent.
Description
This function adds the CPU with a Global ID specified by Arg2 , the enable flag specified by Arg3 , and the PAL Compatibility value specified by Arg4 to the database of CPUs in the platform. If there are not enough resource available to add the CPU, then EFI_SAL_NOT_ENOUGH_SCRATCH is returned. Otherwise, the CPU to added to the database, and EFI_SAL_SUCCESS is returned.
Status Codes Returned
EFI_SAL_SUCCESS |
The CPU was added to the database |
EFI_SAL_NOT_ENOUGH_SCRATCH |
There are not enough resource available to add the CPU |
11.4.56. ExtendedSalRemoveCpuData
Summary
Add a CPU to the database of CPUs.
Prototype
SAL_RETURN_REGS
EFIAPI
ExtendedSalRemoveCpuData (
IN UINT64 FunctionId,
IN UINT64 Arg2,
IN UINT64 Arg3,
IN UINT64 Arg4,
IN UINT64 Arg5,
IN UINT64 Arg6,
IN UINT64 Arg7,
IN UINT64 Arg8,
IN BOOLEAN VirtualMode,
IN VOID *ModuleGlobal OPTIONAL
);
Parameters
- FunctionId
Must be EsalRemoveCpuDataFunctionId .
- Arg2
The 64-bit Global ID of the CPU being added.
- Arg3
Reserved. Must be zero.
- Arg4
Reserved. Must be zero.
- Arg5
Reserved. Must be zero.
- Arg6
Reserved. Must be zero.
- Arg7
Reserved. Must be zero.
- Arg8
Reserved. Must be zero.
- VirtualMode
TRUE if the Extended SAL Procedure is being invoked in virtual mode. FALSE if the Extended SAL Procedure is being invoked in physical mode.
- ModuleGlobal
A pointer to the global context associated with this Extended SAL Procedure. Implementation dependent.
Description
This function removes the CPU with a Global ID specified by Arg2 from the database of CPUs in the platform. If the CPU specified by Arg2 is not present in the database, then EFI_SAL_NO_INFORMATION is returned. Otherwise, the CPU specified by Arg2 is removed from the database of CPUs, and EFI_SAL_SUCCESS is returned.
Status Codes Returned
EFI_SAL_SUCCESS |
The CPU was removed from the database. |
EFI_SAL_NO_INFORMATION |
The specified CPU is not in the database. |
11.4.57. ExtendedSalModifyCpuData
Summary
Updates the data for a CPU that is already in the database of CPUs.
Prototype
SAL_RETURN_REGS
EFIAPI
ExtendedSalModifyCpuData (
IN UINT64 FunctionId,
IN UINT64 Arg2,
IN UINT64 Arg3,
IN UINT64 Arg4,
IN UINT64 Arg5,
IN UINT64 Arg6,
IN UINT64 Arg7,
IN UINT64 Arg8,
IN BOOLEAN VirtualMode,
IN VOID *ModuleGlobal OPTIONAL
);
Parameters
- FunctionId
Must be EsalModifyCpuDataFunctionId .
- Arg2
The 64-bit Global ID of the CPU being updated.
- Arg3
The enable flag for the CPU being updated. This value is interpreted as type BOOLEAN . TRUE means the CPU is enabled. FALSE means the CPU is disabled.
- Arg4
The PAL Compatibility value for the CPU being updated.
- Arg5
The 16-bit Platform ID of the CPU being updated.
- Arg6
Reserved. Must be zero.
- Arg7
Reserved. Must be zero.
- Arg8
Reserved. Must be zero.
- VirtualMode
TRUE if the Extended SAL Procedure is being invoked in virtual mode. FALSE if the Extended SAL Procedure is being invoked in physical mode.
- ModuleGlobal
A pointer to the global context associated with this Extended SAL Procedure. Implementation dependent.
Description
This function updates the CPU with a Global ID specified by Arg2 , the enable flag specified by Arg3 , and the PAL Compatibility value specified by Arg4 in the database of CPUs in the platform. If the CPU specified by Arg2 is not present in the database, then EFI_SAL_NO_INFORMATION is returned. Otherwise, the CPU specified by Arg2 is updates with the enable flag specified by Arg3 and the PAL Compatibility value specified by Arg4 , and EFI_SAL_SUCCESS is returned.
Status Codes Returned
EFI_SAL_SUCCESS |
The CPU database was updated. |
EFI_SAL_NO_INFORMATION |
The specified CPU is not in the database. |
11.4.58. ExtendedSalGetCpuDataById
Summary
Returns the information on a CPU specified by a Global ID.
Prototype
SAL_RETURN_REGS
EFIAPI
ExtendedSalGetCpuDataById (
IN UINT64 FunctionId,
IN UINT64 Arg2,
IN UINT64 Arg3,
IN UINT64 Arg4,
IN UINT64 Arg5,
IN UINT64 Arg6,
IN UINT64 Arg7,
IN UINT64 Arg8,
IN BOOLEAN VirtualMode,
IN VOID *ModuleGlobal OPTIONAL
);
Parameters
- FunctionId
Must be EsalGetCpuDataByIdFunctionId .
- Arg2
The 64-bit Global ID of the CPU to lookup.
- Arg3
This parameter is interpreted as a BOOLEAN value. If TRUE , then the index in the set of enabled CPUs in the database is returned. If FALSE , then the index in the set of all CPUs in the database is returned.
- Arg4
Reserved. Must be zero.
- Arg5
Reserved. Must be zero.
- Arg6
Reserved. Must be zero.
- Arg7
Reserved. Must be zero.
- Arg8
Reserved. Must be zero.
- VirtualMode
TRUE if the Extended SAL Procedure is being invoked in virtual mode. FALSE if the Extended SAL Procedure is being invoked in physical mode.
- ModuleGlobal
A pointer to the global context associated with this Extended SAL Procedure. Implementation dependent.
Description
This function looks up the CPU specified by Arg2 in the CPU database and returns the enable status and PAL Compatibility value. If the CPU specified by Arg2 is not present in the database, then EFI_SAL_NO_INFORMATION is returned. Otherwise, the enable status is returned in SAL_RETURN_REGS .r9 , the PAL Compatibility value is returned in SAL_RETURN_REGS . r10 , and EFI_SAL_SUCCESS is returned. If Arg3 is TRUE , then the index of the CPU specified by Arg2 in the set of enabled CPUs is returned in SAL_RETURN_REGS . r11. If Arg3 is FALSE , then the index of the CPU specified by Arg2 in the set of all CPUs is returned in SAL_RETURN_REGS . r11 .
Status Codes Returned
EFI_SAL_SUCCESS |
The information on the specified CPU was returned |
EFI_SAL_NO_INFORMATION |
The specified CPU is not in the database |
11.4.59. ExtendedSalGetCpuDataByIndex
Summary
Returns information on a CPU specified by an index.
Prototype
SAL_RETURN_REGS
EFIAPI
ExtendedSalGetCpuDataByIndex (
IN UINT64 FunctionId,
IN UINT64 Arg2,
IN UINT64 Arg3,
IN UINT64 Arg4,
IN UINT64 Arg5,
IN UINT64 Arg6,
IN UINT64 Arg7,
IN UINT64 Arg8,
IN BOOLEAN VirtualMode,
IN VOID *ModuleGlobal OPTIONAL
);
Parameters
- FunctionId
Must be EsalGetCpuDataByIndexFunctionId .
- Arg2
The index of the CPU to lookup.
- Arg3
This parameter is interpreted as a BOOLEAN value. If TRUE , then the index in Arg2 is the index in the set of enabled CPUs. If FALSE , then the index in Arg2 is the index in the set of all CPUs.
- Arg4
Reserved. Must be zero.
- Arg5
Reserved. Must be zero.
- Arg6
Reserved. Must be zero.
- Arg7
Reserved. Must be zero.
- Arg8
Reserved. Must be zero.
- VirtualMode
TRUE if the Extended SAL Procedure is being invoked in virtual mode. FALSE if the Extended SAL Procedure is being invoked in physical mode.
- ModuleGlobal
A pointer to the global context associated with this Extended SAL Procedure. Implementation dependent.
Description
This function looks up the CPU specified by Arg2 in the CPU database and returns the enable status and PAL Compatibility value. If the CPU specified by Arg2 is not present in the database, then EFI_SAL_NO_INFORMATION is returned. Otherwise, the enable status is returned in SAL_RETURN_REGS . r9 , the PAL Compatibility value is returned in SAL_RETURN_REGS . r10 , the Global ID is returned in SAL_RETURN_REGS . r11 , and EFI_SAL_SUCCESS is returned. If Arg3 is TRUE , then Arg2 is the index in the set of enabled CPUs. If Arg3 is FALSE , then Arg2 is the index in the set of all CPUs.
Status Codes Returned
EFI_SAL_SUCCESS |
The information on the specified CPU was returned |
EFI_SAL_NO_INFORMATION |
The specified CPU is not in the database |
11.4.60. ExtendedSalWhoiAmI
Summary
Returns the Global ID for the calling CPU.
Prototype
SAL_RETURN_REGS
EFIAPI
ExtendedSalWhoAmI (
IN UINT64 FunctionId,
IN UINT64 Arg2,
IN UINT64 Arg3,
IN UINT64 Arg4,
IN UINT64 Arg5,
IN UINT64 Arg6,
IN UINT64 Arg7,
IN UINT64 Arg8,
IN BOOLEAN VirtualMode,
IN VOID *ModuleGlobal OPTIONAL
);
Parameters
- FunctionId
Must be EsalWhoAmIFunctionId .
- Arg2
This parameter is interpreted as a BOOLEAN value. If TRUE , then the index in the set of enabled CPUs in the database is returned. If FALSE , then the index in the set of all CPUs in the database is returned.
- Arg3
Reserved. Must be zero.
- Arg4
Reserved. Must be zero.
- Arg5
Reserved. Must be zero.
- Arg6
Reserved. Must be zero.
- Arg7
Reserved. Must be zero.
- Arg8
Reserved. Must be zero.
- VirtualMode
TRUE if the Extended SAL Procedure is being invoked in virtual mode. FALSE if the Extended SAL Procedure is being invoked in physical mode.
- ModuleGlobal
A pointer to the global context associated with this Extended SAL Procedure. Implementation dependent.
Description
This function looks up the Global ID of the calling CPU. If the calling CPU is not present in the database, then EFI_SAL_NO_INFORMATION is returned. Otherwise, the Global ID is returned in SAL_RETURN_REGS . r9 , the PAL Compatibility value is returned in SAL_RETURN_REGS . r10 , and EFI_SAL_SUCCESS is returned. If Arg2 is TRUE , then the index of the calling CPU in the set of enabled CPUs is returned in SAL_RETURN_REGS . r11 . If Arg3 is FALSE , then the index of the calling CPU in the set of all CPUs is returned in SAL_RETURN_REGS . r11 .
Status Codes Returned
EFI_SAL_SUCCESS |
The Global ID for the calling CPU was returned. |
EFI_SAL_NO_INFORMATION |
The calling CPU is not in the database. |
11.4.61. ExtendedSalNumProcessors
Summary
Returns the number of currently enabled CPUs, the total number of CPUs, and the maximum number of CPUs that the platform supports.
Prototype
SAL_RETURN_REGS
EFIAPI
ExtendedSalNumProcessors (
IN UINT64 FunctionId,
IN UINT64 Arg2,
IN UINT64 Arg3,
IN UINT64 Arg4,
IN UINT64 Arg5,
IN UINT64 Arg6,
IN UINT64 Arg7,
IN UINT64 Arg8,
IN BOOLEAN VirtualMode,
IN VOID *ModuleGlobal OPTIONAL
);
Parameters
- FunctionId
Must be EsalNumProcessorsFunctionId .
- Arg2
Reserved. Must be zero.
- Arg3
Reserved. Must be zero.
- Arg4
Reserved. Must be zero.
- Arg5
Reserved. Must be zero.
- Arg6
Reserved. Must be zero.
- Arg7
Reserved. Must be zero.
- Arg8
Reserved. Must be zero.
- VirtualMode
TRUE if the Extended SAL Procedure is being invoked in virtual mode. FALSE if the Extended SAL Procedure is being invoked in physical mode.
- ModuleGlobal
A pointer to the global context associated with this Extended SAL Procedure. Implementation dependent.
Description
This function returns the maximum number of CPUs that the platform supports in SAL_RETURN_REGS . r9 , the total number of CPUs in SAL_RETURN_REGS . r10 , and the number of enabled CPUs in SAL_RETURN_REGS . r11 . EFI_SAL_SUCCESS is always returned.
Status Codes Returned
EFI_SAL_SUCCESS |
The information on the number of CPUs in the platform was returned |
11.4.62. ExtendedSalSetMinState
Summary
Sets the MINSTATE pointer for the CPU specified by a Global ID.
Prototype
SAL_RETURN_REGS
EFIAPI
ExtendedSalSetMinState (
IN UINT64 FunctionId,
IN UINT64 Arg2,
IN UINT64 Arg3,
IN UINT64 Arg4,
IN UINT64 Arg5,
IN UINT64 Arg6,
IN UINT64 Arg7,
IN UINT64 Arg8,
IN BOOLEAN VirtualMode,
IN VOID *ModuleGlobal OPTIONAL
);
Parameters
- FunctionId
Must be EsalSetMinStateFunctionId .
- Arg2
The 64-bit Global ID of the CPU to set the MINSTATE pointer.
- Arg3
This parameter is interpreted as a pointer to the MINSTATE area for the CPU specified by Arg2.
- Arg4
Reserved. Must be zero.
- Arg5
Reserved. Must be zero.
- Arg6
Reserved. Must be zero.
- Arg7
Reserved. Must be zero.
- Arg8
Reserved. Must be zero.
- VirtualMode
TRUE if the Extended SAL Procedure is being invoked in virtual mode. FALSE if the Extended SAL Procedure is being invoked in physical mode.
- ModuleGlobal
A pointer to the global context associated with this Extended SAL Procedure. Implementation dependent.
Description
This function sets the MINSTATE pointer for the CPU specified by Arg2 to the buffer specified by Arg3 . If the CPU specified by Arg2 is not present in the database, then EFI_SAL_NO_INFORMATION is returned. Otherwise, EFI_SAL_SUCCESS is returned.
Status Codes Returned
EFI_SAL_SUCCESS |
The MINSTATE pointer was set for the specified CPU |
EFI_SAL_NO_INFORMATION |
The specified CPU is not in the database |
11.4.63. ExtendedSalGetMinState
Summary
Retrieves the MINSTATE pointer for the CPU specified by a Global ID.
Prototype
SAL_RETURN_REGS
EFIAPI
ExtendedSalSetMinState (
IN UINT64 FunctionId,
IN UINT64 Arg2,
IN UINT64 Arg3,
IN UINT64 Arg4,
IN UINT64 Arg5,
IN UINT64 Arg6,
IN UINT64 Arg7,
IN UINT64 Arg8,
IN BOOLEAN VirtualMode,
IN VOID *ModuleGlobal OPTIONAL
);
Parameters
- FunctionId
Must be EsalSetMinStateFunctionId .
- Arg2
The 64-bit Global ID of the CPU to get the MINSTATE pointer.
- Arg3
Reserved. Must be zero.
- Arg4
Reserved. Must be zero.
- Arg5
Reserved. Must be zero.
- Arg6
Reserved. Must be zero.
- Arg7
Reserved. Must be zero.
- Arg8
Reserved. Must be zero.
- VirtualMode
TRUE if the Extended SAL Procedure is being invoked in virtual mode. FALSE if the Extended SAL Procedure is being invoked in physical mode.
- ModuleGlobal
A pointer to the global context associated with this Extended SAL Procedure. Implementation dependent.
Description
This function retrieves the MINSTATE pointer for the CPU specified by Arg2 . If the CPU specified by Arg2 is not present in the database, then EFI_SAL_NO_INFORMATION is returned. Otherwise, the MINSTATE pointer for the specified CPU is returned in SAL_RETURN_REGS . r9 , and EFI_SAL_SUCCESS is returned.
Status Codes Returned
EFI_SAL_SUCCESS |
The MINSTATE pointer for the specified CPU was retrieved |
EFI_SAL_NO_INFORMATION |
The specified CPU is not in the database |
11.4.64. ExtendedSalPhysicalIdInfo
Summary
Returns the Physical ID for the calling CPU.
Prototype
SAL_RETURN_REGS
EFIAPI
ExtendedSalPhysicalIdInfo (
IN UINT64 FunctionId,
IN UINT64 Arg2,
IN UINT64 Arg3,
IN UINT64 Arg4,
IN UINT64 Arg5,
IN UINT64 Arg6,
IN UINT64 Arg7,
IN UINT64 Arg8,
IN BOOLEAN VirtualMode,
IN VOID *ModuleGlobal OPTIONAL
);
Parameters
- FunctionId
Must be EsalPhysicalIdInfo .
- Arg2
Reserved. Must be zero.
- Arg3
Reserved. Must be zero.
- Arg4
Reserved. Must be zero.
- Arg5
Reserved. Must be zero.
- Arg6
Reserved. Must be zero.
- Arg7
Reserved. Must be zero.
- Arg8
Reserved. Must be zero.
- VirtualMode
TRUE if the Extended SAL Procedure is being invoked in virtual mode. FALSE if the Extended SAL Procedure is being invoked in physical mode.
- ModuleGlobal
A pointer to the global context associated with this Extended SAL Procedure. Implementation dependent.
Description
This function looks up the Physical ID of the calling CPU. If the calling CPU is not present in the database, then EFI_SAL_NO_INFORMATION is returned. Otherwise, the Physical ID is returned in SAL_RETURN_REGS . r9 , and EFI_SAL_SUCCESS is returned.
Status Codes Returned
EFI_SAL_SUCCESS |
The Physical ID for the calling CPU was returned. |
EFI_SAL_NO_INFORMATION |
The calling CPU is not in the database. |
11.4.65. Extended SAL MCA Services Class
Summary
The Extended SAL MCA Services Class provides services to
GUID
#define EFI_EXTENDED_SAL_MCA_SERVICES_PROTOCOL_GUID_LO \
0x42b16cc72a591128
#define EFI_EXTENDED_SAL_MCA_SERVICES_PROTOCOL_GUID_HI \
0xbb2d683b9358f08a
#define EFI_EXTENDED_SAL_MCA_SERVICES_PROTOCOL_GUID \
{0x2a591128,0x6cc7,0x42b1,\
{0x8a,0xf0,0x58,0x93,0x3b,0x68,0x2d,0xbb}}
typedef enum {
McaGetStateInfoFunctionId,
McaRegisterCpuFunctionId,
} EFI_EXTENDED_SAL_MCA_SERVICES_FUNC_ID;
Description
Name |
Description |
---|---|
ExtendedSalMcaGetStateInfo |
Obtain the buffer corresponding to the Machine Check Abort state information |
ExtendedSalMcaRegisterCpu |
Register the CPU instance for the Machine Check Abort handling |
11.4.66. ExtendedSalMcaGetStateInfo
Summary
Obtain the buffer corresponding to the Machine Check Abort state information.
Prototype
SAL_RETURN_REGS
EFIAPI
ExtendedSalMcaGetStateInfo (
IN UINT64 FunctionId,
IN UINT64 Arg2,
IN UINT64 Arg3,
IN UINT64 Arg4,
IN UINT64 Arg5,
IN UINT64 Arg6,
IN UINT64 Arg7,
IN UINT64 Arg8,
IN BOOLEAN VirtualMode,
IN VOID *ModuleGlobal OPTIONAL
);
Parameters
- FunctionId
Must be EsalMcaGetStateInfoFunctionId.
- Arg2
The 64-bit Global ID of the CPU to get the MINSTATE pointer.
- Arg3
Pointer to the state buffer for output.
- Arg4
Pointer to the required buffer size for output
- Arg5
Reserved. Must be zero.
- Arg6
Reserved. Must be zero.
- Arg7
Reserved. Must be zero.
- Arg8
Reserved. Must be zero.
- VirtualMode
TRUE if the Extended SAL Procedure is being invoked in virtual mode. FALSE if the Extended SAL Procedure is being invoked in physical mode.
- ModuleGlobal
A pointer to the global context associated with this Extended SAL Procedure. Implementation dependent.
Description
This function retrieves the MINSTATE pointer specified by Arg3 for the CpuId specified by Arg2 , and calculates required size specified by Arg4 . If the CPU specified by Arg2 was not registered in system, then EFI_SAL_NO_INFORMATION is returned. Otherwise, the CPU state buffer related information will be returned, and EFI_SAL_SUCCESS is returned.
Status Codes Returned
EFI_SAL_SUCCESS |
MINSTATE successfully got and size calculated. |
EFI_SAL_NO_INFORMATION |
The CPU was not registered in system. |
11.4.67. ExtendedSalMcaRegisterCpu
Summary
Register the CPU instance for the Machine Check Abort handling.
Prototype
SAL_RETURN_REGS
EFIAPI
ExtendedSalMcaRegisterCpu (
IN UINT64 FunctionId,
IN UINT64 Arg2,
IN UINT64 Arg3,
IN UINT64 Arg4,
IN UINT64 Arg5,
IN UINT64 Arg6,
IN UINT64 Arg7,
IN UINT64 Arg8,
IN BOOLEAN VirtualMode,
IN VOID *ModuleGlobal OPTIONAL
);
Parameters
- FunctionId
Must be EsalMcaRegisterCpuFunctionId .
- Arg2
The 64-bit Global ID of the CPU to register its MCA state buffer.
- Arg3
The pointer of the CPU’s state buffer.
- Arg4
Reserved. Must be zero
- Arg5
Reserved. Must be zero.
- Arg6
Reserved. Must be zero.
- Arg7
Reserved. Must be zero.
- Arg8
Reserved. Must be zero.
- VirtualMode
TRUE if the Extended SAL Procedure is being invoked in virtual mode. FALSE if the Extended SAL Procedure is being invoked in physical mode.
- ModuleGlobal
A pointer to the global context associated with this Extended SAL Procedure. Implementation dependent.
Description
This function registers MCA state buffer specified by Agr3 for CPU specified by Arg2 . If the CPU specified by Arg2 was not registered in system, then EFI_SAL_NO_INFORMATION is returned. Otherwise, the CPU state buffer is registered for MCA handing, and EFI_SAL_SUCCESS is returned.
Status Codes Returned
EFI_SAL_SUCCESS |
The CPU state buffer is registered for MCA handing successfully |
EFI_SAL_NO_INFORMATION |
The CPU was not registered in system |