Merge pull request #1 from Phyxion/master

Merging PRs
This commit is contained in:
LibreHardwareMonitor
2017-08-10 18:21:22 +02:00
committed by GitHub
13 changed files with 145 additions and 13 deletions
+2 -1
View File
@@ -1,4 +1,5 @@
*.user
*.suo
/Bin
/Obj
/Obj
.vs/
+17
View File
@@ -38,12 +38,16 @@ namespace OpenHardwareMonitor.Hardware.CPU {
private const ushort FAMILY_15H_MODEL_00_MISC_CONTROL_DEVICE_ID = 0x1603;
private const ushort FAMILY_15H_MODEL_10_MISC_CONTROL_DEVICE_ID = 0x1403;
private const ushort FAMILY_15H_MODEL_30_MISC_CONTROL_DEVICE_ID = 0x141D;
private const ushort FAMILY_15H_MODEL_60_MISC_CONTROL_DEVICE_ID = 0x1573;
private const ushort FAMILY_16H_MODEL_00_MISC_CONTROL_DEVICE_ID = 0x1533;
private const ushort FAMILY_16H_MODEL_30_MISC_CONTROL_DEVICE_ID = 0x1583;
private const ushort FAMILY_17H_MODEL_00_MISC_CONTROL_DEVICE_ID = 0x1577;
private const uint REPORTED_TEMPERATURE_CONTROL_REGISTER = 0xA4;
private const uint CLOCK_POWER_TIMING_CONTROL_0_REGISTER = 0xD4;
private const uint F15H_M60H_REPORTED_TEMP_CTRL_OFFSET = 0xD8200CA4;
private readonly uint miscellaneousControlAddress;
private readonly ushort miscellaneousControlDeviceId;
@@ -79,6 +83,8 @@ namespace OpenHardwareMonitor.Hardware.CPU {
FAMILY_15H_MODEL_10_MISC_CONTROL_DEVICE_ID; break;
case 0x30: miscellaneousControlDeviceId =
FAMILY_15H_MODEL_30_MISC_CONTROL_DEVICE_ID; break;
case 0x60: miscellaneousControlDeviceId =
FAMILY_15H_MODEL_60_MISC_CONTROL_DEVICE_ID; break;
default: miscellaneousControlDeviceId = 0; break;
} break;
case 0x16:
@@ -89,6 +95,8 @@ namespace OpenHardwareMonitor.Hardware.CPU {
FAMILY_16H_MODEL_30_MISC_CONTROL_DEVICE_ID; break;
default: miscellaneousControlDeviceId = 0; break;
} break;
case 0x17: miscellaneousControlDeviceId =
FAMILY_17H_MODEL_00_MISC_CONTROL_DEVICE_ID; break;
default: miscellaneousControlDeviceId = 0; break;
}
@@ -304,6 +312,15 @@ namespace OpenHardwareMonitor.Hardware.CPU {
if (temperatureStream == null) {
if (miscellaneousControlAddress != Ring0.InvalidPciAddress) {
uint value;
if (miscellaneousControlAddress == FAMILY_15H_MODEL_60_MISC_CONTROL_DEVICE_ID) {
value = F15H_M60H_REPORTED_TEMP_CTRL_OFFSET;
Ring0.WritePciConfig(Ring0.GetPciAddress(0, 0, 0), 0xB8, value);
Ring0.ReadPciConfig(Ring0.GetPciAddress(0, 0, 0), 0xBC, out value);
coreTemperature.Value = ((value >> 21) & 0x7FF) * 0.125f +
coreTemperature.Parameters[0].Value;
ActivateSensor(coreTemperature);
return;
}
if (Ring0.ReadPciConfig(miscellaneousControlAddress,
REPORTED_TEMPERATURE_CONTROL_REGISTER, out value)) {
if (family == 0x15 && (value & 0x30000) == 0x30000) {
+1
View File
@@ -102,6 +102,7 @@ namespace OpenHardwareMonitor.Hardware.CPU {
case 0x14:
case 0x15:
case 0x16:
case 0x17:
hardware.Add(new AMD10CPU(index, coreThreads, settings));
break;
default:
+11 -2
View File
@@ -28,7 +28,8 @@ namespace OpenHardwareMonitor.Hardware.CPU {
Silvermont,
Skylake,
Airmont,
KabyLake
KabyLake,
ApolloLake
}
private readonly Sensor[] coreTemperatures;
@@ -170,6 +171,7 @@ namespace OpenHardwareMonitor.Hardware.CPU {
break;
case 0x4E:
case 0x5E: // Intel Core i5, i7 6xxxx LGA1151 (14nm)
case 0x55: // Intel Core X i7, i9 7xxx LGA2066 (14nm)
microarchitecture = Microarchitecture.Skylake;
tjMax = GetTjMaxFromMSR();
break;
@@ -182,6 +184,10 @@ namespace OpenHardwareMonitor.Hardware.CPU {
microarchitecture = Microarchitecture.KabyLake;
tjMax = GetTjMaxFromMSR();
break;
case 0x5C: // Intel ApolloLake
microarchitecture = Microarchitecture.ApolloLake;
tjMax = GetTjMaxFromMSR();
break;
default:
microarchitecture = Microarchitecture.Unknown;
tjMax = Floats(100);
@@ -230,6 +236,7 @@ namespace OpenHardwareMonitor.Hardware.CPU {
case Microarchitecture.Silvermont:
case Microarchitecture.Skylake:
case Microarchitecture.Airmont:
case Microarchitecture.ApolloLake:
case Microarchitecture.KabyLake: {
uint eax, edx;
if (Ring0.Rdmsr(MSR_PLATFORM_INFO, out eax, out edx)) {
@@ -294,7 +301,8 @@ namespace OpenHardwareMonitor.Hardware.CPU {
microarchitecture == Microarchitecture.Skylake ||
microarchitecture == Microarchitecture.Silvermont ||
microarchitecture == Microarchitecture.Airmont ||
microarchitecture == Microarchitecture.KabyLake)
microarchitecture == Microarchitecture.KabyLake ||
microarchitecture == Microarchitecture.ApolloLake)
{
powerSensors = new Sensor[energyStatusMSRs.Length];
lastEnergyTime = new DateTime[energyStatusMSRs.Length];
@@ -412,6 +420,7 @@ namespace OpenHardwareMonitor.Hardware.CPU {
case Microarchitecture.Broadwell:
case Microarchitecture.Silvermont:
case Microarchitecture.Skylake:
case Microarchitecture.ApolloLake:
case Microarchitecture.KabyLake: {
uint multiplier = (eax >> 8) & 0xff;
coreClocks[i].Value = (float)(multiplier * newBusClock);
+8
View File
@@ -27,6 +27,7 @@ namespace OpenHardwareMonitor.Hardware.LPC {
IT8620E = 0x8620,
IT8628E = 0x8628,
IT8686E = 0x8686,
IT8705F = 0x8705,
IT8712F = 0x8712,
IT8716F = 0x8716,
@@ -43,6 +44,9 @@ namespace OpenHardwareMonitor.Hardware.LPC {
NCT610X = 0xC452,
NCT6779D = 0xC560,
NCT6791D = 0xC803,
NCT6793D = 0xD121,
NCT6795D = 0xD352,
NCT6796D = 0xD423,
W83627DHG = 0xA020,
W83627DHGP = 0xB070,
@@ -74,6 +78,7 @@ namespace OpenHardwareMonitor.Hardware.LPC {
case Chip.IT8620E: return "ITE IT8620E";
case Chip.IT8628E: return "ITE IT8628E";
case Chip.IT8686E: return "ITE IT8686E";
case Chip.IT8705F: return "ITE IT8705F";
case Chip.IT8712F: return "ITE IT8712F";
case Chip.IT8716F: return "ITE IT8716F";
@@ -91,6 +96,9 @@ namespace OpenHardwareMonitor.Hardware.LPC {
case Chip.NCT6776F: return "Nuvoton NCT6776F";
case Chip.NCT6779D: return "Nuvoton NCT6779D";
case Chip.NCT6791D: return "Nuvoton NCT6791D";
case Chip.NCT6793D: return "Nuvoton NCT6793D";
case Chip.NCT6795D: return "Nuvoton NCT6795D";
case Chip.NCT6796D: return "Nuvoton NCT6796D";
case Chip.W83627DHG: return "Winbond W83627DHG";
case Chip.W83627DHGP: return "Winbond W83627DHG-P";
+17 -6
View File
@@ -138,15 +138,26 @@ namespace OpenHardwareMonitor.Hardware.LPC {
if (!valid)
return;
voltages = new float?[9];
temperatures = new float?[3];
fans = new float?[chip == Chip.IT8705F ? 3 : 5];
controls = new float?[3];
// IT8686E has more sensors
if(chip == Chip.IT8686E)
{
voltages = new float?[10];
temperatures = new float?[5];
fans = new float?[5];
controls = new float?[3];
}
else
{
voltages = new float?[9];
temperatures = new float?[3];
fans = new float?[chip == Chip.IT8705F ? 3 : 5];
controls = new float?[3];
}
// IT8620E, IT8628E, IT8721F, IT8728F and IT8772E use a 12mV resultion
// IT8620E, IT8628E, IT8721F, IT8728F, IT8772E and IT8686E use a 12mV resultion
// ADC, all others 16mV
if (chip == Chip.IT8620E || chip == Chip.IT8628E || chip == Chip.IT8721F
|| chip == Chip.IT8728F || chip == Chip.IT8771E || chip == Chip.IT8772E)
|| chip == Chip.IT8728F || chip == Chip.IT8771E || chip == Chip.IT8772E || chip == Chip.IT8686E)
{
voltageGain = 0.012f;
} else {
+6
View File
@@ -73,6 +73,12 @@ namespace OpenHardwareMonitor.Hardware.LPC {
lmChips.Add(new LMChip(Chip.NCT6779D, path)); break;
case "nct6791":
lmChips.Add(new LMChip(Chip.NCT6791D, path)); break;
case "nct6793":
lmChips.Add(new LMChip(Chip.NCT6793D, path)); break;
case "nct6795":
lmChips.Add(new LMChip(Chip.NCT6795D, path)); break;
case "nct6796":
lmChips.Add(new LMChip(Chip.NCT6796D, path)); break;
case "w83627ehf":
lmChips.Add(new LMChip(Chip.W83627EHF, path)); break;
+28 -3
View File
@@ -209,6 +209,27 @@ namespace OpenHardwareMonitor.Hardware.LPC {
logicalDeviceNumber = WINBOND_NUVOTON_HARDWARE_MONITOR_LDN;
break;
} break;
case 0xD4:
switch (revision) {
case 0x23:
chip = Chip.NCT6796D;
logicalDeviceNumber = WINBOND_NUVOTON_HARDWARE_MONITOR_LDN;
break;
} break;
case 0xD1:
switch (revision) {
case 0x21:
chip = Chip.NCT6793D;
logicalDeviceNumber = WINBOND_NUVOTON_HARDWARE_MONITOR_LDN;
break;
} break;
case 0xD3:
switch (revision) {
case 0x52:
chip = Chip.NCT6795D;
logicalDeviceNumber = WINBOND_NUVOTON_HARDWARE_MONITOR_LDN;
break;
} break;
}
if (chip == Chip.Unknown) {
if (id != 0 && id != 0xff) {
@@ -225,9 +246,9 @@ namespace OpenHardwareMonitor.Hardware.LPC {
ushort verify = port.ReadWord(BASE_ADDRESS_REGISTER);
ushort vendorID = port.ReadWord(FINTEK_VENDOR_ID_REGISTER);
// disable the hardware monitor i/o space lock on NCT6791D chips
if (address == verify && chip == Chip.NCT6791D) {
// disable the hardware monitor i/o space lock on NCT679*D chips
if (address == verify && (chip == Chip.NCT6791D || chip == Chip.NCT6796D || chip == Chip.NCT6793D || chip == Chip.NCT6795D)) {
port.NuvotonDisableIOSpaceLock();
}
@@ -277,6 +298,9 @@ namespace OpenHardwareMonitor.Hardware.LPC {
case Chip.NCT6776F:
case Chip.NCT6779D:
case Chip.NCT6791D:
case Chip.NCT6796D:
case Chip.NCT6793D:
case Chip.NCT6795D:
superIOs.Add(new NCT677X(chip, revision, address, port));
break;
case Chip.F71858:
@@ -333,6 +357,7 @@ namespace OpenHardwareMonitor.Hardware.LPC {
switch (chipID) {
case 0x8620: chip = Chip.IT8620E; break;
case 0x8628: chip = Chip.IT8628E; break;
case 0x8686: chip = Chip.IT8686E; break;
case 0x8705: chip = Chip.IT8705F; break;
case 0x8712: chip = Chip.IT8712F; break;
case 0x8716: chip = Chip.IT8716F; break;
+4 -1
View File
@@ -271,7 +271,10 @@ namespace OpenHardwareMonitor.Hardware.LPC {
break;
case Chip.NCT6779D:
case Chip.NCT6795D:
case Chip.NCT6793D:
case Chip.NCT6791D:
case Chip.NCT6796D:
if (chip == Chip.NCT6779D) {
fans = new float?[5];
controls = new float?[5];
@@ -414,7 +417,7 @@ namespace OpenHardwareMonitor.Hardware.LPC {
public float?[] Controls { get { return controls; } }
private void DisableIOSpaceLock() {
if (chip != Chip.NCT6791D)
if (chip != Chip.NCT6791D && chip != Chip.NCT6796D && chip != Chip.NCT6793D && chip != Chip.NCT6795D)
return;
// the lock is disabled already if the vendor ID can be read
+5
View File
@@ -93,6 +93,7 @@ namespace OpenHardwareMonitor.Hardware.Mainboard {
case "P6X58D-E":
return Model.P6X58D_E;
case "P8P67":
case "P8P67 REV 3.1":
return Model.P8P67;
case "P8P67 EVO":
return Model.P8P67_EVO;
@@ -180,6 +181,8 @@ namespace OpenHardwareMonitor.Hardware.Mainboard {
return Model.X38_DS5;
case "X58A-UD3R":
return Model.X58A_UD3R;
case "X79-UD3":
return Model.X79_UD3;
case "Z68A-D3H-B3":
return Model.Z68A_D3H_B3;
case "Z68AP-D3":
@@ -190,6 +193,8 @@ namespace OpenHardwareMonitor.Hardware.Mainboard {
return Model.Z68X_UD7_B3;
case "FH67":
return Model.FH67;
case "AX370-Gaming K7":
return Model.AX370_K7;
case "Base Board Product Name":
case "To be filled by O.E.M.":
return Model.Unknown;
+2
View File
@@ -75,10 +75,12 @@ namespace OpenHardwareMonitor.Hardware.Mainboard {
P8Z68_V_PRO,
X38_DS5,
X58A_UD3R,
X79_UD3,
Z68A_D3H_B3,
Z68AP_D3,
Z68X_UD3H_B3,
Z68X_UD7_B3,
AX370_K7,
// Shuttle
FH67,
+42
View File
@@ -182,6 +182,7 @@ namespace OpenHardwareMonitor.Hardware.Mainboard {
case Chip.IT8718F:
case Chip.IT8720F:
case Chip.IT8726F:
case Chip.IT8686E:
GetITEConfigurationsA(superIO, manufacturer, model, v, t, f, c,
ref readFan, ref postUpdate, ref mutex);
break;
@@ -266,6 +267,9 @@ namespace OpenHardwareMonitor.Hardware.Mainboard {
break;
case Chip.NCT6779D:
case Chip.NCT6791D:
case Chip.NCT6796D:
case Chip.NCT6793D:
case Chip.NCT6795D:
GetNuvotonConfigurationD(superIO, manufacturer, model, v, t, f, c);
break;
default:
@@ -602,6 +606,26 @@ namespace OpenHardwareMonitor.Hardware.Mainboard {
f.Add(new Fan("Power Fan", 2));
f.Add(new Fan("System Fan #1", 3));
break;
case Model.AX370_K7: // IT8686E
// Note: v3.3, v12, v5, and AVCC3 might be slightly off.
v.Add(new Voltage("CPU VCore", 0));
v.Add(new Voltage("+3.3V", 1, 0.65f, 1));
v.Add(new Voltage("+12V", 2, 5, 1));
v.Add(new Voltage("+5V", 3, 1.5f, 1));
v.Add(new Voltage("VSOC", 4));
v.Add(new Voltage("VDDP", 5));
v.Add(new Voltage("VDRAM", 6));
v.Add(new Voltage("3VSB", 7, 10, 10));
v.Add(new Voltage("VBAT", 8, 10, 10));
v.Add(new Voltage("AVCC3", 9, 7.53f, 1));
t.Add(new Temperature("System", 0));
t.Add(new Temperature("Chipset", 1));
t.Add(new Temperature("CPU", 2));
t.Add(new Temperature("PCIEX16", 3));
t.Add(new Temperature("VRM MOS", 4));
for (int i = 0; i < superIO.Fans.Length; i++)
f.Add(new Fan("Fan #" + (i + 1), i));
break;
default:
v.Add(new Voltage("CPU VCore", 0));
v.Add(new Voltage("DRAM", 1, true));
@@ -831,6 +855,24 @@ namespace OpenHardwareMonitor.Hardware.Mainboard {
f.Add(new Fan("System Fan #2", 3));
f.Add(new Fan("System Fan #3", 4));
break;
case Model.X79_UD3: // IT8728F
v.Add(new Voltage("VTT", 0));
v.Add(new Voltage("DIMM CH A/B", 1));
v.Add(new Voltage("+12V", 2, 10, 2));
v.Add(new Voltage("+5V", 3, 15, 10));
v.Add(new Voltage("VIN4", 4));
v.Add(new Voltage("VCore", 5));
v.Add(new Voltage("DIMM CH C/D", 6));
v.Add(new Voltage("+3V Standby", 7, 1, 1));
v.Add(new Voltage("VBat", 8, 1, 1));
t.Add(new Temperature("System", 0));
t.Add(new Temperature("CPU", 1));
t.Add(new Temperature("Northbridge", 2));
f.Add(new Fan("CPU Fan", 0));
f.Add(new Fan("System Fan #1", 1));
f.Add(new Fan("System Fan #2", 2));
f.Add(new Fan("System Fan #3", 3));
break;
default:
v.Add(new Voltage("Voltage #1", 0, true));
v.Add(new Voltage("Voltage #2", 1, true));
+2
View File
@@ -10,6 +10,7 @@
using System;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
[assembly: AssemblyTitle("Open Hardware Monitor Library")]
@@ -24,3 +25,4 @@ using System.Runtime.InteropServices;
[assembly: ComVisible(false)]
[assembly: CLSCompliant(true)]