mirror of
https://github.com/CloverHackyColor/CloverBootloader.git
synced 2024-11-30 12:43:41 +01:00
171 lines
8.8 KiB
C
171 lines
8.8 KiB
C
|
/** @file
|
||
|
S3 Save State Protocol as defined in PI 1.6(Errata A) 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 - 2019, Intel Corporation. All rights reserved.<BR>
|
||
|
SPDX-License-Identifier: BSD-2-Clause-Patent
|
||
|
|
||
|
@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 UINTN 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 UINTN 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__
|