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.

_images/V4_Sal-2.png

Fig. 11.1 SAL Calling Diagram

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.

Table 11.1 Extended SAL Service Classes - EFI Runtime Services

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

Table 11.2 Extended SAL Service Classes - SAL Procedures

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.

Table 11.3 Extended SAL Service Classes - HardwareAbstractions

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

Table 11.4 Extended SAL Service Classes - Other

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

Table 11.5 Extended SAL Base I/O Services Class

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

Table 11.6 Extended SAL Stall Services Class

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

Table 11.7 Extended SAL Real Time Clock ServicesClass

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

Table 11.8 Extended SAL Reset Services Class

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

Table 11.9 Extended SAL PCI Services Class

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

Table 11.10 Extended SAL Cache Services Class

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

Table 11.11 Extended SAL PAL Services Class

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

Table 11.12 Extended SAL Status Code Services Class

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

Table 11.13 Extended SAL Monotonic Counter ServicesClass

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

Table 11.14 Extended SAL Variable Services Class

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

Table 11.15 Extended SAL Variable Services Class

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

Table 11.16 Extended SAL MP Services Class

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

Table 11.17 Extended SAL MP Services Class

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

Table 11.18 Extended SAL MCA Services Class

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