diff options
Diffstat (limited to 'sys/dev/acpica/Osd/OsdTable.c')
-rw-r--r-- | sys/dev/acpica/Osd/OsdTable.c | 57 |
1 files changed, 13 insertions, 44 deletions
diff --git a/sys/dev/acpica/Osd/OsdTable.c b/sys/dev/acpica/Osd/OsdTable.c index ce33e51..d9b29eb 100644 --- a/sys/dev/acpica/Osd/OsdTable.c +++ b/sys/dev/acpica/Osd/OsdTable.c @@ -40,26 +40,22 @@ __FBSDID("$FreeBSD$"); #include <contrib/dev/acpica/actables.h> #undef _COMPONENT -#define _COMPONENT ACPI_TABLES +#define _COMPONENT ACPI_TABLES static char acpi_osname[128]; TUNABLE_STR("hw.acpi.osname", acpi_osname, sizeof(acpi_osname)); -static struct { - ACPI_TABLE_HEADER_DEF - uint32_t no_op; -} __packed fake_ssdt; - ACPI_STATUS -AcpiOsPredefinedOverride ( - const ACPI_PREDEFINED_NAMES *InitVal, - ACPI_STRING *NewVal) +AcpiOsPredefinedOverride(const ACPI_PREDEFINED_NAMES *InitVal, + ACPI_STRING *NewVal) { + if (InitVal == NULL || NewVal == NULL) return (AE_BAD_PARAMETER); *NewVal = NULL; - if (strncmp(InitVal->Name, "_OS_", 4) == 0 && strlen(acpi_osname) > 0) { + if (strncmp(InitVal->Name, "_OS_", ACPI_NAME_SIZE) == 0 && + strlen(acpi_osname) > 0) { printf("ACPI: Overriding _OS definition with \"%s\"\n", acpi_osname); *NewVal = acpi_osname; } @@ -68,9 +64,8 @@ AcpiOsPredefinedOverride ( } ACPI_STATUS -AcpiOsTableOverride ( - ACPI_TABLE_HEADER *ExistingTable, - ACPI_TABLE_HEADER **NewTable) +AcpiOsTableOverride(ACPI_TABLE_HEADER *ExistingTable, + ACPI_TABLE_HEADER **NewTable) { caddr_t acpi_dsdt, p; @@ -78,37 +73,11 @@ AcpiOsTableOverride ( return (AE_BAD_PARAMETER); /* If we're not overriding the DSDT, just return. */ - *NewTable = NULL; - if ((acpi_dsdt = preload_search_by_type("acpi_dsdt")) == NULL) - return (AE_OK); - if ((p = preload_search_info(acpi_dsdt, MODINFO_ADDR)) == NULL) - return (AE_OK); - - /* - * Override the DSDT with the user's custom version. Override the - * contents of any SSDTs with a simple no-op table since the user's - * DSDT is expected to contain their contents as well. - */ - if (strncmp(ExistingTable->Signature, "DSDT", 4) == 0) { - printf("ACPI: overriding DSDT/SSDT with custom table\n"); - *NewTable = *(void **)p; - } else if (strncmp(ExistingTable->Signature, "SSDT", 4) == 0) { - if (fake_ssdt.Length == 0) { - sprintf(fake_ssdt.Signature, "%.4s", "SSDT"); - fake_ssdt.Length = htole32(sizeof(fake_ssdt)); - fake_ssdt.Revision = 2; - fake_ssdt.Checksum = 0; - sprintf(fake_ssdt.OemId, "%.6s", "FBSD "); - sprintf(fake_ssdt.OemTableId, "%.8s", "NullSSDT"); - fake_ssdt.OemRevision = htole32(1); - sprintf(fake_ssdt.AslCompilerId, "%.4s", "FBSD"); - fake_ssdt.AslCompilerRevision = htole32(1); - fake_ssdt.no_op = htole32(0x005c0310); /* Scope(\) */ - fake_ssdt.Checksum -= AcpiTbGenerateChecksum(&fake_ssdt, - sizeof(fake_ssdt)); - } - *NewTable = (void *)&fake_ssdt; - } + if ((acpi_dsdt = preload_search_by_type("acpi_dsdt")) == NULL || + (p = preload_search_info(acpi_dsdt, MODINFO_ADDR)) == NULL) { + *NewTable = NULL; + } else + *NewTable = *(ACPI_TABLE_HEADER **)p; return (AE_OK); } |