diff options
Diffstat (limited to 'sys/contrib')
-rw-r--r-- | sys/contrib/dev/acpica/acconfig.h | 60 | ||||
-rw-r--r-- | sys/contrib/dev/acpica/acenv.h | 58 | ||||
-rw-r--r-- | sys/contrib/dev/acpica/acfreebsd.h | 33 | ||||
-rw-r--r-- | sys/contrib/dev/acpica/acgcc.h | 13 | ||||
-rw-r--r-- | sys/contrib/dev/acpica/acpi.h | 4 | ||||
-rw-r--r-- | sys/contrib/dev/acpica/acpiosxf.h | 120 | ||||
-rw-r--r-- | sys/contrib/dev/acpica/acpixf.h | 61 | ||||
-rw-r--r-- | sys/contrib/dev/acpica/acutils.h | 203 | ||||
-rw-r--r-- | sys/contrib/dev/acpica/aecommon.h | 13 | ||||
-rw-r--r-- | sys/contrib/dev/acpica/dbfileio.c | 172 | ||||
-rw-r--r-- | sys/contrib/dev/acpica/dmopcode.c | 99 | ||||
-rw-r--r-- | sys/contrib/dev/acpica/exfldio.c | 196 | ||||
-rw-r--r-- | sys/contrib/dev/acpica/exsystem.c | 187 | ||||
-rw-r--r-- | sys/contrib/dev/acpica/hwregs.c | 354 | ||||
-rw-r--r-- | sys/contrib/dev/acpica/osunixxf.c | 105 | ||||
-rw-r--r-- | sys/contrib/dev/acpica/psparse.c | 72 | ||||
-rw-r--r-- | sys/contrib/dev/acpica/rscreate.c | 129 | ||||
-rw-r--r-- | sys/contrib/dev/acpica/rsdump.c | 102 | ||||
-rw-r--r-- | sys/contrib/dev/acpica/utdebug.c | 73 | ||||
-rw-r--r-- | sys/contrib/dev/acpica/uteval.c | 157 | ||||
-rw-r--r-- | sys/contrib/dev/acpica/utglobal.c | 255 |
21 files changed, 1410 insertions, 1056 deletions
diff --git a/sys/contrib/dev/acpica/acconfig.h b/sys/contrib/dev/acpica/acconfig.h index b35d1d4..c3c15a8 100644 --- a/sys/contrib/dev/acpica/acconfig.h +++ b/sys/contrib/dev/acpica/acconfig.h @@ -1,7 +1,7 @@ /****************************************************************************** * * Name: acconfig.h - Global configuration constants - * $Revision: 169 $ + * $Revision: 1.234 $ * *****************************************************************************/ @@ -9,7 +9,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2005, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2007, Intel Corp. * All rights reserved. * * 2. License @@ -137,7 +137,7 @@ /* Current ACPICA subsystem version in YYYYMMDD format */ -#define ACPI_CA_VERSION 0x20051021 +#define ACPI_CA_VERSION 0x20070320 /* * OS name, used for the _OS object. The _OS object is essentially obsolete, @@ -155,9 +155,10 @@ #define ACPI_MAX_PARSE_CACHE_DEPTH 96 /* Parse tree objects */ #define ACPI_MAX_EXTPARSE_CACHE_DEPTH 96 /* Parse tree objects */ #define ACPI_MAX_OBJECT_CACHE_DEPTH 96 /* Interpreter operand objects */ +#define ACPI_MAX_NAMESPACE_CACHE_DEPTH 96 /* Namespace objects */ /* - * Should the subystem abort the loading of an ACPI table if the + * Should the subsystem abort the loading of an ACPI table if the * table checksum is incorrect? */ #define ACPI_CHECKSUM_ABORT FALSE @@ -173,23 +174,26 @@ #define ACPI_CA_SUPPORT_LEVEL 3 -/* String size constants */ - -#define ACPI_MAX_STRING_LENGTH 512 -#define ACPI_PATHNAME_MAX 256 /* A full namespace pathname */ - /* Maximum count for a semaphore object */ #define ACPI_MAX_SEMAPHORE_COUNT 256 -/* Max reference count (for debug only) */ +/* Maximum object reference count (detects object deletion issues) */ -#define ACPI_MAX_REFERENCE_COUNT 0x400 +#define ACPI_MAX_REFERENCE_COUNT 0x800 /* Size of cached memory mapping for system memory operation region */ #define ACPI_SYSMEM_REGION_WINDOW_SIZE 4096 +/* OwnerId tracking. 8 entries allows for 255 OwnerIds */ + +#define ACPI_NUM_OWNERID_MASKS 8 + +/* Size of the root table array is increased by this increment */ + +#define ACPI_ROOT_TABLE_SIZE_INCREMENT 4 + /****************************************************************************** * @@ -210,14 +214,11 @@ #define ACPI_METHOD_NUM_ARGS 7 #define ACPI_METHOD_MAX_ARG 6 -/* Maximum length of resulting string when converting from a buffer */ - -#define ACPI_MAX_STRING_CONVERSION 200 - -/* Length of _HID, _UID, and _CID values */ +/* Length of _HID, _UID, _CID, and UUID values */ #define ACPI_DEVICE_ID_LENGTH 0x09 #define ACPI_MAX_CID_LENGTH 48 +#define ACPI_UUID_LENGTH 16 /* * Operand Stack (in WALK_STATE), Must be large enough to contain METHOD_MAX_ARG @@ -225,12 +226,28 @@ #define ACPI_OBJ_NUM_OPERANDS 8 #define ACPI_OBJ_MAX_OPERAND 7 +/* Number of elements in the Result Stack frame, can be an arbitrary value */ + +#define ACPI_RESULTS_FRAME_OBJ_NUM 8 + +/* + * Maximal number of elements the Result Stack can contain, + * it may be an arbitray value not exceeding the types of + * ResultSize and ResultCount (now UINT8). + */ +#define ACPI_RESULTS_OBJ_NUM_MAX 255 + /* Names within the namespace are 4 bytes long */ #define ACPI_NAME_SIZE 4 #define ACPI_PATH_SEGMENT_LENGTH 5 /* 4 chars for name + 1 char for separator */ #define ACPI_PATH_SEPARATOR '.' +/* Sizes for ACPI table headers */ + +#define ACPI_OEM_ID_SIZE 6 +#define ACPI_OEM_TABLE_ID_SIZE 8 + /* Constants used in searching for the RSDP in low memory */ #define ACPI_EBDA_PTR_LOCATION 0x0000040E /* Physical Address */ @@ -251,12 +268,7 @@ /* Array sizes. Used for range checking also */ -#define ACPI_NUM_ACCESS_TYPES 6 -#define ACPI_NUM_UPDATE_RULES 3 -#define ACPI_NUM_LOCK_RULES 2 -#define ACPI_NUM_MATCH_OPS 6 -#define ACPI_NUM_OPCODES 256 -#define ACPI_NUM_FIELD_NAMES 2 +#define ACPI_MAX_MATCH_OPCODE 5 /* RSDP checksums */ @@ -267,10 +279,6 @@ #define ACPI_SMBUS_BUFFER_SIZE 34 -/* Number of strings associated with the _OSI reserved method */ - -#define ACPI_NUM_OSI_STRINGS 10 - /****************************************************************************** * diff --git a/sys/contrib/dev/acpica/acenv.h b/sys/contrib/dev/acpica/acenv.h index b0438f1..7ae1042 100644 --- a/sys/contrib/dev/acpica/acenv.h +++ b/sys/contrib/dev/acpica/acenv.h @@ -1,7 +1,7 @@ /****************************************************************************** * * Name: acenv.h - Generation environment specific items - * $Revision: 109 $ + * $Revision: 1.131 $ * *****************************************************************************/ @@ -9,7 +9,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2005, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2007, Intel Corp. * All rights reserved. * * 2. License @@ -123,33 +123,41 @@ */ #ifdef ACPI_LIBRARY +/* + * Note: The non-debug version of the AcpiLibrary does not contain any + * debug support, for minimimal size. The debug version uses ACPI_FULL_DEBUG + */ #define ACPI_USE_LOCAL_CACHE #endif -#ifdef ACPI_DUMP_APP -#ifndef MSDOS +#ifdef ACPI_ASL_COMPILER #define ACPI_DEBUG_OUTPUT -#endif #define ACPI_APPLICATION #define ACPI_DISASSEMBLER -#define ACPI_NO_METHOD_EXECUTION +#define ACPI_CONSTANT_EVAL_ONLY +#define ACPI_LARGE_NAMESPACE_NODE +#define ACPI_DATA_TABLE_DISASSEMBLY #endif #ifdef ACPI_EXEC_APP #undef DEBUGGER_THREADING #define DEBUGGER_THREADING DEBUGGER_SINGLE_THREADED -#define ACPI_DEBUG_OUTPUT +#define ACPI_FULL_DEBUG #define ACPI_APPLICATION #define ACPI_DEBUGGER -#define ACPI_DISASSEMBLER #define ACPI_MUTEX_DEBUG +#define ACPI_DBG_TRACK_ALLOCATIONS #endif -#ifdef ACPI_ASL_COMPILER +#ifdef ACPI_DASM_APP +#ifndef MSDOS #define ACPI_DEBUG_OUTPUT +#endif #define ACPI_APPLICATION #define ACPI_DISASSEMBLER -#define ACPI_CONSTANT_EVAL_ONLY +#define ACPI_NO_METHOD_EXECUTION +#define ACPI_LARGE_NAMESPACE_NODE +#define ACPI_DATA_TABLE_DISASSEMBLY #endif #ifdef ACPI_APPLICATION @@ -157,6 +165,13 @@ #define ACPI_USE_LOCAL_CACHE #endif +#ifdef ACPI_FULL_DEBUG +#define ACPI_DEBUGGER +#define ACPI_DEBUG_OUTPUT +#define ACPI_DISASSEMBLER +#endif + + /* * Environment configuration. The purpose of this file is to interface to the * local generation environment. @@ -211,7 +226,7 @@ #elif defined(MSDOS) /* Must appear after WIN32 and WIN64 check */ #include "acdos16.h" -#elif defined(__FreeBSD__) +#elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__) #include <contrib/dev/acpica/acfreebsd.h> #elif defined(__NetBSD__) @@ -223,6 +238,9 @@ #elif defined(NETWARE) #include "acnetware.h" +#elif defined(__sun) +#include "acsolaris.h" + #else /* All other environments */ @@ -232,24 +250,6 @@ #define COMPILER_DEPENDENT_INT64 long long #define COMPILER_DEPENDENT_UINT64 unsigned long long -/* - * This macro is used to tag functions as "printf-like" because - * some compilers can catch printf format string problems. MSVC - * doesn't, so this is proprocessed away. - */ -#define ACPI_PRINTF_LIKE_FUNC - -#endif - -/* - * Memory allocation tracking. Used only if - * 1) This is the debug version - * 2) This is NOT a 16-bit version of the code (not enough real-mode memory) - */ -#ifdef ACPI_DEBUG_OUTPUT -#if ACPI_MACHINE_WIDTH != 16 -#define ACPI_DBG_TRACK_ALLOCATIONS -#endif #endif /*! [End] no source code translation !*/ diff --git a/sys/contrib/dev/acpica/acfreebsd.h b/sys/contrib/dev/acpica/acfreebsd.h index 91d95e6..bc22ba2 100644 --- a/sys/contrib/dev/acpica/acfreebsd.h +++ b/sys/contrib/dev/acpica/acfreebsd.h @@ -1,7 +1,7 @@ /****************************************************************************** * * Name: acfreebsd.h - OS specific defines, etc. - * $Revision: 17 $ + * $Revision: 1.25 $ * *****************************************************************************/ @@ -9,7 +9,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2005, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2007, Intel Corp. * All rights reserved. * * 2. License @@ -124,6 +124,11 @@ #include <sys/types.h> #include <machine/acpica_machdep.h> +#define ACPI_THREAD_ID pid_t +#define ACPI_UINTPTR_T uintptr_t +#define ACPI_USE_LOCAL_CACHE +#define __cdecl + #ifdef _KERNEL #include "opt_acpi.h" #endif @@ -143,7 +148,9 @@ #ifdef DEBUGGER_THREADING #undef DEBUGGER_THREADING #endif /* DEBUGGER_THREADING */ + #define DEBUGGER_THREADING 0 /* integrated with DDB */ + #ifdef ACPI_DEBUG_OUTPUT #include "opt_ddb.h" #ifdef DDB @@ -169,4 +176,26 @@ /* Always use FreeBSD code over our local versions */ #define ACPI_USE_SYSTEM_CLIBRARY +#if defined(_KERNEL) && (__FreeBSD_version < 700020) +/* Or strstr (used in debugging mode, also move to libkern) */ +static __inline char * +strstr (char *s, char *find) +{ + char c, sc; + size_t len; + + if ((c = *find++) != 0) { + len = strlen (find); + do { + do { + if ((sc = *s++) == 0) + return (NULL); + } while (sc != c); + } while (strncmp (s, find, len) != 0); + s--; + } + return ((char *) s); +} +#endif /* _KERNEL */ + #endif /* __ACFREEBSD_H__ */ diff --git a/sys/contrib/dev/acpica/acgcc.h b/sys/contrib/dev/acpica/acgcc.h index 2f45863..28576b1 100644 --- a/sys/contrib/dev/acpica/acgcc.h +++ b/sys/contrib/dev/acpica/acgcc.h @@ -1,7 +1,7 @@ /****************************************************************************** * * Name: acgcc.h - GCC specific defines, etc. - * $Revision: 26 $ + * $Revision: 1.32 $ * *****************************************************************************/ @@ -9,7 +9,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2005, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2007, Intel Corp. * All rights reserved. * * 2. License @@ -121,16 +121,19 @@ #define ACPI_GET_FUNCTION_NAME __FUNCTION__ -/* This macro is used to tag functions as "printf-like" because +/* + * This macro is used to tag functions as "printf-like" because * some compilers (like GCC) can catch printf format string problems. */ -#define ACPI_PRINTF_LIKE_FUNC __attribute__ ((__format__ (__printf__, 6, 7))) +#define ACPI_PRINTF_LIKE(c) __attribute__ ((__format__ (__printf__, c, c+1))) -/* Some compilers complain about unused variables. Sometimes we don't want to +/* + * Some compilers complain about unused variables. Sometimes we don't want to * use all the variables (for example, _AcpiModuleName). This allows us * to to tell the compiler warning in a per-variable manner that a variable * is unused. */ #define ACPI_UNUSED_VAR __attribute__ ((unused)) + #endif /* __ACGCC_H__ */ diff --git a/sys/contrib/dev/acpica/acpi.h b/sys/contrib/dev/acpica/acpi.h index 7f3ebda..b0f7848 100644 --- a/sys/contrib/dev/acpica/acpi.h +++ b/sys/contrib/dev/acpica/acpi.h @@ -1,7 +1,7 @@ /****************************************************************************** * * Name: acpi.h - Master include file, Publics and external data. - * $Revision: 57 $ + * $Revision: 1.61 $ * *****************************************************************************/ @@ -9,7 +9,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2005, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2007, Intel Corp. * All rights reserved. * * 2. License diff --git a/sys/contrib/dev/acpica/acpiosxf.h b/sys/contrib/dev/acpica/acpiosxf.h index 7f219ef..69997d8 100644 --- a/sys/contrib/dev/acpica/acpiosxf.h +++ b/sys/contrib/dev/acpica/acpiosxf.h @@ -12,7 +12,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2005, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2007, Intel Corp. * All rights reserved. * * 2. License @@ -125,12 +125,18 @@ #include <contrib/dev/acpica/actypes.h> -/* Priorities for AcpiOsQueueForExecution */ +/* Types for AcpiOsExecute */ -#define OSD_PRIORITY_GPE 1 -#define OSD_PRIORITY_HIGH 2 -#define OSD_PRIORITY_MED 3 -#define OSD_PRIORITY_LO 4 +typedef enum +{ + OSL_GLOBAL_LOCK_HANDLER, + OSL_NOTIFY_HANDLER, + OSL_GPE_HANDLER, + OSL_DEBUGGER_THREAD, + OSL_EC_POLL_HANDLER, + OSL_EC_BURST_HANDLER + +} ACPI_EXECUTE_TYPE; #define ACPI_NO_UNIT_LIMIT ((UINT32) -1) #define ACPI_MUTEX_SEM 1 @@ -165,10 +171,9 @@ AcpiOsTerminate ( /* * ACPI Table interfaces */ -ACPI_STATUS +ACPI_PHYSICAL_ADDRESS AcpiOsGetRootPointer ( - UINT32 Flags, - ACPI_POINTER *Address); + void); ACPI_STATUS AcpiOsPredefinedOverride ( @@ -182,45 +187,77 @@ AcpiOsTableOverride ( /* - * Synchronization primitives + * Spinlock primitives + */ +ACPI_STATUS +AcpiOsCreateLock ( + ACPI_SPINLOCK *OutHandle); + +void +AcpiOsDeleteLock ( + ACPI_SPINLOCK Handle); + +ACPI_CPU_FLAGS +AcpiOsAcquireLock ( + ACPI_SPINLOCK Handle); + +void +AcpiOsReleaseLock ( + ACPI_SPINLOCK Handle, + ACPI_CPU_FLAGS Flags); + + +/* + * Semaphore primitives */ ACPI_STATUS AcpiOsCreateSemaphore ( UINT32 MaxUnits, UINT32 InitialUnits, - ACPI_HANDLE *OutHandle); + ACPI_SEMAPHORE *OutHandle); ACPI_STATUS AcpiOsDeleteSemaphore ( - ACPI_HANDLE Handle); + ACPI_SEMAPHORE Handle); ACPI_STATUS AcpiOsWaitSemaphore ( - ACPI_HANDLE Handle, + ACPI_SEMAPHORE Handle, UINT32 Units, UINT16 Timeout); ACPI_STATUS AcpiOsSignalSemaphore ( - ACPI_HANDLE Handle, + ACPI_SEMAPHORE Handle, UINT32 Units); + +/* + * Mutex primitives + */ ACPI_STATUS -AcpiOsCreateLock ( - ACPI_HANDLE *OutHandle); +AcpiOsCreateMutex ( + ACPI_MUTEX *OutHandle); void -AcpiOsDeleteLock ( - ACPI_HANDLE Handle); +AcpiOsDeleteMutex ( + ACPI_MUTEX Handle); -ACPI_NATIVE_UINT -AcpiOsAcquireLock ( - ACPI_HANDLE Handle); +ACPI_STATUS +AcpiOsAcquireMutex ( + ACPI_MUTEX Handle, + UINT16 Timeout); void -AcpiOsReleaseLock ( - ACPI_HANDLE Handle, - ACPI_NATIVE_UINT Flags); +AcpiOsReleaseMutex ( + ACPI_MUTEX Handle); + +/* Temporary macros for Mutex* interfaces, map to existing semaphore xfaces */ + +#define AcpiOsCreateMutex(OutHandle) AcpiOsCreateSemaphore (1, 1, OutHandle) +#define AcpiOsDeleteMutex(Handle) (void) AcpiOsDeleteSemaphore (Handle) +#define AcpiOsAcquireMutex(Handle,Time) AcpiOsWaitSemaphore (Handle, 1, Time) +#define AcpiOsReleaseMutex(Handle) (void) AcpiOsSignalSemaphore (Handle, 1) /* @@ -234,11 +271,10 @@ void AcpiOsFree ( void * Memory); -ACPI_STATUS +void * AcpiOsMapMemory ( - ACPI_PHYSICAL_ADDRESS PhysicalAddress, - ACPI_SIZE Size, - void **LogicalAddress); + ACPI_PHYSICAL_ADDRESS Where, + ACPI_NATIVE_UINT Length); void AcpiOsUnmapMemory ( @@ -297,13 +333,13 @@ AcpiOsRemoveInterruptHandler ( /* * Threads and Scheduling */ -UINT32 +ACPI_THREAD_ID AcpiOsGetThreadId ( void); ACPI_STATUS -AcpiOsQueueForExecution ( - UINT32 Priority, +AcpiOsExecute ( + ACPI_EXECUTE_TYPE Type, ACPI_OSD_EXEC_CALLBACK Function, void *Context); @@ -371,6 +407,7 @@ AcpiOsWritePciConfiguration ( ACPI_INTEGER Value, UINT32 Width); + /* * Interim function needed for PCI IRQ routing */ @@ -380,9 +417,20 @@ AcpiOsDerivePciId( ACPI_HANDLE Chandle, ACPI_PCI_ID **PciId); + /* * Miscellaneous */ +ACPI_STATUS +AcpiOsValidateInterface ( + char *Interface); + +ACPI_STATUS +AcpiOsValidateAddress ( + UINT8 SpaceId, + ACPI_PHYSICAL_ADDRESS Address, + ACPI_SIZE Length); + BOOLEAN AcpiOsReadable ( void *Pointer, @@ -402,6 +450,7 @@ AcpiOsSignal ( UINT32 Function, void *Info); + /* * Debug print routines */ @@ -451,14 +500,5 @@ void AcpiOsCloseDirectory ( void *DirHandle); -/* - * Debug - */ -void -AcpiOsDbgAssert( - void *FailedAssertion, - void *FileName, - UINT32 LineNumber, - char *Message); #endif /* __ACPIOSXF_H__ */ diff --git a/sys/contrib/dev/acpica/acpixf.h b/sys/contrib/dev/acpica/acpixf.h index f895cc2..f85fd67 100644 --- a/sys/contrib/dev/acpica/acpixf.h +++ b/sys/contrib/dev/acpica/acpixf.h @@ -9,7 +9,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2005, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2007, Intel Corp. * All rights reserved. * * 2. License @@ -126,6 +126,12 @@ * Global interfaces */ ACPI_STATUS +AcpiInitializeTables ( + ACPI_TABLE_DESC *InitialStorage, + UINT32 InitialTableCount, + BOOLEAN AllowResize); + +ACPI_STATUS AcpiInitializeSubsystem ( void); @@ -190,40 +196,33 @@ AcpiFree ( * ACPI table manipulation interfaces */ ACPI_STATUS -AcpiFindRootPointer ( - UINT32 Flags, - ACPI_POINTER *RsdpAddress); - -ACPI_STATUS -AcpiLoadTables ( +AcpiReallocateRootTable ( void); ACPI_STATUS -AcpiLoadTable ( - ACPI_TABLE_HEADER *TablePtr); +AcpiFindRootPointer ( + ACPI_NATIVE_UINT *RsdpAddress); ACPI_STATUS -AcpiUnloadTable ( - ACPI_TABLE_TYPE TableType); +AcpiLoadTables ( + void); ACPI_STATUS AcpiGetTableHeader ( - ACPI_TABLE_TYPE TableType, - UINT32 Instance, + ACPI_STRING Signature, + ACPI_NATIVE_UINT Instance, ACPI_TABLE_HEADER *OutTableHeader); ACPI_STATUS AcpiGetTable ( - ACPI_TABLE_TYPE TableType, - UINT32 Instance, - ACPI_BUFFER *RetBuffer); + ACPI_STRING Signature, + ACPI_NATIVE_UINT Instance, + ACPI_TABLE_HEADER **OutTable); ACPI_STATUS -AcpiGetFirmwareTable ( - ACPI_STRING Signature, - UINT32 Instance, - UINT32 Flags, - ACPI_TABLE_HEADER **TablePointer); +AcpiGetTableByIndex ( + ACPI_NATIVE_UINT TableIndex, + ACPI_TABLE_HEADER **OutTable); /* @@ -465,6 +464,12 @@ ACPI_STATUS (*ACPI_WALK_RESOURCE_CALLBACK) ( ACPI_RESOURCE *Resource, void *Context); +ACPI_STATUS +AcpiGetVendorResource ( + ACPI_HANDLE DeviceHandle, + char *Name, + ACPI_VENDOR_UUID *Uuid, + ACPI_BUFFER *RetBuffer); ACPI_STATUS AcpiGetCurrentResources( @@ -478,10 +483,10 @@ AcpiGetPossibleResources( ACPI_STATUS AcpiWalkResources ( - ACPI_HANDLE DeviceHandle, - char *Path, - ACPI_WALK_RESOURCE_CALLBACK UserFunction, - void *Context); + ACPI_HANDLE DeviceHandle, + char *Name, + ACPI_WALK_RESOURCE_CALLBACK UserFunction, + void *Context); ACPI_STATUS AcpiSetCurrentResources ( @@ -504,14 +509,12 @@ AcpiResourceToAddress64 ( ACPI_STATUS AcpiGetRegister ( UINT32 RegisterId, - UINT32 *ReturnValue, - UINT32 Flags); + UINT32 *ReturnValue); ACPI_STATUS AcpiSetRegister ( UINT32 RegisterId, - UINT32 Value, - UINT32 Flags); + UINT32 Value); ACPI_STATUS AcpiSetFirmwareWakingVector ( diff --git a/sys/contrib/dev/acpica/acutils.h b/sys/contrib/dev/acpica/acutils.h index 71de0b0..fef6f08 100644 --- a/sys/contrib/dev/acpica/acutils.h +++ b/sys/contrib/dev/acpica/acutils.h @@ -1,7 +1,7 @@ /****************************************************************************** * * Name: acutils.h -- prototypes for the common (subsystem-wide) procedures - * $Revision: 164 $ + * $Revision: 1.200 $ * *****************************************************************************/ @@ -9,7 +9,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2005, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2007, Intel Corp. * All rights reserved. * * 2. License @@ -118,6 +118,47 @@ #define _ACUTILS_H +extern const UINT8 AcpiGbl_ResourceAmlSizes[]; + +/* Strings used by the disassembler and debugger resource dump routines */ + +#if defined(ACPI_DISASSEMBLER) || defined (ACPI_DEBUGGER) + +extern const char *AcpiGbl_BmDecode[]; +extern const char *AcpiGbl_ConfigDecode[]; +extern const char *AcpiGbl_ConsumeDecode[]; +extern const char *AcpiGbl_DecDecode[]; +extern const char *AcpiGbl_HeDecode[]; +extern const char *AcpiGbl_IoDecode[]; +extern const char *AcpiGbl_LlDecode[]; +extern const char *AcpiGbl_MaxDecode[]; +extern const char *AcpiGbl_MemDecode[]; +extern const char *AcpiGbl_MinDecode[]; +extern const char *AcpiGbl_MtpDecode[]; +extern const char *AcpiGbl_RngDecode[]; +extern const char *AcpiGbl_RwDecode[]; +extern const char *AcpiGbl_ShrDecode[]; +extern const char *AcpiGbl_SizDecode[]; +extern const char *AcpiGbl_TrsDecode[]; +extern const char *AcpiGbl_TtpDecode[]; +extern const char *AcpiGbl_TypDecode[]; +#endif + +/* Types for Resource descriptor entries */ + +#define ACPI_INVALID_RESOURCE 0 +#define ACPI_FIXED_LENGTH 1 +#define ACPI_VARIABLE_LENGTH 2 +#define ACPI_SMALL_VARIABLE_LENGTH 3 + +typedef +ACPI_STATUS (*ACPI_WALK_AML_CALLBACK) ( + UINT8 *Aml, + UINT32 Length, + UINT32 Offset, + UINT8 ResourceIndex, + void *Context); + typedef ACPI_STATUS (*ACPI_PKG_CALLBACK) ( UINT8 ObjectType, @@ -206,10 +247,6 @@ void AcpiUtSubsystemShutdown ( void); -ACPI_STATUS -AcpiUtValidateFadt ( - void); - /* * utclib - Local implementations of C library functions @@ -435,29 +472,34 @@ AcpiUtPtrExit ( UINT8 *Ptr); void -AcpiUtReportInfo ( - char *ModuleName, - UINT32 LineNumber, - UINT32 ComponentId); +AcpiUtDumpBuffer ( + UINT8 *Buffer, + UINT32 Count, + UINT32 Display, + UINT32 componentId); + +void +AcpiUtDumpBuffer2 ( + UINT8 *Buffer, + UINT32 Count, + UINT32 Display); void AcpiUtReportError ( char *ModuleName, - UINT32 LineNumber, - UINT32 ComponentId); + UINT32 LineNumber); void -AcpiUtReportWarning ( +AcpiUtReportInfo ( char *ModuleName, - UINT32 LineNumber, - UINT32 ComponentId); + UINT32 LineNumber); void -AcpiUtDumpBuffer ( - UINT8 *Buffer, - UINT32 Count, - UINT32 Display, - UINT32 componentId); +AcpiUtReportWarning ( + char *ModuleName, + UINT32 LineNumber); + +/* Error and message reporting interfaces */ void ACPI_INTERNAL_VAR_XFACE AcpiUtDebugPrint ( @@ -467,7 +509,7 @@ AcpiUtDebugPrint ( char *ModuleName, UINT32 ComponentId, char *Format, - ...) ACPI_PRINTF_LIKE_FUNC; + ...) ACPI_PRINTF_LIKE(6); void ACPI_INTERNAL_VAR_XFACE AcpiUtDebugPrintRaw ( @@ -477,7 +519,36 @@ AcpiUtDebugPrintRaw ( char *ModuleName, UINT32 ComponentId, char *Format, - ...) ACPI_PRINTF_LIKE_FUNC; + ...) ACPI_PRINTF_LIKE(6); + +void ACPI_INTERNAL_VAR_XFACE +AcpiUtError ( + char *ModuleName, + UINT32 LineNumber, + char *Format, + ...) ACPI_PRINTF_LIKE(3); + +void ACPI_INTERNAL_VAR_XFACE +AcpiUtException ( + char *ModuleName, + UINT32 LineNumber, + ACPI_STATUS Status, + char *Format, + ...) ACPI_PRINTF_LIKE(4); + +void ACPI_INTERNAL_VAR_XFACE +AcpiUtWarning ( + char *ModuleName, + UINT32 LineNumber, + char *Format, + ...) ACPI_PRINTF_LIKE(3); + +void ACPI_INTERNAL_VAR_XFACE +AcpiUtInfo ( + char *ModuleName, + UINT32 LineNumber, + char *Format, + ...) ACPI_PRINTF_LIKE(3); /* @@ -665,6 +736,14 @@ AcpiUtShortDivide ( /* * utmisc */ +const char * +AcpiUtValidateException ( + ACPI_STATUS Status); + +BOOLEAN +AcpiUtIsAmlTable ( + ACPI_TABLE_HEADER *Table); + ACPI_STATUS AcpiUtAllocateOwnerId ( ACPI_OWNER_ID *OwnerId); @@ -693,9 +772,14 @@ BOOLEAN AcpiUtValidAcpiName ( UINT32 Name); +ACPI_NAME +AcpiUtRepairName ( + char *Name); + BOOLEAN -AcpiUtValidAcpiCharacter ( - char Character); +AcpiUtValidAcpiChar ( + char Character, + ACPI_NATIVE_UINT Position); ACPI_STATUS AcpiUtStrtoul64 ( @@ -708,27 +792,6 @@ AcpiUtStrtoul64 ( #define ACPI_ANY_BASE 0 UINT32 -AcpiUtGetDescriptorLength ( - void *Aml); - -UINT16 -AcpiUtGetResourceLength ( - void *Aml); - -UINT8 -AcpiUtGetResourceType ( - void *Aml); - -UINT8 * -AcpiUtGetResourceEndTag ( - ACPI_OPERAND_OBJECT *ObjDesc); - -UINT8 -AcpiUtGenerateChecksum ( - UINT8 *Buffer, - UINT32 Length); - -UINT32 AcpiUtDwordByteSwap ( UINT32 Value); @@ -742,11 +805,47 @@ AcpiUtDisplayInitPathname ( UINT8 Type, ACPI_NAMESPACE_NODE *ObjHandle, char *Path); - #endif /* + * utresrc + */ +ACPI_STATUS +AcpiUtWalkAmlResources ( + UINT8 *Aml, + ACPI_SIZE AmlLength, + ACPI_WALK_AML_CALLBACK UserFunction, + void *Context); + +ACPI_STATUS +AcpiUtValidateResource ( + void *Aml, + UINT8 *ReturnIndex); + +UINT32 +AcpiUtGetDescriptorLength ( + void *Aml); + +UINT16 +AcpiUtGetResourceLength ( + void *Aml); + +UINT8 +AcpiUtGetResourceHeaderLength ( + void *Aml); + +UINT8 +AcpiUtGetResourceType ( + void *Aml); + +ACPI_STATUS +AcpiUtGetResourceEndTag ( + ACPI_OPERAND_OBJECT *ObjDesc, + UINT8 **EndTag); + + +/* * utmutex - mutex support */ ACPI_STATUS @@ -794,7 +893,7 @@ AcpiUtAllocate ( UINT32 Line); void * -AcpiUtCallocate ( +AcpiUtAllocateZeroed ( ACPI_SIZE Size, UINT32 Component, char *Module, @@ -809,7 +908,7 @@ AcpiUtAllocateAndTrack ( UINT32 Line); void * -AcpiUtCallocateAndTrack ( +AcpiUtAllocateZeroedAndTrack ( ACPI_SIZE Size, UINT32 Component, char *Module, @@ -830,6 +929,14 @@ void AcpiUtDumpAllocations ( UINT32 Component, char *Module); + +ACPI_STATUS +AcpiUtCreateList ( + char *ListName, + UINT16 ObjectSize, + ACPI_MEMORY_LIST **ReturnCache); + + #endif #endif /* _ACUTILS_H */ diff --git a/sys/contrib/dev/acpica/aecommon.h b/sys/contrib/dev/acpica/aecommon.h index 609e990..0dd1e5f 100644 --- a/sys/contrib/dev/acpica/aecommon.h +++ b/sys/contrib/dev/acpica/aecommon.h @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2005, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2007, Intel Corp. * All rights reserved. * * 2. License @@ -135,6 +135,7 @@ #include <contrib/dev/acpica/acapps.h> extern FILE *AcpiGbl_DebugFile; +extern BOOLEAN AcpiGbl_IgnoreErrors; /* * Debug Regions @@ -145,6 +146,7 @@ typedef struct Region UINT32 Length; void *Buffer; void *NextRegion; + UINT8 SpaceId; } REGION; @@ -183,7 +185,7 @@ typedef union ptr_ovl #define OSD_PRINT(lvl,fp) TEST_OUTPUT_LEVEL(lvl) {\ AcpiOsPrintf PARAM_LIST(fp);} -void +void __cdecl AeCtrlCHandler ( int Sig); @@ -229,7 +231,12 @@ AeDisplayAllMethods ( UINT32 DisplayCount); ACPI_STATUS -AeInstallHandlers (void); +AeInstallHandlers ( + void); + +void +AeMiscellaneousTests ( + void); #endif /* _AECOMMON */ diff --git a/sys/contrib/dev/acpica/dbfileio.c b/sys/contrib/dev/acpica/dbfileio.c index b82c0ec..dc97d752 100644 --- a/sys/contrib/dev/acpica/dbfileio.c +++ b/sys/contrib/dev/acpica/dbfileio.c @@ -2,7 +2,7 @@ * * Module Name: dbfileio - Debugger file I/O commands. These can't usually * be used when running the debugger in Ring 0 (Kernel mode) - * $Revision: 76 $ + * $Revision: 1.94 $ * ******************************************************************************/ @@ -10,7 +10,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2005, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2007, Intel Corp. * All rights reserved. * * 2. License @@ -120,6 +120,7 @@ #include <contrib/dev/acpica/acdebug.h> #include <contrib/dev/acpica/acnamesp.h> #include <contrib/dev/acpica/actables.h> +#include <contrib/dev/acpica/acdisasm.h> #if (defined ACPI_DEBUGGER || defined ACPI_DISASSEMBLER) @@ -151,7 +152,6 @@ AcpiDbCheckTextModeCorruption ( static ACPI_STATUS AeLocalLoadTable ( ACPI_TABLE_HEADER *TablePtr); - #endif /******************************************************************************* @@ -250,8 +250,8 @@ AcpiDbCheckTextModeCorruption ( if (TableLength != FileLength) { - ACPI_REPORT_WARNING (( - "File length (0x%X) is not the same as the table length (0x%X)\n", + ACPI_WARNING ((AE_INFO, + "File length (0x%X) is not the same as the table length (0x%X)", FileLength, TableLength)); } @@ -277,6 +277,11 @@ AcpiDbCheckTextModeCorruption ( } } + if (!Pairs) + { + return (AE_OK); + } + /* * Entire table scanned, each CR is part of a CR/LF pair -- * meaning that the table was treated as a text file somewhere. @@ -316,61 +321,95 @@ AcpiDbReadTable ( UINT32 Actual; ACPI_STATUS Status; UINT32 FileSize; + BOOLEAN StandardHeader = TRUE; + + /* Get the file size */ fseek (fp, 0, SEEK_END); FileSize = (UINT32) ftell (fp); fseek (fp, 0, SEEK_SET); - /* Read the table header */ - - if (fread (&TableHeader, 1, sizeof (TableHeader), fp) != - sizeof (ACPI_TABLE_HEADER)) + if (FileSize < 4) { - AcpiOsPrintf ("Could not read the table header\n"); return (AE_BAD_HEADER); } - /* Validate the table header/length */ + /* Read the signature */ - Status = AcpiTbValidateTableHeader (&TableHeader); - if (ACPI_FAILURE (Status)) + if (fread (&TableHeader, 1, 4, fp) != 4) { - AcpiOsPrintf ("Table header is invalid!\n"); - return (Status); + AcpiOsPrintf ("Could not read the table signature\n"); + return (AE_BAD_HEADER); } - /* File size must be at least as long as the Header-specified length */ + fseek (fp, 0, SEEK_SET); - if (TableHeader.Length > FileSize) + /* The RSDT and FACS tables do not have standard ACPI headers */ + + if (ACPI_COMPARE_NAME (TableHeader.Signature, "RSD ") || + ACPI_COMPARE_NAME (TableHeader.Signature, "FACS")) { - AcpiOsPrintf ( - "TableHeader length [0x%X] greater than the input file size [0x%X]\n", - TableHeader.Length, FileSize); - return (AE_BAD_HEADER); + *TableLength = FileSize; + StandardHeader = FALSE; } + else + { + /* Read the table header */ + + if (fread (&TableHeader, 1, sizeof (TableHeader), fp) != + sizeof (ACPI_TABLE_HEADER)) + { + AcpiOsPrintf ("Could not read the table header\n"); + return (AE_BAD_HEADER); + } - /* We only support a limited number of table types */ +#if 0 + /* Validate the table header/length */ - if (ACPI_STRNCMP ((char *) TableHeader.Signature, DSDT_SIG, 4) && - ACPI_STRNCMP ((char *) TableHeader.Signature, PSDT_SIG, 4) && - ACPI_STRNCMP ((char *) TableHeader.Signature, SSDT_SIG, 4)) - { - AcpiOsPrintf ("Table signature [%4.4s] is invalid or not supported\n", - (char *) TableHeader.Signature); - ACPI_DUMP_BUFFER (&TableHeader, sizeof (ACPI_TABLE_HEADER)); - return (AE_ERROR); + Status = AcpiTbValidateTableHeader (&TableHeader); + if (ACPI_FAILURE (Status)) + { + AcpiOsPrintf ("Table header is invalid!\n"); + return (Status); + } +#endif + + /* File size must be at least as long as the Header-specified length */ + + if (TableHeader.Length > FileSize) + { + AcpiOsPrintf ( + "TableHeader length [0x%X] greater than the input file size [0x%X]\n", + TableHeader.Length, FileSize); + return (AE_BAD_HEADER); + } + +#ifdef ACPI_OBSOLETE_CODE + /* We only support a limited number of table types */ + + if (ACPI_STRNCMP ((char *) TableHeader.Signature, DSDT_SIG, 4) && + ACPI_STRNCMP ((char *) TableHeader.Signature, PSDT_SIG, 4) && + ACPI_STRNCMP ((char *) TableHeader.Signature, SSDT_SIG, 4)) + { + AcpiOsPrintf ("Table signature [%4.4s] is invalid or not supported\n", + (char *) TableHeader.Signature); + ACPI_DUMP_BUFFER (&TableHeader, sizeof (ACPI_TABLE_HEADER)); + return (AE_ERROR); + } +#endif + + *TableLength = TableHeader.Length; } /* Allocate a buffer for the table */ - *TableLength = TableHeader.Length; - *Table = AcpiOsAllocate ((size_t) (FileSize)); + *Table = AcpiOsAllocate ((size_t) FileSize); if (!*Table) { AcpiOsPrintf ( "Could not allocate memory for ACPI table %4.4s (size=0x%X)\n", - TableHeader.Signature, TableHeader.Length); + TableHeader.Signature, *TableLength); return (AE_NO_MEMORY); } @@ -380,15 +419,19 @@ AcpiDbReadTable ( Actual = fread (*Table, 1, (size_t) FileSize, fp); if (Actual == FileSize) { - /* Now validate the checksum */ + if (StandardHeader) + { + /* Now validate the checksum */ - Status = AcpiTbVerifyTableChecksum (*Table); + Status = AcpiTbChecksum ((void *) *Table, + ACPI_CAST_PTR (ACPI_TABLE_HEADER, *Table)->Length); - if (Status == AE_BAD_CHECKSUM) - { - Status = AcpiDbCheckTextModeCorruption ((UINT8 *) *Table, - FileSize, (*Table)->Length); - return (Status); + if (Status == AE_BAD_CHECKSUM) + { + Status = AcpiDbCheckTextModeCorruption ((UINT8 *) *Table, + FileSize, (*Table)->Length); + return (Status); + } } return (AE_OK); } @@ -429,11 +472,12 @@ static ACPI_STATUS AeLocalLoadTable ( ACPI_TABLE_HEADER *Table) { - ACPI_STATUS Status; - ACPI_TABLE_DESC TableInfo; + ACPI_STATUS Status = AE_OK; +/* ACPI_TABLE_DESC TableInfo; */ - ACPI_FUNCTION_TRACE ("AeLocalLoadTable"); + ACPI_FUNCTION_TRACE (AeLocalLoadTable); +#if 0 if (!Table) @@ -473,10 +517,11 @@ AeLocalLoadTable ( { /* Uninstall table and free the buffer */ - AcpiTbDeleteTablesByType (ACPI_TABLE_DSDT); + AcpiTbDeleteTablesByType (ACPI_TABLE_ID_DSDT); return_ACPI_STATUS (Status); } #endif +#endif return_ACPI_STATUS (Status); } @@ -552,6 +597,7 @@ AcpiDbGetTableFromFile ( #ifdef ACPI_APPLICATION ACPI_STATUS Status; ACPI_TABLE_HEADER *Table; + BOOLEAN IsAmlTable = TRUE; Status = AcpiDbReadTableFromFile (Filename, &Table); @@ -560,28 +606,36 @@ AcpiDbGetTableFromFile ( return (Status); } - /* Attempt to recognize and install the table */ +#ifdef ACPI_DATA_TABLE_DISASSEMBLY + IsAmlTable = AcpiUtIsAmlTable (Table); +#endif - Status = AeLocalLoadTable (Table); - if (ACPI_FAILURE (Status)) + if (IsAmlTable) { - if (Status == AE_ALREADY_EXISTS) - { - AcpiOsPrintf ("Table %4.4s is already installed\n", - Table->Signature); - } - else + /* Attempt to recognize and install the table */ + + Status = AeLocalLoadTable (Table); + if (ACPI_FAILURE (Status)) { - AcpiOsPrintf ("Could not install table, %s\n", - AcpiFormatException (Status)); + if (Status == AE_ALREADY_EXISTS) + { + AcpiOsPrintf ("Table %4.4s is already installed\n", + Table->Signature); + } + else + { + AcpiOsPrintf ("Could not install table, %s\n", + AcpiFormatException (Status)); + } + + return (Status); } - return (Status); + fprintf (stderr, + "Acpi table [%4.4s] successfully installed and loaded\n", + Table->Signature); } - fprintf (stderr, "Acpi table [%4.4s] successfully installed and loaded\n", - Table->Signature); - AcpiGbl_AcpiHardwarePresent = FALSE; if (ReturnTable) { diff --git a/sys/contrib/dev/acpica/dmopcode.c b/sys/contrib/dev/acpica/dmopcode.c index 934d4ba..bdb9eef 100644 --- a/sys/contrib/dev/acpica/dmopcode.c +++ b/sys/contrib/dev/acpica/dmopcode.c @@ -1,7 +1,7 @@ /******************************************************************************* * * Module Name: dmopcode - AML disassembler, specific AML opcodes - * $Revision: 85 $ + * $Revision: 1.101 $ * ******************************************************************************/ @@ -9,7 +9,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2005, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2007, Intel Corp. * All rights reserved. * * 2. License @@ -202,16 +202,16 @@ AcpiDmFieldFlags ( UINT32 Flags; - /* The next Op contains the flags */ + /* The next peer Op (not child op) contains the flags */ - Op = AcpiPsGetDepthNext (NULL, Op); + Op = Op->Common.Next; Flags = (UINT8) Op->Common.Value.Integer; /* Mark the Op as completed */ Op->Common.DisasmFlags |= ACPI_PARSEOP_IGNORE; - AcpiOsPrintf ("%s, ", AcpiGbl_AccessTypes [Flags & 0x0F]); + AcpiOsPrintf ("%s, ", AcpiGbl_AccessTypes [Flags & 0x07]); AcpiOsPrintf ("%s, ", AcpiGbl_LockRule [(Flags & 0x10) >> 4]); AcpiOsPrintf ("%s)", AcpiGbl_UpdateRules [(Flags & 0x60) >> 5]); } @@ -340,14 +340,14 @@ AcpiDmMatchKeyword ( { - if (((UINT32) Op->Common.Value.Integer) >= ACPI_NUM_MATCH_OPS) + if (((UINT32) Op->Common.Value.Integer) > ACPI_MAX_MATCH_OPCODE) { AcpiOsPrintf ("/* Unknown Match Keyword encoding */"); } else { - AcpiOsPrintf ("%s", (char *) (uintptr_t) - AcpiGbl_MatchOps[(ACPI_SIZE) Op->Common.Value.Integer]); + AcpiOsPrintf ("%s", ACPI_CAST_PTR (char, + AcpiGbl_MatchOps[(ACPI_SIZE) Op->Common.Value.Integer])); } } @@ -375,6 +375,8 @@ AcpiDmDisassembleOneOp ( const ACPI_OPCODE_INFO *OpInfo = NULL; UINT32 Offset; UINT32 Length; + ACPI_PARSE_OBJECT *Child; + ACPI_STATUS Status; if (!Op) @@ -390,38 +392,52 @@ AcpiDmDisassembleOneOp ( AcpiDmMatchKeyword (Op); return; - default: - break; - } - - /* The op and arguments */ - - switch (Op->Common.AmlOpcode) - { - case AML_ZERO_OP: - - AcpiOsPrintf ("Zero"); - break; + case ACPI_DASM_LNOT_SUFFIX: + switch (Op->Common.AmlOpcode) + { + case AML_LEQUAL_OP: + AcpiOsPrintf ("LNotEqual"); + break; + case AML_LGREATER_OP: + AcpiOsPrintf ("LLessEqual"); + break; - case AML_ONE_OP: + case AML_LLESS_OP: + AcpiOsPrintf ("LGreaterEqual"); + break; + } + Op->Common.DisasmOpcode = 0; + Op->Common.DisasmFlags |= ACPI_PARSEOP_IGNORE; + return; - AcpiOsPrintf ("One"); + default: break; + } - case AML_ONES_OP: - - AcpiOsPrintf ("Ones"); - break; + OpInfo = AcpiPsGetOpcodeInfo (Op->Common.AmlOpcode); + /* The op and arguments */ - case AML_REVISION_OP: + switch (Op->Common.AmlOpcode) + { + case AML_LNOT_OP: - AcpiOsPrintf ("Revision"); + Child = Op->Common.Value.Arg; + if ((Child->Common.AmlOpcode == AML_LEQUAL_OP) || + (Child->Common.AmlOpcode == AML_LGREATER_OP) || + (Child->Common.AmlOpcode == AML_LLESS_OP)) + { + Child->Common.DisasmOpcode = ACPI_DASM_LNOT_SUFFIX; + Op->Common.DisasmOpcode = ACPI_DASM_LNOT_PREFIX; + } + else + { + AcpiOsPrintf ("%s", OpInfo->Name); + } break; - case AML_BYTE_OP: AcpiOsPrintf ("0x%2.2X", (UINT32) Op->Common.Value.Integer); @@ -481,12 +497,19 @@ AcpiDmDisassembleOneOp ( * types of buffers, we have to closely look at the data in the * buffer to determine the type. */ - if (AcpiDmIsResourceTemplate (Op)) + Status = AcpiDmIsResourceTemplate (Op); + if (ACPI_SUCCESS (Status)) { Op->Common.DisasmOpcode = ACPI_DASM_RESOURCE; AcpiOsPrintf ("ResourceTemplate"); + break; } - else if (AcpiDmIsUnicodeBuffer (Op)) + else if (Status == AE_AML_NO_RESOURCE_END_TAG) + { + AcpiOsPrintf ("/**** Is ResourceTemplate, but EndTag not at buffer end ****/ "); + } + + if (AcpiDmIsUnicodeBuffer (Op)) { Op->Common.DisasmOpcode = ACPI_DASM_UNICODE; AcpiOsPrintf ("Unicode ("); @@ -543,7 +566,7 @@ AcpiDmDisassembleOneOp ( if (Info->BitOffset % 8 == 0) { - AcpiOsPrintf ("Offset (0x%.2X)", ACPI_DIV_8 (Info->BitOffset)); + AcpiOsPrintf (" Offset (0x%.2X)", ACPI_DIV_8 (Info->BitOffset)); } else { @@ -556,8 +579,8 @@ AcpiDmDisassembleOneOp ( case AML_INT_ACCESSFIELD_OP: - AcpiOsPrintf ("AccessAs (%s, ", - AcpiGbl_AccessTypes [(UINT32) Op->Common.Value.Integer >> 8]); + AcpiOsPrintf (" AccessAs (%s, ", + AcpiGbl_AccessTypes [(UINT32) (Op->Common.Value.Integer >> 8) & 0x7]); AcpiDmDecodeAttribute ((UINT8) Op->Common.Value.Integer); AcpiOsPrintf (")"); @@ -573,7 +596,6 @@ AcpiDmDisassembleOneOp ( case AML_INT_METHODCALL_OP: - OpInfo = AcpiPsGetOpcodeInfo (Op->Common.AmlOpcode); Op = AcpiPsGetDepthNext (NULL, Op); Op->Common.DisasmFlags |= ACPI_PARSEOP_IGNORE; @@ -585,7 +607,6 @@ AcpiDmDisassembleOneOp ( /* Just get the opcode name and print it */ - OpInfo = AcpiPsGetOpcodeInfo (Op->Common.AmlOpcode); AcpiOsPrintf ("%s", OpInfo->Name); @@ -594,13 +615,15 @@ AcpiDmDisassembleOneOp ( if ((Op->Common.AmlOpcode == AML_INT_RETURN_VALUE_OP) && (WalkState) && (WalkState->Results) && - (WalkState->Results->Results.NumResults)) + (WalkState->ResultCount)) { AcpiDmDecodeInternalObject ( WalkState->Results->Results.ObjDesc [ - WalkState->Results->Results.NumResults-1]); + (WalkState->ResultCount - 1) % + ACPI_RESULTS_FRAME_OBJ_NUM]); } #endif + break; } } diff --git a/sys/contrib/dev/acpica/exfldio.c b/sys/contrib/dev/acpica/exfldio.c index 7ad5717..1a8631b 100644 --- a/sys/contrib/dev/acpica/exfldio.c +++ b/sys/contrib/dev/acpica/exfldio.c @@ -1,7 +1,7 @@ /****************************************************************************** * * Module Name: exfldio - Aml Field I/O - * $Revision: 111 $ + * $Revision: 1.128 $ * *****************************************************************************/ @@ -9,7 +9,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2005, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2007, Intel Corp. * All rights reserved. * * 2. License @@ -172,7 +172,7 @@ AcpiExSetupRegion ( ACPI_OPERAND_OBJECT *RgnDesc; - ACPI_FUNCTION_TRACE_U32 ("ExSetupRegion", FieldDatumByteOffset); + ACPI_FUNCTION_TRACE_U32 (ExSetupRegion, FieldDatumByteOffset); RgnDesc = ObjDesc->CommonField.RegionObj; @@ -181,7 +181,7 @@ AcpiExSetupRegion ( if (ACPI_GET_OBJECT_TYPE (RgnDesc) != ACPI_TYPE_REGION) { - ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Needed Region, found type %X (%s)\n", + ACPI_ERROR ((AE_INFO, "Needed Region, found type %X (%s)", ACPI_GET_OBJECT_TYPE (RgnDesc), AcpiUtGetObjectTypeName (RgnDesc))); @@ -201,6 +201,17 @@ AcpiExSetupRegion ( } } + /* Exit if Address/Length have been disallowed by the host OS */ + + if (RgnDesc->Common.Flags & AOPOBJ_INVALID) + { + return_ACPI_STATUS (AE_AML_ILLEGAL_ADDRESS); + } + + /* + * Exit now for SMBus address space, it has a non-linear address space + * and the request cannot be directly validated + */ if (RgnDesc->Region.SpaceId == ACPI_ADR_SPACE_SMBUS) { /* SMBus has a non-linear address space */ @@ -227,9 +238,10 @@ AcpiExSetupRegion ( * length of one field datum (access width) must fit within the region. * (Region length is specified in bytes) */ - if (RgnDesc->Region.Length < (ObjDesc->CommonField.BaseByteOffset + - FieldDatumByteOffset + - ObjDesc->CommonField.AccessByteWidth)) + if (RgnDesc->Region.Length < + (ObjDesc->CommonField.BaseByteOffset + + FieldDatumByteOffset + + ObjDesc->CommonField.AccessByteWidth)) { if (AcpiGbl_EnableInterpreterSlack) { @@ -239,10 +251,10 @@ AcpiExSetupRegion ( * access width boundary. */ if (ACPI_ROUND_UP (RgnDesc->Region.Length, - ObjDesc->CommonField.AccessByteWidth) >= + ObjDesc->CommonField.AccessByteWidth) >= (ObjDesc->CommonField.BaseByteOffset + - (ACPI_NATIVE_UINT) ObjDesc->CommonField.AccessByteWidth + - FieldDatumByteOffset)) + (ACPI_NATIVE_UINT) ObjDesc->CommonField.AccessByteWidth + + FieldDatumByteOffset)) { return_ACPI_STATUS (AE_OK); } @@ -255,8 +267,8 @@ AcpiExSetupRegion ( * than the region itself. For example, a region of length one * byte, and a field with Dword access specified. */ - ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, - "Field [%4.4s] access width (%d bytes) too large for region [%4.4s] (length %X)\n", + ACPI_ERROR ((AE_INFO, + "Field [%4.4s] access width (%d bytes) too large for region [%4.4s] (length %X)", AcpiUtGetNodeName (ObjDesc->CommonField.Node), ObjDesc->CommonField.AccessByteWidth, AcpiUtGetNodeName (RgnDesc->Region.Node), @@ -267,8 +279,8 @@ AcpiExSetupRegion ( * Offset rounded up to next multiple of field width * exceeds region length, indicate an error */ - ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, - "Field [%4.4s] Base+Offset+Width %X+%X+%X is beyond end of region [%4.4s] (length %X)\n", + ACPI_ERROR ((AE_INFO, + "Field [%4.4s] Base+Offset+Width %X+%X+%X is beyond end of region [%4.4s] (length %X)", AcpiUtGetNodeName (ObjDesc->CommonField.Node), ObjDesc->CommonField.BaseByteOffset, FieldDatumByteOffset, ObjDesc->CommonField.AccessByteWidth, @@ -312,7 +324,7 @@ AcpiExAccessRegion ( ACPI_PHYSICAL_ADDRESS Address; - ACPI_FUNCTION_TRACE ("ExAccessRegion"); + ACPI_FUNCTION_TRACE (ExAccessRegion); /* @@ -347,13 +359,13 @@ AcpiExAccessRegion ( } ACPI_DEBUG_PRINT_RAW ((ACPI_DB_BFIELD, - " Region [%s:%X], Width %X, ByteBase %X, Offset %X at %8.8X%8.8X\n", + " Region [%s:%X], Width %X, ByteBase %X, Offset %X at %p\n", AcpiUtGetRegionName (RgnDesc->Region.SpaceId), RgnDesc->Region.SpaceId, ObjDesc->CommonField.AccessByteWidth, ObjDesc->CommonField.BaseByteOffset, FieldDatumByteOffset, - ACPI_FORMAT_UINT64 (Address))); + (void *) Address)); /* Invoke the appropriate AddressSpace/OpRegion handler */ @@ -365,15 +377,15 @@ AcpiExAccessRegion ( { if (Status == AE_NOT_IMPLEMENTED) { - ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, - "Region %s(%X) not implemented\n", + ACPI_ERROR ((AE_INFO, + "Region %s(%X) not implemented", AcpiUtGetRegionName (RgnDesc->Region.SpaceId), RgnDesc->Region.SpaceId)); } else if (Status == AE_NOT_EXIST) { - ACPI_REPORT_ERROR (( - "Region %s(%X) has no handler\n", + ACPI_ERROR ((AE_INFO, + "Region %s(%X) has no handler", AcpiUtGetRegionName (RgnDesc->Region.SpaceId), RgnDesc->Region.SpaceId)); } @@ -459,7 +471,7 @@ AcpiExFieldDatumIo ( ACPI_INTEGER LocalValue; - ACPI_FUNCTION_TRACE_U32 ("ExFieldDatumIo", FieldDatumByteOffset); + ACPI_FUNCTION_TRACE_U32 (ExFieldDatumIo, FieldDatumByteOffset); if (ReadWrite == ACPI_READ) @@ -522,9 +534,9 @@ AcpiExFieldDatumIo ( * Length is the field width in bytes. */ ACPI_MEMCPY ((ObjDesc->BufferField.BufferObj)->Buffer.Pointer + - ObjDesc->BufferField.BaseByteOffset + - FieldDatumByteOffset, - Value, ObjDesc->CommonField.AccessByteWidth); + ObjDesc->BufferField.BaseByteOffset + + FieldDatumByteOffset, + Value, ObjDesc->CommonField.AccessByteWidth); } Status = AE_OK; @@ -538,7 +550,7 @@ AcpiExFieldDatumIo ( * the register */ if (AcpiExRegisterOverflow (ObjDesc->BankField.BankObj, - (ACPI_INTEGER) ObjDesc->BankField.Value)) + (ACPI_INTEGER) ObjDesc->BankField.Value)) { return_ACPI_STATUS (AE_AML_REGISTER_LIMIT); } @@ -548,8 +560,8 @@ AcpiExFieldDatumIo ( * (itself a RegionField) before we can access the data. */ Status = AcpiExInsertIntoField (ObjDesc->BankField.BankObj, - &ObjDesc->BankField.Value, - sizeof (ObjDesc->BankField.Value)); + &ObjDesc->BankField.Value, + sizeof (ObjDesc->BankField.Value)); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); @@ -569,7 +581,7 @@ AcpiExFieldDatumIo ( * Operation Region. */ Status = AcpiExAccessRegion (ObjDesc, FieldDatumByteOffset, Value, - ReadWrite); + ReadWrite); break; @@ -581,7 +593,7 @@ AcpiExFieldDatumIo ( * the register */ if (AcpiExRegisterOverflow (ObjDesc->IndexField.IndexObj, - (ACPI_INTEGER) ObjDesc->IndexField.Value)) + (ACPI_INTEGER) ObjDesc->IndexField.Value)) { return_ACPI_STATUS (AE_AML_REGISTER_LIMIT); } @@ -591,41 +603,40 @@ AcpiExFieldDatumIo ( FieldDatumByteOffset += ObjDesc->IndexField.Value; ACPI_DEBUG_PRINT ((ACPI_DB_BFIELD, - "Write to Index Register: Value %8.8X\n", - FieldDatumByteOffset)); + "Write to Index Register: Value %8.8X\n", + FieldDatumByteOffset)); Status = AcpiExInsertIntoField (ObjDesc->IndexField.IndexObj, - &FieldDatumByteOffset, - sizeof (FieldDatumByteOffset)); + &FieldDatumByteOffset, + sizeof (FieldDatumByteOffset)); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } ACPI_DEBUG_PRINT ((ACPI_DB_BFIELD, - "I/O to Data Register: ValuePtr %p\n", - Value)); + "I/O to Data Register: ValuePtr %p\n", Value)); if (ReadWrite == ACPI_READ) { /* Read the datum from the DataRegister */ Status = AcpiExExtractFromField (ObjDesc->IndexField.DataObj, - Value, sizeof (ACPI_INTEGER)); + Value, sizeof (ACPI_INTEGER)); } else { /* Write the datum to the DataRegister */ Status = AcpiExInsertIntoField (ObjDesc->IndexField.DataObj, - Value, sizeof (ACPI_INTEGER)); + Value, sizeof (ACPI_INTEGER)); } break; default: - ACPI_REPORT_ERROR (("Wrong object type in field I/O %X\n", + ACPI_ERROR ((AE_INFO, "Wrong object type in field I/O %X", ACPI_GET_OBJECT_TYPE (ObjDesc))); Status = AE_AML_INTERNAL; break; @@ -680,7 +691,7 @@ AcpiExWriteWithUpdateRule ( ACPI_INTEGER CurrentValue; - ACPI_FUNCTION_TRACE_U32 ("ExWriteWithUpdateRule", Mask); + ACPI_FUNCTION_TRACE_U32 (ExWriteWithUpdateRule, Mask); /* Start with the new bits */ @@ -708,7 +719,7 @@ AcpiExWriteWithUpdateRule ( * the field, and merge with the new field value. */ Status = AcpiExFieldDatumIo (ObjDesc, FieldDatumByteOffset, - &CurrentValue, ACPI_READ); + &CurrentValue, ACPI_READ); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); @@ -734,8 +745,8 @@ AcpiExWriteWithUpdateRule ( default: - ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, - "WriteWithUpdateRule: Unknown UpdateRule setting: %X\n", + ACPI_ERROR ((AE_INFO, + "Unknown UpdateRule value: %X", (ObjDesc->CommonField.FieldFlags & AML_FIELD_UPDATE_RULE_MASK))); return_ACPI_STATUS (AE_AML_OPERAND_VALUE); } @@ -752,7 +763,7 @@ AcpiExWriteWithUpdateRule ( /* Write the merged value */ Status = AcpiExFieldDatumIo (ObjDesc, FieldDatumByteOffset, - &MergedValue, ACPI_WRITE); + &MergedValue, ACPI_WRITE); return_ACPI_STATUS (Status); } @@ -789,16 +800,16 @@ AcpiExExtractFromField ( UINT32 i; - ACPI_FUNCTION_TRACE ("ExExtractFromField"); + ACPI_FUNCTION_TRACE (ExExtractFromField); /* Validate target buffer and clear it */ - if (BufferLength < ACPI_ROUND_BITS_UP_TO_BYTES ( - ObjDesc->CommonField.BitLength)) + if (BufferLength < + ACPI_ROUND_BITS_UP_TO_BYTES (ObjDesc->CommonField.BitLength)) { - ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, - "Field size %X (bits) is too large for buffer (%X)\n", + ACPI_ERROR ((AE_INFO, + "Field size %X (bits) is too large for buffer (%X)", ObjDesc->CommonField.BitLength, BufferLength)); return_ACPI_STATUS (AE_BUFFER_OVERFLOW); @@ -832,17 +843,27 @@ AcpiExExtractFromField ( FieldOffset += ObjDesc->CommonField.AccessByteWidth; Status = AcpiExFieldDatumIo (ObjDesc, FieldOffset, - &RawDatum, ACPI_READ); + &RawDatum, ACPI_READ); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } - /* Merge with previous datum if necessary */ - - MergedDatum |= RawDatum << - (ObjDesc->CommonField.AccessBitWidth - - ObjDesc->CommonField.StartFieldBitOffset); + /* + * Merge with previous datum if necessary. + * + * Note: Before the shift, check if the shift value will be larger than + * the integer size. If so, there is no need to perform the operation. + * This avoids the differences in behavior between different compilers + * concerning shift values larger than the target data width. + */ + if ((ObjDesc->CommonField.AccessBitWidth - + ObjDesc->CommonField.StartFieldBitOffset) < ACPI_INTEGER_BIT_SIZE) + { + MergedDatum |= RawDatum << + (ObjDesc->CommonField.AccessBitWidth - + ObjDesc->CommonField.StartFieldBitOffset); + } if (i == DatumCount) { @@ -853,7 +874,7 @@ AcpiExExtractFromField ( ACPI_MEMCPY (((char *) Buffer) + BufferOffset, &MergedDatum, ACPI_MIN(ObjDesc->CommonField.AccessByteWidth, - BufferLength - BufferOffset)); + BufferLength - BufferOffset)); BufferOffset += ObjDesc->CommonField.AccessByteWidth; MergedDatum = RawDatum >> ObjDesc->CommonField.StartFieldBitOffset; @@ -872,7 +893,7 @@ AcpiExExtractFromField ( ACPI_MEMCPY (((char *) Buffer) + BufferOffset, &MergedDatum, ACPI_MIN(ObjDesc->CommonField.AccessByteWidth, - BufferLength - BufferOffset)); + BufferLength - BufferOffset)); return_ACPI_STATUS (AE_OK); } @@ -900,6 +921,7 @@ AcpiExInsertIntoField ( { ACPI_STATUS Status; ACPI_INTEGER Mask; + ACPI_INTEGER WidthMask; ACPI_INTEGER MergedDatum; ACPI_INTEGER RawDatum = 0; UINT32 FieldOffset = 0; @@ -910,26 +932,43 @@ AcpiExInsertIntoField ( UINT32 i; - ACPI_FUNCTION_TRACE ("ExInsertIntoField"); + ACPI_FUNCTION_TRACE (ExInsertIntoField); /* Validate input buffer */ - if (BufferLength < ACPI_ROUND_BITS_UP_TO_BYTES ( - ObjDesc->CommonField.BitLength)) + if (BufferLength < + ACPI_ROUND_BITS_UP_TO_BYTES (ObjDesc->CommonField.BitLength)) { - ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, - "Field size %X (bits) is too large for buffer (%X)\n", + ACPI_ERROR ((AE_INFO, + "Field size %X (bits) is too large for buffer (%X)", ObjDesc->CommonField.BitLength, BufferLength)); return_ACPI_STATUS (AE_BUFFER_OVERFLOW); } + /* + * Create the bitmasks used for bit insertion. + * Note: This if/else is used to bypass compiler differences with the + * shift operator + */ + if (ObjDesc->CommonField.AccessBitWidth == ACPI_INTEGER_BIT_SIZE) + { + WidthMask = ACPI_INTEGER_MAX; + } + else + { + WidthMask = ACPI_MASK_BITS_ABOVE (ObjDesc->CommonField.AccessBitWidth); + } + + Mask = WidthMask & + ACPI_MASK_BITS_BELOW (ObjDesc->CommonField.StartFieldBitOffset); + /* Compute the number of datums (access width data items) */ - Mask = ACPI_MASK_BITS_BELOW (ObjDesc->CommonField.StartFieldBitOffset); DatumCount = ACPI_ROUND_UP_TO (ObjDesc->CommonField.BitLength, ObjDesc->CommonField.AccessBitWidth); + FieldDatumCount = ACPI_ROUND_UP_TO (ObjDesc->CommonField.BitLength + ObjDesc->CommonField.StartFieldBitOffset, ObjDesc->CommonField.AccessBitWidth); @@ -938,7 +977,7 @@ AcpiExInsertIntoField ( ACPI_MEMCPY (&RawDatum, Buffer, ACPI_MIN(ObjDesc->CommonField.AccessByteWidth, - BufferLength - BufferOffset)); + BufferLength - BufferOffset)); MergedDatum = RawDatum << ObjDesc->CommonField.StartFieldBitOffset; @@ -956,13 +995,30 @@ AcpiExInsertIntoField ( return_ACPI_STATUS (Status); } - /* Start new output datum by merging with previous input datum */ - FieldOffset += ObjDesc->CommonField.AccessByteWidth; - MergedDatum = RawDatum >> - (ObjDesc->CommonField.AccessBitWidth - - ObjDesc->CommonField.StartFieldBitOffset); - Mask = ACPI_INTEGER_MAX; + + /* + * Start new output datum by merging with previous input datum + * if necessary. + * + * Note: Before the shift, check if the shift value will be larger than + * the integer size. If so, there is no need to perform the operation. + * This avoids the differences in behavior between different compilers + * concerning shift values larger than the target data width. + */ + if ((ObjDesc->CommonField.AccessBitWidth - + ObjDesc->CommonField.StartFieldBitOffset) < ACPI_INTEGER_BIT_SIZE) + { + MergedDatum = RawDatum >> + (ObjDesc->CommonField.AccessBitWidth - + ObjDesc->CommonField.StartFieldBitOffset); + } + else + { + MergedDatum = 0; + } + + Mask = WidthMask; if (i == DatumCount) { diff --git a/sys/contrib/dev/acpica/exsystem.c b/sys/contrib/dev/acpica/exsystem.c index b08db06..81c92be 100644 --- a/sys/contrib/dev/acpica/exsystem.c +++ b/sys/contrib/dev/acpica/exsystem.c @@ -2,7 +2,7 @@ /****************************************************************************** * * Module Name: exsystem - Interface to OS services - * $Revision: 81 $ + * $Revision: 1.93 $ * *****************************************************************************/ @@ -10,7 +10,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2005, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2007, Intel Corp. * All rights reserved. * * 2. License @@ -136,23 +136,22 @@ * * DESCRIPTION: Implements a semaphore wait with a check to see if the * semaphore is available immediately. If it is not, the - * interpreter is released. + * interpreter is released before waiting. * ******************************************************************************/ ACPI_STATUS AcpiExSystemWaitSemaphore ( - ACPI_HANDLE Semaphore, + ACPI_SEMAPHORE Semaphore, UINT16 Timeout) { ACPI_STATUS Status; - ACPI_STATUS Status2; - ACPI_FUNCTION_TRACE ("ExSystemWaitSemaphore"); + ACPI_FUNCTION_TRACE (ExSystemWaitSemaphore); - Status = AcpiOsWaitSemaphore (Semaphore, 1, 0); + Status = AcpiOsWaitSemaphore (Semaphore, 1, ACPI_DO_NOT_WAIT); if (ACPI_SUCCESS (Status)) { return_ACPI_STATUS (Status); @@ -162,7 +161,7 @@ AcpiExSystemWaitSemaphore ( { /* We must wait, so unlock the interpreter */ - AcpiExExitInterpreter (); + AcpiExRelinquishInterpreter (); Status = AcpiOsWaitSemaphore (Semaphore, 1, Timeout); @@ -172,13 +171,60 @@ AcpiExSystemWaitSemaphore ( /* Reacquire the interpreter */ - Status2 = AcpiExEnterInterpreter (); - if (ACPI_FAILURE (Status2)) - { - /* Report fatal error, could not acquire interpreter */ + AcpiExReacquireInterpreter (); + } + + return_ACPI_STATUS (Status); +} + + +/******************************************************************************* + * + * FUNCTION: AcpiExSystemWaitMutex + * + * PARAMETERS: Mutex - Mutex to wait on + * Timeout - Max time to wait + * + * RETURN: Status + * + * DESCRIPTION: Implements a mutex wait with a check to see if the + * mutex is available immediately. If it is not, the + * interpreter is released before waiting. + * + ******************************************************************************/ + +ACPI_STATUS +AcpiExSystemWaitMutex ( + ACPI_MUTEX Mutex, + UINT16 Timeout) +{ + ACPI_STATUS Status; + + + ACPI_FUNCTION_TRACE (ExSystemWaitMutex); + + + Status = AcpiOsAcquireMutex (Mutex, ACPI_DO_NOT_WAIT); + if (ACPI_SUCCESS (Status)) + { + return_ACPI_STATUS (Status); + } + + if (Status == AE_TIME) + { + /* We must wait, so unlock the interpreter */ + + AcpiExRelinquishInterpreter (); + + Status = AcpiOsAcquireMutex (Mutex, Timeout); - return_ACPI_STATUS (Status2); - } + ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, + "*** Thread awake after blocking, %s\n", + AcpiFormatException (Status))); + + /* Reacquire the interpreter */ + + AcpiExReacquireInterpreter (); } return_ACPI_STATUS (Status); @@ -220,7 +266,7 @@ AcpiExSystemDoStall ( * (ACPI specifies 100 usec as max, but this gives some slack in * order to support existing BIOSs) */ - ACPI_REPORT_ERROR (("Stall: Time parameter is too large (%d)\n", + ACPI_ERROR ((AE_INFO, "Time parameter is too large (%d)", HowLong)); Status = AE_AML_OPERAND_VALUE; } @@ -250,110 +296,19 @@ ACPI_STATUS AcpiExSystemDoSuspend ( ACPI_INTEGER HowLong) { - ACPI_STATUS Status; - - ACPI_FUNCTION_ENTRY (); /* Since this thread will sleep, we must release the interpreter */ - AcpiExExitInterpreter (); + AcpiExRelinquishInterpreter (); AcpiOsSleep (HowLong); /* And now we must get the interpreter again */ - Status = AcpiExEnterInterpreter (); - return (Status); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiExSystemAcquireMutex - * - * PARAMETERS: TimeDesc - The 'time to delay' object descriptor - * ObjDesc - The object descriptor for this op - * - * RETURN: Status - * - * DESCRIPTION: Provides an access point to perform synchronization operations - * within the AML. This function will cause a lock to be generated - * for the Mutex pointed to by ObjDesc. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiExSystemAcquireMutex ( - ACPI_OPERAND_OBJECT *TimeDesc, - ACPI_OPERAND_OBJECT *ObjDesc) -{ - ACPI_STATUS Status = AE_OK; - - - ACPI_FUNCTION_TRACE_PTR ("ExSystemAcquireMutex", ObjDesc); - - - if (!ObjDesc) - { - return_ACPI_STATUS (AE_BAD_PARAMETER); - } - - /* Support for the _GL_ Mutex object -- go get the global lock */ - - if (ObjDesc->Mutex.Semaphore == AcpiGbl_GlobalLockSemaphore) - { - Status = AcpiEvAcquireGlobalLock ((UINT16) TimeDesc->Integer.Value); - return_ACPI_STATUS (Status); - } - - Status = AcpiExSystemWaitSemaphore (ObjDesc->Mutex.Semaphore, - (UINT16) TimeDesc->Integer.Value); - return_ACPI_STATUS (Status); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiExSystemReleaseMutex - * - * PARAMETERS: ObjDesc - The object descriptor for this op - * - * RETURN: Status - * - * DESCRIPTION: Provides an access point to perform synchronization operations - * within the AML. This operation is a request to release a - * previously acquired Mutex. If the Mutex variable is set then - * it will be decremented. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiExSystemReleaseMutex ( - ACPI_OPERAND_OBJECT *ObjDesc) -{ - ACPI_STATUS Status = AE_OK; - - - ACPI_FUNCTION_TRACE ("ExSystemReleaseMutex"); - - - if (!ObjDesc) - { - return_ACPI_STATUS (AE_BAD_PARAMETER); - } - - /* Support for the _GL_ Mutex object -- release the global lock */ - - if (ObjDesc->Mutex.Semaphore == AcpiGbl_GlobalLockSemaphore) - { - Status = AcpiEvReleaseGlobalLock (); - return_ACPI_STATUS (Status); - } - - Status = AcpiOsSignalSemaphore (ObjDesc->Mutex.Semaphore, 1); - return_ACPI_STATUS (Status); + AcpiExReacquireInterpreter (); + return (AE_OK); } @@ -377,12 +332,12 @@ AcpiExSystemSignalEvent ( ACPI_STATUS Status = AE_OK; - ACPI_FUNCTION_TRACE ("ExSystemSignalEvent"); + ACPI_FUNCTION_TRACE (ExSystemSignalEvent); if (ObjDesc) { - Status = AcpiOsSignalSemaphore (ObjDesc->Event.Semaphore, 1); + Status = AcpiOsSignalSemaphore (ObjDesc->Event.OsSemaphore, 1); } return_ACPI_STATUS (Status); @@ -412,12 +367,12 @@ AcpiExSystemWaitEvent ( ACPI_STATUS Status = AE_OK; - ACPI_FUNCTION_TRACE ("ExSystemWaitEvent"); + ACPI_FUNCTION_TRACE (ExSystemWaitEvent); if (ObjDesc) { - Status = AcpiExSystemWaitSemaphore (ObjDesc->Event.Semaphore, + Status = AcpiExSystemWaitSemaphore (ObjDesc->Event.OsSemaphore, (UINT16) TimeDesc->Integer.Value); } @@ -442,7 +397,7 @@ AcpiExSystemResetEvent ( ACPI_OPERAND_OBJECT *ObjDesc) { ACPI_STATUS Status = AE_OK; - void *TempSemaphore; + ACPI_SEMAPHORE TempSemaphore; ACPI_FUNCTION_ENTRY (); @@ -455,8 +410,8 @@ AcpiExSystemResetEvent ( Status = AcpiOsCreateSemaphore (ACPI_NO_UNIT_LIMIT, 0, &TempSemaphore); if (ACPI_SUCCESS (Status)) { - (void) AcpiOsDeleteSemaphore (ObjDesc->Event.Semaphore); - ObjDesc->Event.Semaphore = TempSemaphore; + (void) AcpiOsDeleteSemaphore (ObjDesc->Event.OsSemaphore); + ObjDesc->Event.OsSemaphore = TempSemaphore; } return (Status); diff --git a/sys/contrib/dev/acpica/hwregs.c b/sys/contrib/dev/acpica/hwregs.c index a3d80cb..36cc47b 100644 --- a/sys/contrib/dev/acpica/hwregs.c +++ b/sys/contrib/dev/acpica/hwregs.c @@ -3,7 +3,7 @@ * * Module Name: hwregs - Read/write access functions for the various ACPI * control and status registers. - * $Revision: 162 $ + * $Revision: 1.187 $ * ******************************************************************************/ @@ -11,7 +11,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2005, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2007, Intel Corp. * All rights reserved. * * 2. License @@ -130,9 +130,9 @@ * * FUNCTION: AcpiHwClearAcpiStatus * - * PARAMETERS: Flags - Lock the hardware or not + * PARAMETERS: None * - * RETURN: none + * RETURN: None * * DESCRIPTION: Clears all fixed and general purpose status bits * THIS FUNCTION MUST BE CALLED WITH INTERRUPTS DISABLED @@ -141,26 +141,20 @@ ACPI_STATUS AcpiHwClearAcpiStatus ( - UINT32 Flags) + void) { ACPI_STATUS Status; + ACPI_CPU_FLAGS LockFlags = 0; - ACPI_FUNCTION_TRACE ("HwClearAcpiStatus"); + ACPI_FUNCTION_TRACE (HwClearAcpiStatus); ACPI_DEBUG_PRINT ((ACPI_DB_IO, "About to write %04X to %04X\n", ACPI_BITMASK_ALL_FIXED_STATUS, - (UINT16) ACPI_GET_ADDRESS (AcpiGbl_FADT->XPm1aEvtBlk.Address))); + (UINT16) AcpiGbl_FADT.XPm1aEventBlock.Address)); - if (Flags & ACPI_MTX_LOCK) - { - Status = AcpiUtAcquireMutex (ACPI_MTX_HARDWARE); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - } + LockFlags = AcpiOsAcquireLock (AcpiGbl_HardwareLock); Status = AcpiHwRegisterWrite (ACPI_MTX_DO_NOT_LOCK, ACPI_REGISTER_PM1_STATUS, @@ -172,10 +166,10 @@ AcpiHwClearAcpiStatus ( /* Clear the fixed events */ - if (ACPI_VALID_ADDRESS (AcpiGbl_FADT->XPm1bEvtBlk.Address)) + if (AcpiGbl_FADT.XPm1bEventBlock.Address) { Status = AcpiHwLowLevelWrite (16, ACPI_BITMASK_ALL_FIXED_STATUS, - &AcpiGbl_FADT->XPm1bEvtBlk); + &AcpiGbl_FADT.XPm1bEventBlock); if (ACPI_FAILURE (Status)) { goto UnlockAndExit; @@ -187,10 +181,7 @@ AcpiHwClearAcpiStatus ( Status = AcpiEvWalkGpeList (AcpiHwClearGpeBlock); UnlockAndExit: - if (Flags & ACPI_MTX_LOCK) - { - (void) AcpiUtReleaseMutex (ACPI_MTX_HARDWARE); - } + AcpiOsReleaseLock (AcpiGbl_HardwareLock, LockFlags); return_ACPI_STATUS (Status); } @@ -217,11 +208,10 @@ AcpiGetSleepTypeData ( UINT8 *SleepTypeB) { ACPI_STATUS Status = AE_OK; - ACPI_PARAMETER_INFO Info; - char *SleepStateName; + ACPI_EVALUATE_INFO *Info; - ACPI_FUNCTION_TRACE ("AcpiGetSleepTypeData"); + ACPI_FUNCTION_TRACE (AcpiGetSleepTypeData); /* Validate parameters */ @@ -232,64 +222,70 @@ AcpiGetSleepTypeData ( return_ACPI_STATUS (AE_BAD_PARAMETER); } - /* Evaluate the namespace object containing the values for this state */ + /* Allocate the evaluation information block */ + + Info = ACPI_ALLOCATE_ZEROED (sizeof (ACPI_EVALUATE_INFO)); + if (!Info) + { + return_ACPI_STATUS (AE_NO_MEMORY); + } - Info.Parameters = NULL; - Info.ReturnObject = NULL; - SleepStateName = (char *) (uintptr_t) AcpiGbl_SleepStateNames[SleepState]; + Info->Pathname = ACPI_CAST_PTR (char, AcpiGbl_SleepStateNames[SleepState]); - Status = AcpiNsEvaluateByName (SleepStateName, &Info); + /* Evaluate the namespace object containing the values for this state */ + + Status = AcpiNsEvaluate (Info); if (ACPI_FAILURE (Status)) { ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "%s while evaluating SleepState [%s]\n", - AcpiFormatException (Status), SleepStateName)); + AcpiFormatException (Status), Info->Pathname)); - return_ACPI_STATUS (Status); + goto Cleanup; } /* Must have a return object */ - if (!Info.ReturnObject) + if (!Info->ReturnObject) { - ACPI_REPORT_ERROR (("No Sleep State object returned from [%s]\n", - SleepStateName)); + ACPI_ERROR ((AE_INFO, "No Sleep State object returned from [%s]", + Info->Pathname)); Status = AE_NOT_EXIST; } /* It must be of type Package */ - else if (ACPI_GET_OBJECT_TYPE (Info.ReturnObject) != ACPI_TYPE_PACKAGE) + else if (ACPI_GET_OBJECT_TYPE (Info->ReturnObject) != ACPI_TYPE_PACKAGE) { - ACPI_REPORT_ERROR (("Sleep State return object is not a Package\n")); + ACPI_ERROR ((AE_INFO, "Sleep State return object is not a Package")); Status = AE_AML_OPERAND_TYPE; } /* - * The package must have at least two elements. NOTE (March 2005): This + * The package must have at least two elements. NOTE (March 2005): This * goes against the current ACPI spec which defines this object as a - * package with one encoded DWORD element. However, existing practice + * package with one encoded DWORD element. However, existing practice * by BIOS vendors seems to be to have 2 or more elements, at least * one per sleep type (A/B). */ - else if (Info.ReturnObject->Package.Count < 2) + else if (Info->ReturnObject->Package.Count < 2) { - ACPI_REPORT_ERROR (( - "Sleep State return package does not have at least two elements\n")); + ACPI_ERROR ((AE_INFO, + "Sleep State return package does not have at least two elements")); Status = AE_AML_NO_OPERAND; } /* The first two elements must both be of type Integer */ - else if ((ACPI_GET_OBJECT_TYPE (Info.ReturnObject->Package.Elements[0]) + else if ((ACPI_GET_OBJECT_TYPE (Info->ReturnObject->Package.Elements[0]) != ACPI_TYPE_INTEGER) || - (ACPI_GET_OBJECT_TYPE (Info.ReturnObject->Package.Elements[1]) + (ACPI_GET_OBJECT_TYPE (Info->ReturnObject->Package.Elements[1]) != ACPI_TYPE_INTEGER)) { - ACPI_REPORT_ERROR (( - "Sleep State return package elements are not both Integers (%s, %s)\n", - AcpiUtGetObjectTypeName (Info.ReturnObject->Package.Elements[0]), - AcpiUtGetObjectTypeName (Info.ReturnObject->Package.Elements[1]))); + ACPI_ERROR ((AE_INFO, + "Sleep State return package elements are not both Integers (%s, %s)", + AcpiUtGetObjectTypeName (Info->ReturnObject->Package.Elements[0]), + AcpiUtGetObjectTypeName (Info->ReturnObject->Package.Elements[1]))); Status = AE_AML_OPERAND_TYPE; } else @@ -297,24 +293,28 @@ AcpiGetSleepTypeData ( /* Valid _Sx_ package size, type, and value */ *SleepTypeA = (UINT8) - (Info.ReturnObject->Package.Elements[0])->Integer.Value; + (Info->ReturnObject->Package.Elements[0])->Integer.Value; *SleepTypeB = (UINT8) - (Info.ReturnObject->Package.Elements[1])->Integer.Value; + (Info->ReturnObject->Package.Elements[1])->Integer.Value; } if (ACPI_FAILURE (Status)) { - ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, - "%s While evaluating SleepState [%s], bad Sleep object %p type %s\n", - AcpiFormatException (Status), - SleepStateName, Info.ReturnObject, - AcpiUtGetObjectTypeName (Info.ReturnObject))); + ACPI_EXCEPTION ((AE_INFO, Status, + "While evaluating SleepState [%s], bad Sleep object %p type %s", + Info->Pathname, Info->ReturnObject, + AcpiUtGetObjectTypeName (Info->ReturnObject))); } - AcpiUtRemoveReference (Info.ReturnObject); + AcpiUtRemoveReference (Info->ReturnObject); + +Cleanup: + ACPI_FREE (Info); return_ACPI_STATUS (Status); } +ACPI_EXPORT_SYMBOL (AcpiGetSleepTypeData) + /******************************************************************************* * @@ -332,12 +332,12 @@ ACPI_BIT_REGISTER_INFO * AcpiHwGetBitRegisterInfo ( UINT32 RegisterId) { - ACPI_FUNCTION_NAME ("HwGetBitRegisterInfo"); + ACPI_FUNCTION_ENTRY (); if (RegisterId > ACPI_BITREG_MAX) { - ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Invalid BitRegister ID: %X\n", RegisterId)); + ACPI_ERROR ((AE_INFO, "Invalid BitRegister ID: %X", RegisterId)); return (NULL); } @@ -351,9 +351,8 @@ AcpiHwGetBitRegisterInfo ( * * PARAMETERS: RegisterId - ID of ACPI BitRegister to access * ReturnValue - Value that was read from the register - * Flags - Lock the hardware or not * - * RETURN: Status and the value read from specified Register. Value + * RETURN: Status and the value read from specified Register. Value * returned is normalized to bit0 (is shifted all the way right) * * DESCRIPTION: ACPI BitRegister read function. @@ -363,15 +362,14 @@ AcpiHwGetBitRegisterInfo ( ACPI_STATUS AcpiGetRegister ( UINT32 RegisterId, - UINT32 *ReturnValue, - UINT32 Flags) + UINT32 *ReturnValue) { UINT32 RegisterValue = 0; ACPI_BIT_REGISTER_INFO *BitRegInfo; ACPI_STATUS Status; - ACPI_FUNCTION_TRACE ("AcpiGetRegister"); + ACPI_FUNCTION_TRACE (AcpiGetRegister); /* Get the info structure corresponding to the requested ACPI Register */ @@ -382,24 +380,10 @@ AcpiGetRegister ( return_ACPI_STATUS (AE_BAD_PARAMETER); } - if (Flags & ACPI_MTX_LOCK) - { - Status = AcpiUtAcquireMutex (ACPI_MTX_HARDWARE); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - } - /* Read from the register */ - Status = AcpiHwRegisterRead (ACPI_MTX_DO_NOT_LOCK, - BitRegInfo->ParentRegister, &RegisterValue); - - if (Flags & ACPI_MTX_LOCK) - { - (void) AcpiUtReleaseMutex (ACPI_MTX_HARDWARE); - } + Status = AcpiHwRegisterRead (ACPI_MTX_LOCK, + BitRegInfo->ParentRegister, &RegisterValue); if (ACPI_SUCCESS (Status)) { @@ -411,12 +395,14 @@ AcpiGetRegister ( *ReturnValue = RegisterValue; ACPI_DEBUG_PRINT ((ACPI_DB_IO, "Read value %8.8X register %X\n", - RegisterValue, BitRegInfo->ParentRegister)); + RegisterValue, BitRegInfo->ParentRegister)); } return_ACPI_STATUS (Status); } +ACPI_EXPORT_SYMBOL (AcpiGetRegister) + /******************************************************************************* * @@ -425,7 +411,6 @@ AcpiGetRegister ( * PARAMETERS: RegisterId - ID of ACPI BitRegister to access * Value - (only used on write) value to write to the * Register, NOT pre-normalized to the bit pos - * Flags - Lock the hardware or not * * RETURN: Status * @@ -436,15 +421,15 @@ AcpiGetRegister ( ACPI_STATUS AcpiSetRegister ( UINT32 RegisterId, - UINT32 Value, - UINT32 Flags) + UINT32 Value) { UINT32 RegisterValue = 0; ACPI_BIT_REGISTER_INFO *BitRegInfo; ACPI_STATUS Status; + ACPI_CPU_FLAGS LockFlags; - ACPI_FUNCTION_TRACE_U32 ("AcpiSetRegister", RegisterId); + ACPI_FUNCTION_TRACE_U32 (AcpiSetRegister, RegisterId); /* Get the info structure corresponding to the requested ACPI Register */ @@ -452,18 +437,11 @@ AcpiSetRegister ( BitRegInfo = AcpiHwGetBitRegisterInfo (RegisterId); if (!BitRegInfo) { - ACPI_REPORT_ERROR (("Bad ACPI HW RegisterId: %X\n", RegisterId)); + ACPI_ERROR ((AE_INFO, "Bad ACPI HW RegisterId: %X", RegisterId)); return_ACPI_STATUS (AE_BAD_PARAMETER); } - if (Flags & ACPI_MTX_LOCK) - { - Status = AcpiUtAcquireMutex (ACPI_MTX_HARDWARE); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - } + LockFlags = AcpiOsAcquireLock (AcpiGbl_HardwareLock); /* Always do a register read first so we can insert the new bits */ @@ -486,8 +464,8 @@ AcpiSetRegister ( case ACPI_REGISTER_PM1_STATUS: /* - * Status Registers are different from the rest. Clear by - * writing 1, and writing 0 has no effect. So, the only relevant + * Status Registers are different from the rest. Clear by + * writing 1, and writing 0 has no effect. So, the only relevant * information is the single bit we're interested in, all others should * be written as 0 so they will be left unchanged. */ @@ -505,7 +483,7 @@ AcpiSetRegister ( case ACPI_REGISTER_PM1_ENABLE: ACPI_REGISTER_INSERT_VALUE (RegisterValue, BitRegInfo->BitPosition, - BitRegInfo->AccessBitMask, Value); + BitRegInfo->AccessBitMask, Value); Status = AcpiHwRegisterWrite (ACPI_MTX_DO_NOT_LOCK, ACPI_REGISTER_PM1_ENABLE, (UINT16) RegisterValue); @@ -519,10 +497,11 @@ AcpiSetRegister ( * Note that at this level, the fact that there are actually TWO * registers (A and B - and B may not exist) is abstracted. */ - ACPI_DEBUG_PRINT ((ACPI_DB_IO, "PM1 control: Read %X\n", RegisterValue)); + ACPI_DEBUG_PRINT ((ACPI_DB_IO, "PM1 control: Read %X\n", + RegisterValue)); ACPI_REGISTER_INSERT_VALUE (RegisterValue, BitRegInfo->BitPosition, - BitRegInfo->AccessBitMask, Value); + BitRegInfo->AccessBitMask, Value); Status = AcpiHwRegisterWrite (ACPI_MTX_DO_NOT_LOCK, ACPI_REGISTER_PM1_CONTROL, (UINT16) RegisterValue); @@ -540,16 +519,14 @@ AcpiSetRegister ( ACPI_DEBUG_PRINT ((ACPI_DB_IO, "PM2 control: Read %X from %8.8X%8.8X\n", RegisterValue, - ACPI_FORMAT_UINT64 (ACPI_GET_ADDRESS ( - AcpiGbl_FADT->XPm2CntBlk.Address)))); + ACPI_FORMAT_UINT64 (AcpiGbl_FADT.XPm2ControlBlock.Address))); ACPI_REGISTER_INSERT_VALUE (RegisterValue, BitRegInfo->BitPosition, BitRegInfo->AccessBitMask, Value); ACPI_DEBUG_PRINT ((ACPI_DB_IO, "About to write %4.4X to %8.8X%8.8X\n", RegisterValue, - ACPI_FORMAT_UINT64 (ACPI_GET_ADDRESS ( - AcpiGbl_FADT->XPm2CntBlk.Address)))); + ACPI_FORMAT_UINT64 (AcpiGbl_FADT.XPm2ControlBlock.Address))); Status = AcpiHwRegisterWrite (ACPI_MTX_DO_NOT_LOCK, ACPI_REGISTER_PM2_CONTROL, (UINT8) (RegisterValue)); @@ -563,10 +540,7 @@ AcpiSetRegister ( UnlockAndExit: - if (Flags & ACPI_MTX_LOCK) - { - (void) AcpiUtReleaseMutex (ACPI_MTX_HARDWARE); - } + AcpiOsReleaseLock (AcpiGbl_HardwareLock, LockFlags); /* Normalize the value that was read */ @@ -575,23 +549,24 @@ UnlockAndExit: BitRegInfo->BitPosition)); ACPI_DEBUG_PRINT ((ACPI_DB_IO, "Set bits: %8.8X actual %8.8X register %X\n", - Value, RegisterValue, BitRegInfo->ParentRegister)); + Value, RegisterValue, BitRegInfo->ParentRegister)); return_ACPI_STATUS (Status); } +ACPI_EXPORT_SYMBOL (AcpiSetRegister) + /****************************************************************************** * * FUNCTION: AcpiHwRegisterRead * - * PARAMETERS: UseLock - Mutex hw access - * RegisterId - RegisterID + Offset + * PARAMETERS: UseLock - Lock hardware? True/False + * RegisterId - ACPI Register ID * ReturnValue - Where the register value is returned * * RETURN: Status and the value read. * - * DESCRIPTION: Acpi register read function. Registers are read at the - * given offset. + * DESCRIPTION: Read from the specified ACPI register * ******************************************************************************/ @@ -604,25 +579,22 @@ AcpiHwRegisterRead ( UINT32 Value1 = 0; UINT32 Value2 = 0; ACPI_STATUS Status; + ACPI_CPU_FLAGS LockFlags = 0; - ACPI_FUNCTION_TRACE ("HwRegisterRead"); + ACPI_FUNCTION_TRACE (HwRegisterRead); if (ACPI_MTX_LOCK == UseLock) { - Status = AcpiUtAcquireMutex (ACPI_MTX_HARDWARE); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } + LockFlags = AcpiOsAcquireLock (AcpiGbl_HardwareLock); } switch (RegisterId) { case ACPI_REGISTER_PM1_STATUS: /* 16-bit access */ - Status = AcpiHwLowLevelRead (16, &Value1, &AcpiGbl_FADT->XPm1aEvtBlk); + Status = AcpiHwLowLevelRead (16, &Value1, &AcpiGbl_FADT.XPm1aEventBlock); if (ACPI_FAILURE (Status)) { goto UnlockAndExit; @@ -630,7 +602,7 @@ AcpiHwRegisterRead ( /* PM1B is optional */ - Status = AcpiHwLowLevelRead (16, &Value2, &AcpiGbl_FADT->XPm1bEvtBlk); + Status = AcpiHwLowLevelRead (16, &Value2, &AcpiGbl_FADT.XPm1bEventBlock); Value1 |= Value2; break; @@ -652,35 +624,35 @@ AcpiHwRegisterRead ( case ACPI_REGISTER_PM1_CONTROL: /* 16-bit access */ - Status = AcpiHwLowLevelRead (16, &Value1, &AcpiGbl_FADT->XPm1aCntBlk); + Status = AcpiHwLowLevelRead (16, &Value1, &AcpiGbl_FADT.XPm1aControlBlock); if (ACPI_FAILURE (Status)) { goto UnlockAndExit; } - Status = AcpiHwLowLevelRead (16, &Value2, &AcpiGbl_FADT->XPm1bCntBlk); + Status = AcpiHwLowLevelRead (16, &Value2, &AcpiGbl_FADT.XPm1bControlBlock); Value1 |= Value2; break; case ACPI_REGISTER_PM2_CONTROL: /* 8-bit access */ - Status = AcpiHwLowLevelRead (8, &Value1, &AcpiGbl_FADT->XPm2CntBlk); + Status = AcpiHwLowLevelRead (8, &Value1, &AcpiGbl_FADT.XPm2ControlBlock); break; case ACPI_REGISTER_PM_TIMER: /* 32-bit access */ - Status = AcpiHwLowLevelRead (32, &Value1, &AcpiGbl_FADT->XPmTmrBlk); + Status = AcpiHwLowLevelRead (32, &Value1, &AcpiGbl_FADT.XPmTimerBlock); break; case ACPI_REGISTER_SMI_COMMAND_BLOCK: /* 8-bit access */ - Status = AcpiOsReadPort (AcpiGbl_FADT->SmiCmd, &Value1, 8); + Status = AcpiOsReadPort (AcpiGbl_FADT.SmiCommand, &Value1, 8); break; default: - ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Unknown Register ID: %X\n", + ACPI_ERROR ((AE_INFO, "Unknown Register ID: %X", RegisterId)); Status = AE_BAD_PARAMETER; break; @@ -689,7 +661,7 @@ AcpiHwRegisterRead ( UnlockAndExit: if (ACPI_MTX_LOCK == UseLock) { - (void) AcpiUtReleaseMutex (ACPI_MTX_HARDWARE); + AcpiOsReleaseLock (AcpiGbl_HardwareLock, LockFlags); } if (ACPI_SUCCESS (Status)) @@ -705,14 +677,26 @@ UnlockAndExit: * * FUNCTION: AcpiHwRegisterWrite * - * PARAMETERS: UseLock - Mutex hw access - * RegisterId - RegisterID + Offset + * PARAMETERS: UseLock - Lock hardware? True/False + * RegisterId - ACPI Register ID * Value - The value to write * * RETURN: Status * - * DESCRIPTION: Acpi register Write function. Registers are written at the - * given offset. + * DESCRIPTION: Write to the specified ACPI register + * + * NOTE: In accordance with the ACPI specification, this function automatically + * preserves the value of the following bits, meaning that these bits cannot be + * changed via this interface: + * + * PM1_CONTROL[0] = SCI_EN + * PM1_CONTROL[9] + * PM1_STATUS[11] + * + * ACPI References: + * 1) Hardware Ignored Bits: When software writes to a register with ignored + * bit fields, it preserves the ignored bit fields + * 2) SCI_EN: OSPM always preserves this bit position * ******************************************************************************/ @@ -723,25 +707,38 @@ AcpiHwRegisterWrite ( UINT32 Value) { ACPI_STATUS Status; + ACPI_CPU_FLAGS LockFlags = 0; + UINT32 ReadValue; - ACPI_FUNCTION_TRACE ("HwRegisterWrite"); + ACPI_FUNCTION_TRACE (HwRegisterWrite); if (ACPI_MTX_LOCK == UseLock) { - Status = AcpiUtAcquireMutex (ACPI_MTX_HARDWARE); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } + LockFlags = AcpiOsAcquireLock (AcpiGbl_HardwareLock); } switch (RegisterId) { case ACPI_REGISTER_PM1_STATUS: /* 16-bit access */ - Status = AcpiHwLowLevelWrite (16, Value, &AcpiGbl_FADT->XPm1aEvtBlk); + /* Perform a read first to preserve certain bits (per ACPI spec) */ + + Status = AcpiHwRegisterRead (ACPI_MTX_DO_NOT_LOCK, + ACPI_REGISTER_PM1_STATUS, &ReadValue); + if (ACPI_FAILURE (Status)) + { + goto UnlockAndExit; + } + + /* Insert the bits to be preserved */ + + ACPI_INSERT_BITS (Value, ACPI_PM1_STATUS_PRESERVED_BITS, ReadValue); + + /* Now we can write the data */ + + Status = AcpiHwLowLevelWrite (16, Value, &AcpiGbl_FADT.XPm1aEventBlock); if (ACPI_FAILURE (Status)) { goto UnlockAndExit; @@ -749,11 +746,11 @@ AcpiHwRegisterWrite ( /* PM1B is optional */ - Status = AcpiHwLowLevelWrite (16, Value, &AcpiGbl_FADT->XPm1bEvtBlk); + Status = AcpiHwLowLevelWrite (16, Value, &AcpiGbl_FADT.XPm1bEventBlock); break; - case ACPI_REGISTER_PM1_ENABLE: /* 16-bit access*/ + case ACPI_REGISTER_PM1_ENABLE: /* 16-bit access */ Status = AcpiHwLowLevelWrite (16, Value, &AcpiGbl_XPm1aEnable); if (ACPI_FAILURE (Status)) @@ -769,37 +766,55 @@ AcpiHwRegisterWrite ( case ACPI_REGISTER_PM1_CONTROL: /* 16-bit access */ - Status = AcpiHwLowLevelWrite (16, Value, &AcpiGbl_FADT->XPm1aCntBlk); + /* + * Perform a read first to preserve certain bits (per ACPI spec) + * + * Note: This includes SCI_EN, we never want to change this bit + */ + Status = AcpiHwRegisterRead (ACPI_MTX_DO_NOT_LOCK, + ACPI_REGISTER_PM1_CONTROL, &ReadValue); + if (ACPI_FAILURE (Status)) + { + goto UnlockAndExit; + } + + /* Insert the bits to be preserved */ + + ACPI_INSERT_BITS (Value, ACPI_PM1_CONTROL_PRESERVED_BITS, ReadValue); + + /* Now we can write the data */ + + Status = AcpiHwLowLevelWrite (16, Value, &AcpiGbl_FADT.XPm1aControlBlock); if (ACPI_FAILURE (Status)) { goto UnlockAndExit; } - Status = AcpiHwLowLevelWrite (16, Value, &AcpiGbl_FADT->XPm1bCntBlk); + Status = AcpiHwLowLevelWrite (16, Value, &AcpiGbl_FADT.XPm1bControlBlock); break; case ACPI_REGISTER_PM1A_CONTROL: /* 16-bit access */ - Status = AcpiHwLowLevelWrite (16, Value, &AcpiGbl_FADT->XPm1aCntBlk); + Status = AcpiHwLowLevelWrite (16, Value, &AcpiGbl_FADT.XPm1aControlBlock); break; case ACPI_REGISTER_PM1B_CONTROL: /* 16-bit access */ - Status = AcpiHwLowLevelWrite (16, Value, &AcpiGbl_FADT->XPm1bCntBlk); + Status = AcpiHwLowLevelWrite (16, Value, &AcpiGbl_FADT.XPm1bControlBlock); break; case ACPI_REGISTER_PM2_CONTROL: /* 8-bit access */ - Status = AcpiHwLowLevelWrite (8, Value, &AcpiGbl_FADT->XPm2CntBlk); + Status = AcpiHwLowLevelWrite (8, Value, &AcpiGbl_FADT.XPm2ControlBlock); break; case ACPI_REGISTER_PM_TIMER: /* 32-bit access */ - Status = AcpiHwLowLevelWrite (32, Value, &AcpiGbl_FADT->XPmTmrBlk); + Status = AcpiHwLowLevelWrite (32, Value, &AcpiGbl_FADT.XPmTimerBlock); break; @@ -807,7 +822,7 @@ AcpiHwRegisterWrite ( /* SMI_CMD is currently always in IO space */ - Status = AcpiOsWritePort (AcpiGbl_FADT->SmiCmd, Value, 8); + Status = AcpiOsWritePort (AcpiGbl_FADT.SmiCommand, Value, 8); break; @@ -819,7 +834,7 @@ AcpiHwRegisterWrite ( UnlockAndExit: if (ACPI_MTX_LOCK == UseLock) { - (void) AcpiUtReleaseMutex (ACPI_MTX_HARDWARE); + AcpiOsReleaseLock (AcpiGbl_HardwareLock, LockFlags); } return_ACPI_STATUS (Status); @@ -850,7 +865,7 @@ AcpiHwLowLevelRead ( ACPI_STATUS Status; - ACPI_FUNCTION_NAME ("HwLowLevelRead"); + ACPI_FUNCTION_NAME (HwLowLevelRead); /* @@ -863,10 +878,10 @@ AcpiHwLowLevelRead ( return (AE_OK); } - /* Get a local copy of the address. Handles possible alignment issues */ + /* Get a local copy of the address. Handles possible alignment issues */ ACPI_MOVE_64_TO_64 (&Address, &Reg->Address); - if (!ACPI_VALID_ADDRESS (Address)) + if (!Address) { return (AE_OK); } @@ -876,34 +891,31 @@ AcpiHwLowLevelRead ( * Two address spaces supported: Memory or IO. * PCI_Config is not supported here because the GAS struct is insufficient */ - switch (Reg->AddressSpaceId) + switch (Reg->SpaceId) { case ACPI_ADR_SPACE_SYSTEM_MEMORY: Status = AcpiOsReadMemory ( - (ACPI_PHYSICAL_ADDRESS) ACPI_GET_ADDRESS (Address), - Value, Width); + (ACPI_PHYSICAL_ADDRESS) Address, Value, Width); break; case ACPI_ADR_SPACE_SYSTEM_IO: - Status = AcpiOsReadPort ((ACPI_IO_ADDRESS) ACPI_GET_ADDRESS (Address), - Value, Width); + Status = AcpiOsReadPort ((ACPI_IO_ADDRESS) Address, Value, Width); break; default: - ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, - "Unsupported address space: %X\n", Reg->AddressSpaceId)); + ACPI_ERROR ((AE_INFO, + "Unsupported address space: %X", Reg->SpaceId)); return (AE_BAD_PARAMETER); } ACPI_DEBUG_PRINT ((ACPI_DB_IO, "Read: %8.8X width %2d from %8.8X%8.8X (%s)\n", - *Value, Width, - ACPI_FORMAT_UINT64 (ACPI_GET_ADDRESS (Address)), - AcpiUtGetRegionName (Reg->AddressSpaceId))); + *Value, Width, ACPI_FORMAT_UINT64 (Address), + AcpiUtGetRegionName (Reg->SpaceId))); return (Status); } @@ -933,7 +945,7 @@ AcpiHwLowLevelWrite ( ACPI_STATUS Status; - ACPI_FUNCTION_NAME ("HwLowLevelWrite"); + ACPI_FUNCTION_NAME (HwLowLevelWrite); /* @@ -946,10 +958,10 @@ AcpiHwLowLevelWrite ( return (AE_OK); } - /* Get a local copy of the address. Handles possible alignment issues */ + /* Get a local copy of the address. Handles possible alignment issues */ ACPI_MOVE_64_TO_64 (&Address, &Reg->Address); - if (!ACPI_VALID_ADDRESS (Address)) + if (!Address) { return (AE_OK); } @@ -958,34 +970,32 @@ AcpiHwLowLevelWrite ( * Two address spaces supported: Memory or IO. * PCI_Config is not supported here because the GAS struct is insufficient */ - switch (Reg->AddressSpaceId) + switch (Reg->SpaceId) { case ACPI_ADR_SPACE_SYSTEM_MEMORY: Status = AcpiOsWriteMemory ( - (ACPI_PHYSICAL_ADDRESS) ACPI_GET_ADDRESS (Address), - Value, Width); + (ACPI_PHYSICAL_ADDRESS) Address, Value, Width); break; case ACPI_ADR_SPACE_SYSTEM_IO: - Status = AcpiOsWritePort ((ACPI_IO_ADDRESS) ACPI_GET_ADDRESS (Address), - Value, Width); + Status = AcpiOsWritePort ( + (ACPI_IO_ADDRESS) Address, Value, Width); break; default: - ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, - "Unsupported address space: %X\n", Reg->AddressSpaceId)); + ACPI_ERROR ((AE_INFO, + "Unsupported address space: %X", Reg->SpaceId)); return (AE_BAD_PARAMETER); } ACPI_DEBUG_PRINT ((ACPI_DB_IO, "Wrote: %8.8X width %2d to %8.8X%8.8X (%s)\n", - Value, Width, - ACPI_FORMAT_UINT64 (ACPI_GET_ADDRESS (Address)), - AcpiUtGetRegionName (Reg->AddressSpaceId))); + Value, Width, ACPI_FORMAT_UINT64 (Address), + AcpiUtGetRegionName (Reg->SpaceId))); return (Status); } diff --git a/sys/contrib/dev/acpica/osunixxf.c b/sys/contrib/dev/acpica/osunixxf.c index 91e11fd..8fc21fc 100644 --- a/sys/contrib/dev/acpica/osunixxf.c +++ b/sys/contrib/dev/acpica/osunixxf.c @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2005, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2007, Intel Corp. * All rights reserved. * * 2. License @@ -130,8 +130,6 @@ #include <contrib/dev/acpica/acparser.h> #include <contrib/dev/acpica/acdebug.h> -#include <contrib/dev/acpica/compiler/aslcompiler.h> - #define _COMPONENT ACPI_OS_SERVICES ACPI_MODULE_NAME ("osunixxf") @@ -139,6 +137,10 @@ extern FILE *AcpiGbl_DebugFile; FILE *AcpiGbl_OutputFile; +ACPI_PHYSICAL_ADDRESS +AeLocalGetRootPointer ( + void); + /****************************************************************************** * @@ -172,22 +174,20 @@ AcpiOsTerminate (void) * * FUNCTION: AcpiOsGetRootPointer * - * PARAMETERS: Flags - Logical or physical addressing mode - * Address - Where the address is returned + * PARAMETERS: None * - * RETURN: Status + * RETURN: RSDP physical address * * DESCRIPTION: Gets the root pointer (RSDP) * *****************************************************************************/ -ACPI_STATUS +ACPI_PHYSICAL_ADDRESS AcpiOsGetRootPointer ( - UINT32 Flags, - ACPI_POINTER *Address) + void) { - return (AeLocalGetRootPointer(Flags, (ACPI_PHYSICAL_ADDRESS *) Address)); + return (AeLocalGetRootPointer ()); } @@ -252,7 +252,7 @@ AcpiOsTableOverride ( /* This code exercises the table override mechanism in the core */ - if (!ACPI_STRNCMP (ExistingTable->Signature, DSDT_SIG, ACPI_NAME_SIZE)) + if (ACPI_COMPARE_NAME (ExistingTable->Signature, ACPI_SIG_DSDT)) { /* override DSDT with itself */ @@ -458,7 +458,6 @@ AcpiOsGetLine ( * * PARAMETERS: where Physical address of memory to be mapped * length How much memory to map - * there Logical address of mapped memory * * RETURN: Pointer to mapped memory. Null on error. * @@ -466,15 +465,13 @@ AcpiOsGetLine ( * *****************************************************************************/ -ACPI_STATUS +void * AcpiOsMapMemory ( ACPI_PHYSICAL_ADDRESS where, - ACPI_SIZE length, - void **there) + ACPI_SIZE length) { - *there = ACPI_TO_POINTER (where); - return AE_OK; + return (ACPI_TO_POINTER ((ACPI_NATIVE_UINT) where)); } @@ -652,7 +649,7 @@ AcpiOsSignalSemaphore ( ACPI_STATUS AcpiOsCreateLock ( - ACPI_HANDLE *OutHandle) + ACPI_SPINLOCK *OutHandle) { return (AcpiOsCreateSemaphore (1, 1, OutHandle)); @@ -660,13 +657,13 @@ AcpiOsCreateLock ( void AcpiOsDeleteLock ( - ACPI_HANDLE Handle) + ACPI_SPINLOCK Handle) { AcpiOsDeleteSemaphore (Handle); } -ACPI_NATIVE_UINT +ACPI_CPU_FLAGS AcpiOsAcquireLock ( ACPI_HANDLE Handle) { @@ -677,8 +674,8 @@ AcpiOsAcquireLock ( void AcpiOsReleaseLock ( - ACPI_HANDLE Handle, - ACPI_NATIVE_UINT Flags) + ACPI_SPINLOCK Handle, + ACPI_CPU_FLAGS Flags) { AcpiOsSignalSemaphore (Handle, 1); } @@ -735,21 +732,21 @@ AcpiOsRemoveInterruptHandler ( /****************************************************************************** * - * FUNCTION: AcpiOsQueueForExecution + * FUNCTION: AcpiOsExecute * - * PARAMETERS: Priority - Requested execution priority + * PARAMETERS: Type - Type of execution * Function - Address of the function to execute * Context - Passed as a parameter to the function * * RETURN: Status. * - * DESCRIPTION: Sleep at microsecond granularity + * DESCRIPTION: Execute a new thread * *****************************************************************************/ ACPI_STATUS -AcpiOsQueueForExecution ( - UINT32 Priority, +AcpiOsExecute ( + ACPI_EXECUTE_TYPE Type, ACPI_OSD_EXEC_CALLBACK Function, void *Context) { @@ -776,8 +773,6 @@ AcpiOsBreakpoint ( char *Msg) { - /* Print the message and do an INT 3 */ - if (Msg) { AcpiOsPrintf ("AcpiOsBreakpoint: %s ****\n", Msg); @@ -787,7 +782,6 @@ AcpiOsBreakpoint ( AcpiOsPrintf ("At AcpiOsBreakpoint ****\n"); } - return AE_OK; } @@ -871,6 +865,55 @@ AcpiOsGetTimer (void) /****************************************************************************** * + * FUNCTION: AcpiOsValidateInterface + * + * PARAMETERS: Interface - Requested interface to be validated + * + * RETURN: AE_OK if interface is supported, AE_SUPPORT otherwise + * + * DESCRIPTION: Match an interface string to the interfaces supported by the + * host. Strings originate from an AML call to the _OSI method. + * + *****************************************************************************/ + +ACPI_STATUS +AcpiOsValidateInterface ( + char *Interface) +{ + + return (AE_SUPPORT); +} + + +/****************************************************************************** + * + * FUNCTION: AcpiOsValidateAddress + * + * PARAMETERS: SpaceId - ACPI space ID + * Address - Physical address + * Length - Address length + * + * RETURN: AE_OK if Address/Length is valid for the SpaceId. Otherwise, + * should return AE_AML_ILLEGAL_ADDRESS. + * + * DESCRIPTION: Validate a system address via the host OS. Used to validate + * the addresses accessed by AML operation regions. + * + *****************************************************************************/ + +ACPI_STATUS +AcpiOsValidateAddress ( + UINT8 SpaceId, + ACPI_PHYSICAL_ADDRESS Address, + ACPI_SIZE Length) +{ + + return (AE_OK); +} + + +/****************************************************************************** + * * FUNCTION: AcpiOsReadPciConfiguration * * PARAMETERS: PciId Seg/Bus/Dev @@ -1060,7 +1103,7 @@ AcpiOsWriteMemory ( } -UINT32 +ACPI_THREAD_ID AcpiOsGetThreadId(void) { return getpid(); diff --git a/sys/contrib/dev/acpica/psparse.c b/sys/contrib/dev/acpica/psparse.c index b9d34ed..e0afab8 100644 --- a/sys/contrib/dev/acpica/psparse.c +++ b/sys/contrib/dev/acpica/psparse.c @@ -1,7 +1,7 @@ /****************************************************************************** * * Module Name: psparse - Parser top level AML parse routines - * $Revision: 146 $ + * $Revision: 1.171 $ * *****************************************************************************/ @@ -9,7 +9,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2005, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2007, Intel Corp. * All rights reserved. * * 2. License @@ -224,7 +224,7 @@ AcpiPsCompleteThisOp ( ACPI_PARSE_OBJECT *ReplacementOp = NULL; - ACPI_FUNCTION_TRACE_PTR ("PsCompleteThisOp", Op); + ACPI_FUNCTION_TRACE_PTR (PsCompleteThisOp, Op); /* Check for null Op, can happen if AML code is corrupt */ @@ -415,13 +415,12 @@ AcpiPsNextParseState ( ACPI_STATUS Status = AE_CTRL_PENDING; - ACPI_FUNCTION_TRACE_PTR ("PsNextParseState", Op); + ACPI_FUNCTION_TRACE_PTR (PsNextParseState, Op); switch (CallbackStatus) { case AE_CTRL_TERMINATE: - /* * A control method was terminated via a RETURN statement. * The walk of this method is complete. @@ -438,13 +437,14 @@ AcpiPsNextParseState ( Status = AE_CTRL_BREAK; break; - case AE_CTRL_CONTINUE: + case AE_CTRL_CONTINUE: ParserState->Aml = WalkState->AmlLastWhile; Status = AE_CTRL_CONTINUE; break; + case AE_CTRL_PENDING: ParserState->Aml = WalkState->AmlLastWhile; @@ -459,17 +459,16 @@ AcpiPsNextParseState ( #endif case AE_CTRL_TRUE: - /* * Predicate of an IF was true, and we are at the matching ELSE. * Just close out this package */ ParserState->Aml = AcpiPsGetNextPackageEnd (ParserState); + Status = AE_CTRL_PENDING; break; case AE_CTRL_FALSE: - /* * Either an IF/WHILE Predicate was false or we encountered a BREAK * opcode. In both cases, we do not execute the rest of the @@ -538,7 +537,7 @@ AcpiPsParseAml ( ACPI_WALK_STATE *PreviousWalkState; - ACPI_FUNCTION_TRACE ("PsParseAml"); + ACPI_FUNCTION_TRACE (PsParseAml); ACPI_DEBUG_PRINT ((ACPI_DB_PARSE, "Entered with WalkState=%p Aml=%p size=%X\n", @@ -551,10 +550,21 @@ AcpiPsParseAml ( Thread = AcpiUtCreateThreadState (); if (!Thread) { + AcpiDsDeleteWalkState (WalkState); return_ACPI_STATUS (AE_NO_MEMORY); } WalkState->Thread = Thread; + + /* + * If executing a method, the starting SyncLevel is this method's + * SyncLevel + */ + if (WalkState->MethodDesc) + { + WalkState->Thread->CurrentSyncLevel = WalkState->MethodDesc->Method.SyncLevel; + } + AcpiDsPushWalkState (WalkState, Thread); /* @@ -592,6 +602,10 @@ AcpiPsParseAml ( * Transfer control to the called control method */ Status = AcpiDsCallControlMethod (Thread, WalkState, NULL); + if (ACPI_FAILURE (Status)) + { + Status = AcpiDsMethodError (Status, WalkState); + } /* * If the transfer to the new method method call worked, a new walk @@ -606,26 +620,30 @@ AcpiPsParseAml ( } else if ((Status != AE_OK) && (WalkState->MethodDesc)) { - ACPI_REPORT_METHOD_ERROR ("Method execution failed", - WalkState->MethodNode, NULL, Status); + /* Either the method parse or actual execution failed */ - /* Ensure proper cleanup */ - - WalkState->ParseFlags |= ACPI_PARSE_EXECUTE; + ACPI_ERROR_METHOD ("Method parse/execution failed", + WalkState->MethodNode, NULL, Status); /* Check for possible multi-thread reentrancy problem */ if ((Status == AE_ALREADY_EXISTS) && - (!WalkState->MethodDesc->Method.Semaphore)) + (!WalkState->MethodDesc->Method.Mutex)) { + ACPI_INFO ((AE_INFO, "Marking method %4.4s as Serialized", + WalkState->MethodNode->Name.Ascii)); + /* - * This method is marked NotSerialized, but it tried to create + * Method tried to create an object twice. The probable cause is + * that the method cannot handle reentrancy. + * + * The method is marked NotSerialized, but it tried to create * a named object, causing the second thread entrance to fail. - * We will workaround this by marking the method permanently + * Workaround this problem by marking the method permanently * as Serialized. */ WalkState->MethodDesc->Method.MethodFlags |= AML_METHOD_SERIALIZED; - WalkState->MethodDesc->Method.Concurrency = 1; + WalkState->MethodDesc->Method.SyncLevel = 0; } } @@ -638,25 +656,19 @@ AcpiPsParseAml ( AcpiDsScopeStackClear (WalkState); /* - * If we just returned from the execution of a control method, - * there's lots of cleanup to do + * If we just returned from the execution of a control method or if we + * encountered an error during the method parse phase, there's lots of + * cleanup to do */ - if ((WalkState->ParseFlags & ACPI_PARSE_MODE_MASK) == ACPI_PARSE_EXECUTE) + if (((WalkState->ParseFlags & ACPI_PARSE_MODE_MASK) == ACPI_PARSE_EXECUTE) || + (ACPI_FAILURE (Status))) { - if (WalkState->MethodDesc) - { - /* Decrement the thread count on the method parse tree */ - - WalkState->MethodDesc->Method.ThreadCount--; - } - - AcpiDsTerminateControlMethod (WalkState); + AcpiDsTerminateControlMethod (WalkState->MethodDesc, WalkState); } /* Delete this walk state and all linked control states */ AcpiPsCleanupScope (&WalkState->ParserState); - PreviousWalkState = WalkState; ACPI_DEBUG_PRINT ((ACPI_DB_PARSE, diff --git a/sys/contrib/dev/acpica/rscreate.c b/sys/contrib/dev/acpica/rscreate.c index f65606a..6b986ea 100644 --- a/sys/contrib/dev/acpica/rscreate.c +++ b/sys/contrib/dev/acpica/rscreate.c @@ -1,7 +1,7 @@ /******************************************************************************* * * Module Name: rscreate - Create resource lists/tables - * $Revision: 66 $ + * $Revision: 1.78 $ * ******************************************************************************/ @@ -9,7 +9,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2005, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2007, Intel Corp. * All rights reserved. * * 2. License @@ -154,9 +154,10 @@ AcpiRsCreateResourceList ( UINT8 *AmlStart; ACPI_SIZE ListSizeNeeded = 0; UINT32 AmlBufferLength; + void *Resource; - ACPI_FUNCTION_TRACE ("RsCreateResourceList"); + ACPI_FUNCTION_TRACE (RsCreateResourceList); ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "AmlBuffer = %p\n", @@ -191,8 +192,9 @@ AcpiRsCreateResourceList ( /* Do the conversion */ - Status = AcpiRsConvertAmlToResources (AmlStart, AmlBufferLength, - OutputBuffer->Pointer); + Resource = OutputBuffer->Pointer; + Status = AcpiUtWalkAmlResources (AmlStart, AmlBufferLength, + AcpiRsConvertAmlToResources, &Resource); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); @@ -243,7 +245,7 @@ AcpiRsCreatePciRoutingTable ( ACPI_BUFFER PathBuffer; - ACPI_FUNCTION_TRACE ("RsCreatePciRoutingTable"); + ACPI_FUNCTION_TRACE (RsCreatePciRoutingTable); /* Params already validated, so we don't re-validate here */ @@ -300,8 +302,8 @@ AcpiRsCreatePciRoutingTable ( if (ACPI_GET_OBJECT_TYPE (*TopObjectList) != ACPI_TYPE_PACKAGE) { - ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, - "(PRT[%X]) Need sub-package, found %s\n", + ACPI_ERROR ((AE_INFO, + "(PRT[%X]) Need sub-package, found %s", Index, AcpiUtGetObjectTypeName (*TopObjectList))); return_ACPI_STATUS (AE_AML_OPERAND_TYPE); } @@ -310,8 +312,8 @@ AcpiRsCreatePciRoutingTable ( if ((*TopObjectList)->Package.Count != 4) { - ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, - "(PRT[%X]) Need package of length 4, found length %d\n", + ACPI_ERROR ((AE_INFO, + "(PRT[%X]) Need package of length 4, found length %d", Index, (*TopObjectList)->Package.Count)); return_ACPI_STATUS (AE_AML_PACKAGE_LIMIT); } @@ -332,8 +334,8 @@ AcpiRsCreatePciRoutingTable ( } else { - ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, - "(PRT[%X].Address) Need Integer, found %s\n", + ACPI_ERROR ((AE_INFO, + "(PRT[%X].Address) Need Integer, found %s", Index, AcpiUtGetObjectTypeName (ObjDesc))); return_ACPI_STATUS (AE_BAD_DATA); } @@ -347,78 +349,83 @@ AcpiRsCreatePciRoutingTable ( } else { - ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, - "(PRT[%X].Pin) Need Integer, found %s\n", + ACPI_ERROR ((AE_INFO, + "(PRT[%X].Pin) Need Integer, found %s", Index, AcpiUtGetObjectTypeName (ObjDesc))); return_ACPI_STATUS (AE_BAD_DATA); } - /* 3) Third subobject: Dereference the PRT.SourceName */ - + /* + * 3) Third subobject: Dereference the PRT.SourceName + * The name may be unresolved (slack mode), so allow a null object + */ ObjDesc = SubObjectList[2]; - switch (ACPI_GET_OBJECT_TYPE (ObjDesc)) + if (ObjDesc) { - case ACPI_TYPE_LOCAL_REFERENCE: - - if (ObjDesc->Reference.Opcode != AML_INT_NAMEPATH_OP) + switch (ACPI_GET_OBJECT_TYPE (ObjDesc)) { - ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, - "(PRT[%X].Source) Need name, found reference op %X\n", - Index, ObjDesc->Reference.Opcode)); - return_ACPI_STATUS (AE_BAD_DATA); - } + case ACPI_TYPE_LOCAL_REFERENCE: - Node = ObjDesc->Reference.Node; + if (ObjDesc->Reference.Opcode != AML_INT_NAMEPATH_OP) + { + ACPI_ERROR ((AE_INFO, + "(PRT[%X].Source) Need name, found reference op %X", + Index, ObjDesc->Reference.Opcode)); + return_ACPI_STATUS (AE_BAD_DATA); + } - /* Use *remaining* length of the buffer as max for pathname */ + Node = ObjDesc->Reference.Node; - PathBuffer.Length = OutputBuffer->Length - - (UINT32) ((UINT8 *) UserPrt->Source - - (UINT8 *) OutputBuffer->Pointer); - PathBuffer.Pointer = UserPrt->Source; + /* Use *remaining* length of the buffer as max for pathname */ - Status = AcpiNsHandleToPathname ((ACPI_HANDLE) Node, &PathBuffer); + PathBuffer.Length = OutputBuffer->Length - + (UINT32) ((UINT8 *) UserPrt->Source - + (UINT8 *) OutputBuffer->Pointer); + PathBuffer.Pointer = UserPrt->Source; - /* +1 to include null terminator */ + Status = AcpiNsHandleToPathname ((ACPI_HANDLE) Node, &PathBuffer); - UserPrt->Length += (UINT32) ACPI_STRLEN (UserPrt->Source) + 1; - break; + /* +1 to include null terminator */ + UserPrt->Length += (UINT32) ACPI_STRLEN (UserPrt->Source) + 1; + break; - case ACPI_TYPE_STRING: - ACPI_STRCPY (UserPrt->Source, ObjDesc->String.Pointer); + case ACPI_TYPE_STRING: - /* - * Add to the Length field the length of the string - * (add 1 for terminator) - */ - UserPrt->Length += ObjDesc->String.Length + 1; - break; + ACPI_STRCPY (UserPrt->Source, ObjDesc->String.Pointer); + /* + * Add to the Length field the length of the string + * (add 1 for terminator) + */ + UserPrt->Length += ObjDesc->String.Length + 1; + break; - case ACPI_TYPE_INTEGER: - /* - * If this is a number, then the Source Name is NULL, since the - * entire buffer was zeroed out, we can leave this alone. - * - * Add to the Length field the length of the UINT32 NULL - */ - UserPrt->Length += sizeof (UINT32); - break; + case ACPI_TYPE_INTEGER: + /* + * If this is a number, then the Source Name is NULL, since the + * entire buffer was zeroed out, we can leave this alone. + * + * Add to the Length field the length of the UINT32 NULL + */ + UserPrt->Length += sizeof (UINT32); + break; - default: - ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, - "(PRT[%X].Source) Need Ref/String/Integer, found %s\n", - Index, AcpiUtGetObjectTypeName (ObjDesc))); - return_ACPI_STATUS (AE_BAD_DATA); + default: + + ACPI_ERROR ((AE_INFO, + "(PRT[%X].Source) Need Ref/String/Integer, found %s", + Index, AcpiUtGetObjectTypeName (ObjDesc))); + return_ACPI_STATUS (AE_BAD_DATA); + } } /* Now align the current length */ - UserPrt->Length = (UINT32) ACPI_ROUND_UP_TO_64BITS (UserPrt->Length); + UserPrt->Length = (UINT32) ACPI_ROUND_UP_TO_64BIT (UserPrt->Length); /* 4) Fourth subobject: Dereference the PRT.SourceIndex */ @@ -429,8 +436,8 @@ AcpiRsCreatePciRoutingTable ( } else { - ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, - "(PRT[%X].SourceIndex) Need Integer, found %s\n", + ACPI_ERROR ((AE_INFO, + "(PRT[%X].SourceIndex) Need Integer, found %s", Index, AcpiUtGetObjectTypeName (ObjDesc))); return_ACPI_STATUS (AE_BAD_DATA); } @@ -473,7 +480,7 @@ AcpiRsCreateAmlResources ( ACPI_SIZE AmlSizeNeeded = 0; - ACPI_FUNCTION_TRACE ("RsCreateAmlResources"); + ACPI_FUNCTION_TRACE (RsCreateAmlResources); ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "LinkedListBuffer = %p\n", diff --git a/sys/contrib/dev/acpica/rsdump.c b/sys/contrib/dev/acpica/rsdump.c index d59fb92..eec3df9 100644 --- a/sys/contrib/dev/acpica/rsdump.c +++ b/sys/contrib/dev/acpica/rsdump.c @@ -1,7 +1,7 @@ /******************************************************************************* * * Module Name: rsdump - Functions to display the resource structures. - * $Revision: 1.54 $ + * $Revision: 1.62 $ * ******************************************************************************/ @@ -9,7 +9,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2005, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2007, Intel Corp. * All rights reserved. * * 2. License @@ -119,7 +119,6 @@ #include <contrib/dev/acpica/acpi.h> #include <contrib/dev/acpica/acresrc.h> -#include <contrib/dev/acpica/acdisasm.h> #define _COMPONENT ACPI_RESOURCES ACPI_MODULE_NAME ("rsdump") @@ -204,9 +203,9 @@ AcpiRsDumpDescriptor ( ACPI_RSDUMP_INFO AcpiRsDumpIrq[6] = { {ACPI_RSD_TITLE, ACPI_RSD_TABLE_SIZE (AcpiRsDumpIrq), "IRQ", NULL}, - {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET (Irq.Triggering), "Triggering", AcpiGbl_HEDecode}, - {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET (Irq.Polarity), "Polarity", AcpiGbl_LLDecode}, - {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET (Irq.Sharable), "Sharing", AcpiGbl_SHRDecode}, + {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET (Irq.Triggering), "Triggering", AcpiGbl_HeDecode}, + {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET (Irq.Polarity), "Polarity", AcpiGbl_LlDecode}, + {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET (Irq.Sharable), "Sharing", AcpiGbl_ShrDecode}, {ACPI_RSD_UINT8 , ACPI_RSD_OFFSET (Irq.InterruptCount), "Interrupt Count", NULL}, {ACPI_RSD_SHORTLIST,ACPI_RSD_OFFSET (Irq.Interrupts[0]), "Interrupt List", NULL} }; @@ -214,9 +213,9 @@ ACPI_RSDUMP_INFO AcpiRsDumpIrq[6] = ACPI_RSDUMP_INFO AcpiRsDumpDma[6] = { {ACPI_RSD_TITLE, ACPI_RSD_TABLE_SIZE (AcpiRsDumpDma), "DMA", NULL}, - {ACPI_RSD_2BITFLAG, ACPI_RSD_OFFSET (Dma.Type), "Speed", AcpiGbl_TYPDecode}, - {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET (Dma.BusMaster), "Mastering", AcpiGbl_BMDecode}, - {ACPI_RSD_2BITFLAG, ACPI_RSD_OFFSET (Dma.Transfer), "Transfer Type", AcpiGbl_SIZDecode}, + {ACPI_RSD_2BITFLAG, ACPI_RSD_OFFSET (Dma.Type), "Speed", AcpiGbl_TypDecode}, + {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET (Dma.BusMaster), "Mastering", AcpiGbl_BmDecode}, + {ACPI_RSD_2BITFLAG, ACPI_RSD_OFFSET (Dma.Transfer), "Transfer Type", AcpiGbl_SizDecode}, {ACPI_RSD_UINT8, ACPI_RSD_OFFSET (Dma.ChannelCount), "Channel Count", NULL}, {ACPI_RSD_SHORTLIST,ACPI_RSD_OFFSET (Dma.Channels[0]), "Channel List", NULL} }; @@ -265,7 +264,7 @@ ACPI_RSDUMP_INFO AcpiRsDumpEndTag[1] = ACPI_RSDUMP_INFO AcpiRsDumpMemory24[6] = { {ACPI_RSD_TITLE, ACPI_RSD_TABLE_SIZE (AcpiRsDumpMemory24), "24-Bit Memory Range", NULL}, - {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET (Memory24.WriteProtect), "Write Protect", AcpiGbl_RWDecode}, + {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET (Memory24.WriteProtect), "Write Protect", AcpiGbl_RwDecode}, {ACPI_RSD_UINT16, ACPI_RSD_OFFSET (Memory24.Minimum), "Address Minimum", NULL}, {ACPI_RSD_UINT16, ACPI_RSD_OFFSET (Memory24.Maximum), "Address Maximum", NULL}, {ACPI_RSD_UINT16, ACPI_RSD_OFFSET (Memory24.Alignment), "Alignment", NULL}, @@ -275,7 +274,7 @@ ACPI_RSDUMP_INFO AcpiRsDumpMemory24[6] = ACPI_RSDUMP_INFO AcpiRsDumpMemory32[6] = { {ACPI_RSD_TITLE, ACPI_RSD_TABLE_SIZE (AcpiRsDumpMemory32), "32-Bit Memory Range", NULL}, - {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET (Memory32.WriteProtect), "Write Protect", AcpiGbl_RWDecode}, + {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET (Memory32.WriteProtect), "Write Protect", AcpiGbl_RwDecode}, {ACPI_RSD_UINT32, ACPI_RSD_OFFSET (Memory32.Minimum), "Address Minimum", NULL}, {ACPI_RSD_UINT32, ACPI_RSD_OFFSET (Memory32.Maximum), "Address Maximum", NULL}, {ACPI_RSD_UINT32, ACPI_RSD_OFFSET (Memory32.Alignment), "Alignment", NULL}, @@ -285,7 +284,7 @@ ACPI_RSDUMP_INFO AcpiRsDumpMemory32[6] = ACPI_RSDUMP_INFO AcpiRsDumpFixedMemory32[4] = { {ACPI_RSD_TITLE, ACPI_RSD_TABLE_SIZE (AcpiRsDumpFixedMemory32), "32-Bit Fixed Memory Range",NULL}, - {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET (FixedMemory32.WriteProtect), "Write Protect", AcpiGbl_RWDecode}, + {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET (FixedMemory32.WriteProtect), "Write Protect", AcpiGbl_RwDecode}, {ACPI_RSD_UINT32, ACPI_RSD_OFFSET (FixedMemory32.Address), "Address", NULL}, {ACPI_RSD_UINT32, ACPI_RSD_OFFSET (FixedMemory32.AddressLength), "Address Length", NULL} }; @@ -342,9 +341,9 @@ ACPI_RSDUMP_INFO AcpiRsDumpExtIrq[8] = { {ACPI_RSD_TITLE, ACPI_RSD_TABLE_SIZE (AcpiRsDumpExtIrq), "Extended IRQ", NULL}, {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET (ExtendedIrq.ProducerConsumer), "Type", AcpiGbl_ConsumeDecode}, - {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET (ExtendedIrq.Triggering), "Triggering", AcpiGbl_HEDecode}, - {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET (ExtendedIrq.Polarity), "Polarity", AcpiGbl_LLDecode}, - {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET (ExtendedIrq.Sharable), "Sharing", AcpiGbl_SHRDecode}, + {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET (ExtendedIrq.Triggering), "Triggering", AcpiGbl_HeDecode}, + {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET (ExtendedIrq.Polarity), "Polarity", AcpiGbl_LlDecode}, + {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET (ExtendedIrq.Sharable), "Sharing", AcpiGbl_ShrDecode}, {ACPI_RSD_SOURCE, ACPI_RSD_OFFSET (ExtendedIrq.ResourceSource), NULL, NULL}, {ACPI_RSD_UINT8, ACPI_RSD_OFFSET (ExtendedIrq.InterruptCount), "Interrupt Count", NULL}, {ACPI_RSD_DWORDLIST,ACPI_RSD_OFFSET (ExtendedIrq.Interrupts[0]), "Interrupt List", NULL} @@ -368,26 +367,26 @@ static ACPI_RSDUMP_INFO AcpiRsDumpGeneralFlags[5] = { {ACPI_RSD_TITLE, ACPI_RSD_TABLE_SIZE (AcpiRsDumpGeneralFlags), NULL, NULL}, {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET (Address.ProducerConsumer), "Consumer/Producer", AcpiGbl_ConsumeDecode}, - {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET (Address.Decode), "Address Decode", AcpiGbl_DECDecode}, + {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET (Address.Decode), "Address Decode", AcpiGbl_DecDecode}, {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET (Address.MinAddressFixed), "Min Relocatability", AcpiGbl_MinDecode}, {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET (Address.MaxAddressFixed), "Max Relocatability", AcpiGbl_MaxDecode} }; static ACPI_RSDUMP_INFO AcpiRsDumpMemoryFlags[5] = { - {ACPI_RSD_LITERAL, ACPI_RSD_TABLE_SIZE (AcpiRsDumpMemoryFlags), "Resource Type", "Memory Range"}, - {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET (Address.Info.Mem.WriteProtect), "Write Protect", AcpiGbl_RWDecode}, - {ACPI_RSD_2BITFLAG, ACPI_RSD_OFFSET (Address.Info.Mem.Caching), "Caching", AcpiGbl_MEMDecode}, - {ACPI_RSD_2BITFLAG, ACPI_RSD_OFFSET (Address.Info.Mem.RangeType), "Range Type", AcpiGbl_MTPDecode}, - {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET (Address.Info.Mem.Translation), "Translation", AcpiGbl_TTPDecode} + {ACPI_RSD_LITERAL, ACPI_RSD_TABLE_SIZE (AcpiRsDumpMemoryFlags), "Resource Type", (void *) "Memory Range"}, + {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET (Address.Info.Mem.WriteProtect), "Write Protect", AcpiGbl_RwDecode}, + {ACPI_RSD_2BITFLAG, ACPI_RSD_OFFSET (Address.Info.Mem.Caching), "Caching", AcpiGbl_MemDecode}, + {ACPI_RSD_2BITFLAG, ACPI_RSD_OFFSET (Address.Info.Mem.RangeType), "Range Type", AcpiGbl_MtpDecode}, + {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET (Address.Info.Mem.Translation), "Translation", AcpiGbl_TtpDecode} }; static ACPI_RSDUMP_INFO AcpiRsDumpIoFlags[4] = { - {ACPI_RSD_LITERAL, ACPI_RSD_TABLE_SIZE (AcpiRsDumpIoFlags), "Resource Type", "I/O Range"}, - {ACPI_RSD_2BITFLAG, ACPI_RSD_OFFSET (Address.Info.Io.RangeType), "Range Type", AcpiGbl_RNGDecode}, - {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET (Address.Info.Io.Translation), "Translation", AcpiGbl_TTPDecode}, - {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET (Address.Info.Io.TranslationType), "Translation Type", AcpiGbl_TRSDecode} + {ACPI_RSD_LITERAL, ACPI_RSD_TABLE_SIZE (AcpiRsDumpIoFlags), "Resource Type", (void *) "I/O Range"}, + {ACPI_RSD_2BITFLAG, ACPI_RSD_OFFSET (Address.Info.Io.RangeType), "Range Type", AcpiGbl_RngDecode}, + {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET (Address.Info.Io.Translation), "Translation", AcpiGbl_TtpDecode}, + {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET (Address.Info.Io.TranslationType), "Translation Type", AcpiGbl_TrsDecode} }; @@ -421,8 +420,8 @@ AcpiRsDumpDescriptor ( void *Resource, ACPI_RSDUMP_INFO *Table) { - void *Target = NULL; - void *PreviousTarget; + UINT8 *Target = NULL; + UINT8 *PreviousTarget; char *Name; UINT8 Count; @@ -434,7 +433,7 @@ AcpiRsDumpDescriptor ( while (Count) { PreviousTarget = Target; - Target = ((UINT8 *) Resource) + Table->Offset; + Target = ACPI_ADD_PTR (UINT8, Resource, Table->Offset); Name = Table->Name; switch (Table->Opcode) @@ -452,41 +451,41 @@ AcpiRsDumpDescriptor ( /* Strings */ case ACPI_RSD_LITERAL: - AcpiRsOutString (Name, (char *) (uintptr_t) Table->Pointer); + AcpiRsOutString (Name, ACPI_CAST_PTR (char, Table->Pointer)); break; case ACPI_RSD_STRING: - AcpiRsOutString (Name, (char *) (uintptr_t) Target); + AcpiRsOutString (Name, ACPI_CAST_PTR (char, Target)); break; /* Data items, 8/16/32/64 bit */ case ACPI_RSD_UINT8: - AcpiRsOutInteger8 (Name, *(UINT8 *) Target); + AcpiRsOutInteger8 (Name, ACPI_GET8 (Target)); break; case ACPI_RSD_UINT16: - AcpiRsOutInteger16 (Name, *(UINT16 *) Target); + AcpiRsOutInteger16 (Name, ACPI_GET16 (Target)); break; case ACPI_RSD_UINT32: - AcpiRsOutInteger32 (Name, *(UINT32 *) Target); + AcpiRsOutInteger32 (Name, ACPI_GET32 (Target)); break; case ACPI_RSD_UINT64: - AcpiRsOutInteger64 (Name, *(UINT64 *) Target); + AcpiRsOutInteger64 (Name, ACPI_GET64 (Target)); break; /* Flags: 1-bit and 2-bit flags supported */ case ACPI_RSD_1BITFLAG: - AcpiRsOutString (Name, (char *) (uintptr_t) - ((const char **) (uintptr_t) Table->Pointer)[(*(UINT8 *) Target) & 0x01]); + AcpiRsOutString (Name, ACPI_CAST_PTR (char, + Table->Pointer [*Target & 0x01])); break; case ACPI_RSD_2BITFLAG: - AcpiRsOutString (Name, (char *) (uintptr_t) - ((const char **) (uintptr_t) Table->Pointer)[(*(UINT8 *) Target) & 0x03]); + AcpiRsOutString (Name, ACPI_CAST_PTR (char, + Table->Pointer [*Target & 0x03])); break; case ACPI_RSD_SHORTLIST: @@ -497,8 +496,7 @@ AcpiRsDumpDescriptor ( if (PreviousTarget) { AcpiRsOutTitle (Name); - AcpiRsDumpShortByteList (*((UINT8 *) PreviousTarget), - (UINT8 *) Target); + AcpiRsDumpShortByteList (*PreviousTarget, Target); } break; @@ -509,8 +507,7 @@ AcpiRsDumpDescriptor ( */ if (PreviousTarget) { - AcpiRsDumpByteList (*((UINT16 *) PreviousTarget), - (UINT8 *) Target); + AcpiRsDumpByteList (ACPI_GET16 (PreviousTarget), Target); } break; @@ -521,8 +518,8 @@ AcpiRsDumpDescriptor ( */ if (PreviousTarget) { - AcpiRsDumpDwordList (*((UINT8 *) PreviousTarget), - (UINT32 *) Target); + AcpiRsDumpDwordList (*PreviousTarget, + ACPI_CAST_PTR (UINT32, Target)); } break; @@ -530,14 +527,14 @@ AcpiRsDumpDescriptor ( /* * Common flags for all Address resources */ - AcpiRsDumpAddressCommon ((ACPI_RESOURCE_DATA *) Target); + AcpiRsDumpAddressCommon (ACPI_CAST_PTR (ACPI_RESOURCE_DATA, Target)); break; case ACPI_RSD_SOURCE: /* * Optional ResourceSource for Address resources */ - AcpiRsDumpResourceSource ((ACPI_RESOURCE_SOURCE *) Target); + AcpiRsDumpResourceSource (ACPI_CAST_PTR (ACPI_RESOURCE_SOURCE, Target)); break; default: @@ -691,7 +688,7 @@ AcpiRsDumpResourceList ( /* Point to the next resource structure */ - ResourceList = ACPI_PTR_ADD (ACPI_RESOURCE, ResourceList, + ResourceList = ACPI_ADD_PTR (ACPI_RESOURCE, ResourceList, ResourceList->Length); /* Exit when END_TAG descriptor is reached */ @@ -737,8 +734,8 @@ AcpiRsDumpIrqList ( AcpiOsPrintf ("\n[%02X] PCI IRQ Routing Table Package\n", Count); AcpiRsDumpDescriptor (PrtElement, AcpiRsDumpPrt); - PrtElement = ACPI_CAST_PTR (ACPI_PCI_ROUTING_TABLE, - ((UINT8 *) PrtElement) + PrtElement->Length); + PrtElement = ACPI_ADD_PTR (ACPI_PCI_ROUTING_TABLE, + PrtElement, PrtElement->Length); } } @@ -762,7 +759,12 @@ AcpiRsOutString ( char *Title, char *Value) { - AcpiOsPrintf ("%27s : %s\n", Title, Value); + AcpiOsPrintf ("%27s : %s", Title, Value); + if (!*Value) + { + AcpiOsPrintf ("[NULL NAMESTRING]"); + } + AcpiOsPrintf ("\n"); } static void diff --git a/sys/contrib/dev/acpica/utdebug.c b/sys/contrib/dev/acpica/utdebug.c index 8846140..59b91d7 100644 --- a/sys/contrib/dev/acpica/utdebug.c +++ b/sys/contrib/dev/acpica/utdebug.c @@ -1,7 +1,7 @@ /****************************************************************************** * * Module Name: utdebug - Debug print routines - * $Revision: 1.126 $ + * $Revision: 1.133 $ * *****************************************************************************/ @@ -9,7 +9,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2005, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2007, Intel Corp. * All rights reserved. * * 2. License @@ -212,14 +212,14 @@ AcpiUtTrimFunctionName ( /* All Function names are longer than 4 chars, check is safe */ - if (*((UINT32 *) (uintptr_t) FunctionName) == ACPI_PREFIX_MIXED) + if (*(ACPI_CAST_PTR (UINT32, FunctionName)) == ACPI_PREFIX_MIXED) { /* This is the case where the original source has not been modified */ return (FunctionName + 4); } - if (*((UINT32 *) (uintptr_t) FunctionName) == ACPI_PREFIX_LOWER) + if (*(ACPI_CAST_PTR (UINT32, FunctionName)) == ACPI_PREFIX_LOWER) { /* This is the case where the source has been 'linuxized' */ @@ -259,7 +259,7 @@ AcpiUtDebugPrint ( char *Format, ...) { - UINT32 ThreadId; + ACPI_THREAD_ID ThreadId; va_list args; @@ -276,7 +276,6 @@ AcpiUtDebugPrint ( * Thread tracking and context switch notification */ ThreadId = AcpiOsGetThreadId (); - if (ThreadId != AcpiGbl_PrevThreadId) { if (ACPI_LV_THREADS & AcpiDbgLevel) @@ -307,6 +306,8 @@ AcpiUtDebugPrint ( AcpiOsVprintf (Format, args); } +ACPI_EXPORT_SYMBOL (AcpiUtDebugPrint) + /******************************************************************************* * @@ -350,6 +351,8 @@ AcpiUtDebugPrintRaw ( AcpiOsVprintf (Format, args); } +ACPI_EXPORT_SYMBOL (AcpiUtDebugPrintRaw) + /******************************************************************************* * @@ -383,6 +386,8 @@ AcpiUtTrace ( "%s\n", AcpiGbl_FnEntryStr); } +ACPI_EXPORT_SYMBOL (AcpiUtTrace) + /******************************************************************************* * @@ -519,6 +524,8 @@ AcpiUtExit ( AcpiGbl_NestingLevel--; } +ACPI_EXPORT_SYMBOL (AcpiUtExit) + /******************************************************************************* * @@ -564,6 +571,8 @@ AcpiUtStatusExit ( AcpiGbl_NestingLevel--; } +ACPI_EXPORT_SYMBOL (AcpiUtStatusExit) + /******************************************************************************* * @@ -599,6 +608,8 @@ AcpiUtValueExit ( AcpiGbl_NestingLevel--; } +ACPI_EXPORT_SYMBOL (AcpiUtValueExit) + /******************************************************************************* * @@ -652,11 +663,10 @@ AcpiUtPtrExit ( ******************************************************************************/ void -AcpiUtDumpBuffer ( +AcpiUtDumpBuffer2 ( UINT8 *Buffer, UINT32 Count, - UINT32 Display, - UINT32 ComponentId) + UINT32 Display) { ACPI_NATIVE_UINT i = 0; ACPI_NATIVE_UINT j; @@ -664,14 +674,6 @@ AcpiUtDumpBuffer ( UINT8 BufChar; - /* Only dump the buffer if tracing is enabled */ - - if (!((ACPI_LV_TABLES & AcpiDbgLevel) && - (ComponentId & AcpiDbgLayer))) - { - return; - } - if ((Count < 4) || (Count & 0x01)) { Display = DB_BYTE_DISPLAY; @@ -700,6 +702,7 @@ AcpiUtDumpBuffer ( switch (Display) { + case DB_BYTE_DISPLAY: default: /* Default is BYTE display */ AcpiOsPrintf ("%02X ", Buffer[i + j]); @@ -766,3 +769,39 @@ AcpiUtDumpBuffer ( return; } + +/******************************************************************************* + * + * FUNCTION: AcpiUtDumpBuffer + * + * PARAMETERS: Buffer - Buffer to dump + * Count - Amount to dump, in bytes + * Display - BYTE, WORD, DWORD, or QWORD display + * ComponentID - Caller's component ID + * + * RETURN: None + * + * DESCRIPTION: Generic dump buffer in both hex and ascii. + * + ******************************************************************************/ + +void +AcpiUtDumpBuffer ( + UINT8 *Buffer, + UINT32 Count, + UINT32 Display, + UINT32 ComponentId) +{ + + /* Only dump the buffer if tracing is enabled */ + + if (!((ACPI_LV_TABLES & AcpiDbgLevel) && + (ComponentId & AcpiDbgLayer))) + { + return; + } + + AcpiUtDumpBuffer2 (Buffer, Count, Display); +} + + diff --git a/sys/contrib/dev/acpica/uteval.c b/sys/contrib/dev/acpica/uteval.c index 453a327..5e16abb 100644 --- a/sys/contrib/dev/acpica/uteval.c +++ b/sys/contrib/dev/acpica/uteval.c @@ -1,7 +1,7 @@ /****************************************************************************** * * Module Name: uteval - Object evaluation - * $Revision: 54 $ + * $Revision: 1.71 $ * *****************************************************************************/ @@ -9,7 +9,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2005, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2007, Intel Corp. * All rights reserved. * * 2. License @@ -138,6 +138,37 @@ AcpiUtTranslateOneCid ( ACPI_COMPATIBLE_ID *OneCid); +/* + * Strings supported by the _OSI predefined (internal) method. + */ +static const char *AcpiInterfacesSupported[] = +{ + /* Operating System Vendor Strings */ + + "Linux", + "Windows 2000", + "Windows 2001", + "Windows 2001 SP0", + "Windows 2001 SP1", + "Windows 2001 SP2", + "Windows 2001 SP3", + "Windows 2001 SP4", + "Windows 2001.1", + "Windows 2001.1 SP1", /* Added 03/2006 */ + "Windows 2006", /* Added 03/2006 */ + + /* Feature Group Strings */ + + "Extended Address Space Descriptor" + + /* + * All "optional" feature group strings (features that are implemented + * by the host) should be implemented in the host version of + * AcpiOsValidateInterface and should not be added here. + */ +}; + + /******************************************************************************* * * FUNCTION: AcpiUtOsiImplementation @@ -146,8 +177,7 @@ AcpiUtTranslateOneCid ( * * RETURN: Status * - * DESCRIPTION: Implementation of _OSI predefined control method - * Supported = _OSI (String) + * DESCRIPTION: Implementation of the _OSI predefined control method * ******************************************************************************/ @@ -155,12 +185,13 @@ ACPI_STATUS AcpiUtOsiImplementation ( ACPI_WALK_STATE *WalkState) { + ACPI_STATUS Status; ACPI_OPERAND_OBJECT *StringDesc; ACPI_OPERAND_OBJECT *ReturnDesc; ACPI_NATIVE_UINT i; - ACPI_FUNCTION_TRACE ("UtOsiImplementation"); + ACPI_FUNCTION_TRACE (UtOsiImplementation); /* Validate the string input argument */ @@ -171,7 +202,7 @@ AcpiUtOsiImplementation ( return_ACPI_STATUS (AE_TYPE); } - /* Create a return object (Default value = 0) */ + /* Create a return object */ ReturnDesc = AcpiUtCreateInternalObject (ACPI_TYPE_INTEGER); if (!ReturnDesc) @@ -179,21 +210,39 @@ AcpiUtOsiImplementation ( return_ACPI_STATUS (AE_NO_MEMORY); } - /* Compare input string to table of supported strings */ + /* Default return value is SUPPORTED */ + + ReturnDesc->Integer.Value = ACPI_UINT32_MAX; + WalkState->ReturnDesc = ReturnDesc; + + /* Compare input string to static table of supported interfaces */ - for (i = 0; i < ACPI_NUM_OSI_STRINGS; i++) + for (i = 0; i < ACPI_ARRAY_LENGTH (AcpiInterfacesSupported); i++) { - if (!ACPI_STRCMP (StringDesc->String.Pointer, - (char *) (uintptr_t) AcpiGbl_ValidOsiStrings[i])) + if (!ACPI_STRCMP (StringDesc->String.Pointer, AcpiInterfacesSupported[i])) { - /* This string is supported */ + /* The interface is supported */ - ReturnDesc->Integer.Value = 0xFFFFFFFF; - break; + return_ACPI_STATUS (AE_CTRL_TERMINATE); } } - WalkState->ReturnDesc = ReturnDesc; + /* + * Did not match the string in the static table, call the host OSL to + * check for a match with one of the optional strings (such as + * "Module Device", "3.0 Thermal Model", etc.) + */ + Status = AcpiOsValidateInterface (StringDesc->String.Pointer); + if (ACPI_SUCCESS (Status)) + { + /* The interface is supported */ + + return_ACPI_STATUS (AE_CTRL_TERMINATE); + } + + /* The interface is not supported */ + + ReturnDesc->Integer.Value = 0; return_ACPI_STATUS (AE_CTRL_TERMINATE); } @@ -224,21 +273,29 @@ AcpiUtEvaluateObject ( UINT32 ExpectedReturnBtypes, ACPI_OPERAND_OBJECT **ReturnDesc) { - ACPI_PARAMETER_INFO Info; + ACPI_EVALUATE_INFO *Info; ACPI_STATUS Status; UINT32 ReturnBtype; - ACPI_FUNCTION_TRACE ("UtEvaluateObject"); + ACPI_FUNCTION_TRACE (UtEvaluateObject); - Info.Node = PrefixNode; - Info.Parameters = NULL; - Info.ParameterType = ACPI_PARAM_ARGS; + /* Allocate the evaluation information block */ + + Info = ACPI_ALLOCATE_ZEROED (sizeof (ACPI_EVALUATE_INFO)); + if (!Info) + { + return_ACPI_STATUS (AE_NO_MEMORY); + } + + Info->PrefixNode = PrefixNode; + Info->Pathname = Path; + Info->ParameterType = ACPI_PARAM_ARGS; /* Evaluate the object/method */ - Status = AcpiNsEvaluateRelative (Path, &Info); + Status = AcpiNsEvaluate (Info); if (ACPI_FAILURE (Status)) { if (Status == AE_NOT_FOUND) @@ -248,31 +305,31 @@ AcpiUtEvaluateObject ( } else { - ACPI_REPORT_METHOD_ERROR ("Method execution failed", + ACPI_ERROR_METHOD ("Method execution failed", PrefixNode, Path, Status); } - return_ACPI_STATUS (Status); + goto Cleanup; } /* Did we get a return object? */ - if (!Info.ReturnObject) + if (!Info->ReturnObject) { if (ExpectedReturnBtypes) { - ACPI_REPORT_METHOD_ERROR ("No object was returned from", + ACPI_ERROR_METHOD ("No object was returned from", PrefixNode, Path, AE_NOT_EXIST); - return_ACPI_STATUS (AE_NOT_EXIST); + Status = AE_NOT_EXIST; } - return_ACPI_STATUS (AE_OK); + goto Cleanup; } /* Map the return object type to the bitmapped type */ - switch (ACPI_GET_OBJECT_TYPE (Info.ReturnObject)) + switch (ACPI_GET_OBJECT_TYPE (Info->ReturnObject)) { case ACPI_TYPE_INTEGER: ReturnBtype = ACPI_BTYPE_INTEGER; @@ -303,32 +360,36 @@ AcpiUtEvaluateObject ( * happen frequently if the "implicit return" feature is enabled. * Just delete the return object and return AE_OK. */ - AcpiUtRemoveReference (Info.ReturnObject); - return_ACPI_STATUS (AE_OK); + AcpiUtRemoveReference (Info->ReturnObject); + goto Cleanup; } /* Is the return object one of the expected types? */ if (!(ExpectedReturnBtypes & ReturnBtype)) { - ACPI_REPORT_METHOD_ERROR ("Return object type is incorrect", + ACPI_ERROR_METHOD ("Return object type is incorrect", PrefixNode, Path, AE_TYPE); - ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, - "Type returned from %s was incorrect: %s, expected Btypes: %X\n", - Path, AcpiUtGetObjectTypeName (Info.ReturnObject), + ACPI_ERROR ((AE_INFO, + "Type returned from %s was incorrect: %s, expected Btypes: %X", + Path, AcpiUtGetObjectTypeName (Info->ReturnObject), ExpectedReturnBtypes)); /* On error exit, we must delete the return object */ - AcpiUtRemoveReference (Info.ReturnObject); - return_ACPI_STATUS (AE_TYPE); + AcpiUtRemoveReference (Info->ReturnObject); + Status = AE_TYPE; + goto Cleanup; } /* Object type is OK, return it */ - *ReturnDesc = Info.ReturnObject; - return_ACPI_STATUS (AE_OK); + *ReturnDesc = Info->ReturnObject; + +Cleanup: + ACPI_FREE (Info); + return_ACPI_STATUS (Status); } @@ -359,7 +420,7 @@ AcpiUtEvaluateNumericObject ( ACPI_STATUS Status; - ACPI_FUNCTION_TRACE ("UtEvaluateNumericObject"); + ACPI_FUNCTION_TRACE (UtEvaluateNumericObject); Status = AcpiUtEvaluateObject (DeviceNode, ObjectName, @@ -445,7 +506,7 @@ AcpiUtExecute_HID ( ACPI_STATUS Status; - ACPI_FUNCTION_TRACE ("UtExecute_HID"); + ACPI_FUNCTION_TRACE (UtExecute_HID); Status = AcpiUtEvaluateObject (DeviceNode, METHOD_NAME__HID, @@ -558,7 +619,7 @@ AcpiUtExecute_CID ( ACPI_NATIVE_UINT i; - ACPI_FUNCTION_TRACE ("UtExecute_CID"); + ACPI_FUNCTION_TRACE (UtExecute_CID); /* Evaluate the _CID method for this device */ @@ -584,7 +645,7 @@ AcpiUtExecute_CID ( Size = (((Count - 1) * sizeof (ACPI_COMPATIBLE_ID)) + sizeof (ACPI_COMPATIBLE_ID_LIST)); - CidList = ACPI_MEM_CALLOCATE ((ACPI_SIZE) Size); + CidList = ACPI_ALLOCATE_ZEROED ((ACPI_SIZE) Size); if (!CidList) { return_ACPI_STATUS (AE_NO_MEMORY); @@ -629,7 +690,7 @@ AcpiUtExecute_CID ( if (ACPI_FAILURE (Status)) { - ACPI_MEM_FREE (CidList); + ACPI_FREE (CidList); } else { @@ -668,7 +729,7 @@ AcpiUtExecute_UID ( ACPI_STATUS Status; - ACPI_FUNCTION_TRACE ("UtExecute_UID"); + ACPI_FUNCTION_TRACE (UtExecute_UID); Status = AcpiUtEvaluateObject (DeviceNode, METHOD_NAME__UID, @@ -724,7 +785,7 @@ AcpiUtExecute_STA ( ACPI_STATUS Status; - ACPI_FUNCTION_TRACE ("UtExecute_STA"); + ACPI_FUNCTION_TRACE (UtExecute_STA); Status = AcpiUtEvaluateObject (DeviceNode, METHOD_NAME__STA, @@ -737,7 +798,7 @@ AcpiUtExecute_STA ( "_STA on %4.4s was not found, assuming device is present\n", AcpiUtGetNodeName (DeviceNode))); - *Flags = 0x0F; + *Flags = ACPI_UINT32_MAX; Status = AE_OK; } @@ -781,14 +842,14 @@ AcpiUtExecute_Sxds ( UINT32 i; - ACPI_FUNCTION_TRACE ("UtExecute_Sxds"); + ACPI_FUNCTION_TRACE (UtExecute_Sxds); for (i = 0; i < 4; i++) { Highest[i] = 0xFF; Status = AcpiUtEvaluateObject (DeviceNode, - (char *) (uintptr_t) AcpiGbl_HighestDstateNames[i], + ACPI_CAST_PTR (char, AcpiGbl_HighestDstateNames[i]), ACPI_BTYPE_INTEGER, &ObjDesc); if (ACPI_FAILURE (Status)) { @@ -796,7 +857,7 @@ AcpiUtExecute_Sxds ( { ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "%s on Device %4.4s, %s\n", - (char *) (uintptr_t) AcpiGbl_HighestDstateNames[i], + ACPI_CAST_PTR (char, AcpiGbl_HighestDstateNames[i]), AcpiUtGetNodeName (DeviceNode), AcpiFormatException (Status))); diff --git a/sys/contrib/dev/acpica/utglobal.c b/sys/contrib/dev/acpica/utglobal.c index 03321fd..b83d288 100644 --- a/sys/contrib/dev/acpica/utglobal.c +++ b/sys/contrib/dev/acpica/utglobal.c @@ -1,7 +1,7 @@ /****************************************************************************** * * Module Name: utglobal - Global variables for the ACPI subsystem - * $Revision: 202 $ + * $Revision: 1.249 $ * *****************************************************************************/ @@ -9,7 +9,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2005, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2007, Intel Corp. * All rights reserved. * * 2. License @@ -120,98 +120,14 @@ #include <contrib/dev/acpica/acpi.h> #include <contrib/dev/acpica/acnamesp.h> +ACPI_EXPORT_SYMBOL (AcpiGbl_FADT) + #define _COMPONENT ACPI_UTILITIES ACPI_MODULE_NAME ("utglobal") /******************************************************************************* * - * FUNCTION: AcpiFormatException - * - * PARAMETERS: Status - The ACPI_STATUS code to be formatted - * - * RETURN: A string containing the exception text. A valid pointer is - * always returned. - * - * DESCRIPTION: This function translates an ACPI exception into an ASCII string. - * - ******************************************************************************/ - -const char * -AcpiFormatException ( - ACPI_STATUS Status) -{ - ACPI_STATUS SubStatus; - const char *Exception = NULL; - - - ACPI_FUNCTION_NAME ("FormatException"); - - - SubStatus = (Status & ~AE_CODE_MASK); - - switch (Status & AE_CODE_MASK) - { - case AE_CODE_ENVIRONMENTAL: - - if (SubStatus <= AE_CODE_ENV_MAX) - { - Exception = AcpiGbl_ExceptionNames_Env [SubStatus]; - } - break; - - case AE_CODE_PROGRAMMER: - - if (SubStatus <= AE_CODE_PGM_MAX) - { - Exception = AcpiGbl_ExceptionNames_Pgm [SubStatus -1]; - } - break; - - case AE_CODE_ACPI_TABLES: - - if (SubStatus <= AE_CODE_TBL_MAX) - { - Exception = AcpiGbl_ExceptionNames_Tbl [SubStatus -1]; - } - break; - - case AE_CODE_AML: - - if (SubStatus <= AE_CODE_AML_MAX) - { - Exception = AcpiGbl_ExceptionNames_Aml [SubStatus -1]; - } - break; - - case AE_CODE_CONTROL: - - if (SubStatus <= AE_CODE_CTRL_MAX) - { - Exception = AcpiGbl_ExceptionNames_Ctrl [SubStatus -1]; - } - break; - - default: - break; - } - - if (!Exception) - { - /* Exception code was not recognized */ - - ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, - "Unknown exception code: 0x%8.8X\n", Status)); - - return ((const char *) "UNKNOWN_STATUS_CODE"); - } - - return ((const char *) Exception); -} - - -/******************************************************************************* - * * Static global variable initialization. * ******************************************************************************/ @@ -234,7 +150,6 @@ UINT32 AcpiDbgLevel = ACPI_NORMAL_DEFAULT; UINT32 AcpiDbgLayer = ACPI_COMPONENT_DEFAULT; UINT32 AcpiGbl_NestingLevel = 0; - /* Debugger globals */ BOOLEAN AcpiGbl_DbTerminateThreads = FALSE; @@ -249,8 +164,6 @@ UINT32 AcpiGbl_StartupFlags = 0; BOOLEAN AcpiGbl_Shutdown = TRUE; -const UINT8 AcpiGbl_DecodeTo8bit [8] = {1,2,4,8,16,32,64,128}; - const char *AcpiGbl_SleepStateNames[ACPI_S_STATE_COUNT] = { "\\_S0_", @@ -269,28 +182,46 @@ const char *AcpiGbl_HighestDstateNames[4] = "_S4D" }; -/* - * Strings supported by the _OSI predefined (internal) method. - * When adding strings, be sure to update ACPI_NUM_OSI_STRINGS. - */ -const char *AcpiGbl_ValidOsiStrings[ACPI_NUM_OSI_STRINGS] = + +/******************************************************************************* + * + * FUNCTION: AcpiFormatException + * + * PARAMETERS: Status - The ACPI_STATUS code to be formatted + * + * RETURN: A string containing the exception text. A valid pointer is + * always returned. + * + * DESCRIPTION: This function translates an ACPI exception into an ASCII string + * It is here instead of utxface.c so it is always present. + * + ******************************************************************************/ + +const char * +AcpiFormatException ( + ACPI_STATUS Status) { - /* Operating System Vendor Strings */ + const char *Exception = NULL; - "Linux", - "Windows 2000", - "Windows 2001", - "Windows 2001.1", - "Windows 2001 SP0", - "Windows 2001 SP1", - "Windows 2001 SP2", - "Windows 2001 SP3", - "Windows 2001 SP4", - /* Feature Group Strings */ + ACPI_FUNCTION_ENTRY (); - "Extended Address Space Descriptor" -}; + + Exception = AcpiUtValidateException (Status); + if (!Exception) + { + /* Exception code was not recognized */ + + ACPI_ERROR ((AE_INFO, + "Unknown exception code: 0x%8.8X", Status)); + + Exception = "UNKNOWN_STATUS_CODE"; + } + + return (ACPI_CAST_PTR (const char, Exception)); +} + +ACPI_EXPORT_SYMBOL (AcpiFormatException) /******************************************************************************* @@ -401,35 +332,6 @@ AcpiUtHexToAsciiChar ( } -/******************************************************************************* - * - * Table name globals - * - * NOTE: This table includes ONLY the ACPI tables that the subsystem consumes. - * it is NOT an exhaustive list of all possible ACPI tables. All ACPI tables - * that are not used by the subsystem are simply ignored. - * - * Do NOT add any table to this list that is not consumed directly by this - * subsystem (No MADT, ECDT, SBST, etc.) - * - ******************************************************************************/ - -ACPI_TABLE_LIST AcpiGbl_TableLists[NUM_ACPI_TABLE_TYPES]; - -ACPI_TABLE_SUPPORT AcpiGbl_TableData[NUM_ACPI_TABLE_TYPES] = -{ - /*********** Name, Signature, Global typed pointer Signature size, Type How many allowed?, Contains valid AML? */ - - /* RSDP 0 */ {RSDP_NAME, RSDP_SIG, NULL, sizeof (RSDP_SIG)-1, ACPI_TABLE_ROOT | ACPI_TABLE_SINGLE}, - /* DSDT 1 */ {DSDT_SIG, DSDT_SIG, (void *) &AcpiGbl_DSDT, sizeof (DSDT_SIG)-1, ACPI_TABLE_SECONDARY| ACPI_TABLE_SINGLE | ACPI_TABLE_EXECUTABLE}, - /* FADT 2 */ {FADT_SIG, FADT_SIG, (void *) &AcpiGbl_FADT, sizeof (FADT_SIG)-1, ACPI_TABLE_PRIMARY | ACPI_TABLE_SINGLE}, - /* FACS 3 */ {FACS_SIG, FACS_SIG, (void *) &AcpiGbl_FACS, sizeof (FACS_SIG)-1, ACPI_TABLE_SECONDARY| ACPI_TABLE_SINGLE}, - /* PSDT 4 */ {PSDT_SIG, PSDT_SIG, NULL, sizeof (PSDT_SIG)-1, ACPI_TABLE_PRIMARY | ACPI_TABLE_MULTIPLE | ACPI_TABLE_EXECUTABLE}, - /* SSDT 5 */ {SSDT_SIG, SSDT_SIG, NULL, sizeof (SSDT_SIG)-1, ACPI_TABLE_PRIMARY | ACPI_TABLE_MULTIPLE | ACPI_TABLE_EXECUTABLE}, - /* XSDT 6 */ {XSDT_SIG, XSDT_SIG, NULL, sizeof (RSDT_SIG)-1, ACPI_TABLE_ROOT | ACPI_TABLE_SINGLE}, -}; - - /****************************************************************************** * * Event and Hardware globals @@ -493,7 +395,6 @@ ACPI_FIXED_EVENT_INFO AcpiGbl_FixedEventInfo[ACPI_NUM_FIXED_EVENTS] = const char *AcpiGbl_RegionTypes[ACPI_NUM_PREDEFINED_REGIONS] = { -/*! [Begin] no source code translation (keep these ASL Keywords as-is) */ "SystemMemory", "SystemIO", "PCI_Config", @@ -502,7 +403,6 @@ const char *AcpiGbl_RegionTypes[ACPI_NUM_PREDEFINED_REGIONS] = "CMOS", "PCIBARTarget", "DataTable" -/*! [End] no source code translation !*/ }; @@ -520,7 +420,7 @@ AcpiUtGetRegionName ( return ("InvalidSpaceId"); } - return ((char *) (uintptr_t) AcpiGbl_RegionTypes[SpaceId]); + return (ACPI_CAST_PTR (char, AcpiGbl_RegionTypes[SpaceId])); } @@ -540,13 +440,11 @@ AcpiUtGetRegionName ( static const char *AcpiGbl_EventTypes[ACPI_NUM_FIXED_EVENTS] = { -/*! [Begin] no source code translation (keep these strings as-is) */ "PM_Timer", "GlobalLock", "PowerButton", "SleepButton", "RealTimeClock", -/*! [End] no source code translation !*/ }; @@ -560,7 +458,7 @@ AcpiUtGetEventName ( return ("InvalidEventID"); } - return ((char *) (uintptr_t) AcpiGbl_EventTypes[EventId]); + return (ACPI_CAST_PTR (char, AcpiGbl_EventTypes[EventId])); } @@ -590,7 +488,6 @@ static const char AcpiGbl_BadType[] = "UNDEFINED"; static const char *AcpiGbl_NsTypeNames[] = { -/*! [Begin] no source code translation (keep these strings as-is) */ /* 00 */ "Untyped", /* 01 */ "Integer", /* 02 */ "String", @@ -622,7 +519,6 @@ static const char *AcpiGbl_NsTypeNames[] = /* 28 */ "Extra", /* 29 */ "Data", /* 30 */ "Invalid" -/*! [End] no source code translation !*/ }; @@ -633,10 +529,10 @@ AcpiUtGetTypeName ( if (Type > ACPI_TYPE_INVALID) { - return ((char *) (uintptr_t) AcpiGbl_BadType); + return (ACPI_CAST_PTR (char, AcpiGbl_BadType)); } - return ((char *) (uintptr_t) AcpiGbl_NsTypeNames[Type]); + return (ACPI_CAST_PTR (char, AcpiGbl_NsTypeNames[Type])); } @@ -690,16 +586,16 @@ AcpiUtGetNodeName ( /* Descriptor must be a namespace node */ - if (Node->Descriptor != ACPI_DESC_TYPE_NAMED) + if (ACPI_GET_DESCRIPTOR_TYPE (Node) != ACPI_DESC_TYPE_NAMED) { return ("####"); } /* Name must be a valid ACPI name */ - if (!AcpiUtValidAcpiName (* (UINT32 *) Node->Name.Ascii)) + if (!AcpiUtValidAcpiName (Node->Name.Integer)) { - return ("????"); + Node->Name.Integer = AcpiUtRepairName (Node->Name.Ascii); } /* Return the name */ @@ -724,7 +620,6 @@ AcpiUtGetNodeName ( static const char *AcpiGbl_DescTypeNames[] = { -/*! [Begin] no source code translation (keep these ASL Keywords as-is) */ /* 00 */ "Invalid", /* 01 */ "Cached", /* 02 */ "State-Generic", @@ -741,7 +636,6 @@ static const char *AcpiGbl_DescTypeNames[] = /* 13 */ "Parser", /* 14 */ "Operand", /* 15 */ "Node" -/*! [End] no source code translation !*/ }; @@ -757,10 +651,11 @@ AcpiUtGetDescriptorName ( if (ACPI_GET_DESCRIPTOR_TYPE (Object) > ACPI_DESC_TYPE_MAX) { - return ((char *) (uintptr_t) AcpiGbl_BadType); + return (ACPI_CAST_PTR (char, AcpiGbl_BadType)); } - return ((char *) (uintptr_t) AcpiGbl_DescTypeNames[ACPI_GET_DESCRIPTOR_TYPE (Object)]); + return (ACPI_CAST_PTR (char, + AcpiGbl_DescTypeNames[ACPI_GET_DESCRIPTOR_TYPE (Object)])); } @@ -788,7 +683,7 @@ AcpiUtGetMutexName ( UINT32 MutexId) { - if (MutexId > MAX_MUTEX) + if (MutexId > ACPI_MAX_MUTEX) { return ("Invalid Mutex ID"); } @@ -847,7 +742,7 @@ AcpiUtInitGlobals ( UINT32 i; - ACPI_FUNCTION_TRACE ("UtInitGlobals"); + ACPI_FUNCTION_TRACE (UtInitGlobals); /* Create all memory caches */ @@ -858,25 +753,24 @@ AcpiUtInitGlobals ( return; } - /* ACPI table structure */ - - for (i = 0; i < NUM_ACPI_TABLE_TYPES; i++) - { - AcpiGbl_TableLists[i].Next = NULL; - AcpiGbl_TableLists[i].Count = 0; - } - /* Mutex locked flags */ - for (i = 0; i < NUM_MUTEX; i++) + for (i = 0; i < ACPI_NUM_MUTEX; i++) { AcpiGbl_MutexInfo[i].Mutex = NULL; AcpiGbl_MutexInfo[i].ThreadId = ACPI_MUTEX_NOT_ACQUIRED; AcpiGbl_MutexInfo[i].UseCount = 0; } + for (i = 0; i < ACPI_NUM_OWNERID_MASKS; i++) + { + AcpiGbl_OwnerIdMask[i] = 0; + } + AcpiGbl_OwnerIdMask[ACPI_NUM_OWNERID_MASKS - 1] = 0x80000000; /* Last ID is never valid */ + /* GPE support */ + AcpiGpeCount = 0; AcpiGbl_GpeXruptListHead = NULL; AcpiGbl_GpeFadtBlocks[0] = NULL; AcpiGbl_GpeFadtBlocks[1] = NULL; @@ -888,31 +782,23 @@ AcpiUtInitGlobals ( AcpiGbl_ExceptionHandler = NULL; AcpiGbl_InitHandler = NULL; - /* Global "typed" ACPI table pointers */ - - AcpiGbl_RSDP = NULL; - AcpiGbl_XSDT = NULL; - AcpiGbl_FACS = NULL; - AcpiGbl_FADT = NULL; - AcpiGbl_DSDT = NULL; - /* Global Lock support */ + AcpiGbl_GlobalLockSemaphore = NULL; + AcpiGbl_GlobalLockMutex = NULL; AcpiGbl_GlobalLockAcquired = FALSE; - AcpiGbl_GlobalLockThreadCount = 0; AcpiGbl_GlobalLockHandle = 0; /* Miscellaneous variables */ - AcpiGbl_TableFlags = ACPI_PHYSICAL_POINTER; - AcpiGbl_RsdpOriginalLocation = 0; AcpiGbl_CmSingleStep = FALSE; AcpiGbl_DbTerminateThreads = FALSE; AcpiGbl_Shutdown = FALSE; AcpiGbl_NsLookupCount = 0; AcpiGbl_PsFindCount = 0; AcpiGbl_AcpiHardwarePresent = TRUE; - AcpiGbl_OwnerIdMask = 0; + AcpiGbl_LastOwnerIdIndex = 0; + AcpiGbl_NextOwnerIdOffset = 0; AcpiGbl_TraceMethodName = 0; AcpiGbl_TraceDbgLevel = 0; AcpiGbl_TraceDbgLayer = 0; @@ -927,9 +813,8 @@ AcpiUtInitGlobals ( /* Namespace */ AcpiGbl_RootNode = NULL; - AcpiGbl_RootNodeStruct.Name.Integer = ACPI_ROOT_NAME; - AcpiGbl_RootNodeStruct.Descriptor = ACPI_DESC_TYPE_NAMED; + AcpiGbl_RootNodeStruct.DescriptorType = ACPI_DESC_TYPE_NAMED; AcpiGbl_RootNodeStruct.Type = ACPI_TYPE_DEVICE; AcpiGbl_RootNodeStruct.Child = NULL; AcpiGbl_RootNodeStruct.Peer = NULL; @@ -941,7 +826,17 @@ AcpiUtInitGlobals ( AcpiGbl_LowestStackPointer = ACPI_SIZE_MAX; #endif +#ifdef ACPI_DBG_TRACK_ALLOCATIONS + AcpiGbl_DisplayFinalMemStats = FALSE; +#endif + return_VOID; } +/* Public globals */ + +ACPI_EXPORT_SYMBOL (AcpiDbgLevel) +ACPI_EXPORT_SYMBOL (AcpiDbgLayer) +ACPI_EXPORT_SYMBOL (AcpiGpeCount) + |