diff options
Diffstat (limited to 'src/vendorcode/intel/edk2/UDK2017/MdePkg/Include/Protocol/ExtendedSalBootService.h')
-rw-r--r-- | src/vendorcode/intel/edk2/UDK2017/MdePkg/Include/Protocol/ExtendedSalBootService.h | 214 |
1 files changed, 214 insertions, 0 deletions
diff --git a/src/vendorcode/intel/edk2/UDK2017/MdePkg/Include/Protocol/ExtendedSalBootService.h b/src/vendorcode/intel/edk2/UDK2017/MdePkg/Include/Protocol/ExtendedSalBootService.h new file mode 100644 index 0000000000..167201d85a --- /dev/null +++ b/src/vendorcode/intel/edk2/UDK2017/MdePkg/Include/Protocol/ExtendedSalBootService.h @@ -0,0 +1,214 @@ +/** @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 |