mirror of https://github.com/acidanthera/audk.git
215 lines
10 KiB
C
215 lines
10 KiB
C
/** @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. 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
|