Clean up comment according to PI1.2c spec. signed-off-by: jyao1 reviewed-by: rsun3 git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@12690 6f19259b-4bc3-4df7-8a09-765794883524
		
			
				
	
	
		
			177 lines
		
	
	
		
			9.5 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			177 lines
		
	
	
		
			9.5 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/** @file
 | 
						|
  S3 Save State Protocol as defined in PI1.2 Specification VOLUME 5 Standard.
 | 
						|
 | 
						|
  This protocol is used by DXE PI module to store or record various IO operations 
 | 
						|
  to be replayed during an S3 resume.
 | 
						|
  This protocol is not required for all platforms.
 | 
						|
  
 | 
						|
  Copyright (c) 2009 - 2011, 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.             
 | 
						|
 | 
						|
  @par Revision Reference:
 | 
						|
  This PPI is defined in UEFI Platform Initialization Specification 1.2 Volume 5: 
 | 
						|
  Standards
 | 
						|
 | 
						|
**/
 | 
						|
 | 
						|
#ifndef __S3_SAVE_STATE_H__
 | 
						|
#define __S3_SAVE_STATE_H__
 | 
						|
 | 
						|
#define EFI_S3_SAVE_STATE_PROTOCOL_GUID \
 | 
						|
    { 0xe857caf6, 0xc046, 0x45dc, { 0xbe, 0x3f, 0xee, 0x7, 0x65, 0xfb, 0xa8, 0x87 }}
 | 
						|
 | 
						|
 | 
						|
typedef VOID *EFI_S3_BOOT_SCRIPT_POSITION;
 | 
						|
 | 
						|
typedef struct _EFI_S3_SAVE_STATE_PROTOCOL  EFI_S3_SAVE_STATE_PROTOCOL;
 | 
						|
 | 
						|
/**
 | 
						|
  Record operations that need to be replayed during an S3 resume.
 | 
						|
  
 | 
						|
  This function is used to store an OpCode to be replayed as part of the S3 resume boot path. It is
 | 
						|
  assumed this protocol has platform specific mechanism to store the OpCode set and replay them
 | 
						|
  during the S3 resume.
 | 
						|
  
 | 
						|
  @param[in]    This    A pointer to the EFI_S3_SAVE_STATE_PROTOCOL instance.
 | 
						|
  @param[in]    OpCode  The operation code (opcode) number.
 | 
						|
  @param[in]    ...     Argument list that is specific to each opcode. See the following subsections for the
 | 
						|
                        definition of each opcode.
 | 
						|
                        
 | 
						|
  @retval EFI_SUCCESS           The operation succeeded. A record was added into the specified
 | 
						|
                                script table.                    
 | 
						|
  @retval EFI_INVALID_PARAMETER The parameter is illegal or the given boot script is not supported.
 | 
						|
  @retval EFI_OUT_OF_RESOURCES  There is insufficient memory to store the boot script.                       
 | 
						|
**/
 | 
						|
typedef
 | 
						|
EFI_STATUS
 | 
						|
(EFIAPI *EFI_S3_SAVE_STATE_WRITE)(
 | 
						|
   IN CONST EFI_S3_SAVE_STATE_PROTOCOL  *This,
 | 
						|
   IN       UINT16                      OpCode,
 | 
						|
   ...
 | 
						|
);
 | 
						|
 | 
						|
