diff -r 70d0c3102424 -r 411b72b73d8f Hardware/LPC/LPCGroup.cs
--- a/Hardware/LPC/LPCGroup.cs	Thu May 06 19:20:38 2010 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,400 +0,0 @@
-/*
-  
-  Version: MPL 1.1/GPL 2.0/LGPL 2.1
-
-  The contents of this file are subject to the Mozilla Public License Version
-  1.1 (the "License"); you may not use this file except in compliance with
-  the License. You may obtain a copy of the License at
- 
-  http://www.mozilla.org/MPL/
-
-  Software distributed under the License is distributed on an "AS IS" basis,
-  WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
-  for the specific language governing rights and limitations under the License.
-
-  The Original Code is the Open Hardware Monitor code.
-
-  The Initial Developer of the Original Code is 
-  Michael Möller <m.moeller@gmx.ch>.
-  Portions created by the Initial Developer are Copyright (C) 2009-2010
-  the Initial Developer. All Rights Reserved.
-
-  Contributor(s):
-
-  Alternatively, the contents of this file may be used under the terms of
-  either the GNU General Public License Version 2 or later (the "GPL"), or
-  the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
-  in which case the provisions of the GPL or the LGPL are applicable instead
-  of those above. If you wish to allow use of your version of this file only
-  under the terms of either the GPL or the LGPL, and not to allow others to
-  use your version of this file under the terms of the MPL, indicate your
-  decision by deleting the provisions above and replace them with the notice
-  and other provisions required by the GPL or the LGPL. If you do not delete
-  the provisions above, a recipient may use your version of this file under
-  the terms of any one of the MPL, the GPL or the LGPL.
- 
-*/
-
-using System;
-using System.Collections.Generic;
-using System.Text;
-using System.Threading;
-
-namespace OpenHardwareMonitor.Hardware.LPC {
-  public class LPCGroup : IGroup {
-
-    private List<IHardware> hardware = new List<IHardware>();
-    private StringBuilder report = new StringBuilder();
-
-    private Chip chip = Chip.Unknown;
-
-    // I/O Ports
-    private ushort[] REGISTER_PORTS = new ushort[] { 0x2e, 0x4e };
-    private ushort[] VALUE_PORTS = new ushort[] { 0x2f, 0x4f };
-
-    private ushort registerPort;
-    private ushort valuePort;
-
-    // Registers
-    private const byte CONFIGURATION_CONTROL_REGISTER = 0x02;
-    private const byte DEVCIE_SELECT_REGISTER = 0x07;
-    private const byte CHIP_ID_REGISTER = 0x20;
-    private const byte CHIP_REVISION_REGISTER = 0x21;
-    private const byte BASE_ADDRESS_REGISTER = 0x60;
-
-    private byte ReadByte(byte register) {
-      WinRing0.WriteIoPortByte(registerPort, register);
-      return WinRing0.ReadIoPortByte(valuePort);
-    } 
-
-    private ushort ReadWord(byte register) {
-      return (ushort)((ReadByte(register) << 8) | 
-        ReadByte((byte)(register + 1)));
-    }
-
-    private void Select(byte logicalDeviceNumber) {
-      WinRing0.WriteIoPortByte(registerPort, DEVCIE_SELECT_REGISTER);
-      WinRing0.WriteIoPortByte(valuePort, logicalDeviceNumber);
-    }
-
-    // ITE
-    private const byte IT87_ENVIRONMENT_CONTROLLER_LDN = 0x04;    
-
-    private void IT87Enter() {
-      WinRing0.WriteIoPortByte(registerPort, 0x87);
-      WinRing0.WriteIoPortByte(registerPort, 0x01);
-      WinRing0.WriteIoPortByte(registerPort, 0x55);
-      WinRing0.WriteIoPortByte(registerPort, 0x55);
-    }
-
-    internal void IT87Exit() {
-      WinRing0.WriteIoPortByte(registerPort, CONFIGURATION_CONTROL_REGISTER);
-      WinRing0.WriteIoPortByte(valuePort, 0x02);
-    }
-
-    // Winbond, Fintek
-    private const byte FINTEK_VENDOR_ID_REGISTER = 0x23;
-    private const ushort FINTEK_VENDOR_ID = 0x1934;
-
-    private const byte WINBOND_HARDWARE_MONITOR_LDN = 0x0B;
-
-    private const byte F71858_HARDWARE_MONITOR_LDN = 0x02;
-    private const byte FINTEK_HARDWARE_MONITOR_LDN = 0x04;
-
-    private void WinbondFintekEnter() {
-      WinRing0.WriteIoPortByte(registerPort, 0x87);
-      WinRing0.WriteIoPortByte(registerPort, 0x87);
-    }
-
-    private void WinbondFintekExit() {
-      WinRing0.WriteIoPortByte(registerPort, 0xAA);      
-    }
-
-    // SMSC
-    private void SMSCEnter() {
-      WinRing0.WriteIoPortByte(registerPort, 0x55);
-    }
-
-    private void SMSCExit() {
-      WinRing0.WriteIoPortByte(registerPort, 0xAA);
-    }
-
-    public LPCGroup() {
-      if (!WinRing0.IsAvailable)
-        return;
-
-      for (int i = 0; i < REGISTER_PORTS.Length; i++) {
-        registerPort = REGISTER_PORTS[i];
-        valuePort = VALUE_PORTS[i];
-
-        WinbondFintekEnter();
-
-        byte logicalDeviceNumber;
-        byte id = ReadByte(CHIP_ID_REGISTER);
-        byte revision = ReadByte(CHIP_REVISION_REGISTER);
-        chip = Chip.Unknown;
-        logicalDeviceNumber = 0;
-        switch (id) {
-          case 0x05:
-            switch (revision) {
-              case 0x07:
-                chip = Chip.F71858;
-                logicalDeviceNumber = F71858_HARDWARE_MONITOR_LDN;
-                break;
-              case 0x41:
-                chip = Chip.F71882;
-                logicalDeviceNumber = FINTEK_HARDWARE_MONITOR_LDN;
-                break;              
-            } break;
-          case 0x06:
-            switch (revision) {             
-              case 0x01:
-                chip = Chip.F71862;
-                logicalDeviceNumber = FINTEK_HARDWARE_MONITOR_LDN;
-                break;              
-            } break;
-          case 0x07:
-            switch (revision) {
-              case 0x23:
-                chip = Chip.F71889F;
-                logicalDeviceNumber = FINTEK_HARDWARE_MONITOR_LDN;
-                break;              
-            } break;
-          case 0x08:
-            switch (revision) {
-              case 0x14:
-                chip = Chip.F71869;
-                logicalDeviceNumber = FINTEK_HARDWARE_MONITOR_LDN;
-                break;              
-            } break;
-          case 0x09:
-            switch (revision) {
-              case 0x09:
-                chip = Chip.F71889ED;
-                logicalDeviceNumber = FINTEK_HARDWARE_MONITOR_LDN;
-                break;              
-            } break;
-          case 0x52:
-            switch (revision) {
-              case 0x17:
-              case 0x3A:
-              case 0x41:
-                chip = Chip.W83627HF;
-                logicalDeviceNumber = WINBOND_HARDWARE_MONITOR_LDN;
-                break;             
-            } break;
-          case 0x82:
-            switch (revision) {
-              case 0x83:
-                chip = Chip.W83627THF;
-                logicalDeviceNumber = WINBOND_HARDWARE_MONITOR_LDN;
-                break;
-            } break;
-          case 0x85:
-            switch (revision) {
-              case 0x41:
-                chip = Chip.W83687THF;
-                logicalDeviceNumber = WINBOND_HARDWARE_MONITOR_LDN;
-                break;
-            } break;
-          case 0x88:
-            switch (revision & 0xF0) {
-              case 0x50:
-              case 0x60:
-                chip = Chip.W83627EHF;
-                logicalDeviceNumber = WINBOND_HARDWARE_MONITOR_LDN;
-                break;
-            } break;
-          case 0xA0:
-            switch (revision & 0xF0) {
-              case 0x20: 
-                chip = Chip.W83627DHG;
-                logicalDeviceNumber = WINBOND_HARDWARE_MONITOR_LDN;  
-                break;             
-            } break;
-          case 0xA5:
-            switch (revision & 0xF0) {
-              case 0x10:
-                chip = Chip.W83667HG;
-                logicalDeviceNumber = WINBOND_HARDWARE_MONITOR_LDN;
-                break;
-            } break;
-          case 0xB0:
-            switch (revision & 0xF0) {
-              case 0x70:
-                chip = Chip.W83627DHGP;
-                logicalDeviceNumber = WINBOND_HARDWARE_MONITOR_LDN;
-                break;             
-            } break;
-          case 0xB3:
-            switch (revision & 0xF0) {
-              case 0x50:
-                chip = Chip.W83667HGB;
-                logicalDeviceNumber = WINBOND_HARDWARE_MONITOR_LDN;
-                break;
-            } break; 
-        }
-        if (chip == Chip.Unknown) {
-          if (id != 0 && id != 0xff) {
-            WinbondFintekExit();
-
-            report.Append("Chip ID: Unknown Winbond / Fintek with ID 0x"); 
-            report.AppendLine(((id << 8) | revision).ToString("X"));
-            report.AppendLine();
-          }
-        } else {
-
-          Select(logicalDeviceNumber);
-          ushort address = ReadWord(BASE_ADDRESS_REGISTER);          
-          Thread.Sleep(1);
-          ushort verify = ReadWord(BASE_ADDRESS_REGISTER);
-
-          ushort vendorID = ReadWord(FINTEK_VENDOR_ID_REGISTER);
-
-          WinbondFintekExit();
-
-          if (address != verify) {            
-            report.Append("Chip ID: 0x"); 
-            report.AppendLine(chip.ToString("X"));
-            report.Append("Chip revision: 0x"); 
-            report.AppendLine(revision.ToString("X"));
-            report.AppendLine("Error: Address verification failed");
-            report.AppendLine();
-            return;
-          }
-
-          // some Fintek chips have address register offset 0x05 added already
-          if ((address & 0x07) == 0x05)
-            address &= 0xFFF8;
-
-          if (address < 0x100 || (address & 0xF007) != 0) {            
-            report.Append("Chip ID: 0x");
-            report.AppendLine(chip.ToString("X"));
-            report.Append("Chip revision: 0x");
-            report.AppendLine(revision.ToString("X"));
-            report.Append("Error: Invalid address 0x");
-            report.AppendLine(address.ToString("X"));
-            report.AppendLine();
-            return;
-          }
-
-          switch (chip) {
-            case Chip.W83627DHG:
-            case Chip.W83627DHGP:
-            case Chip.W83627EHF:
-            case Chip.W83627HF:
-            case Chip.W83627THF:
-            case Chip.W83667HG:
-            case Chip.W83667HGB:
-            case Chip.W83687THF:
-              W836XX w836XX = new W836XX(chip, revision, address);
-              if (w836XX.IsAvailable)
-                hardware.Add(w836XX);
-              break;
-            case Chip.F71858:
-            case Chip.F71862:
-            case Chip.F71869:
-            case Chip.F71882:
-            case Chip.F71889ED:
-            case Chip.F71889F:
-              if (vendorID != FINTEK_VENDOR_ID) {
-                report.Append("Chip ID: 0x");
-                report.AppendLine(chip.ToString("X"));
-                report.Append("Chip revision: 0x");
-                report.AppendLine(revision.ToString("X"));
-                report.Append("Error: Invalid vendor ID 0x");
-                report.AppendLine(vendorID.ToString("X"));
-                report.AppendLine();
-                return;
-              }
-              hardware.Add(new F718XX(chip, address));
-              break;
-            default: break;
-          }
-          
-          return;
-        }
-
-        IT87Enter();
-
-        ushort chipID = ReadWord(CHIP_ID_REGISTER);
-        switch (chipID) {
-          case 0x8712: chip = Chip.IT8712F; break;
-          case 0x8716: chip = Chip.IT8716F; break;
-          case 0x8718: chip = Chip.IT8718F; break;
-          case 0x8720: chip = Chip.IT8720F; break;
-          case 0x8726: chip = Chip.IT8726F; break; 
-          default: chip = Chip.Unknown; break;
-        }
-        if (chip == Chip.Unknown) {
-          if (chipID != 0 && chipID != 0xffff) {
-            IT87Exit();
-
-            report.Append("Chip ID: Unknown ITE with ID 0x");
-            report.AppendLine(chipID.ToString("X"));
-            report.AppendLine();
-          }
-        } else {
-          Select(IT87_ENVIRONMENT_CONTROLLER_LDN);
-          ushort address = ReadWord(BASE_ADDRESS_REGISTER);
-          Thread.Sleep(1);
-          ushort verify = ReadWord(BASE_ADDRESS_REGISTER);
-
-          IT87Exit();
-
-          if (address != verify || address < 0x100 || (address & 0xF007) != 0) {
-            report.Append("Chip ID: 0x");
-            report.AppendLine(chip.ToString("X"));            
-            report.Append("Error: Invalid address 0x");
-            report.AppendLine(address.ToString("X"));
-            report.AppendLine();
-            return;
-          }
-
-          IT87XX it87 = new IT87XX(chip, address);
-          if (it87.IsAvailable)
-            hardware.Add(it87);
-
-          return;
-        }
-
-        SMSCEnter();
-
-        chipID = ReadWord(CHIP_ID_REGISTER);
-        switch (chipID) {
-          default: chip = Chip.Unknown; break;
-        }
-        if (chip == Chip.Unknown) {
-          if (chipID != 0 && chipID != 0xffff) {
-            SMSCExit();
-
-            report.Append("Chip ID: Unknown SMSC with ID 0x");
-            report.AppendLine(chipID.ToString("X"));
-            report.AppendLine();
-          }
-        } else {
-          SMSCExit();
-
-          return;
-        }
-      }   
-    }
-
-    public IHardware[] Hardware {
-      get {
-        return hardware.ToArray();
-      }
-    }
-
-    public string GetReport() {
-      if (report.Length > 0) {
-        report.Insert(0, "LPCIO" + Environment.NewLine +
-          Environment.NewLine);        
-        return report.ToString();
-      } else
-        return null;
-    }
-
-    public void Close() { }
-  }
-}