The driver is designed to provide an easier access to functions
that SuperIO chips provide and which are not advertised in other
ways. Examples of functions that the superio driver is not going
to support: keyboard, mouse, serial and parllel ports, floppy
controller. Examples of functions for which the superio driver
is useful: hardware monitoring, watchdog timer, GPIO.
The main purpose of the driver is to consolidate discovery of
the supported hardware, its functions and resources.
For example, most of what wbwd(4) does in its probing code should
be moved to this driver.
*This is not a commit material yet.*
Rather I would like to discuss what and how this driver should do
using some concrete code as a base for the discussion.
There are some choices that I have not made yet.
For example, I see at least three possibilites for how this driver
should interact with drivers for specific functions:
- This driver works only as an information provider. Other drivers use it to discover the logical functions and resources, but they actually attach to other buses like isa.
- This driver works as a bus that has a global knowledge about drivers for the SuperIO functions. So, superio creates named child devices to attach predefined drivers to them.
- This driver works as a bus and creates wildcard devices for the known functions. Other drivers can bid for those devices.
In the last two cases the driver could also allow to add hinted and
self-identifying devices.
Also, I am not sure if it's okay to provide the superio interface
in the form of directly callable functions or if an interface should
be defined.
The simple interface seems to work, but it will blow up if it's used
on a wrong device by mistake.
superio currently works only with a number of ITE SuperIO chips.
To do:
- support more chips, including all known by wbwd
- make wbwd work via superio
- add itwd driver for watchdogs in ITE devices
- consider which functions should become methods
- consider setting up resources (i/o ranges) to enumerated devices
- maybe add support for self-identifying drivers and hinted devices