]> git.proxmox.com Git - mirror_edk2.git/commitdiff
MdePkg: Add PI1.4 CapsulePpi definition
authorLiming Gao <liming.gao@intel.com>
Fri, 8 May 2015 07:42:50 +0000 (07:42 +0000)
committerlgao4 <lgao4@Edk2>
Fri, 8 May 2015 07:42:50 +0000 (07:42 +0000)
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Liming Gao <liming.gao@intel.com>
Reviewed-by: Star Zeng <star.zeng@intel.com>
git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@17372 6f19259b-4bc3-4df7-8a09-765794883524

MdePkg/Include/Ppi/Capsule.h [new file with mode: 0644]
MdePkg/MdePkg.dec

diff --git a/MdePkg/Include/Ppi/Capsule.h b/MdePkg/Include/Ppi/Capsule.h
new file mode 100644 (file)
index 0000000..c8fd72f
--- /dev/null
@@ -0,0 +1,136 @@
+/** @file\r
+  Defines the APIs that enable PEI services to work with \r
+  the underlying capsule capabilities of the platform.\r
+\r
+Copyright (c) 2015, Intel Corporation. All rights reserved.<BR>\r
+This program and the accompanying materials are licensed and made available under \r
+the terms and conditions of the BSD License that accompanies this distribution.  \r
+The full text of the license may be found at\r
+http://opensource.org/licenses/bsd-license.php.      \r
+\r
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+\r
+  @par Revision Reference:\r
+  This PPI is introduced in PI Version 1.4.\r
+\r
+**/\r
+\r
+#ifndef _PEI_CAPSULE_PPI_H_\r
+#define _PEI_CAPSULE_PPI_H_\r
+\r
+///\r
+/// Global ID for the EFI_PEI_CAPSULE_PPI.\r
+///\r
+#define EFI_PEI_CAPSULE_PPI_GUID \\r
+  { \\r
+    0x3acf33ee, 0xd892, 0x40f4, {0xa2, 0xfc, 0x38, 0x54, 0xd2, 0xe1, 0x32, 0x3d } \\r
+  }\r
+\r
+///\r
+/// Forward declaration for the EFI_PEI_CAPSULE_PPI.\r
+///\r
+typedef struct _EFI_PEI_CAPSULE_PPI EFI_PEI_CAPSULE_PPI;\r
+\r
+///\r
+/// Keep name backwards compatible before PI Version 1.4\r
+///\r
+typedef struct _EFI_PEI_CAPSULE_PPI PEI_CAPSULE_PPI;\r
+\r
+/**\r
+  Upon determining that there is a capsule to operate on, this service \r
+  will use a series of EFI_CAPSULE_BLOCK_DESCRIPTOR entries to determine \r
+  the current location of the various capsule fragments and coalesce them \r
+  into a contiguous region of system memory.   \r
+\r
+  @param[in]  PeiServices   Pointer to the PEI Services Table.\r
+  @param[out] MemoryBase    Pointer to the base of a block of memory into which the buffers will be coalesced.\r
+                            On output, this variable will hold the base address \r
+                            of a coalesced capsule.\r
+  @param[out] MemorySize    Size of the memory region pointed to by MemoryBase.\r
+                            On output, this variable will contain the size of the\r
+                            coalesced capsule.\r
+\r
+  @retval EFI_NOT_FOUND          If: boot modecould not be determined, or the \r
+                                 boot mode is not flash-update, or the capsule descriptors were not found. \r
+  @retval EFI_BUFFER_TOO_SMALL   The capsule could not be coalesced in the provided memory region. \r
+  @retval EFI_SUCCESS            There was no capsule, or the capsule was processed successfully. \r
+\r
+**/\r
+typedef\r
+EFI_STATUS\r
+(EFIAPI *EFI_PEI_CAPSULE_COALESCE)(\r
+  IN EFI_PEI_SERVICES  **PeiServices,\r
+  IN OUT VOID          **MemoryBase,\r
+  IN OUT UINTN         *MemSize\r
+  );\r
+\r
+/**\r
+  Determine if a capsule needs to be processed. \r
+  The means by which the presence of a capsule is determined is platform\r
+  specific. For example, an implementation could be driven by the presence \r
+  of a Capsule EFI Variable containing a list of EFI_CAPSULE_BLOCK_DESCRIPTOR \r
+  entries. If present, return EFI_SUCCESS, otherwise return EFI_NOT_FOUND.\r
+    \r
+  @param[in] PeiServices   Pointer to the PEI Services Table.\r
+\r
+  @retval EFI_SUCCESS     If a capsule is available.\r
+  @retval EFI_NOT_FOUND   No capsule detected.\r
+\r
+**/\r
+typedef\r
+EFI_STATUS\r
+(EFIAPI *EFI_PEI_CAPSULE_CHECK_CAPSULE_UPDATE)(\r
+  IN EFI_PEI_SERVICES  **PeiServices\r
+  );\r
+\r
+/**\r
+  The Capsule PPI service that gets called after memory is available. The\r
+  capsule coalesce function, which must be called first, returns a base\r
+  address and size. Once the memory init PEIM has discovered memory, \r
+  it should call this function and pass in the base address and size \r
+  returned by the Coalesce() function. Then this function can create a \r
+  capsule HOB and return.\r
+\r
+  @par Notes:\r
+    This function assumes it will not be called until the\r
+    actual capsule update.\r
+\r
+  @param[in] PeiServices   Pointer to the PEI Services Table.\r
+  @param[in] CapsuleBase   Address returned by the capsule coalesce function. \r
+  @param[in] CapsuleSize   Value returned by the capsule coalesce function.\r
+\r
+  @retval EFI_VOLUME_CORRUPTED   CapsuleBase does not appear to point to a\r
+                                 coalesced capsule.\r
+  @retval EFI_SUCCESS            Capsule HOB was created successfully.\r
+\r
+**/\r
+typedef\r
+EFI_STATUS\r
+(EFIAPI *EFI_PEI_CAPSULE_CREATE_STATE)(\r
+  IN EFI_PEI_SERVICES  **PeiServices,\r
+  IN VOID              *CapsuleBase,\r
+  IN UINTN             CapsuleSize  \r
+  );\r
+\r
+///\r
+/// This PPI provides several services in PEI to work with the underlying\r
+/// capsule capabilities of the platform.  These services include the ability \r
+/// for PEI to coalesce a capsule from a scattered set of memory locations \r
+/// into a contiguous space in memory, detect if a capsule is present for\r
+/// processing, and once memory is available, create a HOB for the capsule.\r
+///\r
+struct _EFI_PEI_CAPSULE_PPI {\r
+  EFI_PEI_CAPSULE_COALESCE              Coalesce;\r
+  EFI_PEI_CAPSULE_CHECK_CAPSULE_UPDATE  CheckCapsuleUpdate;\r
+  EFI_PEI_CAPSULE_CREATE_STATE          CreateState;\r
+};\r
+\r
+///\r
+/// Keep name backwards compatible before PI Version 1.4\r
+///\r
+extern EFI_GUID gPeiCapsulePpiGuid;\r
+\r
+extern EFI_GUID gEfiPeiCapsulePpiGuid;\r
+\r
+#endif // #ifndef _PEI_CAPSULE_PPI_H_\r
index f5d4591d7d450e62f448c589b55c63659dd7be05..dfeb075be3b5033e9e1f7877959a1c7a3c0c5129 100644 (file)
@@ -2,7 +2,7 @@
 # This Package provides all definitions, library classes and libraries instances.\r
 #\r
 # It also provides the definitions(including PPIs/PROTOCOLs/GUIDs) of\r
