4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/** @file
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Provides the services required to access a block I/O device during PEI recovery
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync boot mode.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync The Recovery Module PPI and the Device Recovery Module PPI are device neutral.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync This PPI is device specific and addresses the most common form of recovery
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync media-block I/O devices such as legacy floppy, CD-ROM, or IDE devices.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync The Recovery Block I/O PPI is used to access block devices. Because the Recovery
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Block I/O PPIs that are provided by the PEI ATAPI driver and PEI legacy floppy
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync driver are the same, here we define a set of general PPIs for both drivers to use.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncCopyright (c) 2007 - 2010, Intel Corporation. All rights reserved.<BR>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncThis program and the accompanying materials are licensed and made available under
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncthe terms and conditions of the BSD License that accompanies this distribution.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncThe full text of the license may be found at
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynchttp://opensource.org/licenses/bsd-license.php.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncTHE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncWITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @par Revision Reference:
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync This PPI is defined in UEFI Platform Initialization Specification 1.2 Volume 1:
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Pre-EFI Initalization Core Interface.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#ifndef _PEI_BLOCK_IO_H_
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define _PEI_BLOCK_IO_H_
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/// Global ID for EFI_PEI_RECOVERY_BLOCK_IO_PPI
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define EFI_PEI_RECOVERY_BLOCK_IO_PPI_GUID \
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync { \
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync 0x695d8aa1, 0x42ee, 0x4c46, { 0x80, 0x5c, 0x6e, 0xa6, 0xbc, 0xe7, 0x99, 0xe3 } \
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/// The forward declaration for EFI_PEI_RECOVERY_BLOCK_IO_PPI.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef struct _EFI_PEI_RECOVERY_BLOCK_IO_PPI EFI_PEI_RECOVERY_BLOCK_IO_PPI;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/// All blocks on the recovery device are addressed with a 64-bit Logical Block Address (LBA).
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef UINT64 EFI_PEI_LBA;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/// EFI_PEI_BLOCK_DEVICE_TYPE
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef enum {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync LegacyFloppy = 0, ///< The recovery device is a floppy.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IdeCDROM = 1, ///< The recovery device is an IDE CD-ROM
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IdeLS120 = 2, ///< The recovery device is an IDE LS-120
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UsbMassStorage= 3, ///< The recovery device is a USB Mass Storage device
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync MaxDeviceType
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync} EFI_PEI_BLOCK_DEVICE_TYPE;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/// Specification inconsistency here:
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/// PEI_BLOCK_IO_MEDIA has been changed to EFI_PEI_BLOCK_IO_MEDIA.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/// Inconsistency exists in UEFI Platform Initialization Specification 1.2
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/// Volume 1: Pre-EFI Initalization Core Interface, where all referrences to
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/// this structure name are with the "EFI_" prefix, except for the definition
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/// which is without "EFI_". So the name of PEI_BLOCK_IO_MEDIA is taken as the
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/// exception, and EFI_PEI_BLOCK_IO_MEDIA is used to comply with most of
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/// the specification.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef struct {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// The type of media device being referenced by DeviceIndex.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_PEI_BLOCK_DEVICE_TYPE DeviceType;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// A flag that indicates if media is present. This flag is always set for
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// nonremovable media devices.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync BOOLEAN MediaPresent;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// The last logical block that the device supports.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINTN LastBlock;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// The size of a logical block in bytes.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINTN BlockSize;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync} EFI_PEI_BLOCK_IO_MEDIA;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Gets the count of block I/O devices that one specific block driver detects.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync This function is used for getting the count of block I/O devices that one
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync specific block driver detects. To the PEI ATAPI driver, it returns the number
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync of all the detected ATAPI devices it detects during the enumeration process.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync To the PEI legacy floppy driver, it returns the number of all the legacy
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync devices it finds during its enumeration process. If no device is detected,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync then the function will return zero.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] PeiServices General-purpose services that are available
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync to every PEIM.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] This Indicates the EFI_PEI_RECOVERY_BLOCK_IO_PPI
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync instance.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[out] NumberBlockDevices The number of block I/O devices discovered.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_SUCCESS The operation performed successfully.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync(EFIAPI *EFI_PEI_GET_NUMBER_BLOCK_DEVICES)(
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_PEI_SERVICES **PeiServices,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_PEI_RECOVERY_BLOCK_IO_PPI *This,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync OUT UINTN *NumberBlockDevices
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Gets a block device's media information.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync This function will provide the caller with the specified block device's media
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync information. If the media changes, calling this function will update the media
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync information accordingly.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] PeiServices General-purpose services that are available to every
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync PEIM
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] This Indicates the EFI_PEI_RECOVERY_BLOCK_IO_PPI instance.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] DeviceIndex Specifies the block device to which the function wants
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync to talk. Because the driver that implements Block I/O
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync PPIs will manage multiple block devices, the PPIs that
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync want to talk to a single device must specify the
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync device index that was assigned during the enumeration
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync process. This index is a number from one to
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync NumberBlockDevices.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[out] MediaInfo The media information of the specified block media.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync The caller is responsible for the ownership of this
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync data structure.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @par Note:
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync The MediaInfo structure describes an enumeration of possible block device
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync types. This enumeration exists because no device paths are actually passed
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync across interfaces that describe the type or class of hardware that is publishing
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync the block I/O interface. This enumeration will allow for policy decisions
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync in the Recovery PEIM, such as "Try to recover from legacy floppy first,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync LS-120 second, CD-ROM third." If there are multiple partitions abstracted
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync by a given device type, they should be reported in ascending order; this
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync order also applies to nested partitions, such as legacy MBR, where the
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync outermost partitions would have precedence in the reporting order. The
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync same logic applies to systems such as IDE that have precedence relationships
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync like "Master/Slave" or "Primary/Secondary". The master device should be
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync reported first, the slave second.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_SUCCESS Media information about the specified block device
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync was obtained successfully.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_DEVICE_ERROR Cannot get the media information due to a hardware
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync error.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync(EFIAPI *EFI_PEI_GET_DEVICE_MEDIA_INFORMATION)(
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_PEI_SERVICES **PeiServices,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_PEI_RECOVERY_BLOCK_IO_PPI *This,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINTN DeviceIndex,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync OUT EFI_PEI_BLOCK_IO_MEDIA *MediaInfo
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Reads the requested number of blocks from the specified block device.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync The function reads the requested number of blocks from the device. All the
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync blocks are read, or an error is returned. If there is no media in the device,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync the function returns EFI_NO_MEDIA.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] PeiServices General-purpose services that are available to
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync every PEIM.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] This Indicates the EFI_PEI_RECOVERY_BLOCK_IO_PPI instance.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] DeviceIndex Specifies the block device to which the function wants
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync to talk. Because the driver that implements Block I/O
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync PPIs will manage multiple block devices, PPIs that
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync want to talk to a single device must specify the device
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync index that was assigned during the enumeration process.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync This index is a number from one to NumberBlockDevices.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] StartLBA The starting logical block address (LBA) to read from
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync on the device
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] BufferSize The size of the Buffer in bytes. This number must be
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync a multiple of the intrinsic block size of the device.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[out] Buffer A pointer to the destination buffer for the data.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync The caller is responsible for the ownership of the
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync buffer.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_SUCCESS The data was read correctly from the device.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_DEVICE_ERROR The device reported an error while attempting
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync to perform the read operation.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_INVALID_PARAMETER The read request contains LBAs that are not
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync valid, or the buffer is not properly aligned.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_NO_MEDIA There is no media in the device.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_BAD_BUFFER_SIZE The BufferSize parameter is not a multiple of
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync the intrinsic block size of the device.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync(EFIAPI *EFI_PEI_READ_BLOCKS)(
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_PEI_SERVICES **PeiServices,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_PEI_RECOVERY_BLOCK_IO_PPI *This,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINTN DeviceIndex,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_PEI_LBA StartLBA,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINTN BufferSize,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync OUT VOID *Buffer
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/// EFI_PEI_RECOVERY_BLOCK_IO_PPI provides the services that are required
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/// to access a block I/O device during PEI recovery boot mode.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncstruct _EFI_PEI_RECOVERY_BLOCK_IO_PPI {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// Gets the number of block I/O devices that the specific block driver manages.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_PEI_GET_NUMBER_BLOCK_DEVICES GetNumberOfBlockDevices;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// Gets the specified media information.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_PEI_GET_DEVICE_MEDIA_INFORMATION GetBlockDeviceMediaInfo;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// Reads the requested number of blocks from the specified block device.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_PEI_READ_BLOCKS ReadBlocks;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync};
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncextern EFI_GUID gEfiPeiVirtualBlockIoPpiGuid;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#endif