Todo

* Read in and parse acpxtract flat ascii for off-line analysis
* Prefix fwts lib headers with fwts_			DONE
* Add FIX fields to explain how to workaround or fix a problem
							DONE
* Add 300 second hpet delay check to s3/s4 issues
							DONE
* ACPI hotkey handling
							partial
* ACPI lid handling
							DONE
* ACPI semantic checks of DSDT etc
* Syntax check on all AML code				DONE
* Progress meter callback plug-ins

* Add failure 'levels':
	CRITICAL
	HIGH
	MEDIUM
	LOW
	WARNING
							DONE
* Add summary to reduce "noise"
							DONE
* Add pretty printing formatting of over long lines
							DONE

* Add check for MTRRs not enabled on video aparture	
	allows for faster grub rendering		DONE 26/06/2010

* Add in DMI decode on version info, so we can track BIOS version

* --show-tests, output should be in sorted order	DONE 28/06/2010

* lot of systems w/ atom N280 CPU have a BIOS that doesn't report all possible CPU speeds (bug 422858). Is that something the fw kit can detect?
							DONE

Hotkey testing:
- Get the OEM name from dmidecode such as Dell, Lenovo, Acer...
- Get the keymap from /lib/udev/keymaps/ according to the OEM name
- Ask user to press hotkey
- Capture the scancode and compare to the default one in OEM keymap

/lib/udev/findkeyboards ... get non-USB keyboard

    # standard AT keyboard
    for dev in `udevadm trigger --dry-run --verbose --property-match=ID_INPUT_KEYBOARD=1`; do
        walk=`udevadm info --attribute-walk --path=$dev`
        env=`udevadm info --query=env --path=$dev`
        if echo "$walk" | grep -q 'DRIVERS=="atkbd"'; then
            echo -n 'AT keyboard: '
        elif echo "$env" | grep -q '^ID_USB_DRIVER=usbhid'; then
            echo -n 'USB keyboard: '
        else
            echo -n 'Unknown type: '
        fi
        udevadm info --query=name --path=$dev
    done

...

devadm info --attribute-walk --path=/sys/devices/platform/i8042/serio0/input/input4/event4

find /sys/devices/platform -name "name" -exec cat {} \;


Udevadm info starts with the device specified by the devpath and then
walks up the chain of parent devices. It prints for every device
found, all possible attributes in the udev rules key format.
A rule to match, can be composed by the attributes of the device
and the attributes from one single parent device.

  looking at device '/devices/platform/i8042/serio0/input/input4/event4':
    KERNEL=="event4"
    SUBSYSTEM=="input"
    DRIVER==""

  looking at parent device '/devices/platform/i8042/serio0/input/input4':
    KERNELS=="input4"
    SUBSYSTEMS=="input"
    DRIVERS==""
    ATTRS{name}=="AT Translated Set 2 keyboard"
    ATTRS{phys}=="isa0060/serio0/input0"
    ATTRS{uniq}==""
    ATTRS{modalias}=="input:b0011v0001p0001eAB41-e0,1,4,11,14,k71,72,73,74,75,76,77,79,7A,7B,7C,7D,7E,7F,80,8C,8E,8F,94,9B,9C,9D,9E,9F,A3,A4,A5,A6,AC,AD,B7,B8,B9,CD,D9,E2,E3,EE,ram4,l0,1,2,sfw"

  looking at parent device '/devices/platform/i8042/serio0':
    KERNELS=="serio0"
    SUBSYSTEMS=="serio"
    DRIVERS=="atkbd"
    ATTRS{description}=="i8042 KBD port"
    ATTRS{modalias}=="serio:ty06pr00id00ex00"
    ATTRS{bind_mode}=="auto"
    ATTRS{extra}=="0"
    ATTRS{force_release}=="369-370"
    ATTRS{scroll}=="0"
    ATTRS{set}=="2"
    ATTRS{softrepeat}=="0"
    ATTRS{softraw}=="1"
    ATTRS{err_count}=="0"

  looking at parent device '/devices/platform/i8042':
    KERNELS=="i8042"
    SUBSYSTEMS=="platform"
    DRIVERS=="i8042"
    ATTRS{modalias}=="platform:i8042"

  looking at parent device '/devices/platform':
    KERNELS=="platform"
    SUBSYSTEMS==""
    DRIVERS==""

keys:

/lib/udev/keymap -i input/event4 

- If it is the same function, it passes. Otherwise, it fails
- If it fails, normally BIOS generates wrong scancode. We need BIOS to fix that.
