# HG changeset patch # User moel.mich # Date 1282076727 0 # Node ID 3b2bcba8c02d3f4e0189b7df5657de60e94df19f # Parent 7f90baeb96b0f6ee1c1ce29192e0f6d5299865af Restricted ITE detection to port 0x2E. diff -r 7f90baeb96b0 -r 3b2bcba8c02d Hardware/LPC/LPCIO.cs --- a/Hardware/LPC/LPCIO.cs Sun Aug 15 17:56:57 2010 +0000 +++ b/Hardware/LPC/LPCIO.cs Tue Aug 17 20:25:27 2010 +0000 @@ -48,8 +48,8 @@ private StringBuilder report = new StringBuilder(); // I/O Ports - private ushort[] REGISTER_PORTS = new ushort[] { 0x2e, 0x4e }; - private ushort[] VALUE_PORTS = new ushort[] { 0x2f, 0x4f }; + private ushort[] REGISTER_PORTS = new ushort[] { 0x2E, 0x4E }; + private ushort[] VALUE_PORTS = new ushort[] { 0x2F, 0x4F }; private ushort registerPort; private ushort valuePort; @@ -76,23 +76,20 @@ WinRing0.WriteIoPortByte(valuePort, logicalDeviceNumber); } - // ITE - private const byte IT87_ENVIRONMENT_CONTROLLER_LDN = 0x04; - private const byte IT87_CHIP_VERSION_REGISTER = 0x22; - - private void IT87Enter() { - WinRing0.WriteIoPortByte(registerPort, 0x87); - WinRing0.WriteIoPortByte(registerPort, 0x01); - WinRing0.WriteIoPortByte(registerPort, 0x55); - WinRing0.WriteIoPortByte(registerPort, 0x55); + private void ReportUnknownChip(string type, int chip) { + report.Append("Chip ID: Unknown "); + report.Append(type); + report.Append(" with ID 0x"); + report.Append(chip.ToString("X", CultureInfo.InvariantCulture)); + report.Append(" at 0x"); + report.Append(registerPort.ToString("X", CultureInfo.InvariantCulture)); + report.Append("/0x"); + report.AppendLine(valuePort.ToString("X", CultureInfo.InvariantCulture)); + report.AppendLine(); } - private void IT87Exit() { - WinRing0.WriteIoPortByte(registerPort, CONFIGURATION_CONTROL_REGISTER); - WinRing0.WriteIoPortByte(valuePort, 0x02); - } + #region Winbond, Fintek - // Winbond, Fintek private const byte FINTEK_VENDOR_ID_REGISTER = 0x23; private const ushort FINTEK_VENDOR_ID = 0x1934; @@ -107,30 +104,9 @@ } private void WinbondFintekExit() { - WinRing0.WriteIoPortByte(registerPort, 0xAA); - } - - // SMSC - private void SMSCEnter() { - WinRing0.WriteIoPortByte(registerPort, 0x55); - } - - private void SMSCExit() { WinRing0.WriteIoPortByte(registerPort, 0xAA); } - private void ReportUnknownChip(string type, int chip) { - report.Append("Chip ID: Unknown "); - report.Append(type); - report.Append(" with ID 0x"); - report.Append(chip.ToString("X", CultureInfo.InvariantCulture)); - report.Append(" at 0x"); - report.Append(registerPort.ToString("X", CultureInfo.InvariantCulture)); - report.Append("/0x"); - report.AppendLine(valuePort.ToString("X", CultureInfo.InvariantCulture)); - report.AppendLine(); - } - private bool DetectWinbondFintek() { WinbondFintekEnter(); @@ -324,7 +300,31 @@ return false; } + #endregion + + #region ITE + + private const byte IT87_ENVIRONMENT_CONTROLLER_LDN = 0x04; + private const byte IT87_CHIP_VERSION_REGISTER = 0x22; + + private void IT87Enter() { + WinRing0.WriteIoPortByte(registerPort, 0x87); + WinRing0.WriteIoPortByte(registerPort, 0x01); + WinRing0.WriteIoPortByte(registerPort, 0x55); + WinRing0.WriteIoPortByte(registerPort, 0x55); + } + + private void IT87Exit() { + WinRing0.WriteIoPortByte(registerPort, CONFIGURATION_CONTROL_REGISTER); + WinRing0.WriteIoPortByte(valuePort, 0x02); + } + private bool DetectIT87() { + + // IT87XX can enter only on port 0x2E + if (registerPort != 0x2E) + return false; + IT87Enter(); ushort chipID = ReadWord(CHIP_ID_REGISTER); @@ -370,6 +370,18 @@ return false; } + #endregion + + #region SMSC + + private void SMSCEnter() { + WinRing0.WriteIoPortByte(registerPort, 0x55); + } + + private void SMSCExit() { + WinRing0.WriteIoPortByte(registerPort, 0xAA); + } + private bool DetectSMSC() { SMSCEnter(); @@ -392,6 +404,8 @@ return false; } + #endregion + private void Detect() { for (int i = 0; i < REGISTER_PORTS.Length; i++) { @@ -426,9 +440,8 @@ public string GetReport() { if (report.Length > 0) { - report.Insert(0, "LPCIO" + Environment.NewLine + - Environment.NewLine); - return report.ToString(); + return "LPCIO" + Environment.NewLine + Environment.NewLine + + report.ToString(); } else return null; }