/** @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
#include <Library/DebugLib.h>\r
#include <Library/BaseMemoryLib.h>\r
#include <Library/MemoryAllocationLib.h>\r
+#include <Library/BaseLib.h>\r
\r
#include "Mmc.h"\r
\r
)\r
{\r
mLogRemainChar = MaxBufferChar;\r
- mLogBuffer = AllocatePool ((UINTN)MaxBufferChar * sizeof(CHAR16));\r
+ mLogBuffer = AllocatePool ((UINTN)MaxBufferChar * sizeof (CHAR16));\r
return mLogBuffer;\r
}\r
\r
\r
for (i = 0; i < (BufferSize >> 3); i++) {\r
if (*BufferA64 != *BufferB64) {\r
- DEBUG((EFI_D_ERROR, "CompareBuffer: Error at %i", i));\r
- DEBUG((EFI_D_ERROR, "(0x%lX) != (0x%lX)\n", *BufferA64, *BufferB64));\r
+ DEBUG ((EFI_D_ERROR, "CompareBuffer: Error at %i", i));\r
+ DEBUG ((EFI_D_ERROR, "(0x%lX) != (0x%lX)\n", *BufferA64, *BufferB64));\r
return FALSE;\r
}\r
BufferA64++;\r
return EFI_INVALID_PARAMETER;\r
}\r
\r
+ // Check Language is supported (i.e. is "en-*" - only English is supported)\r
+ if (AsciiStrnCmp (Language, "en", 2) != 0) {\r
+ return EFI_UNSUPPORTED;\r
+ }\r
+\r
Status = EFI_SUCCESS;\r
*ErrorType = NULL;\r
*BufferSize = DIAGNOSTIC_LOGBUFFER_MAXCHAR;\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
+ 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