mirror of
				https://git.proxmox.com/git/mirror_edk2
				synced 2025-11-04 12:54:17 +00:00 
			
		
		
		
	git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@9616 6f19259b-4bc3-4df7-8a09-765794883524
		
			
				
	
	
		
			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, 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
 |