Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 10 May 2004 10:06:18 -0400
From:      John Baldwin <jhb@FreeBSD.org>
To:        freebsd-acpi@FreeBSD.org
Cc:        arch@FreeBSD.org
Subject:   Re: New ACPI blacklist format
Message-ID:  <200405101006.18787.jhb@FreeBSD.org>
In-Reply-To: <20040508113421.R58706@root.org>
References:  <20040507231846.F52653@root.org> <20040508.054429.99235478.imp@bsdimp.com> <20040508113421.R58706@root.org>

next in thread | previous in thread | raw e-mail | index | archive | help
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



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200405101006.18787.jhb>