ACPI-CA upstream fixes for acpica-unix-20070320 - FreeBSD -CURRENT kernel has strstr(). include/platform/acfreebsd.h - Fix compiler warnings. debugger/dbstats.c events/evmisc.c hardware/hwsleep.c namespace/nsparse.c tables/tbfadt.c - Do not traverse reserved indexes for DSDT and FACS. - Do not load SSDTs when DSDT is overriden. acpidump(8) generates concatenated SSDTs with DSDT. tables/tbxface.c --- acpica-unix-20070320/debugger/dbstats.c Tue Mar 20 15:19:44 2007 +++ acpica-unix-20070320/debugger/dbstats.c Thu Mar 22 17:29:33 2007 @@ -141,9 +141,11 @@ void *Context, void **ReturnValue); +#if defined ACPI_DBG_TRACK_ALLOCATIONS || defined ACPI_USE_LOCAL_CACHE static void AcpiDbListInfo ( ACPI_MEMORY_LIST *List); +#endif /* @@ -522,17 +524,18 @@ case CMD_STAT_MEMORY: #ifdef ACPI_DBG_TRACK_ALLOCATIONS - AcpiOsPrintf ("\n----Object and Cache Statistics (all in hex)---------\n"); + AcpiOsPrintf ("\n----Object Statistics (all in hex)---------\n"); AcpiDbListInfo (AcpiGbl_GlobalList); AcpiDbListInfo (AcpiGbl_NsNodeList); +#endif #ifdef ACPI_USE_LOCAL_CACHE + AcpiOsPrintf ("\n----Cache Statistics (all in hex)----------\n"); AcpiDbListInfo (AcpiGbl_OperandCache); AcpiDbListInfo (AcpiGbl_PsNodeCache); AcpiDbListInfo (AcpiGbl_PsNodeExtCache); AcpiDbListInfo (AcpiGbl_StateCache); -#endif #endif break; --- acpica-unix-20070320/events/evmisc.c Tue Mar 20 15:19:46 2007 +++ acpica-unix-20070320/events/evmisc.c Thu Mar 22 17:30:45 2007 @@ -463,7 +463,8 @@ ACPI_FUNCTION_TRACE (EvInitGlobalLockHandler); - Status = AcpiGetTableByIndex (ACPI_TABLE_INDEX_FACS, (ACPI_TABLE_HEADER **) &Facs); + Status = AcpiGetTableByIndex (ACPI_TABLE_INDEX_FACS, + ACPI_CAST_INDIRECT_PTR (ACPI_TABLE_HEADER, &Facs)); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); --- acpica-unix-20070320/hardware/hwsleep.c Tue Mar 20 15:19:49 2007 +++ acpica-unix-20070320/hardware/hwsleep.c Thu Mar 22 17:30:45 2007 @@ -147,7 +147,8 @@ /* Get the FACS */ - Status = AcpiGetTableByIndex (ACPI_TABLE_INDEX_FACS, (ACPI_TABLE_HEADER **) &Facs); + Status = AcpiGetTableByIndex (ACPI_TABLE_INDEX_FACS, + ACPI_CAST_INDIRECT_PTR (ACPI_TABLE_HEADER, &Facs)); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); @@ -209,7 +210,8 @@ /* Get the FACS */ - Status = AcpiGetTableByIndex (ACPI_TABLE_INDEX_FACS, (ACPI_TABLE_HEADER **) &Facs); + Status = AcpiGetTableByIndex (ACPI_TABLE_INDEX_FACS, + ACPI_CAST_INDIRECT_PTR (ACPI_TABLE_HEADER, &Facs)); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); --- acpica-unix-20070320/include/platform/acfreebsd.h Tue Mar 20 15:19:54 2007 +++ acpica-unix-20070320/include/platform/acfreebsd.h Thu Mar 22 17:29:33 2007 @@ -176,7 +176,7 @@ /* Always use FreeBSD code over our local versions */ #define ACPI_USE_SYSTEM_CLIBRARY -#ifdef _KERNEL +#if defined(_KERNEL) && (__FreeBSD_version < 700020) /* Or strstr (used in debugging mode, also move to libkern) */ static __inline char * strstr (char *s, char *find) --- acpica-unix-20070320/namespace/nsparse.c Tue Mar 20 15:20:02 2007 +++ acpica-unix-20070320/namespace/nsparse.c Thu Mar 22 17:29:33 2007 @@ -211,7 +211,8 @@ /* Parse the AML */ - ACPI_DEBUG_PRINT ((ACPI_DB_PARSE, "*PARSE* pass %d parse\n", PassNumber)); + ACPI_DEBUG_PRINT ((ACPI_DB_PARSE, "*PARSE* pass %lu parse\n", + (unsigned long) PassNumber)); Status = AcpiPsParseAml (WalkState); AcpiPsDeleteParseTree (ParseRoot); --- acpica-unix-20070320/tables/tbfadt.c Tue Mar 20 15:20:06 2007 +++ acpica-unix-20070320/tables/tbfadt.c Thu Mar 22 17:29:33 2007 @@ -320,7 +320,7 @@ if (Length > sizeof (ACPI_TABLE_FADT)) { ACPI_WARNING ((AE_INFO, - "FADT (revision %u) is longer than ACPI 2.0 version, truncating length 0x%X to 0x%X", + "FADT (revision %u) is longer than ACPI 2.0 version, truncating length 0x%X to 0x%zX", Table->Revision, Length, sizeof (ACPI_TABLE_FADT))); } --- acpica-unix-20070320/tables/tbxface.c Tue Mar 20 15:20:07 2007 +++ acpica-unix-20070320/tables/tbxface.c Thu Mar 22 17:29:33 2007 @@ -535,6 +535,7 @@ ACPI_STATUS Status; ACPI_TABLE_HEADER *Table; ACPI_NATIVE_UINT i; + BOOLEAN DsdtOverriden; ACPI_FUNCTION_TRACE (TbLoadNamespace); @@ -558,6 +559,7 @@ /* * Find DSDT table */ + DsdtOverriden = FALSE; Status = AcpiOsTableOverride ( AcpiGbl_RootTableList.Tables[ACPI_TABLE_INDEX_DSDT].Pointer, &Table); if (ACPI_SUCCESS (Status) && Table) @@ -569,6 +571,7 @@ AcpiGbl_RootTableList.Tables[ACPI_TABLE_INDEX_DSDT].Pointer = Table; AcpiGbl_RootTableList.Tables[ACPI_TABLE_INDEX_DSDT].Length = Table->Length; AcpiGbl_RootTableList.Tables[ACPI_TABLE_INDEX_DSDT].Flags = ACPI_TABLE_ORIGIN_UNKNOWN; + DsdtOverriden = TRUE; ACPI_INFO ((AE_INFO, "Table DSDT replaced by host OS")); AcpiTbPrintTableHeader (0, Table); @@ -598,7 +601,7 @@ * Load any SSDT or PSDT tables. Note: Loop leaves tables locked */ (void) AcpiUtAcquireMutex (ACPI_MTX_TABLES); - for (i = 0; i < AcpiGbl_RootTableList.Count; ++i) + for (i = 2; i < AcpiGbl_RootTableList.Count; ++i) { if ((!ACPI_COMPARE_NAME (&(AcpiGbl_RootTableList.Tables[i].Signature), ACPI_SIG_SSDT) && @@ -606,6 +609,15 @@ ACPI_SIG_PSDT)) || ACPI_FAILURE (AcpiTbVerifyTable (&AcpiGbl_RootTableList.Tables[i]))) { + continue; + } + + /* Delete SSDT when DSDT is overriden */ + + if (ACPI_COMPARE_NAME (&(AcpiGbl_RootTableList.Tables[i].Signature), + ACPI_SIG_SSDT) && DsdtOverriden) + { + AcpiTbDeleteTable (&AcpiGbl_RootTableList.Tables[i]); continue; }