summaryrefslogtreecommitdiffstats
path: root/sys/dev/acpica/acpi_quirk.c
diff options
context:
space:
mode:
authorjkim <jkim@FreeBSD.org>2007-03-22 18:16:43 +0000
committerjkim <jkim@FreeBSD.org>2007-03-22 18:16:43 +0000
commitc06098a4065d7be63bd57c45889a91da9bc0f5e4 (patch)
treecdaa579af45ece33bafe9e4fe4c9aef8bd85ed29 /sys/dev/acpica/acpi_quirk.c
parent07ec417491720a77d28b1083886826f0141b171c (diff)
downloadFreeBSD-src-c06098a4065d7be63bd57c45889a91da9bc0f5e4.zip
FreeBSD-src-c06098a4065d7be63bd57c45889a91da9bc0f5e4.tar.gz
Catch up with ACPI-CA 20070320 import.
Diffstat (limited to 'sys/dev/acpica/acpi_quirk.c')
-rw-r--r--sys/dev/acpica/acpi_quirk.c36
1 files changed, 18 insertions, 18 deletions
diff --git a/sys/dev/acpica/acpi_quirk.c b/sys/dev/acpica/acpi_quirk.c
index ac284e0..f68eb63 100644
--- a/sys/dev/acpica/acpi_quirk.c
+++ b/sys/dev/acpica/acpi_quirk.c
@@ -47,10 +47,8 @@ enum val_t {
CREATOR_REV,
};
-#define ACPI_TABLE_END (ACPI_TABLE_MAX + 1)
-
struct acpi_q_rule {
- int sig; /* Table signature to match */
+ char sig[ACPI_NAME_SIZE]; /* Table signature to match */
enum val_t val;
union {
char *id;
@@ -141,33 +139,35 @@ acpi_table_quirks(int *quirks)
{
const struct acpi_q_entry *entry;
const struct acpi_q_rule *match;
- ACPI_TABLE_HEADER *hdr;
+ ACPI_TABLE_HEADER fadt, dsdt, xsdt, *hdr;
int done;
/* First, allow the machdep system to set its idea of quirks. */
KASSERT(quirks != NULL, ("acpi quirks ptr is NULL"));
acpi_machdep_quirks(quirks);
+ if (ACPI_FAILURE(AcpiGetTableHeader(ACPI_SIG_FADT, 0, &fadt)))
+ bzero(&fadt, sizeof(fadt));
+ if (ACPI_FAILURE(AcpiGetTableHeader(ACPI_SIG_DSDT, 0, &dsdt)))
+ bzero(&fadt, sizeof(dsdt));
+ if (ACPI_FAILURE(AcpiGetTableHeader(ACPI_SIG_XSDT, 0, &xsdt)))
+ bzero(&fadt, sizeof(xsdt));
+
/* Then, override the quirks with any matched from table signatures. */
for (entry = acpi_quirks_table; entry->match; entry++) {
done = TRUE;
- for (match = entry->match; match->sig != ACPI_TABLE_END; match++) {
- switch (match->sig) {
- case ACPI_TABLE_FADT:
- hdr = (ACPI_TABLE_HEADER *)AcpiGbl_FADT;
- break;
- case ACPI_TABLE_DSDT:
- hdr = (ACPI_TABLE_HEADER *)AcpiGbl_DSDT;
- break;
- case ACPI_TABLE_XSDT:
- hdr = (ACPI_TABLE_HEADER *)AcpiGbl_XSDT;
- break;
- default:
+ for (match = entry->match; match->sig[0] != '\0'; match++) {
+ if (!strncmp(match->sig, "FADT", ACPI_NAME_SIZE))
+ hdr = &fadt;
+ else if (!strncmp(match->sig, ACPI_SIG_DSDT, ACPI_NAME_SIZE))
+ hdr = &dsdt;
+ else if (!strncmp(match->sig, ACPI_SIG_XSDT, ACPI_NAME_SIZE))
+ hdr = &xsdt;
+ else
panic("invalid quirk header\n");
- }
/* If we don't match any, skip to the next entry. */
- if (!aq_match_header(hdr, match)) {
+ if (aq_match_header(hdr, match) == FALSE) {
done = FALSE;
break;
}
OpenPOWER on IntegriCloud