]> git.proxmox.com Git - mirror_edk2.git/blobdiff - EmbeddedPkg/Universal/MmcDxe/Diagnostics.c
MmcDxe: Perform diagnostics specifically on the requested controller
[mirror_edk2.git] / EmbeddedPkg / Universal / MmcDxe / Diagnostics.c
index 14035afb10d32479cc4298ac92862b64d1e09b16..310b7cc820befbff0a214d5547172af4d13741ab 100644 (file)
@@ -1,7 +1,7 @@
 /** @file\r
   Diagnostics Protocol implementation for the MMC DXE driver\r
 \r
 /** @file\r
   Diagnostics Protocol implementation for the MMC DXE driver\r
 \r
-  Copyright (c) 2011, ARM Limited. All rights reserved.\r
+  Copyright (c) 2011-2014, 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
   \r
   This program and the accompanying materials                          \r
   are licensed and made available under the terms and conditions of the BSD License         \r
@@ -205,34 +205,43 @@ MmcDriverDiagnosticsRunDiagnostics (
 \r
   DiagnosticLog (L"MMC Driver Diagnostics\n");\r
 \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
   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
 \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
 \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
 \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
 \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
 \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
 \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
 \r
   return Status;\r
 }\r