New ACPI blacklist format

Nate Lawson nate at root.org
Fri May 7 23:28:14 PDT 2004


I have extracted a set of known-broken tables/versions from various
sources.  Since. as far as I know, C does not allow variable length
initializers, I've settled on the following format:

struct acpi_table_desc {
    char        *signature;
    char        *oem_id;
    char        *oem_table_id;
    char        *oem_rev_op;
    char        *oem_revision;
    char        *creator_id;
    char        *creator_rev_op;
    char        *creator_revision;
};

struct acpi_blacklist {
    int         quirk;
    struct      acpi_table_desc *match;
};

#define ACPI_BROKEN     0x1

static struct acpi_table_desc Abit_BP6[] = {
    { "FACP", "AWARD", "AWRDACPI", "<=", "30302e31", "", "", "" },
};
static struct acpi_table_desc AMI_INT[] = {     /* 01/18/00 */
    { "FACP", "AWARD", "", "<=", "10", "", "", "" },
    { "DSDT", "",      "", "<=", "5",  "", "", "" },
};
static struct acpi_table_desc Compaq_ViperII[] = {
    { "FACP", "COMPAQ", "VIPER II", "<=", "06040000", "PTL", "<=", "000F4240" },
};

static struct acpi_blacklist acpi_blacklist_table[] = {
    { ACPI_BROKEN, Abit_BP6 },
    { ACPI_BROKEN, AMI_INT },
    { ACPI_BROKEN, Compaq_ViperII },
};

Each entry in acpi_table_desc lists a table ID and then a set of strings
to match against the table.  Multiple tables may be matched for a given
system (i.e. AMI_INT above).  The op values will be "<=", "=", and ">=".
The quirk associated with each system will be a bitmask returned from the
quirk matching function.

In English, the last entry means, "Check the table named 'FACP' for an OEM
ID of 'COMPAQ' and table ID of 'VIPER II' and OEM revision <= '06040000'
..."  Substring matches will work too (e.g., "COMPA").

Is there any better way to compact this?

-Nate


More information about the freebsd-acpi mailing list