/** @file\r
Diagnostics Protocol implementation for the MMC DXE driver\r
\r
- Copyright (c) 2011, ARM Limited. All rights reserved.\r
- \r
- This program and the accompanying materials \r
- are licensed and made available under the terms and conditions of the BSD License \r
- which accompanies this distribution. The full text of the license may be found at \r
- http://opensource.org/licenses/bsd-license.php \r
+ Copyright (c) 2011-2014, ARM Limited. All rights reserved.\r
\r
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, \r
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. \r
+ This program and the accompanying materials\r
+ are licensed and made available under the terms and conditions of the BSD License\r
+ which accompanies this distribution. The full text of the license may be found at\r
+ http://opensource.org/licenses/bsd-license.php\r
+\r
+ THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
\r
**/\r
\r
)\r
{\r
UINTN len = StrLen (Str);\r
- if (len <= mLogRemainChar) {\r
+ if (len < mLogRemainChar) {\r
+ StrCpyS (mLogBuffer, mLogRemainChar, Str);\r
mLogRemainChar -= len;\r
- StrCpy (mLogBuffer, Str);\r
mLogBuffer += len;\r
return len;\r
} else {\r
\r
DiagnosticLog (L"MMC Driver Diagnostics\n");\r
\r
- // For each MMC instance\r
+ // Find the MMC Host instance on which we have been asked to run diagnostics\r
+ MmcHostInstance = NULL;\r
CurrentLink = mMmcHostPool.ForwardLink;\r
while (CurrentLink != NULL && CurrentLink != &mMmcHostPool && (Status == EFI_SUCCESS)) {\r
- MmcHostInstance = MMC_HOST_INSTANCE_FROM_LINK (CurrentLink);\r
- ASSERT (MmcHostInstance != NULL);\r
+ MmcHostInstance = MMC_HOST_INSTANCE_FROM_LINK(CurrentLink);\r
+ ASSERT(MmcHostInstance != NULL);\r
+ if (MmcHostInstance->MmcHandle == ControllerHandle) {\r
+ break;\r
+ }\r
+ CurrentLink = CurrentLink->ForwardLink;\r
+ }\r
\r
- // LBA=1 Size=BlockSize\r
- DiagnosticLog (L"MMC Driver Diagnostics - Test: First Block\n");\r
- Status = MmcReadWriteDataTest (MmcHostInstance, 1, MmcHostInstance->BlockIo.Media->BlockSize);\r
+ // If we didn't find the controller, return EFI_UNSUPPORTED\r
+ if ((MmcHostInstance == NULL)\r
+ || (MmcHostInstance->MmcHandle != ControllerHandle)) {\r
+ return EFI_UNSUPPORTED;\r
+ }\r
\r
- // LBA=2 Size=BlockSize\r
- DiagnosticLog (L"MMC Driver Diagnostics - Test: Second Block\n");\r
- Status = MmcReadWriteDataTest (MmcHostInstance, 2, MmcHostInstance->BlockIo.Media->BlockSize);\r
+ // LBA=1 Size=BlockSize\r
+ DiagnosticLog (L"MMC Driver Diagnostics - Test: First Block\n");\r
+ Status = MmcReadWriteDataTest (MmcHostInstance, 1, MmcHostInstance->BlockIo.Media->BlockSize);\r
\r
- // LBA=10 Size=BlockSize\r
- DiagnosticLog (L"MMC Driver Diagnostics - Test: Any Block\n");\r
- Status = MmcReadWriteDataTest (MmcHostInstance, MmcHostInstance->BlockIo.Media->LastBlock >> 1, MmcHostInstance->BlockIo.Media->BlockSize);\r
+ // LBA=2 Size=BlockSize\r
+ DiagnosticLog (L"MMC Driver Diagnostics - Test: Second Block\n");\r
+ Status = MmcReadWriteDataTest (MmcHostInstance, 2, MmcHostInstance->BlockIo.Media->BlockSize);\r
\r
- // LBA=LastBlock Size=BlockSize\r
- DiagnosticLog (L"MMC Driver Diagnostics - Test: Last Block\n");\r
- Status = MmcReadWriteDataTest (MmcHostInstance, MmcHostInstance->BlockIo.Media->LastBlock, MmcHostInstance->BlockIo.Media->BlockSize);\r
+ // LBA=10 Size=BlockSize\r
+ DiagnosticLog (L"MMC Driver Diagnostics - Test: Any Block\n");\r
+ Status = MmcReadWriteDataTest (MmcHostInstance, MmcHostInstance->BlockIo.Media->LastBlock >> 1, MmcHostInstance->BlockIo.Media->BlockSize);\r
\r
- // LBA=1 Size=2*BlockSize\r
- DiagnosticLog (L"MMC Driver Diagnostics - Test: First Block / 2 BlockSSize\n");\r
- Status = MmcReadWriteDataTest (MmcHostInstance, 1, 2*MmcHostInstance->BlockIo.Media->BlockSize);\r
+ // LBA=LastBlock Size=BlockSize\r
+ DiagnosticLog (L"MMC Driver Diagnostics - Test: Last Block\n");\r
+ Status = MmcReadWriteDataTest (MmcHostInstance, MmcHostInstance->BlockIo.Media->LastBlock, MmcHostInstance->BlockIo.Media->BlockSize);\r
\r
- CurrentLink = CurrentLink->ForwardLink;\r
- }\r
+ // LBA=1 Size=2*BlockSize\r
+ DiagnosticLog (L"MMC Driver Diagnostics - Test: First Block / 2 BlockSSize\n");\r
+ Status = MmcReadWriteDataTest (MmcHostInstance, 1, 2 * MmcHostInstance->BlockIo.Media->BlockSize);\r
\r
return Status;\r
}\r