From owner-freebsd-acpi@FreeBSD.ORG Fri May 7 23:28:14 2004 Return-Path: Delivered-To: freebsd-acpi@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 99F8A16A4CE 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 85BE343D1D 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-acpi@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list List-Id: ACPI and power management development 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