4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/** @file
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync This PPI produces functions to interpret and execute the PI boot script table.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync This PPI is published by a PEIM and provides for the restoration of the platform's
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync configuration when resuming from the ACPI S3 power state. The ability to execute
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync the boot script may depend on the availability of other PPIs. For example, if
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync the boot script includes an SMBus command, this PEIM looks for the relevant PPI
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync that is able to execute that command.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Copyright (c) 2010, Intel Corporation. All rights reserved.<BR>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync This program and the accompanying materials
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync are licensed and made available under the terms and conditions of the BSD License
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync which accompanies this distribution. The full text of the license may be found at
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync http://opensource.org/licenses/bsd-license.php
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @par Revision Reference:
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync This PPI is defined in UEFI Platform Initialization Specification 1.2 Volume 5:
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Standards
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#ifndef __PEI_S3_RESUME_PPI_H__
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define __PEI_S3_RESUME_PPI_H__
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/// Global ID for EFI_PEI_S3_RESUME2_PPI
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define EFI_PEI_S3_RESUME2_PPI_GUID \
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync { \
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync 0x6D582DBC, 0xDB85, 0x4514, {0x8F, 0xCC, 0x5A, 0xDF, 0x62, 0x27, 0xB1, 0x47 } \
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/// Forward declaration for EFI_PEI_S3_RESUME_PPI
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef struct _EFI_PEI_S3_RESUME2_PPI EFI_PEI_S3_RESUME2_PPI;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Restores the platform to its preboot configuration for an S3 resume and
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync jumps to the OS waking vector.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync This function will restore the platform to its pre-boot configuration that was
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync pre-stored in the boot script table and transfer control to OS waking vector.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Upon invocation, this function is responsible for locating the following
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync information before jumping to OS waking vector:
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync - ACPI tables
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync - boot script table
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync - any other information that it needs
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync The S3RestoreConfig() function then executes the pre-stored boot script table
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync and transitions the platform to the pre-boot state. The boot script is recorded
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync during regular boot using the EFI_S3_SAVE_STATE_PROTOCOL.Write() and
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_S3_SMM_SAVE_STATE_PROTOCOL.Write() functions. Finally, this function
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync transfers control to the OS waking vector. If the OS supports only a real-mode
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync waking vector, this function will switch from flat mode to real mode before
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync jumping to the waking vector. If all platform pre-boot configurations are
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync successfully restored and all other necessary information is ready, this
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync function will never return and instead will directly jump to the OS waking
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync vector. If this function returns, it indicates that the attempt to resume
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync from the ACPI S3 sleep state failed.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] This Pointer to this instance of the PEI_S3_RESUME_PPI
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_ABORTED Execution of the S3 resume boot script table failed.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_NOT_FOUND Some necessary information that is used for the S3
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync resume boot path could not be located.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync(EFIAPI *EFI_PEI_S3_RESUME_PPI_RESTORE_CONFIG2)(
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_PEI_S3_RESUME2_PPI *This
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_PEI_S3_RESUME2_PPI accomplishes the firmware S3 resume boot
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync path and transfers control to OS.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncstruct _EFI_PEI_S3_RESUME2_PPI {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// Restores the platform to its preboot configuration for an S3 resume and
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// jumps to the OS waking vector.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_PEI_S3_RESUME_PPI_RESTORE_CONFIG2 S3RestoreConfig2;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync};
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncextern EFI_GUID gEfiPeiS3Resume2PpiGuid;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#endif