/**
 | 
						|
  Record operations that need to be replayed during an S3 resume.
 | 
						|
  
 | 
						|
  This function is used to store an OpCode to be replayed as part of the S3 resume boot path. It is
 | 
						|
  assumed this protocol has platform specific mechanism to store the OpCode set and replay them
 | 
						|
  during the S3 resume.
 | 
						|
  The opcode is inserted before or after the specified position in the boot script table. If Position is
 | 
						|
  NULL then that position is after the last opcode in the table (BeforeOrAfter is TRUE) or before
 | 
						|
  the first opcode in the table (BeforeOrAfter is FALSE). The position which is pointed to by
 | 
						|
  Position upon return can be used for subsequent insertions.
 | 
						|
  
 | 
						|
  This function has a variable parameter list. The exact parameter list depends on the OpCode that is
 | 
						|
  passed into the function. If an unsupported OpCode or illegal parameter list is passed in, this
 | 
						|
  function returns EFI_INVALID_PARAMETER.
 | 
						|
  If there are not enough resources available for storing more scripts, this function returns
 | 
						|
  EFI_OUT_OF_RESOURCES.
 | 
						|
  OpCode values of 0x80 - 0xFE are reserved for implementation specific functions.
 | 
						|
  
 | 
						|
  @param[in]        This            A pointer to the EFI_S3_SAVE_STATE_PROTOCOL instance.
 | 
						|
  @param[in]        BeforeOrAfter   Specifies whether the opcode is stored before (TRUE) or after (FALSE) the position
 | 
						|
                                    in the boot script table specified by Position. If Position is NULL or points to
 | 
						|
                                    NULL then the new opcode is inserted at the beginning of the table (if TRUE) or end
 | 
						|
                                    of the table (if FALSE).
 | 
						|
  @param[in, out]   Position        On entry, specifies the position in the boot script table where the opcode will be
 | 
						|
                                    inserted, either before or after, depending on BeforeOrAfter. On exit, specifies
 | 
						|
                                    the position of the inserted opcode in the boot script table.
 | 
						|
  @param[in]        OpCode          The operation code (opcode) number. See "Related Definitions" in Write() for the
 | 
						|
                                    defined opcode types.
 | 
						|
  @param[in]        ...             Argument list that is specific to each opcode. See the following subsections for the
 | 
						|
                                    definition of each opcode. 
 | 
						|
                                    
 | 
						|
  @retval EFI_SUCCESS               The operation succeeded. An opcode was added into the script.
 | 
						|
  @retval EFI_INVALID_PARAMETER     The Opcode is an invalid opcode value.
 | 
						|
  @retval EFI_INVALID_PARAMETER     The Position is not a valid position in the boot script table.
 | 
						|
  @retval EFI_OUT_OF_RESOURCES      There is insufficient memory to store the boot script table.                                                                       
 | 
						|
**/
 | 
						|
typedef
 | 
						|
EFI_STATUS
 | 
						|
(EFIAPI *EFI_S3_SAVE_STATE_INSERT)(
 | 
						|
   IN CONST EFI_S3_SAVE_STATE_PROTOCOL  *This,
 | 
						|
   IN       BOOLEAN                     BeforeOrAfter,
 | 
						|
   IN OUT   EFI_S3_BOOT_SCRIPT_POSITION *Position       OPTIONAL,
 | 
						|
   IN       UINT16                      OpCode,
 | 
						|
   ...
 | 
						|
);
 | 
						|
 | 
						|
/**
 | 
						|
  Find a label within the boot script table and, if not present, optionally create it.
 | 
						|
  
 | 
						|
  If the label Label is already exists in the boot script table, then no new label is created, the
 | 
						|
  position of the Label is returned in *Position and EFI_SUCCESS is returned.
 | 
						|
  If the label Label does not already exist and CreateIfNotFound is TRUE, then it will be
 | 
						|
  created before or after the specified position and EFI_SUCCESS is returned.
 | 
						|
  If the label Label does not already exist and CreateIfNotFound is FALSE, then
 | 
						|
  EFI_NOT_FOUND is returned.
 | 
						|
  
 | 
						|
  @param[in]      This                A pointer to the EFI_S3_SAVE_STATE_PROTOCOL instance.
 | 
						|
  @param[in]      BeforeOrAfter       Specifies whether the label is stored before (TRUE) or after (FALSE) the position in
 | 
						|
                                      the boot script table specified by Position. If Position is NULL or points to
 | 
						|
                                      NULL then the new label is inserted at the beginning of the table (if TRUE) or end of
 | 
						|
                                      the table (if FALSE).
 | 
						|
  @param[in]      CreateIfNotFound    Specifies whether the label will be created if the label does not exists (TRUE) or not (FALSE).
 | 
						|
  @param[in, out] Position            On entry, specifies the position in the boot script table where the label will be inserted,
 | 
						|
                                      either before or after, depending on BeforeOrAfter. On exit, specifies the position
 | 
						|
                                      of the inserted label in the boot script table.
 | 
						|
  @param[in]      Label               Points to the label which will be inserted in the boot script table.
 | 
						|
  
 | 
						|
  @retval    EFI_SUCCESS              The label already exists or was inserted.
 | 
						|
  @retval    EFI_NOT_FOUND            The label did not already exist and CreateifNotFound was FALSE.
 | 
						|
  @retval    EFI_INVALID_PARAMETER    The Label is NULL or points to an empty string.
 | 
						|
  @retval    EFI_INVALID_PARAMETER    The Position is not a valid position in the boot script table.
 | 
						|
  @retval    EFI_OUT_OF_RESOURCES     There is insufficient memory to store the boot script.
 | 
						|
**/
 | 
						|
