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