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:
committed by
mergify[bot]
parent
7c7184e201
commit
1436aea4d5
@@ -11,7 +11,7 @@
|
||||
//
|
||||
// EFI Component Name Protocol
|
||||
//
|
||||
GLOBAL_REMOVE_IF_UNREFERENCED EFI_COMPONENT_NAME_PROTOCOL gSdMmcPciHcComponentName = {
|
||||
GLOBAL_REMOVE_IF_UNREFERENCED EFI_COMPONENT_NAME_PROTOCOL gSdMmcPciHcComponentName = {
|
||||
SdMmcPciHcComponentNameGetDriverName,
|
||||
SdMmcPciHcComponentNameGetControllerName,
|
||||
"eng"
|
||||
@@ -20,20 +20,20 @@ GLOBAL_REMOVE_IF_UNREFERENCED EFI_COMPONENT_NAME_PROTOCOL gSdMmcPciHcComponentNa
|
||||
//
|
||||
// EFI Component Name 2 Protocol
|
||||
//
|
||||
GLOBAL_REMOVE_IF_UNREFERENCED EFI_COMPONENT_NAME2_PROTOCOL gSdMmcPciHcComponentName2 = {
|
||||
(EFI_COMPONENT_NAME2_GET_DRIVER_NAME) SdMmcPciHcComponentNameGetDriverName,
|
||||
(EFI_COMPONENT_NAME2_GET_CONTROLLER_NAME) SdMmcPciHcComponentNameGetControllerName,
|
||||
GLOBAL_REMOVE_IF_UNREFERENCED EFI_COMPONENT_NAME2_PROTOCOL gSdMmcPciHcComponentName2 = {
|
||||
(EFI_COMPONENT_NAME2_GET_DRIVER_NAME)SdMmcPciHcComponentNameGetDriverName,
|
||||
(EFI_COMPONENT_NAME2_GET_CONTROLLER_NAME)SdMmcPciHcComponentNameGetControllerName,
|
||||
"en"
|
||||
};
|
||||
|
||||
GLOBAL_REMOVE_IF_UNREFERENCED EFI_UNICODE_STRING_TABLE mSdMmcPciHcDriverNameTable[] = {
|
||||
GLOBAL_REMOVE_IF_UNREFERENCED EFI_UNICODE_STRING_TABLE mSdMmcPciHcDriverNameTable[] = {
|
||||
{ "eng;en", L"Edkii Sd/Mmc Host Controller Driver" },
|
||||
{ NULL , NULL }
|
||||
{ NULL, NULL }
|
||||
};
|
||||
|
||||
GLOBAL_REMOVE_IF_UNREFERENCED EFI_UNICODE_STRING_TABLE mSdMmcPciHcControllerNameTable[] = {
|
||||
GLOBAL_REMOVE_IF_UNREFERENCED EFI_UNICODE_STRING_TABLE mSdMmcPciHcControllerNameTable[] = {
|
||||
{ "eng;en", L"Edkii Sd/Mmc Host Controller" },
|
||||
{ NULL , NULL }
|
||||
{ NULL, NULL }
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -78,9 +78,9 @@ GLOBAL_REMOVE_IF_UNREFERENCED EFI_UNICODE_STRING_TABLE mSdMmcPciHcControllerName
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
SdMmcPciHcComponentNameGetDriverName (
|
||||
IN EFI_COMPONENT_NAME_PROTOCOL *This,
|
||||
IN CHAR8 *Language,
|
||||
OUT CHAR16 **DriverName
|
||||
IN EFI_COMPONENT_NAME_PROTOCOL *This,
|
||||
IN CHAR8 *Language,
|
||||
OUT CHAR16 **DriverName
|
||||
)
|
||||
{
|
||||
return LookupUnicodeString2 (
|
||||
@@ -163,16 +163,16 @@ SdMmcPciHcComponentNameGetDriverName (
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
SdMmcPciHcComponentNameGetControllerName (
|
||||
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;
|
||||
EFI_STATUS Status;
|
||||
|
||||
if (Language == NULL || ControllerName == NULL) {
|
||||
if ((Language == NULL) || (ControllerName == NULL)) {
|
||||
return EFI_INVALID_PARAMETER;
|
||||
}
|
||||
|
||||
|
@@ -24,14 +24,14 @@
|
||||
**/
|
||||
EFI_STATUS
|
||||
EmmcReset (
|
||||
IN EFI_SD_MMC_PASS_THRU_PROTOCOL *PassThru,
|
||||
IN UINT8 Slot
|
||||
IN EFI_SD_MMC_PASS_THRU_PROTOCOL *PassThru,
|
||||
IN UINT8 Slot
|
||||
)
|
||||
{
|
||||
EFI_SD_MMC_COMMAND_BLOCK SdMmcCmdBlk;
|
||||
EFI_SD_MMC_STATUS_BLOCK SdMmcStatusBlk;
|
||||
EFI_SD_MMC_PASS_THRU_COMMAND_PACKET Packet;
|
||||
EFI_STATUS Status;
|
||||
EFI_SD_MMC_COMMAND_BLOCK SdMmcCmdBlk;
|
||||
EFI_SD_MMC_STATUS_BLOCK SdMmcStatusBlk;
|
||||
EFI_SD_MMC_PASS_THRU_COMMAND_PACKET Packet;
|
||||
EFI_STATUS Status;
|
||||
|
||||
ZeroMem (&SdMmcCmdBlk, sizeof (SdMmcCmdBlk));
|
||||
ZeroMem (&SdMmcStatusBlk, sizeof (SdMmcStatusBlk));
|
||||
@@ -41,9 +41,9 @@ EmmcReset (
|
||||
Packet.SdMmcStatusBlk = &SdMmcStatusBlk;
|
||||
Packet.Timeout = SD_MMC_HC_GENERIC_TIMEOUT;
|
||||
|
||||
SdMmcCmdBlk.CommandIndex = EMMC_GO_IDLE_STATE;
|
||||
SdMmcCmdBlk.CommandType = SdMmcCommandTypeBc;
|
||||
SdMmcCmdBlk.ResponseType = 0;
|
||||
SdMmcCmdBlk.CommandIndex = EMMC_GO_IDLE_STATE;
|
||||
SdMmcCmdBlk.CommandType = SdMmcCommandTypeBc;
|
||||
SdMmcCmdBlk.ResponseType = 0;
|
||||
SdMmcCmdBlk.CommandArgument = 0;
|
||||
|
||||
gBS->Stall (1000);
|
||||
@@ -74,10 +74,10 @@ EmmcGetOcr (
|
||||
IN OUT UINT32 *Argument
|
||||
)
|
||||
{
|
||||
EFI_SD_MMC_COMMAND_BLOCK SdMmcCmdBlk;
|
||||
EFI_SD_MMC_STATUS_BLOCK SdMmcStatusBlk;
|
||||
EFI_SD_MMC_PASS_THRU_COMMAND_PACKET Packet;
|
||||
EFI_STATUS Status;
|
||||
EFI_SD_MMC_COMMAND_BLOCK SdMmcCmdBlk;
|
||||
EFI_SD_MMC_STATUS_BLOCK SdMmcStatusBlk;
|
||||
EFI_SD_MMC_PASS_THRU_COMMAND_PACKET Packet;
|
||||
EFI_STATUS Status;
|
||||
|
||||
ZeroMem (&SdMmcCmdBlk, sizeof (SdMmcCmdBlk));
|
||||
ZeroMem (&SdMmcStatusBlk, sizeof (SdMmcStatusBlk));
|
||||
@@ -87,9 +87,9 @@ EmmcGetOcr (
|
||||
Packet.SdMmcStatusBlk = &SdMmcStatusBlk;
|
||||
Packet.Timeout = SD_MMC_HC_GENERIC_TIMEOUT;
|
||||
|
||||
SdMmcCmdBlk.CommandIndex = EMMC_SEND_OP_COND;
|
||||
SdMmcCmdBlk.CommandType = SdMmcCommandTypeBcr;
|
||||
SdMmcCmdBlk.ResponseType = SdMmcResponseTypeR3;
|
||||
SdMmcCmdBlk.CommandIndex = EMMC_SEND_OP_COND;
|
||||
SdMmcCmdBlk.CommandType = SdMmcCommandTypeBcr;
|
||||
SdMmcCmdBlk.ResponseType = SdMmcResponseTypeR3;
|
||||
SdMmcCmdBlk.CommandArgument = *Argument;
|
||||
|
||||
Status = SdMmcPassThruPassThru (PassThru, Slot, &Packet, NULL);
|
||||
@@ -118,14 +118,14 @@ EmmcGetOcr (
|
||||
**/
|
||||
EFI_STATUS
|
||||
EmmcGetAllCid (
|
||||
IN EFI_SD_MMC_PASS_THRU_PROTOCOL *PassThru,
|
||||
IN UINT8 Slot
|
||||
IN EFI_SD_MMC_PASS_THRU_PROTOCOL *PassThru,
|
||||
IN UINT8 Slot
|
||||
)
|
||||
{
|
||||
EFI_SD_MMC_COMMAND_BLOCK SdMmcCmdBlk;
|
||||
EFI_SD_MMC_STATUS_BLOCK SdMmcStatusBlk;
|
||||
EFI_SD_MMC_PASS_THRU_COMMAND_PACKET Packet;
|
||||
EFI_STATUS Status;
|
||||
EFI_SD_MMC_COMMAND_BLOCK SdMmcCmdBlk;
|
||||
EFI_SD_MMC_STATUS_BLOCK SdMmcStatusBlk;
|
||||
EFI_SD_MMC_PASS_THRU_COMMAND_PACKET Packet;
|
||||
EFI_STATUS Status;
|
||||
|
||||
ZeroMem (&SdMmcCmdBlk, sizeof (SdMmcCmdBlk));
|
||||
ZeroMem (&SdMmcStatusBlk, sizeof (SdMmcStatusBlk));
|
||||
@@ -135,9 +135,9 @@ EmmcGetAllCid (
|
||||
Packet.SdMmcStatusBlk = &SdMmcStatusBlk;
|
||||
Packet.Timeout = SD_MMC_HC_GENERIC_TIMEOUT;
|
||||
|
||||
SdMmcCmdBlk.CommandIndex = EMMC_ALL_SEND_CID;
|
||||
SdMmcCmdBlk.CommandType = SdMmcCommandTypeBcr;
|
||||
SdMmcCmdBlk.ResponseType = SdMmcResponseTypeR2;
|
||||
SdMmcCmdBlk.CommandIndex = EMMC_ALL_SEND_CID;
|
||||
SdMmcCmdBlk.CommandType = SdMmcCommandTypeBcr;
|
||||
SdMmcCmdBlk.ResponseType = SdMmcResponseTypeR2;
|
||||
SdMmcCmdBlk.CommandArgument = 0;
|
||||
|
||||
Status = SdMmcPassThruPassThru (PassThru, Slot, &Packet, NULL);
|
||||
@@ -161,15 +161,15 @@ EmmcGetAllCid (
|
||||
**/
|
||||
EFI_STATUS
|
||||
EmmcSetRca (
|
||||
IN EFI_SD_MMC_PASS_THRU_PROTOCOL *PassThru,
|
||||
IN UINT8 Slot,
|
||||
IN UINT16 Rca
|
||||
IN EFI_SD_MMC_PASS_THRU_PROTOCOL *PassThru,
|
||||
IN UINT8 Slot,
|
||||
IN UINT16 Rca
|
||||
)
|
||||
{
|
||||
EFI_SD_MMC_COMMAND_BLOCK SdMmcCmdBlk;
|
||||
EFI_SD_MMC_STATUS_BLOCK SdMmcStatusBlk;
|
||||
EFI_SD_MMC_PASS_THRU_COMMAND_PACKET Packet;
|
||||
EFI_STATUS Status;
|
||||
EFI_SD_MMC_COMMAND_BLOCK SdMmcCmdBlk;
|
||||
EFI_SD_MMC_STATUS_BLOCK SdMmcStatusBlk;
|
||||
EFI_SD_MMC_PASS_THRU_COMMAND_PACKET Packet;
|
||||
EFI_STATUS Status;
|
||||
|
||||
ZeroMem (&SdMmcCmdBlk, sizeof (SdMmcCmdBlk));
|
||||
ZeroMem (&SdMmcStatusBlk, sizeof (SdMmcStatusBlk));
|
||||
@@ -179,9 +179,9 @@ EmmcSetRca (
|
||||
Packet.SdMmcStatusBlk = &SdMmcStatusBlk;
|
||||
Packet.Timeout = SD_MMC_HC_GENERIC_TIMEOUT;
|
||||
|
||||
SdMmcCmdBlk.CommandIndex = EMMC_SET_RELATIVE_ADDR;
|
||||
SdMmcCmdBlk.CommandType = SdMmcCommandTypeAc;
|
||||
SdMmcCmdBlk.ResponseType = SdMmcResponseTypeR1;
|
||||
SdMmcCmdBlk.CommandIndex = EMMC_SET_RELATIVE_ADDR;
|
||||
SdMmcCmdBlk.CommandType = SdMmcCommandTypeAc;
|
||||
SdMmcCmdBlk.ResponseType = SdMmcResponseTypeR1;
|
||||
SdMmcCmdBlk.CommandArgument = (UINT32)Rca << 16;
|
||||
|
||||
Status = SdMmcPassThruPassThru (PassThru, Slot, &Packet, NULL);
|
||||
@@ -211,13 +211,13 @@ EmmcGetCsd (
|
||||
IN EFI_SD_MMC_PASS_THRU_PROTOCOL *PassThru,
|
||||
IN UINT8 Slot,
|
||||
IN UINT16 Rca,
|
||||
OUT EMMC_CSD *Csd
|
||||
OUT EMMC_CSD *Csd
|
||||
)
|
||||
{
|
||||
EFI_SD_MMC_COMMAND_BLOCK SdMmcCmdBlk;
|
||||
EFI_SD_MMC_STATUS_BLOCK SdMmcStatusBlk;
|
||||
EFI_SD_MMC_PASS_THRU_COMMAND_PACKET Packet;
|
||||
EFI_STATUS Status;
|
||||
EFI_SD_MMC_COMMAND_BLOCK SdMmcCmdBlk;
|
||||
EFI_SD_MMC_STATUS_BLOCK SdMmcStatusBlk;
|
||||
EFI_SD_MMC_PASS_THRU_COMMAND_PACKET Packet;
|
||||
EFI_STATUS Status;
|
||||
|
||||
ZeroMem (&SdMmcCmdBlk, sizeof (SdMmcCmdBlk));
|
||||
ZeroMem (&SdMmcStatusBlk, sizeof (SdMmcStatusBlk));
|
||||
@@ -227,9 +227,9 @@ EmmcGetCsd (
|
||||
Packet.SdMmcStatusBlk = &SdMmcStatusBlk;
|
||||
Packet.Timeout = SD_MMC_HC_GENERIC_TIMEOUT;
|
||||
|
||||
SdMmcCmdBlk.CommandIndex = EMMC_SEND_CSD;
|
||||
SdMmcCmdBlk.CommandType = SdMmcCommandTypeAc;
|
||||
SdMmcCmdBlk.ResponseType = SdMmcResponseTypeR2;
|
||||
SdMmcCmdBlk.CommandIndex = EMMC_SEND_CSD;
|
||||
SdMmcCmdBlk.CommandType = SdMmcCommandTypeAc;
|
||||
SdMmcCmdBlk.ResponseType = SdMmcResponseTypeR2;
|
||||
SdMmcCmdBlk.CommandArgument = (UINT32)Rca << 16;
|
||||
|
||||
Status = SdMmcPassThruPassThru (PassThru, Slot, &Packet, NULL);
|
||||
@@ -237,7 +237,7 @@ EmmcGetCsd (
|
||||
//
|
||||
// For details, refer to SD Host Controller Simplified Spec 3.0 Table 2-12.
|
||||
//
|
||||
CopyMem (((UINT8*)Csd) + 1, &SdMmcStatusBlk.Resp0, sizeof (EMMC_CSD) - 1);
|
||||
CopyMem (((UINT8 *)Csd) + 1, &SdMmcStatusBlk.Resp0, sizeof (EMMC_CSD) - 1);
|
||||
}
|
||||
|
||||
return Status;
|
||||
@@ -258,15 +258,15 @@ EmmcGetCsd (
|
||||
**/
|
||||
EFI_STATUS
|
||||
EmmcSelect (
|
||||
IN EFI_SD_MMC_PASS_THRU_PROTOCOL *PassThru,
|
||||
IN UINT8 Slot,
|
||||
IN UINT16 Rca
|
||||
IN EFI_SD_MMC_PASS_THRU_PROTOCOL *PassThru,
|
||||
IN UINT8 Slot,
|
||||
IN UINT16 Rca
|
||||
)
|
||||
{
|
||||
EFI_SD_MMC_COMMAND_BLOCK SdMmcCmdBlk;
|
||||
EFI_SD_MMC_STATUS_BLOCK SdMmcStatusBlk;
|
||||
EFI_SD_MMC_PASS_THRU_COMMAND_PACKET Packet;
|
||||
EFI_STATUS Status;
|
||||
EFI_SD_MMC_COMMAND_BLOCK SdMmcCmdBlk;
|
||||
EFI_SD_MMC_STATUS_BLOCK SdMmcStatusBlk;
|
||||
EFI_SD_MMC_PASS_THRU_COMMAND_PACKET Packet;
|
||||
EFI_STATUS Status;
|
||||
|
||||
ZeroMem (&SdMmcCmdBlk, sizeof (SdMmcCmdBlk));
|
||||
ZeroMem (&SdMmcStatusBlk, sizeof (SdMmcStatusBlk));
|
||||
@@ -276,9 +276,9 @@ EmmcSelect (
|
||||
Packet.SdMmcStatusBlk = &SdMmcStatusBlk;
|
||||
Packet.Timeout = SD_MMC_HC_GENERIC_TIMEOUT;
|
||||
|
||||
SdMmcCmdBlk.CommandIndex = EMMC_SELECT_DESELECT_CARD;
|
||||
SdMmcCmdBlk.CommandType = SdMmcCommandTypeAc;
|
||||
SdMmcCmdBlk.ResponseType = SdMmcResponseTypeR1;
|
||||
SdMmcCmdBlk.CommandIndex = EMMC_SELECT_DESELECT_CARD;
|
||||
SdMmcCmdBlk.CommandType = SdMmcCommandTypeAc;
|
||||
SdMmcCmdBlk.ResponseType = SdMmcResponseTypeR1;
|
||||
SdMmcCmdBlk.CommandArgument = (UINT32)Rca << 16;
|
||||
|
||||
Status = SdMmcPassThruPassThru (PassThru, Slot, &Packet, NULL);
|
||||
@@ -303,13 +303,13 @@ EFI_STATUS
|
||||
EmmcGetExtCsd (
|
||||
IN EFI_SD_MMC_PASS_THRU_PROTOCOL *PassThru,
|
||||
IN UINT8 Slot,
|
||||
OUT EMMC_EXT_CSD *ExtCsd
|
||||
OUT EMMC_EXT_CSD *ExtCsd
|
||||
)
|
||||
{
|
||||
EFI_SD_MMC_COMMAND_BLOCK SdMmcCmdBlk;
|
||||
EFI_SD_MMC_STATUS_BLOCK SdMmcStatusBlk;
|
||||
EFI_SD_MMC_PASS_THRU_COMMAND_PACKET Packet;
|
||||
EFI_STATUS Status;
|
||||
EFI_SD_MMC_COMMAND_BLOCK SdMmcCmdBlk;
|
||||
EFI_SD_MMC_STATUS_BLOCK SdMmcStatusBlk;
|
||||
EFI_SD_MMC_PASS_THRU_COMMAND_PACKET Packet;
|
||||
EFI_STATUS Status;
|
||||
|
||||
ZeroMem (&SdMmcCmdBlk, sizeof (SdMmcCmdBlk));
|
||||
ZeroMem (&SdMmcStatusBlk, sizeof (SdMmcStatusBlk));
|
||||
@@ -319,9 +319,9 @@ EmmcGetExtCsd (
|
||||
Packet.SdMmcStatusBlk = &SdMmcStatusBlk;
|
||||
Packet.Timeout = SD_MMC_HC_GENERIC_TIMEOUT;
|
||||
|
||||
SdMmcCmdBlk.CommandIndex = EMMC_SEND_EXT_CSD;
|
||||
SdMmcCmdBlk.CommandType = SdMmcCommandTypeAdtc;
|
||||
SdMmcCmdBlk.ResponseType = SdMmcResponseTypeR1;
|
||||
SdMmcCmdBlk.CommandIndex = EMMC_SEND_EXT_CSD;
|
||||
SdMmcCmdBlk.CommandType = SdMmcCommandTypeAdtc;
|
||||
SdMmcCmdBlk.ResponseType = SdMmcResponseTypeR1;
|
||||
SdMmcCmdBlk.CommandArgument = 0x00000000;
|
||||
|
||||
Packet.InDataBuffer = ExtCsd;
|
||||
@@ -350,18 +350,18 @@ EmmcGetExtCsd (
|
||||
**/
|
||||
EFI_STATUS
|
||||
EmmcSwitch (
|
||||
IN EFI_SD_MMC_PASS_THRU_PROTOCOL *PassThru,
|
||||
IN UINT8 Slot,
|
||||
IN UINT8 Access,
|
||||
IN UINT8 Index,
|
||||
IN UINT8 Value,
|
||||
IN UINT8 CmdSet
|
||||
IN EFI_SD_MMC_PASS_THRU_PROTOCOL *PassThru,
|
||||
IN UINT8 Slot,
|
||||
IN UINT8 Access,
|
||||
IN UINT8 Index,
|
||||
IN UINT8 Value,
|
||||
IN UINT8 CmdSet
|
||||
)
|
||||
{
|
||||
EFI_SD_MMC_COMMAND_BLOCK SdMmcCmdBlk;
|
||||
EFI_SD_MMC_STATUS_BLOCK SdMmcStatusBlk;
|
||||
EFI_SD_MMC_PASS_THRU_COMMAND_PACKET Packet;
|
||||
EFI_STATUS Status;
|
||||
EFI_SD_MMC_COMMAND_BLOCK SdMmcCmdBlk;
|
||||
EFI_SD_MMC_STATUS_BLOCK SdMmcStatusBlk;
|
||||
EFI_SD_MMC_PASS_THRU_COMMAND_PACKET Packet;
|
||||
EFI_STATUS Status;
|
||||
|
||||
ZeroMem (&SdMmcCmdBlk, sizeof (SdMmcCmdBlk));
|
||||
ZeroMem (&SdMmcStatusBlk, sizeof (SdMmcStatusBlk));
|
||||
@@ -371,9 +371,9 @@ EmmcSwitch (
|
||||
Packet.SdMmcStatusBlk = &SdMmcStatusBlk;
|
||||
Packet.Timeout = SD_MMC_HC_GENERIC_TIMEOUT;
|
||||
|
||||
SdMmcCmdBlk.CommandIndex = EMMC_SWITCH;
|
||||
SdMmcCmdBlk.CommandType = SdMmcCommandTypeAc;
|
||||
SdMmcCmdBlk.ResponseType = SdMmcResponseTypeR1b;
|
||||
SdMmcCmdBlk.CommandIndex = EMMC_SWITCH;
|
||||
SdMmcCmdBlk.CommandType = SdMmcCommandTypeAc;
|
||||
SdMmcCmdBlk.ResponseType = SdMmcResponseTypeR1b;
|
||||
SdMmcCmdBlk.CommandArgument = (Access << 24) | (Index << 16) | (Value << 8) | CmdSet;
|
||||
|
||||
Status = SdMmcPassThruPassThru (PassThru, Slot, &Packet, NULL);
|
||||
@@ -400,13 +400,13 @@ EmmcSendStatus (
|
||||
IN EFI_SD_MMC_PASS_THRU_PROTOCOL *PassThru,
|
||||
IN UINT8 Slot,
|
||||
IN UINT16 Rca,
|
||||
OUT UINT32 *DevStatus
|
||||
OUT UINT32 *DevStatus
|
||||
)
|
||||
{
|
||||
EFI_SD_MMC_COMMAND_BLOCK SdMmcCmdBlk;
|
||||
EFI_SD_MMC_STATUS_BLOCK SdMmcStatusBlk;
|
||||
EFI_SD_MMC_PASS_THRU_COMMAND_PACKET Packet;
|
||||
EFI_STATUS Status;
|
||||
EFI_SD_MMC_COMMAND_BLOCK SdMmcCmdBlk;
|
||||
EFI_SD_MMC_STATUS_BLOCK SdMmcStatusBlk;
|
||||
EFI_SD_MMC_PASS_THRU_COMMAND_PACKET Packet;
|
||||
EFI_STATUS Status;
|
||||
|
||||
ZeroMem (&SdMmcCmdBlk, sizeof (SdMmcCmdBlk));
|
||||
ZeroMem (&SdMmcStatusBlk, sizeof (SdMmcStatusBlk));
|
||||
@@ -416,9 +416,9 @@ EmmcSendStatus (
|
||||
Packet.SdMmcStatusBlk = &SdMmcStatusBlk;
|
||||
Packet.Timeout = SD_MMC_HC_GENERIC_TIMEOUT;
|
||||
|
||||
SdMmcCmdBlk.CommandIndex = EMMC_SEND_STATUS;
|
||||
SdMmcCmdBlk.CommandType = SdMmcCommandTypeAc;
|
||||
SdMmcCmdBlk.ResponseType = SdMmcResponseTypeR1;
|
||||
SdMmcCmdBlk.CommandIndex = EMMC_SEND_STATUS;
|
||||
SdMmcCmdBlk.CommandType = SdMmcCommandTypeAc;
|
||||
SdMmcCmdBlk.ResponseType = SdMmcResponseTypeR1;
|
||||
SdMmcCmdBlk.CommandArgument = (UINT32)Rca << 16;
|
||||
|
||||
Status = SdMmcPassThruPassThru (PassThru, Slot, &Packet, NULL);
|
||||
@@ -447,16 +447,16 @@ EmmcSendStatus (
|
||||
**/
|
||||
EFI_STATUS
|
||||
EmmcSendTuningBlk (
|
||||
IN EFI_SD_MMC_PASS_THRU_PROTOCOL *PassThru,
|
||||
IN UINT8 Slot,
|
||||
IN UINT8 BusWidth
|
||||
IN EFI_SD_MMC_PASS_THRU_PROTOCOL *PassThru,
|
||||
IN UINT8 Slot,
|
||||
IN UINT8 BusWidth
|
||||
)
|
||||
{
|
||||
EFI_SD_MMC_COMMAND_BLOCK SdMmcCmdBlk;
|
||||
EFI_SD_MMC_STATUS_BLOCK SdMmcStatusBlk;
|
||||
EFI_SD_MMC_PASS_THRU_COMMAND_PACKET Packet;
|
||||
EFI_STATUS Status;
|
||||
UINT8 TuningBlock[128];
|
||||
EFI_SD_MMC_COMMAND_BLOCK SdMmcCmdBlk;
|
||||
EFI_SD_MMC_STATUS_BLOCK SdMmcStatusBlk;
|
||||
EFI_SD_MMC_PASS_THRU_COMMAND_PACKET Packet;
|
||||
EFI_STATUS Status;
|
||||
UINT8 TuningBlock[128];
|
||||
|
||||
ZeroMem (&SdMmcCmdBlk, sizeof (SdMmcCmdBlk));
|
||||
ZeroMem (&SdMmcStatusBlk, sizeof (SdMmcStatusBlk));
|
||||
@@ -466,9 +466,9 @@ EmmcSendTuningBlk (
|
||||
Packet.SdMmcStatusBlk = &SdMmcStatusBlk;
|
||||
Packet.Timeout = SD_MMC_HC_GENERIC_TIMEOUT;
|
||||
|
||||
SdMmcCmdBlk.CommandIndex = EMMC_SEND_TUNING_BLOCK;
|
||||
SdMmcCmdBlk.CommandType = SdMmcCommandTypeAdtc;
|
||||
SdMmcCmdBlk.ResponseType = SdMmcResponseTypeR1;
|
||||
SdMmcCmdBlk.CommandIndex = EMMC_SEND_TUNING_BLOCK;
|
||||
SdMmcCmdBlk.CommandType = SdMmcCommandTypeAdtc;
|
||||
SdMmcCmdBlk.ResponseType = SdMmcResponseTypeR1;
|
||||
SdMmcCmdBlk.CommandArgument = 0;
|
||||
|
||||
Packet.InDataBuffer = TuningBlock;
|
||||
@@ -503,24 +503,25 @@ EmmcSendTuningBlk (
|
||||
**/
|
||||
EFI_STATUS
|
||||
EmmcTuningClkForHs200 (
|
||||
IN EFI_PCI_IO_PROTOCOL *PciIo,
|
||||
IN EFI_SD_MMC_PASS_THRU_PROTOCOL *PassThru,
|
||||
IN UINT8 Slot,
|
||||
IN UINT8 BusWidth
|
||||
IN EFI_PCI_IO_PROTOCOL *PciIo,
|
||||
IN EFI_SD_MMC_PASS_THRU_PROTOCOL *PassThru,
|
||||
IN UINT8 Slot,
|
||||
IN UINT8 BusWidth
|
||||
)
|
||||
{
|
||||
EFI_STATUS Status;
|
||||
UINT8 HostCtrl2;
|
||||
UINT8 Retry;
|
||||
EFI_STATUS Status;
|
||||
UINT8 HostCtrl2;
|
||||
UINT8 Retry;
|
||||
|
||||
//
|
||||
// Notify the host that the sampling clock tuning procedure starts.
|
||||
//
|
||||
HostCtrl2 = BIT6;
|
||||
Status = SdMmcHcOrMmio (PciIo, Slot, SD_MMC_HC_HOST_CTRL2, sizeof (HostCtrl2), &HostCtrl2);
|
||||
Status = SdMmcHcOrMmio (PciIo, Slot, SD_MMC_HC_HOST_CTRL2, sizeof (HostCtrl2), &HostCtrl2);
|
||||
if (EFI_ERROR (Status)) {
|
||||
return Status;
|
||||
}
|
||||
|
||||
//
|
||||
// Ask the device to send a sequence of tuning blocks till the tuning procedure is done.
|
||||
//
|
||||
@@ -550,11 +551,12 @@ EmmcTuningClkForHs200 (
|
||||
//
|
||||
// Abort the tuning procedure and reset the tuning circuit.
|
||||
//
|
||||
HostCtrl2 = (UINT8)~(BIT6 | BIT7);
|
||||
Status = SdMmcHcAndMmio (PciIo, Slot, SD_MMC_HC_HOST_CTRL2, sizeof (HostCtrl2), &HostCtrl2);
|
||||
HostCtrl2 = (UINT8) ~(BIT6 | BIT7);
|
||||
Status = SdMmcHcAndMmio (PciIo, Slot, SD_MMC_HC_HOST_CTRL2, sizeof (HostCtrl2), &HostCtrl2);
|
||||
if (EFI_ERROR (Status)) {
|
||||
return Status;
|
||||
}
|
||||
|
||||
return EFI_DEVICE_ERROR;
|
||||
}
|
||||
|
||||
@@ -615,19 +617,19 @@ EmmcCheckSwitchStatus (
|
||||
**/
|
||||
EFI_STATUS
|
||||
EmmcSwitchBusWidth (
|
||||
IN EFI_PCI_IO_PROTOCOL *PciIo,
|
||||
IN EFI_SD_MMC_PASS_THRU_PROTOCOL *PassThru,
|
||||
IN UINT8 Slot,
|
||||
IN UINT16 Rca,
|
||||
IN BOOLEAN IsDdr,
|
||||
IN UINT8 BusWidth
|
||||
IN EFI_PCI_IO_PROTOCOL *PciIo,
|
||||
IN EFI_SD_MMC_PASS_THRU_PROTOCOL *PassThru,
|
||||
IN UINT8 Slot,
|
||||
IN UINT16 Rca,
|
||||
IN BOOLEAN IsDdr,
|
||||
IN UINT8 BusWidth
|
||||
)
|
||||
{
|
||||
EFI_STATUS Status;
|
||||
UINT8 Access;
|
||||
UINT8 Index;
|
||||
UINT8 Value;
|
||||
UINT8 CmdSet;
|
||||
EFI_STATUS Status;
|
||||
UINT8 Access;
|
||||
UINT8 Index;
|
||||
UINT8 Value;
|
||||
UINT8 CmdSet;
|
||||
|
||||
//
|
||||
// Write Byte, the Value field is written into the byte pointed by Index.
|
||||
@@ -683,23 +685,23 @@ EmmcSwitchBusWidth (
|
||||
**/
|
||||
EFI_STATUS
|
||||
EmmcSwitchBusTiming (
|
||||
IN EFI_PCI_IO_PROTOCOL *PciIo,
|
||||
IN EFI_SD_MMC_PASS_THRU_PROTOCOL *PassThru,
|
||||
IN UINT8 Slot,
|
||||
IN UINT16 Rca,
|
||||
IN EDKII_SD_MMC_DRIVER_STRENGTH DriverStrength,
|
||||
IN SD_MMC_BUS_MODE BusTiming,
|
||||
IN UINT32 ClockFreq
|
||||
IN EFI_PCI_IO_PROTOCOL *PciIo,
|
||||
IN EFI_SD_MMC_PASS_THRU_PROTOCOL *PassThru,
|
||||
IN UINT8 Slot,
|
||||
IN UINT16 Rca,
|
||||
IN EDKII_SD_MMC_DRIVER_STRENGTH DriverStrength,
|
||||
IN SD_MMC_BUS_MODE BusTiming,
|
||||
IN UINT32 ClockFreq
|
||||
)
|
||||
{
|
||||
EFI_STATUS Status;
|
||||
UINT8 Access;
|
||||
UINT8 Index;
|
||||
UINT8 Value;
|
||||
UINT8 CmdSet;
|
||||
SD_MMC_HC_PRIVATE_DATA *Private;
|
||||
UINT8 HostCtrl1;
|
||||
BOOLEAN DelaySendStatus;
|
||||
EFI_STATUS Status;
|
||||
UINT8 Access;
|
||||
UINT8 Index;
|
||||
UINT8 Value;
|
||||
UINT8 CmdSet;
|
||||
SD_MMC_HC_PRIVATE_DATA *Private;
|
||||
UINT8 HostCtrl1;
|
||||
BOOLEAN DelaySendStatus;
|
||||
|
||||
Private = SD_MMC_HC_PRIVATE_FROM_THIS (PassThru);
|
||||
//
|
||||
@@ -733,15 +735,15 @@ EmmcSwitchBusTiming (
|
||||
return Status;
|
||||
}
|
||||
|
||||
if (BusTiming == SdMmcMmcHsSdr || BusTiming == SdMmcMmcHsDdr) {
|
||||
if ((BusTiming == SdMmcMmcHsSdr) || (BusTiming == SdMmcMmcHsDdr)) {
|
||||
HostCtrl1 = BIT2;
|
||||
Status = SdMmcHcOrMmio (PciIo, Slot, SD_MMC_HC_HOST_CTRL1, sizeof (HostCtrl1), &HostCtrl1);
|
||||
Status = SdMmcHcOrMmio (PciIo, Slot, SD_MMC_HC_HOST_CTRL1, sizeof (HostCtrl1), &HostCtrl1);
|
||||
if (EFI_ERROR (Status)) {
|
||||
return Status;
|
||||
}
|
||||
} else {
|
||||
HostCtrl1 = (UINT8)~BIT2;
|
||||
Status = SdMmcHcAndMmio (PciIo, Slot, SD_MMC_HC_HOST_CTRL1, sizeof (HostCtrl1), &HostCtrl1);
|
||||
HostCtrl1 = (UINT8) ~BIT2;
|
||||
Status = SdMmcHcAndMmio (PciIo, Slot, SD_MMC_HC_HOST_CTRL1, sizeof (HostCtrl1), &HostCtrl1);
|
||||
if (EFI_ERROR (Status)) {
|
||||
return Status;
|
||||
}
|
||||
@@ -767,6 +769,7 @@ EmmcSwitchBusTiming (
|
||||
if (EFI_ERROR (Status)) {
|
||||
return Status;
|
||||
}
|
||||
|
||||
DelaySendStatus = FALSE;
|
||||
} else {
|
||||
DelaySendStatus = TRUE;
|
||||
@@ -808,18 +811,19 @@ EmmcSwitchBusTiming (
|
||||
**/
|
||||
EFI_STATUS
|
||||
EmmcSwitchToHighSpeed (
|
||||
IN EFI_PCI_IO_PROTOCOL *PciIo,
|
||||
IN EFI_SD_MMC_PASS_THRU_PROTOCOL *PassThru,
|
||||
IN UINT8 Slot,
|
||||
IN UINT16 Rca,
|
||||
IN SD_MMC_BUS_SETTINGS *BusMode
|
||||
IN EFI_PCI_IO_PROTOCOL *PciIo,
|
||||
IN EFI_SD_MMC_PASS_THRU_PROTOCOL *PassThru,
|
||||
IN UINT8 Slot,
|
||||
IN UINT16 Rca,
|
||||
IN SD_MMC_BUS_SETTINGS *BusMode
|
||||
)
|
||||
{
|
||||
EFI_STATUS Status;
|
||||
BOOLEAN IsDdr;
|
||||
|
||||
if ((BusMode->BusTiming != SdMmcMmcHsSdr && BusMode->BusTiming != SdMmcMmcHsDdr && BusMode->BusTiming != SdMmcMmcLegacy) ||
|
||||
BusMode->ClockFreq > 52) {
|
||||
if (((BusMode->BusTiming != SdMmcMmcHsSdr) && (BusMode->BusTiming != SdMmcMmcHsDdr) && (BusMode->BusTiming != SdMmcMmcLegacy)) ||
|
||||
(BusMode->ClockFreq > 52))
|
||||
{
|
||||
return EFI_INVALID_PARAMETER;
|
||||
}
|
||||
|
||||
@@ -855,17 +859,18 @@ EmmcSwitchToHighSpeed (
|
||||
**/
|
||||
EFI_STATUS
|
||||
EmmcSwitchToHS200 (
|
||||
IN EFI_PCI_IO_PROTOCOL *PciIo,
|
||||
IN EFI_SD_MMC_PASS_THRU_PROTOCOL *PassThru,
|
||||
IN UINT8 Slot,
|
||||
IN UINT16 Rca,
|
||||
IN SD_MMC_BUS_SETTINGS *BusMode
|
||||
IN EFI_PCI_IO_PROTOCOL *PciIo,
|
||||
IN EFI_SD_MMC_PASS_THRU_PROTOCOL *PassThru,
|
||||
IN UINT8 Slot,
|
||||
IN UINT16 Rca,
|
||||
IN SD_MMC_BUS_SETTINGS *BusMode
|
||||
)
|
||||
{
|
||||
EFI_STATUS Status;
|
||||
|
||||
if (BusMode->BusTiming != SdMmcMmcHs200 ||
|
||||
(BusMode->BusWidth != 4 && BusMode->BusWidth != 8)) {
|
||||
if ((BusMode->BusTiming != SdMmcMmcHs200) ||
|
||||
((BusMode->BusWidth != 4) && (BusMode->BusWidth != 8)))
|
||||
{
|
||||
return EFI_INVALID_PARAMETER;
|
||||
}
|
||||
|
||||
@@ -902,25 +907,26 @@ EmmcSwitchToHS200 (
|
||||
**/
|
||||
EFI_STATUS
|
||||
EmmcSwitchToHS400 (
|
||||
IN EFI_PCI_IO_PROTOCOL *PciIo,
|
||||
IN EFI_SD_MMC_PASS_THRU_PROTOCOL *PassThru,
|
||||
IN UINT8 Slot,
|
||||
IN UINT16 Rca,
|
||||
IN SD_MMC_BUS_SETTINGS *BusMode
|
||||
IN EFI_PCI_IO_PROTOCOL *PciIo,
|
||||
IN EFI_SD_MMC_PASS_THRU_PROTOCOL *PassThru,
|
||||
IN UINT8 Slot,
|
||||
IN UINT16 Rca,
|
||||
IN SD_MMC_BUS_SETTINGS *BusMode
|
||||
)
|
||||
{
|
||||
EFI_STATUS Status;
|
||||
SD_MMC_BUS_SETTINGS Hs200BusMode;
|
||||
UINT32 HsFreq;
|
||||
|
||||
if (BusMode->BusTiming != SdMmcMmcHs400 ||
|
||||
BusMode->BusWidth != 8) {
|
||||
if ((BusMode->BusTiming != SdMmcMmcHs400) ||
|
||||
(BusMode->BusWidth != 8))
|
||||
{
|
||||
return EFI_INVALID_PARAMETER;
|
||||
}
|
||||
|
||||
Hs200BusMode.BusTiming = SdMmcMmcHs200;
|
||||
Hs200BusMode.BusWidth = BusMode->BusWidth;
|
||||
Hs200BusMode.ClockFreq = BusMode->ClockFreq;
|
||||
Hs200BusMode.BusTiming = SdMmcMmcHs200;
|
||||
Hs200BusMode.BusWidth = BusMode->BusWidth;
|
||||
Hs200BusMode.ClockFreq = BusMode->ClockFreq;
|
||||
Hs200BusMode.DriverStrength = BusMode->DriverStrength;
|
||||
|
||||
Status = EmmcSwitchToHS200 (PciIo, PassThru, Slot, Rca, &Hs200BusMode);
|
||||
@@ -973,29 +979,34 @@ EmmcIsBusTimingSupported (
|
||||
Supported = FALSE;
|
||||
switch (BusTiming) {
|
||||
case SdMmcMmcHs400:
|
||||
if ((((ExtCsd->DeviceType & (BIT6 | BIT7)) != 0) && (Capabilities->Hs400 != 0)) && Capabilities->BusWidth8 != 0) {
|
||||
if ((((ExtCsd->DeviceType & (BIT6 | BIT7)) != 0) && (Capabilities->Hs400 != 0)) && (Capabilities->BusWidth8 != 0)) {
|
||||
Supported = TRUE;
|
||||
}
|
||||
|
||||
break;
|
||||
case SdMmcMmcHs200:
|
||||
if ((((ExtCsd->DeviceType & (BIT4 | BIT5)) != 0) && (Capabilities->Sdr104 != 0))) {
|
||||
Supported = TRUE;
|
||||
}
|
||||
|
||||
break;
|
||||
case SdMmcMmcHsDdr:
|
||||
if ((((ExtCsd->DeviceType & (BIT2 | BIT3)) != 0) && (Capabilities->Ddr50 != 0))) {
|
||||
Supported = TRUE;
|
||||
}
|
||||
|
||||
break;
|
||||
case SdMmcMmcHsSdr:
|
||||
if ((((ExtCsd->DeviceType & BIT1) != 0) && (Capabilities->HighSpeed != 0))) {
|
||||
Supported = TRUE;
|
||||
}
|
||||
|
||||
break;
|
||||
case SdMmcMmcLegacy:
|
||||
if ((ExtCsd->DeviceType & BIT0) != 0) {
|
||||
Supported = TRUE;
|
||||
}
|
||||
|
||||
break;
|
||||
default:
|
||||
ASSERT (FALSE);
|
||||
@@ -1018,8 +1029,8 @@ EmmcIsBusTimingSupported (
|
||||
SD_MMC_BUS_MODE
|
||||
EmmcGetTargetBusTiming (
|
||||
IN SD_MMC_HC_PRIVATE_DATA *Private,
|
||||
IN UINT8 SlotIndex,
|
||||
IN EMMC_EXT_CSD *ExtCsd
|
||||
IN UINT8 SlotIndex,
|
||||
IN EMMC_EXT_CSD *ExtCsd
|
||||
)
|
||||
{
|
||||
SD_MMC_BUS_MODE BusTiming;
|
||||
@@ -1033,6 +1044,7 @@ EmmcGetTargetBusTiming (
|
||||
if (EmmcIsBusTimingSupported (Private, SlotIndex, ExtCsd, BusTiming)) {
|
||||
break;
|
||||
}
|
||||
|
||||
BusTiming--;
|
||||
}
|
||||
|
||||
@@ -1052,17 +1064,17 @@ EmmcGetTargetBusTiming (
|
||||
**/
|
||||
BOOLEAN
|
||||
EmmcIsBusWidthSupported (
|
||||
IN SD_MMC_HC_PRIVATE_DATA *Private,
|
||||
IN UINT8 SlotIndex,
|
||||
IN SD_MMC_BUS_MODE BusTiming,
|
||||
IN UINT16 BusWidth
|
||||
IN SD_MMC_HC_PRIVATE_DATA *Private,
|
||||
IN UINT8 SlotIndex,
|
||||
IN SD_MMC_BUS_MODE BusTiming,
|
||||
IN UINT16 BusWidth
|
||||
)
|
||||
{
|
||||
if (BusWidth == 8 && Private->Capability[SlotIndex].BusWidth8 != 0) {
|
||||
if ((BusWidth == 8) && (Private->Capability[SlotIndex].BusWidth8 != 0)) {
|
||||
return TRUE;
|
||||
} else if (BusWidth == 4 && BusTiming != SdMmcMmcHs400) {
|
||||
} else if ((BusWidth == 4) && (BusTiming != SdMmcMmcHs400)) {
|
||||
return TRUE;
|
||||
} else if (BusWidth == 1 && (BusTiming == SdMmcMmcHsSdr || BusTiming == SdMmcMmcLegacy)) {
|
||||
} else if ((BusWidth == 1) && ((BusTiming == SdMmcMmcHsSdr) || (BusTiming == SdMmcMmcLegacy))) {
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
@@ -1081,10 +1093,10 @@ EmmcIsBusWidthSupported (
|
||||
**/
|
||||
UINT8
|
||||
EmmcGetTargetBusWidth (
|
||||
IN SD_MMC_HC_PRIVATE_DATA *Private,
|
||||
IN UINT8 SlotIndex,
|
||||
IN EMMC_EXT_CSD *ExtCsd,
|
||||
IN SD_MMC_BUS_MODE BusTiming
|
||||
IN SD_MMC_HC_PRIVATE_DATA *Private,
|
||||
IN UINT8 SlotIndex,
|
||||
IN EMMC_EXT_CSD *ExtCsd,
|
||||
IN SD_MMC_BUS_MODE BusTiming
|
||||
)
|
||||
{
|
||||
UINT8 BusWidth;
|
||||
@@ -1092,8 +1104,9 @@ EmmcGetTargetBusWidth (
|
||||
|
||||
PreferredBusWidth = Private->Slot[SlotIndex].OperatingParameters.BusWidth;
|
||||
|
||||
if (PreferredBusWidth != EDKII_SD_MMC_BUS_WIDTH_IGNORE &&
|
||||
EmmcIsBusWidthSupported (Private, SlotIndex, BusTiming, PreferredBusWidth)) {
|
||||
if ((PreferredBusWidth != EDKII_SD_MMC_BUS_WIDTH_IGNORE) &&
|
||||
EmmcIsBusWidthSupported (Private, SlotIndex, BusTiming, PreferredBusWidth))
|
||||
{
|
||||
BusWidth = PreferredBusWidth;
|
||||
} else if (EmmcIsBusWidthSupported (Private, SlotIndex, BusTiming, 8)) {
|
||||
BusWidth = 8;
|
||||
@@ -1118,14 +1131,14 @@ EmmcGetTargetBusWidth (
|
||||
**/
|
||||
UINT32
|
||||
EmmcGetTargetClockFreq (
|
||||
IN SD_MMC_HC_PRIVATE_DATA *Private,
|
||||
IN UINT8 SlotIndex,
|
||||
IN EMMC_EXT_CSD *ExtCsd,
|
||||
IN SD_MMC_BUS_MODE BusTiming
|
||||
IN SD_MMC_HC_PRIVATE_DATA *Private,
|
||||
IN UINT8 SlotIndex,
|
||||
IN EMMC_EXT_CSD *ExtCsd,
|
||||
IN SD_MMC_BUS_MODE BusTiming
|
||||
)
|
||||
{
|
||||
UINT32 PreferredClockFreq;
|
||||
UINT32 MaxClockFreq;
|
||||
UINT32 PreferredClockFreq;
|
||||
UINT32 MaxClockFreq;
|
||||
|
||||
PreferredClockFreq = Private->Slot[SlotIndex].OperatingParameters.ClockFreq;
|
||||
|
||||
@@ -1143,7 +1156,7 @@ EmmcGetTargetClockFreq (
|
||||
break;
|
||||
}
|
||||
|
||||
if (PreferredClockFreq != EDKII_SD_MMC_CLOCK_FREQ_IGNORE && PreferredClockFreq < MaxClockFreq) {
|
||||
if ((PreferredClockFreq != EDKII_SD_MMC_CLOCK_FREQ_IGNORE) && (PreferredClockFreq < MaxClockFreq)) {
|
||||
return PreferredClockFreq;
|
||||
} else {
|
||||
return MaxClockFreq;
|
||||
@@ -1162,20 +1175,21 @@ EmmcGetTargetClockFreq (
|
||||
**/
|
||||
EDKII_SD_MMC_DRIVER_STRENGTH
|
||||
EmmcGetTargetDriverStrength (
|
||||
IN SD_MMC_HC_PRIVATE_DATA *Private,
|
||||
IN UINT8 SlotIndex,
|
||||
IN EMMC_EXT_CSD *ExtCsd,
|
||||
IN SD_MMC_BUS_MODE BusTiming
|
||||
IN SD_MMC_HC_PRIVATE_DATA *Private,
|
||||
IN UINT8 SlotIndex,
|
||||
IN EMMC_EXT_CSD *ExtCsd,
|
||||
IN SD_MMC_BUS_MODE BusTiming
|
||||
)
|
||||
{
|
||||
EDKII_SD_MMC_DRIVER_STRENGTH PreferredDriverStrength;
|
||||
EDKII_SD_MMC_DRIVER_STRENGTH DriverStrength;
|
||||
|
||||
PreferredDriverStrength = Private->Slot[SlotIndex].OperatingParameters.DriverStrength;
|
||||
DriverStrength.Emmc = EmmcDriverStrengthType0;
|
||||
DriverStrength.Emmc = EmmcDriverStrengthType0;
|
||||
|
||||
if (PreferredDriverStrength.Emmc != EDKII_SD_MMC_DRIVER_STRENGTH_IGNORE &&
|
||||
(ExtCsd->DriverStrength & (BIT0 << PreferredDriverStrength.Emmc))) {
|
||||
if ((PreferredDriverStrength.Emmc != EDKII_SD_MMC_DRIVER_STRENGTH_IGNORE) &&
|
||||
(ExtCsd->DriverStrength & (BIT0 << PreferredDriverStrength.Emmc)))
|
||||
{
|
||||
DriverStrength.Emmc = PreferredDriverStrength.Emmc;
|
||||
}
|
||||
|
||||
@@ -1198,9 +1212,9 @@ EmmcGetTargetBusMode (
|
||||
OUT SD_MMC_BUS_SETTINGS *BusMode
|
||||
)
|
||||
{
|
||||
BusMode->BusTiming = EmmcGetTargetBusTiming (Private, SlotIndex, ExtCsd);
|
||||
BusMode->BusWidth = EmmcGetTargetBusWidth (Private, SlotIndex, ExtCsd, BusMode->BusTiming);
|
||||
BusMode->ClockFreq = EmmcGetTargetClockFreq (Private, SlotIndex, ExtCsd, BusMode->BusTiming);
|
||||
BusMode->BusTiming = EmmcGetTargetBusTiming (Private, SlotIndex, ExtCsd);
|
||||
BusMode->BusWidth = EmmcGetTargetBusWidth (Private, SlotIndex, ExtCsd, BusMode->BusTiming);
|
||||
BusMode->ClockFreq = EmmcGetTargetClockFreq (Private, SlotIndex, ExtCsd, BusMode->BusTiming);
|
||||
BusMode->DriverStrength = EmmcGetTargetDriverStrength (Private, SlotIndex, ExtCsd, BusMode->BusTiming);
|
||||
}
|
||||
|
||||
@@ -1221,17 +1235,17 @@ EmmcGetTargetBusMode (
|
||||
**/
|
||||
EFI_STATUS
|
||||
EmmcSetBusMode (
|
||||
IN EFI_PCI_IO_PROTOCOL *PciIo,
|
||||
IN EFI_SD_MMC_PASS_THRU_PROTOCOL *PassThru,
|
||||
IN UINT8 Slot,
|
||||
IN UINT16 Rca
|
||||
IN EFI_PCI_IO_PROTOCOL *PciIo,
|
||||
IN EFI_SD_MMC_PASS_THRU_PROTOCOL *PassThru,
|
||||
IN UINT8 Slot,
|
||||
IN UINT16 Rca
|
||||
)
|
||||
{
|
||||
EFI_STATUS Status;
|
||||
EMMC_CSD Csd;
|
||||
EMMC_EXT_CSD ExtCsd;
|
||||
SD_MMC_BUS_SETTINGS BusMode;
|
||||
SD_MMC_HC_PRIVATE_DATA *Private;
|
||||
EFI_STATUS Status;
|
||||
EMMC_CSD Csd;
|
||||
EMMC_EXT_CSD ExtCsd;
|
||||
SD_MMC_BUS_SETTINGS BusMode;
|
||||
SD_MMC_HC_PRIVATE_DATA *Private;
|
||||
|
||||
Private = SD_MMC_HC_PRIVATE_FROM_THIS (PassThru);
|
||||
|
||||
@@ -1260,8 +1274,14 @@ EmmcSetBusMode (
|
||||
|
||||
EmmcGetTargetBusMode (Private, Slot, &ExtCsd, &BusMode);
|
||||
|
||||
DEBUG ((DEBUG_INFO, "EmmcSetBusMode: Target bus mode: timing = %d, width = %d, clock freq = %d, driver strength = %d\n",
|
||||
BusMode.BusTiming, BusMode.BusWidth, BusMode.ClockFreq, BusMode.DriverStrength.Emmc));
|
||||
DEBUG ((
|
||||
DEBUG_INFO,
|
||||
"EmmcSetBusMode: Target bus mode: timing = %d, width = %d, clock freq = %d, driver strength = %d\n",
|
||||
BusMode.BusTiming,
|
||||
BusMode.BusWidth,
|
||||
BusMode.ClockFreq,
|
||||
BusMode.DriverStrength.Emmc
|
||||
));
|
||||
|
||||
if (BusMode.BusTiming == SdMmcMmcHs400) {
|
||||
Status = EmmcSwitchToHS400 (PciIo, PassThru, Slot, Rca, &BusMode);
|
||||
@@ -1296,8 +1316,8 @@ EmmcSetBusMode (
|
||||
**/
|
||||
EFI_STATUS
|
||||
EmmcIdentification (
|
||||
IN SD_MMC_HC_PRIVATE_DATA *Private,
|
||||
IN UINT8 Slot
|
||||
IN SD_MMC_HC_PRIVATE_DATA *Private,
|
||||
IN UINT8 Slot
|
||||
)
|
||||
{
|
||||
EFI_STATUS Status;
|
||||
@@ -1324,13 +1344,15 @@ EmmcIdentification (
|
||||
DEBUG ((DEBUG_VERBOSE, "EmmcIdentification: Executing Cmd1 fails with %r\n", Status));
|
||||
return Status;
|
||||
}
|
||||
|
||||
Ocr |= BIT30;
|
||||
|
||||
if (Retry++ == 100) {
|
||||
DEBUG ((DEBUG_VERBOSE, "EmmcIdentification: Executing Cmd1 fails too many times\n"));
|
||||
return EFI_DEVICE_ERROR;
|
||||
}
|
||||
gBS->Stall(10 * 1000);
|
||||
|
||||
gBS->Stall (10 * 1000);
|
||||
} while ((Ocr & BIT31) == 0);
|
||||
|
||||
Status = EmmcGetAllCid (PassThru, Slot);
|
||||
@@ -1338,6 +1360,7 @@ EmmcIdentification (
|
||||
DEBUG ((DEBUG_VERBOSE, "EmmcIdentification: Executing Cmd2 fails with %r\n", Status));
|
||||
return Status;
|
||||
}
|
||||
|
||||
//
|
||||
// Slot starts from 0 and valid RCA starts from 1.
|
||||
// Here we takes a simple formula to calculate the RCA.
|
||||
@@ -1350,6 +1373,7 @@ EmmcIdentification (
|
||||
DEBUG ((DEBUG_ERROR, "EmmcIdentification: Executing Cmd3 fails with %r\n", Status));
|
||||
return Status;
|
||||
}
|
||||
|
||||
//
|
||||
// Enter Data Tranfer Mode.
|
||||
//
|
||||
@@ -1360,4 +1384,3 @@ EmmcIdentification (
|
||||
|
||||
return Status;
|
||||
}
|
||||
|
||||
|
@@ -23,14 +23,14 @@
|
||||
**/
|
||||
EFI_STATUS
|
||||
SdCardReset (
|
||||
IN EFI_SD_MMC_PASS_THRU_PROTOCOL *PassThru,
|
||||
IN UINT8 Slot
|
||||
IN EFI_SD_MMC_PASS_THRU_PROTOCOL *PassThru,
|
||||
IN UINT8 Slot
|
||||
)
|
||||
{
|
||||
EFI_SD_MMC_COMMAND_BLOCK SdMmcCmdBlk;
|
||||
EFI_SD_MMC_STATUS_BLOCK SdMmcStatusBlk;
|
||||
EFI_SD_MMC_PASS_THRU_COMMAND_PACKET Packet;
|
||||
EFI_STATUS Status;
|
||||
EFI_SD_MMC_COMMAND_BLOCK SdMmcCmdBlk;
|
||||
EFI_SD_MMC_STATUS_BLOCK SdMmcStatusBlk;
|
||||
EFI_SD_MMC_PASS_THRU_COMMAND_PACKET Packet;
|
||||
EFI_STATUS Status;
|
||||
|
||||
ZeroMem (&SdMmcCmdBlk, sizeof (SdMmcCmdBlk));
|
||||
ZeroMem (&SdMmcStatusBlk, sizeof (SdMmcStatusBlk));
|
||||
@@ -65,16 +65,16 @@ SdCardReset (
|
||||
**/
|
||||
EFI_STATUS
|
||||
SdCardVoltageCheck (
|
||||
IN EFI_SD_MMC_PASS_THRU_PROTOCOL *PassThru,
|
||||
IN UINT8 Slot,
|
||||
IN UINT8 SupplyVoltage,
|
||||
IN UINT8 CheckPattern
|
||||
IN EFI_SD_MMC_PASS_THRU_PROTOCOL *PassThru,
|
||||
IN UINT8 Slot,
|
||||
IN UINT8 SupplyVoltage,
|
||||
IN UINT8 CheckPattern
|
||||
)
|
||||
{
|
||||
EFI_SD_MMC_COMMAND_BLOCK SdMmcCmdBlk;
|
||||
EFI_SD_MMC_STATUS_BLOCK SdMmcStatusBlk;
|
||||
EFI_SD_MMC_PASS_THRU_COMMAND_PACKET Packet;
|
||||
EFI_STATUS Status;
|
||||
EFI_SD_MMC_COMMAND_BLOCK SdMmcCmdBlk;
|
||||
EFI_SD_MMC_STATUS_BLOCK SdMmcStatusBlk;
|
||||
EFI_SD_MMC_PASS_THRU_COMMAND_PACKET Packet;
|
||||
EFI_STATUS Status;
|
||||
|
||||
ZeroMem (&SdMmcCmdBlk, sizeof (SdMmcCmdBlk));
|
||||
ZeroMem (&SdMmcStatusBlk, sizeof (SdMmcStatusBlk));
|
||||
@@ -84,9 +84,9 @@ SdCardVoltageCheck (
|
||||
Packet.SdMmcStatusBlk = &SdMmcStatusBlk;
|
||||
Packet.Timeout = SD_MMC_HC_GENERIC_TIMEOUT;
|
||||
|
||||
SdMmcCmdBlk.CommandIndex = SD_SEND_IF_COND;
|
||||
SdMmcCmdBlk.CommandType = SdMmcCommandTypeBcr;
|
||||
SdMmcCmdBlk.ResponseType = SdMmcResponseTypeR7;
|
||||
SdMmcCmdBlk.CommandIndex = SD_SEND_IF_COND;
|
||||
SdMmcCmdBlk.CommandType = SdMmcCommandTypeBcr;
|
||||
SdMmcCmdBlk.ResponseType = SdMmcResponseTypeR7;
|
||||
SdMmcCmdBlk.CommandArgument = (SupplyVoltage << 8) | CheckPattern;
|
||||
|
||||
Status = SdMmcPassThruPassThru (PassThru, Slot, &Packet, NULL);
|
||||
@@ -116,17 +116,17 @@ SdCardVoltageCheck (
|
||||
**/
|
||||
EFI_STATUS
|
||||
SdioSendOpCond (
|
||||
IN EFI_SD_MMC_PASS_THRU_PROTOCOL *PassThru,
|
||||
IN UINT8 Slot,
|
||||
IN UINT32 VoltageWindow,
|
||||
IN BOOLEAN S18R
|
||||
IN EFI_SD_MMC_PASS_THRU_PROTOCOL *PassThru,
|
||||
IN UINT8 Slot,
|
||||
IN UINT32 VoltageWindow,
|
||||
IN BOOLEAN S18R
|
||||
)
|
||||
{
|
||||
EFI_SD_MMC_COMMAND_BLOCK SdMmcCmdBlk;
|
||||
EFI_SD_MMC_STATUS_BLOCK SdMmcStatusBlk;
|
||||
EFI_SD_MMC_PASS_THRU_COMMAND_PACKET Packet;
|
||||
EFI_STATUS Status;
|
||||
UINT32 Switch;
|
||||
EFI_SD_MMC_COMMAND_BLOCK SdMmcCmdBlk;
|
||||
EFI_SD_MMC_STATUS_BLOCK SdMmcStatusBlk;
|
||||
EFI_SD_MMC_PASS_THRU_COMMAND_PACKET Packet;
|
||||
EFI_STATUS Status;
|
||||
UINT32 Switch;
|
||||
|
||||
ZeroMem (&SdMmcCmdBlk, sizeof (SdMmcCmdBlk));
|
||||
ZeroMem (&SdMmcStatusBlk, sizeof (SdMmcStatusBlk));
|
||||
@@ -176,16 +176,16 @@ SdCardSendOpCond (
|
||||
IN BOOLEAN S18R,
|
||||
IN BOOLEAN Xpc,
|
||||
IN BOOLEAN Hcs,
|
||||
OUT UINT32 *Ocr
|
||||
OUT UINT32 *Ocr
|
||||
)
|
||||
{
|
||||
EFI_SD_MMC_COMMAND_BLOCK SdMmcCmdBlk;
|
||||
EFI_SD_MMC_STATUS_BLOCK SdMmcStatusBlk;
|
||||
EFI_SD_MMC_PASS_THRU_COMMAND_PACKET Packet;
|
||||
EFI_STATUS Status;
|
||||
UINT32 Switch;
|
||||
UINT32 MaxPower;
|
||||
UINT32 HostCapacity;
|
||||
EFI_SD_MMC_COMMAND_BLOCK SdMmcCmdBlk;
|
||||
EFI_SD_MMC_STATUS_BLOCK SdMmcStatusBlk;
|
||||
EFI_SD_MMC_PASS_THRU_COMMAND_PACKET Packet;
|
||||
EFI_STATUS Status;
|
||||
UINT32 Switch;
|
||||
UINT32 MaxPower;
|
||||
UINT32 HostCapacity;
|
||||
|
||||
ZeroMem (&SdMmcCmdBlk, sizeof (SdMmcCmdBlk));
|
||||
ZeroMem (&SdMmcStatusBlk, sizeof (SdMmcStatusBlk));
|
||||
@@ -195,9 +195,9 @@ SdCardSendOpCond (
|
||||
Packet.SdMmcStatusBlk = &SdMmcStatusBlk;
|
||||
Packet.Timeout = SD_MMC_HC_GENERIC_TIMEOUT;
|
||||
|
||||
SdMmcCmdBlk.CommandIndex = SD_APP_CMD;
|
||||
SdMmcCmdBlk.CommandType = SdMmcCommandTypeAc;
|
||||
SdMmcCmdBlk.ResponseType = SdMmcResponseTypeR1;
|
||||
SdMmcCmdBlk.CommandIndex = SD_APP_CMD;
|
||||
SdMmcCmdBlk.CommandType = SdMmcCommandTypeAc;
|
||||
SdMmcCmdBlk.ResponseType = SdMmcResponseTypeR1;
|
||||
SdMmcCmdBlk.CommandArgument = (UINT32)Rca << 16;
|
||||
|
||||
Status = SdMmcPassThruPassThru (PassThru, Slot, &Packet, NULL);
|
||||
@@ -241,14 +241,14 @@ SdCardSendOpCond (
|
||||
**/
|
||||
EFI_STATUS
|
||||
SdCardAllSendCid (
|
||||
IN EFI_SD_MMC_PASS_THRU_PROTOCOL *PassThru,
|
||||
IN UINT8 Slot
|
||||
IN EFI_SD_MMC_PASS_THRU_PROTOCOL *PassThru,
|
||||
IN UINT8 Slot
|
||||
)
|
||||
{
|
||||
EFI_SD_MMC_COMMAND_BLOCK SdMmcCmdBlk;
|
||||
EFI_SD_MMC_STATUS_BLOCK SdMmcStatusBlk;
|
||||
EFI_SD_MMC_PASS_THRU_COMMAND_PACKET Packet;
|
||||
EFI_STATUS Status;
|
||||
EFI_SD_MMC_COMMAND_BLOCK SdMmcCmdBlk;
|
||||
EFI_SD_MMC_STATUS_BLOCK SdMmcStatusBlk;
|
||||
EFI_SD_MMC_PASS_THRU_COMMAND_PACKET Packet;
|
||||
EFI_STATUS Status;
|
||||
|
||||
ZeroMem (&SdMmcCmdBlk, sizeof (SdMmcCmdBlk));
|
||||
ZeroMem (&SdMmcStatusBlk, sizeof (SdMmcStatusBlk));
|
||||
@@ -285,13 +285,13 @@ EFI_STATUS
|
||||
SdCardSetRca (
|
||||
IN EFI_SD_MMC_PASS_THRU_PROTOCOL *PassThru,
|
||||
IN UINT8 Slot,
|
||||
OUT UINT16 *Rca
|
||||
OUT UINT16 *Rca
|
||||
)
|
||||
{
|
||||
EFI_SD_MMC_COMMAND_BLOCK SdMmcCmdBlk;
|
||||
EFI_SD_MMC_STATUS_BLOCK SdMmcStatusBlk;
|
||||
EFI_SD_MMC_PASS_THRU_COMMAND_PACKET Packet;
|
||||
EFI_STATUS Status;
|
||||
EFI_SD_MMC_COMMAND_BLOCK SdMmcCmdBlk;
|
||||
EFI_SD_MMC_STATUS_BLOCK SdMmcStatusBlk;
|
||||
EFI_SD_MMC_PASS_THRU_COMMAND_PACKET Packet;
|
||||
EFI_STATUS Status;
|
||||
|
||||
ZeroMem (&SdMmcCmdBlk, sizeof (SdMmcCmdBlk));
|
||||
ZeroMem (&SdMmcStatusBlk, sizeof (SdMmcStatusBlk));
|
||||
@@ -328,15 +328,15 @@ SdCardSetRca (
|
||||
**/
|
||||
EFI_STATUS
|
||||
SdCardSelect (
|
||||
IN EFI_SD_MMC_PASS_THRU_PROTOCOL *PassThru,
|
||||
IN UINT8 Slot,
|
||||
IN UINT16 Rca
|
||||
IN EFI_SD_MMC_PASS_THRU_PROTOCOL *PassThru,
|
||||
IN UINT8 Slot,
|
||||
IN UINT16 Rca
|
||||
)
|
||||
{
|
||||
EFI_SD_MMC_COMMAND_BLOCK SdMmcCmdBlk;
|
||||
EFI_SD_MMC_STATUS_BLOCK SdMmcStatusBlk;
|
||||
EFI_SD_MMC_PASS_THRU_COMMAND_PACKET Packet;
|
||||
EFI_STATUS Status;
|
||||
EFI_SD_MMC_COMMAND_BLOCK SdMmcCmdBlk;
|
||||
EFI_SD_MMC_STATUS_BLOCK SdMmcStatusBlk;
|
||||
EFI_SD_MMC_PASS_THRU_COMMAND_PACKET Packet;
|
||||
EFI_STATUS Status;
|
||||
|
||||
ZeroMem (&SdMmcCmdBlk, sizeof (SdMmcCmdBlk));
|
||||
ZeroMem (&SdMmcStatusBlk, sizeof (SdMmcStatusBlk));
|
||||
@@ -351,6 +351,7 @@ SdCardSelect (
|
||||
if (Rca != 0) {
|
||||
SdMmcCmdBlk.ResponseType = SdMmcResponseTypeR1b;
|
||||
}
|
||||
|
||||
SdMmcCmdBlk.CommandArgument = (UINT32)Rca << 16;
|
||||
|
||||
Status = SdMmcPassThruPassThru (PassThru, Slot, &Packet, NULL);
|
||||
@@ -372,14 +373,14 @@ SdCardSelect (
|
||||
**/
|
||||
EFI_STATUS
|
||||
SdCardVoltageSwitch (
|
||||
IN EFI_SD_MMC_PASS_THRU_PROTOCOL *PassThru,
|
||||
IN UINT8 Slot
|
||||
IN EFI_SD_MMC_PASS_THRU_PROTOCOL *PassThru,
|
||||
IN UINT8 Slot
|
||||
)
|
||||
{
|
||||
EFI_SD_MMC_COMMAND_BLOCK SdMmcCmdBlk;
|
||||
EFI_SD_MMC_STATUS_BLOCK SdMmcStatusBlk;
|
||||
EFI_SD_MMC_PASS_THRU_COMMAND_PACKET Packet;
|
||||
EFI_STATUS Status;
|
||||
EFI_SD_MMC_COMMAND_BLOCK SdMmcCmdBlk;
|
||||
EFI_SD_MMC_STATUS_BLOCK SdMmcStatusBlk;
|
||||
EFI_SD_MMC_PASS_THRU_COMMAND_PACKET Packet;
|
||||
EFI_STATUS Status;
|
||||
|
||||
ZeroMem (&SdMmcCmdBlk, sizeof (SdMmcCmdBlk));
|
||||
ZeroMem (&SdMmcStatusBlk, sizeof (SdMmcStatusBlk));
|
||||
@@ -389,9 +390,9 @@ SdCardVoltageSwitch (
|
||||
Packet.SdMmcStatusBlk = &SdMmcStatusBlk;
|
||||
Packet.Timeout = SD_MMC_HC_GENERIC_TIMEOUT;
|
||||
|
||||
SdMmcCmdBlk.CommandIndex = SD_VOLTAGE_SWITCH;
|
||||
SdMmcCmdBlk.CommandType = SdMmcCommandTypeAc;
|
||||
SdMmcCmdBlk.ResponseType = SdMmcResponseTypeR1;
|
||||
SdMmcCmdBlk.CommandIndex = SD_VOLTAGE_SWITCH;
|
||||
SdMmcCmdBlk.CommandType = SdMmcCommandTypeAc;
|
||||
SdMmcCmdBlk.ResponseType = SdMmcResponseTypeR1;
|
||||
SdMmcCmdBlk.CommandArgument = 0;
|
||||
|
||||
Status = SdMmcPassThruPassThru (PassThru, Slot, &Packet, NULL);
|
||||
@@ -415,17 +416,17 @@ SdCardVoltageSwitch (
|
||||
**/
|
||||
EFI_STATUS
|
||||
SdCardSetBusWidth (
|
||||
IN EFI_SD_MMC_PASS_THRU_PROTOCOL *PassThru,
|
||||
IN UINT8 Slot,
|
||||
IN UINT16 Rca,
|
||||
IN UINT8 BusWidth
|
||||
IN EFI_SD_MMC_PASS_THRU_PROTOCOL *PassThru,
|
||||
IN UINT8 Slot,
|
||||
IN UINT16 Rca,
|
||||
IN UINT8 BusWidth
|
||||
)
|
||||
{
|
||||
EFI_SD_MMC_COMMAND_BLOCK SdMmcCmdBlk;
|
||||
EFI_SD_MMC_STATUS_BLOCK SdMmcStatusBlk;
|
||||
EFI_SD_MMC_PASS_THRU_COMMAND_PACKET Packet;
|
||||
EFI_STATUS Status;
|
||||
UINT8 Value;
|
||||
EFI_SD_MMC_COMMAND_BLOCK SdMmcCmdBlk;
|
||||
EFI_SD_MMC_STATUS_BLOCK SdMmcStatusBlk;
|
||||
EFI_SD_MMC_PASS_THRU_COMMAND_PACKET Packet;
|
||||
EFI_STATUS Status;
|
||||
UINT8 Value;
|
||||
|
||||
ZeroMem (&SdMmcCmdBlk, sizeof (SdMmcCmdBlk));
|
||||
ZeroMem (&SdMmcStatusBlk, sizeof (SdMmcStatusBlk));
|
||||
@@ -435,9 +436,9 @@ SdCardSetBusWidth (
|
||||
Packet.SdMmcStatusBlk = &SdMmcStatusBlk;
|
||||
Packet.Timeout = SD_MMC_HC_GENERIC_TIMEOUT;
|
||||
|
||||
SdMmcCmdBlk.CommandIndex = SD_APP_CMD;
|
||||
SdMmcCmdBlk.CommandType = SdMmcCommandTypeAc;
|
||||
SdMmcCmdBlk.ResponseType = SdMmcResponseTypeR1;
|
||||
SdMmcCmdBlk.CommandIndex = SD_APP_CMD;
|
||||
SdMmcCmdBlk.CommandType = SdMmcCommandTypeAc;
|
||||
SdMmcCmdBlk.ResponseType = SdMmcResponseTypeR1;
|
||||
SdMmcCmdBlk.CommandArgument = (UINT32)Rca << 16;
|
||||
|
||||
Status = SdMmcPassThruPassThru (PassThru, Slot, &Packet, NULL);
|
||||
@@ -490,15 +491,15 @@ SdCardSwitch (
|
||||
IN SD_DRIVER_STRENGTH_TYPE DriverStrength,
|
||||
IN UINT8 PowerLimit,
|
||||
IN BOOLEAN Mode,
|
||||
OUT UINT8 *SwitchResp
|
||||
OUT UINT8 *SwitchResp
|
||||
)
|
||||
{
|
||||
EFI_SD_MMC_COMMAND_BLOCK SdMmcCmdBlk;
|
||||
EFI_SD_MMC_STATUS_BLOCK SdMmcStatusBlk;
|
||||
EFI_SD_MMC_PASS_THRU_COMMAND_PACKET Packet;
|
||||
EFI_STATUS Status;
|
||||
UINT32 ModeValue;
|
||||
UINT8 AccessMode;
|
||||
EFI_SD_MMC_COMMAND_BLOCK SdMmcCmdBlk;
|
||||
EFI_SD_MMC_STATUS_BLOCK SdMmcStatusBlk;
|
||||
EFI_SD_MMC_PASS_THRU_COMMAND_PACKET Packet;
|
||||
EFI_STATUS Status;
|
||||
UINT32 ModeValue;
|
||||
UINT8 AccessMode;
|
||||
|
||||
ZeroMem (&SdMmcCmdBlk, sizeof (SdMmcCmdBlk));
|
||||
ZeroMem (&SdMmcStatusBlk, sizeof (SdMmcStatusBlk));
|
||||
@@ -552,7 +553,8 @@ SdCardSwitch (
|
||||
if ((((AccessMode & 0xF) != 0xF) && ((SwitchResp[16] & 0xF) != AccessMode)) ||
|
||||
(((CommandSystem & 0xF) != 0xF) && (((SwitchResp[16] >> 4) & 0xF) != CommandSystem)) ||
|
||||
(((DriverStrength & 0xF) != 0xF) && ((SwitchResp[15] & 0xF) != DriverStrength)) ||
|
||||
(((PowerLimit & 0xF) != 0xF) && (((SwitchResp[15] >> 4) & 0xF) != PowerLimit))) {
|
||||
(((PowerLimit & 0xF) != 0xF) && (((SwitchResp[15] >> 4) & 0xF) != PowerLimit)))
|
||||
{
|
||||
return EFI_DEVICE_ERROR;
|
||||
}
|
||||
}
|
||||
@@ -579,13 +581,13 @@ SdCardSendStatus (
|
||||
IN EFI_SD_MMC_PASS_THRU_PROTOCOL *PassThru,
|
||||
IN UINT8 Slot,
|
||||
IN UINT16 Rca,
|
||||
OUT UINT32 *DevStatus
|
||||
OUT UINT32 *DevStatus
|
||||
)
|
||||
{
|
||||
EFI_SD_MMC_COMMAND_BLOCK SdMmcCmdBlk;
|
||||
EFI_SD_MMC_STATUS_BLOCK SdMmcStatusBlk;
|
||||
EFI_SD_MMC_PASS_THRU_COMMAND_PACKET Packet;
|
||||
EFI_STATUS Status;
|
||||
EFI_SD_MMC_COMMAND_BLOCK SdMmcCmdBlk;
|
||||
EFI_SD_MMC_STATUS_BLOCK SdMmcStatusBlk;
|
||||
EFI_SD_MMC_PASS_THRU_COMMAND_PACKET Packet;
|
||||
EFI_STATUS Status;
|
||||
|
||||
ZeroMem (&SdMmcCmdBlk, sizeof (SdMmcCmdBlk));
|
||||
ZeroMem (&SdMmcStatusBlk, sizeof (SdMmcStatusBlk));
|
||||
@@ -595,9 +597,9 @@ SdCardSendStatus (
|
||||
Packet.SdMmcStatusBlk = &SdMmcStatusBlk;
|
||||
Packet.Timeout = SD_MMC_HC_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 = SdMmcPassThruPassThru (PassThru, Slot, &Packet, NULL);
|
||||
@@ -625,15 +627,15 @@ SdCardSendStatus (
|
||||
**/
|
||||
EFI_STATUS
|
||||
SdCardSendTuningBlk (
|
||||
IN EFI_SD_MMC_PASS_THRU_PROTOCOL *PassThru,
|
||||
IN UINT8 Slot
|
||||
IN EFI_SD_MMC_PASS_THRU_PROTOCOL *PassThru,
|
||||
IN UINT8 Slot
|
||||
)
|
||||
{
|
||||
EFI_SD_MMC_COMMAND_BLOCK SdMmcCmdBlk;
|
||||
EFI_SD_MMC_STATUS_BLOCK SdMmcStatusBlk;
|
||||
EFI_SD_MMC_PASS_THRU_COMMAND_PACKET Packet;
|
||||
EFI_STATUS Status;
|
||||
UINT8 TuningBlock[64];
|
||||
EFI_SD_MMC_COMMAND_BLOCK SdMmcCmdBlk;
|
||||
EFI_SD_MMC_STATUS_BLOCK SdMmcStatusBlk;
|
||||
EFI_SD_MMC_PASS_THRU_COMMAND_PACKET Packet;
|
||||
EFI_STATUS Status;
|
||||
UINT8 TuningBlock[64];
|
||||
|
||||
ZeroMem (&SdMmcCmdBlk, sizeof (SdMmcCmdBlk));
|
||||
ZeroMem (&SdMmcStatusBlk, sizeof (SdMmcStatusBlk));
|
||||
@@ -643,9 +645,9 @@ SdCardSendTuningBlk (
|
||||
Packet.SdMmcStatusBlk = &SdMmcStatusBlk;
|
||||
Packet.Timeout = SD_MMC_HC_GENERIC_TIMEOUT;
|
||||
|
||||
SdMmcCmdBlk.CommandIndex = SD_SEND_TUNING_BLOCK;
|
||||
SdMmcCmdBlk.CommandType = SdMmcCommandTypeAdtc;
|
||||
SdMmcCmdBlk.ResponseType = SdMmcResponseTypeR1;
|
||||
SdMmcCmdBlk.CommandIndex = SD_SEND_TUNING_BLOCK;
|
||||
SdMmcCmdBlk.CommandType = SdMmcCommandTypeAdtc;
|
||||
SdMmcCmdBlk.ResponseType = SdMmcResponseTypeR1;
|
||||
SdMmcCmdBlk.CommandArgument = 0;
|
||||
|
||||
Packet.InDataBuffer = TuningBlock;
|
||||
@@ -675,23 +677,24 @@ SdCardSendTuningBlk (
|
||||
**/
|
||||
EFI_STATUS
|
||||
SdCardTuningClock (
|
||||
IN EFI_PCI_IO_PROTOCOL *PciIo,
|
||||
IN EFI_SD_MMC_PASS_THRU_PROTOCOL *PassThru,
|
||||
IN UINT8 Slot
|
||||
IN EFI_PCI_IO_PROTOCOL *PciIo,
|
||||
IN EFI_SD_MMC_PASS_THRU_PROTOCOL *PassThru,
|
||||
IN UINT8 Slot
|
||||
)
|
||||
{
|
||||
EFI_STATUS Status;
|
||||
UINT8 HostCtrl2;
|
||||
UINT8 Retry;
|
||||
EFI_STATUS Status;
|
||||
UINT8 HostCtrl2;
|
||||
UINT8 Retry;
|
||||
|
||||
//
|
||||
// Notify the host that the sampling clock tuning procedure starts.
|
||||
//
|
||||
HostCtrl2 = BIT6;
|
||||
Status = SdMmcHcOrMmio (PciIo, Slot, SD_MMC_HC_HOST_CTRL2, sizeof (HostCtrl2), &HostCtrl2);
|
||||
Status = SdMmcHcOrMmio (PciIo, Slot, SD_MMC_HC_HOST_CTRL2, sizeof (HostCtrl2), &HostCtrl2);
|
||||
if (EFI_ERROR (Status)) {
|
||||
return Status;
|
||||
}
|
||||
|
||||
//
|
||||
// Ask the device to send a sequence of tuning blocks till the tuning procedure is done.
|
||||
//
|
||||
@@ -711,6 +714,7 @@ SdCardTuningClock (
|
||||
if ((HostCtrl2 & (BIT6 | BIT7)) == 0) {
|
||||
break;
|
||||
}
|
||||
|
||||
if ((HostCtrl2 & (BIT6 | BIT7)) == BIT7) {
|
||||
return EFI_SUCCESS;
|
||||
}
|
||||
@@ -720,11 +724,12 @@ SdCardTuningClock (
|
||||
//
|
||||
// Abort the tuning procedure and reset the tuning circuit.
|
||||
//
|
||||
HostCtrl2 = (UINT8)~(BIT6 | BIT7);
|
||||
Status = SdMmcHcAndMmio (PciIo, Slot, SD_MMC_HC_HOST_CTRL2, sizeof (HostCtrl2), &HostCtrl2);
|
||||
HostCtrl2 = (UINT8) ~(BIT6 | BIT7);
|
||||
Status = SdMmcHcAndMmio (PciIo, Slot, SD_MMC_HC_HOST_CTRL2, sizeof (HostCtrl2), &HostCtrl2);
|
||||
if (EFI_ERROR (Status)) {
|
||||
return Status;
|
||||
}
|
||||
|
||||
return EFI_DEVICE_ERROR;
|
||||
}
|
||||
|
||||
@@ -746,15 +751,15 @@ SdCardTuningClock (
|
||||
**/
|
||||
EFI_STATUS
|
||||
SdCardSwitchBusWidth (
|
||||
IN EFI_PCI_IO_PROTOCOL *PciIo,
|
||||
IN EFI_SD_MMC_PASS_THRU_PROTOCOL *PassThru,
|
||||
IN UINT8 Slot,
|
||||
IN UINT16 Rca,
|
||||
IN UINT8 BusWidth
|
||||
IN EFI_PCI_IO_PROTOCOL *PciIo,
|
||||
IN EFI_SD_MMC_PASS_THRU_PROTOCOL *PassThru,
|
||||
IN UINT8 Slot,
|
||||
IN UINT16 Rca,
|
||||
IN UINT8 BusWidth
|
||||
)
|
||||
{
|
||||
EFI_STATUS Status;
|
||||
UINT32 DevStatus;
|
||||
EFI_STATUS Status;
|
||||
UINT32 DevStatus;
|
||||
|
||||
Status = SdCardSetBusWidth (PassThru, Slot, Rca, BusWidth);
|
||||
if (EFI_ERROR (Status)) {
|
||||
@@ -767,6 +772,7 @@ SdCardSwitchBusWidth (
|
||||
DEBUG ((DEBUG_ERROR, "SdCardSwitchBusWidth: Send status fails with %r\n", Status));
|
||||
return Status;
|
||||
}
|
||||
|
||||
//
|
||||
// Check the switch operation is really successful or not.
|
||||
//
|
||||
@@ -793,14 +799,14 @@ SdCardSwitchBusWidth (
|
||||
**/
|
||||
BOOLEAN
|
||||
SdIsBusTimingSupported (
|
||||
IN SD_MMC_HC_PRIVATE_DATA *Private,
|
||||
IN UINT8 SlotIndex,
|
||||
IN UINT8 CardSupportedBusTimings,
|
||||
IN BOOLEAN IsInUhsI,
|
||||
IN SD_MMC_BUS_MODE BusTiming
|
||||
IN SD_MMC_HC_PRIVATE_DATA *Private,
|
||||
IN UINT8 SlotIndex,
|
||||
IN UINT8 CardSupportedBusTimings,
|
||||
IN BOOLEAN IsInUhsI,
|
||||
IN SD_MMC_BUS_MODE BusTiming
|
||||
)
|
||||
{
|
||||
SD_MMC_HC_SLOT_CAP *Capability;
|
||||
SD_MMC_HC_SLOT_CAP *Capability;
|
||||
|
||||
Capability = &Private->Capability[SlotIndex];
|
||||
|
||||
@@ -810,26 +816,31 @@ SdIsBusTimingSupported (
|
||||
if ((Capability->Sdr104 != 0) && ((CardSupportedBusTimings & BIT3) != 0)) {
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
break;
|
||||
case SdMmcUhsDdr50:
|
||||
if ((Capability->Ddr50 != 0) && ((CardSupportedBusTimings & BIT4) != 0)) {
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
break;
|
||||
case SdMmcUhsSdr50:
|
||||
if ((Capability->Sdr50 != 0) && ((CardSupportedBusTimings & BIT2) != 0)) {
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
break;
|
||||
case SdMmcUhsSdr25:
|
||||
if ((CardSupportedBusTimings & BIT1) != 0) {
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
break;
|
||||
case SdMmcUhsSdr12:
|
||||
if ((CardSupportedBusTimings & BIT0) != 0) {
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
@@ -837,14 +848,16 @@ SdIsBusTimingSupported (
|
||||
} else {
|
||||
switch (BusTiming) {
|
||||
case SdMmcSdHs:
|
||||
if ((Capability->HighSpeed != 0) && (CardSupportedBusTimings & BIT1) != 0) {
|
||||
if ((Capability->HighSpeed != 0) && ((CardSupportedBusTimings & BIT1) != 0)) {
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
break;
|
||||
case SdMmcSdDs:
|
||||
if ((CardSupportedBusTimings & BIT0) != 0) {
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
@@ -886,6 +899,7 @@ SdGetTargetBusTiming (
|
||||
if (SdIsBusTimingSupported (Private, SlotIndex, CardSupportedBusTimings, IsInUhsI, BusTiming)) {
|
||||
break;
|
||||
}
|
||||
|
||||
BusTiming--;
|
||||
}
|
||||
|
||||
@@ -903,9 +917,9 @@ SdGetTargetBusTiming (
|
||||
**/
|
||||
UINT8
|
||||
SdGetTargetBusWidth (
|
||||
IN SD_MMC_HC_PRIVATE_DATA *Private,
|
||||
IN UINT8 SlotIndex,
|
||||
IN SD_MMC_BUS_MODE BusTiming
|
||||
IN SD_MMC_HC_PRIVATE_DATA *Private,
|
||||
IN UINT8 SlotIndex,
|
||||
IN SD_MMC_BUS_MODE BusTiming
|
||||
)
|
||||
{
|
||||
UINT8 BusWidth;
|
||||
@@ -913,9 +927,10 @@ SdGetTargetBusWidth (
|
||||
|
||||
PreferredBusWidth = Private->Slot[SlotIndex].OperatingParameters.BusWidth;
|
||||
|
||||
if (BusTiming == SdMmcSdDs || BusTiming == SdMmcSdHs) {
|
||||
if (PreferredBusWidth != EDKII_SD_MMC_BUS_WIDTH_IGNORE &&
|
||||
(PreferredBusWidth == 1 || PreferredBusWidth == 4)) {
|
||||
if ((BusTiming == SdMmcSdDs) || (BusTiming == SdMmcSdHs)) {
|
||||
if ((PreferredBusWidth != EDKII_SD_MMC_BUS_WIDTH_IGNORE) &&
|
||||
((PreferredBusWidth == 1) || (PreferredBusWidth == 4)))
|
||||
{
|
||||
BusWidth = PreferredBusWidth;
|
||||
} else {
|
||||
BusWidth = 4;
|
||||
@@ -943,13 +958,13 @@ SdGetTargetBusWidth (
|
||||
**/
|
||||
UINT32
|
||||
SdGetTargetBusClockFreq (
|
||||
IN SD_MMC_HC_PRIVATE_DATA *Private,
|
||||
IN UINT8 SlotIndex,
|
||||
IN SD_MMC_BUS_MODE BusTiming
|
||||
IN SD_MMC_HC_PRIVATE_DATA *Private,
|
||||
IN UINT8 SlotIndex,
|
||||
IN SD_MMC_BUS_MODE BusTiming
|
||||
)
|
||||
{
|
||||
UINT32 PreferredClockFreq;
|
||||
UINT32 MaxClockFreq;
|
||||
UINT32 PreferredClockFreq;
|
||||
UINT32 MaxClockFreq;
|
||||
|
||||
PreferredClockFreq = Private->Slot[SlotIndex].OperatingParameters.ClockFreq;
|
||||
|
||||
@@ -971,7 +986,7 @@ SdGetTargetBusClockFreq (
|
||||
MaxClockFreq = 25;
|
||||
}
|
||||
|
||||
if (PreferredClockFreq != EDKII_SD_MMC_CLOCK_FREQ_IGNORE && PreferredClockFreq < MaxClockFreq) {
|
||||
if ((PreferredClockFreq != EDKII_SD_MMC_CLOCK_FREQ_IGNORE) && (PreferredClockFreq < MaxClockFreq)) {
|
||||
return PreferredClockFreq;
|
||||
} else {
|
||||
return MaxClockFreq;
|
||||
@@ -990,32 +1005,33 @@ SdGetTargetBusClockFreq (
|
||||
**/
|
||||
EDKII_SD_MMC_DRIVER_STRENGTH
|
||||
SdGetTargetDriverStrength (
|
||||
IN SD_MMC_HC_PRIVATE_DATA *Private,
|
||||
IN UINT8 SlotIndex,
|
||||
IN UINT8 CardSupportedDriverStrengths,
|
||||
IN SD_MMC_BUS_MODE BusTiming
|
||||
IN SD_MMC_HC_PRIVATE_DATA *Private,
|
||||
IN UINT8 SlotIndex,
|
||||
IN UINT8 CardSupportedDriverStrengths,
|
||||
IN SD_MMC_BUS_MODE BusTiming
|
||||
)
|
||||
{
|
||||
EDKII_SD_MMC_DRIVER_STRENGTH PreferredDriverStrength;
|
||||
EDKII_SD_MMC_DRIVER_STRENGTH DriverStrength;
|
||||
|
||||
if (BusTiming == SdMmcSdDs || BusTiming == SdMmcSdHs) {
|
||||
if ((BusTiming == SdMmcSdDs) || (BusTiming == SdMmcSdHs)) {
|
||||
DriverStrength.Sd = SdDriverStrengthIgnore;
|
||||
return DriverStrength;
|
||||
}
|
||||
|
||||
PreferredDriverStrength = Private->Slot[SlotIndex].OperatingParameters.DriverStrength;
|
||||
DriverStrength.Sd = SdDriverStrengthTypeB;
|
||||
DriverStrength.Sd = SdDriverStrengthTypeB;
|
||||
|
||||
if (PreferredDriverStrength.Sd != EDKII_SD_MMC_DRIVER_STRENGTH_IGNORE &&
|
||||
(CardSupportedDriverStrengths & (BIT0 << PreferredDriverStrength.Sd))) {
|
||||
|
||||
if ((PreferredDriverStrength.Sd == SdDriverStrengthTypeA &&
|
||||
(Private->Capability[SlotIndex].DriverTypeA != 0)) ||
|
||||
(PreferredDriverStrength.Sd == SdDriverStrengthTypeC &&
|
||||
(Private->Capability[SlotIndex].DriverTypeC != 0)) ||
|
||||
(PreferredDriverStrength.Sd == SdDriverStrengthTypeD &&
|
||||
(Private->Capability[SlotIndex].DriverTypeD != 0))) {
|
||||
if ((PreferredDriverStrength.Sd != EDKII_SD_MMC_DRIVER_STRENGTH_IGNORE) &&
|
||||
(CardSupportedDriverStrengths & (BIT0 << PreferredDriverStrength.Sd)))
|
||||
{
|
||||
if (((PreferredDriverStrength.Sd == SdDriverStrengthTypeA) &&
|
||||
(Private->Capability[SlotIndex].DriverTypeA != 0)) ||
|
||||
((PreferredDriverStrength.Sd == SdDriverStrengthTypeC) &&
|
||||
(Private->Capability[SlotIndex].DriverTypeC != 0)) ||
|
||||
((PreferredDriverStrength.Sd == SdDriverStrengthTypeD) &&
|
||||
(Private->Capability[SlotIndex].DriverTypeD != 0)))
|
||||
{
|
||||
DriverStrength.Sd = PreferredDriverStrength.Sd;
|
||||
}
|
||||
}
|
||||
@@ -1041,9 +1057,9 @@ SdGetTargetBusMode (
|
||||
OUT SD_MMC_BUS_SETTINGS *BusMode
|
||||
)
|
||||
{
|
||||
BusMode->BusTiming = SdGetTargetBusTiming (Private, SlotIndex, SwitchQueryResp[13], IsInUhsI);
|
||||
BusMode->BusWidth = SdGetTargetBusWidth (Private, SlotIndex, BusMode->BusTiming);
|
||||
BusMode->ClockFreq = SdGetTargetBusClockFreq (Private, SlotIndex, BusMode->BusTiming);
|
||||
BusMode->BusTiming = SdGetTargetBusTiming (Private, SlotIndex, SwitchQueryResp[13], IsInUhsI);
|
||||
BusMode->BusWidth = SdGetTargetBusWidth (Private, SlotIndex, BusMode->BusTiming);
|
||||
BusMode->ClockFreq = SdGetTargetBusClockFreq (Private, SlotIndex, BusMode->BusTiming);
|
||||
BusMode->DriverStrength = SdGetTargetDriverStrength (Private, SlotIndex, SwitchQueryResp[9], BusMode->BusTiming);
|
||||
}
|
||||
|
||||
@@ -1065,19 +1081,19 @@ SdGetTargetBusMode (
|
||||
**/
|
||||
EFI_STATUS
|
||||
SdCardSetBusMode (
|
||||
IN EFI_PCI_IO_PROTOCOL *PciIo,
|
||||
IN EFI_SD_MMC_PASS_THRU_PROTOCOL *PassThru,
|
||||
IN UINT8 Slot,
|
||||
IN UINT16 Rca,
|
||||
IN BOOLEAN S18A
|
||||
IN EFI_PCI_IO_PROTOCOL *PciIo,
|
||||
IN EFI_SD_MMC_PASS_THRU_PROTOCOL *PassThru,
|
||||
IN UINT8 Slot,
|
||||
IN UINT16 Rca,
|
||||
IN BOOLEAN S18A
|
||||
)
|
||||
{
|
||||
EFI_STATUS Status;
|
||||
SD_MMC_HC_SLOT_CAP *Capability;
|
||||
UINT8 HostCtrl1;
|
||||
UINT8 SwitchResp[64];
|
||||
SD_MMC_HC_PRIVATE_DATA *Private;
|
||||
SD_MMC_BUS_SETTINGS BusMode;
|
||||
EFI_STATUS Status;
|
||||
SD_MMC_HC_SLOT_CAP *Capability;
|
||||
UINT8 HostCtrl1;
|
||||
UINT8 SwitchResp[64];
|
||||
SD_MMC_HC_PRIVATE_DATA *Private;
|
||||
SD_MMC_BUS_SETTINGS BusMode;
|
||||
|
||||
Private = SD_MMC_HC_PRIVATE_FROM_THIS (PassThru);
|
||||
|
||||
@@ -1109,8 +1125,14 @@ SdCardSetBusMode (
|
||||
|
||||
SdGetTargetBusMode (Private, Slot, SwitchResp, S18A, &BusMode);
|
||||
|
||||
DEBUG ((DEBUG_INFO, "SdCardSetBusMode: Target bus mode: bus timing = %d, bus width = %d, clock freq[MHz] = %d, driver strength = %d\n",
|
||||
BusMode.BusTiming, BusMode.BusWidth, BusMode.ClockFreq, BusMode.DriverStrength.Sd));
|
||||
DEBUG ((
|
||||
DEBUG_INFO,
|
||||
"SdCardSetBusMode: Target bus mode: bus timing = %d, bus width = %d, clock freq[MHz] = %d, driver strength = %d\n",
|
||||
BusMode.BusTiming,
|
||||
BusMode.BusWidth,
|
||||
BusMode.ClockFreq,
|
||||
BusMode.DriverStrength.Sd
|
||||
));
|
||||
|
||||
if (!S18A) {
|
||||
Status = SdCardSwitchBusWidth (PciIo, PassThru, Slot, Rca, BusMode.BusWidth);
|
||||
@@ -1134,7 +1156,7 @@ SdCardSetBusMode (
|
||||
//
|
||||
if (BusMode.BusTiming == SdMmcSdHs) {
|
||||
HostCtrl1 = BIT2;
|
||||
Status = SdMmcHcOrMmio (PciIo, Slot, SD_MMC_HC_HOST_CTRL1, sizeof (HostCtrl1), &HostCtrl1);
|
||||
Status = SdMmcHcOrMmio (PciIo, Slot, SD_MMC_HC_HOST_CTRL1, sizeof (HostCtrl1), &HostCtrl1);
|
||||
if (EFI_ERROR (Status)) {
|
||||
return Status;
|
||||
}
|
||||
@@ -1174,8 +1196,8 @@ SdCardSetBusMode (
|
||||
**/
|
||||
EFI_STATUS
|
||||
SdCardIdentification (
|
||||
IN SD_MMC_HC_PRIVATE_DATA *Private,
|
||||
IN UINT8 Slot
|
||||
IN SD_MMC_HC_PRIVATE_DATA *Private,
|
||||
IN UINT8 Slot
|
||||
)
|
||||
{
|
||||
EFI_STATUS Status;
|
||||
@@ -1202,6 +1224,7 @@ SdCardIdentification (
|
||||
DEBUG ((DEBUG_INFO, "SdCardIdentification: Executing Cmd0 fails with %r\n", Status));
|
||||
return Status;
|
||||
}
|
||||
|
||||
//
|
||||
// 2. Send Cmd8 to the device
|
||||
//
|
||||
@@ -1210,6 +1233,7 @@ SdCardIdentification (
|
||||
DEBUG ((DEBUG_INFO, "SdCardIdentification: Executing Cmd8 fails with %r\n", Status));
|
||||
return Status;
|
||||
}
|
||||
|
||||
//
|
||||
// 3. Send SDIO Cmd5 to the device to the SDIO device OCR register.
|
||||
//
|
||||
@@ -1218,6 +1242,7 @@ SdCardIdentification (
|
||||
DEBUG ((DEBUG_INFO, "SdCardIdentification: Found SDIO device, ignore it as we don't support\n"));
|
||||
return EFI_DEVICE_ERROR;
|
||||
}
|
||||
|
||||
//
|
||||
// 4. Send Acmd41 with voltage window 0 to the device
|
||||
//
|
||||
@@ -1259,7 +1284,8 @@ SdCardIdentification (
|
||||
}
|
||||
|
||||
if (((ControllerVer & 0xFF) >= SD_MMC_HC_CTRL_VER_300) &&
|
||||
((ControllerVer & 0xFF) <= SD_MMC_HC_CTRL_VER_420)) {
|
||||
((ControllerVer & 0xFF) <= SD_MMC_HC_CTRL_VER_420))
|
||||
{
|
||||
S18r = TRUE;
|
||||
} else if (((ControllerVer & 0xFF) == SD_MMC_HC_CTRL_VER_100) || ((ControllerVer & 0xFF) == SD_MMC_HC_CTRL_VER_200)) {
|
||||
S18r = FALSE;
|
||||
@@ -1267,6 +1293,7 @@ SdCardIdentification (
|
||||
ASSERT (FALSE);
|
||||
return EFI_UNSUPPORTED;
|
||||
}
|
||||
|
||||
//
|
||||
// 5. Repeatly send Acmd41 with supply voltage window to the device.
|
||||
// Note here we only support the cards complied with SD physical
|
||||
@@ -1285,7 +1312,8 @@ SdCardIdentification (
|
||||
DEBUG ((DEBUG_ERROR, "SdCardIdentification: SdCardSendOpCond fails too many times\n"));
|
||||
return EFI_DEVICE_ERROR;
|
||||
}
|
||||
gBS->Stall(10 * 1000);
|
||||
|
||||
gBS->Stall (10 * 1000);
|
||||
} while ((Ocr & BIT31) == 0);
|
||||
|
||||
//
|
||||
@@ -1293,10 +1321,11 @@ SdCardIdentification (
|
||||
// (One of support bits is set to 1: SDR50, SDR104 or DDR50 in the
|
||||
// Capabilities register), switch its voltage to 1.8V.
|
||||
//
|
||||
if ((Private->Capability[Slot].Sdr50 != 0 ||
|
||||
Private->Capability[Slot].Sdr104 != 0 ||
|
||||
Private->Capability[Slot].Ddr50 != 0) &&
|
||||
((Ocr & BIT24) != 0)) {
|
||||
if (((Private->Capability[Slot].Sdr50 != 0) ||
|
||||
(Private->Capability[Slot].Sdr104 != 0) ||
|
||||
(Private->Capability[Slot].Ddr50 != 0)) &&
|
||||
((Ocr & BIT24) != 0))
|
||||
{
|
||||
Status = SdCardVoltageSwitch (PassThru, Slot);
|
||||
if (EFI_ERROR (Status)) {
|
||||
DEBUG ((DEBUG_ERROR, "SdCardIdentification: Executing SdCardVoltageSwitch fails with %r\n", Status));
|
||||
@@ -1315,7 +1344,8 @@ SdCardIdentification (
|
||||
Status = EFI_DEVICE_ERROR;
|
||||
goto Error;
|
||||
}
|
||||
HostCtrl2 = BIT3;
|
||||
|
||||
HostCtrl2 = BIT3;
|
||||
SdMmcHcOrMmio (PciIo, Slot, SD_MMC_HC_HOST_CTRL2, sizeof (HostCtrl2), &HostCtrl2);
|
||||
|
||||
gBS->Stall (5000);
|
||||
@@ -1341,6 +1371,7 @@ SdCardIdentification (
|
||||
goto Error;
|
||||
}
|
||||
}
|
||||
|
||||
DEBUG ((DEBUG_INFO, "SdCardIdentification: Switch to 1.8v signal voltage success\n"));
|
||||
}
|
||||
|
||||
@@ -1355,6 +1386,7 @@ SdCardIdentification (
|
||||
DEBUG ((DEBUG_ERROR, "SdCardIdentification: Executing SdCardSetRca fails with %r\n", Status));
|
||||
return Status;
|
||||
}
|
||||
|
||||
//
|
||||
// Enter Data Tranfer Mode.
|
||||
//
|
||||
@@ -1369,8 +1401,7 @@ Error:
|
||||
//
|
||||
// Set SD Bus Power = 0
|
||||
//
|
||||
PowerCtrl = (UINT8)~BIT0;
|
||||
Status = SdMmcHcAndMmio (PciIo, Slot, SD_MMC_HC_POWER_CTRL, sizeof (PowerCtrl), &PowerCtrl);
|
||||
PowerCtrl = (UINT8) ~BIT0;
|
||||
Status = SdMmcHcAndMmio (PciIo, Slot, SD_MMC_HC_POWER_CTRL, sizeof (PowerCtrl), &PowerCtrl);
|
||||
return EFI_DEVICE_ERROR;
|
||||
}
|
||||
|
||||
|
@@ -14,12 +14,12 @@
|
||||
|
||||
#include "SdMmcPciHcDxe.h"
|
||||
|
||||
EDKII_SD_MMC_OVERRIDE *mOverride;
|
||||
EDKII_SD_MMC_OVERRIDE *mOverride;
|
||||
|
||||
//
|
||||
// Driver Global Variables
|
||||
//
|
||||
EFI_DRIVER_BINDING_PROTOCOL gSdMmcPciHcDriverBinding = {
|
||||
EFI_DRIVER_BINDING_PROTOCOL gSdMmcPciHcDriverBinding = {
|
||||
SdMmcPciHcDriverBindingSupported,
|
||||
SdMmcPciHcDriverBindingStart,
|
||||
SdMmcPciHcDriverBindingStop,
|
||||
@@ -28,7 +28,7 @@ EFI_DRIVER_BINDING_PROTOCOL gSdMmcPciHcDriverBinding = {
|
||||
NULL
|
||||
};
|
||||
|
||||
#define SLOT_INIT_TEMPLATE {0, UnknownSlot, 0, 0, 0, 0, \
|
||||
#define SLOT_INIT_TEMPLATE {0, UnknownSlot, 0, 0, 0, 0,\
|
||||
{EDKII_SD_MMC_BUS_WIDTH_IGNORE,\
|
||||
EDKII_SD_MMC_CLOCK_FREQ_IGNORE,\
|
||||
{EDKII_SD_MMC_DRIVER_STRENGTH_IGNORE}}}
|
||||
@@ -36,7 +36,7 @@ EFI_DRIVER_BINDING_PROTOCOL gSdMmcPciHcDriverBinding = {
|
||||
//
|
||||
// Template for SD/MMC host controller private data.
|
||||
//
|
||||
SD_MMC_HC_PRIVATE_DATA gSdMmcPciHcTemplate = {
|
||||
SD_MMC_HC_PRIVATE_DATA gSdMmcPciHcTemplate = {
|
||||
SD_MMC_HC_PRIVATE_SIGNATURE, // Signature
|
||||
NULL, // ControllerHandle
|
||||
NULL, // PciIo
|
||||
@@ -63,7 +63,7 @@ SD_MMC_HC_PRIVATE_DATA gSdMmcPciHcTemplate = {
|
||||
SLOT_INIT_TEMPLATE
|
||||
},
|
||||
{ // Capability
|
||||
{0},
|
||||
{ 0 },
|
||||
},
|
||||
{ // MaxCurrent
|
||||
0,
|
||||
@@ -73,25 +73,25 @@ SD_MMC_HC_PRIVATE_DATA gSdMmcPciHcTemplate = {
|
||||
}
|
||||
};
|
||||
|
||||
SD_DEVICE_PATH mSdDpTemplate = {
|
||||
SD_DEVICE_PATH mSdDpTemplate = {
|
||||
{
|
||||
MESSAGING_DEVICE_PATH,
|
||||
MSG_SD_DP,
|
||||
{
|
||||
(UINT8) (sizeof (SD_DEVICE_PATH)),
|
||||
(UINT8) ((sizeof (SD_DEVICE_PATH)) >> 8)
|
||||
(UINT8)(sizeof (SD_DEVICE_PATH)),
|
||||
(UINT8)((sizeof (SD_DEVICE_PATH)) >> 8)
|
||||
}
|
||||
},
|
||||
0
|
||||
};
|
||||
|
||||
EMMC_DEVICE_PATH mEmmcDpTemplate = {
|
||||
EMMC_DEVICE_PATH mEmmcDpTemplate = {
|
||||
{
|
||||
MESSAGING_DEVICE_PATH,
|
||||
MSG_EMMC_DP,
|
||||
{
|
||||
(UINT8) (sizeof (EMMC_DEVICE_PATH)),
|
||||
(UINT8) ((sizeof (EMMC_DEVICE_PATH)) >> 8)
|
||||
(UINT8)(sizeof (EMMC_DEVICE_PATH)),
|
||||
(UINT8)((sizeof (EMMC_DEVICE_PATH)) >> 8)
|
||||
}
|
||||
},
|
||||
0
|
||||
@@ -101,7 +101,7 @@ EMMC_DEVICE_PATH mEmmcDpTemplate = {
|
||||
// Prioritized function list to detect card type.
|
||||
// User could add other card detection logic here.
|
||||
//
|
||||
CARD_TYPE_DETECT_ROUTINE mCardTypeDetectRoutineTable[] = {
|
||||
CARD_TYPE_DETECT_ROUTINE mCardTypeDetectRoutineTable[] = {
|
||||
EmmcIdentification,
|
||||
SdCardIdentification,
|
||||
NULL
|
||||
@@ -124,7 +124,7 @@ InitializeSdMmcPciHcDxe (
|
||||
IN EFI_SYSTEM_TABLE *SystemTable
|
||||
)
|
||||
{
|
||||
EFI_STATUS Status;
|
||||
EFI_STATUS Status;
|
||||
|
||||
Status = EfiLibInstallDriverBindingComponentName2 (
|
||||
ImageHandle,
|
||||
@@ -150,19 +150,19 @@ InitializeSdMmcPciHcDxe (
|
||||
VOID
|
||||
EFIAPI
|
||||
ProcessAsyncTaskList (
|
||||
IN EFI_EVENT Event,
|
||||
IN VOID* Context
|
||||
IN EFI_EVENT Event,
|
||||
IN VOID *Context
|
||||
)
|
||||
{
|
||||
SD_MMC_HC_PRIVATE_DATA *Private;
|
||||
LIST_ENTRY *Link;
|
||||
SD_MMC_HC_TRB *Trb;
|
||||
EFI_STATUS Status;
|
||||
EFI_SD_MMC_PASS_THRU_COMMAND_PACKET *Packet;
|
||||
BOOLEAN InfiniteWait;
|
||||
EFI_EVENT TrbEvent;
|
||||
SD_MMC_HC_PRIVATE_DATA *Private;
|
||||
LIST_ENTRY *Link;
|
||||
SD_MMC_HC_TRB *Trb;
|
||||
EFI_STATUS Status;
|
||||
EFI_SD_MMC_PASS_THRU_COMMAND_PACKET *Packet;
|
||||
BOOLEAN InfiniteWait;
|
||||
EFI_EVENT TrbEvent;
|
||||
|
||||
Private = (SD_MMC_HC_PRIVATE_DATA*)Context;
|
||||
Private = (SD_MMC_HC_PRIVATE_DATA *)Context;
|
||||
|
||||
//
|
||||
// Check if the first entry in the async I/O queue is done or not.
|
||||
@@ -176,6 +176,7 @@ ProcessAsyncTaskList (
|
||||
Status = EFI_NO_MEDIA;
|
||||
goto Done;
|
||||
}
|
||||
|
||||
if (!Trb->Started) {
|
||||
//
|
||||
// Check whether the cmd/data line is ready for transfer.
|
||||
@@ -183,7 +184,7 @@ ProcessAsyncTaskList (
|
||||
Status = SdMmcCheckTrbEnv (Private, Trb);
|
||||
if (!EFI_ERROR (Status)) {
|
||||
Trb->Started = TRUE;
|
||||
Status = SdMmcExecTrb (Private, Trb);
|
||||
Status = SdMmcExecTrb (Private, Trb);
|
||||
if (EFI_ERROR (Status)) {
|
||||
goto Done;
|
||||
}
|
||||
@@ -191,6 +192,7 @@ ProcessAsyncTaskList (
|
||||
goto Done;
|
||||
}
|
||||
}
|
||||
|
||||
Status = SdMmcCheckTrbResult (Private, Trb);
|
||||
}
|
||||
|
||||
@@ -202,10 +204,11 @@ Done:
|
||||
} else {
|
||||
InfiniteWait = FALSE;
|
||||
}
|
||||
|
||||
if ((!InfiniteWait) && (Trb->Timeout-- == 0)) {
|
||||
RemoveEntryList (Link);
|
||||
Trb->Packet->TransactionStatus = EFI_TIMEOUT;
|
||||
TrbEvent = Trb->Event;
|
||||
TrbEvent = Trb->Event;
|
||||
SdMmcFreeTrb (Trb);
|
||||
DEBUG ((DEBUG_VERBOSE, "ProcessAsyncTaskList(): Signal Event %p EFI_TIMEOUT\n", TrbEvent));
|
||||
gBS->SignalEvent (TrbEvent);
|
||||
@@ -217,11 +220,12 @@ Done:
|
||||
} else if ((Trb != NULL)) {
|
||||
RemoveEntryList (Link);
|
||||
Trb->Packet->TransactionStatus = Status;
|
||||
TrbEvent = Trb->Event;
|
||||
TrbEvent = Trb->Event;
|
||||
SdMmcFreeTrb (Trb);
|
||||
DEBUG ((DEBUG_VERBOSE, "ProcessAsyncTaskList(): Signal Event %p with %r\n", TrbEvent, Status));
|
||||
gBS->SignalEvent (TrbEvent);
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -236,23 +240,23 @@ Done:
|
||||
VOID
|
||||
EFIAPI
|
||||
SdMmcPciHcEnumerateDevice (
|
||||
IN EFI_EVENT Event,
|
||||
IN VOID* Context
|
||||
IN EFI_EVENT Event,
|
||||
IN VOID *Context
|
||||
)
|
||||
{
|
||||
SD_MMC_HC_PRIVATE_DATA *Private;
|
||||
EFI_STATUS Status;
|
||||
UINT8 Slot;
|
||||
BOOLEAN MediaPresent;
|
||||
UINT32 RoutineNum;
|
||||
CARD_TYPE_DETECT_ROUTINE *Routine;
|
||||
UINTN Index;
|
||||
LIST_ENTRY *Link;
|
||||
LIST_ENTRY *NextLink;
|
||||
SD_MMC_HC_TRB *Trb;
|
||||
EFI_TPL OldTpl;
|
||||
SD_MMC_HC_PRIVATE_DATA *Private;
|
||||
EFI_STATUS Status;
|
||||
UINT8 Slot;
|
||||
BOOLEAN MediaPresent;
|
||||
UINT32 RoutineNum;
|
||||
CARD_TYPE_DETECT_ROUTINE *Routine;
|
||||
UINTN Index;
|
||||
LIST_ENTRY *Link;
|
||||
LIST_ENTRY *NextLink;
|
||||
SD_MMC_HC_TRB *Trb;
|
||||
EFI_TPL OldTpl;
|
||||
|
||||
Private = (SD_MMC_HC_PRIVATE_DATA*)Context;
|
||||
Private = (SD_MMC_HC_PRIVATE_DATA *)Context;
|
||||
|
||||
for (Slot = 0; Slot < SD_MMC_HC_MAX_SLOT; Slot++) {
|
||||
if ((Private->Slot[Slot].Enable) && (Private->Slot[Slot].SlotType == RemovableSlot)) {
|
||||
@@ -267,9 +271,10 @@ SdMmcPciHcEnumerateDevice (
|
||||
OldTpl = gBS->RaiseTPL (TPL_NOTIFY);
|
||||
for (Link = GetFirstNode (&Private->Queue);
|
||||
!IsNull (&Private->Queue, Link);
|
||||
Link = NextLink) {
|
||||
Link = NextLink)
|
||||
{
|
||||
NextLink = GetNextNode (&Private->Queue, Link);
|
||||
Trb = SD_MMC_HC_TRB_FROM_THIS (Link);
|
||||
Trb = SD_MMC_HC_TRB_FROM_THIS (Link);
|
||||
if (Trb->Slot == Slot) {
|
||||
RemoveEntryList (Link);
|
||||
Trb->Packet->TransactionStatus = EFI_NO_MEDIA;
|
||||
@@ -277,17 +282,19 @@ SdMmcPciHcEnumerateDevice (
|
||||
SdMmcFreeTrb (Trb);
|
||||
}
|
||||
}
|
||||
|
||||
gBS->RestoreTPL (OldTpl);
|
||||
//
|
||||
// Notify the upper layer the connect state change through ReinstallProtocolInterface.
|
||||
//
|
||||
gBS->ReinstallProtocolInterface (
|
||||
Private->ControllerHandle,
|
||||
&gEfiSdMmcPassThruProtocolGuid,
|
||||
&Private->PassThru,
|
||||
&Private->PassThru
|
||||
);
|
||||
Private->ControllerHandle,
|
||||
&gEfiSdMmcPassThruProtocolGuid,
|
||||
&Private->PassThru,
|
||||
&Private->PassThru
|
||||
);
|
||||
}
|
||||
|
||||
if ((Status == EFI_MEDIA_CHANGED) && MediaPresent) {
|
||||
DEBUG ((DEBUG_INFO, "SdMmcPciHcEnumerateDevice: device connected at slot %d of pci %p\n", Slot, Private->PciIo));
|
||||
//
|
||||
@@ -297,6 +304,7 @@ SdMmcPciHcEnumerateDevice (
|
||||
if (EFI_ERROR (Status)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
//
|
||||
// Reinitialize slot and restart identification process for the new attached device
|
||||
//
|
||||
@@ -307,16 +315,17 @@ SdMmcPciHcEnumerateDevice (
|
||||
|
||||
Private->Slot[Slot].MediaPresent = TRUE;
|
||||
Private->Slot[Slot].Initialized = TRUE;
|
||||
RoutineNum = sizeof (mCardTypeDetectRoutineTable) / sizeof (CARD_TYPE_DETECT_ROUTINE);
|
||||
RoutineNum = sizeof (mCardTypeDetectRoutineTable) / sizeof (CARD_TYPE_DETECT_ROUTINE);
|
||||
for (Index = 0; Index < RoutineNum; Index++) {
|
||||
Routine = &mCardTypeDetectRoutineTable[Index];
|
||||
if (*Routine != NULL) {
|
||||
Status = (*Routine) (Private, Slot);
|
||||
Status = (*Routine)(Private, Slot);
|
||||
if (!EFI_ERROR (Status)) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// This card doesn't get initialized correctly.
|
||||
//
|
||||
@@ -385,9 +394,9 @@ SdMmcPciHcEnumerateDevice (
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
SdMmcPciHcDriverBindingSupported (
|
||||
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;
|
||||
@@ -405,7 +414,7 @@ SdMmcPciHcDriverBindingSupported (
|
||||
Status = gBS->OpenProtocol (
|
||||
Controller,
|
||||
&gEfiDevicePathProtocolGuid,
|
||||
(VOID *) &ParentDevicePath,
|
||||
(VOID *)&ParentDevicePath,
|
||||
This->DriverBindingHandle,
|
||||
Controller,
|
||||
EFI_OPEN_PROTOCOL_BY_DRIVER
|
||||
@@ -416,15 +425,16 @@ SdMmcPciHcDriverBindingSupported (
|
||||
//
|
||||
return Status;
|
||||
}
|
||||
|
||||
//
|
||||
// Close the protocol because we don't use it here.
|
||||
//
|
||||
gBS->CloseProtocol (
|
||||
Controller,
|
||||
&gEfiDevicePathProtocolGuid,
|
||||
This->DriverBindingHandle,
|
||||
Controller
|
||||
);
|
||||
Controller,
|
||||
&gEfiDevicePathProtocolGuid,
|
||||
This->DriverBindingHandle,
|
||||
Controller
|
||||
);
|
||||
|
||||
//
|
||||
// Now test the EfiPciIoProtocol.
|
||||
@@ -432,7 +442,7 @@ SdMmcPciHcDriverBindingSupported (
|
||||
Status = gBS->OpenProtocol (
|
||||
Controller,
|
||||
&gEfiPciIoProtocolGuid,
|
||||
(VOID **) &PciIo,
|
||||
(VOID **)&PciIo,
|
||||
This->DriverBindingHandle,
|
||||
Controller,
|
||||
EFI_OPEN_PROTOCOL_BY_DRIVER
|
||||
@@ -455,30 +465,32 @@ SdMmcPciHcDriverBindingSupported (
|
||||
);
|
||||
if (EFI_ERROR (Status)) {
|
||||
gBS->CloseProtocol (
|
||||
Controller,
|
||||
&gEfiPciIoProtocolGuid,
|
||||
This->DriverBindingHandle,
|
||||
Controller
|
||||
);
|
||||
Controller,
|
||||
&gEfiPciIoProtocolGuid,
|
||||
This->DriverBindingHandle,
|
||||
Controller
|
||||
);
|
||||
return EFI_UNSUPPORTED;
|
||||
}
|
||||
|
||||
//
|
||||
// Since we already got the PciData, we can close protocol to avoid to carry it
|
||||
// on for multiple exit points.
|
||||
//
|
||||
gBS->CloseProtocol (
|
||||
Controller,
|
||||
&gEfiPciIoProtocolGuid,
|
||||
This->DriverBindingHandle,
|
||||
Controller
|
||||
);
|
||||
Controller,
|
||||
&gEfiPciIoProtocolGuid,
|
||||
This->DriverBindingHandle,
|
||||
Controller
|
||||
);
|
||||
|
||||
//
|
||||
// Examine SD PCI Host Controller PCI Configuration table fields.
|
||||
//
|
||||
if ((PciData.Hdr.ClassCode[2] == PCI_CLASS_SYSTEM_PERIPHERAL) &&
|
||||
(PciData.Hdr.ClassCode[1] == PCI_SUBCLASS_SD_HOST_CONTROLLER) &&
|
||||
((PciData.Hdr.ClassCode[0] == 0x00) || (PciData.Hdr.ClassCode[0] == 0x01))) {
|
||||
((PciData.Hdr.ClassCode[0] == 0x00) || (PciData.Hdr.ClassCode[0] == 0x01)))
|
||||
{
|
||||
return EFI_SUCCESS;
|
||||
}
|
||||
|
||||
@@ -523,24 +535,24 @@ SdMmcPciHcDriverBindingSupported (
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
SdMmcPciHcDriverBindingStart (
|
||||
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;
|
||||
SD_MMC_HC_PRIVATE_DATA *Private;
|
||||
EFI_PCI_IO_PROTOCOL *PciIo;
|
||||
UINT64 Supports;
|
||||
UINT64 PciAttributes;
|
||||
UINT8 SlotNum;
|
||||
UINT8 FirstBar;
|
||||
UINT8 Slot;
|
||||
UINT8 Index;
|
||||
CARD_TYPE_DETECT_ROUTINE *Routine;
|
||||
UINT32 RoutineNum;
|
||||
BOOLEAN MediaPresent;
|
||||
BOOLEAN Support64BitDma;
|
||||
EFI_STATUS Status;
|
||||
SD_MMC_HC_PRIVATE_DATA *Private;
|
||||
EFI_PCI_IO_PROTOCOL *PciIo;
|
||||
UINT64 Supports;
|
||||
UINT64 PciAttributes;
|
||||
UINT8 SlotNum;
|
||||
UINT8 FirstBar;
|
||||
UINT8 Slot;
|
||||
UINT8 Index;
|
||||
CARD_TYPE_DETECT_ROUTINE *Routine;
|
||||
UINT32 RoutineNum;
|
||||
BOOLEAN MediaPresent;
|
||||
BOOLEAN Support64BitDma;
|
||||
|
||||
DEBUG ((DEBUG_INFO, "SdMmcPciHcDriverBindingStart: Start\n"));
|
||||
|
||||
@@ -552,7 +564,7 @@ SdMmcPciHcDriverBindingStart (
|
||||
Status = gBS->OpenProtocol (
|
||||
Controller,
|
||||
&gEfiPciIoProtocolGuid,
|
||||
(VOID **) &PciIo,
|
||||
(VOID **)&PciIo,
|
||||
This->DriverBindingHandle,
|
||||
Controller,
|
||||
EFI_OPEN_PROTOCOL_BY_DRIVER
|
||||
@@ -620,11 +632,17 @@ SdMmcPciHcDriverBindingStart (
|
||||
// implementations.
|
||||
//
|
||||
if (mOverride == NULL) {
|
||||
Status = gBS->LocateProtocol (&gEdkiiSdMmcOverrideProtocolGuid, NULL,
|
||||
(VOID **)&mOverride);
|
||||
Status = gBS->LocateProtocol (
|
||||
&gEdkiiSdMmcOverrideProtocolGuid,
|
||||
NULL,
|
||||
(VOID **)&mOverride
|
||||
);
|
||||
if (!EFI_ERROR (Status)) {
|
||||
DEBUG ((DEBUG_INFO, "%a: found SD/MMC override protocol\n",
|
||||
__FUNCTION__));
|
||||
DEBUG ((
|
||||
DEBUG_INFO,
|
||||
"%a: found SD/MMC override protocol\n",
|
||||
__FUNCTION__
|
||||
));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -655,8 +673,12 @@ SdMmcPciHcDriverBindingStart (
|
||||
&Private->BaseClkFreq[Slot]
|
||||
);
|
||||
if (EFI_ERROR (Status)) {
|
||||
DEBUG ((DEBUG_WARN, "%a: Failed to override capability - %r\n",
|
||||
__FUNCTION__, Status));
|
||||
DEBUG ((
|
||||
DEBUG_WARN,
|
||||
"%a: Failed to override capability - %r\n",
|
||||
__FUNCTION__,
|
||||
Status
|
||||
));
|
||||
continue;
|
||||
}
|
||||
}
|
||||
@@ -666,7 +688,7 @@ SdMmcPciHcDriverBindingStart (
|
||||
Controller,
|
||||
Slot,
|
||||
EdkiiSdMmcGetOperatingParam,
|
||||
(VOID*)&Private->Slot[Slot].OperatingParameters
|
||||
(VOID *)&Private->Slot[Slot].OperatingParameters
|
||||
);
|
||||
if (EFI_ERROR (Status)) {
|
||||
DEBUG ((DEBUG_WARN, "%a: Failed to get operating parameters, using defaults\n", __FUNCTION__));
|
||||
@@ -686,12 +708,13 @@ SdMmcPciHcDriverBindingStart (
|
||||
// If any of the slots does not support 64b system bus
|
||||
// do not enable 64b DMA in the PCI layer.
|
||||
//
|
||||
if ((Private->ControllerVersion[Slot] == SD_MMC_HC_CTRL_VER_300 &&
|
||||
Private->Capability[Slot].SysBus64V3 == 0) ||
|
||||
(Private->ControllerVersion[Slot] == SD_MMC_HC_CTRL_VER_400 &&
|
||||
Private->Capability[Slot].SysBus64V3 == 0) ||
|
||||
(Private->ControllerVersion[Slot] >= SD_MMC_HC_CTRL_VER_410 &&
|
||||
Private->Capability[Slot].SysBus64V4 == 0)) {
|
||||
if (((Private->ControllerVersion[Slot] == SD_MMC_HC_CTRL_VER_300) &&
|
||||
(Private->Capability[Slot].SysBus64V3 == 0)) ||
|
||||
((Private->ControllerVersion[Slot] == SD_MMC_HC_CTRL_VER_400) &&
|
||||
(Private->Capability[Slot].SysBus64V3 == 0)) ||
|
||||
((Private->ControllerVersion[Slot] >= SD_MMC_HC_CTRL_VER_410) &&
|
||||
(Private->Capability[Slot].SysBus64V4 == 0)))
|
||||
{
|
||||
Support64BitDma = FALSE;
|
||||
}
|
||||
|
||||
@@ -713,6 +736,7 @@ SdMmcPciHcDriverBindingStart (
|
||||
if (EFI_ERROR (Status)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
//
|
||||
// Check whether there is a SD/MMC card attached
|
||||
//
|
||||
@@ -737,16 +761,17 @@ SdMmcPciHcDriverBindingStart (
|
||||
|
||||
Private->Slot[Slot].MediaPresent = TRUE;
|
||||
Private->Slot[Slot].Initialized = TRUE;
|
||||
RoutineNum = sizeof (mCardTypeDetectRoutineTable) / sizeof (CARD_TYPE_DETECT_ROUTINE);
|
||||
RoutineNum = sizeof (mCardTypeDetectRoutineTable) / sizeof (CARD_TYPE_DETECT_ROUTINE);
|
||||
for (Index = 0; Index < RoutineNum; Index++) {
|
||||
Routine = &mCardTypeDetectRoutineTable[Index];
|
||||
if (*Routine != NULL) {
|
||||
Status = (*Routine) (Private, Slot);
|
||||
Status = (*Routine)(Private, Slot);
|
||||
if (!EFI_ERROR (Status)) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// This card doesn't get initialized correctly.
|
||||
//
|
||||
@@ -831,12 +856,13 @@ Done:
|
||||
NULL
|
||||
);
|
||||
}
|
||||
|
||||
gBS->CloseProtocol (
|
||||
Controller,
|
||||
&gEfiPciIoProtocolGuid,
|
||||
This->DriverBindingHandle,
|
||||
Controller
|
||||
);
|
||||
Controller,
|
||||
&gEfiPciIoProtocolGuid,
|
||||
This->DriverBindingHandle,
|
||||
Controller
|
||||
);
|
||||
|
||||
if ((Private != NULL) && (Private->TimerEvent != NULL)) {
|
||||
gBS->CloseEvent (Private->TimerEvent);
|
||||
@@ -883,26 +909,26 @@ Done:
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
SdMmcPciHcDriverBindingStop (
|
||||
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;
|
||||
EFI_SD_MMC_PASS_THRU_PROTOCOL *PassThru;
|
||||
SD_MMC_HC_PRIVATE_DATA *Private;
|
||||
EFI_PCI_IO_PROTOCOL *PciIo;
|
||||
LIST_ENTRY *Link;
|
||||
LIST_ENTRY *NextLink;
|
||||
SD_MMC_HC_TRB *Trb;
|
||||
EFI_STATUS Status;
|
||||
EFI_SD_MMC_PASS_THRU_PROTOCOL *PassThru;
|
||||
SD_MMC_HC_PRIVATE_DATA *Private;
|
||||
EFI_PCI_IO_PROTOCOL *PciIo;
|
||||
LIST_ENTRY *Link;
|
||||
LIST_ENTRY *NextLink;
|
||||
SD_MMC_HC_TRB *Trb;
|
||||
|
||||
DEBUG ((DEBUG_INFO, "SdMmcPciHcDriverBindingStop: Start\n"));
|
||||
|
||||
Status = gBS->OpenProtocol (
|
||||
Controller,
|
||||
&gEfiSdMmcPassThruProtocolGuid,
|
||||
(VOID**) &PassThru,
|
||||
(VOID **)&PassThru,
|
||||
This->DriverBindingHandle,
|
||||
Controller,
|
||||
EFI_OPEN_PROTOCOL_GET_PROTOCOL
|
||||
@@ -919,20 +945,23 @@ SdMmcPciHcDriverBindingStop (
|
||||
gBS->CloseEvent (Private->TimerEvent);
|
||||
Private->TimerEvent = NULL;
|
||||
}
|
||||
|
||||
if (Private->ConnectEvent != NULL) {
|
||||
gBS->CloseEvent (Private->ConnectEvent);
|
||||
Private->ConnectEvent = NULL;
|
||||
}
|
||||
|
||||
//
|
||||
// As the timer is closed, there is no needs to use TPL lock to
|
||||
// protect the critical region "queue".
|
||||
//
|
||||
for (Link = GetFirstNode (&Private->Queue);
|
||||
!IsNull (&Private->Queue, Link);
|
||||
Link = NextLink) {
|
||||
Link = NextLink)
|
||||
{
|
||||
NextLink = GetNextNode (&Private->Queue, Link);
|
||||
RemoveEntryList (Link);
|
||||
Trb = SD_MMC_HC_TRB_FROM_THIS (Link);
|
||||
Trb = SD_MMC_HC_TRB_FROM_THIS (Link);
|
||||
Trb->Packet->TransactionStatus = EFI_ABORTED;
|
||||
gBS->SignalEvent (Trb->Event);
|
||||
SdMmcFreeTrb (Trb);
|
||||
@@ -1003,6 +1032,7 @@ SdMmcPassThruExecSyncTrb (
|
||||
gBS->RestoreTPL (OldTpl);
|
||||
break;
|
||||
}
|
||||
|
||||
gBS->RestoreTPL (OldTpl);
|
||||
}
|
||||
|
||||
@@ -1068,15 +1098,15 @@ SdMmcPassThruExecSyncTrb (
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
SdMmcPassThruPassThru (
|
||||
IN EFI_SD_MMC_PASS_THRU_PROTOCOL *This,
|
||||
IN UINT8 Slot,
|
||||
IN OUT EFI_SD_MMC_PASS_THRU_COMMAND_PACKET *Packet,
|
||||
IN EFI_EVENT Event OPTIONAL
|
||||
IN EFI_SD_MMC_PASS_THRU_PROTOCOL *This,
|
||||
IN UINT8 Slot,
|
||||
IN OUT EFI_SD_MMC_PASS_THRU_COMMAND_PACKET *Packet,
|
||||
IN EFI_EVENT Event OPTIONAL
|
||||
)
|
||||
{
|
||||
EFI_STATUS Status;
|
||||
SD_MMC_HC_PRIVATE_DATA *Private;
|
||||
SD_MMC_HC_TRB *Trb;
|
||||
EFI_STATUS Status;
|
||||
SD_MMC_HC_PRIVATE_DATA *Private;
|
||||
SD_MMC_HC_TRB *Trb;
|
||||
|
||||
if ((This == NULL) || (Packet == NULL)) {
|
||||
return EFI_INVALID_PARAMETER;
|
||||
@@ -1112,6 +1142,7 @@ SdMmcPassThruPassThru (
|
||||
if (Trb == NULL) {
|
||||
return EFI_OUT_OF_RESOURCES;
|
||||
}
|
||||
|
||||
//
|
||||
// Immediately return for async I/O.
|
||||
//
|
||||
@@ -1158,12 +1189,12 @@ SdMmcPassThruPassThru (
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
SdMmcPassThruGetNextSlot (
|
||||
IN EFI_SD_MMC_PASS_THRU_PROTOCOL *This,
|
||||
IN OUT UINT8 *Slot
|
||||
IN EFI_SD_MMC_PASS_THRU_PROTOCOL *This,
|
||||
IN OUT UINT8 *Slot
|
||||
)
|
||||
{
|
||||
SD_MMC_HC_PRIVATE_DATA *Private;
|
||||
UINT8 Index;
|
||||
SD_MMC_HC_PRIVATE_DATA *Private;
|
||||
UINT8 Index;
|
||||
|
||||
if ((This == NULL) || (Slot == NULL)) {
|
||||
return EFI_INVALID_PARAMETER;
|
||||
@@ -1174,20 +1205,22 @@ SdMmcPassThruGetNextSlot (
|
||||
if (*Slot == 0xFF) {
|
||||
for (Index = 0; Index < SD_MMC_HC_MAX_SLOT; Index++) {
|
||||
if (Private->Slot[Index].Enable) {
|
||||
*Slot = Index;
|
||||
*Slot = Index;
|
||||
Private->PreviousSlot = Index;
|
||||
return EFI_SUCCESS;
|
||||
}
|
||||
}
|
||||
|
||||
return EFI_NOT_FOUND;
|
||||
} else if (*Slot == Private->PreviousSlot) {
|
||||
for (Index = *Slot + 1; Index < SD_MMC_HC_MAX_SLOT; Index++) {
|
||||
if (Private->Slot[Index].Enable) {
|
||||
*Slot = Index;
|
||||
*Slot = Index;
|
||||
Private->PreviousSlot = Index;
|
||||
return EFI_SUCCESS;
|
||||
}
|
||||
}
|
||||
|
||||
return EFI_NOT_FOUND;
|
||||
} else {
|
||||
return EFI_INVALID_PARAMETER;
|
||||
@@ -1231,14 +1264,14 @@ SdMmcPassThruGetNextSlot (
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
SdMmcPassThruBuildDevicePath (
|
||||
IN EFI_SD_MMC_PASS_THRU_PROTOCOL *This,
|
||||
IN UINT8 Slot,
|
||||
IN OUT EFI_DEVICE_PATH_PROTOCOL **DevicePath
|
||||
IN EFI_SD_MMC_PASS_THRU_PROTOCOL *This,
|
||||
IN UINT8 Slot,
|
||||
IN OUT EFI_DEVICE_PATH_PROTOCOL **DevicePath
|
||||
)
|
||||
{
|
||||
SD_MMC_HC_PRIVATE_DATA *Private;
|
||||
SD_DEVICE_PATH *SdNode;
|
||||
EMMC_DEVICE_PATH *EmmcNode;
|
||||
SD_MMC_HC_PRIVATE_DATA *Private;
|
||||
SD_DEVICE_PATH *SdNode;
|
||||
EMMC_DEVICE_PATH *EmmcNode;
|
||||
|
||||
if ((This == NULL) || (DevicePath == NULL) || (Slot >= SD_MMC_HC_MAX_SLOT)) {
|
||||
return EFI_INVALID_PARAMETER;
|
||||
@@ -1255,17 +1288,19 @@ SdMmcPassThruBuildDevicePath (
|
||||
if (SdNode == NULL) {
|
||||
return EFI_OUT_OF_RESOURCES;
|
||||
}
|
||||
|
||||
SdNode->SlotNumber = Slot;
|
||||
|
||||
*DevicePath = (EFI_DEVICE_PATH_PROTOCOL *) SdNode;
|
||||
*DevicePath = (EFI_DEVICE_PATH_PROTOCOL *)SdNode;
|
||||
} else if (Private->Slot[Slot].CardType == EmmcCardType) {
|
||||
EmmcNode = AllocateCopyPool (sizeof (EMMC_DEVICE_PATH), &mEmmcDpTemplate);
|
||||
if (EmmcNode == NULL) {
|
||||
return EFI_OUT_OF_RESOURCES;
|
||||
}
|
||||
|
||||
EmmcNode->SlotNumber = Slot;
|
||||
|
||||
*DevicePath = (EFI_DEVICE_PATH_PROTOCOL *) EmmcNode;
|
||||
*DevicePath = (EFI_DEVICE_PATH_PROTOCOL *)EmmcNode;
|
||||
} else {
|
||||
//
|
||||
// Currently we only support SD and EMMC two device nodes.
|
||||
@@ -1300,15 +1335,15 @@ SdMmcPassThruBuildDevicePath (
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
SdMmcPassThruGetSlotNumber (
|
||||
IN EFI_SD_MMC_PASS_THRU_PROTOCOL *This,
|
||||
IN EFI_DEVICE_PATH_PROTOCOL *DevicePath,
|
||||
OUT UINT8 *Slot
|
||||
IN EFI_SD_MMC_PASS_THRU_PROTOCOL *This,
|
||||
IN EFI_DEVICE_PATH_PROTOCOL *DevicePath,
|
||||
OUT UINT8 *Slot
|
||||
)
|
||||
{
|
||||
SD_MMC_HC_PRIVATE_DATA *Private;
|
||||
SD_DEVICE_PATH *SdNode;
|
||||
EMMC_DEVICE_PATH *EmmcNode;
|
||||
UINT8 SlotNumber;
|
||||
SD_MMC_HC_PRIVATE_DATA *Private;
|
||||
SD_DEVICE_PATH *SdNode;
|
||||
EMMC_DEVICE_PATH *EmmcNode;
|
||||
UINT8 SlotNumber;
|
||||
|
||||
if ((This == NULL) || (DevicePath == NULL) || (Slot == NULL)) {
|
||||
return EFI_INVALID_PARAMETER;
|
||||
@@ -1322,16 +1357,17 @@ SdMmcPassThruGetSlotNumber (
|
||||
if ((DevicePath->Type != MESSAGING_DEVICE_PATH) ||
|
||||
((DevicePath->SubType != MSG_SD_DP) &&
|
||||
(DevicePath->SubType != MSG_EMMC_DP)) ||
|
||||
(DevicePathNodeLength(DevicePath) != sizeof(SD_DEVICE_PATH)) ||
|
||||
(DevicePathNodeLength(DevicePath) != sizeof(EMMC_DEVICE_PATH))) {
|
||||
(DevicePathNodeLength (DevicePath) != sizeof (SD_DEVICE_PATH)) ||
|
||||
(DevicePathNodeLength (DevicePath) != sizeof (EMMC_DEVICE_PATH)))
|
||||
{
|
||||
return EFI_UNSUPPORTED;
|
||||
}
|
||||
|
||||
if (DevicePath->SubType == MSG_SD_DP) {
|
||||
SdNode = (SD_DEVICE_PATH *) DevicePath;
|
||||
SdNode = (SD_DEVICE_PATH *)DevicePath;
|
||||
SlotNumber = SdNode->SlotNumber;
|
||||
} else {
|
||||
EmmcNode = (EMMC_DEVICE_PATH *) DevicePath;
|
||||
EmmcNode = (EMMC_DEVICE_PATH *)DevicePath;
|
||||
SlotNumber = EmmcNode->SlotNumber;
|
||||
}
|
||||
|
||||
@@ -1373,15 +1409,15 @@ SdMmcPassThruGetSlotNumber (
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
SdMmcPassThruResetDevice (
|
||||
IN EFI_SD_MMC_PASS_THRU_PROTOCOL *This,
|
||||
IN UINT8 Slot
|
||||
IN EFI_SD_MMC_PASS_THRU_PROTOCOL *This,
|
||||
IN UINT8 Slot
|
||||
)
|
||||
{
|
||||
SD_MMC_HC_PRIVATE_DATA *Private;
|
||||
LIST_ENTRY *Link;
|
||||
LIST_ENTRY *NextLink;
|
||||
SD_MMC_HC_TRB *Trb;
|
||||
EFI_TPL OldTpl;
|
||||
SD_MMC_HC_PRIVATE_DATA *Private;
|
||||
LIST_ENTRY *Link;
|
||||
LIST_ENTRY *NextLink;
|
||||
SD_MMC_HC_TRB *Trb;
|
||||
EFI_TPL OldTpl;
|
||||
|
||||
if (This == NULL) {
|
||||
return EFI_INVALID_PARAMETER;
|
||||
@@ -1400,6 +1436,7 @@ SdMmcPassThruResetDevice (
|
||||
if (!Private->Slot[Slot].Initialized) {
|
||||
return EFI_DEVICE_ERROR;
|
||||
}
|
||||
|
||||
//
|
||||
// Free all async I/O requests in the queue
|
||||
//
|
||||
@@ -1407,10 +1444,11 @@ SdMmcPassThruResetDevice (
|
||||
|
||||
for (Link = GetFirstNode (&Private->Queue);
|
||||
!IsNull (&Private->Queue, Link);
|
||||
Link = NextLink) {
|
||||
Link = NextLink)
|
||||
{
|
||||
NextLink = GetNextNode (&Private->Queue, Link);
|
||||
RemoveEntryList (Link);
|
||||
Trb = SD_MMC_HC_TRB_FROM_THIS (Link);
|
||||
Trb = SD_MMC_HC_TRB_FROM_THIS (Link);
|
||||
Trb->Packet->TransactionStatus = EFI_ABORTED;
|
||||
gBS->SignalEvent (Trb->Event);
|
||||
SdMmcFreeTrb (Trb);
|
||||
@@ -1420,4 +1458,3 @@ SdMmcPassThruResetDevice (
|
||||
|
||||
return EFI_SUCCESS;
|
||||
}
|
||||
|
||||
|
@@ -35,11 +35,11 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
|
||||
|
||||
#include "SdMmcPciHci.h"
|
||||
|
||||
extern EFI_COMPONENT_NAME_PROTOCOL gSdMmcPciHcComponentName;
|
||||
extern EFI_COMPONENT_NAME2_PROTOCOL gSdMmcPciHcComponentName2;
|
||||
extern EFI_DRIVER_BINDING_PROTOCOL gSdMmcPciHcDriverBinding;
|
||||
extern EFI_COMPONENT_NAME_PROTOCOL gSdMmcPciHcComponentName;
|
||||
extern EFI_COMPONENT_NAME2_PROTOCOL gSdMmcPciHcComponentName2;
|
||||
extern EFI_DRIVER_BINDING_PROTOCOL gSdMmcPciHcDriverBinding;
|
||||
|
||||
extern EDKII_SD_MMC_OVERRIDE *mOverride;
|
||||
extern EDKII_SD_MMC_OVERRIDE *mOverride;
|
||||
|
||||
#define SD_MMC_HC_PRIVATE_SIGNATURE SIGNATURE_32 ('s', 'd', 't', 'f')
|
||||
|
||||
@@ -49,18 +49,18 @@ extern EDKII_SD_MMC_OVERRIDE *mOverride;
|
||||
//
|
||||
// Generic time out value, 1 microsecond as unit.
|
||||
//
|
||||
#define SD_MMC_HC_GENERIC_TIMEOUT 1 * 1000 * 1000
|
||||
#define SD_MMC_HC_GENERIC_TIMEOUT 1 * 1000 * 1000
|
||||
|
||||
//
|
||||
// SD/MMC async transfer timer interval, set by experience.
|
||||
// The unit is 100us, takes 1ms as interval.
|
||||
//
|
||||
#define SD_MMC_HC_ASYNC_TIMER EFI_TIMER_PERIOD_MILLISECONDS(1)
|
||||
#define SD_MMC_HC_ASYNC_TIMER EFI_TIMER_PERIOD_MILLISECONDS(1)
|
||||
//
|
||||
// SD/MMC removable device enumeration timer interval, set by experience.
|
||||
// The unit is 100us, takes 100ms as interval.
|
||||
//
|
||||
#define SD_MMC_HC_ENUM_TIMER EFI_TIMER_PERIOD_MILLISECONDS(100)
|
||||
#define SD_MMC_HC_ENUM_TIMER EFI_TIMER_PERIOD_MILLISECONDS(100)
|
||||
|
||||
typedef enum {
|
||||
UnknownCardType,
|
||||
@@ -78,97 +78,97 @@ typedef enum {
|
||||
} EFI_SD_MMC_SLOT_TYPE;
|
||||
|
||||
typedef struct {
|
||||
BOOLEAN Enable;
|
||||
EFI_SD_MMC_SLOT_TYPE SlotType;
|
||||
BOOLEAN MediaPresent;
|
||||
BOOLEAN Initialized;
|
||||
SD_MMC_CARD_TYPE CardType;
|
||||
UINT64 CurrentFreq;
|
||||
EDKII_SD_MMC_OPERATING_PARAMETERS OperatingParameters;
|
||||
BOOLEAN Enable;
|
||||
EFI_SD_MMC_SLOT_TYPE SlotType;
|
||||
BOOLEAN MediaPresent;
|
||||
BOOLEAN Initialized;
|
||||
SD_MMC_CARD_TYPE CardType;
|
||||
UINT64 CurrentFreq;
|
||||
EDKII_SD_MMC_OPERATING_PARAMETERS OperatingParameters;
|
||||
} SD_MMC_HC_SLOT;
|
||||
|
||||
typedef struct {
|
||||
UINTN Signature;
|
||||
UINTN Signature;
|
||||
|
||||
EFI_HANDLE ControllerHandle;
|
||||
EFI_PCI_IO_PROTOCOL *PciIo;
|
||||
EFI_HANDLE ControllerHandle;
|
||||
EFI_PCI_IO_PROTOCOL *PciIo;
|
||||
|
||||
EFI_SD_MMC_PASS_THRU_PROTOCOL PassThru;
|
||||
EFI_SD_MMC_PASS_THRU_PROTOCOL PassThru;
|
||||
|
||||
UINT64 PciAttributes;
|
||||
UINT64 PciAttributes;
|
||||
//
|
||||
// The field is used to record the previous slot in GetNextSlot().
|
||||
//
|
||||
UINT8 PreviousSlot;
|
||||
UINT8 PreviousSlot;
|
||||
//
|
||||
// For Non-blocking operation.
|
||||
//
|
||||
EFI_EVENT TimerEvent;
|
||||
EFI_EVENT TimerEvent;
|
||||
//
|
||||
// For Sd removable device enumeration.
|
||||
//
|
||||
EFI_EVENT ConnectEvent;
|
||||
LIST_ENTRY Queue;
|
||||
EFI_EVENT ConnectEvent;
|
||||
LIST_ENTRY Queue;
|
||||
|
||||
SD_MMC_HC_SLOT Slot[SD_MMC_HC_MAX_SLOT];
|
||||
SD_MMC_HC_SLOT_CAP Capability[SD_MMC_HC_MAX_SLOT];
|
||||
UINT64 MaxCurrent[SD_MMC_HC_MAX_SLOT];
|
||||
UINT16 ControllerVersion[SD_MMC_HC_MAX_SLOT];
|
||||
SD_MMC_HC_SLOT Slot[SD_MMC_HC_MAX_SLOT];
|
||||
SD_MMC_HC_SLOT_CAP Capability[SD_MMC_HC_MAX_SLOT];
|
||||
UINT64 MaxCurrent[SD_MMC_HC_MAX_SLOT];
|
||||
UINT16 ControllerVersion[SD_MMC_HC_MAX_SLOT];
|
||||
|
||||
//
|
||||
// Some controllers may require to override base clock frequency
|
||||
// value stored in Capabilities Register 1.
|
||||
//
|
||||
UINT32 BaseClkFreq[SD_MMC_HC_MAX_SLOT];
|
||||
UINT32 BaseClkFreq[SD_MMC_HC_MAX_SLOT];
|
||||
} SD_MMC_HC_PRIVATE_DATA;
|
||||
|
||||
typedef struct {
|
||||
SD_MMC_BUS_MODE BusTiming;
|
||||
UINT8 BusWidth;
|
||||
UINT32 ClockFreq;
|
||||
EDKII_SD_MMC_DRIVER_STRENGTH DriverStrength;
|
||||
SD_MMC_BUS_MODE BusTiming;
|
||||
UINT8 BusWidth;
|
||||
UINT32 ClockFreq;
|
||||
EDKII_SD_MMC_DRIVER_STRENGTH DriverStrength;
|
||||
} SD_MMC_BUS_SETTINGS;
|
||||
|
||||
#define SD_MMC_HC_TRB_SIG SIGNATURE_32 ('T', 'R', 'B', 'T')
|
||||
#define SD_MMC_HC_TRB_SIG SIGNATURE_32 ('T', 'R', 'B', 'T')
|
||||
|
||||
#define SD_MMC_TRB_RETRIES 5
|
||||
#define SD_MMC_TRB_RETRIES 5
|
||||
|
||||
//
|
||||
// TRB (Transfer Request Block) contains information for the cmd request.
|
||||
//
|
||||
typedef struct {
|
||||
UINT32 Signature;
|
||||
LIST_ENTRY TrbList;
|
||||
UINT32 Signature;
|
||||
LIST_ENTRY TrbList;
|
||||
|
||||
UINT8 Slot;
|
||||
UINT16 BlockSize;
|
||||
UINT8 Slot;
|
||||
UINT16 BlockSize;
|
||||
|
||||
EFI_SD_MMC_PASS_THRU_COMMAND_PACKET *Packet;
|
||||
VOID *Data;
|
||||
UINT32 DataLen;
|
||||
BOOLEAN Read;
|
||||
EFI_PHYSICAL_ADDRESS DataPhy;
|
||||
VOID *DataMap;
|
||||
SD_MMC_HC_TRANSFER_MODE Mode;
|
||||
SD_MMC_HC_ADMA_LENGTH_MODE AdmaLengthMode;
|
||||
EFI_SD_MMC_PASS_THRU_COMMAND_PACKET *Packet;
|
||||
VOID *Data;
|
||||
UINT32 DataLen;
|
||||
BOOLEAN Read;
|
||||
EFI_PHYSICAL_ADDRESS DataPhy;
|
||||
VOID *DataMap;
|
||||
SD_MMC_HC_TRANSFER_MODE Mode;
|
||||
SD_MMC_HC_ADMA_LENGTH_MODE AdmaLengthMode;
|
||||
|
||||
EFI_EVENT Event;
|
||||
BOOLEAN Started;
|
||||
BOOLEAN CommandComplete;
|
||||
UINT64 Timeout;
|
||||
UINT32 Retries;
|
||||
EFI_EVENT Event;
|
||||
BOOLEAN Started;
|
||||
BOOLEAN CommandComplete;
|
||||
UINT64 Timeout;
|
||||
UINT32 Retries;
|
||||
|
||||
BOOLEAN PioModeTransferCompleted;
|
||||
UINT32 PioBlockIndex;
|
||||
BOOLEAN PioModeTransferCompleted;
|
||||
UINT32 PioBlockIndex;
|
||||
|
||||
SD_MMC_HC_ADMA_32_DESC_LINE *Adma32Desc;
|
||||
SD_MMC_HC_ADMA_64_V3_DESC_LINE *Adma64V3Desc;
|
||||
SD_MMC_HC_ADMA_64_V4_DESC_LINE *Adma64V4Desc;
|
||||
EFI_PHYSICAL_ADDRESS AdmaDescPhy;
|
||||
VOID *AdmaMap;
|
||||
UINT32 AdmaPages;
|
||||
SD_MMC_HC_ADMA_32_DESC_LINE *Adma32Desc;
|
||||
SD_MMC_HC_ADMA_64_V3_DESC_LINE *Adma64V3Desc;
|
||||
SD_MMC_HC_ADMA_64_V4_DESC_LINE *Adma64V4Desc;
|
||||
EFI_PHYSICAL_ADDRESS AdmaDescPhy;
|
||||
VOID *AdmaMap;
|
||||
UINT32 AdmaPages;
|
||||
|
||||
SD_MMC_HC_PRIVATE_DATA *Private;
|
||||
SD_MMC_HC_PRIVATE_DATA *Private;
|
||||
} SD_MMC_HC_TRB;
|
||||
|
||||
#define SD_MMC_HC_TRB_FROM_THIS(a) \
|
||||
@@ -178,22 +178,23 @@ typedef struct {
|
||||
// Task for Non-blocking mode.
|
||||
//
|
||||
typedef struct {
|
||||
UINT32 Signature;
|
||||
LIST_ENTRY Link;
|
||||
UINT32 Signature;
|
||||
LIST_ENTRY Link;
|
||||
|
||||
UINT8 Slot;
|
||||
EFI_SD_MMC_PASS_THRU_COMMAND_PACKET *Packet;
|
||||
BOOLEAN IsStart;
|
||||
EFI_EVENT Event;
|
||||
UINT64 RetryTimes;
|
||||
BOOLEAN InfiniteWait;
|
||||
VOID *Map;
|
||||
VOID *MapAddress;
|
||||
UINT8 Slot;
|
||||
EFI_SD_MMC_PASS_THRU_COMMAND_PACKET *Packet;
|
||||
BOOLEAN IsStart;
|
||||
EFI_EVENT Event;
|
||||
UINT64 RetryTimes;
|
||||
BOOLEAN InfiniteWait;
|
||||
VOID *Map;
|
||||
VOID *MapAddress;
|
||||
} SD_MMC_HC_QUEUE;
|
||||
|
||||
//
|
||||
// Prototypes
|
||||
//
|
||||
|
||||
/**
|
||||
Execute card identification procedure.
|
||||
|
||||
@@ -207,8 +208,8 @@ typedef struct {
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(*CARD_TYPE_DETECT_ROUTINE) (
|
||||
IN SD_MMC_HC_PRIVATE_DATA *Private,
|
||||
IN UINT8 Slot
|
||||
IN SD_MMC_HC_PRIVATE_DATA *Private,
|
||||
IN UINT8 Slot
|
||||
);
|
||||
|
||||
/**
|
||||
@@ -251,10 +252,10 @@ EFI_STATUS
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
SdMmcPassThruPassThru (
|
||||
IN EFI_SD_MMC_PASS_THRU_PROTOCOL *This,
|
||||
IN UINT8 Slot,
|
||||
IN OUT EFI_SD_MMC_PASS_THRU_COMMAND_PACKET *Packet,
|
||||
IN EFI_EVENT Event OPTIONAL
|
||||
IN EFI_SD_MMC_PASS_THRU_PROTOCOL *This,
|
||||
IN UINT8 Slot,
|
||||
IN OUT EFI_SD_MMC_PASS_THRU_COMMAND_PACKET *Packet,
|
||||
IN EFI_EVENT Event OPTIONAL
|
||||
);
|
||||
|
||||
/**
|
||||
@@ -289,8 +290,8 @@ SdMmcPassThruPassThru (
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
SdMmcPassThruGetNextSlot (
|
||||
IN EFI_SD_MMC_PASS_THRU_PROTOCOL *This,
|
||||
IN OUT UINT8 *Slot
|
||||
IN EFI_SD_MMC_PASS_THRU_PROTOCOL *This,
|
||||
IN OUT UINT8 *Slot
|
||||
);
|
||||
|
||||
/**
|
||||
@@ -330,9 +331,9 @@ SdMmcPassThruGetNextSlot (
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
SdMmcPassThruBuildDevicePath (
|
||||
IN EFI_SD_MMC_PASS_THRU_PROTOCOL *This,
|
||||
IN UINT8 Slot,
|
||||
IN OUT EFI_DEVICE_PATH_PROTOCOL **DevicePath
|
||||
IN EFI_SD_MMC_PASS_THRU_PROTOCOL *This,
|
||||
IN UINT8 Slot,
|
||||
IN OUT EFI_DEVICE_PATH_PROTOCOL **DevicePath
|
||||
);
|
||||
|
||||
/**
|
||||
@@ -359,9 +360,9 @@ SdMmcPassThruBuildDevicePath (
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
SdMmcPassThruGetSlotNumber (
|
||||
IN EFI_SD_MMC_PASS_THRU_PROTOCOL *This,
|
||||
IN EFI_DEVICE_PATH_PROTOCOL *DevicePath,
|
||||
OUT UINT8 *Slot
|
||||
IN EFI_SD_MMC_PASS_THRU_PROTOCOL *This,
|
||||
IN EFI_DEVICE_PATH_PROTOCOL *DevicePath,
|
||||
OUT UINT8 *Slot
|
||||
);
|
||||
|
||||
/**
|
||||
@@ -390,13 +391,14 @@ SdMmcPassThruGetSlotNumber (
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
SdMmcPassThruResetDevice (
|
||||
IN EFI_SD_MMC_PASS_THRU_PROTOCOL *This,
|
||||
IN UINT8 Slot
|
||||
IN EFI_SD_MMC_PASS_THRU_PROTOCOL *This,
|
||||
IN UINT8 Slot
|
||||
);
|
||||
|
||||
//
|
||||
// Driver model protocol interfaces
|
||||
//
|
||||
|
||||
/**
|
||||
Tests to see if this driver supports a given controller. If a child device is provided,
|
||||
it further tests to see if this driver supports creating a handle for the specified child device.
|
||||
@@ -442,9 +444,9 @@ SdMmcPassThruResetDevice (
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
SdMmcPciHcDriverBindingSupported (
|
||||
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
|
||||
);
|
||||
|
||||
/**
|
||||
@@ -485,9 +487,9 @@ SdMmcPciHcDriverBindingSupported (
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
SdMmcPciHcDriverBindingStart (
|
||||
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
|
||||
);
|
||||
|
||||
/**
|
||||
@@ -519,15 +521,16 @@ SdMmcPciHcDriverBindingStart (
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
SdMmcPciHcDriverBindingStop (
|
||||
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 Component Name Functions
|
||||
//
|
||||
|
||||
/**
|
||||
Retrieves a Unicode string that is the user readable name of the driver.
|
||||
|
||||
@@ -570,9 +573,9 @@ SdMmcPciHcDriverBindingStop (
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
SdMmcPciHcComponentNameGetDriverName (
|
||||
IN EFI_COMPONENT_NAME_PROTOCOL *This,
|
||||
IN CHAR8 *Language,
|
||||
OUT CHAR16 **DriverName
|
||||
IN EFI_COMPONENT_NAME_PROTOCOL *This,
|
||||
IN CHAR8 *Language,
|
||||
OUT CHAR16 **DriverName
|
||||
);
|
||||
|
||||
/**
|
||||
@@ -646,11 +649,11 @@ SdMmcPciHcComponentNameGetDriverName (
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
SdMmcPciHcComponentNameGetControllerName (
|
||||
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
|
||||
);
|
||||
|
||||
/**
|
||||
@@ -668,10 +671,10 @@ SdMmcPciHcComponentNameGetControllerName (
|
||||
**/
|
||||
SD_MMC_HC_TRB *
|
||||
SdMmcCreateTrb (
|
||||
IN SD_MMC_HC_PRIVATE_DATA *Private,
|
||||
IN UINT8 Slot,
|
||||
IN EFI_SD_MMC_PASS_THRU_COMMAND_PACKET *Packet,
|
||||
IN EFI_EVENT Event
|
||||
IN SD_MMC_HC_PRIVATE_DATA *Private,
|
||||
IN UINT8 Slot,
|
||||
IN EFI_SD_MMC_PASS_THRU_COMMAND_PACKET *Packet,
|
||||
IN EFI_EVENT Event
|
||||
);
|
||||
|
||||
/**
|
||||
@@ -682,7 +685,7 @@ SdMmcCreateTrb (
|
||||
**/
|
||||
VOID
|
||||
SdMmcFreeTrb (
|
||||
IN SD_MMC_HC_TRB *Trb
|
||||
IN SD_MMC_HC_TRB *Trb
|
||||
);
|
||||
|
||||
/**
|
||||
@@ -698,8 +701,8 @@ SdMmcFreeTrb (
|
||||
**/
|
||||
EFI_STATUS
|
||||
SdMmcCheckTrbEnv (
|
||||
IN SD_MMC_HC_PRIVATE_DATA *Private,
|
||||
IN SD_MMC_HC_TRB *Trb
|
||||
IN SD_MMC_HC_PRIVATE_DATA *Private,
|
||||
IN SD_MMC_HC_TRB *Trb
|
||||
);
|
||||
|
||||
/**
|
||||
@@ -715,8 +718,8 @@ SdMmcCheckTrbEnv (
|
||||
**/
|
||||
EFI_STATUS
|
||||
SdMmcWaitTrbEnv (
|
||||
IN SD_MMC_HC_PRIVATE_DATA *Private,
|
||||
IN SD_MMC_HC_TRB *Trb
|
||||
IN SD_MMC_HC_PRIVATE_DATA *Private,
|
||||
IN SD_MMC_HC_TRB *Trb
|
||||
);
|
||||
|
||||
/**
|
||||
@@ -731,8 +734,8 @@ SdMmcWaitTrbEnv (
|
||||
**/
|
||||
EFI_STATUS
|
||||
SdMmcExecTrb (
|
||||
IN SD_MMC_HC_PRIVATE_DATA *Private,
|
||||
IN SD_MMC_HC_TRB *Trb
|
||||
IN SD_MMC_HC_PRIVATE_DATA *Private,
|
||||
IN SD_MMC_HC_TRB *Trb
|
||||
);
|
||||
|
||||
/**
|
||||
@@ -748,8 +751,8 @@ SdMmcExecTrb (
|
||||
**/
|
||||
EFI_STATUS
|
||||
SdMmcCheckTrbResult (
|
||||
IN SD_MMC_HC_PRIVATE_DATA *Private,
|
||||
IN SD_MMC_HC_TRB *Trb
|
||||
IN SD_MMC_HC_PRIVATE_DATA *Private,
|
||||
IN SD_MMC_HC_TRB *Trb
|
||||
);
|
||||
|
||||
/**
|
||||
@@ -764,8 +767,8 @@ SdMmcCheckTrbResult (
|
||||
**/
|
||||
EFI_STATUS
|
||||
SdMmcWaitTrbResult (
|
||||
IN SD_MMC_HC_PRIVATE_DATA *Private,
|
||||
IN SD_MMC_HC_TRB *Trb
|
||||
IN SD_MMC_HC_PRIVATE_DATA *Private,
|
||||
IN SD_MMC_HC_TRB *Trb
|
||||
);
|
||||
|
||||
/**
|
||||
@@ -782,8 +785,8 @@ SdMmcWaitTrbResult (
|
||||
**/
|
||||
EFI_STATUS
|
||||
EmmcIdentification (
|
||||
IN SD_MMC_HC_PRIVATE_DATA *Private,
|
||||
IN UINT8 Slot
|
||||
IN SD_MMC_HC_PRIVATE_DATA *Private,
|
||||
IN UINT8 Slot
|
||||
);
|
||||
|
||||
/**
|
||||
@@ -800,8 +803,8 @@ EmmcIdentification (
|
||||
**/
|
||||
EFI_STATUS
|
||||
SdCardIdentification (
|
||||
IN SD_MMC_HC_PRIVATE_DATA *Private,
|
||||
IN UINT8 Slot
|
||||
IN SD_MMC_HC_PRIVATE_DATA *Private,
|
||||
IN UINT8 Slot
|
||||
);
|
||||
|
||||
/**
|
||||
@@ -840,8 +843,8 @@ SdMmcHcClockSupply (
|
||||
**/
|
||||
EFI_STATUS
|
||||
SdMmcHcReset (
|
||||
IN SD_MMC_HC_PRIVATE_DATA *Private,
|
||||
IN UINT8 Slot
|
||||
IN SD_MMC_HC_PRIVATE_DATA *Private,
|
||||
IN UINT8 Slot
|
||||
);
|
||||
|
||||
/**
|
||||
@@ -857,8 +860,8 @@ SdMmcHcReset (
|
||||
**/
|
||||
EFI_STATUS
|
||||
SdMmcHcInitHost (
|
||||
IN SD_MMC_HC_PRIVATE_DATA *Private,
|
||||
IN UINT8 Slot
|
||||
IN SD_MMC_HC_PRIVATE_DATA *Private,
|
||||
IN UINT8 Slot
|
||||
);
|
||||
|
||||
#endif
|
||||
|
File diff suppressed because it is too large
Load Diff
@@ -14,9 +14,9 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
|
||||
//
|
||||
// SD Host Controller SlotInfo Register Offset
|
||||
//
|
||||
#define SD_MMC_HC_SLOT_OFFSET 0x40
|
||||
#define SD_MMC_HC_SLOT_OFFSET 0x40
|
||||
|
||||
#define SD_MMC_HC_MAX_SLOT 6
|
||||
#define SD_MMC_HC_MAX_SLOT 6
|
||||
|
||||
//
|
||||
// SD Host Controller MMIO Register Offset
|
||||
@@ -60,17 +60,17 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
|
||||
//
|
||||
// SD Host Controller bits to HOST_CTRL2 register
|
||||
//
|
||||
#define SD_MMC_HC_CTRL_UHS_MASK 0x0007
|
||||
#define SD_MMC_HC_CTRL_UHS_SDR12 0x0000
|
||||
#define SD_MMC_HC_CTRL_UHS_SDR25 0x0001
|
||||
#define SD_MMC_HC_CTRL_UHS_SDR50 0x0002
|
||||
#define SD_MMC_HC_CTRL_UHS_SDR104 0x0003
|
||||
#define SD_MMC_HC_CTRL_UHS_DDR50 0x0004
|
||||
#define SD_MMC_HC_CTRL_MMC_LEGACY 0x0000
|
||||
#define SD_MMC_HC_CTRL_MMC_HS_SDR 0x0001
|
||||
#define SD_MMC_HC_CTRL_MMC_HS_DDR 0x0004
|
||||
#define SD_MMC_HC_CTRL_MMC_HS200 0x0003
|
||||
#define SD_MMC_HC_CTRL_MMC_HS400 0x0005
|
||||
#define SD_MMC_HC_CTRL_UHS_MASK 0x0007
|
||||
#define SD_MMC_HC_CTRL_UHS_SDR12 0x0000
|
||||
#define SD_MMC_HC_CTRL_UHS_SDR25 0x0001
|
||||
#define SD_MMC_HC_CTRL_UHS_SDR50 0x0002
|
||||
#define SD_MMC_HC_CTRL_UHS_SDR104 0x0003
|
||||
#define SD_MMC_HC_CTRL_UHS_DDR50 0x0004
|
||||
#define SD_MMC_HC_CTRL_MMC_LEGACY 0x0000
|
||||
#define SD_MMC_HC_CTRL_MMC_HS_SDR 0x0001
|
||||
#define SD_MMC_HC_CTRL_MMC_HS_DDR 0x0004
|
||||
#define SD_MMC_HC_CTRL_MMC_HS200 0x0003
|
||||
#define SD_MMC_HC_CTRL_MMC_HS400 0x0005
|
||||
|
||||
#define SD_MMC_HC_CTRL_DRIVER_STRENGTH_MASK 0x0030
|
||||
|
||||
@@ -97,113 +97,113 @@ typedef enum {
|
||||
//
|
||||
// The maximum data length of each descriptor line
|
||||
//
|
||||
#define ADMA_MAX_DATA_PER_LINE_16B SIZE_64KB
|
||||
#define ADMA_MAX_DATA_PER_LINE_26B SIZE_64MB
|
||||
#define ADMA_MAX_DATA_PER_LINE_16B SIZE_64KB
|
||||
#define ADMA_MAX_DATA_PER_LINE_26B SIZE_64MB
|
||||
|
||||
//
|
||||
// ADMA descriptor for 32b addressing.
|
||||
//
|
||||
typedef struct {
|
||||
UINT32 Valid:1;
|
||||
UINT32 End:1;
|
||||
UINT32 Int:1;
|
||||
UINT32 Reserved:1;
|
||||
UINT32 Act:2;
|
||||
UINT32 UpperLength:10;
|
||||
UINT32 LowerLength:16;
|
||||
UINT32 Address;
|
||||
UINT32 Valid : 1;
|
||||
UINT32 End : 1;
|
||||
UINT32 Int : 1;
|
||||
UINT32 Reserved : 1;
|
||||
UINT32 Act : 2;
|
||||
UINT32 UpperLength : 10;
|
||||
UINT32 LowerLength : 16;
|
||||
UINT32 Address;
|
||||
} SD_MMC_HC_ADMA_32_DESC_LINE;
|
||||
|
||||
//
|
||||
// ADMA descriptor for 64b addressing.
|
||||
//
|
||||
typedef struct {
|
||||
UINT32 Valid:1;
|
||||
UINT32 End:1;
|
||||
UINT32 Int:1;
|
||||
UINT32 Reserved:1;
|
||||
UINT32 Act:2;
|
||||
UINT32 UpperLength:10;
|
||||
UINT32 LowerLength:16;
|
||||
UINT32 LowerAddress;
|
||||
UINT32 UpperAddress;
|
||||
UINT32 Valid : 1;
|
||||
UINT32 End : 1;
|
||||
UINT32 Int : 1;
|
||||
UINT32 Reserved : 1;
|
||||
UINT32 Act : 2;
|
||||
UINT32 UpperLength : 10;
|
||||
UINT32 LowerLength : 16;
|
||||
UINT32 LowerAddress;
|
||||
UINT32 UpperAddress;
|
||||
} SD_MMC_HC_ADMA_64_V3_DESC_LINE;
|
||||
|
||||
typedef struct {
|
||||
UINT32 Valid:1;
|
||||
UINT32 End:1;
|
||||
UINT32 Int:1;
|
||||
UINT32 Reserved:1;
|
||||
UINT32 Act:2;
|
||||
UINT32 UpperLength:10;
|
||||
UINT32 LowerLength:16;
|
||||
UINT32 LowerAddress;
|
||||
UINT32 UpperAddress;
|
||||
UINT32 Reserved1;
|
||||
UINT32 Valid : 1;
|
||||
UINT32 End : 1;
|
||||
UINT32 Int : 1;
|
||||
UINT32 Reserved : 1;
|
||||
UINT32 Act : 2;
|
||||
UINT32 UpperLength : 10;
|
||||
UINT32 LowerLength : 16;
|
||||
UINT32 LowerAddress;
|
||||
UINT32 UpperAddress;
|
||||
UINT32 Reserved1;
|
||||
} SD_MMC_HC_ADMA_64_V4_DESC_LINE;
|
||||
|
||||
#define SD_MMC_SDMA_BOUNDARY 512 * 1024
|
||||
#define SD_MMC_SDMA_ROUND_UP(x, n) (((x) + n) & ~(n - 1))
|
||||
#define SD_MMC_SDMA_BOUNDARY 512 * 1024
|
||||
#define SD_MMC_SDMA_ROUND_UP(x, n) (((x) + n) & ~(n - 1))
|
||||
|
||||
typedef struct {
|
||||
UINT8 FirstBar:3; // bit 0:2
|
||||
UINT8 Reserved:1; // bit 3
|
||||
UINT8 SlotNum:3; // bit 4:6
|
||||
UINT8 Reserved1:1; // bit 7
|
||||
UINT8 FirstBar : 3; // bit 0:2
|
||||
UINT8 Reserved : 1; // bit 3
|
||||
UINT8 SlotNum : 3; // bit 4:6
|
||||
UINT8 Reserved1 : 1; // bit 7
|
||||
} SD_MMC_HC_SLOT_INFO;
|
||||
|
||||
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 SysBus64V4:1; // bit 27
|
||||
UINT32 SysBus64V3: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 Reserved3: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 Reserved4:1; // bit 44
|
||||
UINT32 TuningSDR50:1; // bit 45
|
||||
UINT32 RetuningMod:2; // bit 46:47
|
||||
UINT32 ClkMultiplier:8; // bit 48:55
|
||||
UINT32 Reserved5: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 SysBus64V4 : 1; // bit 27
|
||||
UINT32 SysBus64V3 : 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 Reserved3 : 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 Reserved4 : 1; // bit 44
|
||||
UINT32 TuningSDR50 : 1; // bit 45
|
||||
UINT32 RetuningMod : 2; // bit 46:47
|
||||
UINT32 ClkMultiplier : 8; // bit 48:55
|
||||
UINT32 Reserved5 : 7; // bit 56:62
|
||||
UINT32 Hs400 : 1; // bit 63
|
||||
} SD_MMC_HC_SLOT_CAP;
|
||||
|
||||
//
|
||||
// SD Host controller version
|
||||
//
|
||||
#define SD_MMC_HC_CTRL_VER_100 0x00
|
||||
#define SD_MMC_HC_CTRL_VER_200 0x01
|
||||
#define SD_MMC_HC_CTRL_VER_300 0x02
|
||||
#define SD_MMC_HC_CTRL_VER_400 0x03
|
||||
#define SD_MMC_HC_CTRL_VER_410 0x04
|
||||
#define SD_MMC_HC_CTRL_VER_420 0x05
|
||||
#define SD_MMC_HC_CTRL_VER_100 0x00
|
||||
#define SD_MMC_HC_CTRL_VER_200 0x01
|
||||
#define SD_MMC_HC_CTRL_VER_300 0x02
|
||||
#define SD_MMC_HC_CTRL_VER_400 0x03
|
||||
#define SD_MMC_HC_CTRL_VER_410 0x04
|
||||
#define SD_MMC_HC_CTRL_VER_420 0x05
|
||||
|
||||
//
|
||||
// SD Host controller V4 enhancements
|
||||
//
|
||||
#define SD_MMC_HC_V4_EN BIT12
|
||||
#define SD_MMC_HC_64_ADDR_EN BIT13
|
||||
#define SD_MMC_HC_26_DATA_LEN_ADMA_EN BIT10
|
||||
#define SD_MMC_HC_V4_EN BIT12
|
||||
#define SD_MMC_HC_64_ADDR_EN BIT13
|
||||
#define SD_MMC_HC_26_DATA_LEN_ADMA_EN BIT10
|
||||
|
||||
/**
|
||||
Dump the content of SD/MMC host controller's Capability Register.
|
||||
@@ -214,8 +214,8 @@ typedef struct {
|
||||
**/
|
||||
VOID
|
||||
DumpCapabilityReg (
|
||||
IN UINT8 Slot,
|
||||
IN SD_MMC_HC_SLOT_CAP *Capability
|
||||
IN UINT8 Slot,
|
||||
IN SD_MMC_HC_SLOT_CAP *Capability
|
||||
);
|
||||
|
||||
/**
|
||||
@@ -232,9 +232,9 @@ DumpCapabilityReg (
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
SdMmcHcGetSlotInfo (
|
||||
IN EFI_PCI_IO_PROTOCOL *PciIo,
|
||||
OUT UINT8 *FirstBar,
|
||||
OUT UINT8 *SlotNum
|
||||
IN EFI_PCI_IO_PROTOCOL *PciIo,
|
||||
OUT UINT8 *FirstBar,
|
||||
OUT UINT8 *SlotNum
|
||||
);
|
||||
|
||||
/**
|
||||
@@ -263,12 +263,12 @@ SdMmcHcGetSlotInfo (
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
SdMmcHcRwMmio (
|
||||
IN EFI_PCI_IO_PROTOCOL *PciIo,
|
||||
IN UINT8 BarIndex,
|
||||
IN UINT32 Offset,
|
||||
IN BOOLEAN Read,
|
||||
IN UINT8 Count,
|
||||
IN OUT VOID *Data
|
||||
IN EFI_PCI_IO_PROTOCOL *PciIo,
|
||||
IN UINT8 BarIndex,
|
||||
IN UINT32 Offset,
|
||||
IN BOOLEAN Read,
|
||||
IN UINT8 Count,
|
||||
IN OUT VOID *Data
|
||||
);
|
||||
|
||||
/**
|
||||
@@ -295,11 +295,11 @@ SdMmcHcRwMmio (
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
SdMmcHcOrMmio (
|
||||
IN EFI_PCI_IO_PROTOCOL *PciIo,
|
||||
IN UINT8 BarIndex,
|
||||
IN UINT32 Offset,
|
||||
IN UINT8 Count,
|
||||
IN VOID *OrData
|
||||
IN EFI_PCI_IO_PROTOCOL *PciIo,
|
||||
IN UINT8 BarIndex,
|
||||
IN UINT32 Offset,
|
||||
IN UINT8 Count,
|
||||
IN VOID *OrData
|
||||
);
|
||||
|
||||
/**
|
||||
@@ -326,11 +326,11 @@ SdMmcHcOrMmio (
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
SdMmcHcAndMmio (
|
||||
IN EFI_PCI_IO_PROTOCOL *PciIo,
|
||||
IN UINT8 BarIndex,
|
||||
IN UINT32 Offset,
|
||||
IN UINT8 Count,
|
||||
IN VOID *AndData
|
||||
IN EFI_PCI_IO_PROTOCOL *PciIo,
|
||||
IN UINT8 BarIndex,
|
||||
IN UINT32 Offset,
|
||||
IN UINT8 Count,
|
||||
IN VOID *AndData
|
||||
);
|
||||
|
||||
/**
|
||||
@@ -358,13 +358,13 @@ SdMmcHcAndMmio (
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
SdMmcHcWaitMmioSet (
|
||||
IN EFI_PCI_IO_PROTOCOL *PciIo,
|
||||
IN UINT8 BarIndex,
|
||||
IN UINT32 Offset,
|
||||
IN UINT8 Count,
|
||||
IN UINT64 MaskValue,
|
||||
IN UINT64 TestValue,
|
||||
IN UINT64 Timeout
|
||||
IN EFI_PCI_IO_PROTOCOL *PciIo,
|
||||
IN UINT8 BarIndex,
|
||||
IN UINT32 Offset,
|
||||
IN UINT8 Count,
|
||||
IN UINT64 MaskValue,
|
||||
IN UINT64 TestValue,
|
||||
IN UINT64 Timeout
|
||||
);
|
||||
|
||||
/**
|
||||
@@ -398,8 +398,8 @@ SdMmcHcGetControllerVersion (
|
||||
**/
|
||||
EFI_STATUS
|
||||
SdMmcHcEnableInterrupt (
|
||||
IN EFI_PCI_IO_PROTOCOL *PciIo,
|
||||
IN UINT8 Slot
|
||||
IN EFI_PCI_IO_PROTOCOL *PciIo,
|
||||
IN UINT8 Slot
|
||||
);
|
||||
|
||||
/**
|
||||
@@ -417,7 +417,7 @@ EFI_STATUS
|
||||
SdMmcHcGetCapability (
|
||||
IN EFI_PCI_IO_PROTOCOL *PciIo,
|
||||
IN UINT8 Slot,
|
||||
OUT SD_MMC_HC_SLOT_CAP *Capability
|
||||
OUT SD_MMC_HC_SLOT_CAP *Capability
|
||||
);
|
||||
|
||||
/**
|
||||
@@ -435,7 +435,7 @@ EFI_STATUS
|
||||
SdMmcHcGetMaxCurrent (
|
||||
IN EFI_PCI_IO_PROTOCOL *PciIo,
|
||||
IN UINT8 Slot,
|
||||
OUT UINT64 *MaxCurrent
|
||||
OUT UINT64 *MaxCurrent
|
||||
);
|
||||
|
||||
/**
|
||||
@@ -455,9 +455,9 @@ SdMmcHcGetMaxCurrent (
|
||||
**/
|
||||
EFI_STATUS
|
||||
SdMmcHcCardDetect (
|
||||
IN EFI_PCI_IO_PROTOCOL *PciIo,
|
||||
IN UINT8 Slot,
|
||||
OUT BOOLEAN *MediaPresent
|
||||
IN EFI_PCI_IO_PROTOCOL *PciIo,
|
||||
IN UINT8 Slot,
|
||||
OUT BOOLEAN *MediaPresent
|
||||
);
|
||||
|
||||
/**
|
||||
@@ -474,8 +474,8 @@ SdMmcHcCardDetect (
|
||||
**/
|
||||
EFI_STATUS
|
||||
SdMmcHcStopClock (
|
||||
IN EFI_PCI_IO_PROTOCOL *PciIo,
|
||||
IN UINT8 Slot
|
||||
IN EFI_PCI_IO_PROTOCOL *PciIo,
|
||||
IN UINT8 Slot
|
||||
);
|
||||
|
||||
/**
|
||||
@@ -508,9 +508,9 @@ SdMmcHcStartSdClock (
|
||||
**/
|
||||
EFI_STATUS
|
||||
SdMmcHcPowerControl (
|
||||
IN EFI_PCI_IO_PROTOCOL *PciIo,
|
||||
IN UINT8 Slot,
|
||||
IN UINT8 PowerCtrl
|
||||
IN EFI_PCI_IO_PROTOCOL *PciIo,
|
||||
IN UINT8 Slot,
|
||||
IN UINT8 PowerCtrl
|
||||
);
|
||||
|
||||
/**
|
||||
@@ -528,9 +528,9 @@ SdMmcHcPowerControl (
|
||||
**/
|
||||
EFI_STATUS
|
||||
SdMmcHcSetBusWidth (
|
||||
IN EFI_PCI_IO_PROTOCOL *PciIo,
|
||||
IN UINT8 Slot,
|
||||
IN UINT16 BusWidth
|
||||
IN EFI_PCI_IO_PROTOCOL *PciIo,
|
||||
IN UINT8 Slot,
|
||||
IN UINT16 BusWidth
|
||||
);
|
||||
|
||||
/**
|
||||
@@ -548,9 +548,9 @@ SdMmcHcSetBusWidth (
|
||||
**/
|
||||
EFI_STATUS
|
||||
SdMmcHcInitPowerVoltage (
|
||||
IN EFI_PCI_IO_PROTOCOL *PciIo,
|
||||
IN UINT8 Slot,
|
||||
IN SD_MMC_HC_SLOT_CAP Capability
|
||||
IN EFI_PCI_IO_PROTOCOL *PciIo,
|
||||
IN UINT8 Slot,
|
||||
IN SD_MMC_HC_SLOT_CAP Capability
|
||||
);
|
||||
|
||||
/**
|
||||
@@ -567,8 +567,8 @@ SdMmcHcInitPowerVoltage (
|
||||
**/
|
||||
EFI_STATUS
|
||||
SdMmcHcInitTimeoutCtrl (
|
||||
IN EFI_PCI_IO_PROTOCOL *PciIo,
|
||||
IN UINT8 Slot
|
||||
IN EFI_PCI_IO_PROTOCOL *PciIo,
|
||||
IN UINT8 Slot
|
||||
);
|
||||
|
||||
/**
|
||||
@@ -584,10 +584,10 @@ SdMmcHcInitTimeoutCtrl (
|
||||
**/
|
||||
EFI_STATUS
|
||||
SdMmcHcUhsSignaling (
|
||||
IN EFI_HANDLE ControllerHandle,
|
||||
IN EFI_PCI_IO_PROTOCOL *PciIo,
|
||||
IN UINT8 Slot,
|
||||
IN SD_MMC_BUS_MODE Timing
|
||||
IN EFI_HANDLE ControllerHandle,
|
||||
IN EFI_PCI_IO_PROTOCOL *PciIo,
|
||||
IN UINT8 Slot,
|
||||
IN SD_MMC_BUS_MODE Timing
|
||||
);
|
||||
|
||||
/**
|
||||
|
Reference in New Issue
Block a user