summaryrefslogtreecommitdiff
path: root/MdeModulePkg/Include
diff options
context:
space:
mode:
authorjljusten <jljusten@6f19259b-4bc3-4df7-8a09-765794883524>2011-07-12 20:35:46 +0000
committerjljusten <jljusten@6f19259b-4bc3-4df7-8a09-765794883524>2011-07-12 20:35:46 +0000
commitda58b0db33a223751779e5311c947becbfdeb639 (patch)
treec85d2bdc3f9a8738b5b2c6b2c8dcef85c06de262 /MdeModulePkg/Include
parent619b3e0e8d70668eca4dd5f07fbba7308c654646 (diff)
downloadedk2-da58b0db33a223751779e5311c947becbfdeb639.zip
edk2-da58b0db33a223751779e5311c947becbfdeb639.tar.gz
edk2-da58b0db33a223751779e5311c947becbfdeb639.tar.bz2
MdeModulePkg: Add Capsule PEIM
Signed-off-by: jljusten Reviewed-by: mdkinney Reviewed-by: lgao4 git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@12011 6f19259b-4bc3-4df7-8a09-765794883524
Diffstat (limited to 'MdeModulePkg/Include')
-rw-r--r--MdeModulePkg/Include/Ppi/Capsule.h125
1 files changed, 125 insertions, 0 deletions
diff --git a/MdeModulePkg/Include/Ppi/Capsule.h b/MdeModulePkg/Include/Ppi/Capsule.h
new file mode 100644
index 0000000..7324df2
--- /dev/null
+++ b/MdeModulePkg/Include/Ppi/Capsule.h
@@ -0,0 +1,125 @@
+/** @file
+ Defines the APIs that enable PEI services to work with
+ the underlying capsule capabilities of the platform.
+
+Copyright (c) 2006 - 2010, 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 which 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.
+
+**/
+
+#ifndef _PEI_CAPSULE_PPI_H_
+#define _PEI_CAPSULE_PPI_H_
+
+///
+/// Global ID for the PEI_CAPSULE_PPI.
+///
+#define PEI_CAPSULE_PPI_GUID \
+ { \
+ 0x3acf33ee, 0xd892, 0x40f4, {0xa2, 0xfc, 0x38, 0x54, 0xd2, 0xe1, 0x32, 0x3d } \
+ }
+
+///
+/// Forward declaration for the PEI_CAPSULE_PPI.
+///
+typedef struct _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 *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 *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 *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 _PEI_CAPSULE_PPI {
+ PEI_CAPSULE_COALESCE Coalesce;
+ PEI_CAPSULE_CHECK_CAPSULE_UPDATE CheckCapsuleUpdate;
+ PEI_CAPSULE_CREATE_STATE CreateState;
+};
+
+extern EFI_GUID gPeiCapsulePpiGuid;
+
+#endif // #ifndef _PEI_CAPSULE_PPI_H_