MdePkg: Add RecoveryBlockIo2Ppi definition to follow PI1.4 spec
authorFeng Tian <feng.tian@intel.com>
Wed, 20 May 2015 06:20:00 +0000 (06:20 +0000)
committererictian <erictian@Edk2>
Wed, 20 May 2015 06:20:00 +0000 (06:20 +0000)
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Feng Tian <feng.tian@intel.com>
Reviewed-by: Star Zeng <star.zeng@intel.com>
git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@17477 6f19259b-4bc3-4df7-8a09-765794883524

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

diff --git a/MdePkg/Include/Ppi/BlockIo2.h b/MdePkg/Include/Ppi/BlockIo2.h
new file mode 100644 (file)
index 0000000..0ccc3a7
--- /dev/null
@@ -0,0 +1,223 @@
+/** @file\r
+  Provides the services required to access a block I/O 2 device during PEI recovery\r
+  boot mode.\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 defined in UEFI Platform Initialization Specification 1.4 Volume 1:\r
+  Pre-EFI Initalization Core Interface.\r
+\r
+**/\r
+\r
+#ifndef _PEI_BLOCK_IO2_H_\r
+#define _PEI_BLOCK_IO2_H_\r
+\r
+#include <Ppi/BlockIo.h>\r
+#include <Protocol/DevicePath.h>\r
+\r
+///\r
+/// Global ID for EFI_PEI_RECOVERY_BLOCK_IO2_PPI\r
+///\r
+#define EFI_PEI_RECOVERY_BLOCK_IO2_PPI_GUID \\r
+  { \\r
+    0x26cc0fad, 0xbeb3, 0x478a, { 0x91, 0xb2, 0xc, 0x18, 0x8f, 0x72, 0x61, 0x98 } \\r
+  }\r
+\r
+///\r
+/// The forward declaration for EFI_PEI_RECOVERY_BLOCK_IO_PPI.\r
+///\r
+typedef struct _EFI_PEI_RECOVERY_BLOCK_IO2_PPI  EFI_PEI_RECOVERY_BLOCK_IO2_PPI;\r
+\r
+#define EFI_PEI_RECOVERY_BLOCK_IO2_PPI_REVISION 0x00010000\r
+\r
+typedef struct {\r
+  ///\r
+  /// A type of interface that the device being referenced by DeviceIndex is\r
+  /// attached to. This field re-uses Messaging Device Path Node sub-type values\r
+  /// as defined by Section 9.3.5 Messaging Device Path of UEFI Specification.\r
+  /// When more than one sub-type is associated with the interface, sub-type with\r
+  /// the smallest number must be used.\r
+  ///\r
+  UINT8                      InterfaceType;\r
+  ///\r
+  /// A flag that indicates if media is removable.\r
+  ///\r
+  BOOLEAN                    RemovableMedia;\r
+  ///\r
+  /// A flag that indicates if media is present. This flag is always set for\r
+  /// non-removable media devices.\r
+  ///\r
+  BOOLEAN                    MediaPresent;\r
+  ///\r
+  /// A flag that indicates if media is read-only.\r
+  ///\r
+  BOOLEAN                    ReadOnly;\r
+  ///\r
+  /// The size of a logical block in bytes.\r
+  ///\r
+  UINT32                     BlockSize;\r
+  ///\r
+  /// The last logical block that the device supports.\r
+  ///\r
+  EFI_PEI_LBA                LastBlock;\r
+} EFI_PEI_BLOCK_IO2_MEDIA;\r
+\r
+/**\r
+  Gets the count of block I/O devices that one specific block driver detects.\r
+\r
+  This function is used for getting the count of block I/O devices that one\r
+  specific block driver detects.  To the PEI ATAPI driver, it returns the number\r
+  of all the detected ATAPI devices it detects during the enumeration process.\r
+  To the PEI legacy floppy driver, it returns the number of all the legacy\r
+  devices it finds during its enumeration process. If no device is detected,\r
+  then the function will return zero.\r
+\r
+  @param[in]  PeiServices          General-purpose services that are available\r
+                                   to every PEIM.\r
+  @param[in]  This                 Indicates the EFI_PEI_RECOVERY_BLOCK_IO2_PPI\r
+                                   instance.\r
+  @param[out] NumberBlockDevices   The number of block I/O devices discovered.\r
+\r
+  @retval     EFI_SUCCESS          The operation performed successfully.\r
+\r
+**/\r
+typedef\r
+EFI_STATUS\r
+(EFIAPI *EFI_PEI_GET_NUMBER_BLOCK_DEVICES2)(\r
+  IN  EFI_PEI_SERVICES               **PeiServices,\r
+  IN  EFI_PEI_RECOVERY_BLOCK_IO2_PPI *This,\r
+  OUT UINTN                          *NumberBlockDevices\r
+  );\r
+\r
+/**\r
+  Gets a block device's media information.\r
+\r
+  This function will provide the caller with the specified block device's media\r
+  information. If the media changes, calling this function will update the media\r
+  information accordingly.\r
+\r
+  @param[in]  PeiServices   General-purpose services that are available to every\r
+                            PEIM\r
+  @param[in]  This          Indicates the EFI_PEI_RECOVERY_BLOCK_IO2_PPI instance.\r
+  @param[in]  DeviceIndex   Specifies the block device to which the function wants\r
+                            to talk. Because the driver that implements Block I/O\r
+                            PPIs will manage multiple block devices, the PPIs that\r
+                            want to talk to a single device must specify the\r
+                            device index that was assigned during the enumeration\r
+                            process. This index is a number from one to\r
+                            NumberBlockDevices.\r
+  @param[out] MediaInfo     The media information of the specified block media.\r
+                            The caller is responsible for the ownership of this\r
+                            data structure.\r
+\r
+  @par Note:\r
+      The MediaInfo structure describes an enumeration of possible block device\r
+      types.  This enumeration exists because no device paths are actually passed\r
+      across interfaces that describe the type or class of hardware that is publishing\r
+      the block I/O interface. This enumeration will allow for policy decisions\r
+      in the Recovery PEIM, such as "Try to recover from legacy floppy first,\r
+      LS-120 second, CD-ROM third." If there are multiple partitions abstracted\r
+      by a given device type, they should be reported in ascending order; this\r
+      order also applies to nested partitions, such as legacy MBR, where the\r
+      outermost partitions would have precedence in the reporting order. The\r
+      same logic applies to systems such as IDE that have precedence relationships\r
+      like "Master/Slave" or "Primary/Secondary". The master device should be\r
+      reported first, the slave second.\r
+\r
+  @retval EFI_SUCCESS        Media information about the specified block device\r
+                             was obtained successfully.\r
+  @retval EFI_DEVICE_ERROR   Cannot get the media information due to a hardware\r
+                             error.\r
+\r
+**/\r
+typedef\r
+EFI_STATUS\r
+(EFIAPI *EFI_PEI_GET_DEVICE_MEDIA_INFORMATION2)(\r
+  IN  EFI_PEI_SERVICES               **PeiServices,\r
+  IN  EFI_PEI_RECOVERY_BLOCK_IO2_PPI *This,\r
+  IN  UINTN                          DeviceIndex,\r
+  OUT EFI_PEI_BLOCK_IO2_MEDIA        *MediaInfo\r
+  );\r
+\r
+/**\r
+  Reads the requested number of blocks from the specified block device.\r
+\r
+  The function reads the requested number of blocks from the device. All the\r
+  blocks are read, or an error is returned. If there is no media in the device,\r
+  the function returns EFI_NO_MEDIA.\r
+\r
+  @param[in]  PeiServices   General-purpose services that are available to\r
+                            every PEIM.\r
+  @param[in]  This          Indicates the EFI_PEI_RECOVERY_BLOCK_IO2_PPI instance.\r
+  @param[in]  DeviceIndex   Specifies the block device to which the function wants\r
+                            to talk. Because the driver that implements Block I/O\r
+                            PPIs will manage multiple block devices, PPIs that\r
+                            want to talk to a single device must specify the device\r
+                            index that was assigned during the enumeration process.\r
+                            This index is a number from one to NumberBlockDevices.\r
+  @param[in]  StartLBA      The starting logical block address (LBA) to read from\r
+                            on the device\r
+  @param[in]  BufferSize    The size of the Buffer in bytes. This number must be\r
+                            a multiple of the intrinsic block size of the device.\r
+  @param[out] Buffer        A pointer to the destination buffer for the data.\r
+                            The caller is responsible for the ownership of the\r
+                            buffer.\r
+\r
+  @retval EFI_SUCCESS             The data was read correctly from the device.\r
+  @retval EFI_DEVICE_ERROR        The device reported an error while attempting\r
+                                  to perform the read operation.\r
+  @retval EFI_INVALID_PARAMETER   The read request contains LBAs that are not\r
+                                  valid, or the buffer is not properly aligned.\r
+  @retval EFI_NO_MEDIA            There is no media in the device.\r
+  @retval EFI_BAD_BUFFER_SIZE     The BufferSize parameter is not a multiple of\r
+                                  the intrinsic block size of the device.\r
+\r
+**/\r
+typedef\r
+EFI_STATUS\r
+(EFIAPI *EFI_PEI_READ_BLOCKS2)(\r
+  IN  EFI_PEI_SERVICES               **PeiServices,\r
+  IN  EFI_PEI_RECOVERY_BLOCK_IO2_PPI *This,\r
+  IN  UINTN                          DeviceIndex,\r
+  IN  EFI_PEI_LBA                    StartLBA,\r
+  IN  UINTN                          BufferSize,\r
+  OUT VOID                           *Buffer\r
+  );\r
+\r
+///\r
+///  EFI_PEI_RECOVERY_BLOCK_IO_PPI provides the services that are required\r
+///  to access a block I/O device during PEI recovery boot mode.\r
+///\r
+struct _EFI_PEI_RECOVERY_BLOCK_IO2_PPI {\r
+  ///\r
+  /// The revision to which the interface adheres.\r
+  /// All future revisions must be backwards compatible.\r
+  ///\r
+  UINT64                                 Revision;\r
+  ///\r
+  /// Gets the number of block I/O devices that the specific block driver manages.\r
+  ///\r
+  EFI_PEI_GET_NUMBER_BLOCK_DEVICES2      GetNumberOfBlockDevices;\r
+\r
+  ///\r
+  /// Gets the specified media information.\r
+  ///\r
+  EFI_PEI_GET_DEVICE_MEDIA_INFORMATION2  GetBlockDeviceMediaInfo;\r
+\r
+  ///\r
+  /// Reads the requested number of blocks from the specified block device.\r
+  ///\r
+  EFI_PEI_READ_BLOCKS2                   ReadBlocks;\r
+};\r
+\r
+extern EFI_GUID gEfiPeiVirtualBlockIo2PpiGuid;\r
+\r
+#endif\r
index 521620bbd753e56e89083bc6788e6a9733dfbabf..9d818cbcf6ce2b8a577bad9f0646c76cee25fcf7 100644 (file)
   gPeiCapsulePpiGuid                = { 0x3acf33ee, 0xd892, 0x40f4, { 0xa2, 0xfc, 0x38, 0x54, 0xd2, 0xe1, 0x32, 0x3d }}\r
 \r
   ## Include/Ppi/Reset2.h\r
-  gEfiPeiReset2PpiGuid = { 0x6cc45765, 0xcce4, 0x42fd, {0xbc, 0x56, 0x1, 0x1a, 0xaa, 0xc6, 0xc9, 0xa8 } }\r
+  gEfiPeiReset2PpiGuid              = { 0x6cc45765, 0xcce4, 0x42fd, {0xbc, 0x56, 0x1, 0x1a, 0xaa, 0xc6, 0xc9, 0xa8 } }\r
+\r
+  ## Include/Ppi/BlockIo2.h\r
+  gEfiPeiVirtualBlockIo2PpiGuid     = { 0x26cc0fad, 0xbeb3, 0x478a, { 0x91, 0xb2, 0xc, 0x18, 0x8f, 0x72, 0x61, 0x98 }}\r
 \r
 [Protocols]\r
   ## Include/Protocol/Pcd.h\r