typedef
 | 
						|
EFI_STATUS
 | 
						|
(EFIAPI *EFI_S3_SAVE_STATE_LABEL)(
 | 
						|
   IN CONST  EFI_S3_SAVE_STATE_PROTOCOL      *This,
 | 
						|
   IN        BOOLEAN                         BeforeOrAfter,
 | 
						|
   IN        BOOLEAN                         CreateIfNotFound,
 | 
						|
   IN OUT    EFI_S3_BOOT_SCRIPT_POSITION     *Position OPTIONAL,
 | 
						|
   IN CONST  CHAR8                           *Label
 | 
						|
);
 | 
						|
 | 
						|
/**
 | 
						|
  Compare two positions in the boot script table and return their relative position.
 | 
						|
  
 | 
						|
  This function compares two positions in the boot script table and returns their relative positions. If
 | 
						|
  Position1 is before Position2, then -1 is returned. If Position1 is equal to Position2,
 | 
						|
  then 0 is returned. If Position1 is after Position2, then 1 is returned.
 | 
						|
  
 | 
						|
  @param[in]    This                A pointer to the EFI_S3_SAVE_STATE_PROTOCOL instance.
 | 
						|
  @param[in]    Position1           The positions in the boot script table to compare.
 | 
						|
  @param[in]    Position2           The positions in the boot script table to compare.
 | 
						|
  @param[out]   RelativePosition    On return, points to the result of the comparison.
 | 
						|
  
 | 
						|
  @retval   EFI_SUCCESS             The operation succeeded.
 | 
						|
  @retval   EFI_INVALID_PARAMETER   The Position1 or Position2 is not a valid position in the boot script table.
 | 
						|
  @retval   EFI_INVALID_PARAMETER   The RelativePosition is NULL.
 | 
						|
**/
 | 
						|
typedef
 | 
						|
EFI_STATUS
 | 
						|
(EFIAPI *EFI_S3_SAVE_STATE_COMPARE)(
 | 
						|
   IN CONST EFI_S3_SAVE_STATE_PROTOCOL          *This,
 | 
						|
   IN       EFI_S3_BOOT_SCRIPT_POSITION         Position1,
 | 
						|
   IN       EFI_S3_BOOT_SCRIPT_POSITION         Position2,
 | 
						|
   OUT      UINTN                               *RelativePosition
 | 
						|
);
 | 
						|
 | 
						|
struct _EFI_S3_SAVE_STATE_PROTOCOL {
 | 
						|
  EFI_S3_SAVE_STATE_WRITE   Write;
 | 
						|
  EFI_S3_SAVE_STATE_INSERT  Insert;
 | 
						|
  EFI_S3_SAVE_STATE_LABEL   Label;
 | 
						|
  EFI_S3_SAVE_STATE_COMPARE Compare;
 | 
						|
};
 | 
						|
 | 
						|
extern EFI_GUID gEfiS3SaveStateProtocolGuid;
 | 
						|
 | 
						|
#endif // __S3_SAVE_STATE_H__
 |