| /** @file | |
| Internal header file for S3 Boot Script Saver state driver. | |
| Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR> | |
| SPDX-License-Identifier: BSD-2-Clause-Patent | |
| **/ | |
| #ifndef _INTERNAL_S3_SAVE_STATE_H_ | |
| #define _INTERNAL_S3_SAVE_STATE_H_ | |
| #include <PiDxe.h> | |
| #include <Protocol/S3SaveState.h> | |
| #include <Library/BaseLib.h> | |
| #include <Library/DebugLib.h> | |
| #include <Library/UefiDriverEntryPoint.h> | |
| #include <Library/UefiBootServicesTableLib.h> | |
| #include <Library/UefiRuntimeServicesTableLib.h> | |
| #include <Library/S3BootScriptLib.h> | |
| #include <Library/SmbusLib.h> | |
| #include <Library/PcdLib.h> | |
| #include <IndustryStandard/SmBus.h> | |
| #include <Guid/EventGroup.h> | |
| /** | |
| Callback function executed when the EndOfDxe event group is signaled. | |
| @param[in] Event Event whose notification function is being invoked. | |
| @param[in] Context The pointer to the notification function's context, which | |
| is implementation-dependent. | |
| **/ | |
| VOID | |
| EFIAPI | |
| AcpiS3ContextSaveOnEndOfDxe ( | |
| IN EFI_EVENT Event, | |
| IN VOID *Context | |
| ); | |
| /** | |
| Adds a record into S3 boot script table. | |
| This function is used to store a boot script record into a given boot | |
| script table. If the table specified by TableName is nonexistent in the | |
| system, a new table will automatically be created and then the script record | |
| will be added into the new table. This function is responsible for allocating | |
| necessary memory for the script. | |
| 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. | |
| @param This A pointer to the EFI_S3_SAVE_STATE_PROTOCOL instance. | |
| @param OpCode The operation code (opcode) number. | |
| @param ... Argument list that is specific to 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. | |
| If the opcode is unknow or not supported because of the PCD | |
| Feature Flags. | |
| @retval EFI_OUT_OF_RESOURCES There is insufficient memory to store the boot script. | |
| **/ | |
| EFI_STATUS | |
| EFIAPI | |
| BootScriptWrite ( | |
| IN CONST EFI_S3_SAVE_STATE_PROTOCOL *This, | |
| IN UINTN OpCode, | |
| ... | |
| ); | |
| /** | |
| Insert a record into a specified Framework boot script table. | |
| 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 FALSE) or before | |
| the first opcode in the table (BeforeOrAfter is TRUE). The position which is pointed to by | |
| Position upon return can be used for subsequent insertions. | |
| @param This A pointer to the EFI_S3_SAVE_STATE_PROTOCOL instance. | |
| @param 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 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 OpCode The operation code (opcode) number. | |
| @param ... Argument list that is specific to each opcode. | |
| @retval EFI_SUCCESS The operation succeeded. A record was added into the | |
| specified script table. | |
| @retval EFI_INVALID_PARAMETER The Opcode is an invalid opcode value or 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. | |
| **/ | |
| EFI_STATUS | |
| EFIAPI | |
| BootScriptInsert ( | |
| 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 This A pointer to the EFI_S3_SAVE_STATE_PROTOCOL instance. | |
| @param 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 CreateIfNotFound Specifies whether the label will be created if the label does not exists (TRUE) or not | |
| (FALSE). | |
| @param 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 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_INVALID_PARAMETER The Opcode is an invalid opcode value or the Position is not a valid position in the boot script table.. | |
| **/ | |
| EFI_STATUS | |
| EFIAPI | |
| BootScriptLabel ( | |
| 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 This A pointer to the EFI_S3_SAVE_STATE_PROTOCOL instance. | |
| @param Position1 The positions in the boot script table to compare | |
| @param Position2 The positions in the boot script table to compare | |
| @param 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. | |
| **/ | |
| EFI_STATUS | |
| EFIAPI | |
| BootScriptCompare ( | |
| 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 | |
| ); | |
| #endif //_INTERNAL_S3_SAVE_STATE_H_ |