Re: New ACPI blacklist format

From: John Baldwin (jhb_at_FreeBSD.org)
Date: 05/10/04

  • Next message: Dag-Erling Smørgrav: "newbus flaw"
    To: freebsd-acpi@FreeBSD.org
    Date: Mon, 10 May 2004 10:06:18 -0400
    
    

    On Saturday 08 May 2004 02:37 pm, Nate Lawson wrote:
    > On Sat, 8 May 2004, M. Warner Losh wrote:
    > > In message: <20040507231846.F52653@root.org>
    > >
    > > Nate Lawson <nate@root.org> writes:
    > > : 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:
    > >
    > > It does.
    > >
    > > : 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", "", "", "" },
    > > : };
    > >
    > > { .signature = "FACP", .oem_id="AWARD", .oem_table_id="AWARDACPI",
    > > .oem_rev_op = "<=", }
    > >
    > > :The op values will be "<=", "=", and ">=".
    > >
    > > These are likely better as a enum.
    > >
    > > : Is there any better way to compact this?
    > >
    > > Using shorter structure names would get it all onthe same line.
    >
    > Sure, good comments. What I meant by compacting was to get a variable
    > number of acpi_table_desc elements in a single blacklist entry without
    > defining a separate static. Something like this:
    >
    > static struct acpi_blacklist blacklist[] = {
    > {
    > .quirk = ACPI_BROKEN,
    > {
    > { "FACP", ... },
    > { "DSDT", ... }
    > }
    > },
    > {
    > .quirk = ...
    > }
    > };
    >
    > The compiler didn't allow this.

    I like the idea of having a flat file that Marcel or Warner suggested and
    generating the .c code from that file. I also think using enums or #define's
    for the logical operations is much better than having to do string compares
    in the kernel. Note that the file parser could translate 'oemrev <= foo' to
    an appropriate constant.

    -- 
    John Baldwin <jhb@FreeBSD.org>  <><  http://www.FreeBSD.org/~jhb/
    "Power Users Use the Power to Serve"  =  http://www.FreeBSD.org
    _______________________________________________
    freebsd-arch@freebsd.org mailing list
    http://lists.freebsd.org/mailman/listinfo/freebsd-arch
    To unsubscribe, send any mail to "freebsd-arch-unsubscribe@freebsd.org"
    

  • Next message: Dag-Erling Smørgrav: "newbus flaw"