MdeModulePkg: Apply uncrustify changes

REF: https://bugzilla.tianocore.org/show_bug.cgi?id=3737

Apply uncrustify changes to .c/.h files in the MdeModulePkg package

Cc: Andrew Fish <afish@apple.com>
Cc: Leif Lindholm <leif@nuviainc.com>
Cc: Michael D Kinney <michael.d.kinney@intel.com>
Signed-off-by: Michael Kubacki <michael.kubacki@microsoft.com>
Reviewed-by: Liming Gao <gaoliming@byosoft.com.cn>
This commit is contained in:
Michael Kubacki
2021-12-05 14:54:02 -08:00
committed by mergify[bot]
parent 7c7184e201
commit 1436aea4d5
994 changed files with 107608 additions and 101311 deletions

View File

@@ -32,11 +32,11 @@ EDKII_IOMMU_PPI *mIoMmu;
**/
EFI_STATUS
IoMmuMap (
IN EDKII_IOMMU_OPERATION Operation,
IN VOID *HostAddress,
IN OUT UINTN *NumberOfBytes,
OUT EFI_PHYSICAL_ADDRESS *DeviceAddress,
OUT VOID **Mapping
IN EDKII_IOMMU_OPERATION Operation,
IN VOID *HostAddress,
IN OUT UINTN *NumberOfBytes,
OUT EFI_PHYSICAL_ADDRESS *DeviceAddress,
OUT VOID **Mapping
)
{
EFI_STATUS Status;
@@ -54,23 +54,25 @@ IoMmuMap (
if (EFI_ERROR (Status)) {
return EFI_OUT_OF_RESOURCES;
}
switch (Operation) {
case EdkiiIoMmuOperationBusMasterRead:
case EdkiiIoMmuOperationBusMasterRead64:
Attribute = EDKII_IOMMU_ACCESS_READ;
break;
case EdkiiIoMmuOperationBusMasterWrite:
case EdkiiIoMmuOperationBusMasterWrite64:
Attribute = EDKII_IOMMU_ACCESS_WRITE;
break;
case EdkiiIoMmuOperationBusMasterCommonBuffer:
case EdkiiIoMmuOperationBusMasterCommonBuffer64:
Attribute = EDKII_IOMMU_ACCESS_READ | EDKII_IOMMU_ACCESS_WRITE;
break;
default:
ASSERT(FALSE);
return EFI_INVALID_PARAMETER;
case EdkiiIoMmuOperationBusMasterRead:
case EdkiiIoMmuOperationBusMasterRead64:
Attribute = EDKII_IOMMU_ACCESS_READ;
break;
case EdkiiIoMmuOperationBusMasterWrite:
case EdkiiIoMmuOperationBusMasterWrite64:
Attribute = EDKII_IOMMU_ACCESS_WRITE;
break;
case EdkiiIoMmuOperationBusMasterCommonBuffer:
case EdkiiIoMmuOperationBusMasterCommonBuffer64:
Attribute = EDKII_IOMMU_ACCESS_READ | EDKII_IOMMU_ACCESS_WRITE;
break;
default:
ASSERT (FALSE);
return EFI_INVALID_PARAMETER;
}
Status = mIoMmu->SetAttribute (
mIoMmu,
*Mapping,
@@ -81,9 +83,10 @@ IoMmuMap (
}
} else {
*DeviceAddress = (EFI_PHYSICAL_ADDRESS)(UINTN)HostAddress;
*Mapping = NULL;
Status = EFI_SUCCESS;
*Mapping = NULL;
Status = EFI_SUCCESS;
}
return Status;
}
@@ -98,7 +101,7 @@ IoMmuMap (
**/
EFI_STATUS
IoMmuUnmap (
IN VOID *Mapping
IN VOID *Mapping
)
{
EFI_STATUS Status;
@@ -109,6 +112,7 @@ IoMmuUnmap (
} else {
Status = EFI_SUCCESS;
}
return Status;
}
@@ -142,7 +146,7 @@ IoMmuAllocateBuffer (
UINTN NumberOfBytes;
EFI_PHYSICAL_ADDRESS HostPhyAddress;
*HostAddress = NULL;
*HostAddress = NULL;
*DeviceAddress = 0;
if (mIoMmu != NULL) {
@@ -157,18 +161,19 @@ IoMmuAllocateBuffer (
return EFI_OUT_OF_RESOURCES;
}
NumberOfBytes = EFI_PAGES_TO_SIZE(Pages);
Status = mIoMmu->Map (
mIoMmu,
EdkiiIoMmuOperationBusMasterCommonBuffer,
*HostAddress,
&NumberOfBytes,
DeviceAddress,
Mapping
);
NumberOfBytes = EFI_PAGES_TO_SIZE (Pages);
Status = mIoMmu->Map (
mIoMmu,
EdkiiIoMmuOperationBusMasterCommonBuffer,
*HostAddress,
&NumberOfBytes,
DeviceAddress,
Mapping
);
if (EFI_ERROR (Status)) {
return EFI_OUT_OF_RESOURCES;
}
Status = mIoMmu->SetAttribute (
mIoMmu,
*Mapping,
@@ -186,10 +191,12 @@ IoMmuAllocateBuffer (
if (EFI_ERROR (Status)) {
return EFI_OUT_OF_RESOURCES;
}
*HostAddress = (VOID *)(UINTN)HostPhyAddress;
*HostAddress = (VOID *)(UINTN)HostPhyAddress;
*DeviceAddress = HostPhyAddress;
*Mapping = NULL;
*Mapping = NULL;
}
return Status;
}
@@ -207,9 +214,9 @@ IoMmuAllocateBuffer (
**/
EFI_STATUS
IoMmuFreeBuffer (
IN UINTN Pages,
IN VOID *HostAddress,
IN VOID *Mapping
IN UINTN Pages,
IN VOID *HostAddress,
IN VOID *Mapping
)
{
EFI_STATUS Status;
@@ -221,6 +228,7 @@ IoMmuFreeBuffer (
} else {
Status = EFI_SUCCESS;
}
return Status;
}
@@ -239,4 +247,3 @@ IoMmuInit (
(VOID **)&mIoMmu
);
}

View File

@@ -10,7 +10,7 @@
//
// Template for EMMC HC Slot Data.
//
EMMC_PEIM_HC_SLOT gEmmcHcSlotTemplate = {
EMMC_PEIM_HC_SLOT gEmmcHcSlotTemplate = {
EMMC_PEIM_SLOT_SIG, // Signature
{ // Media
{
@@ -97,7 +97,7 @@ EMMC_PEIM_HC_SLOT gEmmcHcSlotTemplate = {
0,
},
{ // ExtCsd
{0},
{ 0 },
},
TRUE, // SectorAddressing
NULL // Private
@@ -106,7 +106,7 @@ EMMC_PEIM_HC_SLOT gEmmcHcSlotTemplate = {
//
// Template for EMMC HC Private Data.
//
EMMC_PEIM_HC_PRIVATE_DATA gEmmcHcPrivateTemplate = {
EMMC_PEIM_HC_PRIVATE_DATA gEmmcHcPrivateTemplate = {
EMMC_PEIM_SIG, // Signature
NULL, // Pool
{ // BlkIoPpi
@@ -158,6 +158,7 @@ EMMC_PEIM_HC_PRIVATE_DATA gEmmcHcPrivateTemplate = {
0, // SlotNum
0 // TotalBlkIoDevices
};
/**
Gets the count of block I/O devices that one specific block driver detects.
@@ -185,9 +186,9 @@ EmmcBlockIoPeimGetDeviceNo (
OUT UINTN *NumberBlockDevices
)
{
EMMC_PEIM_HC_PRIVATE_DATA *Private;
EMMC_PEIM_HC_PRIVATE_DATA *Private;
Private = GET_EMMC_PEIM_HC_PRIVATE_DATA_FROM_THIS (This);
Private = GET_EMMC_PEIM_HC_PRIVATE_DATA_FROM_THIS (This);
*NumberBlockDevices = Private->TotalBlkIoDevices;
return EFI_SUCCESS;
}
@@ -242,11 +243,11 @@ EmmcBlockIoPeimGetMediaInfo (
OUT EFI_PEI_BLOCK_IO_MEDIA *MediaInfo
)
{
EMMC_PEIM_HC_PRIVATE_DATA *Private;
UINT8 SlotNum;
UINT8 MediaNum;
UINT8 Location;
BOOLEAN Found;
EMMC_PEIM_HC_PRIVATE_DATA *Private;
UINT8 SlotNum;
UINT8 MediaNum;
UINT8 Location;
BOOLEAN Found;
Found = FALSE;
Private = GET_EMMC_PEIM_HC_PRIVATE_DATA_FROM_THIS (This);
@@ -259,12 +260,13 @@ EmmcBlockIoPeimGetMediaInfo (
MediaNum = 0;
for (SlotNum = 0; SlotNum < Private->SlotNum; SlotNum++) {
for (MediaNum = 0; MediaNum < Private->Slot[SlotNum].MediaNum; MediaNum++) {
Location ++;
Location++;
if (Location == DeviceIndex) {
Found = TRUE;
break;
}
}
if (Found) {
break;
}
@@ -323,17 +325,17 @@ EmmcBlockIoPeimReadBlocks (
OUT VOID *Buffer
)
{
EFI_STATUS Status;
UINT32 BlockSize;
UINTN NumberOfBlocks;
EMMC_PEIM_HC_PRIVATE_DATA *Private;
UINT8 SlotNum;
UINT8 MediaNum;
UINT8 Location;
UINT8 PartitionConfig;
UINTN Remaining;
UINT32 MaxBlock;
BOOLEAN Found;
EFI_STATUS Status;
UINT32 BlockSize;
UINTN NumberOfBlocks;
EMMC_PEIM_HC_PRIVATE_DATA *Private;
UINT8 SlotNum;
UINT8 MediaNum;
UINT8 Location;
UINT8 PartitionConfig;
UINTN Remaining;
UINT32 MaxBlock;
BOOLEAN Found;
Status = EFI_SUCCESS;
Found = FALSE;
@@ -358,12 +360,13 @@ EmmcBlockIoPeimReadBlocks (
MediaNum = 0;
for (SlotNum = 0; SlotNum < Private->SlotNum; SlotNum++) {
for (MediaNum = 0; MediaNum < Private->Slot[SlotNum].MediaNum; MediaNum++) {
Location ++;
Location++;
if (Location == DeviceIndex) {
Found = TRUE;
break;
}
}
if (Found) {
break;
}
@@ -385,20 +388,22 @@ EmmcBlockIoPeimReadBlocks (
//
PartitionConfig = Private->Slot[SlotNum].ExtCsd.PartitionConfig;
if ((PartitionConfig & 0x7) != Private->Slot[SlotNum].PartitionType[MediaNum]) {
PartitionConfig &= (UINT8)~0x7;
PartitionConfig &= (UINT8) ~0x7;
PartitionConfig |= Private->Slot[SlotNum].PartitionType[MediaNum];
Status = EmmcPeimSwitch (
&Private->Slot[SlotNum],
0x3,
OFFSET_OF (EMMC_EXT_CSD, PartitionConfig),
PartitionConfig,
0x0
);
Status = EmmcPeimSwitch (
&Private->Slot[SlotNum],
0x3,
OFFSET_OF (EMMC_EXT_CSD, PartitionConfig),
PartitionConfig,
0x0
);
if (EFI_ERROR (Status)) {
return Status;
}
Private->Slot[SlotNum].ExtCsd.PartitionConfig = PartitionConfig;
}
//
// Start to execute data transfer. The max block number in single cmd is 65535 blocks.
//
@@ -418,15 +423,16 @@ EmmcBlockIoPeimReadBlocks (
}
BufferSize = NumberOfBlocks * BlockSize;
Status = EmmcPeimRwMultiBlocks (&Private->Slot[SlotNum], StartLBA, BlockSize, Buffer, BufferSize, TRUE);
Status = EmmcPeimRwMultiBlocks (&Private->Slot[SlotNum], StartLBA, BlockSize, Buffer, BufferSize, TRUE);
if (EFI_ERROR (Status)) {
return Status;
}
StartLBA += NumberOfBlocks;
Buffer = (UINT8*)Buffer + BufferSize;
Buffer = (UINT8 *)Buffer + BufferSize;
Remaining -= NumberOfBlocks;
}
return Status;
}
@@ -452,14 +458,14 @@ EmmcBlockIoPeimReadBlocks (
EFI_STATUS
EFIAPI
EmmcBlockIoPeimGetDeviceNo2 (
IN EFI_PEI_SERVICES **PeiServices,
IN EFI_PEI_RECOVERY_BLOCK_IO2_PPI *This,
OUT UINTN *NumberBlockDevices
IN EFI_PEI_SERVICES **PeiServices,
IN EFI_PEI_RECOVERY_BLOCK_IO2_PPI *This,
OUT UINTN *NumberBlockDevices
)
{
EMMC_PEIM_HC_PRIVATE_DATA *Private;
EMMC_PEIM_HC_PRIVATE_DATA *Private;
Private = GET_EMMC_PEIM_HC_PRIVATE_DATA_FROM_THIS2 (This);
Private = GET_EMMC_PEIM_HC_PRIVATE_DATA_FROM_THIS2 (This);
*NumberBlockDevices = Private->TotalBlkIoDevices;
return EFI_SUCCESS;
@@ -509,29 +515,29 @@ EmmcBlockIoPeimGetDeviceNo2 (
EFI_STATUS
EFIAPI
EmmcBlockIoPeimGetMediaInfo2 (
IN EFI_PEI_SERVICES **PeiServices,
IN EFI_PEI_RECOVERY_BLOCK_IO2_PPI *This,
IN UINTN DeviceIndex,
OUT EFI_PEI_BLOCK_IO2_MEDIA *MediaInfo
IN EFI_PEI_SERVICES **PeiServices,
IN EFI_PEI_RECOVERY_BLOCK_IO2_PPI *This,
IN UINTN DeviceIndex,
OUT EFI_PEI_BLOCK_IO2_MEDIA *MediaInfo
)
{
EFI_STATUS Status;
EMMC_PEIM_HC_PRIVATE_DATA *Private;
EFI_PEI_BLOCK_IO_MEDIA Media;
UINT8 SlotNum;
UINT8 MediaNum;
UINT8 Location;
BOOLEAN Found;
EFI_STATUS Status;
EMMC_PEIM_HC_PRIVATE_DATA *Private;
EFI_PEI_BLOCK_IO_MEDIA Media;
UINT8 SlotNum;
UINT8 MediaNum;
UINT8 Location;
BOOLEAN Found;
Found = FALSE;
Private = GET_EMMC_PEIM_HC_PRIVATE_DATA_FROM_THIS2 (This);
Status = EmmcBlockIoPeimGetMediaInfo (
PeiServices,
&Private->BlkIoPpi,
DeviceIndex,
&Media
);
Status = EmmcBlockIoPeimGetMediaInfo (
PeiServices,
&Private->BlkIoPpi,
DeviceIndex,
&Media
);
if (EFI_ERROR (Status)) {
return Status;
}
@@ -540,12 +546,13 @@ EmmcBlockIoPeimGetMediaInfo2 (
MediaNum = 0;
for (SlotNum = 0; SlotNum < Private->SlotNum; SlotNum++) {
for (MediaNum = 0; MediaNum < Private->Slot[SlotNum].MediaNum; MediaNum++) {
Location ++;
Location++;
if (Location == DeviceIndex) {
Found = TRUE;
break;
}
}
if (Found) {
break;
}
@@ -592,28 +599,28 @@ EmmcBlockIoPeimGetMediaInfo2 (
EFI_STATUS
EFIAPI
EmmcBlockIoPeimReadBlocks2 (
IN EFI_PEI_SERVICES **PeiServices,
IN EFI_PEI_RECOVERY_BLOCK_IO2_PPI *This,
IN UINTN DeviceIndex,
IN EFI_PEI_LBA StartLBA,
IN UINTN BufferSize,
OUT VOID *Buffer
IN EFI_PEI_SERVICES **PeiServices,
IN EFI_PEI_RECOVERY_BLOCK_IO2_PPI *This,
IN UINTN DeviceIndex,
IN EFI_PEI_LBA StartLBA,
IN UINTN BufferSize,
OUT VOID *Buffer
)
{
EFI_STATUS Status;
EMMC_PEIM_HC_PRIVATE_DATA *Private;
EFI_STATUS Status;
EMMC_PEIM_HC_PRIVATE_DATA *Private;
Status = EFI_SUCCESS;
Private = GET_EMMC_PEIM_HC_PRIVATE_DATA_FROM_THIS2 (This);
Status = EFI_SUCCESS;
Private = GET_EMMC_PEIM_HC_PRIVATE_DATA_FROM_THIS2 (This);
Status = EmmcBlockIoPeimReadBlocks (
PeiServices,
&Private->BlkIoPpi,
DeviceIndex,
StartLBA,
BufferSize,
Buffer
);
Status = EmmcBlockIoPeimReadBlocks (
PeiServices,
&Private->BlkIoPpi,
DeviceIndex,
StartLBA,
BufferSize,
Buffer
);
return Status;
}
@@ -636,7 +643,7 @@ EmmcBlockIoPeimEndOfPei (
IN VOID *Ppi
)
{
EMMC_PEIM_HC_PRIVATE_DATA *Private;
EMMC_PEIM_HC_PRIVATE_DATA *Private;
Private = GET_EMMC_PEIM_HC_PRIVATE_DATA_FROM_THIS_NOTIFY (NotifyDescriptor);
@@ -660,26 +667,26 @@ EmmcBlockIoPeimEndOfPei (
EFI_STATUS
EFIAPI
InitializeEmmcBlockIoPeim (
IN EFI_PEI_FILE_HANDLE FileHandle,
IN CONST EFI_PEI_SERVICES **PeiServices
IN EFI_PEI_FILE_HANDLE FileHandle,
IN CONST EFI_PEI_SERVICES **PeiServices
)
{
EFI_STATUS Status;
EMMC_PEIM_HC_PRIVATE_DATA *Private;
EDKII_SD_MMC_HOST_CONTROLLER_PPI *SdMmcHcPpi;
UINT32 Index;
UINT32 PartitionIndex;
UINTN *MmioBase;
UINT8 BarNum;
UINT8 SlotNum;
UINT8 MediaNum;
UINT8 Controller;
UINT64 Capacity;
EMMC_EXT_CSD *ExtCsd;
EMMC_HC_SLOT_CAP Capability;
EMMC_PEIM_HC_SLOT *Slot;
UINT32 SecCount;
UINT32 GpSizeMult;
EFI_STATUS Status;
EMMC_PEIM_HC_PRIVATE_DATA *Private;
EDKII_SD_MMC_HOST_CONTROLLER_PPI *SdMmcHcPpi;
UINT32 Index;
UINT32 PartitionIndex;
UINTN *MmioBase;
UINT8 BarNum;
UINT8 SlotNum;
UINT8 MediaNum;
UINT8 Controller;
UINT64 Capacity;
EMMC_EXT_CSD *ExtCsd;
EMMC_HC_SLOT_CAP Capability;
EMMC_PEIM_HC_SLOT *Slot;
UINT32 SecCount;
UINT32 GpSizeMult;
//
// Shadow this PEIM to run from memory
@@ -695,7 +702,7 @@ InitializeEmmcBlockIoPeim (
&gEdkiiPeiSdMmcHostControllerPpiGuid,
0,
NULL,
(VOID **) &SdMmcHcPpi
(VOID **)&SdMmcHcPpi
);
if (EFI_ERROR (Status)) {
return EFI_DEVICE_ERROR;
@@ -724,8 +731,9 @@ InitializeEmmcBlockIoPeim (
Status = EFI_OUT_OF_RESOURCES;
break;
}
Private->BlkIoPpiList.Ppi = (VOID*)&Private->BlkIoPpi;
Private->BlkIo2PpiList.Ppi = (VOID*)&Private->BlkIo2Ppi;
Private->BlkIoPpiList.Ppi = (VOID *)&Private->BlkIoPpi;
Private->BlkIo2PpiList.Ppi = (VOID *)&Private->BlkIo2Ppi;
//
// Initialize the memory pool which will be used in all transactions.
//
@@ -740,6 +748,7 @@ InitializeEmmcBlockIoPeim (
if (EFI_ERROR (Status)) {
continue;
}
if (Capability.SlotType != 0x1) {
DEBUG ((DEBUG_INFO, "The slot at 0x%x is not embedded slot type\n", MmioBase[Index]));
Status = EFI_UNSUPPORTED;
@@ -750,10 +759,12 @@ InitializeEmmcBlockIoPeim (
if (EFI_ERROR (Status)) {
continue;
}
Status = EmmcPeimHcCardDetect (MmioBase[Index]);
if (EFI_ERROR (Status)) {
continue;
}
Status = EmmcPeimHcInitHost (MmioBase[Index]);
if (EFI_ERROR (Status)) {
continue;
@@ -777,6 +788,7 @@ InitializeEmmcBlockIoPeim (
Status = EFI_UNSUPPORTED;
continue;
}
if ((ExtCsd->PartitioningSupport & BIT0) != BIT0) {
DEBUG ((DEBUG_ERROR, "The EMMC device doesn't support Partition Feature!!!\n"));
Status = EFI_UNSUPPORTED;
@@ -786,7 +798,7 @@ InitializeEmmcBlockIoPeim (
for (PartitionIndex = 0; PartitionIndex < EMMC_PEIM_MAX_PARTITIONS; PartitionIndex++) {
switch (PartitionIndex) {
case EmmcPartitionUserData:
SecCount = *(UINT32*)&ExtCsd->SecCount;
SecCount = *(UINT32 *)&ExtCsd->SecCount;
Capacity = MultU64x32 ((UINT64)SecCount, 0x200);
break;
case EmmcPartitionBoot1:
@@ -798,19 +810,19 @@ InitializeEmmcBlockIoPeim (
break;
case EmmcPartitionGP1:
GpSizeMult = (ExtCsd->GpSizeMult[0] | (ExtCsd->GpSizeMult[1] << 8) | (ExtCsd->GpSizeMult[2] << 16));
Capacity = MultU64x32 (MultU64x32 (MultU64x32 ((UINT64)GpSizeMult, ExtCsd->HcWpGrpSize), ExtCsd->HcEraseGrpSize), SIZE_512KB);
Capacity = MultU64x32 (MultU64x32 (MultU64x32 ((UINT64)GpSizeMult, ExtCsd->HcWpGrpSize), ExtCsd->HcEraseGrpSize), SIZE_512KB);
break;
case EmmcPartitionGP2:
GpSizeMult = (ExtCsd->GpSizeMult[3] | (ExtCsd->GpSizeMult[4] << 8) | (ExtCsd->GpSizeMult[5] << 16));
Capacity = MultU64x32 (MultU64x32 (MultU64x32 ((UINT64)GpSizeMult, ExtCsd->HcWpGrpSize), ExtCsd->HcEraseGrpSize), SIZE_512KB);
Capacity = MultU64x32 (MultU64x32 (MultU64x32 ((UINT64)GpSizeMult, ExtCsd->HcWpGrpSize), ExtCsd->HcEraseGrpSize), SIZE_512KB);
break;
case EmmcPartitionGP3:
GpSizeMult = (ExtCsd->GpSizeMult[6] | (ExtCsd->GpSizeMult[7] << 8) | (ExtCsd->GpSizeMult[8] << 16));
Capacity = MultU64x32 (MultU64x32 (MultU64x32 ((UINT64)GpSizeMult, ExtCsd->HcWpGrpSize), ExtCsd->HcEraseGrpSize), SIZE_512KB);
Capacity = MultU64x32 (MultU64x32 (MultU64x32 ((UINT64)GpSizeMult, ExtCsd->HcWpGrpSize), ExtCsd->HcEraseGrpSize), SIZE_512KB);
break;
case EmmcPartitionGP4:
GpSizeMult = (ExtCsd->GpSizeMult[9] | (ExtCsd->GpSizeMult[10] << 8) | (ExtCsd->GpSizeMult[11] << 16));
Capacity = MultU64x32 (MultU64x32 (MultU64x32 ((UINT64)GpSizeMult, ExtCsd->HcWpGrpSize), ExtCsd->HcEraseGrpSize), SIZE_512KB);
Capacity = MultU64x32 (MultU64x32 (MultU64x32 ((UINT64)GpSizeMult, ExtCsd->HcWpGrpSize), ExtCsd->HcEraseGrpSize), SIZE_512KB);
break;
default:
ASSERT (FALSE);
@@ -820,13 +832,15 @@ InitializeEmmcBlockIoPeim (
MediaNum = Slot->MediaNum;
if (Capacity != 0) {
Slot->Media[MediaNum].LastBlock = DivU64x32 (Capacity, Slot->Media[MediaNum].BlockSize) - 1;
Slot->PartitionType[MediaNum] = PartitionIndex;
Slot->PartitionType[MediaNum] = PartitionIndex;
Private->TotalBlkIoDevices++;
Slot->MediaNum++;
}
}
Private->SlotNum++;
}
Controller++;
if (!EFI_ERROR (Status)) {

View File

@@ -26,31 +26,31 @@
#include <IndustryStandard/Emmc.h>
typedef struct _EMMC_PEIM_HC_PRIVATE_DATA EMMC_PEIM_HC_PRIVATE_DATA;
typedef struct _EMMC_PEIM_HC_SLOT EMMC_PEIM_HC_SLOT;
typedef struct _EMMC_TRB EMMC_TRB;
typedef struct _EMMC_PEIM_HC_PRIVATE_DATA EMMC_PEIM_HC_PRIVATE_DATA;
typedef struct _EMMC_PEIM_HC_SLOT EMMC_PEIM_HC_SLOT;
typedef struct _EMMC_TRB EMMC_TRB;
#include "EmmcHci.h"
#include "EmmcHcMem.h"
#define EMMC_PEIM_SIG SIGNATURE_32 ('E', 'M', 'C', 'P')
#define EMMC_PEIM_SLOT_SIG SIGNATURE_32 ('E', 'M', 'C', 'S')
#define EMMC_PEIM_SIG SIGNATURE_32 ('E', 'M', 'C', 'P')
#define EMMC_PEIM_SLOT_SIG SIGNATURE_32 ('E', 'M', 'C', 'S')
#define EMMC_PEIM_MAX_SLOTS 6
#define EMMC_PEIM_MAX_PARTITIONS 8
#define EMMC_PEIM_MAX_SLOTS 6
#define EMMC_PEIM_MAX_PARTITIONS 8
struct _EMMC_PEIM_HC_SLOT {
UINT32 Signature;
EFI_PEI_BLOCK_IO2_MEDIA Media[EMMC_PEIM_MAX_PARTITIONS];
UINT8 MediaNum;
EMMC_PARTITION_TYPE PartitionType[EMMC_PEIM_MAX_PARTITIONS];
UINT32 Signature;
EFI_PEI_BLOCK_IO2_MEDIA Media[EMMC_PEIM_MAX_PARTITIONS];
UINT8 MediaNum;
EMMC_PARTITION_TYPE PartitionType[EMMC_PEIM_MAX_PARTITIONS];
UINTN EmmcHcBase;
EMMC_HC_SLOT_CAP Capability;
EMMC_CSD Csd;
EMMC_EXT_CSD ExtCsd;
BOOLEAN SectorAddressing;
EMMC_PEIM_HC_PRIVATE_DATA *Private;
UINTN EmmcHcBase;
EMMC_HC_SLOT_CAP Capability;
EMMC_CSD Csd;
EMMC_EXT_CSD ExtCsd;
BOOLEAN SectorAddressing;
EMMC_PEIM_HC_PRIVATE_DATA *Private;
};
struct _EMMC_PEIM_HC_PRIVATE_DATA {
@@ -71,27 +71,27 @@ struct _EMMC_PEIM_HC_PRIVATE_DATA {
UINT8 TotalBlkIoDevices;
};
#define EMMC_TIMEOUT MultU64x32((UINT64)(3), 1000000)
#define GET_EMMC_PEIM_HC_PRIVATE_DATA_FROM_THIS(a) CR (a, EMMC_PEIM_HC_PRIVATE_DATA, BlkIoPpi, EMMC_PEIM_SIG)
#define GET_EMMC_PEIM_HC_PRIVATE_DATA_FROM_THIS2(a) CR (a, EMMC_PEIM_HC_PRIVATE_DATA, BlkIo2Ppi, EMMC_PEIM_SIG)
#define GET_EMMC_PEIM_HC_PRIVATE_DATA_FROM_THIS_NOTIFY(a) CR (a, EMMC_PEIM_HC_PRIVATE_DATA, EndOfPeiNotifyList, EMMC_PEIM_SIG)
#define EMMC_TIMEOUT MultU64x32((UINT64)(3), 1000000)
#define GET_EMMC_PEIM_HC_PRIVATE_DATA_FROM_THIS(a) CR (a, EMMC_PEIM_HC_PRIVATE_DATA, BlkIoPpi, EMMC_PEIM_SIG)
#define GET_EMMC_PEIM_HC_PRIVATE_DATA_FROM_THIS2(a) CR (a, EMMC_PEIM_HC_PRIVATE_DATA, BlkIo2Ppi, EMMC_PEIM_SIG)
#define GET_EMMC_PEIM_HC_PRIVATE_DATA_FROM_THIS_NOTIFY(a) CR (a, EMMC_PEIM_HC_PRIVATE_DATA, EndOfPeiNotifyList, EMMC_PEIM_SIG)
struct _EMMC_TRB {
EMMC_PEIM_HC_SLOT *Slot;
UINT16 BlockSize;
EMMC_PEIM_HC_SLOT *Slot;
UINT16 BlockSize;
EMMC_COMMAND_PACKET *Packet;
VOID *Data;
UINT32 DataLen;
BOOLEAN Read;
EFI_PHYSICAL_ADDRESS DataPhy;
VOID *DataMap;
EMMC_HC_TRANSFER_MODE Mode;
EMMC_COMMAND_PACKET *Packet;
VOID *Data;
UINT32 DataLen;
BOOLEAN Read;
EFI_PHYSICAL_ADDRESS DataPhy;
VOID *DataMap;
EMMC_HC_TRANSFER_MODE Mode;
UINT64 Timeout;
UINT64 Timeout;
EMMC_HC_ADMA_DESC_LINE *AdmaDesc;
UINTN AdmaDescSize;
EMMC_HC_ADMA_DESC_LINE *AdmaDesc;
UINTN AdmaDescSize;
};
/**
@@ -238,9 +238,9 @@ EmmcBlockIoPeimReadBlocks (
EFI_STATUS
EFIAPI
EmmcBlockIoPeimGetDeviceNo2 (
IN EFI_PEI_SERVICES **PeiServices,
IN EFI_PEI_RECOVERY_BLOCK_IO2_PPI *This,
OUT UINTN *NumberBlockDevices
IN EFI_PEI_SERVICES **PeiServices,
IN EFI_PEI_RECOVERY_BLOCK_IO2_PPI *This,
OUT UINTN *NumberBlockDevices
);
/**
@@ -287,10 +287,10 @@ EmmcBlockIoPeimGetDeviceNo2 (
EFI_STATUS
EFIAPI
EmmcBlockIoPeimGetMediaInfo2 (
IN EFI_PEI_SERVICES **PeiServices,
IN EFI_PEI_RECOVERY_BLOCK_IO2_PPI *This,
IN UINTN DeviceIndex,
OUT EFI_PEI_BLOCK_IO2_MEDIA *MediaInfo
IN EFI_PEI_SERVICES **PeiServices,
IN EFI_PEI_RECOVERY_BLOCK_IO2_PPI *This,
IN UINTN DeviceIndex,
OUT EFI_PEI_BLOCK_IO2_MEDIA *MediaInfo
);
/**
@@ -330,12 +330,12 @@ EmmcBlockIoPeimGetMediaInfo2 (
EFI_STATUS
EFIAPI
EmmcBlockIoPeimReadBlocks2 (
IN EFI_PEI_SERVICES **PeiServices,
IN EFI_PEI_RECOVERY_BLOCK_IO2_PPI *This,
IN UINTN DeviceIndex,
IN EFI_PEI_LBA StartLBA,
IN UINTN BufferSize,
OUT VOID *Buffer
IN EFI_PEI_SERVICES **PeiServices,
IN EFI_PEI_RECOVERY_BLOCK_IO2_PPI *This,
IN UINTN DeviceIndex,
IN EFI_PEI_LBA StartLBA,
IN UINTN BufferSize,
OUT VOID *Buffer
);
/**
@@ -349,7 +349,7 @@ EmmcBlockIoPeimReadBlocks2 (
**/
EFI_STATUS
EmmcPeimInitMemPool (
IN EMMC_PEIM_HC_PRIVATE_DATA *Private
IN EMMC_PEIM_HC_PRIVATE_DATA *Private
);
/**
@@ -363,7 +363,7 @@ EmmcPeimInitMemPool (
**/
EFI_STATUS
EmmcPeimFreeMemPool (
IN EMMC_PEIM_MEM_POOL *Pool
IN EMMC_PEIM_MEM_POOL *Pool
);
/**
@@ -378,8 +378,8 @@ EmmcPeimFreeMemPool (
**/
VOID *
EmmcPeimAllocateMem (
IN EMMC_PEIM_MEM_POOL *Pool,
IN UINTN Size
IN EMMC_PEIM_MEM_POOL *Pool,
IN UINTN Size
);
/**
@@ -392,9 +392,9 @@ EmmcPeimAllocateMem (
**/
VOID
EmmcPeimFreeMem (
IN EMMC_PEIM_MEM_POOL *Pool,
IN VOID *Mem,
IN UINTN Size
IN EMMC_PEIM_MEM_POOL *Pool,
IN VOID *Mem,
IN UINTN Size
);
/**
@@ -426,11 +426,11 @@ IoMmuInit (
**/
EFI_STATUS
IoMmuMap (
IN EDKII_IOMMU_OPERATION Operation,
IN VOID *HostAddress,
IN OUT UINTN *NumberOfBytes,
OUT EFI_PHYSICAL_ADDRESS *DeviceAddress,
OUT VOID **Mapping
IN EDKII_IOMMU_OPERATION Operation,
IN VOID *HostAddress,
IN OUT UINTN *NumberOfBytes,
OUT EFI_PHYSICAL_ADDRESS *DeviceAddress,
OUT VOID **Mapping
);
/**
@@ -444,7 +444,7 @@ IoMmuMap (
**/
EFI_STATUS
IoMmuUnmap (
IN VOID *Mapping
IN VOID *Mapping
);
/**
@@ -487,9 +487,9 @@ IoMmuAllocateBuffer (
**/
EFI_STATUS
IoMmuFreeBuffer (
IN UINTN Pages,
IN VOID *HostAddress,
IN VOID *Mapping
IN UINTN Pages,
IN VOID *HostAddress,
IN VOID *Mapping
);
/**

View File

@@ -18,25 +18,25 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
**/
EMMC_PEIM_MEM_BLOCK *
EmmcPeimAllocMemBlock (
IN UINTN Pages
IN UINTN Pages
)
{
EMMC_PEIM_MEM_BLOCK *Block;
VOID *BufHost;
VOID *Mapping;
EFI_PHYSICAL_ADDRESS MappedAddr;
EFI_STATUS Status;
VOID *TempPtr;
EMMC_PEIM_MEM_BLOCK *Block;
VOID *BufHost;
VOID *Mapping;
EFI_PHYSICAL_ADDRESS MappedAddr;
EFI_STATUS Status;
VOID *TempPtr;
TempPtr = NULL;
Block = NULL;
Status = PeiServicesAllocatePool (sizeof(EMMC_PEIM_MEM_BLOCK), &TempPtr);
Status = PeiServicesAllocatePool (sizeof (EMMC_PEIM_MEM_BLOCK), &TempPtr);
if (EFI_ERROR (Status)) {
return NULL;
}
ZeroMem ((VOID*)(UINTN)TempPtr, sizeof(EMMC_PEIM_MEM_BLOCK));
ZeroMem ((VOID *)(UINTN)TempPtr, sizeof (EMMC_PEIM_MEM_BLOCK));
//
// each bit in the bit array represents EMMC_PEIM_MEM_UNIT
@@ -44,18 +44,18 @@ EmmcPeimAllocMemBlock (
//
ASSERT (EMMC_PEIM_MEM_UNIT * 8 <= EFI_PAGE_SIZE);
Block = (EMMC_PEIM_MEM_BLOCK*)(UINTN)TempPtr;
Block->BufLen = EFI_PAGES_TO_SIZE (Pages);
Block->BitsLen = Block->BufLen / (EMMC_PEIM_MEM_UNIT * 8);
Block = (EMMC_PEIM_MEM_BLOCK *)(UINTN)TempPtr;
Block->BufLen = EFI_PAGES_TO_SIZE (Pages);
Block->BitsLen = Block->BufLen / (EMMC_PEIM_MEM_UNIT * 8);
Status = PeiServicesAllocatePool (Block->BitsLen, &TempPtr);
if (EFI_ERROR (Status)) {
return NULL;
}
ZeroMem ((VOID*)(UINTN)TempPtr, Block->BitsLen);
ZeroMem ((VOID *)(UINTN)TempPtr, Block->BitsLen);
Block->Bits = (UINT8*)(UINTN)TempPtr;
Block->Bits = (UINT8 *)(UINTN)TempPtr;
Status = IoMmuAllocateBuffer (
Pages,
@@ -67,10 +67,10 @@ EmmcPeimAllocMemBlock (
return NULL;
}
ZeroMem ((VOID*)(UINTN)BufHost, EFI_PAGES_TO_SIZE (Pages));
ZeroMem ((VOID *)(UINTN)BufHost, EFI_PAGES_TO_SIZE (Pages));
Block->BufHost = (UINT8 *) (UINTN) BufHost;
Block->Buf = (UINT8 *) (UINTN) MappedAddr;
Block->BufHost = (UINT8 *)(UINTN)BufHost;
Block->Buf = (UINT8 *)(UINTN)MappedAddr;
Block->Mapping = Mapping;
Block->Next = NULL;
@@ -86,8 +86,8 @@ EmmcPeimAllocMemBlock (
**/
VOID
EmmcPeimFreeMemBlock (
IN EMMC_PEIM_MEM_POOL *Pool,
IN EMMC_PEIM_MEM_BLOCK *Block
IN EMMC_PEIM_MEM_POOL *Pool,
IN EMMC_PEIM_MEM_BLOCK *Block
)
{
ASSERT ((Pool != NULL) && (Block != NULL));
@@ -107,22 +107,22 @@ EmmcPeimFreeMemBlock (
**/
VOID *
EmmcPeimAllocMemFromBlock (
IN EMMC_PEIM_MEM_BLOCK *Block,
IN UINTN Units
IN EMMC_PEIM_MEM_BLOCK *Block,
IN UINTN Units
)
{
UINTN Byte;
UINT8 Bit;
UINTN StartByte;
UINT8 StartBit;
UINTN Available;
UINTN Count;
UINTN Byte;
UINT8 Bit;
UINTN StartByte;
UINT8 StartBit;
UINTN Available;
UINTN Count;
ASSERT ((Block != 0) && (Units != 0));
StartByte = 0;
StartBit = 0;
Available = 0;
StartByte = 0;
StartBit = 0;
Available = 0;
for (Byte = 0, Bit = 0; Byte < Block->BitsLen;) {
//
@@ -138,13 +138,12 @@ EmmcPeimAllocMemFromBlock (
}
EMMC_PEIM_NEXT_BIT (Byte, Bit);
} else {
EMMC_PEIM_NEXT_BIT (Byte, Bit);
Available = 0;
StartByte = Byte;
StartBit = Bit;
Available = 0;
StartByte = Byte;
StartBit = Bit;
}
}
@@ -155,13 +154,13 @@ EmmcPeimAllocMemFromBlock (
//
// Mark the memory as allocated
//
Byte = StartByte;
Bit = StartBit;
Byte = StartByte;
Bit = StartBit;
for (Count = 0; Count < Units; Count++) {
ASSERT (!EMMC_PEIM_MEM_BIT_IS_SET (Block->Bits[Byte], Bit));
Block->Bits[Byte] = (UINT8) (Block->Bits[Byte] | (UINT8) EMMC_PEIM_MEM_BIT (Bit));
Block->Bits[Byte] = (UINT8)(Block->Bits[Byte] | (UINT8)EMMC_PEIM_MEM_BIT (Bit));
EMMC_PEIM_NEXT_BIT (Byte, Bit);
}
@@ -177,8 +176,8 @@ EmmcPeimAllocMemFromBlock (
**/
VOID
EmmcPeimInsertMemBlockToPool (
IN EMMC_PEIM_MEM_BLOCK *Head,
IN EMMC_PEIM_MEM_BLOCK *Block
IN EMMC_PEIM_MEM_BLOCK *Head,
IN EMMC_PEIM_MEM_BLOCK *Block
)
{
ASSERT ((Head != NULL) && (Block != NULL));
@@ -197,11 +196,10 @@ EmmcPeimInsertMemBlockToPool (
**/
BOOLEAN
EmmcPeimIsMemBlockEmpty (
IN EMMC_PEIM_MEM_BLOCK *Block
IN EMMC_PEIM_MEM_BLOCK *Block
)
{
UINTN Index;
UINTN Index;
for (Index = 0; Index < Block->BitsLen; Index++) {
if (Block->Bits[Index] != 0) {
@@ -212,8 +210,6 @@ EmmcPeimIsMemBlockEmpty (
return TRUE;
}
/**
Initialize the memory management pool for the host controller.
@@ -228,9 +224,9 @@ EmmcPeimInitMemPool (
IN EMMC_PEIM_HC_PRIVATE_DATA *Private
)
{
EMMC_PEIM_MEM_POOL *Pool;
EFI_STATUS Status;
VOID *TempPtr;
EMMC_PEIM_MEM_POOL *Pool;
EFI_STATUS Status;
VOID *TempPtr;
TempPtr = NULL;
Pool = NULL;
@@ -240,7 +236,7 @@ EmmcPeimInitMemPool (
return EFI_OUT_OF_RESOURCES;
}
ZeroMem ((VOID*)(UINTN)TempPtr, sizeof (EMMC_PEIM_MEM_POOL));
ZeroMem ((VOID *)(UINTN)TempPtr, sizeof (EMMC_PEIM_MEM_POOL));
Pool = (EMMC_PEIM_MEM_POOL *)((UINTN)TempPtr);
@@ -265,10 +261,10 @@ EmmcPeimInitMemPool (
**/
EFI_STATUS
EmmcPeimFreeMemPool (
IN EMMC_PEIM_MEM_POOL *Pool
IN EMMC_PEIM_MEM_POOL *Pool
)
{
EMMC_PEIM_MEM_BLOCK *Block;
EMMC_PEIM_MEM_BLOCK *Block;
ASSERT (Pool->Head != NULL);
@@ -296,16 +292,16 @@ EmmcPeimFreeMemPool (
**/
VOID *
EmmcPeimAllocateMem (
IN EMMC_PEIM_MEM_POOL *Pool,
IN UINTN Size
IN EMMC_PEIM_MEM_POOL *Pool,
IN UINTN Size
)
{
EMMC_PEIM_MEM_BLOCK *Head;
EMMC_PEIM_MEM_BLOCK *Block;
EMMC_PEIM_MEM_BLOCK *NewBlock;
VOID *Mem;
UINTN AllocSize;
UINTN Pages;
EMMC_PEIM_MEM_BLOCK *Head;
EMMC_PEIM_MEM_BLOCK *Block;
EMMC_PEIM_MEM_BLOCK *NewBlock;
VOID *Mem;
UINTN AllocSize;
UINTN Pages;
Mem = NULL;
AllocSize = EMMC_PEIM_MEM_ROUND (Size);
@@ -368,22 +364,22 @@ EmmcPeimAllocateMem (
**/
VOID
EmmcPeimFreeMem (
IN EMMC_PEIM_MEM_POOL *Pool,
IN VOID *Mem,
IN UINTN Size
IN EMMC_PEIM_MEM_POOL *Pool,
IN VOID *Mem,
IN UINTN Size
)
{
EMMC_PEIM_MEM_BLOCK *Head;
EMMC_PEIM_MEM_BLOCK *Block;
UINT8 *ToFree;
UINTN AllocSize;
UINTN Byte;
UINTN Bit;
UINTN Count;
EMMC_PEIM_MEM_BLOCK *Head;
EMMC_PEIM_MEM_BLOCK *Block;
UINT8 *ToFree;
UINTN AllocSize;
UINTN Byte;
UINTN Bit;
UINTN Count;
Head = Pool->Head;
AllocSize = EMMC_PEIM_MEM_ROUND (Size);
ToFree = (UINT8 *) Mem;
ToFree = (UINT8 *)Mem;
for (Block = Head; Block != NULL; Block = Block->Next) {
//
@@ -394,8 +390,8 @@ EmmcPeimFreeMem (
//
// compute the start byte and bit in the bit array
//
Byte = ((ToFree - Block->Buf) / EMMC_PEIM_MEM_UNIT) / 8;
Bit = ((ToFree - Block->Buf) / EMMC_PEIM_MEM_UNIT) % 8;
Byte = ((ToFree - Block->Buf) / EMMC_PEIM_MEM_UNIT) / 8;
Bit = ((ToFree - Block->Buf) / EMMC_PEIM_MEM_UNIT) % 8;
//
// reset associated bits in bit array
@@ -403,7 +399,7 @@ EmmcPeimFreeMem (
for (Count = 0; Count < (AllocSize / EMMC_PEIM_MEM_UNIT); Count++) {
ASSERT (EMMC_PEIM_MEM_BIT_IS_SET (Block->Bits[Byte], Bit));
Block->Bits[Byte] = (UINT8) (Block->Bits[Byte] ^ EMMC_PEIM_MEM_BIT (Bit));
Block->Bits[Byte] = (UINT8)(Block->Bits[Byte] ^ EMMC_PEIM_MEM_BIT (Bit));
EMMC_PEIM_NEXT_BIT (Byte, Bit);
}
@@ -425,5 +421,5 @@ EmmcPeimFreeMem (
EmmcPeimFreeMemBlock (Pool, Block);
}
return ;
return;
}

View File

@@ -9,7 +9,7 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
#ifndef _EMMC_PEIM_MEM_H_
#define _EMMC_PEIM_MEM_H_
#define EMMC_PEIM_MEM_BIT(a) ((UINTN)(1 << (a)))
#define EMMC_PEIM_MEM_BIT(a) ((UINTN)(1 << (a)))
#define EMMC_PEIM_MEM_BIT_IS_SET(Data, Bit) \
((BOOLEAN)(((Data) & EMMC_PEIM_MEM_BIT(Bit)) == EMMC_PEIM_MEM_BIT(Bit)))
@@ -17,28 +17,28 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
typedef struct _EMMC_PEIM_MEM_BLOCK EMMC_PEIM_MEM_BLOCK;
struct _EMMC_PEIM_MEM_BLOCK {
UINT8 *Bits; // Bit array to record which unit is allocated
UINTN BitsLen;
UINT8 *Buf;
UINT8 *BufHost;
UINTN BufLen; // Memory size in bytes
VOID *Mapping;
EMMC_PEIM_MEM_BLOCK *Next;
UINT8 *Bits; // Bit array to record which unit is allocated
UINTN BitsLen;
UINT8 *Buf;
UINT8 *BufHost;
UINTN BufLen; // Memory size in bytes
VOID *Mapping;
EMMC_PEIM_MEM_BLOCK *Next;
};
typedef struct _EMMC_PEIM_MEM_POOL {
EMMC_PEIM_MEM_BLOCK *Head;
EMMC_PEIM_MEM_BLOCK *Head;
} EMMC_PEIM_MEM_POOL;
//
// Memory allocation unit, note that the value must meet EMMC spec alignment requirement.
//
#define EMMC_PEIM_MEM_UNIT 128
#define EMMC_PEIM_MEM_UNIT 128
#define EMMC_PEIM_MEM_UNIT_MASK (EMMC_PEIM_MEM_UNIT - 1)
#define EMMC_PEIM_MEM_DEFAULT_PAGES 16
#define EMMC_PEIM_MEM_ROUND(Len) (((Len) + EMMC_PEIM_MEM_UNIT_MASK) & (~EMMC_PEIM_MEM_UNIT_MASK))
#define EMMC_PEIM_MEM_ROUND(Len) (((Len) + EMMC_PEIM_MEM_UNIT_MASK) & (~EMMC_PEIM_MEM_UNIT_MASK))
//
// Advance the byte and bit to the next bit, adjust byte accordingly.
@@ -53,4 +53,3 @@ typedef struct _EMMC_PEIM_MEM_POOL {
} while (0)
#endif

File diff suppressed because it is too large Load Diff

View File

@@ -61,9 +61,9 @@ typedef enum {
//
// The maximum data length of each descriptor line
//
#define ADMA_MAX_DATA_PER_LINE 0x10000
#define EMMC_SDMA_BOUNDARY 512 * 1024
#define EMMC_SDMA_ROUND_UP(x, n) (((x) + n) & ~(n - 1))
#define ADMA_MAX_DATA_PER_LINE 0x10000
#define EMMC_SDMA_BOUNDARY 512 * 1024
#define EMMC_SDMA_ROUND_UP(x, n) (((x) + n) & ~(n - 1))
typedef enum {
EmmcCommandTypeBc, // Broadcast commands, no response
@@ -85,76 +85,76 @@ typedef enum {
} EMMC_RESPONSE_TYPE;
typedef struct _EMMC_COMMAND_BLOCK {
UINT16 CommandIndex;
UINT32 CommandArgument;
UINT32 CommandType; // One of the EMMC_COMMAND_TYPE values
UINT32 ResponseType; // One of the EMMC_RESPONSE_TYPE values
UINT16 CommandIndex;
UINT32 CommandArgument;
UINT32 CommandType; // One of the EMMC_COMMAND_TYPE values
UINT32 ResponseType; // One of the EMMC_RESPONSE_TYPE values
} EMMC_COMMAND_BLOCK;
typedef struct _EMMC_STATUS_BLOCK {
UINT32 Resp0;
UINT32 Resp1;
UINT32 Resp2;
UINT32 Resp3;
UINT32 Resp0;
UINT32 Resp1;
UINT32 Resp2;
UINT32 Resp3;
} EMMC_STATUS_BLOCK;
typedef struct _EMMC_COMMAND_PACKET {
UINT64 Timeout;
EMMC_COMMAND_BLOCK *EmmcCmdBlk;
EMMC_STATUS_BLOCK *EmmcStatusBlk;
VOID *InDataBuffer;
VOID *OutDataBuffer;
UINT32 InTransferLength;
UINT32 OutTransferLength;
UINT64 Timeout;
EMMC_COMMAND_BLOCK *EmmcCmdBlk;
EMMC_STATUS_BLOCK *EmmcStatusBlk;
VOID *InDataBuffer;
VOID *OutDataBuffer;
UINT32 InTransferLength;
UINT32 OutTransferLength;
} EMMC_COMMAND_PACKET;
#pragma pack(1)
typedef struct {
UINT32 Valid:1;
UINT32 End:1;
UINT32 Int:1;
UINT32 Reserved:1;
UINT32 Act:2;
UINT32 Reserved1:10;
UINT32 Length:16;
UINT32 Address;
UINT32 Valid : 1;
UINT32 End : 1;
UINT32 Int : 1;
UINT32 Reserved : 1;
UINT32 Act : 2;
UINT32 Reserved1 : 10;
UINT32 Length : 16;
UINT32 Address;
} EMMC_HC_ADMA_DESC_LINE;
typedef struct {
UINT32 TimeoutFreq:6; // bit 0:5
UINT32 Reserved:1; // bit 6
UINT32 TimeoutUnit:1; // bit 7
UINT32 BaseClkFreq:8; // bit 8:15
UINT32 MaxBlkLen:2; // bit 16:17
UINT32 BusWidth8:1; // bit 18
UINT32 Adma2:1; // bit 19
UINT32 Reserved2:1; // bit 20
UINT32 HighSpeed:1; // bit 21
UINT32 Sdma:1; // bit 22
UINT32 SuspRes:1; // bit 23
UINT32 Voltage33:1; // bit 24
UINT32 Voltage30:1; // bit 25
UINT32 Voltage18:1; // bit 26
UINT32 Reserved3:1; // bit 27
UINT32 SysBus64:1; // bit 28
UINT32 AsyncInt:1; // bit 29
UINT32 SlotType:2; // bit 30:31
UINT32 Sdr50:1; // bit 32
UINT32 Sdr104:1; // bit 33
UINT32 Ddr50:1; // bit 34
UINT32 Reserved4:1; // bit 35
UINT32 DriverTypeA:1; // bit 36
UINT32 DriverTypeC:1; // bit 37
UINT32 DriverTypeD:1; // bit 38
UINT32 DriverType4:1; // bit 39
UINT32 TimerCount:4; // bit 40:43
UINT32 Reserved5:1; // bit 44
UINT32 TuningSDR50:1; // bit 45
UINT32 RetuningMod:2; // bit 46:47
UINT32 ClkMultiplier:8; // bit 48:55
UINT32 Reserved6:7; // bit 56:62
UINT32 Hs400:1; // bit 63
UINT32 TimeoutFreq : 6; // bit 0:5
UINT32 Reserved : 1; // bit 6
UINT32 TimeoutUnit : 1; // bit 7
UINT32 BaseClkFreq : 8; // bit 8:15
UINT32 MaxBlkLen : 2; // bit 16:17
UINT32 BusWidth8 : 1; // bit 18
UINT32 Adma2 : 1; // bit 19
UINT32 Reserved2 : 1; // bit 20
UINT32 HighSpeed : 1; // bit 21
UINT32 Sdma : 1; // bit 22
UINT32 SuspRes : 1; // bit 23
UINT32 Voltage33 : 1; // bit 24
UINT32 Voltage30 : 1; // bit 25
UINT32 Voltage18 : 1; // bit 26
UINT32 Reserved3 : 1; // bit 27
UINT32 SysBus64 : 1; // bit 28
UINT32 AsyncInt : 1; // bit 29
UINT32 SlotType : 2; // bit 30:31
UINT32 Sdr50 : 1; // bit 32
UINT32 Sdr104 : 1; // bit 33
UINT32 Ddr50 : 1; // bit 34
UINT32 Reserved4 : 1; // bit 35
UINT32 DriverTypeA : 1; // bit 36
UINT32 DriverTypeC : 1; // bit 37
UINT32 DriverTypeD : 1; // bit 38
UINT32 DriverType4 : 1; // bit 39
UINT32 TimerCount : 4; // bit 40:43
UINT32 Reserved5 : 1; // bit 44
UINT32 TuningSDR50 : 1; // bit 45
UINT32 RetuningMod : 2; // bit 46:47
UINT32 ClkMultiplier : 8; // bit 48:55
UINT32 Reserved6 : 7; // bit 56:62
UINT32 Hs400 : 1; // bit 63
} EMMC_HC_SLOT_CAP;
#pragma pack()
@@ -170,7 +170,7 @@ typedef struct {
**/
EFI_STATUS
EmmcPeimHcReset (
IN UINTN Bar
IN UINTN Bar
);
/**
@@ -185,7 +185,7 @@ EmmcPeimHcReset (
**/
EFI_STATUS
EmmcPeimHcEnableInterrupt (
IN UINTN Bar
IN UINTN Bar
);
/**
@@ -200,8 +200,8 @@ EmmcPeimHcEnableInterrupt (
**/
EFI_STATUS
EmmcPeimHcGetCapability (
IN UINTN Bar,
OUT EMMC_HC_SLOT_CAP *Capability
IN UINTN Bar,
OUT EMMC_HC_SLOT_CAP *Capability
);
/**
@@ -219,7 +219,7 @@ EmmcPeimHcGetCapability (
**/
EFI_STATUS
EmmcPeimHcCardDetect (
IN UINTN Bar
IN UINTN Bar
);
/**
@@ -234,7 +234,7 @@ EmmcPeimHcCardDetect (
**/
EFI_STATUS
EmmcPeimHcInitHost (
IN UINTN Bar
IN UINTN Bar
);
/**
@@ -255,11 +255,11 @@ EmmcPeimHcInitHost (
**/
EFI_STATUS
EmmcPeimSwitch (
IN EMMC_PEIM_HC_SLOT *Slot,
IN UINT8 Access,
IN UINT8 Index,
IN UINT8 Value,
IN UINT8 CmdSet
IN EMMC_PEIM_HC_SLOT *Slot,
IN UINT8 Access,
IN UINT8 Index,
IN UINT8 Value,
IN UINT8 CmdSet
);
/**
@@ -277,8 +277,8 @@ EmmcPeimSwitch (
**/
EFI_STATUS
EmmcPeimSetBlkCount (
IN EMMC_PEIM_HC_SLOT *Slot,
IN UINT16 BlockCount
IN EMMC_PEIM_HC_SLOT *Slot,
IN UINT16 BlockCount
);
/**
@@ -300,12 +300,12 @@ EmmcPeimSetBlkCount (
**/
EFI_STATUS
EmmcPeimRwMultiBlocks (
IN EMMC_PEIM_HC_SLOT *Slot,
IN EFI_LBA Lba,
IN UINT32 BlockSize,
IN VOID *Buffer,
IN UINTN BufferSize,
IN BOOLEAN IsRead
IN EMMC_PEIM_HC_SLOT *Slot,
IN EFI_LBA Lba,
IN UINT32 BlockSize,
IN VOID *Buffer,
IN UINTN BufferSize,
IN BOOLEAN IsRead
);
/**
@@ -321,7 +321,7 @@ EmmcPeimRwMultiBlocks (
**/
EFI_STATUS
EmmcPeimIdentification (
IN EMMC_PEIM_HC_SLOT *Slot
IN EMMC_PEIM_HC_SLOT *Slot
);
/**
@@ -332,8 +332,7 @@ EmmcPeimIdentification (
**/
VOID
EmmcPeimFreeTrb (
IN EMMC_TRB *Trb
IN EMMC_TRB *Trb
);
#endif

View File

@@ -11,17 +11,17 @@
//
// Driver name table
//
GLOBAL_REMOVE_IF_UNREFERENCED EFI_UNICODE_STRING_TABLE mEmmcDxeDriverNameTable[] = {
GLOBAL_REMOVE_IF_UNREFERENCED EFI_UNICODE_STRING_TABLE mEmmcDxeDriverNameTable[] = {
{ "eng;en", L"Edkii Emmc Device Driver" },
{ NULL , NULL }
{ NULL, NULL }
};
//
// Controller name table
//
GLOBAL_REMOVE_IF_UNREFERENCED EFI_UNICODE_STRING_TABLE mEmmcDxeControllerNameTable[] = {
GLOBAL_REMOVE_IF_UNREFERENCED EFI_UNICODE_STRING_TABLE mEmmcDxeControllerNameTable[] = {
{ "eng;en", L"Edkii Emmc Host Controller" },
{ NULL , NULL }
{ NULL, NULL }
};
//
@@ -36,9 +36,9 @@ GLOBAL_REMOVE_IF_UNREFERENCED EFI_COMPONENT_NAME_PROTOCOL gEmmcDxeComponentName
//
// EFI Component Name 2 Protocol
//
GLOBAL_REMOVE_IF_UNREFERENCED EFI_COMPONENT_NAME2_PROTOCOL gEmmcDxeComponentName2 = {
(EFI_COMPONENT_NAME2_GET_DRIVER_NAME) EmmcDxeComponentNameGetDriverName,
(EFI_COMPONENT_NAME2_GET_CONTROLLER_NAME) EmmcDxeComponentNameGetControllerName,
GLOBAL_REMOVE_IF_UNREFERENCED EFI_COMPONENT_NAME2_PROTOCOL gEmmcDxeComponentName2 = {
(EFI_COMPONENT_NAME2_GET_DRIVER_NAME)EmmcDxeComponentNameGetDriverName,
(EFI_COMPONENT_NAME2_GET_CONTROLLER_NAME)EmmcDxeComponentNameGetControllerName,
"en"
};
@@ -96,7 +96,6 @@ EmmcDxeComponentNameGetDriverName (
DriverName,
(BOOLEAN)(This == &gEmmcDxeComponentName)
);
}
/**
@@ -170,11 +169,11 @@ EmmcDxeComponentNameGetDriverName (
EFI_STATUS
EFIAPI
EmmcDxeComponentNameGetControllerName (
IN EFI_COMPONENT_NAME_PROTOCOL *This,
IN EFI_HANDLE ControllerHandle,
IN EFI_HANDLE ChildHandle OPTIONAL,
IN CHAR8 *Language,
OUT CHAR16 **ControllerName
IN EFI_COMPONENT_NAME_PROTOCOL *This,
IN EFI_HANDLE ControllerHandle,
IN EFI_HANDLE ChildHandle OPTIONAL,
IN CHAR8 *Language,
OUT CHAR16 **ControllerName
)
{
EFI_STATUS Status;
@@ -205,13 +204,14 @@ EmmcDxeComponentNameGetControllerName (
if (EFI_ERROR (Status)) {
return Status;
}
//
// Get the child context
//
Status = gBS->OpenProtocol (
ChildHandle,
&gEfiBlockIoProtocolGuid,
(VOID **) &BlockIo,
(VOID **)&BlockIo,
gEmmcDxeDriverBinding.DriverBindingHandle,
ChildHandle,
EFI_OPEN_PROTOCOL_GET_PROTOCOL
@@ -220,8 +220,8 @@ EmmcDxeComponentNameGetControllerName (
return EFI_UNSUPPORTED;
}
Partition = EMMC_PARTITION_DATA_FROM_BLKIO (BlockIo);
Device = Partition->Device;
Partition = EMMC_PARTITION_DATA_FROM_BLKIO (BlockIo);
Device = Partition->Device;
ControllerNameTable = Device->ControllerNameTable;
}
@@ -233,4 +233,3 @@ EmmcDxeComponentNameGetControllerName (
(BOOLEAN)(This == &gEmmcDxeComponentName)
);
}

File diff suppressed because it is too large Load Diff

View File

@@ -26,8 +26,8 @@
EFI_STATUS
EFIAPI
EmmcReset (
IN EFI_BLOCK_IO_PROTOCOL *This,
IN BOOLEAN ExtendedVerification
IN EFI_BLOCK_IO_PROTOCOL *This,
IN BOOLEAN ExtendedVerification
);
/**
@@ -56,7 +56,7 @@ EmmcReadBlocks (
IN UINT32 MediaId,
IN EFI_LBA Lba,
IN UINTN BufferSize,
OUT VOID *Buffer
OUT VOID *Buffer
);
/**
@@ -82,11 +82,11 @@ EmmcReadBlocks (
EFI_STATUS
EFIAPI
EmmcWriteBlocks (
IN EFI_BLOCK_IO_PROTOCOL *This,
IN UINT32 MediaId,
IN EFI_LBA Lba,
IN UINTN BufferSize,
IN VOID *Buffer
IN EFI_BLOCK_IO_PROTOCOL *This,
IN UINT32 MediaId,
IN EFI_LBA Lba,
IN UINTN BufferSize,
IN VOID *Buffer
);
/**
@@ -102,7 +102,7 @@ EmmcWriteBlocks (
EFI_STATUS
EFIAPI
EmmcFlushBlocks (
IN EFI_BLOCK_IO_PROTOCOL *This
IN EFI_BLOCK_IO_PROTOCOL *This
);
/**
@@ -152,12 +152,12 @@ EmmcResetEx (
EFI_STATUS
EFIAPI
EmmcReadBlocksEx (
IN EFI_BLOCK_IO2_PROTOCOL *This,
IN UINT32 MediaId,
IN EFI_LBA Lba,
IN OUT EFI_BLOCK_IO2_TOKEN *Token,
IN UINTN BufferSize,
OUT VOID *Buffer
IN EFI_BLOCK_IO2_PROTOCOL *This,
IN UINT32 MediaId,
IN EFI_LBA Lba,
IN OUT EFI_BLOCK_IO2_TOKEN *Token,
IN UINTN BufferSize,
OUT VOID *Buffer
);
/**
@@ -185,12 +185,12 @@ EmmcReadBlocksEx (
EFI_STATUS
EFIAPI
EmmcWriteBlocksEx (
IN EFI_BLOCK_IO2_PROTOCOL *This,
IN UINT32 MediaId,
IN EFI_LBA Lba,
IN OUT EFI_BLOCK_IO2_TOKEN *Token,
IN UINTN BufferSize,
IN VOID *Buffer
IN EFI_BLOCK_IO2_PROTOCOL *This,
IN UINT32 MediaId,
IN EFI_LBA Lba,
IN OUT EFI_BLOCK_IO2_TOKEN *Token,
IN UINTN BufferSize,
IN VOID *Buffer
);
/**
@@ -287,15 +287,15 @@ EmmcFlushBlocksEx (
EFI_STATUS
EFIAPI
EmmcSecurityProtocolInOut (
IN EFI_STORAGE_SECURITY_COMMAND_PROTOCOL *This,
IN UINT32 MediaId,
IN UINT64 Timeout,
IN UINT8 SecurityProtocolId,
IN UINT16 SecurityProtocolSpecificData,
IN UINTN PayloadBufferSize,
OUT VOID *PayloadBuffer,
OUT UINTN *PayloadTransferSize,
IN BOOLEAN IsRead
IN EFI_STORAGE_SECURITY_COMMAND_PROTOCOL *This,
IN UINT32 MediaId,
IN UINT64 Timeout,
IN UINT8 SecurityProtocolId,
IN UINT16 SecurityProtocolSpecificData,
IN UINTN PayloadBufferSize,
OUT VOID *PayloadBuffer,
OUT UINTN *PayloadTransferSize,
IN BOOLEAN IsRead
);
/**
@@ -373,14 +373,14 @@ EmmcSecurityProtocolInOut (
EFI_STATUS
EFIAPI
EmmcSecurityProtocolIn (
IN EFI_STORAGE_SECURITY_COMMAND_PROTOCOL *This,
IN UINT32 MediaId,
IN UINT64 Timeout,
IN UINT8 SecurityProtocolId,
IN UINT16 SecurityProtocolSpecificData,
IN UINTN PayloadBufferSize,
OUT VOID *PayloadBuffer,
OUT UINTN *PayloadTransferSize
IN EFI_STORAGE_SECURITY_COMMAND_PROTOCOL *This,
IN UINT32 MediaId,
IN UINT64 Timeout,
IN UINT8 SecurityProtocolId,
IN UINT16 SecurityProtocolSpecificData,
IN UINTN PayloadBufferSize,
OUT VOID *PayloadBuffer,
OUT UINTN *PayloadTransferSize
);
/**
@@ -447,13 +447,13 @@ EmmcSecurityProtocolIn (
EFI_STATUS
EFIAPI
EmmcSecurityProtocolOut (
IN EFI_STORAGE_SECURITY_COMMAND_PROTOCOL *This,
IN UINT32 MediaId,
IN UINT64 Timeout,
IN UINT8 SecurityProtocolId,
IN UINT16 SecurityProtocolSpecificData,
IN UINTN PayloadBufferSize,
IN VOID *PayloadBuffer
IN EFI_STORAGE_SECURITY_COMMAND_PROTOCOL *This,
IN UINT32 MediaId,
IN UINT64 Timeout,
IN UINT8 SecurityProtocolId,
IN UINT16 SecurityProtocolSpecificData,
IN UINTN PayloadBufferSize,
IN VOID *PayloadBuffer
);
/**
@@ -486,12 +486,11 @@ EmmcSecurityProtocolOut (
EFI_STATUS
EFIAPI
EmmcEraseBlocks (
IN EFI_ERASE_BLOCK_PROTOCOL *This,
IN UINT32 MediaId,
IN EFI_LBA Lba,
IN OUT EFI_ERASE_BLOCK_TOKEN *Token,
IN UINTN Size
IN EFI_ERASE_BLOCK_PROTOCOL *This,
IN UINT32 MediaId,
IN EFI_LBA Lba,
IN OUT EFI_ERASE_BLOCK_TOKEN *Token,
IN UINTN Size
);
#endif

View File

@@ -32,9 +32,9 @@ EmmcDiskInfoInquiry (
IN OUT UINT32 *InquiryDataSize
)
{
EFI_STATUS Status;
EMMC_PARTITION *Partition;
EMMC_DEVICE *Device;
EFI_STATUS Status;
EMMC_PARTITION *Partition;
EMMC_DEVICE *Device;
Partition = EMMC_PARTITION_DATA_FROM_DISKINFO (This);
Device = Partition->Device;

View File

@@ -14,7 +14,7 @@
//
// EmmcDxe Driver Binding Protocol Instance
//
EFI_DRIVER_BINDING_PROTOCOL gEmmcDxeDriverBinding = {
EFI_DRIVER_BINDING_PROTOCOL gEmmcDxeDriverBinding = {
EmmcDxeDriverBindingSupported,
EmmcDxeDriverBindingStart,
EmmcDxeDriverBindingStop,
@@ -26,7 +26,7 @@ EFI_DRIVER_BINDING_PROTOCOL gEmmcDxeDriverBinding = {
//
// Template for Emmc Partitions.
//
EMMC_PARTITION mEmmcPartitionTemplate = {
EMMC_PARTITION mEmmcPartitionTemplate = {
EMMC_PARTITION_SIGNATURE, // Signature
FALSE, // Enable
EmmcPartitionUnknown, // PartitionType
@@ -93,39 +93,39 @@ DumpCsd (
IN EMMC_CSD *Csd
)
{
DEBUG((DEBUG_INFO, "== Dump Emmc Csd Register==\n"));
DEBUG((DEBUG_INFO, " CSD structure 0x%x\n", Csd->CsdStructure));
DEBUG((DEBUG_INFO, " System specification version 0x%x\n", Csd->SpecVers));
DEBUG((DEBUG_INFO, " Data read access-time 1 0x%x\n", Csd->Taac));
DEBUG((DEBUG_INFO, " Data read access-time 2 0x%x\n", Csd->Nsac));
DEBUG((DEBUG_INFO, " Max. bus clock frequency 0x%x\n", Csd->TranSpeed));
DEBUG((DEBUG_INFO, " Device command classes 0x%x\n", Csd->Ccc));
DEBUG((DEBUG_INFO, " Max. read data block length 0x%x\n", Csd->ReadBlLen));
DEBUG((DEBUG_INFO, " Partial blocks for read allowed 0x%x\n", Csd->ReadBlPartial));
DEBUG((DEBUG_INFO, " Write block misalignment 0x%x\n", Csd->WriteBlkMisalign));
DEBUG((DEBUG_INFO, " Read block misalignment 0x%x\n", Csd->ReadBlkMisalign));
DEBUG((DEBUG_INFO, " DSR implemented 0x%x\n", Csd->DsrImp));
DEBUG((DEBUG_INFO, " Device size 0x%x\n", Csd->CSizeLow | (Csd->CSizeHigh << 2)));
DEBUG((DEBUG_INFO, " Max. read current @ VDD min 0x%x\n", Csd->VddRCurrMin));
DEBUG((DEBUG_INFO, " Max. read current @ VDD max 0x%x\n", Csd->VddRCurrMax));
DEBUG((DEBUG_INFO, " Max. write current @ VDD min 0x%x\n", Csd->VddWCurrMin));
DEBUG((DEBUG_INFO, " Max. write current @ VDD max 0x%x\n", Csd->VddWCurrMax));
DEBUG((DEBUG_INFO, " Device size multiplier 0x%x\n", Csd->CSizeMult));
DEBUG((DEBUG_INFO, " Erase group size 0x%x\n", Csd->EraseGrpSize));
DEBUG((DEBUG_INFO, " Erase group size multiplier 0x%x\n", Csd->EraseGrpMult));
DEBUG((DEBUG_INFO, " Write protect group size 0x%x\n", Csd->WpGrpSize));
DEBUG((DEBUG_INFO, " Write protect group enable 0x%x\n", Csd->WpGrpEnable));
DEBUG((DEBUG_INFO, " Manufacturer default ECC 0x%x\n", Csd->DefaultEcc));
DEBUG((DEBUG_INFO, " Write speed factor 0x%x\n", Csd->R2WFactor));
DEBUG((DEBUG_INFO, " Max. write data block length 0x%x\n", Csd->WriteBlLen));
DEBUG((DEBUG_INFO, " Partial blocks for write allowed 0x%x\n", Csd->WriteBlPartial));
DEBUG((DEBUG_INFO, " Content protection application 0x%x\n", Csd->ContentProtApp));
DEBUG((DEBUG_INFO, " File format group 0x%x\n", Csd->FileFormatGrp));
DEBUG((DEBUG_INFO, " Copy flag (OTP) 0x%x\n", Csd->Copy));
DEBUG((DEBUG_INFO, " Permanent write protection 0x%x\n", Csd->PermWriteProtect));
DEBUG((DEBUG_INFO, " Temporary write protection 0x%x\n", Csd->TmpWriteProtect));
DEBUG((DEBUG_INFO, " File format 0x%x\n", Csd->FileFormat));
DEBUG((DEBUG_INFO, " ECC code 0x%x\n", Csd->Ecc));
DEBUG ((DEBUG_INFO, "== Dump Emmc Csd Register==\n"));
DEBUG ((DEBUG_INFO, " CSD structure 0x%x\n", Csd->CsdStructure));
DEBUG ((DEBUG_INFO, " System specification version 0x%x\n", Csd->SpecVers));
DEBUG ((DEBUG_INFO, " Data read access-time 1 0x%x\n", Csd->Taac));
DEBUG ((DEBUG_INFO, " Data read access-time 2 0x%x\n", Csd->Nsac));
DEBUG ((DEBUG_INFO, " Max. bus clock frequency 0x%x\n", Csd->TranSpeed));
DEBUG ((DEBUG_INFO, " Device command classes 0x%x\n", Csd->Ccc));
DEBUG ((DEBUG_INFO, " Max. read data block length 0x%x\n", Csd->ReadBlLen));
DEBUG ((DEBUG_INFO, " Partial blocks for read allowed 0x%x\n", Csd->ReadBlPartial));
DEBUG ((DEBUG_INFO, " Write block misalignment 0x%x\n", Csd->WriteBlkMisalign));
DEBUG ((DEBUG_INFO, " Read block misalignment 0x%x\n", Csd->ReadBlkMisalign));
DEBUG ((DEBUG_INFO, " DSR implemented 0x%x\n", Csd->DsrImp));
DEBUG ((DEBUG_INFO, " Device size 0x%x\n", Csd->CSizeLow | (Csd->CSizeHigh << 2)));
DEBUG ((DEBUG_INFO, " Max. read current @ VDD min 0x%x\n", Csd->VddRCurrMin));
DEBUG ((DEBUG_INFO, " Max. read current @ VDD max 0x%x\n", Csd->VddRCurrMax));
DEBUG ((DEBUG_INFO, " Max. write current @ VDD min 0x%x\n", Csd->VddWCurrMin));
DEBUG ((DEBUG_INFO, " Max. write current @ VDD max 0x%x\n", Csd->VddWCurrMax));
DEBUG ((DEBUG_INFO, " Device size multiplier 0x%x\n", Csd->CSizeMult));
DEBUG ((DEBUG_INFO, " Erase group size 0x%x\n", Csd->EraseGrpSize));
DEBUG ((DEBUG_INFO, " Erase group size multiplier 0x%x\n", Csd->EraseGrpMult));
DEBUG ((DEBUG_INFO, " Write protect group size 0x%x\n", Csd->WpGrpSize));
DEBUG ((DEBUG_INFO, " Write protect group enable 0x%x\n", Csd->WpGrpEnable));
DEBUG ((DEBUG_INFO, " Manufacturer default ECC 0x%x\n", Csd->DefaultEcc));
DEBUG ((DEBUG_INFO, " Write speed factor 0x%x\n", Csd->R2WFactor));
DEBUG ((DEBUG_INFO, " Max. write data block length 0x%x\n", Csd->WriteBlLen));
DEBUG ((DEBUG_INFO, " Partial blocks for write allowed 0x%x\n", Csd->WriteBlPartial));
DEBUG ((DEBUG_INFO, " Content protection application 0x%x\n", Csd->ContentProtApp));
DEBUG ((DEBUG_INFO, " File format group 0x%x\n", Csd->FileFormatGrp));
DEBUG ((DEBUG_INFO, " Copy flag (OTP) 0x%x\n", Csd->Copy));
DEBUG ((DEBUG_INFO, " Permanent write protection 0x%x\n", Csd->PermWriteProtect));
DEBUG ((DEBUG_INFO, " Temporary write protection 0x%x\n", Csd->TmpWriteProtect));
DEBUG ((DEBUG_INFO, " File format 0x%x\n", Csd->FileFormat));
DEBUG ((DEBUG_INFO, " ECC code 0x%x\n", Csd->Ecc));
return EFI_SUCCESS;
}
@@ -142,68 +142,98 @@ DumpExtCsd (
IN EMMC_EXT_CSD *ExtCsd
)
{
DEBUG((DEBUG_INFO, "==Dump Emmc ExtCsd Register==\n"));
DEBUG((DEBUG_INFO, " Supported Command Sets 0x%x\n", ExtCsd->CmdSet));
DEBUG((DEBUG_INFO, " HPI features 0x%x\n", ExtCsd->HpiFeatures));
DEBUG((DEBUG_INFO, " Background operations support 0x%x\n", ExtCsd->BkOpsSupport));
DEBUG((DEBUG_INFO, " Background operations status 0x%x\n", ExtCsd->BkopsStatus));
DEBUG((DEBUG_INFO, " Number of correctly programmed sectors 0x%x\n", *((UINT32*)&ExtCsd->CorrectlyPrgSectorsNum[0])));
DEBUG((DEBUG_INFO, " Initialization time after partitioning 0x%x\n", ExtCsd->IniTimeoutAp));
DEBUG((DEBUG_INFO, " TRIM Multiplier 0x%x\n", ExtCsd->TrimMult));
DEBUG((DEBUG_INFO, " Secure Feature support 0x%x\n", ExtCsd->SecFeatureSupport));
DEBUG((DEBUG_INFO, " Secure Erase Multiplier 0x%x\n", ExtCsd->SecEraseMult));
DEBUG((DEBUG_INFO, " Secure TRIM Multiplier 0x%x\n", ExtCsd->SecTrimMult));
DEBUG((DEBUG_INFO, " Boot information 0x%x\n", ExtCsd->BootInfo));
DEBUG((DEBUG_INFO, " Boot partition size 0x%x\n", ExtCsd->BootSizeMult));
DEBUG((DEBUG_INFO, " Access size 0x%x\n", ExtCsd->AccSize));
DEBUG((DEBUG_INFO, " High-capacity erase unit size 0x%x\n", ExtCsd->HcEraseGrpSize));
DEBUG((DEBUG_INFO, " High-capacity erase timeout 0x%x\n", ExtCsd->EraseTimeoutMult));
DEBUG((DEBUG_INFO, " Reliable write sector count 0x%x\n", ExtCsd->RelWrSecC));
DEBUG((DEBUG_INFO, " High-capacity write protect group size 0x%x\n", ExtCsd->HcWpGrpSize));
DEBUG((DEBUG_INFO, " Sleep/awake timeout 0x%x\n", ExtCsd->SATimeout));
DEBUG((DEBUG_INFO, " Sector Count 0x%x\n", *((UINT32*)&ExtCsd->SecCount[0])));
DEBUG((DEBUG_INFO, " Partition switching timing 0x%x\n", ExtCsd->PartitionSwitchTime));
DEBUG((DEBUG_INFO, " Out-of-interrupt busy timing 0x%x\n", ExtCsd->OutOfInterruptTime));
DEBUG((DEBUG_INFO, " I/O Driver Strength 0x%x\n", ExtCsd->DriverStrength));
DEBUG((DEBUG_INFO, " Device type 0x%x\n", ExtCsd->DeviceType));
DEBUG((DEBUG_INFO, " CSD STRUCTURE 0x%x\n", ExtCsd->CsdStructure));
DEBUG((DEBUG_INFO, " Extended CSD revision 0x%x\n", ExtCsd->ExtCsdRev));
DEBUG((DEBUG_INFO, " Command set 0x%x\n", ExtCsd->CmdSet));
DEBUG((DEBUG_INFO, " Command set revision 0x%x\n", ExtCsd->CmdSetRev));
DEBUG((DEBUG_INFO, " Power class 0x%x\n", ExtCsd->PowerClass));
DEBUG((DEBUG_INFO, " High-speed interface timing 0x%x\n", ExtCsd->HsTiming));
DEBUG((DEBUG_INFO, " Bus width mode 0x%x\n", ExtCsd->BusWidth));
DEBUG((DEBUG_INFO, " Erased memory content 0x%x\n", ExtCsd->ErasedMemCont));
DEBUG((DEBUG_INFO, " Partition configuration 0x%x\n", ExtCsd->PartitionConfig));
DEBUG((DEBUG_INFO, " Boot config protection 0x%x\n", ExtCsd->BootConfigProt));
DEBUG((DEBUG_INFO, " Boot bus Conditions 0x%x\n", ExtCsd->BootBusConditions));
DEBUG((DEBUG_INFO, " High-density erase group definition 0x%x\n", ExtCsd->EraseGroupDef));
DEBUG((DEBUG_INFO, " Boot write protection status register 0x%x\n", ExtCsd->BootWpStatus));
DEBUG((DEBUG_INFO, " Boot area write protection register 0x%x\n", ExtCsd->BootWp));
DEBUG((DEBUG_INFO, " User area write protection register 0x%x\n", ExtCsd->UserWp));
DEBUG((DEBUG_INFO, " FW configuration 0x%x\n", ExtCsd->FwConfig));
DEBUG((DEBUG_INFO, " RPMB Size 0x%x\n", ExtCsd->RpmbSizeMult));
DEBUG((DEBUG_INFO, " H/W reset function 0x%x\n", ExtCsd->RstFunction));
DEBUG((DEBUG_INFO, " Partitioning Support 0x%x\n", ExtCsd->PartitioningSupport));
DEBUG((DEBUG_INFO, " Max Enhanced Area Size 0x%02x%02x%02x\n", \
ExtCsd->MaxEnhSizeMult[2], ExtCsd->MaxEnhSizeMult[1], ExtCsd->MaxEnhSizeMult[0]));
DEBUG((DEBUG_INFO, " Partitions attribute 0x%x\n", ExtCsd->PartitionsAttribute));
DEBUG((DEBUG_INFO, " Partitioning Setting 0x%x\n", ExtCsd->PartitionSettingCompleted));
DEBUG((DEBUG_INFO, " General Purpose Partition 1 Size 0x%02x%02x%02x\n", \
ExtCsd->GpSizeMult[2], ExtCsd->GpSizeMult[1], ExtCsd->GpSizeMult[0]));
DEBUG((DEBUG_INFO, " General Purpose Partition 2 Size 0x%02x%02x%02x\n", \
ExtCsd->GpSizeMult[5], ExtCsd->GpSizeMult[4], ExtCsd->GpSizeMult[3]));
DEBUG((DEBUG_INFO, " General Purpose Partition 3 Size 0x%02x%02x%02x\n", \
ExtCsd->GpSizeMult[8], ExtCsd->GpSizeMult[7], ExtCsd->GpSizeMult[6]));
DEBUG((DEBUG_INFO, " General Purpose Partition 4 Size 0x%02x%02x%02x\n", \
ExtCsd->GpSizeMult[11], ExtCsd->GpSizeMult[10], ExtCsd->GpSizeMult[9]));
DEBUG((DEBUG_INFO, " Enhanced User Data Area Size 0x%02x%02x%02x\n", \
ExtCsd->EnhSizeMult[2], ExtCsd->EnhSizeMult[1], ExtCsd->EnhSizeMult[0]));
DEBUG((DEBUG_INFO, " Enhanced User Data Start Address 0x%x\n", *((UINT32*)&ExtCsd->EnhStartAddr[0])));
DEBUG((DEBUG_INFO, " Bad Block Management mode 0x%x\n", ExtCsd->SecBadBlkMgmnt));
DEBUG((DEBUG_INFO, " Native sector size 0x%x\n", ExtCsd->NativeSectorSize));
DEBUG((DEBUG_INFO, " Sector size emulation 0x%x\n", ExtCsd->UseNativeSector));
DEBUG((DEBUG_INFO, " Sector size 0x%x\n", ExtCsd->DataSectorSize));
DEBUG ((DEBUG_INFO, "==Dump Emmc ExtCsd Register==\n"));
DEBUG ((DEBUG_INFO, " Supported Command Sets 0x%x\n", ExtCsd->CmdSet));
DEBUG ((DEBUG_INFO, " HPI features 0x%x\n", ExtCsd->HpiFeatures));
DEBUG ((DEBUG_INFO, " Background operations support 0x%x\n", ExtCsd->BkOpsSupport));
DEBUG ((DEBUG_INFO, " Background operations status 0x%x\n", ExtCsd->BkopsStatus));
DEBUG ((DEBUG_INFO, " Number of correctly programmed sectors 0x%x\n", *((UINT32 *)&ExtCsd->CorrectlyPrgSectorsNum[0])));
DEBUG ((DEBUG_INFO, " Initialization time after partitioning 0x%x\n", ExtCsd->IniTimeoutAp));
DEBUG ((DEBUG_INFO, " TRIM Multiplier 0x%x\n", ExtCsd->TrimMult));
DEBUG ((DEBUG_INFO, " Secure Feature support 0x%x\n", ExtCsd->SecFeatureSupport));
DEBUG ((DEBUG_INFO, " Secure Erase Multiplier 0x%x\n", ExtCsd->SecEraseMult));
DEBUG ((DEBUG_INFO, " Secure TRIM Multiplier 0x%x\n", ExtCsd->SecTrimMult));
DEBUG ((DEBUG_INFO, " Boot information 0x%x\n", ExtCsd->BootInfo));
DEBUG ((DEBUG_INFO, " Boot partition size 0x%x\n", ExtCsd->BootSizeMult));
DEBUG ((DEBUG_INFO, " Access size 0x%x\n", ExtCsd->AccSize));
DEBUG ((DEBUG_INFO, " High-capacity erase unit size 0x%x\n", ExtCsd->HcEraseGrpSize));
DEBUG ((DEBUG_INFO, " High-capacity erase timeout 0x%x\n", ExtCsd->EraseTimeoutMult));
DEBUG ((DEBUG_INFO, " Reliable write sector count 0x%x\n", ExtCsd->RelWrSecC));
DEBUG ((DEBUG_INFO, " High-capacity write protect group size 0x%x\n", ExtCsd->HcWpGrpSize));
DEBUG ((DEBUG_INFO, " Sleep/awake timeout 0x%x\n", ExtCsd->SATimeout));
DEBUG ((DEBUG_INFO, " Sector Count 0x%x\n", *((UINT32 *)&ExtCsd->SecCount[0])));
DEBUG ((DEBUG_INFO, " Partition switching timing 0x%x\n", ExtCsd->PartitionSwitchTime));
DEBUG ((DEBUG_INFO, " Out-of-interrupt busy timing 0x%x\n", ExtCsd->OutOfInterruptTime));
DEBUG ((DEBUG_INFO, " I/O Driver Strength 0x%x\n", ExtCsd->DriverStrength));
DEBUG ((DEBUG_INFO, " Device type 0x%x\n", ExtCsd->DeviceType));
DEBUG ((DEBUG_INFO, " CSD STRUCTURE 0x%x\n", ExtCsd->CsdStructure));
DEBUG ((DEBUG_INFO, " Extended CSD revision 0x%x\n", ExtCsd->ExtCsdRev));
DEBUG ((DEBUG_INFO, " Command set 0x%x\n", ExtCsd->CmdSet));
DEBUG ((DEBUG_INFO, " Command set revision 0x%x\n", ExtCsd->CmdSetRev));
DEBUG ((DEBUG_INFO, " Power class 0x%x\n", ExtCsd->PowerClass));
DEBUG ((DEBUG_INFO, " High-speed interface timing 0x%x\n", ExtCsd->HsTiming));
DEBUG ((DEBUG_INFO, " Bus width mode 0x%x\n", ExtCsd->BusWidth));
DEBUG ((DEBUG_INFO, " Erased memory content 0x%x\n", ExtCsd->ErasedMemCont));
DEBUG ((DEBUG_INFO, " Partition configuration 0x%x\n", ExtCsd->PartitionConfig));
DEBUG ((DEBUG_INFO, " Boot config protection 0x%x\n", ExtCsd->BootConfigProt));
DEBUG ((DEBUG_INFO, " Boot bus Conditions 0x%x\n", ExtCsd->BootBusConditions));
DEBUG ((DEBUG_INFO, " High-density erase group definition 0x%x\n", ExtCsd->EraseGroupDef));
DEBUG ((DEBUG_INFO, " Boot write protection status register 0x%x\n", ExtCsd->BootWpStatus));
DEBUG ((DEBUG_INFO, " Boot area write protection register 0x%x\n", ExtCsd->BootWp));
DEBUG ((DEBUG_INFO, " User area write protection register 0x%x\n", ExtCsd->UserWp));
DEBUG ((DEBUG_INFO, " FW configuration 0x%x\n", ExtCsd->FwConfig));
DEBUG ((DEBUG_INFO, " RPMB Size 0x%x\n", ExtCsd->RpmbSizeMult));
DEBUG ((DEBUG_INFO, " H/W reset function 0x%x\n", ExtCsd->RstFunction));
DEBUG ((DEBUG_INFO, " Partitioning Support 0x%x\n", ExtCsd->PartitioningSupport));
DEBUG ((
DEBUG_INFO,
" Max Enhanced Area Size 0x%02x%02x%02x\n", \
ExtCsd->MaxEnhSizeMult[2],
ExtCsd->MaxEnhSizeMult[1],
ExtCsd->MaxEnhSizeMult[0]
));
DEBUG ((DEBUG_INFO, " Partitions attribute 0x%x\n", ExtCsd->PartitionsAttribute));
DEBUG ((DEBUG_INFO, " Partitioning Setting 0x%x\n", ExtCsd->PartitionSettingCompleted));
DEBUG ((
DEBUG_INFO,
" General Purpose Partition 1 Size 0x%02x%02x%02x\n", \
ExtCsd->GpSizeMult[2],
ExtCsd->GpSizeMult[1],
ExtCsd->GpSizeMult[0]
));
DEBUG ((
DEBUG_INFO,
" General Purpose Partition 2 Size 0x%02x%02x%02x\n", \
ExtCsd->GpSizeMult[5],
ExtCsd->GpSizeMult[4],
ExtCsd->GpSizeMult[3]
));
DEBUG ((
DEBUG_INFO,
" General Purpose Partition 3 Size 0x%02x%02x%02x\n", \
ExtCsd->GpSizeMult[8],
ExtCsd->GpSizeMult[7],
ExtCsd->GpSizeMult[6]
));
DEBUG ((
DEBUG_INFO,
" General Purpose Partition 4 Size 0x%02x%02x%02x\n", \
ExtCsd->GpSizeMult[11],
ExtCsd->GpSizeMult[10],
ExtCsd->GpSizeMult[9]
));
DEBUG ((
DEBUG_INFO,
" Enhanced User Data Area Size 0x%02x%02x%02x\n", \
ExtCsd->EnhSizeMult[2],
ExtCsd->EnhSizeMult[1],
ExtCsd->EnhSizeMult[0]
));
DEBUG ((DEBUG_INFO, " Enhanced User Data Start Address 0x%x\n", *((UINT32 *)&ExtCsd->EnhStartAddr[0])));
DEBUG ((DEBUG_INFO, " Bad Block Management mode 0x%x\n", ExtCsd->SecBadBlkMgmnt));
DEBUG ((DEBUG_INFO, " Native sector size 0x%x\n", ExtCsd->NativeSectorSize));
DEBUG ((DEBUG_INFO, " Sector size emulation 0x%x\n", ExtCsd->UseNativeSector));
DEBUG ((DEBUG_INFO, " Sector size 0x%x\n", ExtCsd->DataSectorSize));
return EFI_SUCCESS;
}
@@ -219,8 +249,8 @@ DumpExtCsd (
**/
EFI_STATUS
GetEmmcModelName (
IN OUT EMMC_DEVICE *Device,
IN EMMC_CID *Cid
IN OUT EMMC_DEVICE *Device,
IN EMMC_CID *Cid
)
{
CHAR8 String[EMMC_MODEL_NAME_MAX_LEN];
@@ -248,27 +278,28 @@ GetEmmcModelName (
**/
EFI_STATUS
DiscoverAllPartitions (
IN EMMC_DEVICE *Device
IN EMMC_DEVICE *Device
)
{
EFI_STATUS Status;
EMMC_PARTITION *Partition;
EMMC_CSD *Csd;
EMMC_CID *Cid;
EMMC_EXT_CSD *ExtCsd;
UINT8 Slot;
UINT64 Capacity;
UINT32 DevStatus;
UINT8 Index;
UINT32 SecCount;
UINT32 GpSizeMult;
EFI_STATUS Status;
EMMC_PARTITION *Partition;
EMMC_CSD *Csd;
EMMC_CID *Cid;
EMMC_EXT_CSD *ExtCsd;
UINT8 Slot;
UINT64 Capacity;
UINT32 DevStatus;
UINT8 Index;
UINT32 SecCount;
UINT32 GpSizeMult;
Slot = Device->Slot;
Slot = Device->Slot;
Status = EmmcSendStatus (Device, Slot + 1, &DevStatus);
if (EFI_ERROR (Status)) {
return Status;
}
//
// Deselect the device to force it enter stby mode before getting CSD
// register content.
@@ -287,6 +318,7 @@ DiscoverAllPartitions (
if (EFI_ERROR (Status)) {
return Status;
}
DumpCsd (Csd);
if ((Csd->CSizeLow | Csd->CSizeHigh << 2) == 0xFFF) {
@@ -311,6 +343,7 @@ DiscoverAllPartitions (
if (EFI_ERROR (Status)) {
return Status;
}
DumpExtCsd (ExtCsd);
if (ExtCsd->ExtCsdRev < 5) {
@@ -326,22 +359,22 @@ DiscoverAllPartitions (
for (Index = 0; Index < EMMC_MAX_PARTITIONS; Index++) {
Partition = &Device->Partition[Index];
CopyMem (Partition, &mEmmcPartitionTemplate, sizeof (EMMC_PARTITION));
Partition->Device = Device;
Partition->Device = Device;
InitializeListHead (&Partition->Queue);
Partition->BlockIo.Media = &Partition->BlockMedia;
Partition->BlockIo2.Media = &Partition->BlockMedia;
Partition->PartitionType = Index;
Partition->BlockMedia.IoAlign = Device->Private->PassThru->IoAlign;
Partition->BlockMedia.BlockSize = 0x200;
Partition->BlockMedia.LastBlock = 0x00;
Partition->BlockMedia.RemovableMedia = FALSE;
Partition->BlockIo.Media = &Partition->BlockMedia;
Partition->BlockIo2.Media = &Partition->BlockMedia;
Partition->PartitionType = Index;
Partition->BlockMedia.IoAlign = Device->Private->PassThru->IoAlign;
Partition->BlockMedia.BlockSize = 0x200;
Partition->BlockMedia.LastBlock = 0x00;
Partition->BlockMedia.RemovableMedia = FALSE;
Partition->BlockMedia.MediaPresent = TRUE;
Partition->BlockMedia.LogicalPartition = FALSE;
switch (Index) {
case EmmcPartitionUserData:
SecCount = *(UINT32*)&ExtCsd->SecCount;
Capacity = MultU64x32 ((UINT64) SecCount, 0x200);
SecCount = *(UINT32 *)&ExtCsd->SecCount;
Capacity = MultU64x32 ((UINT64)SecCount, 0x200);
break;
case EmmcPartitionBoot1:
case EmmcPartitionBoot2:
@@ -352,19 +385,19 @@ DiscoverAllPartitions (
break;
case EmmcPartitionGP1:
GpSizeMult = (UINT32)(ExtCsd->GpSizeMult[0] | (ExtCsd->GpSizeMult[1] << 8) | (ExtCsd->GpSizeMult[2] << 16));
Capacity = MultU64x32 (MultU64x32 (MultU64x32 ((UINT64)GpSizeMult, ExtCsd->HcWpGrpSize), ExtCsd->HcEraseGrpSize), SIZE_512KB);
Capacity = MultU64x32 (MultU64x32 (MultU64x32 ((UINT64)GpSizeMult, ExtCsd->HcWpGrpSize), ExtCsd->HcEraseGrpSize), SIZE_512KB);
break;
case EmmcPartitionGP2:
GpSizeMult = (UINT32)(ExtCsd->GpSizeMult[3] | (ExtCsd->GpSizeMult[4] << 8) | (ExtCsd->GpSizeMult[5] << 16));
Capacity = MultU64x32 (MultU64x32 (MultU64x32 ((UINT64)GpSizeMult, ExtCsd->HcWpGrpSize), ExtCsd->HcEraseGrpSize), SIZE_512KB);
Capacity = MultU64x32 (MultU64x32 (MultU64x32 ((UINT64)GpSizeMult, ExtCsd->HcWpGrpSize), ExtCsd->HcEraseGrpSize), SIZE_512KB);
break;
case EmmcPartitionGP3:
GpSizeMult = (UINT32)(ExtCsd->GpSizeMult[6] | (ExtCsd->GpSizeMult[7] << 8) | (ExtCsd->GpSizeMult[8] << 16));
Capacity = MultU64x32 (MultU64x32 (MultU64x32 ((UINT64)GpSizeMult, ExtCsd->HcWpGrpSize), ExtCsd->HcEraseGrpSize), SIZE_512KB);
Capacity = MultU64x32 (MultU64x32 (MultU64x32 ((UINT64)GpSizeMult, ExtCsd->HcWpGrpSize), ExtCsd->HcEraseGrpSize), SIZE_512KB);
break;
case EmmcPartitionGP4:
GpSizeMult = (UINT32)(ExtCsd->GpSizeMult[9] | (ExtCsd->GpSizeMult[10] << 8) | (ExtCsd->GpSizeMult[11] << 16));
Capacity = MultU64x32 (MultU64x32 (MultU64x32 ((UINT64)GpSizeMult, ExtCsd->HcWpGrpSize), ExtCsd->HcEraseGrpSize), SIZE_512KB);
Capacity = MultU64x32 (MultU64x32 (MultU64x32 ((UINT64)GpSizeMult, ExtCsd->HcWpGrpSize), ExtCsd->HcEraseGrpSize), SIZE_512KB);
break;
default:
ASSERT (FALSE);
@@ -372,7 +405,7 @@ DiscoverAllPartitions (
}
if (Capacity != 0) {
Partition->Enable = TRUE;
Partition->Enable = TRUE;
Partition->BlockMedia.LastBlock = DivU64x32 (Capacity, Partition->BlockMedia.BlockSize) - 1;
}
@@ -402,17 +435,17 @@ DiscoverAllPartitions (
**/
EFI_STATUS
InstallProtocolOnPartition (
IN EMMC_DEVICE *Device,
IN UINT8 Index
IN EMMC_DEVICE *Device,
IN UINT8 Index
)
{
EFI_STATUS Status;
EMMC_PARTITION *Partition;
CONTROLLER_DEVICE_PATH ControlNode;
EFI_DEVICE_PATH_PROTOCOL *ParentDevicePath;
EFI_DEVICE_PATH_PROTOCOL *DevicePath;
EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath;
EFI_HANDLE DeviceHandle;
EFI_STATUS Status;
EMMC_PARTITION *Partition;
CONTROLLER_DEVICE_PATH ControlNode;
EFI_DEVICE_PATH_PROTOCOL *ParentDevicePath;
EFI_DEVICE_PATH_PROTOCOL *DevicePath;
EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath;
EFI_HANDLE DeviceHandle;
//
// Build device path
@@ -424,21 +457,21 @@ InstallProtocolOnPartition (
SetDevicePathNodeLength (&ControlNode.Header, sizeof (CONTROLLER_DEVICE_PATH));
ControlNode.ControllerNumber = Index;
DevicePath = AppendDevicePathNode (ParentDevicePath, (EFI_DEVICE_PATH_PROTOCOL*)&ControlNode);
DevicePath = AppendDevicePathNode (ParentDevicePath, (EFI_DEVICE_PATH_PROTOCOL *)&ControlNode);
if (DevicePath == NULL) {
Status = EFI_OUT_OF_RESOURCES;
goto Error;
}
DeviceHandle = NULL;
DeviceHandle = NULL;
RemainingDevicePath = DevicePath;
Status = gBS->LocateDevicePath (&gEfiDevicePathProtocolGuid, &RemainingDevicePath, &DeviceHandle);
if (!EFI_ERROR (Status) && (DeviceHandle != NULL) && IsDevicePathEnd(RemainingDevicePath)) {
Status = gBS->LocateDevicePath (&gEfiDevicePathProtocolGuid, &RemainingDevicePath, &DeviceHandle);
if (!EFI_ERROR (Status) && (DeviceHandle != NULL) && IsDevicePathEnd (RemainingDevicePath)) {
Status = EFI_ALREADY_STARTED;
goto Error;
}
Partition = &Device->Partition[Index];
Partition = &Device->Partition[Index];
Partition->DevicePath = DevicePath;
if (Partition->Enable) {
//
@@ -464,9 +497,10 @@ InstallProtocolOnPartition (
}
if (((Partition->PartitionType == EmmcPartitionUserData) ||
(Partition->PartitionType == EmmcPartitionBoot1) ||
(Partition->PartitionType == EmmcPartitionBoot2)) &&
((Device->Csd.Ccc & BIT10) != 0)) {
(Partition->PartitionType == EmmcPartitionBoot1) ||
(Partition->PartitionType == EmmcPartitionBoot2)) &&
((Device->Csd.Ccc & BIT10) != 0))
{
Status = gBS->InstallProtocolInterface (
&Partition->Handle,
&gEfiStorageSecurityCommandProtocolGuid,
@@ -495,13 +529,12 @@ InstallProtocolOnPartition (
gBS->OpenProtocol (
Device->Private->Controller,
&gEfiSdMmcPassThruProtocolGuid,
(VOID **) &(Device->Private->PassThru),
(VOID **)&(Device->Private->PassThru),
Device->Private->DriverBindingHandle,
Partition->Handle,
EFI_OPEN_PROTOCOL_BY_CHILD_CONTROLLER
);
}
} else {
Status = EFI_INVALID_PARAMETER;
}
@@ -532,27 +565,27 @@ Error:
EFI_STATUS
EFIAPI
DiscoverEmmcDevice (
IN EMMC_DRIVER_PRIVATE_DATA *Private,
IN UINT8 Slot,
IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath
IN EMMC_DRIVER_PRIVATE_DATA *Private,
IN UINT8 Slot,
IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath
)
{
EFI_STATUS Status;
EMMC_DEVICE *Device;
EFI_DEVICE_PATH_PROTOCOL *DevicePath;
EFI_DEVICE_PATH_PROTOCOL *NewDevicePath;
EFI_DEVICE_PATH_PROTOCOL *RemainingEmmcDevPath;
EFI_DEV_PATH *Node;
EFI_HANDLE DeviceHandle;
EFI_SD_MMC_PASS_THRU_PROTOCOL *PassThru;
UINT8 Index;
EFI_STATUS Status;
EMMC_DEVICE *Device;
EFI_DEVICE_PATH_PROTOCOL *DevicePath;
EFI_DEVICE_PATH_PROTOCOL *NewDevicePath;
EFI_DEVICE_PATH_PROTOCOL *RemainingEmmcDevPath;
EFI_DEV_PATH *Node;
EFI_HANDLE DeviceHandle;
EFI_SD_MMC_PASS_THRU_PROTOCOL *PassThru;
UINT8 Index;
Device = NULL;
DevicePath = NULL;
NewDevicePath = NULL;
RemainingDevicePath = NULL;
PassThru = Private->PassThru;
Device = &Private->Device[Slot];
PassThru = Private->PassThru;
Device = &Private->Device[Slot];
//
// Build Device Path to check if the EMMC device present at the slot.
@@ -562,7 +595,7 @@ DiscoverEmmcDevice (
Slot,
&DevicePath
);
if (EFI_ERROR(Status)) {
if (EFI_ERROR (Status)) {
return Status;
}
@@ -582,7 +615,7 @@ DiscoverEmmcDevice (
DeviceHandle = NULL;
RemainingEmmcDevPath = NewDevicePath;
Status = gBS->LocateDevicePath (&gEfiDevicePathProtocolGuid, &RemainingEmmcDevPath, &DeviceHandle);
Status = gBS->LocateDevicePath (&gEfiDevicePathProtocolGuid, &RemainingEmmcDevPath, &DeviceHandle);
//
// The device path to the EMMC device doesn't exist. It means the corresponding device private data hasn't been initialized.
//
@@ -594,7 +627,7 @@ DiscoverEmmcDevice (
// Expose user area in the Sd memory card to upper layer.
//
Status = DiscoverAllPartitions (Device);
if (EFI_ERROR(Status)) {
if (EFI_ERROR (Status)) {
FreePool (NewDevicePath);
goto Error;
}
@@ -605,7 +638,7 @@ DiscoverEmmcDevice (
EFI_NATIVE_INTERFACE,
Device->DevicePath
);
if (EFI_ERROR(Status)) {
if (EFI_ERROR (Status)) {
FreePool (NewDevicePath);
goto Error;
}
@@ -639,10 +672,11 @@ DiscoverEmmcDevice (
//
// Enumerate the specified partition
//
Node = (EFI_DEV_PATH *) RemainingDevicePath;
Node = (EFI_DEV_PATH *)RemainingDevicePath;
if ((DevicePathType (&Node->DevPath) != HARDWARE_DEVICE_PATH) ||
(DevicePathSubType (&Node->DevPath) != HW_CONTROLLER_DP) ||
(DevicePathNodeLength (&Node->DevPath) != sizeof (CONTROLLER_DEVICE_PATH))) {
(DevicePathNodeLength (&Node->DevPath) != sizeof (CONTROLLER_DEVICE_PATH)))
{
Status = EFI_INVALID_PARAMETER;
goto Error;
}
@@ -707,15 +741,15 @@ Error:
EFI_STATUS
EFIAPI
EmmcDxeDriverBindingSupported (
IN EFI_DRIVER_BINDING_PROTOCOL *This,
IN EFI_HANDLE Controller,
IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath
IN EFI_DRIVER_BINDING_PROTOCOL *This,
IN EFI_HANDLE Controller,
IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath
)
{
EFI_STATUS Status;
EFI_DEVICE_PATH_PROTOCOL *ParentDevicePath;
EFI_SD_MMC_PASS_THRU_PROTOCOL *PassThru;
UINT8 Slot;
EFI_STATUS Status;
EFI_DEVICE_PATH_PROTOCOL *ParentDevicePath;
EFI_SD_MMC_PASS_THRU_PROTOCOL *PassThru;
UINT8 Slot;
//
// Test EFI_SD_MMC_PASS_THRU_PROTOCOL on the controller handle.
@@ -723,7 +757,7 @@ EmmcDxeDriverBindingSupported (
Status = gBS->OpenProtocol (
Controller,
&gEfiSdMmcPassThruProtocolGuid,
(VOID**) &PassThru,
(VOID **)&PassThru,
This->DriverBindingHandle,
Controller,
EFI_OPEN_PROTOCOL_BY_DRIVER
@@ -772,7 +806,7 @@ EmmcDxeDriverBindingSupported (
Status = gBS->OpenProtocol (
Controller,
&gEfiDevicePathProtocolGuid,
(VOID **) &ParentDevicePath,
(VOID **)&ParentDevicePath,
This->DriverBindingHandle,
Controller,
EFI_OPEN_PROTOCOL_GET_PROTOCOL
@@ -818,27 +852,27 @@ EmmcDxeDriverBindingSupported (
EFI_STATUS
EFIAPI
EmmcDxeDriverBindingStart (
IN EFI_DRIVER_BINDING_PROTOCOL *This,
IN EFI_HANDLE Controller,
IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath
IN EFI_DRIVER_BINDING_PROTOCOL *This,
IN EFI_HANDLE Controller,
IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath
)
{
EFI_STATUS Status;
EFI_SD_MMC_PASS_THRU_PROTOCOL *PassThru;
EFI_DEVICE_PATH_PROTOCOL *ParentDevicePath;
EMMC_DRIVER_PRIVATE_DATA *Private;
UINT8 Slot;
EFI_STATUS Status;
EFI_SD_MMC_PASS_THRU_PROTOCOL *PassThru;
EFI_DEVICE_PATH_PROTOCOL *ParentDevicePath;
EMMC_DRIVER_PRIVATE_DATA *Private;
UINT8 Slot;
Private = NULL;
PassThru = NULL;
Status = gBS->OpenProtocol (
Controller,
&gEfiSdMmcPassThruProtocolGuid,
(VOID **) &PassThru,
This->DriverBindingHandle,
Controller,
EFI_OPEN_PROTOCOL_BY_DRIVER
);
Status = gBS->OpenProtocol (
Controller,
&gEfiSdMmcPassThruProtocolGuid,
(VOID **)&PassThru,
This->DriverBindingHandle,
Controller,
EFI_OPEN_PROTOCOL_BY_DRIVER
);
if ((EFI_ERROR (Status)) && (Status != EFI_ALREADY_STARTED)) {
return Status;
}
@@ -856,7 +890,7 @@ EmmcDxeDriverBindingStart (
Status = gBS->OpenProtocol (
Controller,
&gEfiDevicePathProtocolGuid,
(VOID **) &ParentDevicePath,
(VOID **)&ParentDevicePath,
This->DriverBindingHandle,
Controller,
EFI_OPEN_PROTOCOL_GET_PROTOCOL
@@ -880,7 +914,7 @@ EmmcDxeDriverBindingStart (
Status = gBS->OpenProtocol (
Controller,
&gEfiCallerIdGuid,
(VOID **) &Private,
(VOID **)&Private,
This->DriverBindingHandle,
Controller,
EFI_OPEN_PROTOCOL_GET_PROTOCOL
@@ -933,6 +967,7 @@ Error:
FreePool (Private);
}
}
return Status;
}
@@ -965,10 +1000,10 @@ Error:
EFI_STATUS
EFIAPI
EmmcDxeDriverBindingStop (
IN EFI_DRIVER_BINDING_PROTOCOL *This,
IN EFI_HANDLE Controller,
IN UINTN NumberOfChildren,
IN EFI_HANDLE *ChildHandleBuffer
IN EFI_DRIVER_BINDING_PROTOCOL *This,
IN EFI_HANDLE Controller,
IN UINTN NumberOfChildren,
IN EFI_HANDLE *ChildHandleBuffer
)
{
EFI_STATUS Status;
@@ -991,7 +1026,7 @@ EmmcDxeDriverBindingStop (
Status = gBS->OpenProtocol (
Controller,
&gEfiCallerIdGuid,
(VOID **) &Private,
(VOID **)&Private,
This->DriverBindingHandle,
Controller,
EFI_OPEN_PROTOCOL_GET_PROTOCOL
@@ -1005,7 +1040,7 @@ EmmcDxeDriverBindingStop (
Status = gBS->OpenProtocol (
Device->Handle,
&gEfiDevicePathProtocolGuid,
(VOID **) &DevicePath,
(VOID **)&DevicePath,
This->DriverBindingHandle,
Controller,
EFI_OPEN_PROTOCOL_GET_PROTOCOL
@@ -1013,6 +1048,7 @@ EmmcDxeDriverBindingStop (
if (EFI_ERROR (Status)) {
continue;
}
ASSERT (DevicePath == Device->DevicePath);
gBS->UninstallProtocolInterface (
Device->Handle,
@@ -1023,16 +1059,16 @@ EmmcDxeDriverBindingStop (
}
gBS->UninstallProtocolInterface (
Controller,
&gEfiCallerIdGuid,
Private
);
Controller,
&gEfiCallerIdGuid,
Private
);
gBS->CloseProtocol (
Controller,
&gEfiSdMmcPassThruProtocolGuid,
This->DriverBindingHandle,
Controller
);
Controller,
&gEfiSdMmcPassThruProtocolGuid,
This->DriverBindingHandle,
Controller
);
FreePool (Private);
return EFI_SUCCESS;
@@ -1044,7 +1080,7 @@ EmmcDxeDriverBindingStop (
Status = gBS->OpenProtocol (
ChildHandleBuffer[Index],
&gEfiBlockIoProtocolGuid,
(VOID **) &BlockIo,
(VOID **)&BlockIo,
This->DriverBindingHandle,
Controller,
EFI_OPEN_PROTOCOL_GET_PROTOCOL
@@ -1053,7 +1089,7 @@ EmmcDxeDriverBindingStop (
Status = gBS->OpenProtocol (
ChildHandleBuffer[Index],
&gEfiBlockIo2ProtocolGuid,
(VOID **) &BlockIo2,
(VOID **)&BlockIo2,
This->DriverBindingHandle,
Controller,
EFI_OPEN_PROTOCOL_GET_PROTOCOL
@@ -1073,7 +1109,8 @@ EmmcDxeDriverBindingStop (
for (Link = GetFirstNode (&Partition->Queue);
!IsNull (&Partition->Queue, Link);
Link = NextLink) {
Link = NextLink)
{
NextLink = GetNextNode (&Partition->Queue, Link);
RemoveEntryList (Link);
@@ -1132,7 +1169,7 @@ EmmcDxeDriverBindingStop (
Status = gBS->OpenProtocol (
ChildHandleBuffer[Index],
&gEfiStorageSecurityCommandProtocolGuid,
(VOID **) &StorageSecurity,
(VOID **)&StorageSecurity,
This->DriverBindingHandle,
Controller,
EFI_OPEN_PROTOCOL_GET_PROTOCOL
@@ -1146,13 +1183,13 @@ EmmcDxeDriverBindingStop (
);
if (EFI_ERROR (Status)) {
gBS->OpenProtocol (
Controller,
&gEfiSdMmcPassThruProtocolGuid,
(VOID **) &Partition->Device->Private->PassThru,
This->DriverBindingHandle,
ChildHandleBuffer[Index],
EFI_OPEN_PROTOCOL_BY_CHILD_CONTROLLER
);
Controller,
&gEfiSdMmcPassThruProtocolGuid,
(VOID **)&Partition->Device->Private->PassThru,
This->DriverBindingHandle,
ChildHandleBuffer[Index],
EFI_OPEN_PROTOCOL_BY_CHILD_CONTROLLER
);
AllChildrenStopped = FALSE;
continue;
}
@@ -1181,11 +1218,11 @@ EmmcDxeDriverBindingStop (
EFI_STATUS
EFIAPI
InitializeEmmcDxe (
IN EFI_HANDLE ImageHandle,
IN EFI_SYSTEM_TABLE *SystemTable
IN EFI_HANDLE ImageHandle,
IN EFI_SYSTEM_TABLE *SystemTable
)
{
EFI_STATUS Status;
EFI_STATUS Status;
//
// Install driver model protocol(s).

View File

@@ -40,11 +40,11 @@
//
// Global Variables
//
extern EFI_DRIVER_BINDING_PROTOCOL gEmmcDxeDriverBinding;
extern EFI_COMPONENT_NAME_PROTOCOL gEmmcDxeComponentName;
extern EFI_COMPONENT_NAME2_PROTOCOL gEmmcDxeComponentName2;
extern EFI_DRIVER_BINDING_PROTOCOL gEmmcDxeDriverBinding;
extern EFI_COMPONENT_NAME_PROTOCOL gEmmcDxeComponentName;
extern EFI_COMPONENT_NAME2_PROTOCOL gEmmcDxeComponentName2;
#define EMMC_PARTITION_SIGNATURE SIGNATURE_32 ('E', 'm', 'm', 'P')
#define EMMC_PARTITION_SIGNATURE SIGNATURE_32 ('E', 'm', 'm', 'P')
#define EMMC_PARTITION_DATA_FROM_BLKIO(a) \
CR(a, EMMC_PARTITION, BlockIo, EMMC_PARTITION_SIGNATURE)
@@ -64,72 +64,72 @@ extern EFI_COMPONENT_NAME2_PROTOCOL gEmmcDxeComponentName2;
//
// Take 2.5 seconds as generic time out value, 1 microsecond as unit.
//
#define EMMC_GENERIC_TIMEOUT 2500 * 1000
#define EMMC_GENERIC_TIMEOUT 2500 * 1000
#define EMMC_REQUEST_SIGNATURE SIGNATURE_32 ('E', 'm', 'R', 'e')
#define EMMC_REQUEST_SIGNATURE SIGNATURE_32 ('E', 'm', 'R', 'e')
typedef struct _EMMC_DEVICE EMMC_DEVICE;
typedef struct _EMMC_DRIVER_PRIVATE_DATA EMMC_DRIVER_PRIVATE_DATA;
typedef struct _EMMC_DEVICE EMMC_DEVICE;
typedef struct _EMMC_DRIVER_PRIVATE_DATA EMMC_DRIVER_PRIVATE_DATA;
//
// Asynchronous I/O request.
//
typedef struct {
UINT32 Signature;
LIST_ENTRY Link;
UINT32 Signature;
LIST_ENTRY Link;
EFI_SD_MMC_COMMAND_BLOCK SdMmcCmdBlk;
EFI_SD_MMC_STATUS_BLOCK SdMmcStatusBlk;
EFI_SD_MMC_PASS_THRU_COMMAND_PACKET Packet;
EFI_SD_MMC_COMMAND_BLOCK SdMmcCmdBlk;
EFI_SD_MMC_STATUS_BLOCK SdMmcStatusBlk;
EFI_SD_MMC_PASS_THRU_COMMAND_PACKET Packet;
BOOLEAN IsEnd;
BOOLEAN IsEnd;
EFI_BLOCK_IO2_TOKEN *Token;
EFI_EVENT Event;
EFI_BLOCK_IO2_TOKEN *Token;
EFI_EVENT Event;
} EMMC_REQUEST;
#define EMMC_REQUEST_FROM_LINK(a) \
CR(a, EMMC_REQUEST, Link, EMMC_REQUEST_SIGNATURE)
typedef struct {
UINT32 Signature;
BOOLEAN Enable;
EMMC_PARTITION_TYPE PartitionType;
EFI_HANDLE Handle;
EFI_DEVICE_PATH_PROTOCOL *DevicePath;
EFI_BLOCK_IO_PROTOCOL BlockIo;
EFI_BLOCK_IO2_PROTOCOL BlockIo2;
EFI_BLOCK_IO_MEDIA BlockMedia;
EFI_STORAGE_SECURITY_COMMAND_PROTOCOL StorageSecurity;
EFI_ERASE_BLOCK_PROTOCOL EraseBlock;
EFI_DISK_INFO_PROTOCOL DiskInfo;
UINT32 Signature;
BOOLEAN Enable;
EMMC_PARTITION_TYPE PartitionType;
EFI_HANDLE Handle;
EFI_DEVICE_PATH_PROTOCOL *DevicePath;
EFI_BLOCK_IO_PROTOCOL BlockIo;
EFI_BLOCK_IO2_PROTOCOL BlockIo2;
EFI_BLOCK_IO_MEDIA BlockMedia;
EFI_STORAGE_SECURITY_COMMAND_PROTOCOL StorageSecurity;
EFI_ERASE_BLOCK_PROTOCOL EraseBlock;
EFI_DISK_INFO_PROTOCOL DiskInfo;
LIST_ENTRY Queue;
LIST_ENTRY Queue;
EMMC_DEVICE *Device;
EMMC_DEVICE *Device;
} EMMC_PARTITION;
//
// Up to 6 slots per EMMC PCI host controller
//
#define EMMC_MAX_DEVICES 6
#define EMMC_MAX_DEVICES 6
//
// Up to 8 partitions per EMMC device.
//
#define EMMC_MAX_PARTITIONS 8
#define EMMC_MODEL_NAME_MAX_LEN 32
#define EMMC_MAX_PARTITIONS 8
#define EMMC_MODEL_NAME_MAX_LEN 32
struct _EMMC_DEVICE {
EFI_HANDLE Handle;
EFI_DEVICE_PATH_PROTOCOL *DevicePath;
UINT8 Slot;
BOOLEAN SectorAddressing;
EFI_HANDLE Handle;
EFI_DEVICE_PATH_PROTOCOL *DevicePath;
UINT8 Slot;
BOOLEAN SectorAddressing;
EMMC_PARTITION Partition[EMMC_MAX_PARTITIONS];
EMMC_CSD Csd;
EMMC_CID Cid;
EMMC_EXT_CSD ExtCsd;
EFI_UNICODE_STRING_TABLE *ControllerNameTable;
EMMC_PARTITION Partition[EMMC_MAX_PARTITIONS];
EMMC_CSD Csd;
EMMC_CID Cid;
EMMC_EXT_CSD ExtCsd;
EFI_UNICODE_STRING_TABLE *ControllerNameTable;
//
// The model name consists of three fields in CID register
// 1) OEM/Application ID (2 bytes)
@@ -137,21 +137,21 @@ struct _EMMC_DEVICE {
// 3) Product Serial Number (4 bytes)
// The delimiters of these fields are whitespace.
//
CHAR16 ModelName[EMMC_MODEL_NAME_MAX_LEN];
EMMC_DRIVER_PRIVATE_DATA *Private;
} ;
CHAR16 ModelName[EMMC_MODEL_NAME_MAX_LEN];
EMMC_DRIVER_PRIVATE_DATA *Private;
};
//
// EMMC DXE driver private data structure
//
struct _EMMC_DRIVER_PRIVATE_DATA {
EFI_SD_MMC_PASS_THRU_PROTOCOL *PassThru;
EFI_HANDLE Controller;
EFI_DEVICE_PATH_PROTOCOL *ParentDevicePath;
EFI_HANDLE DriverBindingHandle;
EFI_SD_MMC_PASS_THRU_PROTOCOL *PassThru;
EFI_HANDLE Controller;
EFI_DEVICE_PATH_PROTOCOL *ParentDevicePath;
EFI_HANDLE DriverBindingHandle;
EMMC_DEVICE Device[EMMC_MAX_DEVICES];
} ;
EMMC_DEVICE Device[EMMC_MAX_DEVICES];
};
/**
Tests to see if this driver supports a given controller. If a child device is provided,
@@ -198,9 +198,9 @@ struct _EMMC_DRIVER_PRIVATE_DATA {
EFI_STATUS
EFIAPI
EmmcDxeDriverBindingSupported (
IN EFI_DRIVER_BINDING_PROTOCOL *This,
IN EFI_HANDLE Controller,
IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath
IN EFI_DRIVER_BINDING_PROTOCOL *This,
IN EFI_HANDLE Controller,
IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath
);
/**
@@ -241,9 +241,9 @@ EmmcDxeDriverBindingSupported (
EFI_STATUS
EFIAPI
EmmcDxeDriverBindingStart (
IN EFI_DRIVER_BINDING_PROTOCOL *This,
IN EFI_HANDLE Controller,
IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath
IN EFI_DRIVER_BINDING_PROTOCOL *This,
IN EFI_HANDLE Controller,
IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath
);
/**
@@ -275,10 +275,10 @@ EmmcDxeDriverBindingStart (
EFI_STATUS
EFIAPI
EmmcDxeDriverBindingStop (
IN EFI_DRIVER_BINDING_PROTOCOL *This,
IN EFI_HANDLE Controller,
IN UINTN NumberOfChildren,
IN EFI_HANDLE *ChildHandleBuffer
IN EFI_DRIVER_BINDING_PROTOCOL *This,
IN EFI_HANDLE Controller,
IN UINTN NumberOfChildren,
IN EFI_HANDLE *ChildHandleBuffer
);
/**
@@ -399,11 +399,11 @@ EmmcDxeComponentNameGetDriverName (
EFI_STATUS
EFIAPI
EmmcDxeComponentNameGetControllerName (
IN EFI_COMPONENT_NAME_PROTOCOL *This,
IN EFI_HANDLE ControllerHandle,
IN EFI_HANDLE ChildHandle OPTIONAL,
IN CHAR8 *Language,
OUT CHAR16 **ControllerName
IN EFI_COMPONENT_NAME_PROTOCOL *This,
IN EFI_HANDLE ControllerHandle,
IN EFI_HANDLE ChildHandle OPTIONAL,
IN CHAR8 *Language,
OUT CHAR16 **ControllerName
);
/**
@@ -419,8 +419,8 @@ EmmcDxeComponentNameGetControllerName (
**/
EFI_STATUS
EmmcSelect (
IN EMMC_DEVICE *Device,
IN UINT16 Rca
IN EMMC_DEVICE *Device,
IN UINT16 Rca
);
/**
@@ -437,9 +437,9 @@ EmmcSelect (
**/
EFI_STATUS
EmmcSendStatus (
IN EMMC_DEVICE *Device,
IN UINT16 Rca,
OUT UINT32 *DevStatus
IN EMMC_DEVICE *Device,
IN UINT16 Rca,
OUT UINT32 *DevStatus
);
/**
@@ -456,9 +456,9 @@ EmmcSendStatus (
**/
EFI_STATUS
EmmcGetCsd (
IN EMMC_DEVICE *Device,
IN UINT16 Rca,
OUT EMMC_CSD *Csd
IN EMMC_DEVICE *Device,
IN UINT16 Rca,
OUT EMMC_CSD *Csd
);
/**
@@ -475,9 +475,9 @@ EmmcGetCsd (
**/
EFI_STATUS
EmmcGetCid (
IN EMMC_DEVICE *Device,
IN UINT16 Rca,
OUT EMMC_CID *Cid
IN EMMC_DEVICE *Device,
IN UINT16 Rca,
OUT EMMC_CID *Cid
);
/**
@@ -493,9 +493,8 @@ EmmcGetCid (
**/
EFI_STATUS
EmmcGetExtCsd (
IN EMMC_DEVICE *Device,
OUT EMMC_EXT_CSD *ExtCsd
IN EMMC_DEVICE *Device,
OUT EMMC_EXT_CSD *ExtCsd
);
#endif

View File

@@ -32,11 +32,11 @@ EDKII_IOMMU_PPI *mIoMmu;
**/
EFI_STATUS
IoMmuMap (
IN EDKII_IOMMU_OPERATION Operation,
IN VOID *HostAddress,
IN OUT UINTN *NumberOfBytes,
OUT EFI_PHYSICAL_ADDRESS *DeviceAddress,
OUT VOID **Mapping
IN EDKII_IOMMU_OPERATION Operation,
IN VOID *HostAddress,
IN OUT UINTN *NumberOfBytes,
OUT EFI_PHYSICAL_ADDRESS *DeviceAddress,
OUT VOID **Mapping
)
{
EFI_STATUS Status;
@@ -54,23 +54,25 @@ IoMmuMap (
if (EFI_ERROR (Status)) {
return EFI_OUT_OF_RESOURCES;
}
switch (Operation) {
case EdkiiIoMmuOperationBusMasterRead:
case EdkiiIoMmuOperationBusMasterRead64:
Attribute = EDKII_IOMMU_ACCESS_READ;
break;
case EdkiiIoMmuOperationBusMasterWrite:
case EdkiiIoMmuOperationBusMasterWrite64:
Attribute = EDKII_IOMMU_ACCESS_WRITE;
break;
case EdkiiIoMmuOperationBusMasterCommonBuffer:
case EdkiiIoMmuOperationBusMasterCommonBuffer64:
Attribute = EDKII_IOMMU_ACCESS_READ | EDKII_IOMMU_ACCESS_WRITE;
break;
default:
ASSERT(FALSE);
return EFI_INVALID_PARAMETER;
case EdkiiIoMmuOperationBusMasterRead:
case EdkiiIoMmuOperationBusMasterRead64:
Attribute = EDKII_IOMMU_ACCESS_READ;
break;
case EdkiiIoMmuOperationBusMasterWrite:
case EdkiiIoMmuOperationBusMasterWrite64:
Attribute = EDKII_IOMMU_ACCESS_WRITE;
break;
case EdkiiIoMmuOperationBusMasterCommonBuffer:
case EdkiiIoMmuOperationBusMasterCommonBuffer64:
Attribute = EDKII_IOMMU_ACCESS_READ | EDKII_IOMMU_ACCESS_WRITE;
break;
default:
ASSERT (FALSE);
return EFI_INVALID_PARAMETER;
}
Status = mIoMmu->SetAttribute (
mIoMmu,
*Mapping,
@@ -81,9 +83,10 @@ IoMmuMap (
}
} else {
*DeviceAddress = (EFI_PHYSICAL_ADDRESS)(UINTN)HostAddress;
*Mapping = NULL;
Status = EFI_SUCCESS;
*Mapping = NULL;
Status = EFI_SUCCESS;
}
return Status;
}
@@ -98,7 +101,7 @@ IoMmuMap (
**/
EFI_STATUS
IoMmuUnmap (
IN VOID *Mapping
IN VOID *Mapping
)
{
EFI_STATUS Status;
@@ -109,6 +112,7 @@ IoMmuUnmap (
} else {
Status = EFI_SUCCESS;
}
return Status;
}
@@ -142,7 +146,7 @@ IoMmuAllocateBuffer (
UINTN NumberOfBytes;
EFI_PHYSICAL_ADDRESS HostPhyAddress;
*HostAddress = NULL;
*HostAddress = NULL;
*DeviceAddress = 0;
if (mIoMmu != NULL) {
@@ -157,18 +161,19 @@ IoMmuAllocateBuffer (
return EFI_OUT_OF_RESOURCES;
}
NumberOfBytes = EFI_PAGES_TO_SIZE(Pages);
Status = mIoMmu->Map (
mIoMmu,
EdkiiIoMmuOperationBusMasterCommonBuffer,
*HostAddress,
&NumberOfBytes,
DeviceAddress,
Mapping
);
NumberOfBytes = EFI_PAGES_TO_SIZE (Pages);
Status = mIoMmu->Map (
mIoMmu,
EdkiiIoMmuOperationBusMasterCommonBuffer,
*HostAddress,
&NumberOfBytes,
DeviceAddress,
Mapping
);
if (EFI_ERROR (Status)) {
return EFI_OUT_OF_RESOURCES;
}
Status = mIoMmu->SetAttribute (
mIoMmu,
*Mapping,
@@ -186,10 +191,12 @@ IoMmuAllocateBuffer (
if (EFI_ERROR (Status)) {
return EFI_OUT_OF_RESOURCES;
}
*HostAddress = (VOID *)(UINTN)HostPhyAddress;
*HostAddress = (VOID *)(UINTN)HostPhyAddress;
*DeviceAddress = HostPhyAddress;
*Mapping = NULL;
*Mapping = NULL;
}
return Status;
}
@@ -207,9 +214,9 @@ IoMmuAllocateBuffer (
**/
EFI_STATUS
IoMmuFreeBuffer (
IN UINTN Pages,
IN VOID *HostAddress,
IN VOID *Mapping
IN UINTN Pages,
IN VOID *HostAddress,
IN VOID *Mapping
)
{
EFI_STATUS Status;
@@ -221,6 +228,7 @@ IoMmuFreeBuffer (
} else {
Status = EFI_SUCCESS;
}
return Status;
}
@@ -239,4 +247,3 @@ IoMmuInit (
(VOID **)&mIoMmu
);
}

View File

@@ -10,7 +10,7 @@
//
// Template for SD HC Slot Data.
//
SD_PEIM_HC_SLOT gSdHcSlotTemplate = {
SD_PEIM_HC_SLOT gSdHcSlotTemplate = {
SD_PEIM_SLOT_SIG, // Signature
{ // Media
MSG_SD_DP,
@@ -34,7 +34,7 @@ SD_PEIM_HC_SLOT gSdHcSlotTemplate = {
//
// Template for SD HC Private Data.
//
SD_PEIM_HC_PRIVATE_DATA gSdHcPrivateTemplate = {
SD_PEIM_HC_PRIVATE_DATA gSdHcPrivateTemplate = {
SD_PEIM_SIG, // Signature
NULL, // Pool
{ // BlkIoPpi
@@ -86,6 +86,7 @@ SD_PEIM_HC_PRIVATE_DATA gSdHcPrivateTemplate = {
0, // SlotNum
0 // TotalBlkIoDevices
};
/**
Gets the count of block I/O devices that one specific block driver detects.
@@ -113,9 +114,9 @@ SdBlockIoPeimGetDeviceNo (
OUT UINTN *NumberBlockDevices
)
{
SD_PEIM_HC_PRIVATE_DATA *Private;
SD_PEIM_HC_PRIVATE_DATA *Private;
Private = GET_SD_PEIM_HC_PRIVATE_DATA_FROM_THIS (This);
Private = GET_SD_PEIM_HC_PRIVATE_DATA_FROM_THIS (This);
*NumberBlockDevices = Private->TotalBlkIoDevices;
return EFI_SUCCESS;
}
@@ -170,9 +171,9 @@ SdBlockIoPeimGetMediaInfo (
OUT EFI_PEI_BLOCK_IO_MEDIA *MediaInfo
)
{
SD_PEIM_HC_PRIVATE_DATA *Private;
SD_PEIM_HC_PRIVATE_DATA *Private;
Private = GET_SD_PEIM_HC_PRIVATE_DATA_FROM_THIS (This);
Private = GET_SD_PEIM_HC_PRIVATE_DATA_FROM_THIS (This);
if ((DeviceIndex == 0) || (DeviceIndex > Private->TotalBlkIoDevices) || (DeviceIndex > SD_PEIM_MAX_SLOTS)) {
return EFI_INVALID_PARAMETER;
@@ -231,12 +232,12 @@ SdBlockIoPeimReadBlocks (
OUT VOID *Buffer
)
{
EFI_STATUS Status;
UINT32 BlockSize;
UINTN NumberOfBlocks;
SD_PEIM_HC_PRIVATE_DATA *Private;
UINTN Remaining;
UINT32 MaxBlock;
EFI_STATUS Status;
UINT32 BlockSize;
UINTN NumberOfBlocks;
SD_PEIM_HC_PRIVATE_DATA *Private;
UINTN Remaining;
UINT32 MaxBlock;
Status = EFI_SUCCESS;
Private = GET_SD_PEIM_HC_PRIVATE_DATA_FROM_THIS (This);
@@ -286,14 +287,16 @@ SdBlockIoPeimReadBlocks (
} else {
Status = SdPeimRwSingleBlock (&Private->Slot[DeviceIndex - 1], StartLBA, BlockSize, Buffer, BufferSize, TRUE);
}
if (EFI_ERROR (Status)) {
return Status;
}
StartLBA += NumberOfBlocks;
Buffer = (UINT8*)Buffer + BufferSize;
Buffer = (UINT8 *)Buffer + BufferSize;
Remaining -= NumberOfBlocks;
}
return Status;
}
@@ -319,14 +322,14 @@ SdBlockIoPeimReadBlocks (
EFI_STATUS
EFIAPI
SdBlockIoPeimGetDeviceNo2 (
IN EFI_PEI_SERVICES **PeiServices,
IN EFI_PEI_RECOVERY_BLOCK_IO2_PPI *This,
OUT UINTN *NumberBlockDevices
IN EFI_PEI_SERVICES **PeiServices,
IN EFI_PEI_RECOVERY_BLOCK_IO2_PPI *This,
OUT UINTN *NumberBlockDevices
)
{
SD_PEIM_HC_PRIVATE_DATA *Private;
SD_PEIM_HC_PRIVATE_DATA *Private;
Private = GET_SD_PEIM_HC_PRIVATE_DATA_FROM_THIS2 (This);
Private = GET_SD_PEIM_HC_PRIVATE_DATA_FROM_THIS2 (This);
*NumberBlockDevices = Private->TotalBlkIoDevices;
return EFI_SUCCESS;
@@ -376,24 +379,24 @@ SdBlockIoPeimGetDeviceNo2 (
EFI_STATUS
EFIAPI
SdBlockIoPeimGetMediaInfo2 (
IN EFI_PEI_SERVICES **PeiServices,
IN EFI_PEI_RECOVERY_BLOCK_IO2_PPI *This,
IN UINTN DeviceIndex,
OUT EFI_PEI_BLOCK_IO2_MEDIA *MediaInfo
IN EFI_PEI_SERVICES **PeiServices,
IN EFI_PEI_RECOVERY_BLOCK_IO2_PPI *This,
IN UINTN DeviceIndex,
OUT EFI_PEI_BLOCK_IO2_MEDIA *MediaInfo
)
{
EFI_STATUS Status;
SD_PEIM_HC_PRIVATE_DATA *Private;
EFI_PEI_BLOCK_IO_MEDIA Media;
EFI_STATUS Status;
SD_PEIM_HC_PRIVATE_DATA *Private;
EFI_PEI_BLOCK_IO_MEDIA Media;
Private = GET_SD_PEIM_HC_PRIVATE_DATA_FROM_THIS2 (This);
Status = SdBlockIoPeimGetMediaInfo (
PeiServices,
&Private->BlkIoPpi,
DeviceIndex,
&Media
);
Status = SdBlockIoPeimGetMediaInfo (
PeiServices,
&Private->BlkIoPpi,
DeviceIndex,
&Media
);
if (EFI_ERROR (Status)) {
return Status;
}
@@ -439,28 +442,28 @@ SdBlockIoPeimGetMediaInfo2 (
EFI_STATUS
EFIAPI
SdBlockIoPeimReadBlocks2 (
IN EFI_PEI_SERVICES **PeiServices,
IN EFI_PEI_RECOVERY_BLOCK_IO2_PPI *This,
IN UINTN DeviceIndex,
IN EFI_PEI_LBA StartLBA,
IN UINTN BufferSize,
OUT VOID *Buffer
IN EFI_PEI_SERVICES **PeiServices,
IN EFI_PEI_RECOVERY_BLOCK_IO2_PPI *This,
IN UINTN DeviceIndex,
IN EFI_PEI_LBA StartLBA,
IN UINTN BufferSize,
OUT VOID *Buffer
)
{
EFI_STATUS Status;
SD_PEIM_HC_PRIVATE_DATA *Private;
EFI_STATUS Status;
SD_PEIM_HC_PRIVATE_DATA *Private;
Status = EFI_SUCCESS;
Private = GET_SD_PEIM_HC_PRIVATE_DATA_FROM_THIS2 (This);
Status = EFI_SUCCESS;
Private = GET_SD_PEIM_HC_PRIVATE_DATA_FROM_THIS2 (This);
Status = SdBlockIoPeimReadBlocks (
PeiServices,
&Private->BlkIoPpi,
DeviceIndex,
StartLBA,
BufferSize,
Buffer
);
Status = SdBlockIoPeimReadBlocks (
PeiServices,
&Private->BlkIoPpi,
DeviceIndex,
StartLBA,
BufferSize,
Buffer
);
return Status;
}
@@ -483,7 +486,7 @@ SdBlockIoPeimEndOfPei (
IN VOID *Ppi
)
{
SD_PEIM_HC_PRIVATE_DATA *Private;
SD_PEIM_HC_PRIVATE_DATA *Private;
Private = GET_SD_PEIM_HC_PRIVATE_DATA_FROM_THIS_NOTIFY (NotifyDescriptor);
@@ -507,26 +510,26 @@ SdBlockIoPeimEndOfPei (
EFI_STATUS
EFIAPI
InitializeSdBlockIoPeim (
IN EFI_PEI_FILE_HANDLE FileHandle,
IN CONST EFI_PEI_SERVICES **PeiServices
IN EFI_PEI_FILE_HANDLE FileHandle,
IN CONST EFI_PEI_SERVICES **PeiServices
)
{
EFI_STATUS Status;
SD_PEIM_HC_PRIVATE_DATA *Private;
EDKII_SD_MMC_HOST_CONTROLLER_PPI *SdMmcHcPpi;
UINT32 Index;
UINTN *MmioBase;
UINT8 BarNum;
UINT8 SlotNum;
UINT8 Controller;
UINT64 Capacity;
SD_HC_SLOT_CAP Capability;
SD_PEIM_HC_SLOT *Slot;
SD_CSD *Csd;
SD_CSD2 *Csd2;
UINT32 CSize;
UINT32 CSizeMul;
UINT32 ReadBlLen;
EFI_STATUS Status;
SD_PEIM_HC_PRIVATE_DATA *Private;
EDKII_SD_MMC_HOST_CONTROLLER_PPI *SdMmcHcPpi;
UINT32 Index;
UINTN *MmioBase;
UINT8 BarNum;
UINT8 SlotNum;
UINT8 Controller;
UINT64 Capacity;
SD_HC_SLOT_CAP Capability;
SD_PEIM_HC_SLOT *Slot;
SD_CSD *Csd;
SD_CSD2 *Csd2;
UINT32 CSize;
UINT32 CSizeMul;
UINT32 ReadBlLen;
//
// Shadow this PEIM to run from memory
@@ -542,7 +545,7 @@ InitializeSdBlockIoPeim (
&gEdkiiPeiSdMmcHostControllerPpiGuid,
0,
NULL,
(VOID **) &SdMmcHcPpi
(VOID **)&SdMmcHcPpi
);
if (EFI_ERROR (Status)) {
return EFI_DEVICE_ERROR;
@@ -571,8 +574,9 @@ InitializeSdBlockIoPeim (
Status = EFI_OUT_OF_RESOURCES;
break;
}
Private->BlkIoPpiList.Ppi = (VOID*)&Private->BlkIoPpi;
Private->BlkIo2PpiList.Ppi = (VOID*)&Private->BlkIo2Ppi;
Private->BlkIoPpiList.Ppi = (VOID *)&Private->BlkIoPpi;
Private->BlkIo2PpiList.Ppi = (VOID *)&Private->BlkIo2Ppi;
//
// Initialize the memory pool which will be used in all transactions.
//
@@ -587,6 +591,7 @@ InitializeSdBlockIoPeim (
if (EFI_ERROR (Status)) {
continue;
}
if (Capability.SlotType != 0x1) {
DEBUG ((DEBUG_INFO, "The slot at 0x%x is not embedded slot type\n", MmioBase[Index]));
Status = EFI_UNSUPPORTED;
@@ -597,10 +602,12 @@ InitializeSdBlockIoPeim (
if (EFI_ERROR (Status)) {
continue;
}
Status = SdPeimHcCardDetect (MmioBase[Index]);
if (EFI_ERROR (Status)) {
continue;
}
Status = SdPeimHcInitHost (MmioBase[Index]);
if (EFI_ERROR (Status)) {
continue;
@@ -621,15 +628,15 @@ InitializeSdBlockIoPeim (
Csd = &Slot->Csd;
if (Csd->CsdStructure == 0) {
Slot->SectorAddressing = FALSE;
CSize = (Csd->CSizeHigh << 2 | Csd->CSizeLow) + 1;
CSizeMul = (1 << (Csd->CSizeMul + 2));
ReadBlLen = (1 << (Csd->ReadBlLen));
Capacity = MultU64x32 (MultU64x32 ((UINT64)CSize, CSizeMul), ReadBlLen);
CSize = (Csd->CSizeHigh << 2 | Csd->CSizeLow) + 1;
CSizeMul = (1 << (Csd->CSizeMul + 2));
ReadBlLen = (1 << (Csd->ReadBlLen));
Capacity = MultU64x32 (MultU64x32 ((UINT64)CSize, CSizeMul), ReadBlLen);
} else {
Slot->SectorAddressing = TRUE;
Csd2 = (SD_CSD2*)(VOID*)Csd;
CSize = (Csd2->CSizeHigh << 16 | Csd2->CSizeLow) + 1;
Capacity = MultU64x32 ((UINT64)CSize, SIZE_512KB);
Csd2 = (SD_CSD2 *)(VOID *)Csd;
CSize = (Csd2->CSizeHigh << 16 | Csd2->CSizeLow) + 1;
Capacity = MultU64x32 ((UINT64)CSize, SIZE_512KB);
}
Slot->Media.LastBlock = DivU64x32 (Capacity, Slot->Media.BlockSize) - 1;

View File

@@ -26,27 +26,27 @@
#include <IndustryStandard/Sd.h>
typedef struct _SD_PEIM_HC_PRIVATE_DATA SD_PEIM_HC_PRIVATE_DATA;
typedef struct _SD_PEIM_HC_SLOT SD_PEIM_HC_SLOT;
typedef struct _SD_TRB SD_TRB;
typedef struct _SD_PEIM_HC_PRIVATE_DATA SD_PEIM_HC_PRIVATE_DATA;
typedef struct _SD_PEIM_HC_SLOT SD_PEIM_HC_SLOT;
typedef struct _SD_TRB SD_TRB;
#include "SdHci.h"
#include "SdHcMem.h"
#define SD_PEIM_SIG SIGNATURE_32 ('S', 'D', 'C', 'P')
#define SD_PEIM_SLOT_SIG SIGNATURE_32 ('S', 'D', 'C', 'S')
#define SD_PEIM_SIG SIGNATURE_32 ('S', 'D', 'C', 'P')
#define SD_PEIM_SLOT_SIG SIGNATURE_32 ('S', 'D', 'C', 'S')
#define SD_PEIM_MAX_SLOTS 6
#define SD_PEIM_MAX_SLOTS 6
struct _SD_PEIM_HC_SLOT {
UINT32 Signature;
EFI_PEI_BLOCK_IO2_MEDIA Media;
UINT32 Signature;
EFI_PEI_BLOCK_IO2_MEDIA Media;
UINTN SdHcBase;
SD_HC_SLOT_CAP Capability;
SD_CSD Csd;
BOOLEAN SectorAddressing;
SD_PEIM_HC_PRIVATE_DATA *Private;
UINTN SdHcBase;
SD_HC_SLOT_CAP Capability;
SD_CSD Csd;
BOOLEAN SectorAddressing;
SD_PEIM_HC_PRIVATE_DATA *Private;
};
struct _SD_PEIM_HC_PRIVATE_DATA {
@@ -67,27 +67,27 @@ struct _SD_PEIM_HC_PRIVATE_DATA {
UINT8 TotalBlkIoDevices;
};
#define SD_TIMEOUT MultU64x32((UINT64)(3), 1000000)
#define GET_SD_PEIM_HC_PRIVATE_DATA_FROM_THIS(a) CR (a, SD_PEIM_HC_PRIVATE_DATA, BlkIoPpi, SD_PEIM_SIG)
#define GET_SD_PEIM_HC_PRIVATE_DATA_FROM_THIS2(a) CR (a, SD_PEIM_HC_PRIVATE_DATA, BlkIo2Ppi, SD_PEIM_SIG)
#define GET_SD_PEIM_HC_PRIVATE_DATA_FROM_THIS_NOTIFY(a) CR (a, SD_PEIM_HC_PRIVATE_DATA, EndOfPeiNotifyList, SD_PEIM_SIG)
#define SD_TIMEOUT MultU64x32((UINT64)(3), 1000000)
#define GET_SD_PEIM_HC_PRIVATE_DATA_FROM_THIS(a) CR (a, SD_PEIM_HC_PRIVATE_DATA, BlkIoPpi, SD_PEIM_SIG)
#define GET_SD_PEIM_HC_PRIVATE_DATA_FROM_THIS2(a) CR (a, SD_PEIM_HC_PRIVATE_DATA, BlkIo2Ppi, SD_PEIM_SIG)
#define GET_SD_PEIM_HC_PRIVATE_DATA_FROM_THIS_NOTIFY(a) CR (a, SD_PEIM_HC_PRIVATE_DATA, EndOfPeiNotifyList, SD_PEIM_SIG)
struct _SD_TRB {
SD_PEIM_HC_SLOT *Slot;
UINT16 BlockSize;
SD_PEIM_HC_SLOT *Slot;
UINT16 BlockSize;
SD_COMMAND_PACKET *Packet;
VOID *Data;
UINT32 DataLen;
BOOLEAN Read;
EFI_PHYSICAL_ADDRESS DataPhy;
VOID *DataMap;
SD_HC_TRANSFER_MODE Mode;
SD_COMMAND_PACKET *Packet;
VOID *Data;
UINT32 DataLen;
BOOLEAN Read;
EFI_PHYSICAL_ADDRESS DataPhy;
VOID *DataMap;
SD_HC_TRANSFER_MODE Mode;
UINT64 Timeout;
UINT64 Timeout;
SD_HC_ADMA_DESC_LINE *AdmaDesc;
UINTN AdmaDescSize;
SD_HC_ADMA_DESC_LINE *AdmaDesc;
UINTN AdmaDescSize;
};
/**
@@ -234,9 +234,9 @@ SdBlockIoPeimReadBlocks (
EFI_STATUS
EFIAPI
SdBlockIoPeimGetDeviceNo2 (
IN EFI_PEI_SERVICES **PeiServices,
IN EFI_PEI_RECOVERY_BLOCK_IO2_PPI *This,
OUT UINTN *NumberBlockDevices
IN EFI_PEI_SERVICES **PeiServices,
IN EFI_PEI_RECOVERY_BLOCK_IO2_PPI *This,
OUT UINTN *NumberBlockDevices
);
/**
@@ -283,10 +283,10 @@ SdBlockIoPeimGetDeviceNo2 (
EFI_STATUS
EFIAPI
SdBlockIoPeimGetMediaInfo2 (
IN EFI_PEI_SERVICES **PeiServices,
IN EFI_PEI_RECOVERY_BLOCK_IO2_PPI *This,
IN UINTN DeviceIndex,
OUT EFI_PEI_BLOCK_IO2_MEDIA *MediaInfo
IN EFI_PEI_SERVICES **PeiServices,
IN EFI_PEI_RECOVERY_BLOCK_IO2_PPI *This,
IN UINTN DeviceIndex,
OUT EFI_PEI_BLOCK_IO2_MEDIA *MediaInfo
);
/**
@@ -326,12 +326,12 @@ SdBlockIoPeimGetMediaInfo2 (
EFI_STATUS
EFIAPI
SdBlockIoPeimReadBlocks2 (
IN EFI_PEI_SERVICES **PeiServices,
IN EFI_PEI_RECOVERY_BLOCK_IO2_PPI *This,
IN UINTN DeviceIndex,
IN EFI_PEI_LBA StartLBA,
IN UINTN BufferSize,
OUT VOID *Buffer
IN EFI_PEI_SERVICES **PeiServices,
IN EFI_PEI_RECOVERY_BLOCK_IO2_PPI *This,
IN UINTN DeviceIndex,
IN EFI_PEI_LBA StartLBA,
IN UINTN BufferSize,
OUT VOID *Buffer
);
/**
@@ -345,7 +345,7 @@ SdBlockIoPeimReadBlocks2 (
**/
EFI_STATUS
SdPeimInitMemPool (
IN SD_PEIM_HC_PRIVATE_DATA *Private
IN SD_PEIM_HC_PRIVATE_DATA *Private
);
/**
@@ -359,7 +359,7 @@ SdPeimInitMemPool (
**/
EFI_STATUS
SdPeimFreeMemPool (
IN SD_PEIM_MEM_POOL *Pool
IN SD_PEIM_MEM_POOL *Pool
);
/**
@@ -374,8 +374,8 @@ SdPeimFreeMemPool (
**/
VOID *
SdPeimAllocateMem (
IN SD_PEIM_MEM_POOL *Pool,
IN UINTN Size
IN SD_PEIM_MEM_POOL *Pool,
IN UINTN Size
);
/**
@@ -388,9 +388,9 @@ SdPeimAllocateMem (
**/
VOID
SdPeimFreeMem (
IN SD_PEIM_MEM_POOL *Pool,
IN VOID *Mem,
IN UINTN Size
IN SD_PEIM_MEM_POOL *Pool,
IN VOID *Mem,
IN UINTN Size
);
/**
@@ -422,11 +422,11 @@ IoMmuInit (
**/
EFI_STATUS
IoMmuMap (
IN EDKII_IOMMU_OPERATION Operation,
IN VOID *HostAddress,
IN OUT UINTN *NumberOfBytes,
OUT EFI_PHYSICAL_ADDRESS *DeviceAddress,
OUT VOID **Mapping
IN EDKII_IOMMU_OPERATION Operation,
IN VOID *HostAddress,
IN OUT UINTN *NumberOfBytes,
OUT EFI_PHYSICAL_ADDRESS *DeviceAddress,
OUT VOID **Mapping
);
/**
@@ -440,7 +440,7 @@ IoMmuMap (
**/
EFI_STATUS
IoMmuUnmap (
IN VOID *Mapping
IN VOID *Mapping
);
/**
@@ -483,9 +483,9 @@ IoMmuAllocateBuffer (
**/
EFI_STATUS
IoMmuFreeBuffer (
IN UINTN Pages,
IN VOID *HostAddress,
IN VOID *Mapping
IN UINTN Pages,
IN VOID *HostAddress,
IN VOID *Mapping
);
/**

View File

@@ -18,25 +18,25 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
**/
SD_PEIM_MEM_BLOCK *
SdPeimAllocMemBlock (
IN UINTN Pages
IN UINTN Pages
)
{
SD_PEIM_MEM_BLOCK *Block;
VOID *BufHost;
VOID *Mapping;
EFI_PHYSICAL_ADDRESS MappedAddr;
EFI_STATUS Status;
VOID *TempPtr;
SD_PEIM_MEM_BLOCK *Block;
VOID *BufHost;
VOID *Mapping;
EFI_PHYSICAL_ADDRESS MappedAddr;
EFI_STATUS Status;
VOID *TempPtr;
TempPtr = NULL;
Block = NULL;
Status = PeiServicesAllocatePool (sizeof(SD_PEIM_MEM_BLOCK), &TempPtr);
Status = PeiServicesAllocatePool (sizeof (SD_PEIM_MEM_BLOCK), &TempPtr);
if (EFI_ERROR (Status)) {
return NULL;
}
ZeroMem ((VOID*)(UINTN)TempPtr, sizeof(SD_PEIM_MEM_BLOCK));
ZeroMem ((VOID *)(UINTN)TempPtr, sizeof (SD_PEIM_MEM_BLOCK));
//
// each bit in the bit array represents SD_PEIM_MEM_UNIT
@@ -44,18 +44,18 @@ SdPeimAllocMemBlock (
//
ASSERT (SD_PEIM_MEM_UNIT * 8 <= EFI_PAGE_SIZE);
Block = (SD_PEIM_MEM_BLOCK*)(UINTN)TempPtr;
Block->BufLen = EFI_PAGES_TO_SIZE (Pages);
Block->BitsLen = Block->BufLen / (SD_PEIM_MEM_UNIT * 8);
Block = (SD_PEIM_MEM_BLOCK *)(UINTN)TempPtr;
Block->BufLen = EFI_PAGES_TO_SIZE (Pages);
Block->BitsLen = Block->BufLen / (SD_PEIM_MEM_UNIT * 8);
Status = PeiServicesAllocatePool (Block->BitsLen, &TempPtr);
if (EFI_ERROR (Status)) {
return NULL;
}
ZeroMem ((VOID*)(UINTN)TempPtr, Block->BitsLen);
ZeroMem ((VOID *)(UINTN)TempPtr, Block->BitsLen);
Block->Bits = (UINT8*)(UINTN)TempPtr;
Block->Bits = (UINT8 *)(UINTN)TempPtr;
Status = IoMmuAllocateBuffer (
Pages,
@@ -67,10 +67,10 @@ SdPeimAllocMemBlock (
return NULL;
}
ZeroMem ((VOID*)(UINTN)BufHost, EFI_PAGES_TO_SIZE (Pages));
ZeroMem ((VOID *)(UINTN)BufHost, EFI_PAGES_TO_SIZE (Pages));
Block->BufHost = (UINT8 *) (UINTN) BufHost;
Block->Buf = (UINT8 *) (UINTN) MappedAddr;
Block->BufHost = (UINT8 *)(UINTN)BufHost;
Block->Buf = (UINT8 *)(UINTN)MappedAddr;
Block->Mapping = Mapping;
Block->Next = NULL;
@@ -86,8 +86,8 @@ SdPeimAllocMemBlock (
**/
VOID
SdPeimFreeMemBlock (
IN SD_PEIM_MEM_POOL *Pool,
IN SD_PEIM_MEM_BLOCK *Block
IN SD_PEIM_MEM_POOL *Pool,
IN SD_PEIM_MEM_BLOCK *Block
)
{
ASSERT ((Pool != NULL) && (Block != NULL));
@@ -107,22 +107,22 @@ SdPeimFreeMemBlock (
**/
VOID *
SdPeimAllocMemFromBlock (
IN SD_PEIM_MEM_BLOCK *Block,
IN UINTN Units
IN SD_PEIM_MEM_BLOCK *Block,
IN UINTN Units
)
{
UINTN Byte;
UINT8 Bit;
UINTN StartByte;
UINT8 StartBit;
UINTN Available;
UINTN Count;
UINTN Byte;
UINT8 Bit;
UINTN StartByte;
UINT8 StartBit;
UINTN Available;
UINTN Count;
ASSERT ((Block != 0) && (Units != 0));
StartByte = 0;
StartBit = 0;
Available = 0;
StartByte = 0;
StartBit = 0;
Available = 0;
for (Byte = 0, Bit = 0; Byte < Block->BitsLen;) {
//
@@ -138,13 +138,12 @@ SdPeimAllocMemFromBlock (
}
SD_PEIM_NEXT_BIT (Byte, Bit);
} else {
SD_PEIM_NEXT_BIT (Byte, Bit);
Available = 0;
StartByte = Byte;
StartBit = Bit;
Available = 0;
StartByte = Byte;
StartBit = Bit;
}
}
@@ -155,13 +154,13 @@ SdPeimAllocMemFromBlock (
//
// Mark the memory as allocated
//
Byte = StartByte;
Bit = StartBit;
Byte = StartByte;
Bit = StartBit;
for (Count = 0; Count < Units; Count++) {
ASSERT (!SD_PEIM_MEM_BIT_IS_SET (Block->Bits[Byte], Bit));
Block->Bits[Byte] = (UINT8) (Block->Bits[Byte] | (UINT8) SD_PEIM_MEM_BIT (Bit));
Block->Bits[Byte] = (UINT8)(Block->Bits[Byte] | (UINT8)SD_PEIM_MEM_BIT (Bit));
SD_PEIM_NEXT_BIT (Byte, Bit);
}
@@ -177,8 +176,8 @@ SdPeimAllocMemFromBlock (
**/
VOID
SdPeimInsertMemBlockToPool (
IN SD_PEIM_MEM_BLOCK *Head,
IN SD_PEIM_MEM_BLOCK *Block
IN SD_PEIM_MEM_BLOCK *Head,
IN SD_PEIM_MEM_BLOCK *Block
)
{
ASSERT ((Head != NULL) && (Block != NULL));
@@ -197,11 +196,10 @@ SdPeimInsertMemBlockToPool (
**/
BOOLEAN
SdPeimIsMemBlockEmpty (
IN SD_PEIM_MEM_BLOCK *Block
IN SD_PEIM_MEM_BLOCK *Block
)
{
UINTN Index;
UINTN Index;
for (Index = 0; Index < Block->BitsLen; Index++) {
if (Block->Bits[Index] != 0) {
@@ -212,8 +210,6 @@ SdPeimIsMemBlockEmpty (
return TRUE;
}
/**
Initialize the memory management pool for the host controller.
@@ -228,9 +224,9 @@ SdPeimInitMemPool (
IN SD_PEIM_HC_PRIVATE_DATA *Private
)
{
SD_PEIM_MEM_POOL *Pool;
EFI_STATUS Status;
VOID *TempPtr;
SD_PEIM_MEM_POOL *Pool;
EFI_STATUS Status;
VOID *TempPtr;
TempPtr = NULL;
Pool = NULL;
@@ -240,7 +236,7 @@ SdPeimInitMemPool (
return EFI_OUT_OF_RESOURCES;
}
ZeroMem ((VOID*)(UINTN)TempPtr, sizeof (SD_PEIM_MEM_POOL));
ZeroMem ((VOID *)(UINTN)TempPtr, sizeof (SD_PEIM_MEM_POOL));
Pool = (SD_PEIM_MEM_POOL *)((UINTN)TempPtr);
@@ -265,10 +261,10 @@ SdPeimInitMemPool (
**/
EFI_STATUS
SdPeimFreeMemPool (
IN SD_PEIM_MEM_POOL *Pool
IN SD_PEIM_MEM_POOL *Pool
)
{
SD_PEIM_MEM_BLOCK *Block;
SD_PEIM_MEM_BLOCK *Block;
ASSERT (Pool->Head != NULL);
@@ -296,16 +292,16 @@ SdPeimFreeMemPool (
**/
VOID *
SdPeimAllocateMem (
IN SD_PEIM_MEM_POOL *Pool,
IN UINTN Size
IN SD_PEIM_MEM_POOL *Pool,
IN UINTN Size
)
{
SD_PEIM_MEM_BLOCK *Head;
SD_PEIM_MEM_BLOCK *Block;
SD_PEIM_MEM_BLOCK *NewBlock;
VOID *Mem;
UINTN AllocSize;
UINTN Pages;
SD_PEIM_MEM_BLOCK *Head;
SD_PEIM_MEM_BLOCK *Block;
SD_PEIM_MEM_BLOCK *NewBlock;
VOID *Mem;
UINTN AllocSize;
UINTN Pages;
Mem = NULL;
AllocSize = SD_PEIM_MEM_ROUND (Size);
@@ -368,22 +364,22 @@ SdPeimAllocateMem (
**/
VOID
SdPeimFreeMem (
IN SD_PEIM_MEM_POOL *Pool,
IN VOID *Mem,
IN UINTN Size
IN SD_PEIM_MEM_POOL *Pool,
IN VOID *Mem,
IN UINTN Size
)
{
SD_PEIM_MEM_BLOCK *Head;
SD_PEIM_MEM_BLOCK *Block;
UINT8 *ToFree;
UINTN AllocSize;
UINTN Byte;
UINTN Bit;
UINTN Count;
SD_PEIM_MEM_BLOCK *Head;
SD_PEIM_MEM_BLOCK *Block;
UINT8 *ToFree;
UINTN AllocSize;
UINTN Byte;
UINTN Bit;
UINTN Count;
Head = Pool->Head;
AllocSize = SD_PEIM_MEM_ROUND (Size);
ToFree = (UINT8 *) Mem;
ToFree = (UINT8 *)Mem;
for (Block = Head; Block != NULL; Block = Block->Next) {
//
@@ -394,8 +390,8 @@ SdPeimFreeMem (
//
// compute the start byte and bit in the bit array
//
Byte = ((ToFree - Block->Buf) / SD_PEIM_MEM_UNIT) / 8;
Bit = ((ToFree - Block->Buf) / SD_PEIM_MEM_UNIT) % 8;
Byte = ((ToFree - Block->Buf) / SD_PEIM_MEM_UNIT) / 8;
Bit = ((ToFree - Block->Buf) / SD_PEIM_MEM_UNIT) % 8;
//
// reset associated bits in bit array
@@ -403,7 +399,7 @@ SdPeimFreeMem (
for (Count = 0; Count < (AllocSize / SD_PEIM_MEM_UNIT); Count++) {
ASSERT (SD_PEIM_MEM_BIT_IS_SET (Block->Bits[Byte], Bit));
Block->Bits[Byte] = (UINT8) (Block->Bits[Byte] ^ SD_PEIM_MEM_BIT (Bit));
Block->Bits[Byte] = (UINT8)(Block->Bits[Byte] ^ SD_PEIM_MEM_BIT (Bit));
SD_PEIM_NEXT_BIT (Byte, Bit);
}
@@ -425,5 +421,5 @@ SdPeimFreeMem (
SdPeimFreeMemBlock (Pool, Block);
}
return ;
return;
}

View File

@@ -9,7 +9,7 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
#ifndef _SD_PEIM_MEM_H_
#define _SD_PEIM_MEM_H_
#define SD_PEIM_MEM_BIT(a) ((UINTN)(1 << (a)))
#define SD_PEIM_MEM_BIT(a) ((UINTN)(1 << (a)))
#define SD_PEIM_MEM_BIT_IS_SET(Data, Bit) \
((BOOLEAN)(((Data) & SD_PEIM_MEM_BIT(Bit)) == SD_PEIM_MEM_BIT(Bit)))
@@ -17,28 +17,28 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
typedef struct _SD_PEIM_MEM_BLOCK SD_PEIM_MEM_BLOCK;
struct _SD_PEIM_MEM_BLOCK {
UINT8 *Bits; // Bit array to record which unit is allocated
UINTN BitsLen;
UINT8 *Buf;
UINT8 *BufHost;
UINTN BufLen; // Memory size in bytes
VOID *Mapping;
SD_PEIM_MEM_BLOCK *Next;
UINT8 *Bits; // Bit array to record which unit is allocated
UINTN BitsLen;
UINT8 *Buf;
UINT8 *BufHost;
UINTN BufLen; // Memory size in bytes
VOID *Mapping;
SD_PEIM_MEM_BLOCK *Next;
};
typedef struct _SD_PEIM_MEM_POOL {
SD_PEIM_MEM_BLOCK *Head;
SD_PEIM_MEM_BLOCK *Head;
} SD_PEIM_MEM_POOL;
//
// Memory allocation unit, note that the value must meet SD spec alignment requirement.
//
#define SD_PEIM_MEM_UNIT 128
#define SD_PEIM_MEM_UNIT 128
#define SD_PEIM_MEM_UNIT_MASK (SD_PEIM_MEM_UNIT - 1)
#define SD_PEIM_MEM_DEFAULT_PAGES 16
#define SD_PEIM_MEM_ROUND(Len) (((Len) + SD_PEIM_MEM_UNIT_MASK) & (~SD_PEIM_MEM_UNIT_MASK))
#define SD_PEIM_MEM_ROUND(Len) (((Len) + SD_PEIM_MEM_UNIT_MASK) & (~SD_PEIM_MEM_UNIT_MASK))
//
// Advance the byte and bit to the next bit, adjust byte accordingly.
@@ -53,4 +53,3 @@ typedef struct _SD_PEIM_MEM_POOL {
} while (0)
#endif

File diff suppressed because it is too large Load Diff

View File

@@ -61,9 +61,9 @@ typedef enum {
//
// The maximum data length of each descriptor line
//
#define ADMA_MAX_DATA_PER_LINE 0x10000
#define SD_SDMA_BOUNDARY 512 * 1024
#define SD_SDMA_ROUND_UP(x, n) (((x) + n) & ~(n - 1))
#define ADMA_MAX_DATA_PER_LINE 0x10000
#define SD_SDMA_BOUNDARY 512 * 1024
#define SD_SDMA_ROUND_UP(x, n) (((x) + n) & ~(n - 1))
typedef enum {
SdCommandTypeBc, // Broadcast commands, no response
@@ -85,76 +85,76 @@ typedef enum {
} SD_RESPONSE_TYPE;
typedef struct _SD_COMMAND_BLOCK {
UINT16 CommandIndex;
UINT32 CommandArgument;
UINT32 CommandType; // One of the SD_COMMAND_TYPE values
UINT32 ResponseType; // One of the SD_RESPONSE_TYPE values
UINT16 CommandIndex;
UINT32 CommandArgument;
UINT32 CommandType; // One of the SD_COMMAND_TYPE values
UINT32 ResponseType; // One of the SD_RESPONSE_TYPE values
} SD_COMMAND_BLOCK;
typedef struct _SD_STATUS_BLOCK {
UINT32 Resp0;
UINT32 Resp1;
UINT32 Resp2;
UINT32 Resp3;
UINT32 Resp0;
UINT32 Resp1;
UINT32 Resp2;
UINT32 Resp3;
} SD_STATUS_BLOCK;
typedef struct _SD_COMMAND_PACKET {
UINT64 Timeout;
SD_COMMAND_BLOCK *SdCmdBlk;
SD_STATUS_BLOCK *SdStatusBlk;
VOID *InDataBuffer;
VOID *OutDataBuffer;
UINT32 InTransferLength;
UINT32 OutTransferLength;
UINT64 Timeout;
SD_COMMAND_BLOCK *SdCmdBlk;
SD_STATUS_BLOCK *SdStatusBlk;
VOID *InDataBuffer;
VOID *OutDataBuffer;
UINT32 InTransferLength;
UINT32 OutTransferLength;
} SD_COMMAND_PACKET;
#pragma pack(1)
typedef struct {
UINT32 Valid:1;
UINT32 End:1;
UINT32 Int:1;
UINT32 Reserved:1;
UINT32 Act:2;
UINT32 Reserved1:10;
UINT32 Length:16;
UINT32 Address;
UINT32 Valid : 1;
UINT32 End : 1;
UINT32 Int : 1;
UINT32 Reserved : 1;
UINT32 Act : 2;
UINT32 Reserved1 : 10;
UINT32 Length : 16;
UINT32 Address;
} SD_HC_ADMA_DESC_LINE;
typedef struct {
UINT32 TimeoutFreq:6; // bit 0:5
UINT32 Reserved:1; // bit 6
UINT32 TimeoutUnit:1; // bit 7
UINT32 BaseClkFreq:8; // bit 8:15
UINT32 MaxBlkLen:2; // bit 16:17
UINT32 BusWidth8:1; // bit 18
UINT32 Adma2:1; // bit 19
UINT32 Reserved2:1; // bit 20
UINT32 HighSpeed:1; // bit 21
UINT32 Sdma:1; // bit 22
UINT32 SuspRes:1; // bit 23
UINT32 Voltage33:1; // bit 24
UINT32 Voltage30:1; // bit 25
UINT32 Voltage18:1; // bit 26
UINT32 Reserved3:1; // bit 27
UINT32 SysBus64:1; // bit 28
UINT32 AsyncInt:1; // bit 29
UINT32 SlotType:2; // bit 30:31
UINT32 Sdr50:1; // bit 32
UINT32 Sdr104:1; // bit 33
UINT32 Ddr50:1; // bit 34
UINT32 Reserved4:1; // bit 35
UINT32 DriverTypeA:1; // bit 36
UINT32 DriverTypeC:1; // bit 37
UINT32 DriverTypeD:1; // bit 38
UINT32 DriverType4:1; // bit 39
UINT32 TimerCount:4; // bit 40:43
UINT32 Reserved5:1; // bit 44
UINT32 TuningSDR50:1; // bit 45
UINT32 RetuningMod:2; // bit 46:47
UINT32 ClkMultiplier:8; // bit 48:55
UINT32 Reserved6:7; // bit 56:62
UINT32 Hs400:1; // bit 63
UINT32 TimeoutFreq : 6; // bit 0:5
UINT32 Reserved : 1; // bit 6
UINT32 TimeoutUnit : 1; // bit 7
UINT32 BaseClkFreq : 8; // bit 8:15
UINT32 MaxBlkLen : 2; // bit 16:17
UINT32 BusWidth8 : 1; // bit 18
UINT32 Adma2 : 1; // bit 19
UINT32 Reserved2 : 1; // bit 20
UINT32 HighSpeed : 1; // bit 21
UINT32 Sdma : 1; // bit 22
UINT32 SuspRes : 1; // bit 23
UINT32 Voltage33 : 1; // bit 24
UINT32 Voltage30 : 1; // bit 25
UINT32 Voltage18 : 1; // bit 26
UINT32 Reserved3 : 1; // bit 27
UINT32 SysBus64 : 1; // bit 28
UINT32 AsyncInt : 1; // bit 29
UINT32 SlotType : 2; // bit 30:31
UINT32 Sdr50 : 1; // bit 32
UINT32 Sdr104 : 1; // bit 33
UINT32 Ddr50 : 1; // bit 34
UINT32 Reserved4 : 1; // bit 35
UINT32 DriverTypeA : 1; // bit 36
UINT32 DriverTypeC : 1; // bit 37
UINT32 DriverTypeD : 1; // bit 38
UINT32 DriverType4 : 1; // bit 39
UINT32 TimerCount : 4; // bit 40:43
UINT32 Reserved5 : 1; // bit 44
UINT32 TuningSDR50 : 1; // bit 45
UINT32 RetuningMod : 2; // bit 46:47
UINT32 ClkMultiplier : 8; // bit 48:55
UINT32 Reserved6 : 7; // bit 56:62
UINT32 Hs400 : 1; // bit 63
} SD_HC_SLOT_CAP;
#pragma pack()
@@ -170,7 +170,7 @@ typedef struct {
**/
EFI_STATUS
SdPeimHcReset (
IN UINTN Bar
IN UINTN Bar
);
/**
@@ -185,7 +185,7 @@ SdPeimHcReset (
**/
EFI_STATUS
SdPeimHcEnableInterrupt (
IN UINTN Bar
IN UINTN Bar
);
/**
@@ -200,8 +200,8 @@ SdPeimHcEnableInterrupt (
**/
EFI_STATUS
SdPeimHcGetCapability (
IN UINTN Bar,
OUT SD_HC_SLOT_CAP *Capability
IN UINTN Bar,
OUT SD_HC_SLOT_CAP *Capability
);
/**
@@ -219,7 +219,7 @@ SdPeimHcGetCapability (
**/
EFI_STATUS
SdPeimHcCardDetect (
IN UINTN Bar
IN UINTN Bar
);
/**
@@ -234,7 +234,7 @@ SdPeimHcCardDetect (
**/
EFI_STATUS
SdPeimHcInitHost (
IN UINTN Bar
IN UINTN Bar
);
/**
@@ -256,13 +256,13 @@ SdPeimHcInitHost (
**/
EFI_STATUS
SdPeimSwitch (
IN SD_PEIM_HC_SLOT *Slot,
IN UINT8 AccessMode,
IN UINT8 CommandSystem,
IN UINT8 DriveStrength,
IN UINT8 PowerLimit,
IN BOOLEAN Mode,
OUT UINT8 *SwitchResp
IN SD_PEIM_HC_SLOT *Slot,
IN UINT8 AccessMode,
IN UINT8 CommandSystem,
IN UINT8 DriveStrength,
IN UINT8 PowerLimit,
IN BOOLEAN Mode,
OUT UINT8 *SwitchResp
);
/**
@@ -284,12 +284,12 @@ SdPeimSwitch (
**/
EFI_STATUS
SdPeimRwSingleBlock (
IN SD_PEIM_HC_SLOT *Slot,
IN EFI_LBA Lba,
IN UINT32 BlockSize,
IN VOID *Buffer,
IN UINTN BufferSize,
IN BOOLEAN IsRead
IN SD_PEIM_HC_SLOT *Slot,
IN EFI_LBA Lba,
IN UINT32 BlockSize,
IN VOID *Buffer,
IN UINTN BufferSize,
IN BOOLEAN IsRead
);
/**
@@ -311,12 +311,12 @@ SdPeimRwSingleBlock (
**/
EFI_STATUS
SdPeimRwMultiBlocks (
IN SD_PEIM_HC_SLOT *Slot,
IN EFI_LBA Lba,
IN UINT32 BlockSize,
IN VOID *Buffer,
IN UINTN BufferSize,
IN BOOLEAN IsRead
IN SD_PEIM_HC_SLOT *Slot,
IN EFI_LBA Lba,
IN UINT32 BlockSize,
IN VOID *Buffer,
IN UINTN BufferSize,
IN BOOLEAN IsRead
);
/**
@@ -332,7 +332,7 @@ SdPeimRwMultiBlocks (
**/
EFI_STATUS
SdPeimIdentification (
IN SD_PEIM_HC_SLOT *Slot
IN SD_PEIM_HC_SLOT *Slot
);
/**
@@ -343,8 +343,7 @@ SdPeimIdentification (
**/
VOID
SdPeimFreeTrb (
IN SD_TRB *Trb
IN SD_TRB *Trb
);
#endif

View File

@@ -11,17 +11,17 @@
//
// Driver name table
//
GLOBAL_REMOVE_IF_UNREFERENCED EFI_UNICODE_STRING_TABLE mSdDxeDriverNameTable[] = {
GLOBAL_REMOVE_IF_UNREFERENCED EFI_UNICODE_STRING_TABLE mSdDxeDriverNameTable[] = {
{ "eng;en", L"Edkii Sd Memory Card Device Driver" },
{ NULL , NULL }
{ NULL, NULL }
};
//
// Controller name table
//
GLOBAL_REMOVE_IF_UNREFERENCED EFI_UNICODE_STRING_TABLE mSdDxeControllerNameTable[] = {
GLOBAL_REMOVE_IF_UNREFERENCED EFI_UNICODE_STRING_TABLE mSdDxeControllerNameTable[] = {
{ "eng;en", L"Edkii Sd Host Controller" },
{ NULL , NULL }
{ NULL, NULL }
};
//
@@ -36,9 +36,9 @@ GLOBAL_REMOVE_IF_UNREFERENCED EFI_COMPONENT_NAME_PROTOCOL gSdDxeComponentName =
//
// EFI Component Name 2 Protocol
//
GLOBAL_REMOVE_IF_UNREFERENCED EFI_COMPONENT_NAME2_PROTOCOL gSdDxeComponentName2 = {
(EFI_COMPONENT_NAME2_GET_DRIVER_NAME) SdDxeComponentNameGetDriverName,
(EFI_COMPONENT_NAME2_GET_CONTROLLER_NAME) SdDxeComponentNameGetControllerName,
GLOBAL_REMOVE_IF_UNREFERENCED EFI_COMPONENT_NAME2_PROTOCOL gSdDxeComponentName2 = {
(EFI_COMPONENT_NAME2_GET_DRIVER_NAME)SdDxeComponentNameGetDriverName,
(EFI_COMPONENT_NAME2_GET_CONTROLLER_NAME)SdDxeComponentNameGetControllerName,
"en"
};
@@ -96,7 +96,6 @@ SdDxeComponentNameGetDriverName (
DriverName,
(BOOLEAN)(This == &gSdDxeComponentName)
);
}
/**
@@ -170,11 +169,11 @@ SdDxeComponentNameGetDriverName (
EFI_STATUS
EFIAPI
SdDxeComponentNameGetControllerName (
IN EFI_COMPONENT_NAME_PROTOCOL *This,
IN EFI_HANDLE ControllerHandle,
IN EFI_HANDLE ChildHandle OPTIONAL,
IN CHAR8 *Language,
OUT CHAR16 **ControllerName
IN EFI_COMPONENT_NAME_PROTOCOL *This,
IN EFI_HANDLE ControllerHandle,
IN EFI_HANDLE ChildHandle OPTIONAL,
IN CHAR8 *Language,
OUT CHAR16 **ControllerName
)
{
EFI_STATUS Status;
@@ -204,13 +203,14 @@ SdDxeComponentNameGetControllerName (
if (EFI_ERROR (Status)) {
return Status;
}
//
// Get the child context
//
Status = gBS->OpenProtocol (
ChildHandle,
&gEfiBlockIoProtocolGuid,
(VOID **) &BlockIo,
(VOID **)&BlockIo,
gSdDxeDriverBinding.DriverBindingHandle,
ChildHandle,
EFI_OPEN_PROTOCOL_GET_PROTOCOL
@@ -219,7 +219,7 @@ SdDxeComponentNameGetControllerName (
return EFI_UNSUPPORTED;
}
Device = SD_DEVICE_DATA_FROM_BLKIO (BlockIo);
Device = SD_DEVICE_DATA_FROM_BLKIO (BlockIo);
ControllerNameTable = Device->ControllerNameTable;
}
@@ -231,4 +231,3 @@ SdDxeComponentNameGetControllerName (
(BOOLEAN)(This == &gSdDxeComponentName)
);
}

View File

@@ -19,20 +19,24 @@
VOID
EFIAPI
AsyncIoCallback (
IN EFI_EVENT Event,
IN VOID *Context
IN EFI_EVENT Event,
IN VOID *Context
)
{
SD_REQUEST *Request;
SD_REQUEST *Request;
gBS->CloseEvent (Event);
Request = (SD_REQUEST *) Context;
Request = (SD_REQUEST *)Context;
DEBUG_CODE_BEGIN ();
DEBUG ((DEBUG_INFO, "Sd Async Request: CmdIndex[%d] Arg[%08x] %r\n",
Request->SdMmcCmdBlk.CommandIndex, Request->SdMmcCmdBlk.CommandArgument,
Request->Packet.TransactionStatus));
DEBUG ((
DEBUG_INFO,
"Sd Async Request: CmdIndex[%d] Arg[%08x] %r\n",
Request->SdMmcCmdBlk.CommandIndex,
Request->SdMmcCmdBlk.CommandArgument,
Request->Packet.TransactionStatus
));
DEBUG_CODE_END ();
if (EFI_ERROR (Request->Packet.TransactionStatus)) {
@@ -61,8 +65,8 @@ AsyncIoCallback (
**/
EFI_STATUS
SdSetRca (
IN SD_DEVICE *Device,
OUT UINT16 *Rca
IN SD_DEVICE *Device,
OUT UINT16 *Rca
)
{
EFI_STATUS Status;
@@ -106,8 +110,8 @@ SdSetRca (
**/
EFI_STATUS
SdSelect (
IN SD_DEVICE *Device,
IN UINT16 Rca
IN SD_DEVICE *Device,
IN UINT16 Rca
)
{
EFI_STATUS Status;
@@ -130,6 +134,7 @@ SdSelect (
if (Rca != 0) {
SdMmcCmdBlk.ResponseType = SdMmcResponseTypeR1b;
}
SdMmcCmdBlk.CommandArgument = (UINT32)Rca << 16;
Status = PassThru->PassThru (PassThru, Device->Slot, &Packet, NULL);
@@ -151,9 +156,9 @@ SdSelect (
**/
EFI_STATUS
SdSendStatus (
IN SD_DEVICE *Device,
IN UINT16 Rca,
OUT UINT32 *DevStatus
IN SD_DEVICE *Device,
IN UINT16 Rca,
OUT UINT32 *DevStatus
)
{
EFI_STATUS Status;
@@ -171,15 +176,16 @@ SdSendStatus (
Packet.SdMmcStatusBlk = &SdMmcStatusBlk;
Packet.Timeout = SD_GENERIC_TIMEOUT;
SdMmcCmdBlk.CommandIndex = SD_SEND_STATUS;
SdMmcCmdBlk.CommandType = SdMmcCommandTypeAc;
SdMmcCmdBlk.ResponseType = SdMmcResponseTypeR1;
SdMmcCmdBlk.CommandIndex = SD_SEND_STATUS;
SdMmcCmdBlk.CommandType = SdMmcCommandTypeAc;
SdMmcCmdBlk.ResponseType = SdMmcResponseTypeR1;
SdMmcCmdBlk.CommandArgument = (UINT32)Rca << 16;
Status = PassThru->PassThru (PassThru, Device->Slot, &Packet, NULL);
if (!EFI_ERROR (Status)) {
CopyMem (DevStatus, &SdMmcStatusBlk.Resp0, sizeof (UINT32));
}
return Status;
}
@@ -197,9 +203,9 @@ SdSendStatus (
**/
EFI_STATUS
SdGetCsd (
IN SD_DEVICE *Device,
IN UINT16 Rca,
OUT SD_CSD *Csd
IN SD_DEVICE *Device,
IN UINT16 Rca,
OUT SD_CSD *Csd
)
{
EFI_STATUS Status;
@@ -219,9 +225,9 @@ SdGetCsd (
Packet.SdMmcStatusBlk = &SdMmcStatusBlk;
Packet.Timeout = SD_GENERIC_TIMEOUT;
SdMmcCmdBlk.CommandIndex = SD_SEND_CSD;
SdMmcCmdBlk.CommandType = SdMmcCommandTypeAc;
SdMmcCmdBlk.ResponseType = SdMmcResponseTypeR2;
SdMmcCmdBlk.CommandIndex = SD_SEND_CSD;
SdMmcCmdBlk.CommandType = SdMmcCommandTypeAc;
SdMmcCmdBlk.ResponseType = SdMmcResponseTypeR2;
SdMmcCmdBlk.CommandArgument = (UINT32)Rca << 16;
Status = PassThru->PassThru (PassThru, Device->Slot, &Packet, NULL);
@@ -230,7 +236,7 @@ SdGetCsd (
//
// For details, refer to SD Host Controller Simplified Spec 3.0 Table 2-12.
//
CopyMem (((UINT8*)Csd) + 1, &SdMmcStatusBlk.Resp0, sizeof (SD_CSD) - 1);
CopyMem (((UINT8 *)Csd) + 1, &SdMmcStatusBlk.Resp0, sizeof (SD_CSD) - 1);
}
return Status;
@@ -250,9 +256,9 @@ SdGetCsd (
**/
EFI_STATUS
SdGetCid (
IN SD_DEVICE *Device,
IN UINT16 Rca,
OUT SD_CID *Cid
IN SD_DEVICE *Device,
IN UINT16 Rca,
OUT SD_CID *Cid
)
{
EFI_STATUS Status;
@@ -272,9 +278,9 @@ SdGetCid (
Packet.SdMmcStatusBlk = &SdMmcStatusBlk;
Packet.Timeout = SD_GENERIC_TIMEOUT;
SdMmcCmdBlk.CommandIndex = SD_SEND_CID;
SdMmcCmdBlk.CommandType = SdMmcCommandTypeAc;
SdMmcCmdBlk.ResponseType = SdMmcResponseTypeR2;
SdMmcCmdBlk.CommandIndex = SD_SEND_CID;
SdMmcCmdBlk.CommandType = SdMmcCommandTypeAc;
SdMmcCmdBlk.ResponseType = SdMmcResponseTypeR2;
SdMmcCmdBlk.CommandArgument = (UINT32)Rca << 16;
Status = PassThru->PassThru (PassThru, Device->Slot, &Packet, NULL);
@@ -283,7 +289,7 @@ SdGetCid (
//
// For details, refer to SD Host Controller Simplified Spec 3.0 Table 2-12.
//
CopyMem (((UINT8*)Cid) + 1, &SdMmcStatusBlk.Resp0, sizeof (SD_CID) - 1);
CopyMem (((UINT8 *)Cid) + 1, &SdMmcStatusBlk.Resp0, sizeof (SD_CID) - 1);
}
return Status;
@@ -310,19 +316,19 @@ SdGetCid (
**/
EFI_STATUS
SdRwSingleBlock (
IN SD_DEVICE *Device,
IN EFI_LBA Lba,
IN VOID *Buffer,
IN UINTN BufferSize,
IN BOOLEAN IsRead,
IN EFI_BLOCK_IO2_TOKEN *Token,
IN BOOLEAN IsEnd
IN SD_DEVICE *Device,
IN EFI_LBA Lba,
IN VOID *Buffer,
IN UINTN BufferSize,
IN BOOLEAN IsRead,
IN EFI_BLOCK_IO2_TOKEN *Token,
IN BOOLEAN IsEnd
)
{
EFI_STATUS Status;
EFI_SD_MMC_PASS_THRU_PROTOCOL *PassThru;
SD_REQUEST *RwSingleBlkReq;
EFI_TPL OldTpl;
EFI_STATUS Status;
EFI_SD_MMC_PASS_THRU_PROTOCOL *PassThru;
SD_REQUEST *RwSingleBlkReq;
EFI_TPL OldTpl;
RwSingleBlkReq = NULL;
PassThru = Device->Private->PassThru;
@@ -334,7 +340,7 @@ SdRwSingleBlock (
}
RwSingleBlkReq->Signature = SD_REQUEST_SIGNATURE;
OldTpl = gBS->RaiseTPL (TPL_NOTIFY);
OldTpl = gBS->RaiseTPL (TPL_NOTIFY);
InsertTailList (&Device->Queue, &RwSingleBlkReq->Link);
gBS->RestoreTPL (OldTpl);
RwSingleBlkReq->Packet.SdMmcCmdBlk = &RwSingleBlkReq->SdMmcCmdBlk;
@@ -403,6 +409,7 @@ Error:
if (RwSingleBlkReq->Event != NULL) {
gBS->CloseEvent (RwSingleBlkReq->Event);
}
FreePool (RwSingleBlkReq);
}
} else {
@@ -441,19 +448,19 @@ Error:
**/
EFI_STATUS
SdRwMultiBlocks (
IN SD_DEVICE *Device,
IN EFI_LBA Lba,
IN VOID *Buffer,
IN UINTN BufferSize,
IN BOOLEAN IsRead,
IN EFI_BLOCK_IO2_TOKEN *Token,
IN BOOLEAN IsEnd
IN SD_DEVICE *Device,
IN EFI_LBA Lba,
IN VOID *Buffer,
IN UINTN BufferSize,
IN BOOLEAN IsRead,
IN EFI_BLOCK_IO2_TOKEN *Token,
IN BOOLEAN IsEnd
)
{
EFI_STATUS Status;
SD_REQUEST *RwMultiBlkReq;
EFI_SD_MMC_PASS_THRU_PROTOCOL *PassThru;
EFI_TPL OldTpl;
EFI_STATUS Status;
SD_REQUEST *RwMultiBlkReq;
EFI_SD_MMC_PASS_THRU_PROTOCOL *PassThru;
EFI_TPL OldTpl;
RwMultiBlkReq = NULL;
@@ -466,7 +473,7 @@ SdRwMultiBlocks (
}
RwMultiBlkReq->Signature = SD_REQUEST_SIGNATURE;
OldTpl = gBS->RaiseTPL (TPL_NOTIFY);
OldTpl = gBS->RaiseTPL (TPL_NOTIFY);
InsertTailList (&Device->Queue, &RwMultiBlkReq->Link);
gBS->RestoreTPL (OldTpl);
RwMultiBlkReq->Packet.SdMmcCmdBlk = &RwMultiBlkReq->SdMmcCmdBlk;
@@ -535,6 +542,7 @@ Error:
if (RwMultiBlkReq->Event != NULL) {
gBS->CloseEvent (RwMultiBlkReq->Event);
}
FreePool (RwMultiBlkReq);
}
} else {
@@ -577,23 +585,23 @@ Error:
**/
EFI_STATUS
SdReadWrite (
IN SD_DEVICE *Device,
IN UINT32 MediaId,
IN EFI_LBA Lba,
IN OUT VOID *Buffer,
IN UINTN BufferSize,
IN BOOLEAN IsRead,
IN OUT EFI_BLOCK_IO2_TOKEN *Token
IN SD_DEVICE *Device,
IN UINT32 MediaId,
IN EFI_LBA Lba,
IN OUT VOID *Buffer,
IN UINTN BufferSize,
IN BOOLEAN IsRead,
IN OUT EFI_BLOCK_IO2_TOKEN *Token
)
{
EFI_STATUS Status;
EFI_BLOCK_IO_MEDIA *Media;
UINTN BlockSize;
UINTN BlockNum;
UINTN IoAlign;
UINTN Remaining;
UINT32 MaxBlock;
BOOLEAN LastRw;
EFI_STATUS Status;
EFI_BLOCK_IO_MEDIA *Media;
UINTN BlockSize;
UINTN BlockNum;
UINTN IoAlign;
UINTN Remaining;
UINT32 MaxBlock;
BOOLEAN LastRw;
Status = EFI_SUCCESS;
Media = &Device->BlockMedia;
@@ -619,6 +627,7 @@ SdReadWrite (
Token->TransactionStatus = EFI_SUCCESS;
gBS->SignalEvent (Token->Event);
}
return EFI_SUCCESS;
}
@@ -627,13 +636,13 @@ SdReadWrite (
return EFI_BAD_BUFFER_SIZE;
}
BlockNum = BufferSize / BlockSize;
BlockNum = BufferSize / BlockSize;
if ((Lba + BlockNum - 1) > Media->LastBlock) {
return EFI_INVALID_PARAMETER;
}
IoAlign = Media->IoAlign;
if (IoAlign > 0 && (((UINTN) Buffer & (IoAlign - 1)) != 0)) {
if ((IoAlign > 0) && (((UINTN)Buffer & (IoAlign - 1)) != 0)) {
return EFI_INVALID_PARAMETER;
}
@@ -661,14 +670,22 @@ SdReadWrite (
} else {
Status = SdRwMultiBlocks (Device, Lba, Buffer, BufferSize, IsRead, Token, LastRw);
}
if (EFI_ERROR (Status)) {
return Status;
}
DEBUG ((DEBUG_BLKIO, "Sd%a(): Lba 0x%x BlkNo 0x%x Event %p with %r\n",
IsRead ? "Read" : "Write", Lba, BlockNum,
(Token != NULL) ? Token->Event : NULL, Status));
Lba += BlockNum;
Buffer = (UINT8*)Buffer + BufferSize;
DEBUG ((
DEBUG_BLKIO,
"Sd%a(): Lba 0x%x BlkNo 0x%x Event %p with %r\n",
IsRead ? "Read" : "Write",
Lba,
BlockNum,
(Token != NULL) ? Token->Event : NULL,
Status
));
Lba += BlockNum;
Buffer = (UINT8 *)Buffer + BufferSize;
Remaining -= BlockNum;
}
@@ -689,13 +706,13 @@ SdReadWrite (
EFI_STATUS
EFIAPI
SdReset (
IN EFI_BLOCK_IO_PROTOCOL *This,
IN BOOLEAN ExtendedVerification
IN EFI_BLOCK_IO_PROTOCOL *This,
IN BOOLEAN ExtendedVerification
)
{
EFI_STATUS Status;
SD_DEVICE *Device;
EFI_SD_MMC_PASS_THRU_PROTOCOL *PassThru;
EFI_STATUS Status;
SD_DEVICE *Device;
EFI_SD_MMC_PASS_THRU_PROTOCOL *PassThru;
Device = SD_DEVICE_DATA_FROM_BLKIO (This);
@@ -734,11 +751,11 @@ SdReadBlocks (
IN UINT32 MediaId,
IN EFI_LBA Lba,
IN UINTN BufferSize,
OUT VOID *Buffer
OUT VOID *Buffer
)
{
EFI_STATUS Status;
SD_DEVICE *Device;
EFI_STATUS Status;
SD_DEVICE *Device;
Device = SD_DEVICE_DATA_FROM_BLKIO (This);
@@ -769,15 +786,15 @@ SdReadBlocks (
EFI_STATUS
EFIAPI
SdWriteBlocks (
IN EFI_BLOCK_IO_PROTOCOL *This,
IN UINT32 MediaId,
IN EFI_LBA Lba,
IN UINTN BufferSize,
IN VOID *Buffer
IN EFI_BLOCK_IO_PROTOCOL *This,
IN UINT32 MediaId,
IN EFI_LBA Lba,
IN UINTN BufferSize,
IN VOID *Buffer
)
{
EFI_STATUS Status;
SD_DEVICE *Device;
EFI_STATUS Status;
SD_DEVICE *Device;
Device = SD_DEVICE_DATA_FROM_BLKIO (This);
@@ -798,7 +815,7 @@ SdWriteBlocks (
EFI_STATUS
EFIAPI
SdFlushBlocks (
IN EFI_BLOCK_IO_PROTOCOL *This
IN EFI_BLOCK_IO_PROTOCOL *This
)
{
//
@@ -825,18 +842,19 @@ SdResetEx (
IN BOOLEAN ExtendedVerification
)
{
SD_DEVICE *Device;
LIST_ENTRY *Link;
LIST_ENTRY *NextLink;
SD_REQUEST *Request;
EFI_TPL OldTpl;
SD_DEVICE *Device;
LIST_ENTRY *Link;
LIST_ENTRY *NextLink;
SD_REQUEST *Request;
EFI_TPL OldTpl;
Device = SD_DEVICE_DATA_FROM_BLKIO2 (This);
OldTpl = gBS->RaiseTPL (TPL_NOTIFY);
for (Link = GetFirstNode (&Device->Queue);
!IsNull (&Device->Queue, Link);
Link = NextLink) {
Link = NextLink)
{
NextLink = GetNextNode (&Device->Queue, Link);
RemoveEntryList (Link);
@@ -851,6 +869,7 @@ SdResetEx (
FreePool (Request);
}
gBS->RestoreTPL (OldTpl);
return EFI_SUCCESS;
@@ -885,16 +904,16 @@ SdResetEx (
EFI_STATUS
EFIAPI
SdReadBlocksEx (
IN EFI_BLOCK_IO2_PROTOCOL *This,
IN UINT32 MediaId,
IN EFI_LBA Lba,
IN OUT EFI_BLOCK_IO2_TOKEN *Token,
IN UINTN BufferSize,
OUT VOID *Buffer
IN EFI_BLOCK_IO2_PROTOCOL *This,
IN UINT32 MediaId,
IN EFI_LBA Lba,
IN OUT EFI_BLOCK_IO2_TOKEN *Token,
IN UINTN BufferSize,
OUT VOID *Buffer
)
{
EFI_STATUS Status;
SD_DEVICE *Device;
EFI_STATUS Status;
SD_DEVICE *Device;
Device = SD_DEVICE_DATA_FROM_BLKIO2 (This);
@@ -927,16 +946,16 @@ SdReadBlocksEx (
EFI_STATUS
EFIAPI
SdWriteBlocksEx (
IN EFI_BLOCK_IO2_PROTOCOL *This,
IN UINT32 MediaId,
IN EFI_LBA Lba,
IN OUT EFI_BLOCK_IO2_TOKEN *Token,
IN UINTN BufferSize,
IN VOID *Buffer
IN EFI_BLOCK_IO2_PROTOCOL *This,
IN UINT32 MediaId,
IN EFI_LBA Lba,
IN OUT EFI_BLOCK_IO2_TOKEN *Token,
IN UINTN BufferSize,
IN VOID *Buffer
)
{
EFI_STATUS Status;
SD_DEVICE *Device;
EFI_STATUS Status;
SD_DEVICE *Device;
Device = SD_DEVICE_DATA_FROM_BLKIO2 (This);
@@ -965,7 +984,7 @@ SdFlushBlocksEx (
//
// Signal event and return directly.
//
if (Token != NULL && Token->Event != NULL) {
if ((Token != NULL) && (Token->Event != NULL)) {
Token->TransactionStatus = EFI_SUCCESS;
gBS->SignalEvent (Token->Event);
}
@@ -989,16 +1008,16 @@ SdFlushBlocksEx (
**/
EFI_STATUS
SdEraseBlockStart (
IN SD_DEVICE *Device,
IN EFI_LBA StartLba,
IN EFI_BLOCK_IO2_TOKEN *Token,
IN BOOLEAN IsEnd
IN SD_DEVICE *Device,
IN EFI_LBA StartLba,
IN EFI_BLOCK_IO2_TOKEN *Token,
IN BOOLEAN IsEnd
)
{
EFI_STATUS Status;
EFI_SD_MMC_PASS_THRU_PROTOCOL *PassThru;
SD_REQUEST *EraseBlockStart;
EFI_TPL OldTpl;
EFI_STATUS Status;
EFI_SD_MMC_PASS_THRU_PROTOCOL *PassThru;
SD_REQUEST *EraseBlockStart;
EFI_TPL OldTpl;
EraseBlockStart = NULL;
PassThru = Device->Private->PassThru;
@@ -1010,7 +1029,7 @@ SdEraseBlockStart (
}
EraseBlockStart->Signature = SD_REQUEST_SIGNATURE;
OldTpl = gBS->RaiseTPL (TPL_NOTIFY);
OldTpl = gBS->RaiseTPL (TPL_NOTIFY);
InsertTailList (&Device->Queue, &EraseBlockStart->Link);
gBS->RestoreTPL (OldTpl);
EraseBlockStart->Packet.SdMmcCmdBlk = &EraseBlockStart->SdMmcCmdBlk;
@@ -1060,6 +1079,7 @@ Error:
if (EraseBlockStart->Event != NULL) {
gBS->CloseEvent (EraseBlockStart->Event);
}
FreePool (EraseBlockStart);
}
} else {
@@ -1093,16 +1113,16 @@ Error:
**/
EFI_STATUS
SdEraseBlockEnd (
IN SD_DEVICE *Device,
IN EFI_LBA EndLba,
IN EFI_BLOCK_IO2_TOKEN *Token,
IN BOOLEAN IsEnd
IN SD_DEVICE *Device,
IN EFI_LBA EndLba,
IN EFI_BLOCK_IO2_TOKEN *Token,
IN BOOLEAN IsEnd
)
{
EFI_STATUS Status;
EFI_SD_MMC_PASS_THRU_PROTOCOL *PassThru;
SD_REQUEST *EraseBlockEnd;
EFI_TPL OldTpl;
EFI_STATUS Status;
EFI_SD_MMC_PASS_THRU_PROTOCOL *PassThru;
SD_REQUEST *EraseBlockEnd;
EFI_TPL OldTpl;
EraseBlockEnd = NULL;
PassThru = Device->Private->PassThru;
@@ -1114,7 +1134,7 @@ SdEraseBlockEnd (
}
EraseBlockEnd->Signature = SD_REQUEST_SIGNATURE;
OldTpl = gBS->RaiseTPL (TPL_NOTIFY);
OldTpl = gBS->RaiseTPL (TPL_NOTIFY);
InsertTailList (&Device->Queue, &EraseBlockEnd->Link);
gBS->RestoreTPL (OldTpl);
EraseBlockEnd->Packet.SdMmcCmdBlk = &EraseBlockEnd->SdMmcCmdBlk;
@@ -1164,6 +1184,7 @@ Error:
if (EraseBlockEnd->Event != NULL) {
gBS->CloseEvent (EraseBlockEnd->Event);
}
FreePool (EraseBlockEnd);
}
} else {
@@ -1196,15 +1217,15 @@ Error:
**/
EFI_STATUS
SdEraseBlock (
IN SD_DEVICE *Device,
IN EFI_BLOCK_IO2_TOKEN *Token,
IN BOOLEAN IsEnd
IN SD_DEVICE *Device,
IN EFI_BLOCK_IO2_TOKEN *Token,
IN BOOLEAN IsEnd
)
{
EFI_STATUS Status;
EFI_SD_MMC_PASS_THRU_PROTOCOL *PassThru;
SD_REQUEST *EraseBlock;
EFI_TPL OldTpl;
EFI_STATUS Status;
EFI_SD_MMC_PASS_THRU_PROTOCOL *PassThru;
SD_REQUEST *EraseBlock;
EFI_TPL OldTpl;
EraseBlock = NULL;
PassThru = Device->Private->PassThru;
@@ -1216,7 +1237,7 @@ SdEraseBlock (
}
EraseBlock->Signature = SD_REQUEST_SIGNATURE;
OldTpl = gBS->RaiseTPL (TPL_NOTIFY);
OldTpl = gBS->RaiseTPL (TPL_NOTIFY);
InsertTailList (&Device->Queue, &EraseBlock->Link);
gBS->RestoreTPL (OldTpl);
EraseBlock->Packet.SdMmcCmdBlk = &EraseBlock->SdMmcCmdBlk;
@@ -1260,6 +1281,7 @@ Error:
if (EraseBlock->Event != NULL) {
gBS->CloseEvent (EraseBlock->Event);
}
FreePool (EraseBlock);
}
} else {
@@ -1307,19 +1329,19 @@ Error:
EFI_STATUS
EFIAPI
SdEraseBlocks (
IN EFI_ERASE_BLOCK_PROTOCOL *This,
IN UINT32 MediaId,
IN EFI_LBA Lba,
IN OUT EFI_ERASE_BLOCK_TOKEN *Token,
IN UINTN Size
IN EFI_ERASE_BLOCK_PROTOCOL *This,
IN UINT32 MediaId,
IN EFI_LBA Lba,
IN OUT EFI_ERASE_BLOCK_TOKEN *Token,
IN UINTN Size
)
{
EFI_STATUS Status;
EFI_BLOCK_IO_MEDIA *Media;
UINTN BlockSize;
UINTN BlockNum;
EFI_LBA LastLba;
SD_DEVICE *Device;
EFI_STATUS Status;
EFI_BLOCK_IO_MEDIA *Media;
UINTN BlockSize;
UINTN BlockNum;
EFI_LBA LastLba;
SD_DEVICE *Device;
Status = EFI_SUCCESS;
Device = SD_DEVICE_DATA_FROM_ERASEBLK (This);
@@ -1341,7 +1363,7 @@ SdEraseBlocks (
return EFI_INVALID_PARAMETER;
}
BlockNum = Size / BlockSize;
BlockNum = Size / BlockSize;
if ((Lba + BlockNum - 1) > Media->LastBlock) {
return EFI_INVALID_PARAMETER;
}
@@ -1352,17 +1374,17 @@ SdEraseBlocks (
LastLba = Lba + BlockNum - 1;
Status = SdEraseBlockStart (Device, Lba, (EFI_BLOCK_IO2_TOKEN*)Token, FALSE);
Status = SdEraseBlockStart (Device, Lba, (EFI_BLOCK_IO2_TOKEN *)Token, FALSE);
if (EFI_ERROR (Status)) {
return Status;
}
Status = SdEraseBlockEnd (Device, LastLba, (EFI_BLOCK_IO2_TOKEN*)Token, FALSE);
Status = SdEraseBlockEnd (Device, LastLba, (EFI_BLOCK_IO2_TOKEN *)Token, FALSE);
if (EFI_ERROR (Status)) {
return Status;
}
Status = SdEraseBlock (Device, (EFI_BLOCK_IO2_TOKEN*)Token, TRUE);
Status = SdEraseBlock (Device, (EFI_BLOCK_IO2_TOKEN *)Token, TRUE);
if (EFI_ERROR (Status)) {
return Status;
}

View File

@@ -26,8 +26,8 @@
EFI_STATUS
EFIAPI
SdReset (
IN EFI_BLOCK_IO_PROTOCOL *This,
IN BOOLEAN ExtendedVerification
IN EFI_BLOCK_IO_PROTOCOL *This,
IN BOOLEAN ExtendedVerification
);
/**
@@ -56,7 +56,7 @@ SdReadBlocks (
IN UINT32 MediaId,
IN EFI_LBA Lba,
IN UINTN BufferSize,
OUT VOID *Buffer
OUT VOID *Buffer
);
/**
@@ -82,11 +82,11 @@ SdReadBlocks (
EFI_STATUS
EFIAPI
SdWriteBlocks (
IN EFI_BLOCK_IO_PROTOCOL *This,
IN UINT32 MediaId,
IN EFI_LBA Lba,
IN UINTN BufferSize,
IN VOID *Buffer
IN EFI_BLOCK_IO_PROTOCOL *This,
IN UINT32 MediaId,
IN EFI_LBA Lba,
IN UINTN BufferSize,
IN VOID *Buffer
);
/**
@@ -102,7 +102,7 @@ SdWriteBlocks (
EFI_STATUS
EFIAPI
SdFlushBlocks (
IN EFI_BLOCK_IO_PROTOCOL *This
IN EFI_BLOCK_IO_PROTOCOL *This
);
/**
@@ -152,12 +152,12 @@ SdResetEx (
EFI_STATUS
EFIAPI
SdReadBlocksEx (
IN EFI_BLOCK_IO2_PROTOCOL *This,
IN UINT32 MediaId,
IN EFI_LBA Lba,
IN OUT EFI_BLOCK_IO2_TOKEN *Token,
IN UINTN BufferSize,
OUT VOID *Buffer
IN EFI_BLOCK_IO2_PROTOCOL *This,
IN UINT32 MediaId,
IN EFI_LBA Lba,
IN OUT EFI_BLOCK_IO2_TOKEN *Token,
IN UINTN BufferSize,
OUT VOID *Buffer
);
/**
@@ -185,12 +185,12 @@ SdReadBlocksEx (
EFI_STATUS
EFIAPI
SdWriteBlocksEx (
IN EFI_BLOCK_IO2_PROTOCOL *This,
IN UINT32 MediaId,
IN EFI_LBA Lba,
IN OUT EFI_BLOCK_IO2_TOKEN *Token,
IN UINTN BufferSize,
IN VOID *Buffer
IN EFI_BLOCK_IO2_PROTOCOL *This,
IN UINT32 MediaId,
IN EFI_LBA Lba,
IN OUT EFI_BLOCK_IO2_TOKEN *Token,
IN UINTN BufferSize,
IN VOID *Buffer
);
/**
@@ -241,12 +241,11 @@ SdFlushBlocksEx (
EFI_STATUS
EFIAPI
SdEraseBlocks (
IN EFI_ERASE_BLOCK_PROTOCOL *This,
IN UINT32 MediaId,
IN EFI_LBA Lba,
IN OUT EFI_ERASE_BLOCK_TOKEN *Token,
IN UINTN Size
IN EFI_ERASE_BLOCK_PROTOCOL *This,
IN UINT32 MediaId,
IN EFI_LBA Lba,
IN OUT EFI_ERASE_BLOCK_TOKEN *Token,
IN UINTN Size
);
#endif

View File

@@ -32,8 +32,8 @@ SdDiskInfoInquiry (
IN OUT UINT32 *InquiryDataSize
)
{
EFI_STATUS Status;
SD_DEVICE *Device;
EFI_STATUS Status;
SD_DEVICE *Device;
Device = SD_DEVICE_DATA_FROM_DISKINFO (This);

View File

@@ -14,7 +14,7 @@
//
// SdDxe Driver Binding Protocol Instance
//
EFI_DRIVER_BINDING_PROTOCOL gSdDxeDriverBinding = {
EFI_DRIVER_BINDING_PROTOCOL gSdDxeDriverBinding = {
SdDxeDriverBindingSupported,
SdDxeDriverBindingStart,
SdDxeDriverBindingStop,
@@ -26,7 +26,7 @@ EFI_DRIVER_BINDING_PROTOCOL gSdDxeDriverBinding = {
//
// Template for SD_DEVICE data structure.
//
SD_DEVICE mSdDeviceTemplate = {
SD_DEVICE mSdDeviceTemplate = {
SD_DEVICE_SIGNATURE, // Signature
NULL, // Handle
NULL, // DevicePath
@@ -99,41 +99,42 @@ DumpCsd (
IN SD_CSD *Csd
)
{
SD_CSD2 *Csd2;
SD_CSD2 *Csd2;
DEBUG((DEBUG_INFO, "== Dump Sd Csd Register==\n"));
DEBUG((DEBUG_INFO, " CSD structure 0x%x\n", Csd->CsdStructure));
DEBUG((DEBUG_INFO, " Data read access-time 1 0x%x\n", Csd->Taac));
DEBUG((DEBUG_INFO, " Data read access-time 2 0x%x\n", Csd->Nsac));
DEBUG((DEBUG_INFO, " Max. bus clock frequency 0x%x\n", Csd->TranSpeed));
DEBUG((DEBUG_INFO, " Device command classes 0x%x\n", Csd->Ccc));
DEBUG((DEBUG_INFO, " Max. read data block length 0x%x\n", Csd->ReadBlLen));
DEBUG((DEBUG_INFO, " Partial blocks for read allowed 0x%x\n", Csd->ReadBlPartial));
DEBUG((DEBUG_INFO, " Write block misalignment 0x%x\n", Csd->WriteBlkMisalign));
DEBUG((DEBUG_INFO, " Read block misalignment 0x%x\n", Csd->ReadBlkMisalign));
DEBUG((DEBUG_INFO, " DSR implemented 0x%x\n", Csd->DsrImp));
DEBUG ((DEBUG_INFO, "== Dump Sd Csd Register==\n"));
DEBUG ((DEBUG_INFO, " CSD structure 0x%x\n", Csd->CsdStructure));
DEBUG ((DEBUG_INFO, " Data read access-time 1 0x%x\n", Csd->Taac));
DEBUG ((DEBUG_INFO, " Data read access-time 2 0x%x\n", Csd->Nsac));
DEBUG ((DEBUG_INFO, " Max. bus clock frequency 0x%x\n", Csd->TranSpeed));
DEBUG ((DEBUG_INFO, " Device command classes 0x%x\n", Csd->Ccc));
DEBUG ((DEBUG_INFO, " Max. read data block length 0x%x\n", Csd->ReadBlLen));
DEBUG ((DEBUG_INFO, " Partial blocks for read allowed 0x%x\n", Csd->ReadBlPartial));
DEBUG ((DEBUG_INFO, " Write block misalignment 0x%x\n", Csd->WriteBlkMisalign));
DEBUG ((DEBUG_INFO, " Read block misalignment 0x%x\n", Csd->ReadBlkMisalign));
DEBUG ((DEBUG_INFO, " DSR implemented 0x%x\n", Csd->DsrImp));
if (Csd->CsdStructure == 0) {
DEBUG((DEBUG_INFO, " Device size 0x%x\n", Csd->CSizeLow | (Csd->CSizeHigh << 2)));
DEBUG((DEBUG_INFO, " Max. read current @ VDD min 0x%x\n", Csd->VddRCurrMin));
DEBUG((DEBUG_INFO, " Max. read current @ VDD max 0x%x\n", Csd->VddRCurrMax));
DEBUG((DEBUG_INFO, " Max. write current @ VDD min 0x%x\n", Csd->VddWCurrMin));
DEBUG((DEBUG_INFO, " Max. write current @ VDD max 0x%x\n", Csd->VddWCurrMax));
DEBUG ((DEBUG_INFO, " Device size 0x%x\n", Csd->CSizeLow | (Csd->CSizeHigh << 2)));
DEBUG ((DEBUG_INFO, " Max. read current @ VDD min 0x%x\n", Csd->VddRCurrMin));
DEBUG ((DEBUG_INFO, " Max. read current @ VDD max 0x%x\n", Csd->VddRCurrMax));
DEBUG ((DEBUG_INFO, " Max. write current @ VDD min 0x%x\n", Csd->VddWCurrMin));
DEBUG ((DEBUG_INFO, " Max. write current @ VDD max 0x%x\n", Csd->VddWCurrMax));
} else {
Csd2 = (SD_CSD2*)(VOID*)Csd;
DEBUG((DEBUG_INFO, " Device size 0x%x\n", Csd2->CSizeLow | (Csd->CSizeHigh << 16)));
Csd2 = (SD_CSD2 *)(VOID *)Csd;
DEBUG ((DEBUG_INFO, " Device size 0x%x\n", Csd2->CSizeLow | (Csd->CSizeHigh << 16)));
}
DEBUG((DEBUG_INFO, " Erase sector size 0x%x\n", Csd->SectorSize));
DEBUG((DEBUG_INFO, " Erase single block enable 0x%x\n", Csd->EraseBlkEn));
DEBUG((DEBUG_INFO, " Write protect group size 0x%x\n", Csd->WpGrpSize));
DEBUG((DEBUG_INFO, " Write protect group enable 0x%x\n", Csd->WpGrpEnable));
DEBUG((DEBUG_INFO, " Write speed factor 0x%x\n", Csd->R2WFactor));
DEBUG((DEBUG_INFO, " Max. write data block length 0x%x\n", Csd->WriteBlLen));
DEBUG((DEBUG_INFO, " Partial blocks for write allowed 0x%x\n", Csd->WriteBlPartial));
DEBUG((DEBUG_INFO, " File format group 0x%x\n", Csd->FileFormatGrp));
DEBUG((DEBUG_INFO, " Copy flag (OTP) 0x%x\n", Csd->Copy));
DEBUG((DEBUG_INFO, " Permanent write protection 0x%x\n", Csd->PermWriteProtect));
DEBUG((DEBUG_INFO, " Temporary write protection 0x%x\n", Csd->TmpWriteProtect));
DEBUG((DEBUG_INFO, " File format 0x%x\n", Csd->FileFormat));
DEBUG ((DEBUG_INFO, " Erase sector size 0x%x\n", Csd->SectorSize));
DEBUG ((DEBUG_INFO, " Erase single block enable 0x%x\n", Csd->EraseBlkEn));
DEBUG ((DEBUG_INFO, " Write protect group size 0x%x\n", Csd->WpGrpSize));
DEBUG ((DEBUG_INFO, " Write protect group enable 0x%x\n", Csd->WpGrpEnable));
DEBUG ((DEBUG_INFO, " Write speed factor 0x%x\n", Csd->R2WFactor));
DEBUG ((DEBUG_INFO, " Max. write data block length 0x%x\n", Csd->WriteBlLen));
DEBUG ((DEBUG_INFO, " Partial blocks for write allowed 0x%x\n", Csd->WriteBlPartial));
DEBUG ((DEBUG_INFO, " File format group 0x%x\n", Csd->FileFormatGrp));
DEBUG ((DEBUG_INFO, " Copy flag (OTP) 0x%x\n", Csd->Copy));
DEBUG ((DEBUG_INFO, " Permanent write protection 0x%x\n", Csd->PermWriteProtect));
DEBUG ((DEBUG_INFO, " Temporary write protection 0x%x\n", Csd->TmpWriteProtect));
DEBUG ((DEBUG_INFO, " File format 0x%x\n", Csd->FileFormat));
return EFI_SUCCESS;
}
@@ -149,8 +150,8 @@ DumpCsd (
**/
EFI_STATUS
GetSdModelName (
IN OUT SD_DEVICE *Device,
IN SD_CID *Cid
IN OUT SD_DEVICE *Device,
IN SD_CID *Cid
)
{
CHAR8 String[SD_MODEL_NAME_MAX_LEN];
@@ -178,19 +179,19 @@ GetSdModelName (
**/
EFI_STATUS
DiscoverUserArea (
IN SD_DEVICE *Device
IN SD_DEVICE *Device
)
{
EFI_STATUS Status;
SD_CSD *Csd;
SD_CSD2 *Csd2;
SD_CID *Cid;
UINT64 Capacity;
UINT32 DevStatus;
UINT16 Rca;
UINT32 CSize;
UINT32 CSizeMul;
UINT32 ReadBlLen;
EFI_STATUS Status;
SD_CSD *Csd;
SD_CSD2 *Csd2;
SD_CID *Cid;
UINT64 Capacity;
UINT32 DevStatus;
UINT16 Rca;
UINT32 CSize;
UINT32 CSizeMul;
UINT32 ReadBlLen;
//
// Deselect the device to force it enter stby mode.
@@ -210,6 +211,7 @@ DiscoverUserArea (
if (EFI_ERROR (Status)) {
return Status;
}
DumpCsd (Csd);
Cid = &Device->Cid;
@@ -217,6 +219,7 @@ DiscoverUserArea (
if (EFI_ERROR (Status)) {
return Status;
}
GetSdModelName (Device, Cid);
Status = SdSelect (Device, Rca);
@@ -232,15 +235,15 @@ DiscoverUserArea (
if (Csd->CsdStructure == 0) {
Device->SectorAddressing = FALSE;
CSize = (Csd->CSizeHigh << 2 | Csd->CSizeLow) + 1;
CSizeMul = (1 << (Csd->CSizeMul + 2));
ReadBlLen = (1 << (Csd->ReadBlLen));
Capacity = MultU64x32 (MultU64x32 ((UINT64)CSize, CSizeMul), ReadBlLen);
CSize = (Csd->CSizeHigh << 2 | Csd->CSizeLow) + 1;
CSizeMul = (1 << (Csd->CSizeMul + 2));
ReadBlLen = (1 << (Csd->ReadBlLen));
Capacity = MultU64x32 (MultU64x32 ((UINT64)CSize, CSizeMul), ReadBlLen);
} else {
Device->SectorAddressing = TRUE;
Csd2 = (SD_CSD2*)(VOID*)Csd;
CSize = (Csd2->CSizeHigh << 16 | Csd2->CSizeLow) + 1;
Capacity = MultU64x32 ((UINT64)CSize, SIZE_512KB);
Csd2 = (SD_CSD2 *)(VOID *)Csd;
CSize = (Csd2->CSizeHigh << 16 | Csd2->CSizeLow) + 1;
Capacity = MultU64x32 ((UINT64)CSize, SIZE_512KB);
}
Device->BlockIo.Media = &Device->BlockMedia;
@@ -279,23 +282,23 @@ DiscoverUserArea (
EFI_STATUS
EFIAPI
DiscoverSdDevice (
IN SD_DRIVER_PRIVATE_DATA *Private,
IN UINT8 Slot
IN SD_DRIVER_PRIVATE_DATA *Private,
IN UINT8 Slot
)
{
EFI_STATUS Status;
SD_DEVICE *Device;
EFI_DEVICE_PATH_PROTOCOL *DevicePath;
EFI_DEVICE_PATH_PROTOCOL *NewDevicePath;
EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath;
EFI_HANDLE DeviceHandle;
EFI_SD_MMC_PASS_THRU_PROTOCOL *PassThru;
EFI_STATUS Status;
SD_DEVICE *Device;
EFI_DEVICE_PATH_PROTOCOL *DevicePath;
EFI_DEVICE_PATH_PROTOCOL *NewDevicePath;
EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath;
EFI_HANDLE DeviceHandle;
EFI_SD_MMC_PASS_THRU_PROTOCOL *PassThru;
Device = NULL;
DevicePath = NULL;
NewDevicePath = NULL;
RemainingDevicePath = NULL;
PassThru = Private->PassThru;
PassThru = Private->PassThru;
//
// Build Device Path
@@ -305,7 +308,7 @@ DiscoverSdDevice (
Slot,
&DevicePath
);
if (EFI_ERROR(Status)) {
if (EFI_ERROR (Status)) {
return Status;
}
@@ -324,10 +327,10 @@ DiscoverSdDevice (
goto Error;
}
DeviceHandle = NULL;
DeviceHandle = NULL;
RemainingDevicePath = NewDevicePath;
Status = gBS->LocateDevicePath (&gEfiDevicePathProtocolGuid, &RemainingDevicePath, &DeviceHandle);
if (!EFI_ERROR (Status) && (DeviceHandle != NULL) && IsDevicePathEnd(RemainingDevicePath)) {
Status = gBS->LocateDevicePath (&gEfiDevicePathProtocolGuid, &RemainingDevicePath, &DeviceHandle);
if (!EFI_ERROR (Status) && (DeviceHandle != NULL) && IsDevicePathEnd (RemainingDevicePath)) {
//
// The device has been started, directly return to fast boot.
//
@@ -353,7 +356,7 @@ DiscoverSdDevice (
// Expose user area in the Sd memory card to upper layer.
//
Status = DiscoverUserArea (Device);
if (EFI_ERROR(Status)) {
if (EFI_ERROR (Status)) {
goto Error;
}
@@ -392,7 +395,7 @@ DiscoverSdDevice (
gBS->OpenProtocol (
Private->Controller,
&gEfiSdMmcPassThruProtocolGuid,
(VOID **) &(Private->PassThru),
(VOID **)&(Private->PassThru),
Private->DriverBindingHandle,
Device->Handle,
EFI_OPEN_PROTOCOL_BY_CHILD_CONTROLLER
@@ -458,15 +461,15 @@ Error:
EFI_STATUS
EFIAPI
SdDxeDriverBindingSupported (
IN EFI_DRIVER_BINDING_PROTOCOL *This,
IN EFI_HANDLE Controller,
IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath
IN EFI_DRIVER_BINDING_PROTOCOL *This,
IN EFI_HANDLE Controller,
IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath
)
{
EFI_STATUS Status;
EFI_DEVICE_PATH_PROTOCOL *ParentDevicePath;
EFI_SD_MMC_PASS_THRU_PROTOCOL *PassThru;
UINT8 Slot;
EFI_STATUS Status;
EFI_DEVICE_PATH_PROTOCOL *ParentDevicePath;
EFI_SD_MMC_PASS_THRU_PROTOCOL *PassThru;
UINT8 Slot;
//
// Test EFI_SD_MMC_PASS_THRU_PROTOCOL on the controller handle.
@@ -474,7 +477,7 @@ SdDxeDriverBindingSupported (
Status = gBS->OpenProtocol (
Controller,
&gEfiSdMmcPassThruProtocolGuid,
(VOID**) &PassThru,
(VOID **)&PassThru,
This->DriverBindingHandle,
Controller,
EFI_OPEN_PROTOCOL_BY_DRIVER
@@ -523,7 +526,7 @@ SdDxeDriverBindingSupported (
Status = gBS->OpenProtocol (
Controller,
&gEfiDevicePathProtocolGuid,
(VOID **) &ParentDevicePath,
(VOID **)&ParentDevicePath,
This->DriverBindingHandle,
Controller,
EFI_OPEN_PROTOCOL_GET_PROTOCOL
@@ -569,27 +572,27 @@ SdDxeDriverBindingSupported (
EFI_STATUS
EFIAPI
SdDxeDriverBindingStart (
IN EFI_DRIVER_BINDING_PROTOCOL *This,
IN EFI_HANDLE Controller,
IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath
IN EFI_DRIVER_BINDING_PROTOCOL *This,
IN EFI_HANDLE Controller,
IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath
)
{
EFI_STATUS Status;
EFI_SD_MMC_PASS_THRU_PROTOCOL *PassThru;
EFI_DEVICE_PATH_PROTOCOL *ParentDevicePath;
SD_DRIVER_PRIVATE_DATA *Private;
UINT8 Slot;
EFI_STATUS Status;
EFI_SD_MMC_PASS_THRU_PROTOCOL *PassThru;
EFI_DEVICE_PATH_PROTOCOL *ParentDevicePath;
SD_DRIVER_PRIVATE_DATA *Private;
UINT8 Slot;
Private = NULL;
PassThru = NULL;
Status = gBS->OpenProtocol (
Controller,
&gEfiSdMmcPassThruProtocolGuid,
(VOID **) &PassThru,
This->DriverBindingHandle,
Controller,
EFI_OPEN_PROTOCOL_BY_DRIVER
);
Status = gBS->OpenProtocol (
Controller,
&gEfiSdMmcPassThruProtocolGuid,
(VOID **)&PassThru,
This->DriverBindingHandle,
Controller,
EFI_OPEN_PROTOCOL_BY_DRIVER
);
if ((EFI_ERROR (Status)) && (Status != EFI_ALREADY_STARTED)) {
return Status;
}
@@ -607,7 +610,7 @@ SdDxeDriverBindingStart (
Status = gBS->OpenProtocol (
Controller,
&gEfiDevicePathProtocolGuid,
(VOID **) &ParentDevicePath,
(VOID **)&ParentDevicePath,
This->DriverBindingHandle,
Controller,
EFI_OPEN_PROTOCOL_GET_PROTOCOL
@@ -631,7 +634,7 @@ SdDxeDriverBindingStart (
Status = gBS->OpenProtocol (
Controller,
&gEfiCallerIdGuid,
(VOID **) &Private,
(VOID **)&Private,
This->DriverBindingHandle,
Controller,
EFI_OPEN_PROTOCOL_GET_PROTOCOL
@@ -676,14 +679,15 @@ Error:
if (Private != NULL) {
gBS->UninstallMultipleProtocolInterfaces (
Controller,
&gEfiCallerIdGuid,
Private,
NULL
);
Controller,
&gEfiCallerIdGuid,
Private,
NULL
);
FreePool (Private);
}
}
return Status;
}
@@ -716,30 +720,30 @@ Error:
EFI_STATUS
EFIAPI
SdDxeDriverBindingStop (
IN EFI_DRIVER_BINDING_PROTOCOL *This,
IN EFI_HANDLE Controller,
IN UINTN NumberOfChildren,
IN EFI_HANDLE *ChildHandleBuffer
IN EFI_DRIVER_BINDING_PROTOCOL *This,
IN EFI_HANDLE Controller,
IN UINTN NumberOfChildren,
IN EFI_HANDLE *ChildHandleBuffer
)
{
EFI_STATUS Status;
BOOLEAN AllChildrenStopped;
UINTN Index;
SD_DRIVER_PRIVATE_DATA *Private;
SD_DEVICE *Device;
EFI_SD_MMC_PASS_THRU_PROTOCOL *PassThru;
EFI_BLOCK_IO2_PROTOCOL *BlockIo2;
EFI_BLOCK_IO_PROTOCOL *BlockIo;
LIST_ENTRY *Link;
LIST_ENTRY *NextLink;
SD_REQUEST *Request;
EFI_TPL OldTpl;
EFI_STATUS Status;
BOOLEAN AllChildrenStopped;
UINTN Index;
SD_DRIVER_PRIVATE_DATA *Private;
SD_DEVICE *Device;
EFI_SD_MMC_PASS_THRU_PROTOCOL *PassThru;
EFI_BLOCK_IO2_PROTOCOL *BlockIo2;
EFI_BLOCK_IO_PROTOCOL *BlockIo;
LIST_ENTRY *Link;
LIST_ENTRY *NextLink;
SD_REQUEST *Request;
EFI_TPL OldTpl;
if (NumberOfChildren == 0) {
Status = gBS->OpenProtocol (
Controller,
&gEfiCallerIdGuid,
(VOID **) &Private,
(VOID **)&Private,
This->DriverBindingHandle,
Controller,
EFI_OPEN_PROTOCOL_GET_PROTOCOL
@@ -749,16 +753,16 @@ SdDxeDriverBindingStop (
}
gBS->UninstallProtocolInterface (
Controller,
&gEfiCallerIdGuid,
Private
);
Controller,
&gEfiCallerIdGuid,
Private
);
gBS->CloseProtocol (
Controller,
&gEfiSdMmcPassThruProtocolGuid,
This->DriverBindingHandle,
Controller
);
Controller,
&gEfiSdMmcPassThruProtocolGuid,
This->DriverBindingHandle,
Controller
);
FreePool (Private);
@@ -770,19 +774,19 @@ SdDxeDriverBindingStop (
for (Index = 0; Index < NumberOfChildren; Index++) {
BlockIo = NULL;
BlockIo2 = NULL;
Status = gBS->OpenProtocol (
ChildHandleBuffer[Index],
&gEfiBlockIoProtocolGuid,
(VOID **) &BlockIo,
This->DriverBindingHandle,
Controller,
EFI_OPEN_PROTOCOL_GET_PROTOCOL
);
Status = gBS->OpenProtocol (
ChildHandleBuffer[Index],
&gEfiBlockIoProtocolGuid,
(VOID **)&BlockIo,
This->DriverBindingHandle,
Controller,
EFI_OPEN_PROTOCOL_GET_PROTOCOL
);
if (EFI_ERROR (Status)) {
Status = gBS->OpenProtocol (
ChildHandleBuffer[Index],
&gEfiBlockIo2ProtocolGuid,
(VOID **) &BlockIo2,
(VOID **)&BlockIo2,
This->DriverBindingHandle,
Controller,
EFI_OPEN_PROTOCOL_GET_PROTOCOL
@@ -806,7 +810,8 @@ SdDxeDriverBindingStop (
OldTpl = gBS->RaiseTPL (TPL_NOTIFY);
for (Link = GetFirstNode (&Device->Queue);
!IsNull (&Device->Queue, Link);
Link = NextLink) {
Link = NextLink)
{
NextLink = GetNextNode (&Device->Queue, Link);
RemoveEntryList (Link);
@@ -821,6 +826,7 @@ SdDxeDriverBindingStop (
FreePool (Request);
}
gBS->RestoreTPL (OldTpl);
//
@@ -849,14 +855,14 @@ SdDxeDriverBindingStop (
);
if (EFI_ERROR (Status)) {
AllChildrenStopped = FALSE;
gBS->OpenProtocol (
Controller,
&gEfiSdMmcPassThruProtocolGuid,
(VOID **)&PassThru,
This->DriverBindingHandle,
ChildHandleBuffer[Index],
EFI_OPEN_PROTOCOL_BY_CHILD_CONTROLLER
);
gBS->OpenProtocol (
Controller,
&gEfiSdMmcPassThruProtocolGuid,
(VOID **)&PassThru,
This->DriverBindingHandle,
ChildHandleBuffer[Index],
EFI_OPEN_PROTOCOL_BY_CHILD_CONTROLLER
);
} else {
FreePool (Device->DevicePath);
FreeUnicodeStringTable (Device->ControllerNameTable);
@@ -884,11 +890,11 @@ SdDxeDriverBindingStop (
EFI_STATUS
EFIAPI
InitializeSdDxe (
IN EFI_HANDLE ImageHandle,
IN EFI_SYSTEM_TABLE *SystemTable
IN EFI_HANDLE ImageHandle,
IN EFI_SYSTEM_TABLE *SystemTable
)
{
EFI_STATUS Status;
EFI_STATUS Status;
//
// Install driver model protocol(s).

View File

@@ -39,11 +39,11 @@
//
// Global Variables
//
extern EFI_DRIVER_BINDING_PROTOCOL gSdDxeDriverBinding;
extern EFI_COMPONENT_NAME_PROTOCOL gSdDxeComponentName;
extern EFI_COMPONENT_NAME2_PROTOCOL gSdDxeComponentName2;
extern EFI_DRIVER_BINDING_PROTOCOL gSdDxeDriverBinding;
extern EFI_COMPONENT_NAME_PROTOCOL gSdDxeComponentName;
extern EFI_COMPONENT_NAME2_PROTOCOL gSdDxeComponentName2;
#define SD_DEVICE_SIGNATURE SIGNATURE_32 ('S', 'D', 't', 'f')
#define SD_DEVICE_SIGNATURE SIGNATURE_32 ('S', 'D', 't', 'f')
#define SD_DEVICE_DATA_FROM_BLKIO(a) \
CR(a, SD_DEVICE, BlockIo, SD_DEVICE_SIGNATURE)
@@ -60,11 +60,11 @@ extern EFI_COMPONENT_NAME2_PROTOCOL gSdDxeComponentName2;
//
// Take 2.5 seconds as generic time out value, 1 microsecond as unit.
//
#define SD_GENERIC_TIMEOUT 2500 * 1000
#define SD_GENERIC_TIMEOUT 2500 * 1000
#define SD_REQUEST_SIGNATURE SIGNATURE_32 ('S', 'D', 'R', 'E')
#define SD_REQUEST_SIGNATURE SIGNATURE_32 ('S', 'D', 'R', 'E')
#define SD_MODEL_NAME_MAX_LEN 32
#define SD_MODEL_NAME_MAX_LEN 32
typedef struct _SD_DEVICE SD_DEVICE;
typedef struct _SD_DRIVER_PRIVATE_DATA SD_DRIVER_PRIVATE_DATA;
@@ -73,40 +73,40 @@ typedef struct _SD_DRIVER_PRIVATE_DATA SD_DRIVER_PRIVATE_DATA;
// Asynchronous I/O request.
//
typedef struct {
UINT32 Signature;
LIST_ENTRY Link;
UINT32 Signature;
LIST_ENTRY Link;
EFI_SD_MMC_COMMAND_BLOCK SdMmcCmdBlk;
EFI_SD_MMC_STATUS_BLOCK SdMmcStatusBlk;
EFI_SD_MMC_PASS_THRU_COMMAND_PACKET Packet;
EFI_SD_MMC_COMMAND_BLOCK SdMmcCmdBlk;
EFI_SD_MMC_STATUS_BLOCK SdMmcStatusBlk;
EFI_SD_MMC_PASS_THRU_COMMAND_PACKET Packet;
BOOLEAN IsEnd;
BOOLEAN IsEnd;
EFI_BLOCK_IO2_TOKEN *Token;
EFI_BLOCK_IO2_TOKEN *Token;
EFI_EVENT Event;
EFI_EVENT Event;
} SD_REQUEST;
#define SD_REQUEST_FROM_LINK(a) \
CR(a, SD_REQUEST, Link, SD_REQUEST_SIGNATURE)
struct _SD_DEVICE {
UINT32 Signature;
EFI_HANDLE Handle;
EFI_DEVICE_PATH_PROTOCOL *DevicePath;
UINT8 Slot;
BOOLEAN SectorAddressing;
EFI_BLOCK_IO_PROTOCOL BlockIo;
EFI_BLOCK_IO2_PROTOCOL BlockIo2;
EFI_BLOCK_IO_MEDIA BlockMedia;
EFI_ERASE_BLOCK_PROTOCOL EraseBlock;
EFI_DISK_INFO_PROTOCOL DiskInfo;
UINT32 Signature;
EFI_HANDLE Handle;
EFI_DEVICE_PATH_PROTOCOL *DevicePath;
UINT8 Slot;
BOOLEAN SectorAddressing;
EFI_BLOCK_IO_PROTOCOL BlockIo;
EFI_BLOCK_IO2_PROTOCOL BlockIo2;
EFI_BLOCK_IO_MEDIA BlockMedia;
EFI_ERASE_BLOCK_PROTOCOL EraseBlock;
EFI_DISK_INFO_PROTOCOL DiskInfo;
LIST_ENTRY Queue;
LIST_ENTRY Queue;
SD_CSD Csd;
SD_CID Cid;
EFI_UNICODE_STRING_TABLE *ControllerNameTable;
SD_CSD Csd;
SD_CID Cid;
EFI_UNICODE_STRING_TABLE *ControllerNameTable;
//
// The model name consists of three fields in CID register
// 1) OEM/Application ID (2 bytes)
@@ -114,19 +114,19 @@ struct _SD_DEVICE {
// 3) Product Serial Number (4 bytes)
// The delimiters of these fields are whitespace.
//
CHAR16 ModelName[SD_MODEL_NAME_MAX_LEN];
SD_DRIVER_PRIVATE_DATA *Private;
} ;
CHAR16 ModelName[SD_MODEL_NAME_MAX_LEN];
SD_DRIVER_PRIVATE_DATA *Private;
};
//
// SD DXE driver private data structure
//
struct _SD_DRIVER_PRIVATE_DATA {
EFI_SD_MMC_PASS_THRU_PROTOCOL *PassThru;
EFI_HANDLE Controller;
EFI_DEVICE_PATH_PROTOCOL *ParentDevicePath;
EFI_HANDLE DriverBindingHandle;
} ;
EFI_SD_MMC_PASS_THRU_PROTOCOL *PassThru;
EFI_HANDLE Controller;
EFI_DEVICE_PATH_PROTOCOL *ParentDevicePath;
EFI_HANDLE DriverBindingHandle;
};
/**
Tests to see if this driver supports a given controller. If a child device is provided,
@@ -173,9 +173,9 @@ struct _SD_DRIVER_PRIVATE_DATA {
EFI_STATUS
EFIAPI
SdDxeDriverBindingSupported (
IN EFI_DRIVER_BINDING_PROTOCOL *This,
IN EFI_HANDLE Controller,
IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath
IN EFI_DRIVER_BINDING_PROTOCOL *This,
IN EFI_HANDLE Controller,
IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath
);
/**
@@ -216,9 +216,9 @@ SdDxeDriverBindingSupported (
EFI_STATUS
EFIAPI
SdDxeDriverBindingStart (
IN EFI_DRIVER_BINDING_PROTOCOL *This,
IN EFI_HANDLE Controller,
IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath
IN EFI_DRIVER_BINDING_PROTOCOL *This,
IN EFI_HANDLE Controller,
IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath
);
/**
@@ -250,10 +250,10 @@ SdDxeDriverBindingStart (
EFI_STATUS
EFIAPI
SdDxeDriverBindingStop (
IN EFI_DRIVER_BINDING_PROTOCOL *This,
IN EFI_HANDLE Controller,
IN UINTN NumberOfChildren,
IN EFI_HANDLE *ChildHandleBuffer
IN EFI_DRIVER_BINDING_PROTOCOL *This,
IN EFI_HANDLE Controller,
IN UINTN NumberOfChildren,
IN EFI_HANDLE *ChildHandleBuffer
);
/**
@@ -374,11 +374,11 @@ SdDxeComponentNameGetDriverName (
EFI_STATUS
EFIAPI
SdDxeComponentNameGetControllerName (
IN EFI_COMPONENT_NAME_PROTOCOL *This,
IN EFI_HANDLE ControllerHandle,
IN EFI_HANDLE ChildHandle OPTIONAL,
IN CHAR8 *Language,
OUT CHAR16 **ControllerName
IN EFI_COMPONENT_NAME_PROTOCOL *This,
IN EFI_HANDLE ControllerHandle,
IN EFI_HANDLE ChildHandle OPTIONAL,
IN CHAR8 *Language,
OUT CHAR16 **ControllerName
);
/**
@@ -394,8 +394,8 @@ SdDxeComponentNameGetControllerName (
**/
EFI_STATUS
SdSetRca (
IN SD_DEVICE *Device,
OUT UINT16 *Rca
IN SD_DEVICE *Device,
OUT UINT16 *Rca
);
/**
@@ -411,8 +411,8 @@ SdSetRca (
**/
EFI_STATUS
SdSelect (
IN SD_DEVICE *Device,
IN UINT16 Rca
IN SD_DEVICE *Device,
IN UINT16 Rca
);
/**
@@ -428,9 +428,9 @@ SdSelect (
**/
EFI_STATUS
SdSendStatus (
IN SD_DEVICE *Device,
IN UINT16 Rca,
OUT UINT32 *DevStatus
IN SD_DEVICE *Device,
IN UINT16 Rca,
OUT UINT32 *DevStatus
);
/**
@@ -447,9 +447,9 @@ SdSendStatus (
**/
EFI_STATUS
SdGetCsd (
IN SD_DEVICE *Device,
IN UINT16 Rca,
OUT SD_CSD *Csd
IN SD_DEVICE *Device,
IN UINT16 Rca,
OUT SD_CSD *Csd
);
/**
@@ -466,10 +466,9 @@ SdGetCsd (
**/
EFI_STATUS
SdGetCid (
IN SD_DEVICE *Device,
IN UINT16 Rca,
OUT SD_CID *Cid
IN SD_DEVICE *Device,
IN UINT16 Rca,
OUT SD_CID *Cid
);
#endif