]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdePkg/Include/Ppi/DeviceRecoveryModule.h
Add the following PI 1.2 PPIs to the MdePkg
[mirror_edk2.git] / MdePkg / Include / Ppi / DeviceRecoveryModule.h
diff --git a/MdePkg/Include/Ppi/DeviceRecoveryModule.h b/MdePkg/Include/Ppi/DeviceRecoveryModule.h
new file mode 100644 (file)
index 0000000..708f47a
--- /dev/null
@@ -0,0 +1,144 @@
+/** @file\r
+  This file declares the Device Recovery Module PPI.\r
+\r
+  The interface of this PPI does the following:\r
+    - Reports the number of recovery DXE capsules that exist on the associated device(s)\r
+    - Finds the requested firmware binary capsule\r
+    - Loads that capsule into memory\r
+\r
+  A device can be either a group of devices, such as a block device, or an individual device.\r
+  The module determines the internal search order, with capsule number 1 as the highest load\r
+  priority and number N as the lowest priority.\r
+\r
+  Copyright (c) 2007 - 2009, Intel Corporation\r
+  All rights reserved. This program and the accompanying materials\r
+  are licensed and made available under the terms and conditions of the BSD License\r
+  which accompanies this distribution.  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 defined in UEFI Platform Initialization Specification 1.2 Volume 1: \r
+  Pre-EFI Initalization Core Interface\r
+\r
+**/\r
+\r
+#ifndef _PEI_DEVICE_RECOVERY_MODULE_PPI_H_\r
+#define _PEI_DEVICE_RECOVERY_MODULE_PPI_H_\r
+\r
+#define EFI_PEI_DEVICE_RECOVERY_MODULE_PPI_GUID \\r
+  { \\r
+    0x0DE2CE25, 0x446A, 0x45a7, {0xBF, 0xC9, 0x37, 0xDA, 0x26, 0x34, 0x4B, 0x37 } \\r
+  }\r
+\r
+typedef struct _EFI_PEI_DEVICE_RECOVERY_MODULE_PPI EFI_PEI_DEVICE_RECOVERY_MODULE_PPI;\r
+\r
+/**\r
+  Returns the number of DXE capsules residing on the device.\r
+\r
+  This function searches for DXE capsules from the associated device and returns\r
+  the number and maximum size in bytes of the capsules discovered. Entry 1 is \r
+  assumed to be the highest load priority and entry N is assumed to be the lowest \r
+  priority.\r
+\r
+  @param[in]  PeiServices              General-purpose services that are available \r
+                                       to every PEIM\r
+  @param[in]  This                     Indicates the EFI_PEI_DEVICE_RECOVERY_MODULE_PPI\r
+                                       instance.\r
+  @param[out] NumberRecoveryCapsules   Pointer to a caller-allocated UINTN. On \r
+                                       output, *NumberRecoveryCapsules contains \r
+                                       the number of recovery capsule images \r
+                                       available for retrieval from this PEIM \r
+                                       instance.\r
+\r
+  @retval EFI_SUCCESS        One or more capsules were discovered.\r
+  @retval EFI_DEVICE_ERROR   A device error occurred.\r
+  @retval EFI_NOT_FOUND      A recovery DXE capsule cannot be found.\r
+\r
+**/\r
+typedef\r
+EFI_STATUS\r
+(EFIAPI *EFI_PEI_DEVICE_GET_NUMBER_RECOVERY_CAPSULE)(\r
+  IN  EFI_PEI_SERVICES                    **PeiServices,\r
+  IN  EFI_PEI_DEVICE_RECOVERY_MODULE_PPI  *This,\r
+  OUT UINTN                               *NumberRecoveryCapsules\r
+  );\r
+\r
+/**\r
+  Returns the size and type of the requested recovery capsule.\r
+\r
+  This function gets the size and type of the capsule specified by CapsuleInstance.\r
+\r
+  @param[in]  PeiServices       General-purpose services that are available to every PEIM\r
+  @param[in]  This              Indicates the EFI_PEI_DEVICE_RECOVERY_MODULE_PPI \r
+                                instance.\r
+  @param[in]  CapsuleInstance   Specifies for which capsule instance to retrieve \r
+                                the information.  This parameter must be between \r
+                                one and the value returned by GetNumberRecoveryCapsules() \r
+                                in NumberRecoveryCapsules.\r
+  @param[out] Size              A pointer to a caller-allocated UINTN in which \r
+                                the size of the requested recovery module is \r
+                                returned.\r
+  @param[out] CapsuleType       A pointer to a caller-allocated EFI_GUID in which \r
+                                the type of the requested recovery capsule is \r
+                                returned.  The semantic meaning of the value \r
+                                returned is defined by the implementation.\r
+\r
+  @retval EFI_SUCCESS        One or more capsules were discovered.\r
+  @retval EFI_DEVICE_ERROR   A device error occurred.\r
+  @retval EFI_NOT_FOUND      A recovery DXE capsule cannot be found.\r
+\r
+**/\r
+typedef\r
+EFI_STATUS\r
+(EFIAPI *EFI_PEI_DEVICE_GET_RECOVERY_CAPSULE_INFO)(\r
+  IN  EFI_PEI_SERVICES                    **PeiServices,\r
+  IN  EFI_PEI_DEVICE_RECOVERY_MODULE_PPI  *This,\r
+  IN  UINTN                               CapsuleInstance,\r
+  OUT UINTN                               *Size,\r
+  OUT EFI_GUID                            *CapsuleType\r
+  );\r
+\r
+/**\r
+  Loads a DXE capsule from some media into memory.\r
+\r
+  This function, by whatever mechanism, retrieves a DXE capsule from some device\r
+  and loads it into memory. Note that the published interface is device neutral.\r
+\r
+  @param[in,out] PeiServices       General-purpose services that are available \r
+                                   to every PEIM\r
+  @param[in]     This              Indicates the EFI_PEI_DEVICE_RECOVERY_MODULE_PPI\r
+                                   instance.\r
+  @param[in]     CapsuleInstance   Specifies which capsule instance to retrieve.\r
+  @param[out]    Buffer            Specifies a caller-allocated buffer in which \r
+                                   the requested recovery capsule will be returned.\r
+\r
+  @retval EFI_SUCCESS        The capsule was loaded correctly.\r
+  @retval EFI_DEVICE_ERROR   A device error occurred.\r
+  @retval EFI_NOT_FOUND      A requested recovery DXE capsule cannot be found.\r
+\r
+**/\r
+typedef\r
+EFI_STATUS\r
+(EFIAPI *EFI_PEI_DEVICE_LOAD_RECOVERY_CAPSULE)(\r
+  IN OUT EFI_PEI_SERVICES                    **PeiServices,\r
+  IN     EFI_PEI_DEVICE_RECOVERY_MODULE_PPI  *This,\r
+  IN     UINTN                               CapsuleInstance,\r
+  OUT    VOID                                *Buffer\r
+  );\r
+\r
+///\r
+/// Presents a standard interface to EFI_PEI_DEVICE_RECOVERY_MODULE_PPI,\r
+/// regardless of the underlying device(s).\r
+///\r
+struct _EFI_PEI_DEVICE_RECOVERY_MODULE_PPI {\r
+  EFI_PEI_DEVICE_GET_NUMBER_RECOVERY_CAPSULE  GetNumberRecoveryCapsules;    ///< Returns the number of DXE capsules residing on the device.\r
+  EFI_PEI_DEVICE_GET_RECOVERY_CAPSULE_INFO    GetRecoveryCapsuleInfo;       ///< Returns the size and type of the requested recovery capsule.\r
+  EFI_PEI_DEVICE_LOAD_RECOVERY_CAPSULE        LoadRecoveryCapsule;          ///< Loads a DXE capsule from some media into memory.\r
+};\r
+\r
+extern EFI_GUID gEfiPeiDeviceRecoveryModulePpiGuid;\r
+\r
+#endif  /* _PEI_DEVICE_RECOVERY_MODULE_PPI_H_ */\r