Command 12 - Stop transmission (ends read or write).
Normally only needed for streaming transfers or after error.
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Olivier Martin <olivier.martin@arm.com>
git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@14525
6f19259b-4bc3-4df7-8a09-
765794883524
+EFI_STATUS\r
+MmcStopTransmission (\r
+ EFI_MMC_HOST_PROTOCOL *MmcHost\r
+ )\r
+{\r
+ EFI_STATUS Status;\r
+ UINT32 Response[4];\r
+ // Command 12 - Stop transmission (ends read or write)\r
+ // Normally only needed for streaming transfers or after error.\r
+ Status = MmcHost->SendCommand (MmcHost, MMC_CMD12, 0);\r
+ if (!EFI_ERROR (Status)) {\r
+ MmcHost->ReceiveResponse (MmcHost, MMC_RESPONSE_TYPE_R1b, Response);\r
+ }\r
+ return Status;\r
+}\r
+\r
#define MMCI0_BLOCKLEN 512\r
#define MMCI0_TIMEOUT 10000\r
\r
#define MMCI0_BLOCKLEN 512\r
#define MMCI0_TIMEOUT 10000\r
\r
Status = MmcHost->ReadBlockData (MmcHost, Lba, This->Media->BlockSize, Buffer);\r
if (EFI_ERROR (Status)) {\r
DEBUG ((EFI_D_BLKIO, "MmcIoBlocks(): Error Read Block Data and Status = %r\n", Status));\r
Status = MmcHost->ReadBlockData (MmcHost, Lba, This->Media->BlockSize, Buffer);\r
if (EFI_ERROR (Status)) {\r
DEBUG ((EFI_D_BLKIO, "MmcIoBlocks(): Error Read Block Data and Status = %r\n", Status));\r
+ MmcStopTransmission (MmcHost);\r
return Status;\r
}\r
Status = MmcNotifyState (MmcHostInstance, MmcProgrammingState);\r
return Status;\r
}\r
Status = MmcNotifyState (MmcHostInstance, MmcProgrammingState);\r
Status = MmcHost->WriteBlockData (MmcHost, Lba, This->Media->BlockSize, Buffer);\r
if (EFI_ERROR (Status)) {\r
DEBUG ((EFI_D_BLKIO, "MmcIoBlocks(): Error Write Block Data and Status = %r\n", Status));\r
Status = MmcHost->WriteBlockData (MmcHost, Lba, This->Media->BlockSize, Buffer);\r
if (EFI_ERROR (Status)) {\r
DEBUG ((EFI_D_BLKIO, "MmcIoBlocks(): Error Write Block Data and Status = %r\n", Status));\r
+ MmcStopTransmission (MmcHost);\r
return Status;\r
}\r
}\r
\r
return Status;\r
}\r
}\r
\r
- // Command 12 - Stop transmission (ends read)\r
- Status = MmcHost->SendCommand (MmcHost, MMC_CMD12, 0);\r
- if (!EFI_ERROR (Status)) {\r
- MmcHost->ReceiveResponse (MmcHost, MMC_RESPONSE_TYPE_R1b, Response);\r
- }\r
-\r
// Command 13 - Read status and wait for programming to complete (return to tran)\r
Timeout = MMCI0_TIMEOUT;\r
CmdArg = MmcHostInstance->CardInfo.RCA << 16;\r
// Command 13 - Read status and wait for programming to complete (return to tran)\r
Timeout = MMCI0_TIMEOUT;\r
CmdArg = MmcHostInstance->CardInfo.RCA << 16;\r