From owner-freebsd-arch@FreeBSD.ORG Fri May 7 23:28:14 2004 Return-Path: Delivered-To: freebsd-arch@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id A5E2016A4D1 for ; Fri, 7 May 2004 23:28:14 -0700 (PDT) Received: from root.org (root.org [67.118.192.226]) by mx1.FreeBSD.org (Postfix) with SMTP id 8612A43D54 for ; Fri, 7 May 2004 23:28:13 -0700 (PDT) (envelope-from nate@root.org) Received: (qmail 52690 invoked by uid 1000); 8 May 2004 06:28:15 -0000 Date: Fri, 7 May 2004 23:28:15 -0700 (PDT) From: Nate Lawson To: arch@freebsd.org Message-ID: <20040507231846.F52653@root.org> MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII cc: acpi@freebsd.org Subject: New ACPI blacklist format X-BeenThere: freebsd-arch@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list List-Id: Discussion related to FreeBSD architecture List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 08 May 2004 06:28:14 -0000 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