I would like to raise several questions on the topic, the answers (from the people more informed then me) will be archived and useful in the future.
First some background:
A) I have an open-source OpenHardwareMonitor app. It is a .NET app, and, according to the source, it uses the PortIO driver (embedded to resources), then loads it by p/Invoke to CreateService, then uses it to peek/poke the ports of SuperIO chip. It supports several kinds of SuperIO chips like Winbond.
Question: is it the same SuperIO chip which implements the legacy stuff like PS/2+COM+LPT+Floppy?
Also, in BIOS settings, I have "Asus Q-Fan Control". This feature really adjusts the CPU fan speed according to temperature/load, and works _even if no Asus software is installed in Windows_. Looks like the feature is OS-agnostic. Surely not only Asus provides this, and surely this is even more popular in laptops.
1) how is I2C related to all of this? is Winbond SuperIO a bus master for I2C, while fan/temp/voltage probes and controls - the slave devices on I2C bus?
2) how is OS-agnostic stuff working? Is ACPI EC involved in this? Is ACPI EC a separate chip or is it embedded to SuperIO? Can ACPI EC be implemented by executing BIOS SMM code on a main CPU? Am I correct that ACPI EC, being a master, sends IN/OUT transactions to SuperIO?
3) can there be conflicts between the OS-agnostic BIOS stuff controlling the fan speed and the app like OpenHardwareMonitor doing the same?
4) regardless of WMI schema having classes for fans, temperatures etc, they are nearly never implemented by BIOS's ACPI table (even on a brand-name machines like Dell PowerEdge). Am I correct that, in a lucky case if WMI controls for fan/temp/voltage are actually supported, they are _conflict-free_ with the OS-agnostic BIOS stuff?
5) Windows has the acpiec.sys driver. What is its purpose? is it related to exposing fans/temps/voltages to WMI?
Maxim S. Shatskih
Microsoft MVP on File System And Storage