| /** @file | |
| Definition of Extended SAL Boot Service Protocol | |
| 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. | |
| Copyright (c) 2009 - 2010, Intel Corporation. All rights reserved.<BR> | |
| This program and the accompanying materials | |
| are licensed and made available under the terms and conditions of the BSD License | |
| which accompanies this distribution. The full text of the license may be found at | |
| http://opensource.org/licenses/bsd-license.php | |
| THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, | |
| WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. | |
| **/ | |
| #ifndef _EXTENDED_SAL_BOOT_SERVICE_PROTOCOL_H_ | |
| #define _EXTENDED_SAL_BOOT_SERVICE_PROTOCOL_H_ | |
| #include <IndustryStandard/Sal.h> | |
| #define EXTENDED_SAL_BOOT_SERVICE_PROTOCOL_GUID \ | |
| { 0xde0ee9a4, 0x3c7a, 0x44f2, {0xb7, 0x8b, 0xe3, 0xcc, 0xd6, 0x9c, 0x3a, 0xf7 } } | |
| typedef struct _EXTENDED_SAL_BOOT_SERVICE_PROTOCOL EXTENDED_SAL_BOOT_SERVICE_PROTOCOL; | |
| /** | |
| Adds platform specific information to the to the header of the SAL System Table. | |
| @param This A pointer to the EXTENDED_SAL_BOOT_SERVICE_PROTOCOL instance. | |
| @param SalAVersion Version of recovery SAL PEIM(s) in BCD format. Higher byte contains | |
| the major revision and the lower byte contains the minor revision. | |
| @param SalBVersion Version of DXE SAL Driver in BCD format. Higher byte contains | |
| the major revision and the lower byte contains the minor revision. | |
| @param 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 | |
| @param 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. | |
| @retval EFI_SUCCESS The SAL System Table header was updated successfully. | |
| @retval EFI_INVALID_PARAMETER OemId is NULL. | |
| @retval EFI_INVALID_PARAMETER ProductId is NULL. | |
| @retval EFI_INVALID_PARAMETER The length of OemId is greater than 32 characters. | |
| @retval EFI_INVALID_PARAMETER The length of ProductId is greater than 32 characters. | |
| **/ | |
| 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 | |
| ); | |
| /** | |
| Adds an entry to the SAL System Table. | |
| This function adds the SAL System Table Entry specified by TableEntry and EntrySize | |
| to the SAL System Table. | |
| @param This A pointer to the EXTENDED_SAL_BOOT_SERVICE_PROTOCOL instance. | |
| @param 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. | |
| @param EntrySize The size, in bytes, of TableEntry. | |
| @retval EFI_SUCCESSThe SAL System Table was updated successfully. | |
| @retval EFI_INVALID_PARAMETER TableEntry is NULL. | |
| @retval EFI_INVALID_PARAMETER TableEntry specifies an invalid entry type. | |
| @retval EFI_INVALID_PARAMETER EntrySize is not valid for this type of entry. | |
| **/ | |
| typedef | |
| EFI_STATUS | |
| (EFIAPI *EXTENDED_SAL_ADD_SST_ENTRY)( | |
| IN EXTENDED_SAL_BOOT_SERVICE_PROTOCOL *This, | |
| IN UINT8 *TableEntry, | |
| IN UINTN EntrySize | |
| ); | |
| /** | |
| Internal ESAL procedures. | |
| This is prototype of internal Extended SAL procedures, which is registerd by | |
| EXTENDED_SAL_REGISTER_INTERNAL_PROC service. | |
| @param FunctionId The Function ID associated with this Extended SAL Procedure. | |
| @param Arg2 Second argument to the Extended SAL procedure. | |
| @param Arg3 Third argument to the Extended SAL procedure. | |
| @param Arg4 Fourth argument to the Extended SAL procedure. | |
| @param Arg5 Fifth argument to the Extended SAL procedure. | |
| @param Arg6 Sixth argument to the Extended SAL procedure. | |
| @param Arg7 Seventh argument to the Extended SAL procedure. | |
| @param Arg8 Eighth argument to the Extended SAL procedure. | |
| @param 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. | |
| @param ModuleGlobal A pointer to the global context associated with this Extended SAL Procedure. | |
| @return The result returned from the specified Extended SAL Procedure | |
| **/ | |
| 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 | |
| ); | |
| /** | |
| Registers an Extended SAL Procedure. | |
| The Extended SAL Procedure specified by InternalSalProc and named by ClassGuidLo, | |
| ClassGuidHi, and FunctionId is added to the set of available Extended SAL Procedures. | |
| @param This A pointer to the EXTENDED_SAL_BOOT_SERVICE_PROTOCOL instance. | |
| @param 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. | |
| @param 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. | |
| @param 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. | |
| @param InternalSalProc A pointer to the Extended SAL Procedure being added. | |
| @param 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. | |
| @retval EFI_SUCCESS The Extended SAL Procedure was added. | |
| @retval EFI_OUT_OF_RESOURCES There are not enough resources available to add the Extended SAL Procedure. | |
| **/ | |
| 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 | |
| ); | |
| /** | |
| Calls a previously registered Extended SAL Procedure. | |
| 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. | |
| @param ClassGuidLo The lower 64-bits of the class GUID for the Extended SAL Procedure | |
| that is being called. | |
| @param ClassGuidHi The upper 64-bits of the class GUID for the Extended SAL Procedure | |
| that is being called. | |
| @param FunctionId Function ID for the Extended SAL Procedure being called. | |
| @param Arg2 Second argument to the Extended SAL procedure. | |
| @param Arg3 Third argument to the Extended SAL procedure. | |
| @param Arg4 Fourth argument to the Extended SAL procedure. | |
| @param Arg5 Fifth argument to the Extended SAL procedure. | |
| @param Arg6 Sixth argument to the Extended SAL procedure. | |
| @param Arg7 Seventh argument to the Extended SAL procedure. | |
| @param Arg8 Eighth argument to the Extended SAL procedure. | |
| @retval EFI_SAL_NOT_IMPLEMENTED The Extended SAL Procedure specified by ClassGuidLo, | |
| ClassGuidHi, and FunctionId has not been registered. | |
| @retval EFI_SAL_VIRTUAL_ADDRESS_ERROR This function was called in virtual mode before virtual mappings | |
| for the specified Extended SAL Procedure are available. | |
| @retval Other The result returned from the specified Extended SAL Procedure | |
| **/ | |
| 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 | |
| ); | |
| /// | |
| /// 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. | |
| /// | |
| 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; | |
| }; | |
| extern EFI_GUID gEfiExtendedSalBootServiceProtocolGuid; | |
| #endif |