summaryrefslogtreecommitdiffstats
path: root/sys/dev/acpica/Osd/OsdTable.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/dev/acpica/Osd/OsdTable.c')
-rw-r--r--sys/dev/acpica/Osd/OsdTable.c57
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);
}
OpenPOWER on IntegriCloud