4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/** @file
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Defines the APIs that enable PEI services to work with
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync the underlying capsule capabilities of the platform.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncCopyright (c) 2006 - 2010, Intel Corporation. All rights reserved.<BR>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncThis program and the accompanying materials
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncare licensed and made available under the terms and conditions
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncof the BSD License which accompanies this distribution. The
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncfull text of the license may be found at
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynchttp://opensource.org/licenses/bsd-license.php
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncTHE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncWITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#ifndef _PEI_CAPSULE_PPI_H_
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define _PEI_CAPSULE_PPI_H_
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/// Global ID for the PEI_CAPSULE_PPI.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define PEI_CAPSULE_PPI_GUID \
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync { \
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync 0x3acf33ee, 0xd892, 0x40f4, {0xa2, 0xfc, 0x38, 0x54, 0xd2, 0xe1, 0x32, 0x3d } \
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/// Forward declaration for the PEI_CAPSULE_PPI.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef struct _PEI_CAPSULE_PPI PEI_CAPSULE_PPI;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Upon determining that there is a capsule to operate on, this service
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync will use a series of EFI_CAPSULE_BLOCK_DESCRIPTOR entries to determine
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync the current location of the various capsule fragments and coalesce them
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync into a contiguous region of system memory.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] PeiServices Pointer to the PEI Services Table.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[out] MemoryBase Pointer to the base of a block of memory into which the buffers will be coalesced.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync On output, this variable will hold the base address
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync of a coalesced capsule.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[out] MemorySize Size of the memory region pointed to by MemoryBase.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync On output, this variable will contain the size of the
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync coalesced capsule.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_NOT_FOUND If: boot modecould not be determined, or the
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync boot mode is not flash-update, or the capsule descriptors were not found.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_BUFFER_TOO_SMALL The capsule could not be coalesced in the provided memory region.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_SUCCESS There was no capsule, or the capsule was processed successfully.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync(EFIAPI *PEI_CAPSULE_COALESCE)(
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_PEI_SERVICES **PeiServices,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN OUT VOID **MemoryBase,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN OUT UINTN *MemSize
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Determine if a capsule needs to be processed.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync The means by which the presence of a capsule is determined is platform
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync specific. For example, an implementation could be driven by the presence
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync of a Capsule EFI Variable containing a list of EFI_CAPSULE_BLOCK_DESCRIPTOR
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync entries. If present, return EFI_SUCCESS, otherwise return EFI_NOT_FOUND.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] PeiServices Pointer to the PEI Services Table.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_SUCCESS If a capsule is available.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_NOT_FOUND No capsule detected.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync(EFIAPI *PEI_CAPSULE_CHECK_CAPSULE_UPDATE)(
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_PEI_SERVICES **PeiServices
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync The Capsule PPI service that gets called after memory is available. The
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync capsule coalesce function, which must be called first, returns a base
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync address and size. Once the memory init PEIM has discovered memory,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync it should call this function and pass in the base address and size
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync returned by the Coalesce() function. Then this function can create a
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync capsule HOB and return.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @par Notes:
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync This function assumes it will not be called until the
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync actual capsule update.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] PeiServices Pointer to the PEI Services Table.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] CapsuleBase Address returned by the capsule coalesce function.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] CapsuleSize Value returned by the capsule coalesce function.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_VOLUME_CORRUPTED CapsuleBase does not appear to point to a
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync coalesced capsule.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_SUCCESS Capsule HOB was created successfully.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync(EFIAPI *PEI_CAPSULE_CREATE_STATE)(
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_PEI_SERVICES **PeiServices,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN VOID *CapsuleBase,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINTN CapsuleSize
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/// This PPI provides several services in PEI to work with the underlying
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/// capsule capabilities of the platform. These services include the ability
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/// for PEI to coalesce a capsule from a scattered set of memory locations
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/// into a contiguous space in memory, detect if a capsule is present for
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/// processing, and once memory is available, create a HOB for the capsule.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncstruct _PEI_CAPSULE_PPI {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync PEI_CAPSULE_COALESCE Coalesce;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync PEI_CAPSULE_CHECK_CAPSULE_UPDATE CheckCapsuleUpdate;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync PEI_CAPSULE_CREATE_STATE CreateState;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync};
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncextern EFI_GUID gPeiCapsulePpiGuid;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#endif // #ifndef _PEI_CAPSULE_PPI_H_