MdeModulePkg/AhciPei: Add PEI BlockIO support
REF:https://bugzilla.tianocore.org/show_bug.cgi?id=1483 This commit will add the PEI BlockIO (2) PPIs support for AHCI mode ATA devices. More specifically, the driver will consume the ATA AHCI host controller PPI for ATA controllers working under AHCI code within the system. And then produces the below additional PPIs for each controller: EFI PEI Recovery Block IO PPI EFI PEI Recovery Block IO2 PPI Cc: Eric Dong <eric.dong@intel.com> Cc: Jian J Wang <jian.j.wang@intel.com> Signed-off-by: Hao Wu <hao.a.wu@intel.com> Reviewed-by: Ray Ni <ray.ni@intel.com>
This commit is contained in:
@@ -19,6 +19,7 @@
|
||||
#include <Ppi/IoMmu.h>
|
||||
#include <Ppi/EndOfPeiPhase.h>
|
||||
#include <Ppi/AtaPassThru.h>
|
||||
#include <Ppi/BlockIo.h>
|
||||
#include <Ppi/BlockIo2.h>
|
||||
#include <Ppi/StorageSecurityCommand.h>
|
||||
|
||||
@@ -35,6 +36,7 @@
|
||||
typedef struct _PEI_AHCI_CONTROLLER_PRIVATE_DATA PEI_AHCI_CONTROLLER_PRIVATE_DATA;
|
||||
|
||||
#include "AhciPeiPassThru.h"
|
||||
#include "AhciPeiBlockIo.h"
|
||||
#include "AhciPeiStorageSecurity.h"
|
||||
|
||||
//
|
||||
@@ -312,6 +314,8 @@ struct _PEI_AHCI_CONTROLLER_PRIVATE_DATA {
|
||||
|
||||
EFI_ATA_PASS_THRU_MODE AtaPassThruMode;
|
||||
EDKII_PEI_ATA_PASS_THRU_PPI AtaPassThruPpi;
|
||||
EFI_PEI_RECOVERY_BLOCK_IO_PPI BlkIoPpi;
|
||||
EFI_PEI_RECOVERY_BLOCK_IO2_PPI BlkIo2Ppi;
|
||||
EDKII_PEI_STORAGE_SECURITY_CMD_PPI StorageSecurityPpi;
|
||||
EFI_PEI_PPI_DESCRIPTOR AtaPassThruPpiList;
|
||||
EFI_PEI_PPI_DESCRIPTOR BlkIoPpiList;
|
||||
@@ -553,6 +557,32 @@ AhciModeInitialization (
|
||||
IN OUT PEI_AHCI_CONTROLLER_PRIVATE_DATA *Private
|
||||
);
|
||||
|
||||
/**
|
||||
Transfer data from ATA device.
|
||||
|
||||
This function performs one ATA pass through transaction to transfer data from/to
|
||||
ATA device. It chooses the appropriate ATA command and protocol to invoke PassThru
|
||||
interface of ATA pass through.
|
||||
|
||||
@param[in] DeviceData A pointer to PEI_AHCI_ATA_DEVICE_DATA structure.
|
||||
@param[in,out] Buffer The pointer to the current transaction buffer.
|
||||
@param[in] StartLba The starting logical block address to be accessed.
|
||||
@param[in] TransferLength The block number or sector count of the transfer.
|
||||
@param[in] IsWrite Indicates whether it is a write operation.
|
||||
|
||||
@retval EFI_SUCCESS The data transfer is complete successfully.
|
||||
@return others Some error occurs when transferring data.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
TransferAtaDevice (
|
||||
IN PEI_AHCI_ATA_DEVICE_DATA *DeviceData,
|
||||
IN OUT VOID *Buffer,
|
||||
IN EFI_LBA StartLba,
|
||||
IN UINT32 TransferLength,
|
||||
IN BOOLEAN IsWrite
|
||||
);
|
||||
|
||||
/**
|
||||
Trust transfer data from/to ATA device.
|
||||
|
||||
|
Reference in New Issue
Block a user