ACPI-CA upstream fixes for acpica-unix-20070126 - Fix compiler warnings. debugger/dbstats.c include/acglobal.h namespace/nsparse.c tables/tbfadt.c - FreeBSD -CURRENT kernel has strstr(). include/platform/acfreebsd.h - Do not traverse reserved indexes for DSDT and FACS. - Do not load SSDTs when DSDT is overriden. Both acpixtract(8) and acpidump(8) generate concatenated SSDTs with DSDT. tables/tbxface.c --- acpica-unix-20070126/include/platform/acfreebsd.h Fri Feb 23 19:58:41 2007 +++ acpica-unix-20070126/include/platform/acfreebsd.h Fri Feb 23 12:24:30 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-20070126/include/acglobal.h Fri Feb 23 19:58:41 2007 +++ acpica-unix-20070126/include/acglobal.h Fri Feb 23 12:24:30 2007 @@ -323,11 +323,13 @@ /* Exception codes */ +#ifndef DEFINE_ACPI_GLOBALS extern char const *AcpiGbl_ExceptionNames_Env[]; extern char const *AcpiGbl_ExceptionNames_Pgm[]; extern char const *AcpiGbl_ExceptionNames_Tbl[]; extern char const *AcpiGbl_ExceptionNames_Aml[]; extern char const *AcpiGbl_ExceptionNames_Ctrl[]; +#endif /***************************************************************************** --- acpica-unix-20070126/debugger/dbstats.c Fri Feb 23 19:58:40 2007 +++ acpica-unix-20070126/debugger/dbstats.c Fri Feb 23 12:24:30 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-20070126/namespace/nsparse.c Fri Feb 23 19:58:43 2007 +++ acpica-unix-20070126/namespace/nsparse.c Fri Feb 23 17:13:16 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-20070126/tables/tbfadt.c Fri Feb 23 19:58:43 2007 +++ acpica-unix-20070126/tables/tbfadt.c Fri Feb 23 17:11:19 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-20070126/tables/tbxface.c Fri Feb 23 19:58:43 2007 +++ acpica-unix-20070126/tables/tbxface.c Fri Feb 23 12:24:31 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; }