-# EFI1.10/UEFI2.4/PI1.3 and some Industry Standards.\r
+# EFI1.10/UEFI2.4/PI1.4 and some Industry Standards.\r
 #\r
 # Copyright (c) 2007 - 2015, Intel Corporation. All rights reserved.<BR>\r
 # Portions copyright (c) 2008 - 2009, Apple Inc. All rights reserved.<BR>\r
   ## Include/Ppi/MpServices.h\r
   gEfiPeiMpServicesPpiGuid           = { 0xee16160a, 0xe8be, 0x47a6, { 0x82, 0xa, 0xc6, 0x90, 0xd, 0xb0, 0x25, 0xa } }\r
 \r
-\r
+  ## Include/Ppi/Capsule.h\r
+  gEfiPeiCapsulePpiGuid             = { 0x3acf33ee, 0xd892, 0x40f4, { 0xa2, 0xfc, 0x38, 0x54, 0xd2, 0xe1, 0x32, 0x3d }}\r
+  ## Keep name backwards compatible before PI Version 1.4\r
+  gPeiCapsulePpiGuid                = { 0x3acf33ee, 0xd892, 0x40f4, { 0xa2, 0xfc, 0x38, 0x54, 0xd2, 0xe1, 0x32, 0x3d }}\r
 \r
 [Protocols]\r
   ## Include/Protocol/Pcd.h\r