Starting with Linux 4.8 the SD/MMC OCR is shown also in /sys, so cache

it if present.
This commit is contained in:
2017-09-29 13:05:50 +00:00
parent a82071a3e3
commit bc72ff1642
3 changed files with 20 additions and 0 deletions

View File

@@ -171,6 +171,19 @@ namespace DiscImageChef.Devices
return 0;
}
if((command == (MmcCommands)SecureDigitalCommands.SendOperatingCondition ||
command == MmcCommands.SendOpCond) && cachedOcr != null)
{
System.DateTime start = System.DateTime.Now;
buffer = new byte[cachedOcr.Length];
System.Array.Copy(cachedOcr, buffer, buffer.Length);
response = new uint[4];
sense = false;
System.DateTime end = System.DateTime.Now;
duration = (end - start).TotalMilliseconds;
return 0;
}
return Command.SendMmcCommand(platformID, fd, command, write, isApplication, flags, argument, blockSize, blocks,
ref buffer, out response, out duration, out sense, timeout);
}

View File

@@ -211,6 +211,12 @@ namespace DiscImageChef.Devices
if(len == 0)
cachedScr = null;
}
if(System.IO.File.Exists("/sys/block/" + devPath + "/device/ocr"))
{
int len = ConvertFromHexASCII("/sys/block/" + devPath + "/device/ocr", out cachedOcr);
if(len == 0)
cachedOcr = null;
}
if(cachedCid != null)
{

View File

@@ -67,6 +67,7 @@ namespace DiscImageChef.Devices
readonly byte[] cachedCsd;
readonly byte[] cachedCid;
readonly byte[] cachedScr;
readonly byte[] cachedOcr;
/// <summary>
/// Gets the Platform ID for this device