| /** @file |
| Defines the APIs that enable PEI services to work with |
| the underlying capsule capabilities of the platform. |
| |
| Copyright (c) 2015 - 2018, Intel Corporation. All rights reserved.<BR> |
| SPDX-License-Identifier: BSD-2-Clause-Patent |
| |
| @par Revision Reference: |
| This PPI is introduced in PI Version 1.4. |
| |
| **/ |
| |
| #ifndef _PEI_CAPSULE_PPI_H_ |
| #define _PEI_CAPSULE_PPI_H_ |
| |
| /// |
| /// Global ID for the EFI_PEI_CAPSULE_PPI. |
| /// |
| #define EFI_PEI_CAPSULE_PPI_GUID \ |
| { \ |
| 0x3acf33ee, 0xd892, 0x40f4, {0xa2, 0xfc, 0x38, 0x54, 0xd2, 0xe1, 0x32, 0x3d } \ |
| } |
| |
| /// |
| /// Forward declaration for the EFI_PEI_CAPSULE_PPI. |
| /// |
| typedef struct _EFI_PEI_CAPSULE_PPI EFI_PEI_CAPSULE_PPI; |
| |
| /// |
| /// Keep name backwards compatible before PI Version 1.4 |
| /// |
| typedef struct _EFI_PEI_CAPSULE_PPI PEI_CAPSULE_PPI; |
| |
| /** |
| Upon determining that there is a capsule to operate on, this service |
| will use a series of EFI_CAPSULE_BLOCK_DESCRIPTOR entries to determine |
| the current location of the various capsule fragments and coalesce them |
| into a contiguous region of system memory. |
| |
| @param[in] PeiServices Pointer to the PEI Services Table. |
| @param[out] MemoryBase Pointer to the base of a block of memory into which the buffers will be coalesced. |
| On output, this variable will hold the base address |
| of a coalesced capsule. |
| @param[out] MemorySize Size of the memory region pointed to by MemoryBase. |
| On output, this variable will contain the size of the |
| coalesced capsule. |
| |
| @retval EFI_NOT_FOUND If: boot mode could not be determined, or the |
| boot mode is not flash-update, or the capsule descriptors were not found. |
| @retval EFI_BUFFER_TOO_SMALL The capsule could not be coalesced in the provided memory region. |
| @retval EFI_SUCCESS There was no capsule, or the capsule was processed successfully. |
| |
| **/ |
| typedef |
| EFI_STATUS |
| (EFIAPI *EFI_PEI_CAPSULE_COALESCE)( |
| IN EFI_PEI_SERVICES **PeiServices, |
| IN OUT VOID **MemoryBase, |
| IN OUT UINTN *MemSize |
| ); |
| |
| /** |
| Determine if a capsule needs to be processed. |
| The means by which the presence of a capsule is determined is platform |
| specific. For example, an implementation could be driven by the presence |
| of a Capsule EFI Variable containing a list of EFI_CAPSULE_BLOCK_DESCRIPTOR |
| entries. If present, return EFI_SUCCESS, otherwise return EFI_NOT_FOUND. |
| |
| @param[in] PeiServices Pointer to the PEI Services Table. |
| |
| @retval EFI_SUCCESS If a capsule is available. |
| @retval EFI_NOT_FOUND No capsule detected. |
| |
| **/ |
| typedef |
| EFI_STATUS |
| (EFIAPI *EFI_PEI_CAPSULE_CHECK_CAPSULE_UPDATE)( |
| IN EFI_PEI_SERVICES **PeiServices |
| ); |
| |
| /** |
| The Capsule PPI service that gets called after memory is available. The |
| capsule coalesce function, which must be called first, returns a base |
| address and size. Once the memory init PEIM has discovered memory, |
| it should call this function and pass in the base address and size |
| returned by the Coalesce() function. Then this function can create a |
| capsule HOB and return. |
| |
| @par Notes: |
| This function assumes it will not be called until the |
| actual capsule update. |
| |
| @param[in] PeiServices Pointer to the PEI Services Table. |
| @param[in] CapsuleBase Address returned by the capsule coalesce function. |
| @param[in] CapsuleSize Value returned by the capsule coalesce function. |
| |
| @retval EFI_VOLUME_CORRUPTED CapsuleBase does not appear to point to a |
| coalesced capsule. |
| @retval EFI_SUCCESS Capsule HOB was created successfully. |
| |
| **/ |
| typedef |
| EFI_STATUS |
| (EFIAPI *EFI_PEI_CAPSULE_CREATE_STATE)( |
| IN EFI_PEI_SERVICES **PeiServices, |
| IN VOID *CapsuleBase, |
| IN UINTN CapsuleSize |
| ); |
| |
| /// |
| /// This PPI provides several services in PEI to work with the underlying |
| /// capsule capabilities of the platform. These services include the ability |
| /// for PEI to coalesce a capsule from a scattered set of memory locations |
| /// into a contiguous space in memory, detect if a capsule is present for |
| /// processing, and once memory is available, create a HOB for the capsule. |
| /// |
| struct _EFI_PEI_CAPSULE_PPI { |
| EFI_PEI_CAPSULE_COALESCE Coalesce; |
| EFI_PEI_CAPSULE_CHECK_CAPSULE_UPDATE CheckCapsuleUpdate; |
| EFI_PEI_CAPSULE_CREATE_STATE CreateState; |
| }; |
| |
| /// |
| /// Keep name backwards compatible before PI Version 1.4 |
| /// |
| extern EFI_GUID gPeiCapsulePpiGuid; |
| |
| extern EFI_GUID gEfiPeiCapsulePpiGuid; |
| |
| #endif // #ifndef _PEI_CAPSULE_PPI_H_ |