svn commit: r193454 - projects/acpica_20090521/sys/dev/acpica/Osd

Jung-uk Kim jkim at FreeBSD.org
Thu Jun 4 20:53:27 UTC 2009


Author: jkim
Date: Thu Jun  4 20:53:26 2009
New Revision: 193454
URL: http://svn.freebsd.org/changeset/base/193454

Log:
  Fix ACPI table override.  Since ACPI CA 20090123, any ACPI table can be
  overriden, not just DSDT.  However, we do not support this feature yet.

Modified:
  projects/acpica_20090521/sys/dev/acpica/Osd/OsdTable.c

Modified: projects/acpica_20090521/sys/dev/acpica/Osd/OsdTable.c
==============================================================================
--- projects/acpica_20090521/sys/dev/acpica/Osd/OsdTable.c	Thu Jun  4 20:48:31 2009	(r193453)
+++ projects/acpica_20090521/sys/dev/acpica/Osd/OsdTable.c	Thu Jun  4 20:53:26 2009	(r193454)
@@ -67,17 +67,30 @@ ACPI_STATUS
 AcpiOsTableOverride(ACPI_TABLE_HEADER *ExistingTable,
     ACPI_TABLE_HEADER **NewTable)
 {
-    caddr_t acpi_dsdt, p;
+    char modname[] = "acpi_dsdt";
+    caddr_t acpi_table, p, s;
 
     if (ExistingTable == NULL || NewTable == NULL)
 	return (AE_BAD_PARAMETER);
 
+#ifdef notyet
+    for (int i = 0; i < ACPI_NAME_SIZE; i++)
+	modname[i + 5] = tolower(ExistingTable->Signature[i]);
+#else
     /* If we're not overriding the DSDT, just return. */
-    if ((acpi_dsdt = preload_search_by_type("acpi_dsdt")) == NULL ||
-	(p = preload_search_info(acpi_dsdt, MODINFO_ADDR)) == NULL) {
+    if (strncmp(ExistingTable->Signature, "DSDT", ACPI_NAME_SIZE) != 0) {
 	*NewTable = NULL;
-    } else
+	return (AE_OK);
+    }
+#endif
+
+    if ((acpi_table = preload_search_by_type(modname)) != NULL &&
+	(p = preload_search_info(acpi_table, MODINFO_ADDR)) != NULL &&
+	(s = preload_search_info(acpi_table, MODINFO_SIZE)) != NULL &&
+	*(size_t *)s != 0)
 	*NewTable = *(ACPI_TABLE_HEADER **)p;
+    else
+	*NewTable = NULL;
 
     return (AE_OK);
 }


More information about the svn-src-projects mailing list