What the heck is all that stuff in hwconf?
------------------------------------------

Devices detected are of the following classes:

CLASS_UNSPEC: used by the probe to say 'look for everything'
CLASS_NETWORK: network adapters
CLASS_SCSI: SCSI (and some RAID) adapters
CLASS_MOUSE: mice
CLASS_AUDIO: sound cards/chips
CLASS_CDROM: CD-ROMs, CD-Rs, CD-RW, DVD-ROMs, etc.
CLASS_MODEM: modems; also, PCI serial ports (FIXME)
CLASS_VIDEO: video cards
CLASS_TAPE: tape drives
CLASS_FLOPPY: IDE, SCSI, and USB floppy drives. Generic PC floppy drives
              are *not* detected
CLASS_SCANNER: scanners
CLASS_HD: hard drives, other random storage media
CLASS_RAID: RAID adapters. Not really used by anything currently.
CLASS_PRINTER: printers
CLASS_CAPTURE: video capture boards (think bttv)
CLASS_KEYBOARD: keyboards (only returned on Sparc hardware)
CLASS_MONITOR: DDC monitors
CLASS_USB: USB controllers
CLASS_SOCKET: Cardbus and PCMCIA controllers.
CLASS_FIREWIRE: Firewire controllers.
CLASS_IDE: IDE controllers
CLASS_OTHER: anything else

The 'bus'es that it finds things on are the following:

BUS_PCI - also sees any currently configured Cardbus stuff
BUS_SBUS - this is currently a misnomer. It applies to anything pulled from
	the OpenPROM probe on Sparc
BUS_SERIAL
BUS_PSAUX - the PS/2 mouse controller
BUS_PARALLEL
BUS_SCSI - this includes ide-scsi, firewire, and USB storage, if configured
BUS_IDE
BUS_KEYBOARD - this is where it looks for Sparc keyboard information
BUS_DDC - monitors, and VBE-probed videocard memory sizes
BUS_USB
BUS_ISAPNP
BUS_MISC - legacy floppy drives, ISA PCMCIA controllers
BUS_FIREWIRE
BUS_ADB - Apple Desktop Bus
BUS_MACIO - MacIO bus
BUS_OTHER - a placeholder, mostly
BUS_UNSPEC - again, used by the probe to find anything

Fields written in /etc/sysconfig/hwconf that are common to all devices
(note: some may be NULL; if so, they are not written):

class:
	The device class
bus:
	The 'bus' the device was probed on
detached:
	This is for devices that the user wants to leave as configured,
	even though they may not be probed. Cardbus cards, if detected,
	are automatically marked as this; a user may want to mark this
	themselves for some USB devices.
driver:
	(always non-NULL)
	The driver to use for the card; it means different things for
	different device classes. For mice, it's a mouseconfig type;
	for video cards, it's a mapping in the Xconfigurator 'Cards'
	database; for *most* other things, it's a kernel module.
	There are three special values:
	  - unknown
	    This means that we don't know what driver to use
	  - ignore
	    This means that we don't care what driver to use. Generally
	    assigned to PCI bridges and the like. In the current
	    implementation, there really is no difference between
	    'ignore' and 'unknown'.
	  - disabled
	    This means that we'd normally assign a driver, but the
	    device appears to be disabled in the BIOS; this is mainly
	    set for PCI devices. This can occur if, for example,
	    the user sets 'PnP OS: Yes' in their BIOS and no interrupts
	    are assigned to any cards.
desc:
	(always non-NULL)
	Some generic description of the device
device:
	For network cards, this is 'eth' to indicate ethernet, and
	'tr' to indicate token ring. For other devices, it is usually
	the device node associated with a device. For example, for an
	IDE device, it would be along the lines of 'hda'. For a serial
	device, it could be 'ttyS1'.
	
Devices have additional fields depending on the 'bus' that they are
associated with (again, some may be NULL):

BUS_DDC
id:
	A DDC PnP id from the Xconfigurator MonitorsDB
horizSyncMin:
horizSyncMax:
vertRefreshMin:
vertRefreshMax:
	The minimum and maximum horizontal sync and vertical refresh
	rates.
modes:
	A list of VESA compatible resolutions supported by the
	video card/monitor combo.
mem:
	The amount of memory detected on a VBE-probed video card.

BUS_IDE
physical:
logical:
	The physical and logical geometry for the drive, as gleaned
	from /proc/ide. Not used by anything.

BUS_ISAPNP
deviceId:
	The ISAPnP logical device id
pdeviceId:
	The parent card ISAPnP id
compat:
	Any compatibility PnP id, if available
native:
	'1' if a kernel driver with native ISAPnP support exists
	for this device. Gleaned from /lib/modules/`uname -r`/modules.isapnpmap
active:
	'1' if the device is currently activated
cardnum:
	The index of the card that this logical device is part of.
logdev:
	The logical device number for this logical device.
io:
irq:
dma:
mem:
	Resources currently in use by this card.

BUS_KEYBOARD:
BUS_PSAUX:
(none)

BUS_PARALLEL:
pnpmodel:
pnpmfr:
pnpdesc:
	The PnP model name, manufaturer, and description of this device.
pnpmodes:
	The PnP supported 'modes' for this device.
pinfo:
	X and Y resolution of the printer, whether or not it supports
	color and raw ASCII output, and if it uses a uniprint driver.
(Note: information returned by the parallel probe is not currently used
 by kudzu)
 
BUS_PCI:
vendorId:
deviceId:
	The PCI vendor and device ids.
subVendorId:
subDeviceId:
	The PCI subvendor and subdevice ids.
pciType:
	'1' for a normal PCI device. '2' for a Cardbus device.


BUS_SBUS:
width:
height:
freq:
monitor:
	Used for monitors detected via OpenPROM; it specifies
	the resolution and frequency.

BUS_SCSI:
host:
channel:
id:
lun:
	The host, channel, id, and lun of the device.

BUS_SERIAL:
pnpmfr:
pnpmodel:
pnpcompat:
pnpdesc:
	The serial PnP manufacturer, model, compatibility string,
	and description of the device.

BUS_USB:
usbclass:
usbsubclass:
usbprotocol:
	The USB class, subclass, and protocol. Used to identify
	the device type.
usbbus:
usblevel:
usbport:
productrevision:
	Other USB data. Not currently used.
vendorId:
deviceId:
	The vendor and device IDs of the USB device.

There is also a 'classprivate' field, used for class-specific
information. Current uses:

 CLASS_NETWORK - ethernet hardware address (network.hwaddr)