]> git.proxmox.com Git - mirror_edk2.git/blobdiff - EmbeddedPkg/Universal/MmcDxe/Diagnostics.c
BaseTools/BinToPcd: Fix Python 2.7.x compatibility issue
[mirror_edk2.git] / EmbeddedPkg / Universal / MmcDxe / Diagnostics.c
index 14035afb10d32479cc4298ac92862b64d1e09b16..7d6a5a0dde01cf890a86773d3fbafb198f5508ff 100644 (file)
@@ -1,15 +1,15 @@
 /** @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
@@ -42,9 +42,9 @@ DiagnosticLog (
   )\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
@@ -205,34 +205,43 @@ MmcDriverDiagnosticsRunDiagnostics (
 \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