# HG changeset patch # User moel.mich # Date 1265147934 0 # Node ID e6832d4b89d2feeaf9937a72a7b8758d5c3c013c # Parent ac4bfce27a02ff95a0dca441c51ee350f5a00f0a Release version 0.1.10. Changed core count for Intel Core i5/i7 CPUs. Added CpuidEx function. diff -r ac4bfce27a02 -r e6832d4b89d2 External/WinRing0.dll Binary file External/WinRing0.dll has changed diff -r ac4bfce27a02 -r e6832d4b89d2 External/WinRing0x64.dll Binary file External/WinRing0x64.dll has changed diff -r ac4bfce27a02 -r e6832d4b89d2 Hardware/CPU/AMD10CPU.cs --- a/Hardware/CPU/AMD10CPU.cs Tue Feb 02 18:35:23 2010 +0000 +++ b/Hardware/CPU/AMD10CPU.cs Tue Feb 02 21:58:54 2010 +0000 @@ -65,7 +65,9 @@ coreCount = (cpuidExtData[8, 2] & 0xFF) + 1; // AMD family 10h processors support only one temperature sensor - coreTemperature = new Sensor("Core", 0, SensorType.Temperature, this); + coreTemperature = new Sensor( + "Core" + (coreCount > 1 ? " #1 - #" + coreCount : ""), 0, + SensorType.Temperature, this); pciAddress = WinRing0.FindPciDeviceById(PCI_AMD_VENDOR_ID, PCI_AMD_10H_MISCELLANEOUS_DEVICE_ID, 0); diff -r ac4bfce27a02 -r e6832d4b89d2 Hardware/CPU/IntelCPU.cs --- a/Hardware/CPU/IntelCPU.cs Tue Feb 02 18:35:23 2010 +0000 +++ b/Hardware/CPU/IntelCPU.cs Tue Feb 02 21:58:54 2010 +0000 @@ -50,7 +50,9 @@ private Sensor[] coreTemperatures; private float tjMax = 0; + private uint logicalProcessors; private uint logicalProcessorsPerCore; + private uint coreCount; private const uint IA32_THERM_STATUS_MSR = 0x019C; private const uint IA32_TEMPERATURE_TARGET = 0x01A2; @@ -60,18 +62,23 @@ this.name = name; this.icon = Utilities.EmbeddedResources.GetImage("cpu.png"); - - uint logicalProcessors = 1; - if (cpuidData.GetLength(0) > 0x04) + + logicalProcessorsPerCore = 1; + if (cpuidData.GetLength(0) > 0x0B) { + uint eax, ebx, ecx, edx; + WinRing0.CpuidEx(0x0B, 0, out eax, out ebx, out ecx, out edx); + logicalProcessorsPerCore = ebx & 0xFF; + WinRing0.CpuidEx(0x0B, 1, out eax, out ebx, out ecx, out edx); + logicalProcessors = ebx & 0xFF; + } else if (cpuidData.GetLength(0) > 0x04) { logicalProcessors = ((cpuidData[4, 0] >> 26) & 0x3F) + 1; + logicalProcessorsPerCore = 1; + } else { + logicalProcessors = 1; + logicalProcessorsPerCore = 1; + } - logicalProcessorsPerCore = 1; - if (cpuidData.GetLength(0) > 0x0B) - logicalProcessorsPerCore = cpuidData[0x0B, 1] & 0xFF; - if (logicalProcessorsPerCore == 0) - logicalProcessorsPerCore = 1; - - uint coreCount = logicalProcessors / logicalProcessorsPerCore; + coreCount = logicalProcessors / logicalProcessorsPerCore; switch (family) { case 0x06: { @@ -147,7 +154,9 @@ r.AppendLine("Intel CPU"); r.AppendLine(); r.AppendFormat("Name: {0}{1}", name, Environment.NewLine); - r.AppendFormat("Number of cores: {0}{1}", coreTemperatures.Length, + r.AppendFormat("Number of cores: {0}{1}", coreCount, + Environment.NewLine); + r.AppendFormat("Threads per core: {0}{1}", logicalProcessorsPerCore, Environment.NewLine); r.AppendFormat("TjMax: {0}{1}", tjMax, Environment.NewLine); r.AppendLine(); diff -r ac4bfce27a02 -r e6832d4b89d2 Hardware/WinRing0.cs --- a/Hardware/WinRing0.cs Tue Feb 02 18:35:23 2010 +0000 +++ b/Hardware/WinRing0.cs Tue Feb 02 21:58:54 2010 +0000 @@ -79,8 +79,10 @@ public delegate uint GetDllStatusDelegate(); public delegate bool IsCpuidDelegate(); - public delegate bool CpuidDelegate(uint index, out uint eax, out uint ebx, - out uint ecx, out uint edx); + public delegate bool CpuidDelegate(uint index, + out uint eax, out uint ebx, out uint ecx, out uint edx); + public delegate bool CpuidExDelegate(uint index, uint ecxValue, + out uint eax, out uint ebx, out uint ecx, out uint edx); public delegate bool RdmsrPxDelegate(uint index, ref uint eax, ref uint edx, UIntPtr processAffinityMask); public delegate byte ReadIoPortByteDelegate(ushort port); @@ -99,14 +101,14 @@ public static GetDllStatusDelegate GetDllStatus; public static IsCpuidDelegate IsCpuid; public static CpuidDelegate Cpuid; + public static CpuidExDelegate CpuidEx; public static RdmsrPxDelegate RdmsrPx; public static ReadIoPortByteDelegate ReadIoPortByte; public static WriteIoPortByteDelegate WriteIoPortByte; public static SetPciMaxBusIndexDelegate SetPciMaxBusIndex; public static FindPciDeviceByIdDelegate FindPciDeviceById; public static ReadPciConfigDwordExDelegate ReadPciConfigDwordEx; - public static WritePciConfigDwordExDelegate WritePciConfigDwordEx; - + public static WritePciConfigDwordExDelegate WritePciConfigDwordEx; private static void GetDelegate(string entryPoint, out T newDelegate) where T : class @@ -125,6 +127,7 @@ GetDelegate("GetDllStatus", out GetDllStatus); GetDelegate("IsCpuid", out IsCpuid); GetDelegate("Cpuid", out Cpuid); + GetDelegate("CpuidEx", out CpuidEx); GetDelegate("RdmsrPx", out RdmsrPx); GetDelegate("ReadIoPortByte", out ReadIoPortByte); GetDelegate("WriteIoPortByte", out WriteIoPortByte); diff -r ac4bfce27a02 -r e6832d4b89d2 Properties/AssemblyInfo.cs --- a/Properties/AssemblyInfo.cs Tue Feb 02 18:35:23 2010 +0000 +++ b/Properties/AssemblyInfo.cs Tue Feb 02 21:58:54 2010 +0000 @@ -69,5 +69,5 @@ // You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: // [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("0.1.9.0")] -[assembly: AssemblyFileVersion("0.1.9.0")] +[assembly: AssemblyVersion("0.1.10.0")] +[assembly: AssemblyFileVersion("0.1.10.0")]