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; 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, return Command.SendMmcCommand(platformID, fd, command, write, isApplication, flags, argument, blockSize, blocks,
ref buffer, out response, out duration, out sense, timeout); ref buffer, out response, out duration, out sense, timeout);
} }

View File

@@ -211,6 +211,12 @@ namespace DiscImageChef.Devices
if(len == 0) if(len == 0)
cachedScr = null; 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) if(cachedCid != null)
{ {

View File

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