From bc72ff16420d08326f3232ef601e43d8b8a0e63a Mon Sep 17 00:00:00 2001 From: Natalia Portillo Date: Fri, 29 Sep 2017 13:05:50 +0000 Subject: [PATCH] Starting with Linux 4.8 the SD/MMC OCR is shown also in /sys, so cache it if present. --- DiscImageChef.Devices/Device/Commands.cs | 13 +++++++++++++ DiscImageChef.Devices/Device/Constructor.cs | 6 ++++++ DiscImageChef.Devices/Device/Variables.cs | 1 + 3 files changed, 20 insertions(+) diff --git a/DiscImageChef.Devices/Device/Commands.cs b/DiscImageChef.Devices/Device/Commands.cs index c0e18e40f..cb93ca962 100644 --- a/DiscImageChef.Devices/Device/Commands.cs +++ b/DiscImageChef.Devices/Device/Commands.cs @@ -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); } diff --git a/DiscImageChef.Devices/Device/Constructor.cs b/DiscImageChef.Devices/Device/Constructor.cs index dfd593c65..1f820b573 100644 --- a/DiscImageChef.Devices/Device/Constructor.cs +++ b/DiscImageChef.Devices/Device/Constructor.cs @@ -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) { diff --git a/DiscImageChef.Devices/Device/Variables.cs b/DiscImageChef.Devices/Device/Variables.cs index 97aec3590..5da1cb57b 100644 --- a/DiscImageChef.Devices/Device/Variables.cs +++ b/DiscImageChef.Devices/Device/Variables.cs @@ -67,6 +67,7 @@ namespace DiscImageChef.Devices readonly byte[] cachedCsd; readonly byte[] cachedCid; readonly byte[] cachedScr; + readonly byte[] cachedOcr; /// /// Gets the Platform ID for this device