mirror of https://github.com/acidanthera/audk.git
137 lines
5.0 KiB
C
137 lines
5.0 KiB
C
|
/** @file
|
||
|
Defines the APIs that enable PEI services to work with
|
||
|
the underlying capsule capabilities of the platform.
|
||
|
|
||
|
Copyright (c) 2015, Intel Corporation. All rights reserved.<BR>
|
||
|
This program and the accompanying materials are licensed and made available under
|
||
|
the terms and conditions of the BSD License that accompanies this distribution.
|
||
|
The full text of the license may be found at
|
||
|
http://opensource.org/licenses/bsd-license.php.
|
||
|
|
||
|
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
|
||
|
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
||
|
|
||
|
@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 modecould 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_
|