mirror of
https://github.com/acidanthera/audk.git
synced 2025-07-25 22:54:51 +02:00
MmcDxe: Perform diagnostics specifically on the requested controller
In RunDiagnostics, find the controller specified by ControllerHandle and run diagnostics only on that controller, returning EFI_UNSUPPORTED if it isn't in the driver's pool of managed devices. 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@15075 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
parent
b4fdedc254
commit
5c5a34d485
@ -1,7 +1,7 @@
|
|||||||
/** @file
|
/** @file
|
||||||
Diagnostics Protocol implementation for the MMC DXE driver
|
Diagnostics Protocol implementation for the MMC DXE driver
|
||||||
|
|
||||||
Copyright (c) 2011, ARM Limited. All rights reserved.
|
Copyright (c) 2011-2014, ARM Limited. All rights reserved.
|
||||||
|
|
||||||
This program and the accompanying materials
|
This program and the accompanying materials
|
||||||
are licensed and made available under the terms and conditions of the BSD License
|
are licensed and made available under the terms and conditions of the BSD License
|
||||||
@ -205,35 +205,44 @@ MmcDriverDiagnosticsRunDiagnostics (
|
|||||||
|
|
||||||
DiagnosticLog (L"MMC Driver Diagnostics\n");
|
DiagnosticLog (L"MMC Driver Diagnostics\n");
|
||||||
|
|
||||||
// For each MMC instance
|
// Find the MMC Host instance on which we have been asked to run diagnostics
|
||||||
|
MmcHostInstance = NULL;
|
||||||
CurrentLink = mMmcHostPool.ForwardLink;
|
CurrentLink = mMmcHostPool.ForwardLink;
|
||||||
while (CurrentLink != NULL && CurrentLink != &mMmcHostPool && (Status == EFI_SUCCESS)) {
|
while (CurrentLink != NULL && CurrentLink != &mMmcHostPool && (Status == EFI_SUCCESS)) {
|
||||||
MmcHostInstance = MMC_HOST_INSTANCE_FROM_LINK (CurrentLink);
|
MmcHostInstance = MMC_HOST_INSTANCE_FROM_LINK(CurrentLink);
|
||||||
ASSERT (MmcHostInstance != NULL);
|
ASSERT(MmcHostInstance != NULL);
|
||||||
|
if (MmcHostInstance->MmcHandle == ControllerHandle) {
|
||||||
// LBA=1 Size=BlockSize
|
break;
|
||||||
DiagnosticLog (L"MMC Driver Diagnostics - Test: First Block\n");
|
}
|
||||||
Status = MmcReadWriteDataTest (MmcHostInstance, 1, MmcHostInstance->BlockIo.Media->BlockSize);
|
|
||||||
|
|
||||||
// LBA=2 Size=BlockSize
|
|
||||||
DiagnosticLog (L"MMC Driver Diagnostics - Test: Second Block\n");
|
|
||||||
Status = MmcReadWriteDataTest (MmcHostInstance, 2, MmcHostInstance->BlockIo.Media->BlockSize);
|
|
||||||
|
|
||||||
// LBA=10 Size=BlockSize
|
|
||||||
DiagnosticLog (L"MMC Driver Diagnostics - Test: Any Block\n");
|
|
||||||
Status = MmcReadWriteDataTest (MmcHostInstance, MmcHostInstance->BlockIo.Media->LastBlock >> 1, MmcHostInstance->BlockIo.Media->BlockSize);
|
|
||||||
|
|
||||||
// LBA=LastBlock Size=BlockSize
|
|
||||||
DiagnosticLog (L"MMC Driver Diagnostics - Test: Last Block\n");
|
|
||||||
Status = MmcReadWriteDataTest (MmcHostInstance, MmcHostInstance->BlockIo.Media->LastBlock, MmcHostInstance->BlockIo.Media->BlockSize);
|
|
||||||
|
|
||||||
// LBA=1 Size=2*BlockSize
|
|
||||||
DiagnosticLog (L"MMC Driver Diagnostics - Test: First Block / 2 BlockSSize\n");
|
|
||||||
Status = MmcReadWriteDataTest (MmcHostInstance, 1, 2*MmcHostInstance->BlockIo.Media->BlockSize);
|
|
||||||
|
|
||||||
CurrentLink = CurrentLink->ForwardLink;
|
CurrentLink = CurrentLink->ForwardLink;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// If we didn't find the controller, return EFI_UNSUPPORTED
|
||||||
|
if ((MmcHostInstance == NULL)
|
||||||
|
|| (MmcHostInstance->MmcHandle != ControllerHandle)) {
|
||||||
|
return EFI_UNSUPPORTED;
|
||||||
|
}
|
||||||
|
|
||||||
|
// LBA=1 Size=BlockSize
|
||||||
|
DiagnosticLog (L"MMC Driver Diagnostics - Test: First Block\n");
|
||||||
|
Status = MmcReadWriteDataTest (MmcHostInstance, 1, MmcHostInstance->BlockIo.Media->BlockSize);
|
||||||
|
|
||||||
|
// LBA=2 Size=BlockSize
|
||||||
|
DiagnosticLog (L"MMC Driver Diagnostics - Test: Second Block\n");
|
||||||
|
Status = MmcReadWriteDataTest (MmcHostInstance, 2, MmcHostInstance->BlockIo.Media->BlockSize);
|
||||||
|
|
||||||
|
// LBA=10 Size=BlockSize
|
||||||
|
DiagnosticLog (L"MMC Driver Diagnostics - Test: Any Block\n");
|
||||||
|
Status = MmcReadWriteDataTest (MmcHostInstance, MmcHostInstance->BlockIo.Media->LastBlock >> 1, MmcHostInstance->BlockIo.Media->BlockSize);
|
||||||
|
|
||||||
|
// LBA=LastBlock Size=BlockSize
|
||||||
|
DiagnosticLog (L"MMC Driver Diagnostics - Test: Last Block\n");
|
||||||
|
Status = MmcReadWriteDataTest (MmcHostInstance, MmcHostInstance->BlockIo.Media->LastBlock, MmcHostInstance->BlockIo.Media->BlockSize);
|
||||||
|
|
||||||
|
// LBA=1 Size=2*BlockSize
|
||||||
|
DiagnosticLog (L"MMC Driver Diagnostics - Test: First Block / 2 BlockSSize\n");
|
||||||
|
Status = MmcReadWriteDataTest (MmcHostInstance, 1, 2 * MmcHostInstance->BlockIo.Media->BlockSize);
|
||||||
|
|
||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user