summaryrefslogtreecommitdiffstats
path: root/sys/contrib/dev/acpica
diff options
context:
space:
mode:
authoriwasaki <iwasaki@FreeBSD.org>2002-06-30 17:50:46 +0000
committeriwasaki <iwasaki@FreeBSD.org>2002-06-30 17:50:46 +0000
commit6b92cff93be2b7ae83deb340b753b02444cdcacd (patch)
treea30a26908f5dc9678327cc04b639b945340f97c7 /sys/contrib/dev/acpica
parent918310234a7ff346da92f4f10b72dac878b415f2 (diff)
downloadFreeBSD-src-6b92cff93be2b7ae83deb340b753b02444cdcacd.zip
FreeBSD-src-6b92cff93be2b7ae83deb340b753b02444cdcacd.tar.gz
Vendor import of the Intel ACPI CA 200200404 drop.
Diffstat (limited to 'sys/contrib/dev/acpica')
-rw-r--r--sys/contrib/dev/acpica/acconfig.h4
-rw-r--r--sys/contrib/dev/acpica/acdebug.h5
-rw-r--r--sys/contrib/dev/acpica/acdispat.h26
-rw-r--r--sys/contrib/dev/acpica/acdos16.h7
-rw-r--r--sys/contrib/dev/acpica/acefi.h5
-rw-r--r--sys/contrib/dev/acpica/acenv.h10
-rw-r--r--sys/contrib/dev/acpica/acevents.h6
-rw-r--r--sys/contrib/dev/acpica/acexcep.h18
-rw-r--r--sys/contrib/dev/acpica/acgcc.h19
-rw-r--r--sys/contrib/dev/acpica/acglobal.h3
-rw-r--r--sys/contrib/dev/acpica/acinterp.h3
-rw-r--r--sys/contrib/dev/acpica/aclocal.h28
-rw-r--r--sys/contrib/dev/acpica/acobject.h207
-rw-r--r--sys/contrib/dev/acpica/acpiosxf.h12
-rw-r--r--sys/contrib/dev/acpica/acpixf.h2
-rw-r--r--sys/contrib/dev/acpica/acstruct.h6
-rw-r--r--sys/contrib/dev/acpica/actables.h18
-rw-r--r--sys/contrib/dev/acpica/actypes.h34
-rw-r--r--sys/contrib/dev/acpica/amlcode.h22
-rw-r--r--sys/contrib/dev/acpica/dbdisply.c12
-rw-r--r--sys/contrib/dev/acpica/dbfileio.c53
-rw-r--r--sys/contrib/dev/acpica/dbutils.c4
-rw-r--r--sys/contrib/dev/acpica/dsmethod.c9
-rw-r--r--sys/contrib/dev/acpica/dsmthdat.c18
-rw-r--r--sys/contrib/dev/acpica/dsobject.c363
-rw-r--r--sys/contrib/dev/acpica/dsopcode.c243
-rw-r--r--sys/contrib/dev/acpica/dsutils.c17
-rw-r--r--sys/contrib/dev/acpica/dswexec.c50
-rw-r--r--sys/contrib/dev/acpica/dswload.c6
-rw-r--r--sys/contrib/dev/acpica/evevent.c85
-rw-r--r--sys/contrib/dev/acpica/evmisc.c40
-rw-r--r--sys/contrib/dev/acpica/evxface.c76
-rw-r--r--sys/contrib/dev/acpica/exconfig.c4
-rw-r--r--sys/contrib/dev/acpica/exconvrt.c11
-rw-r--r--sys/contrib/dev/acpica/exdump.c21
-rw-r--r--sys/contrib/dev/acpica/exfield.c33
-rw-r--r--sys/contrib/dev/acpica/exfldio.c12
-rw-r--r--sys/contrib/dev/acpica/exoparg1.c35
-rw-r--r--sys/contrib/dev/acpica/exoparg2.c44
-rw-r--r--sys/contrib/dev/acpica/exprep.c94
-rw-r--r--sys/contrib/dev/acpica/exregion.c11
-rw-r--r--sys/contrib/dev/acpica/exresnte.c24
-rw-r--r--sys/contrib/dev/acpica/exresolv.c21
-rw-r--r--sys/contrib/dev/acpica/exresop.c10
-rw-r--r--sys/contrib/dev/acpica/exstore.c12
-rw-r--r--sys/contrib/dev/acpica/exstoren.c4
-rw-r--r--sys/contrib/dev/acpica/exstorob.c6
-rw-r--r--sys/contrib/dev/acpica/hwgpe.c39
-rw-r--r--sys/contrib/dev/acpica/hwregs.c12
-rw-r--r--sys/contrib/dev/acpica/hwsleep.c3
-rw-r--r--sys/contrib/dev/acpica/hwtimer.c5
-rw-r--r--sys/contrib/dev/acpica/nsaccess.c7
-rw-r--r--sys/contrib/dev/acpica/nsalloc.c8
-rw-r--r--sys/contrib/dev/acpica/nsdump.c77
-rw-r--r--sys/contrib/dev/acpica/nseval.c27
-rw-r--r--sys/contrib/dev/acpica/nsinit.c127
-rw-r--r--sys/contrib/dev/acpica/nsobject.c6
-rw-r--r--sys/contrib/dev/acpica/nssearch.c12
-rw-r--r--sys/contrib/dev/acpica/nsutils.c14
-rw-r--r--sys/contrib/dev/acpica/nsxfname.c6
-rw-r--r--sys/contrib/dev/acpica/psopcode.c18
-rw-r--r--sys/contrib/dev/acpica/psparse.c106
-rw-r--r--sys/contrib/dev/acpica/psutils.c10
-rw-r--r--sys/contrib/dev/acpica/psxface.c10
-rw-r--r--sys/contrib/dev/acpica/tbget.c296
-rw-r--r--sys/contrib/dev/acpica/tbinstal.c50
-rw-r--r--sys/contrib/dev/acpica/tbutils.c15
-rw-r--r--sys/contrib/dev/acpica/tbxface.c16
-rw-r--r--sys/contrib/dev/acpica/tbxfroot.c35
-rw-r--r--sys/contrib/dev/acpica/utcopy.c11
-rw-r--r--sys/contrib/dev/acpica/utdebug.c8
-rw-r--r--sys/contrib/dev/acpica/utdelete.c43
-rw-r--r--sys/contrib/dev/acpica/uteval.c12
-rw-r--r--sys/contrib/dev/acpica/utglobal.c58
74 files changed, 1701 insertions, 1083 deletions
diff --git a/sys/contrib/dev/acpica/acconfig.h b/sys/contrib/dev/acpica/acconfig.h
index 65789e2..438f99e 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: 94 $
+ * $Revision: 96 $
*
*****************************************************************************/
@@ -145,7 +145,7 @@
/* Version string */
-#define ACPI_CA_VERSION 0x20020308
+#define ACPI_CA_VERSION 0x20020403
/* Version of ACPI supported */
diff --git a/sys/contrib/dev/acpica/acdebug.h b/sys/contrib/dev/acpica/acdebug.h
index 127bfee..975d4d4 100644
--- a/sys/contrib/dev/acpica/acdebug.h
+++ b/sys/contrib/dev/acpica/acdebug.h
@@ -1,7 +1,7 @@
/******************************************************************************
*
* Name: acdebug.h - ACPI/AML debugger
- * $Revision: 57 $
+ * $Revision: 58 $
*
*****************************************************************************/
@@ -362,6 +362,9 @@ ACPI_STATUS
AcpiDbLoadAcpiTable (
NATIVE_CHAR *Filename);
+ACPI_STATUS
+AcpiDbGetAcpiTable (
+ NATIVE_CHAR *Filename);
/*
* dbhistry - debugger HISTORY command
diff --git a/sys/contrib/dev/acpica/acdispat.h b/sys/contrib/dev/acpica/acdispat.h
index b866490..d76b9f6 100644
--- a/sys/contrib/dev/acpica/acdispat.h
+++ b/sys/contrib/dev/acpica/acdispat.h
@@ -1,7 +1,7 @@
/******************************************************************************
*
* Name: acdispat.h - dispatcher (parser to interpreter interface)
- * $Revision: 51 $
+ * $Revision: 52 $
*
*****************************************************************************/
@@ -156,6 +156,14 @@ ACPI_STATUS
AcpiDsGetRegionArguments (
ACPI_OPERAND_OBJECT *RgnDesc);
+ACPI_STATUS
+AcpiDsGetBufferArguments (
+ ACPI_OPERAND_OBJECT *ObjDesc);
+
+ACPI_STATUS
+AcpiDsGetPackageArguments (
+ ACPI_OPERAND_OBJECT *ObjDesc);
+
/* dsctrl - Parser/Interpreter interface, control stack routines */
@@ -358,15 +366,23 @@ AcpiDsInitializeObjects (
ACPI_NAMESPACE_NODE *StartNode);
ACPI_STATUS
+AcpiDsBuildInternalBufferObj (
+ ACPI_WALK_STATE *WalkState,
+ ACPI_PARSE_OBJECT *Op,
+ UINT32 BufferLength,
+ ACPI_OPERAND_OBJECT **ObjDescPtr);
+
+ACPI_STATUS
AcpiDsBuildInternalPackageObj (
ACPI_WALK_STATE *WalkState,
ACPI_PARSE_OBJECT *op,
+ UINT32 PackageLength,
ACPI_OPERAND_OBJECT **ObjDesc);
ACPI_STATUS
AcpiDsBuildInternalObject (
ACPI_WALK_STATE *WalkState,
- ACPI_PARSE_OBJECT *op,
+ ACPI_PARSE_OBJECT *Op,
ACPI_OPERAND_OBJECT **ObjDescPtr);
ACPI_STATUS
@@ -396,6 +412,12 @@ AcpiDsEvalRegionOperands (
ACPI_PARSE_OBJECT *Op);
ACPI_STATUS
+AcpiDsEvalDataObjectOperands (
+ ACPI_WALK_STATE *WalkState,
+ ACPI_PARSE_OBJECT *Op,
+ ACPI_OPERAND_OBJECT *ObjDesc);
+
+ACPI_STATUS
AcpiDsInitializeRegion (
ACPI_HANDLE ObjHandle);
diff --git a/sys/contrib/dev/acpica/acdos16.h b/sys/contrib/dev/acpica/acdos16.h
index 35cf3c2..435f293 100644
--- a/sys/contrib/dev/acpica/acdos16.h
+++ b/sys/contrib/dev/acpica/acdos16.h
@@ -1,7 +1,7 @@
/******************************************************************************
*
* Name: acdos16.h - DOS specific defines, etc.
- * $Revision: 1 $
+ * $Revision: 2 $
*
*****************************************************************************/
@@ -134,10 +134,9 @@
#define ACPI_INTERNAL_VAR_XFACE __cdecl
#define ACPI_ASM_MACROS
-#define causeinterrupt(level)
#define BREAKPOINT3
-#define acpi_disable_irqs()
-#define acpi_enable_irqs()
+#define ACPI_DISABLE_IRQS()
+#define ACPI_ENABLE_IRQS()
#define halt()
#define ACPI_ACQUIRE_GLOBAL_LOCK(GLptr, Acq)
#define ACPI_RELEASE_GLOBAL_LOCK(GLptr, Acq)
diff --git a/sys/contrib/dev/acpica/acefi.h b/sys/contrib/dev/acpica/acefi.h
index f37afe5..f8db82d 100644
--- a/sys/contrib/dev/acpica/acefi.h
+++ b/sys/contrib/dev/acpica/acefi.h
@@ -1,7 +1,7 @@
/******************************************************************************
*
* Name: acefi.h - OS specific defines, etc.
- * $Revision: 9 $
+ * $Revision: 10 $
*
*****************************************************************************/
@@ -126,7 +126,8 @@
/* _int64 works for both IA32 and IA64 */
-#define COMPILER_DEPENDENT_UINT64 unsigned __int64
+#define COMPILER_DEPENDENT_INT64 __int64
+#define COMPILER_DEPENDENT_UINT64 unsigned __int64
/*
* Calling conventions:
diff --git a/sys/contrib/dev/acpica/acenv.h b/sys/contrib/dev/acpica/acenv.h
index 44306ad..0646c3b 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: 85 $
+ * $Revision: 86 $
*
*****************************************************************************/
@@ -375,11 +375,9 @@ typedef char *va_list;
#define ACPI_INTERNAL_VAR_XFACE
#define ACPI_ASM_MACROS
-#define causeinterrupt(level)
#define BREAKPOINT3
-#define acpi_disable_irqs()
-#define acpi_enable_irqs()
-#define halt()
+#define ACPI_DISABLE_IRQS()
+#define ACPI_ENABLE_IRQS()
#define ACPI_ACQUIRE_GLOBAL_LOCK(GLptr, Acq)
#define ACPI_RELEASE_GLOBAL_LOCK(GLptr, Acq)
@@ -390,9 +388,7 @@ typedef char *va_list;
/* Don't want software interrupts within a ring3 application */
-#undef causeinterrupt
#undef BREAKPOINT3
-#define causeinterrupt(level)
#define BREAKPOINT3
#endif
diff --git a/sys/contrib/dev/acpica/acevents.h b/sys/contrib/dev/acpica/acevents.h
index 21de799..bd87e14 100644
--- a/sys/contrib/dev/acpica/acevents.h
+++ b/sys/contrib/dev/acpica/acevents.h
@@ -1,7 +1,7 @@
/******************************************************************************
*
* Name: acevents.h - Event subcomponent prototypes and defines
- * $Revision: 75 $
+ * $Revision: 76 $
*
*****************************************************************************/
@@ -148,6 +148,10 @@ AcpiEvFixedEventDispatch (
* Evmisc
*/
+BOOLEAN
+AcpiEvIsNotifyObject (
+ ACPI_NAMESPACE_NODE *Node);
+
ACPI_STATUS
AcpiEvAcquireGlobalLock(
UINT32 Timeout);
diff --git a/sys/contrib/dev/acpica/acexcep.h b/sys/contrib/dev/acpica/acexcep.h
index 3065adc..15d3860 100644
--- a/sys/contrib/dev/acpica/acexcep.h
+++ b/sys/contrib/dev/acpica/acexcep.h
@@ -1,7 +1,7 @@
/******************************************************************************
*
* Name: acexcep.h - Exception codes returned by the ACPI subsystem
- * $Revision: 57 $
+ * $Revision: 59 $
*
*****************************************************************************/
@@ -165,8 +165,9 @@
#define AE_ALREADY_ACQUIRED (ACPI_STATUS) (0x0018 | AE_CODE_ENVIRONMENTAL)
#define AE_NO_HARDWARE_RESPONSE (ACPI_STATUS) (0x0019 | AE_CODE_ENVIRONMENTAL)
#define AE_NO_GLOBAL_LOCK (ACPI_STATUS) (0x001A | AE_CODE_ENVIRONMENTAL)
+#define AE_LOGICAL_ADDRESS (ACPI_STATUS) (0x001B | AE_CODE_ENVIRONMENTAL)
-#define AE_CODE_ENV_MAX 0x001A
+#define AE_CODE_ENV_MAX 0x001B
/*
* Programmer exceptions
@@ -177,8 +178,11 @@
#define AE_BAD_DATA (ACPI_STATUS) (0x0004 | AE_CODE_PROGRAMMER)
#define AE_BAD_ADDRESS (ACPI_STATUS) (0x0005 | AE_CODE_PROGRAMMER)
#define AE_ALIGNMENT (ACPI_STATUS) (0x0006 | AE_CODE_PROGRAMMER)
+#define AE_BAD_HEX_CONSTANT (ACPI_STATUS) (0x0007 | AE_CODE_PROGRAMMER)
+#define AE_BAD_OCTAL_CONSTANT (ACPI_STATUS) (0x0008 | AE_CODE_PROGRAMMER)
+#define AE_BAD_DECIMAL_CONSTANT (ACPI_STATUS) (0x0009 | AE_CODE_PROGRAMMER)
-#define AE_CODE_PGM_MAX 0x0006
+#define AE_CODE_PGM_MAX 0x0009
/*
@@ -279,7 +283,8 @@ NATIVE_CHAR const *AcpiGbl_ExceptionNames_Env[] =
"AE_NOT_ACQUIRED",
"AE_ALREADY_ACQUIRED",
"AE_NO_HARDWARE_RESPONSE",
- "AE_NO_GLOBAL_LOCK"
+ "AE_NO_GLOBAL_LOCK",
+ "AE_LOGICAL_ADDRESS"
};
NATIVE_CHAR const *AcpiGbl_ExceptionNames_Pgm[] =
@@ -289,7 +294,10 @@ NATIVE_CHAR const *AcpiGbl_ExceptionNames_Pgm[] =
"AE_BAD_PATHNAME",
"AE_BAD_DATA",
"AE_BAD_ADDRESS",
- "AE_ALIGNMENT"
+ "AE_ALIGNMENT",
+ "AE_BAD_HEX_CONSTANT",
+ "AE_BAD_OCTAL_CONSTANT",
+ "AE_BAD_DECIMAL_CONSTANT"
};
NATIVE_CHAR const *AcpiGbl_ExceptionNames_Tbl[] =
diff --git a/sys/contrib/dev/acpica/acgcc.h b/sys/contrib/dev/acpica/acgcc.h
index ea36178..7f6cdab 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: 19 $
+ * $Revision: 22 $
*
*****************************************************************************/
@@ -121,7 +121,8 @@
#ifdef __ia64__
#define _IA64
-#define COMPILER_DEPENDENT_UINT64 unsigned long
+#define COMPILER_DEPENDENT_INT64 long
+#define COMPILER_DEPENDENT_UINT64 unsigned long
/*
* Calling conventions:
@@ -143,10 +144,9 @@
/* Asm macros */
#define ACPI_ASM_MACROS
-#define causeinterrupt(level)
#define BREAKPOINT3
-#define acpi_disable_irqs() __cli()
-#define acpi_enable_irqs() __sti()
+#define ACPI_DISABLE_IRQS() __cli()
+#define ACPI_ENABLE_IRQS() __sti()
/*! [Begin] no source code translation */
@@ -202,7 +202,8 @@
#else /* DO IA32 */
-#define COMPILER_DEPENDENT_UINT64 unsigned long long
+#define COMPILER_DEPENDENT_INT64 long long
+#define COMPILER_DEPENDENT_UINT64 unsigned long long
/*
* Calling conventions:
@@ -220,11 +221,9 @@
/* Asm macros */
#define ACPI_ASM_MACROS
-#define causeinterrupt(level)
#define BREAKPOINT3
-#define acpi_disable_irqs() __cli()
-#define acpi_enable_irqs() __sti()
-#define halt() __asm__ __volatile__ ("sti; hlt":::"memory")
+#define ACPI_DISABLE_IRQS() __cli()
+#define ACPI_ENABLE_IRQS() __sti()
/*! [Begin] no source code translation
*
diff --git a/sys/contrib/dev/acpica/acglobal.h b/sys/contrib/dev/acpica/acglobal.h
index 7edec62..7465b7c 100644
--- a/sys/contrib/dev/acpica/acglobal.h
+++ b/sys/contrib/dev/acpica/acglobal.h
@@ -1,7 +1,7 @@
/******************************************************************************
*
* Name: acglobal.h - Declarations for global variables
- * $Revision: 120 $
+ * $Revision: 121 $
*
*****************************************************************************/
@@ -162,6 +162,7 @@ extern UINT32 AcpiGbl_NestingLevel;
* of each in the system. Each global points to the actual table.
*
*/
+ACPI_EXTERN UINT32 AcpiGbl_TableFlags;
ACPI_EXTERN RSDP_DESCRIPTOR *AcpiGbl_RSDP;
ACPI_EXTERN XSDT_DESCRIPTOR *AcpiGbl_XSDT;
ACPI_EXTERN FADT_DESCRIPTOR *AcpiGbl_FADT;
diff --git a/sys/contrib/dev/acpica/acinterp.h b/sys/contrib/dev/acpica/acinterp.h
index 3cbf6ef..4a7df65 100644
--- a/sys/contrib/dev/acpica/acinterp.h
+++ b/sys/contrib/dev/acpica/acinterp.h
@@ -1,7 +1,7 @@
/******************************************************************************
*
* Name: acinterp.h - Interpreter subcomponent prototypes and defines
- * $Revision: 132 $
+ * $Revision: 133 $
*
*****************************************************************************/
@@ -238,6 +238,7 @@ AcpiExSetBufferDatum (
ACPI_STATUS
AcpiExReadDataFromField (
+ ACPI_WALK_STATE *WalkState,
ACPI_OPERAND_OBJECT *ObjDesc,
ACPI_OPERAND_OBJECT **RetBufferDesc);
diff --git a/sys/contrib/dev/acpica/aclocal.h b/sys/contrib/dev/acpica/aclocal.h
index bd0b431..ad3fad5 100644
--- a/sys/contrib/dev/acpica/aclocal.h
+++ b/sys/contrib/dev/acpica/aclocal.h
@@ -1,7 +1,7 @@
/******************************************************************************
*
* Name: aclocal.h - Internal data types used across the ACPI subsystem
- * $Revision: 159 $
+ * $Revision: 162 $
*
*****************************************************************************/
@@ -147,6 +147,7 @@ typedef UINT32 ACPI_MUTEX_HANDLE;
#define ACPI_DESC_TYPE_NAMED 0xAA
+
/*****************************************************************************
*
* Mutex typedefs and structs
@@ -273,12 +274,18 @@ typedef enum
* be the first byte in this structure.
*/
+typedef union acpi_name_union
+{
+ UINT32 Integer;
+ char Ascii[4];
+} ACPI_NAME_UNION;
+
typedef struct acpi_node
{
UINT8 Descriptor; /* Used to differentiate object descriptor types */
UINT8 Type; /* Type associated with this name */
UINT16 OwnerId;
- UINT32 Name; /* ACPI Name, always 4 chars per ACPI spec */
+ ACPI_NAME_UNION Name; /* ACPI Name, always 4 chars per ACPI spec */
union acpi_operand_obj *Object; /* Pointer to attached ACPI object (optional) */
@@ -405,8 +412,9 @@ typedef struct
typedef struct
{
+ UINT8 AddressSpaceId;
+ ACPI_GENERIC_ADDRESS *BlockAddress;
UINT16 RegisterCount;
- UINT16 BlockAddress;
UINT8 BlockBaseNumber;
} ACPI_GPE_BLOCK_INFO;
@@ -415,8 +423,8 @@ typedef struct
typedef struct
{
- UINT16 StatusAddr; /* Address of status reg */
- UINT16 EnableAddr; /* Address of enable reg */
+ ACPI_GENERIC_ADDRESS StatusAddress; /* Address of status reg */
+ ACPI_GENERIC_ADDRESS EnableAddress; /* Address of enable reg */
UINT8 Status; /* Current value of status reg */
UINT8 Enable; /* Current value of enable reg */
UINT8 WakeEnable; /* Mask of bits to keep enabled when sleeping */
@@ -501,11 +509,11 @@ struct acpi_obj_mutex;
#define ACPI_STATE_COMMON /* Two 32-bit fields and a pointer */\
UINT8 DataType; /* To differentiate various internal objs */\
- UINT8 Flags; \
- UINT16 Value; \
- UINT16 State; \
- UINT16 AcpiEval; \
- void *Next; \
+ UINT8 Flags; \
+ UINT16 Value; \
+ UINT16 State; \
+ UINT16 Reserved; \
+ void *Next; \
typedef struct acpi_common_state
{
diff --git a/sys/contrib/dev/acpica/acobject.h b/sys/contrib/dev/acpica/acobject.h
index f5a5a3f..5ce1bae 100644
--- a/sys/contrib/dev/acpica/acobject.h
+++ b/sys/contrib/dev/acpica/acobject.h
@@ -2,7 +2,7 @@
/******************************************************************************
*
* Name: acobject.h - Definition of ACPI_OPERAND_OBJECT (Internal object only)
- * $Revision: 106 $
+ * $Revision: 110 $
*
*****************************************************************************/
@@ -123,23 +123,14 @@
* The ACPI_OPERAND_OBJECT is used to pass AML operands from the dispatcher
* to the interpreter, and to keep track of the various handlers such as
* address space handlers and notify handlers. The object is a constant
- * size in order to allow them to be cached and reused.
- *
- * All variants of the ACPI_OPERAND_OBJECT are defined with the same
- * sequence of field types, with fields that are not used in a particular
- * variant being named "Reserved". This is not strictly necessary, but
- * may in some circumstances simplify understanding if these structures
- * need to be displayed in a debugger having limited (or no) support for
- * union types. It also simplifies some debug code in DumpTable() which
- * dumps multi-level values: fetching Buffer.Pointer suffices to pick up
- * the value or next level for any of several types.
+ * size in order to allow it to be cached and reused.
*/
-/******************************************************************************
+/*******************************************************************************
*
* Common Descriptors
*
- *****************************************************************************/
+ ******************************************************************************/
/*
* Common area for all objects.
@@ -147,8 +138,6 @@
* DataType is used to differentiate between internal descriptors, and MUST
* be the first byte in this structure.
*/
-
-
#define ACPI_OBJECT_COMMON_HEADER /* SIZE/ALIGNMENT: 32 bits, one ptr plus trailing 8-bit flag */\
UINT8 Descriptor; /* To differentiate various internal objs */\
UINT8 Type; /* ACPI_OBJECT_TYPE */\
@@ -156,7 +145,7 @@
union acpi_operand_obj *NextObject; /* Objects linked to parent NS node */\
UINT8 Flags; \
-/* Defines for flag byte above */
+/* Values for flag byte above */
#define AOPOBJ_RESERVED 0x01
#define AOPOBJ_STATIC_POINTER 0x02
@@ -192,29 +181,30 @@
UINT32 Length;
+/*
+ * Common fields for objects that support ASL notifications
+ */
+#define ACPI_COMMON_NOTIFY_INFO \
+ union acpi_operand_obj *SysHandler; /* Handler for system notifies */\
+ union acpi_operand_obj *DrvHandler; /* Handler for driver notifies */\
+ union acpi_operand_obj *AddrHandler; /* Handler for Address space */
+
+
+
/******************************************************************************
*
- * Individual Object Descriptors
+ * Basic data types
*
*****************************************************************************/
-
-typedef struct /* COMMON */
+typedef struct AcpiObjectCommon
{
ACPI_OBJECT_COMMON_HEADER
} ACPI_OBJECT_COMMON;
-typedef struct /* CACHE_LIST */
-{
- ACPI_OBJECT_COMMON_HEADER
- union acpi_operand_obj *Next; /* Link for object cache and internal lists*/
-
-} ACPI_OBJECT_CACHE_LIST;
-
-
-typedef struct /* NUMBER - has value */
+typedef struct AcpiObjectInteger
{
ACPI_OBJECT_COMMON_HEADER
@@ -223,48 +213,48 @@ typedef struct /* NUMBER - has value */
} ACPI_OBJECT_INTEGER;
-typedef struct /* STRING - has length and pointer - Null terminated, ASCII characters only */
+typedef struct AcpiObjectString /* Null terminated, ASCII characters only */
{
ACPI_OBJECT_COMMON_HEADER
ACPI_COMMON_BUFFER_INFO
- NATIVE_CHAR *Pointer; /* String value in AML stream or in allocated space */
+ NATIVE_CHAR *Pointer; /* String in AML stream or allocated string */
} ACPI_OBJECT_STRING;
-typedef struct /* BUFFER - has length and pointer - not null terminated */
+typedef struct AcpiObjectBuffer
{
ACPI_OBJECT_COMMON_HEADER
ACPI_COMMON_BUFFER_INFO
- UINT8 *Pointer; /* Buffer value in AML stream or in allocated space */
+ UINT8 *Pointer; /* Buffer in AML stream or allocated buffer */
ACPI_NAMESPACE_NODE *Node; /* Link back to parent node */
+ UINT8 *AmlStart;
+ UINT32 AmlLength;
} ACPI_OBJECT_BUFFER;
-typedef struct /* PACKAGE - has count, elements, next element */
+typedef struct AcpiObjectPackage
{
ACPI_OBJECT_COMMON_HEADER
UINT32 Count; /* # of elements in package */
+ UINT32 AmlLength;
+ UINT8 *AmlStart;
+ ACPI_NAMESPACE_NODE *Node; /* Link back to parent node */
union acpi_operand_obj **Elements; /* Array of pointers to AcpiObjects */
- union acpi_operand_obj **NextElement; /* used only while initializing */
} ACPI_OBJECT_PACKAGE;
-typedef struct /* DEVICE - has handle and notification handler/context */
-{
- ACPI_OBJECT_COMMON_HEADER
-
- union acpi_operand_obj *SysHandler; /* Handler for system notifies */
- union acpi_operand_obj *DrvHandler; /* Handler for driver notifies */
- union acpi_operand_obj *AddrHandler; /* Handler for Address space */
-
-} ACPI_OBJECT_DEVICE;
+/******************************************************************************
+ *
+ * Complex data types
+ *
+ *****************************************************************************/
-typedef struct /* EVENT */
+typedef struct AcpiObjectEvent
{
ACPI_OBJECT_COMMON_HEADER
void *Semaphore;
@@ -274,7 +264,7 @@ typedef struct /* EVENT */
#define INFINITE_CONCURRENCY 0xFF
-typedef struct /* METHOD */
+typedef struct AcpiObjectMethod
{
ACPI_OBJECT_COMMON_HEADER
UINT8 MethodFlags;
@@ -292,7 +282,7 @@ typedef struct /* METHOD */
} ACPI_OBJECT_METHOD;
-typedef struct acpi_obj_mutex /* MUTEX */
+typedef struct AcpiObjectMutex
{
ACPI_OBJECT_COMMON_HEADER
UINT16 SyncLevel;
@@ -306,65 +296,84 @@ typedef struct acpi_obj_mutex /* MUTEX */
} ACPI_OBJECT_MUTEX;
-typedef struct /* REGION */
+typedef struct AcpiObjectRegion
{
ACPI_OBJECT_COMMON_HEADER
UINT8 SpaceId;
- UINT32 Length;
- ACPI_PHYSICAL_ADDRESS Address;
union acpi_operand_obj *AddrHandler; /* Handler for system notifies */
ACPI_NAMESPACE_NODE *Node; /* containing object */
union acpi_operand_obj *Next;
+ UINT32 Length;
+ ACPI_PHYSICAL_ADDRESS Address;
} ACPI_OBJECT_REGION;
-typedef struct /* POWER RESOURCE - has Handle and notification handler/context*/
+
+/******************************************************************************
+ *
+ * Objects that can be notified. All share a common NotifyInfo area.
+ *
+ *****************************************************************************/
+
+typedef struct AcpiObjectNotifyCommon /* COMMON NOTIFY for POWER, PROCESSOR, DEVICE, and THERMAL */
+{
+ ACPI_OBJECT_COMMON_HEADER
+ ACPI_COMMON_NOTIFY_INFO
+
+} ACPI_OBJECT_NOTIFY_COMMON;
+
+
+typedef struct AcpiObjectDevice
+{
+ ACPI_OBJECT_COMMON_HEADER
+ ACPI_COMMON_NOTIFY_INFO
+
+} ACPI_OBJECT_DEVICE;
+
+
+typedef struct AcpiObjectPowerResource
{
ACPI_OBJECT_COMMON_HEADER
+ ACPI_COMMON_NOTIFY_INFO
UINT32 SystemLevel;
UINT32 ResourceOrder;
- union acpi_operand_obj *SysHandler; /* Handler for system notifies */
- union acpi_operand_obj *DrvHandler; /* Handler for driver notifies */
-
} ACPI_OBJECT_POWER_RESOURCE;
-typedef struct /* PROCESSOR - has Handle and notification handler/context*/
+typedef struct AcpiObjectProcessor
{
ACPI_OBJECT_COMMON_HEADER
+ ACPI_COMMON_NOTIFY_INFO
UINT32 ProcId;
UINT32 Length;
ACPI_IO_ADDRESS Address;
- union acpi_operand_obj *SysHandler; /* Handler for system notifies */
- union acpi_operand_obj *DrvHandler; /* Handler for driver notifies */
- union acpi_operand_obj *AddrHandler; /* Handler for Address space */
-
} ACPI_OBJECT_PROCESSOR;
-typedef struct /* THERMAL ZONE - has Handle and Handler/Context */
+typedef struct AcpiObjectThermalZone
{
ACPI_OBJECT_COMMON_HEADER
+ ACPI_COMMON_NOTIFY_INFO
- union acpi_operand_obj *SysHandler; /* Handler for system notifies */
- union acpi_operand_obj *DrvHandler; /* Handler for driver notifies */
- union acpi_operand_obj *AddrHandler; /* Handler for Address space */
} ACPI_OBJECT_THERMAL_ZONE;
-/*
+
+/******************************************************************************
+ *
* Fields. All share a common header/info field.
- */
+ *
+ *****************************************************************************/
-typedef struct /* COMMON FIELD (for BUFFER, REGION, BANK, and INDEX fields) */
+typedef struct AcpiObjectFieldCommon /* COMMON FIELD (for BUFFER, REGION, BANK, and INDEX fields) */
{
ACPI_OBJECT_COMMON_HEADER
ACPI_COMMON_FIELD_INFO
@@ -373,7 +382,7 @@ typedef struct /* COMMON FIELD (for BUFFER, REGION, BANK, and INDEX fields) */
} ACPI_OBJECT_FIELD_COMMON;
-typedef struct /* REGION FIELD */
+typedef struct AcpiObjectRegionField
{
ACPI_OBJECT_COMMON_HEADER
ACPI_COMMON_FIELD_INFO
@@ -382,7 +391,7 @@ typedef struct /* REGION FIELD */
} ACPI_OBJECT_REGION_FIELD;
-typedef struct /* BANK FIELD */
+typedef struct AcpiObjectBankField
{
ACPI_OBJECT_COMMON_HEADER
ACPI_COMMON_FIELD_INFO
@@ -393,7 +402,7 @@ typedef struct /* BANK FIELD */
} ACPI_OBJECT_BANK_FIELD;
-typedef struct /* INDEX FIELD */
+typedef struct AcpiObjectIndexField
{
ACPI_OBJECT_COMMON_HEADER
ACPI_COMMON_FIELD_INFO
@@ -411,7 +420,7 @@ typedef struct /* INDEX FIELD */
/* The BufferField is different in that it is part of a Buffer, not an OpRegion */
-typedef struct /* BUFFER FIELD */
+typedef struct AcpiObjectBufferField
{
ACPI_OBJECT_COMMON_HEADER
ACPI_COMMON_FIELD_INFO
@@ -421,11 +430,14 @@ typedef struct /* BUFFER FIELD */
} ACPI_OBJECT_BUFFER_FIELD;
-/*
- * Handlers
- */
-typedef struct /* NOTIFY HANDLER */
+/******************************************************************************
+ *
+ * Objects for handlers
+ *
+ *****************************************************************************/
+
+typedef struct AcpiObjectNotifyHandler
{
ACPI_OBJECT_COMMON_HEADER
@@ -441,7 +453,7 @@ typedef struct /* NOTIFY HANDLER */
#define ACPI_ADDR_HANDLER_DEFAULT_INSTALLED 0x1
-typedef struct /* ADDRESS HANDLER */
+typedef struct AcpiObjectAddrHandler
{
ACPI_OBJECT_COMMON_HEADER
@@ -458,12 +470,18 @@ typedef struct /* ADDRESS HANDLER */
} ACPI_OBJECT_ADDR_HANDLER;
+
+/******************************************************************************
+ *
+ * Special internal objects
+ *
+ *****************************************************************************/
+
/*
* The Reference object type is used for these opcodes:
* Arg[0-6], Local[0-7], IndexOp, NameOp, ZeroOp, OneOp, OnesOp, DebugOp
*/
-
-typedef struct /* Reference - Local object type */
+typedef struct AcpiObjectReference
{
ACPI_OBJECT_COMMON_HEADER
@@ -485,8 +503,7 @@ typedef struct /* Reference - Local object type */
*
* Currently: Region and FieldUnit types
*/
-
-typedef struct /* EXTRA */
+typedef struct AcpiObjectExtra
{
ACPI_OBJECT_COMMON_HEADER
UINT8 ByteFill1;
@@ -499,7 +516,9 @@ typedef struct /* EXTRA */
} ACPI_OBJECT_EXTRA;
-typedef struct /* DATA */
+/* Additional data that can be attached to namespace nodes */
+
+typedef struct AcpiObjectData
{
ACPI_OBJECT_COMMON_HEADER
ACPI_OBJECT_HANDLER Handler;
@@ -508,38 +527,56 @@ typedef struct /* DATA */
} ACPI_OBJECT_DATA;
+/* Structure used when objects are cached for reuse */
+
+typedef struct AcpiObjectCacheList
+{
+ ACPI_OBJECT_COMMON_HEADER
+ union acpi_operand_obj *Next; /* Link for object cache and internal lists*/
+
+} ACPI_OBJECT_CACHE_LIST;
+
+
+
/******************************************************************************
*
- * ACPI_OPERAND_OBJECT Descriptor - a giant union of all of the above
+ * ACPI_OPERAND_OBJECT Descriptor - a giant union of all of the above
*
*****************************************************************************/
-typedef union acpi_operand_obj
+typedef union acpi_operand_obj
{
ACPI_OBJECT_COMMON Common;
- ACPI_OBJECT_CACHE_LIST Cache;
+
ACPI_OBJECT_INTEGER Integer;
ACPI_OBJECT_STRING String;
ACPI_OBJECT_BUFFER Buffer;
ACPI_OBJECT_PACKAGE Package;
- ACPI_OBJECT_BUFFER_FIELD BufferField;
- ACPI_OBJECT_DEVICE Device;
+
ACPI_OBJECT_EVENT Event;
ACPI_OBJECT_METHOD Method;
ACPI_OBJECT_MUTEX Mutex;
ACPI_OBJECT_REGION Region;
+
+ ACPI_OBJECT_NOTIFY_COMMON CommonNotify;
+ ACPI_OBJECT_DEVICE Device;
ACPI_OBJECT_POWER_RESOURCE PowerResource;
ACPI_OBJECT_PROCESSOR Processor;
ACPI_OBJECT_THERMAL_ZONE ThermalZone;
+
ACPI_OBJECT_FIELD_COMMON CommonField;
ACPI_OBJECT_REGION_FIELD Field;
+ ACPI_OBJECT_BUFFER_FIELD BufferField;
ACPI_OBJECT_BANK_FIELD BankField;
ACPI_OBJECT_INDEX_FIELD IndexField;
- ACPI_OBJECT_REFERENCE Reference;
+
ACPI_OBJECT_NOTIFY_HANDLER NotifyHandler;
ACPI_OBJECT_ADDR_HANDLER AddrHandler;
+
+ ACPI_OBJECT_REFERENCE Reference;
ACPI_OBJECT_EXTRA Extra;
ACPI_OBJECT_DATA Data;
+ ACPI_OBJECT_CACHE_LIST Cache;
} ACPI_OPERAND_OBJECT;
diff --git a/sys/contrib/dev/acpica/acpiosxf.h b/sys/contrib/dev/acpica/acpiosxf.h
index bbd8a86..ef2a2fc 100644
--- a/sys/contrib/dev/acpica/acpiosxf.h
+++ b/sys/contrib/dev/acpica/acpiosxf.h
@@ -175,10 +175,20 @@ ACPI_STATUS
AcpiOsTerminate (
void);
+
+/*
+ * ACPI Table interfaces
+ */
+
ACPI_STATUS
AcpiOsGetRootPointer (
UINT32 Flags,
- ACPI_PHYSICAL_ADDRESS *RsdpPhysicalAddress);
+ ACPI_POINTER *Address);
+
+ACPI_STATUS
+AcpiOsTableOverride (
+ ACPI_TABLE_HEADER *ExistingTable,
+ ACPI_TABLE_HEADER **NewTable);
/*
diff --git a/sys/contrib/dev/acpica/acpixf.h b/sys/contrib/dev/acpica/acpixf.h
index 5a02225..819bb67 100644
--- a/sys/contrib/dev/acpica/acpixf.h
+++ b/sys/contrib/dev/acpica/acpixf.h
@@ -187,7 +187,7 @@ AcpiFree (
ACPI_STATUS
AcpiFindRootPointer (
UINT32 Flags,
- ACPI_PHYSICAL_ADDRESS *RsdpPhysicalAddress);
+ ACPI_POINTER *RsdpAddress);
ACPI_STATUS
AcpiLoadTables (
diff --git a/sys/contrib/dev/acpica/acstruct.h b/sys/contrib/dev/acpica/acstruct.h
index 4a2592b..d4d24a9 100644
--- a/sys/contrib/dev/acpica/acstruct.h
+++ b/sys/contrib/dev/acpica/acstruct.h
@@ -1,7 +1,7 @@
/******************************************************************************
*
* Name: acstruct.h - Internal structs
- * $Revision: 16 $
+ * $Revision: 17 $
*
*****************************************************************************/
@@ -195,8 +195,12 @@ typedef struct acpi_init_walk_info
UINT16 MethodCount;
UINT16 OpRegionCount;
UINT16 FieldCount;
+ UINT16 BufferCount;
+ UINT16 PackageCount;
UINT16 OpRegionInit;
UINT16 FieldInit;
+ UINT16 BufferInit;
+ UINT16 PackageInit;
UINT16 ObjectCount;
ACPI_TABLE_DESC *TableDesc;
diff --git a/sys/contrib/dev/acpica/actables.h b/sys/contrib/dev/acpica/actables.h
index 02181d6..39678a3 100644
--- a/sys/contrib/dev/acpica/actables.h
+++ b/sys/contrib/dev/acpica/actables.h
@@ -1,7 +1,7 @@
/******************************************************************************
*
* Name: actables.h - ACPI table management
- * $Revision: 35 $
+ * $Revision: 36 $
*
*****************************************************************************/
@@ -162,22 +162,16 @@ AcpiTbGetTablePtr (
ACPI_STATUS
AcpiTbGetTable (
- ACPI_PHYSICAL_ADDRESS PhysicalAddress,
- ACPI_TABLE_HEADER *BufferPtr,
+ ACPI_POINTER *Address,
ACPI_TABLE_DESC *TableInfo);
ACPI_STATUS
AcpiTbVerifyRsdp (
- ACPI_PHYSICAL_ADDRESS RSDP_PhysicalAddress);
-
-ACPI_STATUS
-AcpiTbGetTableFacs (
- ACPI_TABLE_HEADER *BufferPtr,
- ACPI_TABLE_DESC *TableInfo);
+ ACPI_POINTER *Address);
-ACPI_PHYSICAL_ADDRESS
+void
AcpiTbGetRsdtAddress (
- void);
+ ACPI_POINTER *OutAddress);
ACPI_STATUS
AcpiTbValidateRsdt (
@@ -185,7 +179,7 @@ AcpiTbValidateRsdt (
ACPI_STATUS
AcpiTbGetTablePointer (
- ACPI_PHYSICAL_ADDRESS PhysicalAddress,
+ ACPI_POINTER *Address,
UINT32 Flags,
UINT32 *Size,
ACPI_TABLE_HEADER **TablePtr);
diff --git a/sys/contrib/dev/acpica/actypes.h b/sys/contrib/dev/acpica/actypes.h
index 1bb8603..a7a99bb 100644
--- a/sys/contrib/dev/acpica/actypes.h
+++ b/sys/contrib/dev/acpica/actypes.h
@@ -1,7 +1,7 @@
/******************************************************************************
*
* Name: actypes.h - Common data types for the entire ACPI subsystem
- * $Revision: 224 $
+ * $Revision: 227 $
*
*****************************************************************************/
@@ -148,12 +148,13 @@ typedef unsigned char BOOLEAN;
typedef unsigned short UINT16;
typedef int INT32;
typedef unsigned int UINT32;
+typedef COMPILER_DEPENDENT_INT64 INT64;
typedef COMPILER_DEPENDENT_UINT64 UINT64;
typedef UINT64 NATIVE_UINT;
typedef UINT64 NATIVE_INT;
-typedef NATIVE_UINT ACPI_TBLPTR;
+typedef UINT64 ACPI_TBLPTR;
typedef UINT64 ACPI_IO_ADDRESS;
typedef UINT64 ACPI_PHYSICAL_ADDRESS;
typedef UINT64 ACPI_SIZE;
@@ -210,12 +211,13 @@ typedef unsigned char BOOLEAN;
typedef unsigned short UINT16;
typedef int INT32;
typedef unsigned int UINT32;
+typedef COMPILER_DEPENDENT_INT64 INT64;
typedef COMPILER_DEPENDENT_UINT64 UINT64;
typedef UINT32 NATIVE_UINT;
typedef INT32 NATIVE_INT;
-typedef NATIVE_UINT ACPI_TBLPTR;
+typedef UINT64 ACPI_TBLPTR;
typedef UINT32 ACPI_IO_ADDRESS;
typedef UINT64 ACPI_PHYSICAL_ADDRESS;
typedef UINT32 ACPI_SIZE;
@@ -239,7 +241,6 @@ typedef char NATIVE_CHAR;
/*
* Data type ranges
*/
-
#define ACPI_UINT8_MAX (UINT8) 0xFF
#define ACPI_UINT16_MAX (UINT16) 0xFFFF
#define ACPI_UINT32_MAX (UINT32) 0xFFFFFFFF
@@ -262,6 +263,31 @@ typedef UINT64 u64;
/*
+ * Pointer overlays to avoid lots of typecasting for
+ * code that accepts both physical and logical pointers.
+ */
+typedef union AcpiPointers
+{
+ ACPI_PHYSICAL_ADDRESS Physical;
+ void *Logical;
+ ACPI_TBLPTR Value;
+
+} ACPI_POINTERS;
+
+typedef struct AcpiPointer
+{
+ UINT32 PointerType;
+ ACPI_POINTERS Pointer;
+
+} ACPI_POINTER;
+
+/* PointerTypes for above */
+
+#define ACPI_LOGICAL_POINTER 0x01
+#define ACPI_PHYSICAL_POINTER 0x02
+
+
+/*
* Useful defines
*/
diff --git a/sys/contrib/dev/acpica/amlcode.h b/sys/contrib/dev/acpica/amlcode.h
index bb08120..ebb45ef 100644
--- a/sys/contrib/dev/acpica/amlcode.h
+++ b/sys/contrib/dev/acpica/amlcode.h
@@ -3,7 +3,7 @@
* Name: amlcode.h - Definitions for AML, as included in "definition blocks"
* Declarations and definitions contained herein are derived
* directly from the ACPI specification.
- * $Revision: 66 $
+ * $Revision: 67 $
*
*****************************************************************************/
@@ -276,6 +276,7 @@
#define AML_INT_STATICSTRING_OP (UINT16) 0x0034
#define AML_INT_METHODCALL_OP (UINT16) 0x0035
#define AML_INT_RETURN_VALUE_OP (UINT16) 0x0036
+#define AML_INT_EVAL_SUBTREE_OP (UINT16) 0x0037
#define ARG_NONE 0x0
@@ -426,15 +427,16 @@
/* Misc */
#define AML_TYPE_CREATE_FIELD 0x11
-#define AML_TYPE_CONTROL 0x12
-#define AML_TYPE_NAMED_NO_OBJ 0x13
-#define AML_TYPE_NAMED_FIELD 0x14
-#define AML_TYPE_NAMED_SIMPLE 0x15
-#define AML_TYPE_NAMED_COMPLEX 0x16
-#define AML_TYPE_RETURN 0x17
-
-#define AML_TYPE_UNDEFINED 0x18
-#define AML_TYPE_BOGUS 0x19
+#define AML_TYPE_CREATE_OBJECT 0x12
+#define AML_TYPE_CONTROL 0x13
+#define AML_TYPE_NAMED_NO_OBJ 0x14
+#define AML_TYPE_NAMED_FIELD 0x15
+#define AML_TYPE_NAMED_SIMPLE 0x16
+#define AML_TYPE_NAMED_COMPLEX 0x17
+#define AML_TYPE_RETURN 0x18
+
+#define AML_TYPE_UNDEFINED 0x19
+#define AML_TYPE_BOGUS 0x1A
/*
diff --git a/sys/contrib/dev/acpica/dbdisply.c b/sys/contrib/dev/acpica/dbdisply.c
index b049511..536c808 100644
--- a/sys/contrib/dev/acpica/dbdisply.c
+++ b/sys/contrib/dev/acpica/dbdisply.c
@@ -1,7 +1,7 @@
/*******************************************************************************
*
* Module Name: dbdisply - debug display commands
- * $Revision: 66 $
+ * $Revision: 67 $
*
******************************************************************************/
@@ -409,6 +409,7 @@ AcpiDbDecodeInternalObject (
if (!ObjDesc)
{
+ AcpiOsPrintf (" Uninitialized\n");
return;
}
@@ -540,21 +541,21 @@ AcpiDbDisplayInternalObject (
break;
case AML_LOCAL_OP:
- AcpiOsPrintf ("[Local%d]", ObjDesc->Reference.Offset);
+ AcpiOsPrintf ("[Local%d] ", ObjDesc->Reference.Offset);
if (WalkState)
{
ObjDesc = WalkState->LocalVariables[ObjDesc->Reference.Offset].Object;
- AcpiOsPrintf (" %p", ObjDesc);
+ AcpiOsPrintf ("%p", ObjDesc);
AcpiDbDecodeInternalObject (ObjDesc);
}
break;
case AML_ARG_OP:
- AcpiOsPrintf ("[Arg%d] ", ObjDesc->Reference.Offset);
+ AcpiOsPrintf ("[Arg%d] ", ObjDesc->Reference.Offset);
if (WalkState)
{
ObjDesc = WalkState->Arguments[ObjDesc->Reference.Offset].Object;
- AcpiOsPrintf (" %p", ObjDesc);
+ AcpiOsPrintf ("%p", ObjDesc);
AcpiDbDecodeInternalObject (ObjDesc);
}
break;
@@ -589,7 +590,6 @@ AcpiDbDisplayInternalObject (
break;
}
-
AcpiOsPrintf ("\n");
}
diff --git a/sys/contrib/dev/acpica/dbfileio.c b/sys/contrib/dev/acpica/dbfileio.c
index a5c3221..19ba9a0 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: 59 $
+ * $Revision: 60 $
*
******************************************************************************/
@@ -414,27 +414,14 @@ AeLocalLoadTable (
}
-/*******************************************************************************
- *
- * FUNCTION: AcpiDbLoadAcpiTable
- *
- * PARAMETERS: Filname - File where table is located
- *
- * RETURN: Status
- *
- * DESCRIPTION: Load an ACPI table from a file
- *
- ******************************************************************************/
-
+#ifdef ACPI_APPLICATION
ACPI_STATUS
-AcpiDbLoadAcpiTable (
+AcpiDbGetAcpiTable (
NATIVE_CHAR *Filename)
{
-#ifdef ACPI_APPLICATION
FILE *fp;
- ACPI_STATUS Status;
UINT32 TableLength;
-
+ ACPI_STATUS Status;
/* Open the file */
@@ -458,7 +445,37 @@ AcpiDbLoadAcpiTable (
return (Status);
}
- /* Attempt to recognize and install the table */
+ return (AE_OK);
+ }
+#endif
+
+/*******************************************************************************
+ *
+ * FUNCTION: AcpiDbLoadAcpiTable
+ *
+ * PARAMETERS: Filname - File where table is located
+ *
+ * RETURN: Status
+ *
+ * DESCRIPTION: Load an ACPI table from a file
+ *
+ ******************************************************************************/
+
+ACPI_STATUS
+AcpiDbLoadAcpiTable (
+ NATIVE_CHAR *Filename)
+{
+#ifdef ACPI_APPLICATION
+ ACPI_STATUS Status;
+
+
+ Status = AcpiDbGetAcpiTable (Filename);
+ if (ACPI_FAILURE (Status))
+ {
+ return (Status);
+ }
+
+ /* Attempt to recognize and install the table */
Status = AeLocalLoadTable (AcpiGbl_DbTablePtr);
if (ACPI_FAILURE (Status))
diff --git a/sys/contrib/dev/acpica/dbutils.c b/sys/contrib/dev/acpica/dbutils.c
index 648cb90..c97b72a 100644
--- a/sys/contrib/dev/acpica/dbutils.c
+++ b/sys/contrib/dev/acpica/dbutils.c
@@ -1,7 +1,7 @@
/*******************************************************************************
*
* Module Name: dbutils - AML debugger utilities
- * $Revision: 51 $
+ * $Revision: 52 $
*
******************************************************************************/
@@ -248,7 +248,7 @@ AcpiDbDumpObject (
case ACPI_TYPE_BUFFER:
- AcpiOsPrintf ("[Buffer] = ");
+ AcpiOsPrintf ("[Buffer] Length %.2X = ", ObjDesc->Buffer.Length);
AcpiUtDumpBuffer ((UINT8 *) ObjDesc->Buffer.Pointer, ObjDesc->Buffer.Length, DB_DWORD_DISPLAY, _COMPONENT);
break;
diff --git a/sys/contrib/dev/acpica/dsmethod.c b/sys/contrib/dev/acpica/dsmethod.c
index 099372d..1b9a262 100644
--- a/sys/contrib/dev/acpica/dsmethod.c
+++ b/sys/contrib/dev/acpica/dsmethod.c
@@ -1,7 +1,7 @@
/******************************************************************************
*
* Module Name: dsmethod - Parser/Interpreter interface - control method parsing
- * $Revision: 79 $
+ * $Revision: 81 $
*
*****************************************************************************/
@@ -170,7 +170,7 @@ AcpiDsParseMethod (
return_ACPI_STATUS (AE_NULL_ENTRY);
}
- ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "**** Parsing [%4.4s] **** NamedObj=%p\n",
+ ACPI_DEBUG_PRINT ((ACPI_DB_PARSE, "**** Parsing [%4.4s] **** NamedObj=%p\n",
(char *) &((ACPI_NAMESPACE_NODE *) ObjHandle)->Name, ObjHandle));
/* Extract the method object from the method Node */
@@ -208,7 +208,7 @@ AcpiDsParseMethod (
/* Init new op with the method name and pointer back to the Node */
- AcpiPsSetName (Op, Node->Name);
+ AcpiPsSetName (Op, Node->Name.Integer);
Op->Node = Node;
/*
@@ -252,7 +252,7 @@ AcpiDsParseMethod (
return_ACPI_STATUS (Status);
}
- ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "**** [%4.4s] Parsed **** NamedObj=%p Op=%p\n",
+ ACPI_DEBUG_PRINT ((ACPI_DB_PARSE, "**** [%4.4s] Parsed **** NamedObj=%p Op=%p\n",
(char *) &((ACPI_NAMESPACE_NODE *) ObjHandle)->Name, ObjHandle, Op));
AcpiPsDeleteParseTree (Op);
@@ -531,7 +531,6 @@ AcpiDsRestartControlMethod (
WalkState->MethodCallOp, ReturnDesc, WalkState->ReturnUsed,
WalkState->Results, WalkState));
-
return_ACPI_STATUS (AE_OK);
}
diff --git a/sys/contrib/dev/acpica/dsmthdat.c b/sys/contrib/dev/acpica/dsmthdat.c
index 3f8d3c2..d55ed30 100644
--- a/sys/contrib/dev/acpica/dsmthdat.c
+++ b/sys/contrib/dev/acpica/dsmthdat.c
@@ -1,7 +1,7 @@
/*******************************************************************************
*
* Module Name: dsmthdat - control method arguments and local variables
- * $Revision: 58 $
+ * $Revision: 59 $
*
******************************************************************************/
@@ -165,10 +165,10 @@ AcpiDsMethodDataInit (
{
ACPI_MOVE_UNALIGNED32_TO_32 (&WalkState->Arguments[i].Name,
NAMEOF_ARG_NTE);
- WalkState->Arguments[i].Name |= (i << 24);
- WalkState->Arguments[i].Descriptor = ACPI_DESC_TYPE_NAMED;
- WalkState->Arguments[i].Type = ACPI_TYPE_ANY;
- WalkState->Arguments[i].Flags = ANOBJ_END_OF_PEER_LIST | ANOBJ_METHOD_ARG;
+ WalkState->Arguments[i].Name.Integer |= (i << 24);
+ WalkState->Arguments[i].Descriptor = ACPI_DESC_TYPE_NAMED;
+ WalkState->Arguments[i].Type = ACPI_TYPE_ANY;
+ WalkState->Arguments[i].Flags = ANOBJ_END_OF_PEER_LIST | ANOBJ_METHOD_ARG;
}
/* Init the method locals */
@@ -178,10 +178,10 @@ AcpiDsMethodDataInit (
ACPI_MOVE_UNALIGNED32_TO_32 (&WalkState->LocalVariables[i].Name,
NAMEOF_LOCAL_NTE);
- WalkState->LocalVariables[i].Name |= (i << 24);
- WalkState->LocalVariables[i].Descriptor = ACPI_DESC_TYPE_NAMED;
- WalkState->LocalVariables[i].Type = ACPI_TYPE_ANY;
- WalkState->LocalVariables[i].Flags = ANOBJ_END_OF_PEER_LIST | ANOBJ_METHOD_LOCAL;
+ WalkState->LocalVariables[i].Name.Integer |= (i << 24);
+ WalkState->LocalVariables[i].Descriptor = ACPI_DESC_TYPE_NAMED;
+ WalkState->LocalVariables[i].Type = ACPI_TYPE_ANY;
+ WalkState->LocalVariables[i].Flags = ANOBJ_END_OF_PEER_LIST | ANOBJ_METHOD_LOCAL;
}
return_ACPI_STATUS (AE_OK);
diff --git a/sys/contrib/dev/acpica/dsobject.c b/sys/contrib/dev/acpica/dsobject.c
index d56125f..d367c91 100644
--- a/sys/contrib/dev/acpica/dsobject.c
+++ b/sys/contrib/dev/acpica/dsobject.c
@@ -1,7 +1,7 @@
/******************************************************************************
*
* Module Name: dsobject - Dispatcher object management routines
- * $Revision: 90 $
+ * $Revision: 91 $
*
*****************************************************************************/
@@ -139,11 +139,11 @@
* RETURN: Status
*
* DESCRIPTION: Callback from AcpiWalkNamespace. Invoked for every object
- * within the namespace.
+ * within the namespace.
*
* Currently, the only objects that require initialization are:
* 1) Methods
- * 2) Op Regions
+ * 2) Operation Regions
*
******************************************************************************/
@@ -176,7 +176,6 @@ AcpiDsInitOneObject (
return (AE_OK);
}
-
/* And even then, we are only interested in a few object types */
Type = AcpiNsGetType (ObjHandle);
@@ -249,12 +248,13 @@ AcpiDsInitOneObject (
*
* FUNCTION: AcpiDsInitializeObjects
*
- * PARAMETERS: None
+ * PARAMETERS: TableDesc - Descriptor for parent ACPI table
+ * StartNode - Root of subtree to be initialized.
*
* RETURN: Status
*
- * DESCRIPTION: Walk the entire namespace and perform any necessary
- * initialization on the objects found therein
+ * DESCRIPTION: Walk the namespace starting at "StartNode" and perform any
+ * necessary initialization on the objects found therein
*
******************************************************************************/
@@ -280,7 +280,6 @@ AcpiDsInitializeObjects (
Info.ObjectCount = 0;
Info.TableDesc = TableDesc;
-
/* Walk entire namespace from the supplied root */
Status = AcpiWalkNamespace (ACPI_TYPE_ANY, StartNode, ACPI_UINT32_MAX,
@@ -306,9 +305,10 @@ AcpiDsInitializeObjects (
*
* FUNCTION: AcpiDsInitObjectFromOp
*
- * PARAMETERS: Op - Parser op used to init the internal object
+ * PARAMETERS: WalkState - Current walk state
+ * Op - Parser op used to init the internal object
* Opcode - AML opcode associated with the object
- * ObjDesc - Namespace object to be initialized
+ * RetObjDesc - Namespace object to be initialized
*
* RETURN: Status
*
@@ -325,10 +325,6 @@ AcpiDsInitObjectFromOp (
UINT16 Opcode,
ACPI_OPERAND_OBJECT **RetObjDesc)
{
- ACPI_STATUS Status;
- ACPI_PARSE_OBJECT *Arg;
- ACPI_PARSE2_OBJECT *ByteList;
- ACPI_OPERAND_OBJECT *ArgDesc;
const ACPI_OPCODE_INFO *OpInfo;
ACPI_OPERAND_OBJECT *ObjDesc;
@@ -345,108 +341,40 @@ AcpiDsInitObjectFromOp (
return (AE_TYPE);
}
-
- /* Get and prepare the first argument */
+ /* Perform per-object initialization */
switch (ObjDesc->Common.Type)
{
case ACPI_TYPE_BUFFER:
- ObjDesc->Buffer.Node = (ACPI_NAMESPACE_NODE *) WalkState->Operands[0];
-
- /* First arg is a number */
-
- AcpiDsCreateOperand (WalkState, Op->Value.Arg, 0);
- ArgDesc = WalkState->Operands [WalkState->NumOperands - 1];
- AcpiDsObjStackPop (1, WalkState);
-
- /* Resolve the object (could be an arg or local) */
-
- Status = AcpiExResolveToValue (&ArgDesc, WalkState);
- if (ACPI_FAILURE (Status))
- {
- AcpiUtRemoveReference (ArgDesc);
- return (Status);
- }
-
- /* We are expecting a number */
-
- if (ArgDesc->Common.Type != ACPI_TYPE_INTEGER)
- {
- ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
- "Expecting number, got obj: %p type %X\n",
- ArgDesc, ArgDesc->Common.Type));
- AcpiUtRemoveReference (ArgDesc);
- return (AE_TYPE);
- }
-
- /* Get the value, delete the internal object */
-
- ObjDesc->Buffer.Length = (UINT32) ArgDesc->Integer.Value;
- AcpiUtRemoveReference (ArgDesc);
-
- /* Allocate the buffer */
-
- if (ObjDesc->Buffer.Length == 0)
- {
- ObjDesc->Buffer.Pointer = NULL;
- ACPI_REPORT_WARNING (("Buffer created with zero length in AML\n"));
- break;
- }
-
- else
- {
- ObjDesc->Buffer.Pointer = ACPI_MEM_CALLOCATE (
- ObjDesc->Buffer.Length);
-
- if (!ObjDesc->Buffer.Pointer)
- {
- return (AE_NO_MEMORY);
- }
- }
-
/*
- * Second arg is the buffer data (optional) ByteList can be either
- * individual bytes or a string initializer.
+ * Defer evaluation of Buffer TermArg operand
*/
- Arg = Op->Value.Arg; /* skip first arg */
-
- ByteList = (ACPI_PARSE2_OBJECT *) Arg->Next;
- if (ByteList)
- {
- if (ByteList->Opcode != AML_INT_BYTELIST_OP)
- {
- ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Expecting bytelist, got: %p\n",
- ByteList));
- return (AE_TYPE);
- }
-
- ACPI_MEMCPY (ObjDesc->Buffer.Pointer, ByteList->Data,
- ObjDesc->Buffer.Length);
- }
-
+ ObjDesc->Buffer.Node = (ACPI_NAMESPACE_NODE *) WalkState->Operands[0];
+ ObjDesc->Buffer.AmlStart = ((ACPI_PARSE2_OBJECT *) Op)->Data;
+ ObjDesc->Buffer.AmlLength = ((ACPI_PARSE2_OBJECT *) Op)->Length;
break;
case ACPI_TYPE_PACKAGE:
/*
- * When called, an internal package object has already been built and
- * is pointed to by ObjDesc. AcpiDsBuildInternalObject builds another
- * internal package object, so remove reference to the original so
- * that it is deleted. Error checking is done within the remove
- * reference function.
+ * Defer evaluation of Package TermArg operand
*/
- AcpiUtRemoveReference (ObjDesc);
- Status = AcpiDsBuildInternalObject (WalkState, Op, RetObjDesc);
+ ObjDesc->Package.Node = (ACPI_NAMESPACE_NODE *) WalkState->Operands[0];
+ ObjDesc->Package.AmlStart = ((ACPI_PARSE2_OBJECT *) Op)->Data;
+ ObjDesc->Package.AmlLength = ((ACPI_PARSE2_OBJECT *) Op)->Length;
break;
- case ACPI_TYPE_INTEGER:
+
+ case ACPI_TYPE_INTEGER:
+
ObjDesc->Integer.Value = Op->Value.Integer;
break;
case ACPI_TYPE_STRING:
+
ObjDesc->String.Pointer = Op->Value.String;
ObjDesc->String.Length = ACPI_STRLEN (Op->Value.String);
@@ -496,7 +424,6 @@ AcpiDsInitObjectFromOp (
ObjDesc->Reference.Opcode = Opcode;
break;
}
-
break;
@@ -514,9 +441,10 @@ AcpiDsInitObjectFromOp (
/*****************************************************************************
*
- * FUNCTION: AcpiDsBuildInternalSimpleObj
+ * FUNCTION: AcpiDsBuildInternalObject
*
- * PARAMETERS: Op - Parser object to be translated
+ * PARAMETERS: WalkState - Current walk state
+ * Op - Parser object to be translated
* ObjDescPtr - Where the ACPI internal object is returned
*
* RETURN: Status
@@ -526,8 +454,8 @@ AcpiDsInitObjectFromOp (
*
****************************************************************************/
-static ACPI_STATUS
-AcpiDsBuildInternalSimpleObj (
+ACPI_STATUS
+AcpiDsBuildInternalObject (
ACPI_WALK_STATE *WalkState,
ACPI_PARSE_OBJECT *Op,
ACPI_OPERAND_OBJECT **ObjDescPtr)
@@ -537,7 +465,7 @@ AcpiDsBuildInternalSimpleObj (
char *Name;
- ACPI_FUNCTION_TRACE ("DsBuildInternalSimpleObj");
+ ACPI_FUNCTION_TRACE ("DsBuildInternalObject");
if (Op->Opcode == AML_INT_NAMEPATH_OP)
@@ -567,7 +495,6 @@ AcpiDsBuildInternalSimpleObj (
Name, Op->AmlOffset));
ACPI_MEM_FREE (Name);
}
-
else
{
ACPI_REPORT_WARNING (("Reference %s at AML %X not found\n",
@@ -576,7 +503,6 @@ AcpiDsBuildInternalSimpleObj (
*ObjDescPtr = NULL;
}
-
else
{
return_ACPI_STATUS (Status);
@@ -601,14 +527,13 @@ AcpiDsBuildInternalSimpleObj (
}
*ObjDescPtr = ObjDesc;
-
return_ACPI_STATUS (AE_OK);
}
/*****************************************************************************
*
- * FUNCTION: AcpiDsBuildInternalPackageObj
+ * FUNCTION: AcpiDsBuildInternalBufferObj
*
* PARAMETERS: Op - Parser object to be translated
* ObjDescPtr - Where the ACPI internal object is returned
@@ -621,121 +546,231 @@ AcpiDsBuildInternalSimpleObj (
****************************************************************************/
ACPI_STATUS
-AcpiDsBuildInternalPackageObj (
+AcpiDsBuildInternalBufferObj (
ACPI_WALK_STATE *WalkState,
ACPI_PARSE_OBJECT *Op,
+ UINT32 BufferLength,
ACPI_OPERAND_OBJECT **ObjDescPtr)
{
ACPI_PARSE_OBJECT *Arg;
ACPI_OPERAND_OBJECT *ObjDesc;
- ACPI_STATUS Status = AE_OK;
+ ACPI_PARSE2_OBJECT *ByteList;
+ UINT32 ByteListLength = 0;
- ACPI_FUNCTION_TRACE ("DsBuildInternalPackageObj");
+ ACPI_FUNCTION_TRACE ("DsBuildInternalBufferObj");
- ObjDesc = AcpiUtCreateInternalObject (ACPI_TYPE_PACKAGE);
- *ObjDescPtr = ObjDesc;
- if (!ObjDesc)
- {
- return_ACPI_STATUS (AE_NO_MEMORY);
- }
-
- if (Op->Opcode == AML_VAR_PACKAGE_OP)
+ ObjDesc = *ObjDescPtr;
+ if (ObjDesc)
{
/*
- * Variable length package parameters are evaluated JIT
+ * We are evaluating a Named buffer object "Name (xxxx, Buffer)".
+ * The buffer object already exists (from the NS node)
*/
- return_ACPI_STATUS (AE_OK);
}
+ else
+ {
+ /* Create a new buffer object */
- /* The first argument must be the package length */
-
- Arg = Op->Value.Arg;
- ObjDesc->Package.Count = Arg->Value.Integer32;
+ ObjDesc = AcpiUtCreateInternalObject (ACPI_TYPE_BUFFER);
+ *ObjDescPtr = ObjDesc;
+ if (!ObjDesc)
+ {
+ return_ACPI_STATUS (AE_NO_MEMORY);
+ }
+ }
/*
- * Allocate the array of pointers (ptrs to the
- * individual objects) Add an extra pointer slot so
- * that the list is always null terminated.
+ * Second arg is the buffer data (optional) ByteList can be either
+ * individual bytes or a string initializer. In either case, a
+ * ByteList appears in the AML.
*/
- ObjDesc->Package.Elements = ACPI_MEM_CALLOCATE (
- (ObjDesc->Package.Count + 1) * sizeof (void *));
+ Arg = Op->Value.Arg; /* skip first arg */
- if (!ObjDesc->Package.Elements)
+ ByteList = (ACPI_PARSE2_OBJECT *) Arg->Next;
+ if (ByteList)
{
- AcpiUtDeleteObjectDesc (ObjDesc);
- return_ACPI_STATUS (AE_NO_MEMORY);
- }
+ if (ByteList->Opcode != AML_INT_BYTELIST_OP)
+ {
+ ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
+ "Expecting bytelist, got AML opcode %X in op %p\n",
+ ByteList->Opcode, ByteList));
- ObjDesc->Package.NextElement = ObjDesc->Package.Elements;
+ AcpiUtRemoveReference (ObjDesc);
+ return (AE_TYPE);
+ }
+
+ ByteListLength = ByteList->Value.Integer32;
+ }
/*
- * Now init the elements of the package
+ * The buffer length (number of bytes) will be the larger of:
+ * 1) The specified buffer length and
+ * 2) The length of the initializer byte list
*/
- Arg = Arg->Next;
- while (Arg)
+ ObjDesc->Buffer.Length = BufferLength;
+ if (ByteListLength > BufferLength)
{
- if (Arg->Opcode == AML_PACKAGE_OP)
- {
- Status = AcpiDsBuildInternalPackageObj (WalkState, Arg,
- ObjDesc->Package.NextElement);
- }
+ ObjDesc->Buffer.Length = ByteListLength;
+ }
- else
- {
- Status = AcpiDsBuildInternalSimpleObj (WalkState, Arg,
- ObjDesc->Package.NextElement);
- }
+ /* Allocate the buffer */
- ObjDesc->Package.NextElement++;
- Arg = Arg->Next;
+ if (ObjDesc->Buffer.Length == 0)
+ {
+ ObjDesc->Buffer.Pointer = NULL;
+ ACPI_REPORT_WARNING (("Buffer created with zero length in AML\n"));
+ return_ACPI_STATUS (AE_OK);
}
- ObjDesc->Package.Flags |= AOPOBJ_DATA_VALID;
- return_ACPI_STATUS (Status);
+ ObjDesc->Buffer.Pointer = ACPI_MEM_CALLOCATE (
+ ObjDesc->Buffer.Length);
+ if (!ObjDesc->Buffer.Pointer)
+ {
+ AcpiUtDeleteObjectDesc (ObjDesc);
+ return_ACPI_STATUS (AE_NO_MEMORY);
+ }
+
+ /* Initialize buffer from the ByteList (if present) */
+
+ if (ByteList)
+ {
+ ACPI_MEMCPY (ObjDesc->Buffer.Pointer, ByteList->Data,
+ ByteListLength);
+ }
+
+ ObjDesc->Buffer.Flags |= AOPOBJ_DATA_VALID;
+ Op->Node = (ACPI_NAMESPACE_NODE *) ObjDesc;
+ return_ACPI_STATUS (AE_OK);
}
/*****************************************************************************
*
- * FUNCTION: AcpiDsBuildInternalObject
+ * FUNCTION: AcpiDsBuildInternalPackageObj
*
* PARAMETERS: Op - Parser object to be translated
* ObjDescPtr - Where the ACPI internal object is returned
*
* RETURN: Status
*
- * DESCRIPTION: Translate a parser Op object to the equivalent namespace
- * object
+ * DESCRIPTION: Translate a parser Op package object to the equivalent
+ * namespace object
*
****************************************************************************/
ACPI_STATUS
-AcpiDsBuildInternalObject (
+AcpiDsBuildInternalPackageObj (
ACPI_WALK_STATE *WalkState,
ACPI_PARSE_OBJECT *Op,
+ UINT32 PackageLength,
ACPI_OPERAND_OBJECT **ObjDescPtr)
{
- ACPI_STATUS Status;
+ ACPI_PARSE_OBJECT *Arg;
+ ACPI_PARSE_OBJECT *Parent;
+ ACPI_OPERAND_OBJECT *ObjDesc = NULL;
+ UINT32 PackageListLength;
+ ACPI_STATUS Status = AE_OK;
+ UINT32 i;
- switch (Op->Opcode)
+ ACPI_FUNCTION_TRACE ("DsBuildInternalPackageObj");
+
+
+ /* Find the parent of a possibly nested package */
+
+
+ Parent = Op->Parent;
+ while ((Parent->Opcode == AML_PACKAGE_OP) ||
+ (Parent->Opcode == AML_VAR_PACKAGE_OP))
{
- case AML_PACKAGE_OP:
- case AML_VAR_PACKAGE_OP:
+ Parent = Parent->Parent;
+ }
- Status = AcpiDsBuildInternalPackageObj (WalkState, Op, ObjDescPtr);
- break;
+ ObjDesc = *ObjDescPtr;
+ if (ObjDesc)
+ {
+ /*
+ * We are evaluating a Named package object "Name (xxxx, Package)".
+ * Get the existing package object from the NS node
+ */
+ }
+ else
+ {
+ ObjDesc = AcpiUtCreateInternalObject (ACPI_TYPE_PACKAGE);
+ *ObjDescPtr = ObjDesc;
+ if (!ObjDesc)
+ {
+ return_ACPI_STATUS (AE_NO_MEMORY);
+ }
+ ObjDesc->Package.Node = Parent->Node;
+ }
- default:
+ ObjDesc->Package.Count = PackageLength;
- Status = AcpiDsBuildInternalSimpleObj (WalkState, Op, ObjDescPtr);
- break;
+ /* Count the number of items in the package list */
+
+ PackageListLength = 0;
+ Arg = Op->Value.Arg;
+ Arg = Arg->Next;
+ while (Arg)
+ {
+ PackageListLength++;
+ Arg = Arg->Next;
+ }
+
+ /*
+ * The package length (number of elements) will be the greater
+ * of the specified length and the length of the initializer list
+ */
+ if (PackageListLength > PackageLength)
+ {
+ ObjDesc->Package.Count = PackageListLength;
}
- return (Status);
+ /*
+ * Allocate the pointer array (array of pointers to the
+ * individual objects). Add an extra pointer slot so
+ * that the list is always null terminated.
+ */
+ ObjDesc->Package.Elements = ACPI_MEM_CALLOCATE (
+ (ObjDesc->Package.Count + 1) * sizeof (void *));
+
+ if (!ObjDesc->Package.Elements)
+ {
+ AcpiUtDeleteObjectDesc (ObjDesc);
+ return_ACPI_STATUS (AE_NO_MEMORY);
+ }
+
+ /*
+ * Now init the elements of the package
+ */
+ i = 0;
+ Arg = Op->Value.Arg;
+ Arg = Arg->Next;
+ while (Arg)
+ {
+ if (Arg->Opcode == AML_INT_RETURN_VALUE_OP)
+ {
+ /* Object (package or buffer) is already built */
+
+ ObjDesc->Package.Elements[i] = (ACPI_OPERAND_OBJECT *) Arg->Node;
+ }
+ else
+ {
+ Status = AcpiDsBuildInternalObject (WalkState, Arg,
+ &ObjDesc->Package.Elements[i]);
+ }
+
+ i++;
+ Arg = Arg->Next;
+ }
+
+ ObjDesc->Package.Flags |= AOPOBJ_DATA_VALID;
+ Op->Node = (ACPI_NAMESPACE_NODE *) ObjDesc;
+ return_ACPI_STATUS (Status);
}
@@ -794,7 +829,7 @@ AcpiDsCreateNode (
Node->Type = ObjDesc->Common.Type;
- /* Init obj */
+ /* Attach obj to node */
Status = AcpiNsAttachObject (Node, ObjDesc, Node->Type);
diff --git a/sys/contrib/dev/acpica/dsopcode.c b/sys/contrib/dev/acpica/dsopcode.c
index bee7bde..7166753 100644
--- a/sys/contrib/dev/acpica/dsopcode.c
+++ b/sys/contrib/dev/acpica/dsopcode.c
@@ -2,7 +2,7 @@
*
* Module Name: dsopcode - Dispatcher Op Region support and handling of
* "control" opcodes
- * $Revision: 73 $
+ * $Revision: 74 $
*
*****************************************************************************/
@@ -146,7 +146,9 @@
ACPI_STATUS
AcpiDsExecuteArguments (
ACPI_NAMESPACE_NODE *Node,
- ACPI_OPERAND_OBJECT *ExtraDesc)
+ ACPI_NAMESPACE_NODE *ScopeNode,
+ UINT32 AmlLength,
+ UINT8 *AmlStart)
{
ACPI_STATUS Status;
ACPI_PARSE_OBJECT *Op;
@@ -158,10 +160,9 @@ AcpiDsExecuteArguments (
/*
- * Allocate a new parser op to be the root of the parsed
- * BufferField tree
+ * Allocate a new parser op to be the root of the parsed tree
*/
- Op = AcpiPsAllocOp (AML_SCOPE_OP);
+ Op = AcpiPsAllocOp (AML_INT_EVAL_SUBTREE_OP);
if (!Op)
{
return_ACPI_STATUS (AE_NO_MEMORY);
@@ -169,7 +170,7 @@ AcpiDsExecuteArguments (
/* Save the Node for use in AcpiPsParseAml */
- Op->Node = AcpiNsGetParentNode (Node);
+ Op->Node = ScopeNode;
/* Create and initialize a new parser state */
@@ -179,8 +180,8 @@ AcpiDsExecuteArguments (
return_ACPI_STATUS (AE_NO_MEMORY);
}
- Status = AcpiDsInitAmlWalk (WalkState, Op, NULL, ExtraDesc->Extra.AmlStart,
- ExtraDesc->Extra.AmlLength, NULL, NULL, 1);
+ Status = AcpiDsInitAmlWalk (WalkState, Op, NULL, AmlStart,
+ AmlLength, NULL, NULL, 1);
if (ACPI_FAILURE (Status))
{
AcpiDsDeleteWalkState (WalkState);
@@ -189,7 +190,7 @@ AcpiDsExecuteArguments (
WalkState->ParseFlags = 0;
- /* Pass1: Parse the entire BufferField declaration */
+ /* Pass1: Parse the entire declaration */
Status = AcpiPsParseAml (WalkState);
if (ACPI_FAILURE (Status))
@@ -198,7 +199,7 @@ AcpiDsExecuteArguments (
return_ACPI_STATUS (Status);
}
- /* Get and init the actual FieldUnit Op created above */
+ /* Get and init the Op created above */
Arg = Op->Value.Arg;
Op->Node = Node;
@@ -207,13 +208,13 @@ AcpiDsExecuteArguments (
/* Evaluate the address and length arguments for the Buffer Field */
- Op = AcpiPsAllocOp (AML_SCOPE_OP);
+ Op = AcpiPsAllocOp (AML_INT_EVAL_SUBTREE_OP);
if (!Op)
{
return_ACPI_STATUS (AE_NO_MEMORY);
}
- Op->Node = AcpiNsGetParentNode (Node);
+ Op->Node = ScopeNode;
/* Create and initialize a new parser state */
@@ -223,8 +224,8 @@ AcpiDsExecuteArguments (
return_ACPI_STATUS (AE_NO_MEMORY);
}
- Status = AcpiDsInitAmlWalk (WalkState, Op, NULL, ExtraDesc->Extra.AmlStart,
- ExtraDesc->Extra.AmlLength, NULL, NULL, 3);
+ Status = AcpiDsInitAmlWalk (WalkState, Op, NULL, AmlStart,
+ AmlLength, NULL, NULL, 3);
if (ACPI_FAILURE (Status))
{
AcpiDsDeleteWalkState (WalkState);
@@ -278,7 +279,106 @@ AcpiDsGetBufferFieldArguments (
/* Execute the AML code for the TermArg arguments */
- Status = AcpiDsExecuteArguments (Node, ExtraDesc);
+ Status = AcpiDsExecuteArguments (Node, AcpiNsGetParentNode (Node),
+ ExtraDesc->Extra.AmlLength, ExtraDesc->Extra.AmlStart);
+ return_ACPI_STATUS (Status);
+}
+
+
+/*****************************************************************************
+ *
+ * FUNCTION: AcpiDsGetBufferArguments
+ *
+ * PARAMETERS: ObjDesc - A valid Bufferobject
+ *
+ * RETURN: Status.
+ *
+ * DESCRIPTION: Get Buffer length and initializer byte list. This implements
+ * the late evaluation of these attributes.
+ *
+ ****************************************************************************/
+
+ACPI_STATUS
+AcpiDsGetBufferArguments (
+ ACPI_OPERAND_OBJECT *ObjDesc)
+{
+ ACPI_NAMESPACE_NODE *Node;
+ ACPI_STATUS Status;
+
+
+ ACPI_FUNCTION_TRACE_PTR ("DsGetBufferArguments", ObjDesc);
+
+
+ if (ObjDesc->Common.Flags & AOPOBJ_DATA_VALID)
+ {
+ return_ACPI_STATUS (AE_OK);
+ }
+
+ /* Get the Buffer node */
+
+ Node = ObjDesc->Buffer.Node;
+ if (!Node)
+ {
+ ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
+ "No pointer back to NS node in buffer %p\n", ObjDesc));
+ return_ACPI_STATUS (AE_AML_INTERNAL);
+ }
+
+ ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Buffer JIT Init\n"));
+
+ /* Execute the AML code for the TermArg arguments */
+
+ Status = AcpiDsExecuteArguments (Node, Node,
+ ObjDesc->Buffer.AmlLength, ObjDesc->Buffer.AmlStart);
+ return_ACPI_STATUS (Status);
+}
+
+
+/*****************************************************************************
+ *
+ * FUNCTION: AcpiDsGetPackageArguments
+ *
+ * PARAMETERS: ObjDesc - A valid Packageobject
+ *
+ * RETURN: Status.
+ *
+ * DESCRIPTION: Get Package length and initializer byte list. This implements
+ * the late evaluation of these attributes.
+ *
+ ****************************************************************************/
+
+ACPI_STATUS
+AcpiDsGetPackageArguments (
+ ACPI_OPERAND_OBJECT *ObjDesc)
+{
+ ACPI_NAMESPACE_NODE *Node;
+ ACPI_STATUS Status;
+
+
+ ACPI_FUNCTION_TRACE_PTR ("DsGetPackageArguments", ObjDesc);
+
+
+ if (ObjDesc->Common.Flags & AOPOBJ_DATA_VALID)
+ {
+ return_ACPI_STATUS (AE_OK);
+ }
+
+ /* Get the Package node */
+
+ Node = ObjDesc->Package.Node;
+ if (!Node)
+ {
+ ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
+ "No pointer back to NS node in package %p\n", ObjDesc));
+ return_ACPI_STATUS (AE_AML_INTERNAL);
+ }
+
+ ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Package JIT Init\n"));
+
+ /* Execute the AML code for the TermArg arguments */
+
+ Status = AcpiDsExecuteArguments (Node, Node,
+ ObjDesc->Package.AmlLength, ObjDesc->Package.AmlStart);
return_ACPI_STATUS (Status);
}
@@ -302,7 +402,7 @@ AcpiDsGetRegionArguments (
{
ACPI_NAMESPACE_NODE *Node;
ACPI_STATUS Status;
- ACPI_OPERAND_OBJECT *RegionObj2;
+ ACPI_OPERAND_OBJECT *ExtraDesc;
ACPI_FUNCTION_TRACE_PTR ("DsGetRegionArguments", ObjDesc);
@@ -313,23 +413,24 @@ AcpiDsGetRegionArguments (
return_ACPI_STATUS (AE_OK);
}
- RegionObj2 = AcpiNsGetSecondaryObject (ObjDesc);
- if (!RegionObj2)
+ ExtraDesc = AcpiNsGetSecondaryObject (ObjDesc);
+ if (!ExtraDesc)
{
return_ACPI_STATUS (AE_NOT_EXIST);
}
- /* Get the AML pointer (method object) and region node */
+ /* Get the Region node */
Node = ObjDesc->Region.Node;
ACPI_DEBUG_EXEC(AcpiUtDisplayInitPathname (Node, " [Operation Region]"));
ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "[%4.4s] OpRegion Init at AML %p\n",
- (char *) &Node->Name, RegionObj2->Extra.AmlStart));
+ (char *) &Node->Name, ExtraDesc->Extra.AmlStart));
- Status = AcpiDsExecuteArguments (Node, RegionObj2);
+ Status = AcpiDsExecuteArguments (Node, AcpiNsGetParentNode (Node),
+ ExtraDesc->Extra.AmlLength, ExtraDesc->Extra.AmlStart);
return_ACPI_STATUS (Status);
}
@@ -408,7 +509,7 @@ AcpiDsEvalBufferFieldOperands (
NextOp = Op->Value.Arg;
- /* AcpiEvaluate/create the address and length operands */
+ /* Evaluate/create the address and length operands */
Status = AcpiDsCreateOperands (WalkState, NextOp);
if (ACPI_FAILURE (Status))
@@ -674,7 +775,7 @@ AcpiDsEvalRegionOperands (
NextOp = NextOp->Next;
- /* AcpiEvaluate/create the address and length operands */
+ /* Evaluate/create the address and length operands */
Status = AcpiDsCreateOperands (WalkState, NextOp);
if (ACPI_FAILURE (Status))
@@ -731,6 +832,102 @@ AcpiDsEvalRegionOperands (
}
+
+/*****************************************************************************
+ *
+ * FUNCTION: AcpiDsEvalDataObjectOperands
+ *
+ * PARAMETERS: Op - A valid DataObject Op object
+ *
+ * RETURN: Status
+ *
+ * DESCRIPTION: Get the operands and complete the following data objec types:
+ * Buffer
+ * Package
+ *
+ ****************************************************************************/
+
+ACPI_STATUS
+AcpiDsEvalDataObjectOperands (
+ ACPI_WALK_STATE *WalkState,
+ ACPI_PARSE_OBJECT *Op,
+ ACPI_OPERAND_OBJECT *ObjDesc)
+{
+ ACPI_STATUS Status;
+ ACPI_OPERAND_OBJECT *ArgDesc;
+ UINT32 Length;
+
+
+ ACPI_FUNCTION_TRACE ("DsEvalDataObjectOperands");
+
+
+ /* The first operand (for all of these data objects) is the length */
+
+ Status = AcpiDsCreateOperand (WalkState, Op->Value.Arg, 1);
+ if (ACPI_FAILURE (Status))
+ {
+ return_ACPI_STATUS (Status);
+ }
+
+ Status = AcpiExResolveOperands (WalkState->Opcode,
+ &(WalkState->Operands [WalkState->NumOperands -1]),
+ WalkState);
+ if (ACPI_FAILURE (Status))
+ {
+ return_ACPI_STATUS (Status);
+ }
+
+ /* Extract length operand */
+
+ ArgDesc = WalkState->Operands [WalkState->NumOperands - 1];
+ Length = (UINT32) ArgDesc->Integer.Value;
+
+ /* Cleanup for length operand */
+
+ AcpiDsObjStackPop (1, WalkState);
+ AcpiUtRemoveReference (ArgDesc);
+
+ /*
+ * Create the actual data object
+ */
+ switch (Op->Opcode)
+ {
+ case AML_BUFFER_OP:
+
+ Status = AcpiDsBuildInternalBufferObj (WalkState, Op, Length, &ObjDesc);
+ break;
+
+ case AML_PACKAGE_OP:
+ case AML_VAR_PACKAGE_OP:
+
+ Status = AcpiDsBuildInternalPackageObj (WalkState, Op, Length, &ObjDesc);
+ break;
+
+ default:
+ return_ACPI_STATUS (AE_AML_BAD_OPCODE);
+ }
+
+ if (ACPI_SUCCESS (Status))
+ {
+ /*
+ * Return the object in the WalkState, unless the parent is a package --
+ * in this case, the return object will be stored in the parse tree
+ * for the package.
+ */
+ if ((!Op->Parent) ||
+ ((Op->Parent->Opcode != AML_PACKAGE_OP) &&
+ (Op->Parent->Opcode != AML_VAR_PACKAGE_OP) &&
+ (Op->Parent->Opcode != AML_NAME_OP)))
+ {
+ WalkState->ResultObj = ObjDesc;
+ }
+ }
+
+ return_ACPI_STATUS (Status);
+}
+
+
+
/*******************************************************************************
*
* FUNCTION: AcpiDsExecBeginControlOp
diff --git a/sys/contrib/dev/acpica/dsutils.c b/sys/contrib/dev/acpica/dsutils.c
index 9164573..fa7b43f 100644
--- a/sys/contrib/dev/acpica/dsutils.c
+++ b/sys/contrib/dev/acpica/dsutils.c
@@ -1,7 +1,7 @@
/*******************************************************************************
*
* Module Name: dsutils - Dispatcher utilities
- * $Revision: 88 $
+ * $Revision: 89 $
*
******************************************************************************/
@@ -231,7 +231,11 @@ AcpiDsIsResultUsed (
case AML_CLASS_NAMED_OBJECT:
if ((Op->Parent->Opcode == AML_REGION_OP) ||
- (Op->Parent->Opcode == AML_DATA_REGION_OP))
+ (Op->Parent->Opcode == AML_DATA_REGION_OP) ||
+ (Op->Parent->Opcode == AML_PACKAGE_OP) ||
+ (Op->Parent->Opcode == AML_VAR_PACKAGE_OP) ||
+ (Op->Parent->Opcode == AML_BUFFER_OP) ||
+ (Op->Parent->Opcode == AML_INT_EVAL_SUBTREE_OP))
{
/*
* These opcodes allow TermArg(s) as operands and therefore
@@ -243,11 +247,12 @@ AcpiDsIsResultUsed (
goto ResultNotUsed;
- /*
- * In all other cases. the parent will actually use the return
- * object, so keep it.
- */
default:
+
+ /*
+ * In all other cases. the parent will actually use the return
+ * object, so keep it.
+ */
goto ResultUsed;
}
diff --git a/sys/contrib/dev/acpica/dswexec.c b/sys/contrib/dev/acpica/dswexec.c
index 5f71274..c5967bd 100644
--- a/sys/contrib/dev/acpica/dswexec.c
+++ b/sys/contrib/dev/acpica/dswexec.c
@@ -2,7 +2,7 @@
*
* Module Name: dswexec - Dispatcher method execution callbacks;
* dispatch to interpreter.
- * $Revision: 89 $
+ * $Revision: 90 $
*
*****************************************************************************/
@@ -412,6 +412,7 @@ AcpiDsExecBeginOp (
}
+
/*****************************************************************************
*
* FUNCTION: AcpiDsExecEndOp
@@ -623,6 +624,53 @@ AcpiDsExecEndOp (
break;
+ case AML_TYPE_CREATE_OBJECT:
+
+ ACPI_DEBUG_PRINT ((ACPI_DB_EXEC,
+ "Executing CreateObject (Buffer/Package) Op=%p\n", Op));
+
+ switch (Op->Parent->Opcode)
+ {
+ case AML_NAME_OP:
+
+ /*
+ * Put the Node on the object stack (Contains the ACPI Name of
+ * this object)
+ */
+ WalkState->Operands[0] = (void *) Op->Parent->Node;
+ WalkState->NumOperands = 1;
+
+ Status = AcpiDsCreateNode (WalkState, Op->Parent->Node, Op->Parent);
+ if (ACPI_FAILURE (Status))
+ {
+ break;
+ }
+
+ /* Fall through */
+
+ case AML_INT_EVAL_SUBTREE_OP:
+
+ Status = AcpiDsEvalDataObjectOperands (WalkState, Op, AcpiNsGetAttachedObject (Op->Parent->Node));
+ break;
+
+ default:
+
+ Status = AcpiDsEvalDataObjectOperands (WalkState, Op, NULL);
+ break;
+ }
+
+ /*
+ * If a result object was returned from above, push it on the
+ * current result stack
+ */
+ if (ACPI_SUCCESS (Status) &&
+ WalkState->ResultObj)
+ {
+ Status = AcpiDsResultPush (WalkState->ResultObj, WalkState);
+ }
+ break;
+
+
case AML_TYPE_NAMED_FIELD:
case AML_TYPE_NAMED_COMPLEX:
case AML_TYPE_NAMED_SIMPLE:
diff --git a/sys/contrib/dev/acpica/dswload.c b/sys/contrib/dev/acpica/dswload.c
index 64bef0c..4b44111 100644
--- a/sys/contrib/dev/acpica/dswload.c
+++ b/sys/contrib/dev/acpica/dswload.c
@@ -1,7 +1,7 @@
/******************************************************************************
*
* Module Name: dswload - Dispatcher namespace load callbacks
- * $Revision: 61 $
+ * $Revision: 62 $
*
*****************************************************************************/
@@ -267,7 +267,7 @@ AcpiDsLoad1BeginOp (
/* Initialize */
- ((ACPI_PARSE2_OBJECT *)Op)->Name = Node->Name;
+ ((ACPI_PARSE2_OBJECT *)Op)->Name = Node->Name.Integer;
/*
* Put the Node in the "op" object that the parser uses, so we
@@ -503,7 +503,7 @@ AcpiDsLoad2BeginOp (
/* Initialize the new op */
- ((ACPI_PARSE2_OBJECT *)Op)->Name = Node->Name;
+ ((ACPI_PARSE2_OBJECT *)Op)->Name = Node->Name.Integer;
*OutOp = Op;
}
diff --git a/sys/contrib/dev/acpica/evevent.c b/sys/contrib/dev/acpica/evevent.c
index 8b86893..0ff96e2 100644
--- a/sys/contrib/dev/acpica/evevent.c
+++ b/sys/contrib/dev/acpica/evevent.c
@@ -1,7 +1,7 @@
/******************************************************************************
*
* Module Name: evevent - Fixed and General Purpose Even handling and dispatch
- * $Revision: 71 $
+ * $Revision: 78 $
*
*****************************************************************************/
@@ -428,11 +428,14 @@ AcpiEvGpeInitialize (void)
* FADT table contain zeros. The GPE0_LEN and GPE1_LEN do not need
* to be the same size."
*/
- AcpiGbl_GpeBlockInfo[0].RegisterCount = (UINT16) ACPI_DIV_2 (AcpiGbl_FADT->Gpe0BlkLen);
- AcpiGbl_GpeBlockInfo[1].RegisterCount = (UINT16) ACPI_DIV_2 (AcpiGbl_FADT->Gpe1BlkLen);
+ AcpiGbl_GpeBlockInfo[0].AddressSpaceId = AcpiGbl_FADT->XGpe0Blk.AddressSpaceId;
+ AcpiGbl_GpeBlockInfo[1].AddressSpaceId = AcpiGbl_FADT->XGpe1Blk.AddressSpaceId;
- AcpiGbl_GpeBlockInfo[0].BlockAddress = (UINT16) ACPI_GET_ADDRESS (AcpiGbl_FADT->XGpe0Blk.Address);
- AcpiGbl_GpeBlockInfo[1].BlockAddress = (UINT16) ACPI_GET_ADDRESS (AcpiGbl_FADT->XGpe1Blk.Address);
+ AcpiGbl_GpeBlockInfo[0].RegisterCount = (UINT16) ACPI_DIV_16 (AcpiGbl_FADT->XGpe0Blk.RegisterBitWidth);
+ AcpiGbl_GpeBlockInfo[1].RegisterCount = (UINT16) ACPI_DIV_16 (AcpiGbl_FADT->XGpe1Blk.RegisterBitWidth);
+
+ AcpiGbl_GpeBlockInfo[0].BlockAddress = &AcpiGbl_FADT->XGpe0Blk;
+ AcpiGbl_GpeBlockInfo[1].BlockAddress = &AcpiGbl_FADT->XGpe1Blk;
AcpiGbl_GpeBlockInfo[0].BlockBaseNumber = 0;
AcpiGbl_GpeBlockInfo[1].BlockBaseNumber = AcpiGbl_FADT->Gpe1Base;
@@ -531,10 +534,21 @@ AcpiEvGpeInitialize (void)
/* Init the Register info for this entire GPE register (8 GPEs) */
- GpeRegisterInfo->BaseGpeNumber = (UINT8) (AcpiGbl_GpeBlockInfo[GpeBlock].BlockBaseNumber + (ACPI_MUL_8 (i)));
- GpeRegisterInfo->StatusAddr = (UINT16) (AcpiGbl_GpeBlockInfo[GpeBlock].BlockAddress + i);
- GpeRegisterInfo->EnableAddr = (UINT16) (AcpiGbl_GpeBlockInfo[GpeBlock].BlockAddress + i +
- AcpiGbl_GpeBlockInfo[GpeBlock].RegisterCount);
+ GpeRegisterInfo->BaseGpeNumber = (UINT8) (AcpiGbl_GpeBlockInfo[GpeBlock].BlockBaseNumber + (ACPI_MUL_8 (i)));
+
+ ACPI_STORE_ADDRESS (GpeRegisterInfo->StatusAddress.Address,
+ (ACPI_GET_ADDRESS (AcpiGbl_GpeBlockInfo[GpeBlock].BlockAddress->Address) + i));
+
+ ACPI_STORE_ADDRESS (GpeRegisterInfo->EnableAddress.Address,
+ (ACPI_GET_ADDRESS (AcpiGbl_GpeBlockInfo[GpeBlock].BlockAddress->Address) + i +
+ AcpiGbl_GpeBlockInfo[GpeBlock].RegisterCount));
+
+ GpeRegisterInfo->StatusAddress.AddressSpaceId = AcpiGbl_GpeBlockInfo[GpeBlock].AddressSpaceId;
+ GpeRegisterInfo->EnableAddress.AddressSpaceId = AcpiGbl_GpeBlockInfo[GpeBlock].AddressSpaceId;
+ GpeRegisterInfo->StatusAddress.RegisterBitWidth = 8;
+ GpeRegisterInfo->EnableAddress.RegisterBitWidth = 8;
+ GpeRegisterInfo->StatusAddress.RegisterBitOffset = 8;
+ GpeRegisterInfo->EnableAddress.RegisterBitOffset = 8;
/* Init the Index mapping info for each GPE number within this register */
@@ -552,18 +566,24 @@ AcpiEvGpeInitialize (void)
* are cleared by writing a '1', while enable registers are cleared
* by writing a '0'.
*/
- AcpiOsWritePort (GpeRegisterInfo->EnableAddr, 0x00, 8);
- AcpiOsWritePort (GpeRegisterInfo->StatusAddr, 0xFF, 8);
+
+ AcpiHwLowLevelWrite (8, 0x00, &GpeRegisterInfo->EnableAddress, 0);
+ AcpiHwLowLevelWrite (8, 0xFF, &GpeRegisterInfo->StatusAddress, 0);
GpeRegister++;
}
- }
- ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "GPE registers: %X@%8.8X%8.8X (Blk0) %X@%8.8X%8.8X (Blk1)\n",
- AcpiGbl_GpeBlockInfo[0].RegisterCount,
- ACPI_HIDWORD (AcpiGbl_FADT->XGpe0Blk.Address), ACPI_LODWORD (AcpiGbl_FADT->XGpe0Blk.Address),
- AcpiGbl_GpeBlockInfo[1].RegisterCount,
- ACPI_HIDWORD (AcpiGbl_FADT->XGpe1Blk.Address), ACPI_LODWORD (AcpiGbl_FADT->XGpe1Blk.Address)));
+ ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "GPE Block%d: %X registers at %8.8X%8.8X\n",
+ GpeBlock, AcpiGbl_GpeBlockInfo[0].RegisterCount,
+ ACPI_HIDWORD (AcpiGbl_GpeBlockInfo[GpeBlock].BlockAddress->Address),
+ ACPI_LODWORD (AcpiGbl_GpeBlockInfo[GpeBlock].BlockAddress->Address)));
+
+ ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "GPE Block%d Range GPE #%2.2X to GPE #%2.2X\n",
+ GpeBlock,
+ AcpiGbl_GpeBlockInfo[GpeBlock].BlockBaseNumber,
+ AcpiGbl_GpeBlockInfo[GpeBlock].BlockBaseNumber +
+ ((AcpiGbl_GpeBlockInfo[GpeBlock].RegisterCount * 8) -1)));
+ }
return_ACPI_STATUS (AE_OK);
@@ -762,17 +782,18 @@ AcpiEvGpeDetect (void)
{
GpeRegisterInfo = &AcpiGbl_GpeRegisterInfo[i];
- AcpiOsReadPort (GpeRegisterInfo->StatusAddr,
- &GpeRegisterInfo->Status, 8);
+ GpeRegisterInfo->Status = (UINT8) AcpiHwLowLevelRead (8,
+ &GpeRegisterInfo->StatusAddress, 0);
- AcpiOsReadPort (GpeRegisterInfo->EnableAddr,
- &GpeRegisterInfo->Enable, 8);
+ GpeRegisterInfo->Enable = (UINT8) AcpiHwLowLevelRead (8,
+ &GpeRegisterInfo->EnableAddress, 0);
ACPI_DEBUG_PRINT ((ACPI_DB_INTERRUPTS,
- "GPE block at %X - Enable %08X Status %08X\n",
- GpeRegisterInfo->EnableAddr,
- GpeRegisterInfo->Status,
- GpeRegisterInfo->Enable));
+ "GPE block at %8.8X%8.8X - Enable %08X Status %08X\n",
+ ACPI_HIDWORD (GpeRegisterInfo->EnableAddress.Address),
+ ACPI_LODWORD (GpeRegisterInfo->EnableAddress.Address),
+ GpeRegisterInfo->Enable,
+ GpeRegisterInfo->Status));
/* First check if there is anything active at all in this register */
@@ -945,19 +966,19 @@ AcpiEvGpeDispatch (
else if (GpeInfo->MethodHandle)
{
/*
+ * Disable GPE, so it doesn't keep firing before the method has a
+ * chance to run.
+ */
+ AcpiHwDisableGpe (GpeNumber);
+
+ /*
* Execute the method associated with the GPE.
*/
if (ACPI_FAILURE (AcpiOsQueueForExecution (OSD_PRIORITY_GPE,
AcpiEvAsynchExecuteGpeMethod,
ACPI_TO_POINTER (GpeNumber))))
{
- ACPI_REPORT_ERROR (("AcpiEvGpeDispatch: Unable to queue handler for GPE[%X], disabling event\n", GpeNumber));
-
- /*
- * Disable the GPE on error. The GPE will remain disabled until the ACPI
- * Core Subsystem is restarted, or the handler is reinstalled.
- */
- AcpiHwDisableGpe (GpeNumber);
+ ACPI_REPORT_ERROR (("AcpiEvGpeDispatch: Unable to queue handler for GPE[%X], event is disabled\n", GpeNumber));
}
}
else
diff --git a/sys/contrib/dev/acpica/evmisc.c b/sys/contrib/dev/acpica/evmisc.c
index cb80387..aae63b2 100644
--- a/sys/contrib/dev/acpica/evmisc.c
+++ b/sys/contrib/dev/acpica/evmisc.c
@@ -1,8 +1,7 @@
/******************************************************************************
*
- * Module Name: evmisc - ACPI device notification handler dispatch
- * and ACPI Global Lock support
- * $Revision: 47 $
+ * Module Name: evmisc - Miscellaneous event manager support functions
+ * $Revision: 48 $
*
*****************************************************************************/
@@ -127,6 +126,41 @@
/*******************************************************************************
*
+ * FUNCTION: AcpiEvIsNotifyObject
+ *
+ * PARAMETERS: Node - Node to check
+ *
+ * RETURN: TRUE if notifies allowed on this object
+ *
+ * DESCRIPTION: Check type of node for a object that supports notifies.
+ *
+ * TBD: This could be replaced by a flag bit in the node.
+ *
+ ******************************************************************************/
+
+BOOLEAN
+AcpiEvIsNotifyObject (
+ ACPI_NAMESPACE_NODE *Node)
+{
+ switch (Node->Type)
+ {
+ case ACPI_TYPE_DEVICE:
+ case ACPI_TYPE_PROCESSOR:
+ case ACPI_TYPE_POWER:
+ case ACPI_TYPE_THERMAL:
+ /*
+ * These are the ONLY objects that can receive ACPI notifications
+ */
+ return (TRUE);
+
+ default:
+ return (FALSE);
+ }
+}
+
+
+/*******************************************************************************
+ *
* FUNCTION: AcpiEvGetGpeRegisterIndex
*
* PARAMETERS: GpeNumber - Raw GPE number
diff --git a/sys/contrib/dev/acpica/evxface.c b/sys/contrib/dev/acpica/evxface.c
index 7eb5506..7a6a84f 100644
--- a/sys/contrib/dev/acpica/evxface.c
+++ b/sys/contrib/dev/acpica/evxface.c
@@ -1,7 +1,7 @@
/******************************************************************************
*
* Module Name: evxface - External interfaces for ACPI events
- * $Revision: 125 $
+ * $Revision: 126 $
*
*****************************************************************************/
@@ -128,6 +128,7 @@
ACPI_MODULE_NAME ("evxface")
+
/*******************************************************************************
*
* FUNCTION: AcpiInstallFixedEventHandler
@@ -293,7 +294,7 @@ AcpiInstallNotifyHandler (
{
ACPI_OPERAND_OBJECT *ObjDesc;
ACPI_OPERAND_OBJECT *NotifyObj;
- ACPI_NAMESPACE_NODE *DeviceNode;
+ ACPI_NAMESPACE_NODE *Node;
ACPI_STATUS Status;
@@ -302,7 +303,8 @@ AcpiInstallNotifyHandler (
/* Parameter validation */
- if ((!Handler) ||
+ if ((!Device) ||
+ (!Handler) ||
(HandlerType > ACPI_MAX_NOTIFY_HANDLER_TYPE))
{
return_ACPI_STATUS (AE_BAD_PARAMETER);
@@ -316,8 +318,8 @@ AcpiInstallNotifyHandler (
/* Convert and validate the device handle */
- DeviceNode = AcpiNsMapHandleToNode (Device);
- if (!DeviceNode)
+ Node = AcpiNsMapHandleToNode (Device);
+ if (!Node)
{
Status = AE_BAD_PARAMETER;
goto UnlockAndExit;
@@ -344,13 +346,13 @@ AcpiInstallNotifyHandler (
if (HandlerType == ACPI_SYSTEM_NOTIFY)
{
- AcpiGbl_SysNotify.Node = DeviceNode;
+ AcpiGbl_SysNotify.Node = Node;
AcpiGbl_SysNotify.Handler = Handler;
AcpiGbl_SysNotify.Context = Context;
}
else /* ACPI_DEVICE_NOTIFY */
{
- AcpiGbl_DrvNotify.Node = DeviceNode;
+ AcpiGbl_DrvNotify.Node = Node;
AcpiGbl_DrvNotify.Handler = Handler;
AcpiGbl_DrvNotify.Context = Context;
}
@@ -365,30 +367,26 @@ AcpiInstallNotifyHandler (
*/
else
{
- /*
- * These are the ONLY objects that can receive ACPI notifications
- */
- if ((DeviceNode->Type != ACPI_TYPE_DEVICE) &&
- (DeviceNode->Type != ACPI_TYPE_PROCESSOR) &&
- (DeviceNode->Type != ACPI_TYPE_POWER) &&
- (DeviceNode->Type != ACPI_TYPE_THERMAL))
+ /* Notifies allowed on this object? */
+
+ if (!AcpiEvIsNotifyObject (Node))
{
- Status = AE_BAD_PARAMETER;
+ Status = AE_TYPE;
goto UnlockAndExit;
}
/* Check for an existing internal object */
- ObjDesc = AcpiNsGetAttachedObject (DeviceNode);
+ ObjDesc = AcpiNsGetAttachedObject (Node);
if (ObjDesc)
{
/* Object exists - make sure there's no handler */
if (((HandlerType == ACPI_SYSTEM_NOTIFY) &&
- ObjDesc->Device.SysHandler) ||
+ ObjDesc->CommonNotify.SysHandler) ||
((HandlerType == ACPI_DEVICE_NOTIFY) &&
- ObjDesc->Device.DrvHandler))
+ ObjDesc->CommonNotify.DrvHandler))
{
Status = AE_ALREADY_EXISTS;
goto UnlockAndExit;
@@ -398,7 +396,7 @@ AcpiInstallNotifyHandler (
{
/* Create a new object */
- ObjDesc = AcpiUtCreateInternalObject (DeviceNode->Type);
+ ObjDesc = AcpiUtCreateInternalObject (Node->Type);
if (!ObjDesc)
{
Status = AE_NO_MEMORY;
@@ -407,7 +405,7 @@ AcpiInstallNotifyHandler (
/* Attach new object to the Node */
- Status = AcpiNsAttachObject (Device, ObjDesc, DeviceNode->Type);
+ Status = AcpiNsAttachObject (Device, ObjDesc, Node->Type);
if (ACPI_FAILURE (Status))
{
goto UnlockAndExit;
@@ -423,18 +421,17 @@ AcpiInstallNotifyHandler (
goto UnlockAndExit;
}
- NotifyObj->NotifyHandler.Node = DeviceNode;
+ NotifyObj->NotifyHandler.Node = Node;
NotifyObj->NotifyHandler.Handler = Handler;
NotifyObj->NotifyHandler.Context = Context;
-
if (HandlerType == ACPI_SYSTEM_NOTIFY)
{
- ObjDesc->Device.SysHandler = NotifyObj;
+ ObjDesc->CommonNotify.SysHandler = NotifyObj;
}
else /* ACPI_DEVICE_NOTIFY */
{
- ObjDesc->Device.DrvHandler = NotifyObj;
+ ObjDesc->CommonNotify.DrvHandler = NotifyObj;
}
}
@@ -468,7 +465,7 @@ AcpiRemoveNotifyHandler (
{
ACPI_OPERAND_OBJECT *NotifyObj;
ACPI_OPERAND_OBJECT *ObjDesc;
- ACPI_NAMESPACE_NODE *DeviceNode;
+ ACPI_NAMESPACE_NODE *Node;
ACPI_STATUS Status;
@@ -477,7 +474,8 @@ AcpiRemoveNotifyHandler (
/* Parameter validation */
- if ((!Handler) ||
+ if ((!Device) ||
+ (!Handler) ||
(HandlerType > ACPI_MAX_NOTIFY_HANDLER_TYPE))
{
return_ACPI_STATUS (AE_BAD_PARAMETER);
@@ -491,8 +489,8 @@ AcpiRemoveNotifyHandler (
/* Convert and validate the device handle */
- DeviceNode = AcpiNsMapHandleToNode (Device);
- if (!DeviceNode)
+ Node = AcpiNsMapHandleToNode (Device);
+ if (!Node)
{
Status = AE_BAD_PARAMETER;
goto UnlockAndExit;
@@ -533,21 +531,17 @@ AcpiRemoveNotifyHandler (
*/
else
{
- /*
- * These are the ONLY objects that can receive ACPI notifications
- */
- if ((DeviceNode->Type != ACPI_TYPE_DEVICE) &&
- (DeviceNode->Type != ACPI_TYPE_PROCESSOR) &&
- (DeviceNode->Type != ACPI_TYPE_POWER) &&
- (DeviceNode->Type != ACPI_TYPE_THERMAL))
+ /* Notifies allowed on this object? */
+
+ if (!AcpiEvIsNotifyObject (Node))
{
- Status = AE_BAD_PARAMETER;
+ Status = AE_TYPE;
goto UnlockAndExit;
}
/* Check for an existing internal object */
- ObjDesc = AcpiNsGetAttachedObject (DeviceNode);
+ ObjDesc = AcpiNsGetAttachedObject (Node);
if (!ObjDesc)
{
Status = AE_NOT_EXIST;
@@ -558,11 +552,11 @@ AcpiRemoveNotifyHandler (
if (HandlerType == ACPI_SYSTEM_NOTIFY)
{
- NotifyObj = ObjDesc->Device.SysHandler;
+ NotifyObj = ObjDesc->CommonNotify.SysHandler;
}
else
{
- NotifyObj = ObjDesc->Device.DrvHandler;
+ NotifyObj = ObjDesc->CommonNotify.DrvHandler;
}
if ((!NotifyObj) ||
@@ -576,11 +570,11 @@ AcpiRemoveNotifyHandler (
if (HandlerType == ACPI_SYSTEM_NOTIFY)
{
- ObjDesc->Device.SysHandler = NULL;
+ ObjDesc->CommonNotify.SysHandler = NULL;
}
else
{
- ObjDesc->Device.DrvHandler = NULL;
+ ObjDesc->CommonNotify.DrvHandler = NULL;
}
AcpiUtRemoveReference (NotifyObj);
diff --git a/sys/contrib/dev/acpica/exconfig.c b/sys/contrib/dev/acpica/exconfig.c
index 0908575..c8ddd6b 100644
--- a/sys/contrib/dev/acpica/exconfig.c
+++ b/sys/contrib/dev/acpica/exconfig.c
@@ -1,7 +1,7 @@
/******************************************************************************
*
* Module Name: exconfig - Namespace reconfiguration (Load/Unload opcodes)
- * $Revision: 59 $
+ * $Revision: 60 $
*
*****************************************************************************/
@@ -443,7 +443,7 @@ AcpiExLoadOp (
* Read the entire field and thus the entire table. Buffer is
* allocated during the read.
*/
- Status = AcpiExReadDataFromField (ObjDesc, &BufferDesc);
+ Status = AcpiExReadDataFromField (WalkState, ObjDesc, &BufferDesc);
if (ACPI_FAILURE (Status))
{
goto Cleanup;
diff --git a/sys/contrib/dev/acpica/exconvrt.c b/sys/contrib/dev/acpica/exconvrt.c
index 8612789..9b38e90 100644
--- a/sys/contrib/dev/acpica/exconvrt.c
+++ b/sys/contrib/dev/acpica/exconvrt.c
@@ -1,7 +1,7 @@
/******************************************************************************
*
* Module Name: exconvrt - Object conversion routines
- * $Revision: 30 $
+ * $Revision: 32 $
*
*****************************************************************************/
@@ -319,8 +319,7 @@ AcpiExConvertToBuffer (
{
/*
* We are running a method that exists in a 32-bit ACPI table.
- * Truncate the value to 32 bits by zeroing out the upper
- * 32-bit field
+ * Use only 32 bits of the Integer for conversion.
*/
IntegerSize = sizeof (UINT32);
}
@@ -365,6 +364,9 @@ AcpiExConvertToBuffer (
return_ACPI_STATUS (AE_TYPE);
}
+ /* Mark buffer initialized */
+
+ (*ResultDesc)->Common.Flags |= AOPOBJ_DATA_VALID;
return_ACPI_STATUS (AE_OK);
}
@@ -516,8 +518,7 @@ AcpiExConvertToString (
{
/*
* We are running a method that exists in a 32-bit ACPI table.
- * Truncate the value to 32 bits by zeroing out the upper
- * 32-bit field
+ * Use only 32 bits of the Integer
*/
IntegerSize = sizeof (UINT32);
}
diff --git a/sys/contrib/dev/acpica/exdump.c b/sys/contrib/dev/acpica/exdump.c
index d3b23a5..2155c04 100644
--- a/sys/contrib/dev/acpica/exdump.c
+++ b/sys/contrib/dev/acpica/exdump.c
@@ -1,7 +1,7 @@
/******************************************************************************
*
* Module Name: exdump - Interpreter debug output routines
- * $Revision: 145 $
+ * $Revision: 147 $
*
*****************************************************************************/
@@ -251,7 +251,7 @@ AcpiExDumpOperand (
ACPI_FUNCTION_NAME ("ExDumpOperand")
- if (!((ACPI_LV_INFO & AcpiDbgLevel) && (_COMPONENT & AcpiDbgLayer)))
+ if (!((ACPI_LV_EXEC & AcpiDbgLevel) && (_COMPONENT & AcpiDbgLayer)))
{
return (AE_OK);
}
@@ -263,27 +263,27 @@ AcpiExDumpOperand (
* since most (if not all)
* code that dumps the stack expects something to be there!
*/
- ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Null stack entry ptr\n"));
+ AcpiOsPrintf ("Null stack entry ptr\n");
return (AE_OK);
}
if (ACPI_GET_DESCRIPTOR_TYPE (ObjDesc) == ACPI_DESC_TYPE_NAMED)
{
- ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "%p NS Node: ", ObjDesc));
- ACPI_DUMP_ENTRY (ObjDesc, ACPI_LV_INFO);
+ ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "%p NS Node: ", ObjDesc));
+ ACPI_DUMP_ENTRY (ObjDesc, ACPI_LV_EXEC);
return (AE_OK);
}
if (ACPI_GET_DESCRIPTOR_TYPE (ObjDesc) != ACPI_DESC_TYPE_INTERNAL)
{
- ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "%p is not a local object\n", ObjDesc));
+ ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "%p is not a local object\n", ObjDesc));
ACPI_DUMP_BUFFER (ObjDesc, sizeof (ACPI_OPERAND_OBJECT));
return (AE_OK);
}
/* ObjDesc is a valid object */
- ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "%p ", ObjDesc));
+ ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "%p ", ObjDesc));
switch (ObjDesc->Common.Type)
{
@@ -545,7 +545,7 @@ AcpiExDumpOperand (
if (!ObjDesc->BufferField.BufferObj)
{
- ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "*NULL* \n"));
+ ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "*NULL* \n"));
}
else if (ACPI_TYPE_BUFFER !=
@@ -659,7 +659,7 @@ AcpiExDumpOperands (
}
- ACPI_DEBUG_PRINT ((ACPI_DB_INFO,
+ ACPI_DEBUG_PRINT ((ACPI_DB_EXEC,
"************* Operand Stack Contents (Opcode [%s], %d Operands)\n",
Ident, NumLevels));
@@ -680,7 +680,7 @@ AcpiExDumpOperands (
}
}
- ACPI_DEBUG_PRINT ((ACPI_DB_INFO,
+ ACPI_DEBUG_PRINT ((ACPI_DB_EXEC,
"************* Stack dump from %s(%d), %s\n",
ModuleName, LineNumber, Note));
return;
@@ -852,7 +852,6 @@ AcpiExDumpObjectDescriptor (
AcpiExOutInteger ("Flags", ObjDesc->Package.Flags);
AcpiExOutInteger ("Count", ObjDesc->Package.Count);
AcpiExOutPointer ("Elements", ObjDesc->Package.Elements);
- AcpiExOutPointer ("NextElement", ObjDesc->Package.NextElement);
/* Dump the package contents */
diff --git a/sys/contrib/dev/acpica/exfield.c b/sys/contrib/dev/acpica/exfield.c
index 4a6e628..2321a5a 100644
--- a/sys/contrib/dev/acpica/exfield.c
+++ b/sys/contrib/dev/acpica/exfield.c
@@ -1,7 +1,7 @@
/******************************************************************************
*
* Module Name: exfield - ACPI AML (p-code) execution - field manipulation
- * $Revision: 105 $
+ * $Revision: 108 $
*
*****************************************************************************/
@@ -134,7 +134,8 @@
*
* FUNCTION: AcpiExReadDataFromField
*
- * PARAMETERS: ObjDesc - The named field
+ * PARAMETERS: WalkState - Current execution state
+ * ObjDesc - The named field
* RetBufferDesc - Where the return data object is stored
*
* RETURN: Status
@@ -146,12 +147,14 @@
ACPI_STATUS
AcpiExReadDataFromField (
+ ACPI_WALK_STATE *WalkState,
ACPI_OPERAND_OBJECT *ObjDesc,
ACPI_OPERAND_OBJECT **RetBufferDesc)
{
ACPI_STATUS Status;
ACPI_OPERAND_OBJECT *BufferDesc;
UINT32 Length;
+ UINT32 IntegerSize;
void *Buffer;
BOOLEAN Locked;
@@ -194,7 +197,19 @@ AcpiExReadDataFromField (
*/
Length = ACPI_ROUND_BITS_UP_TO_BYTES (ObjDesc->Field.BitLength);
- if (Length > sizeof (ACPI_INTEGER))
+ /* Handle both ACPI 1.0 and ACPI 2.0 Integer widths */
+
+ IntegerSize = sizeof (ACPI_INTEGER);
+ if (WalkState->MethodNode->Flags & ANOBJ_DATA_WIDTH_32)
+ {
+ /*
+ * We are running a method that exists in a 32-bit ACPI table.
+ * Integer size is 4.
+ */
+ IntegerSize = sizeof (UINT32);
+ }
+
+ if (Length > IntegerSize)
{
/* Field is too large for an Integer, create a Buffer instead */
@@ -213,6 +228,7 @@ AcpiExReadDataFromField (
return_ACPI_STATUS (AE_NO_MEMORY);
}
+ BufferDesc->Common.Flags = AOPOBJ_DATA_VALID;
BufferDesc->Buffer.Length = Length;
Buffer = BufferDesc->Buffer.Pointer;
}
@@ -226,14 +242,15 @@ AcpiExReadDataFromField (
return_ACPI_STATUS (AE_NO_MEMORY);
}
- Length = sizeof (BufferDesc->Integer.Value);
+ Length = IntegerSize;
+ BufferDesc->Integer.Value = 0;
Buffer = &BufferDesc->Integer.Value;
}
- ACPI_DEBUG_PRINT ((ACPI_DB_INFO,
+ ACPI_DEBUG_PRINT ((ACPI_DB_BFIELD,
"Obj=%p Type=%X Buf=%p Len=%X\n",
ObjDesc, ObjDesc->Common.Type, Buffer, Length));
- ACPI_DEBUG_PRINT ((ACPI_DB_INFO,
+ ACPI_DEBUG_PRINT ((ACPI_DB_BFIELD,
"FieldWrite: BitLen=%X BitOff=%X ByteOff=%X\n",
ObjDesc->CommonField.BitLength,
ObjDesc->CommonField.StartFieldBitOffset,
@@ -368,10 +385,10 @@ AcpiExWriteDataToField (
Length = RequiredLength;
}
- ACPI_DEBUG_PRINT ((ACPI_DB_INFO,
+ ACPI_DEBUG_PRINT ((ACPI_DB_BFIELD,
"Obj=%p Type=%X Buf=%p Len=%X\n",
ObjDesc, ObjDesc->Common.Type, Buffer, Length));
- ACPI_DEBUG_PRINT ((ACPI_DB_INFO,
+ ACPI_DEBUG_PRINT ((ACPI_DB_BFIELD,
"FieldRead: BitLen=%X BitOff=%X ByteOff=%X\n",
ObjDesc->CommonField.BitLength,
ObjDesc->CommonField.StartFieldBitOffset,
diff --git a/sys/contrib/dev/acpica/exfldio.c b/sys/contrib/dev/acpica/exfldio.c
index 1bd79e7..f7bc783 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: 82 $
+ * $Revision: 84 $
*
*****************************************************************************/
@@ -246,7 +246,7 @@ AcpiExAccessRegion (
ACPI_PHYSICAL_ADDRESS Address;
- ACPI_FUNCTION_TRACE ("AcpiExAccessRegion");
+ ACPI_FUNCTION_TRACE ("ExAccessRegion");
/*
@@ -800,7 +800,7 @@ AcpiExExtractFromField (
ByteFieldLength = ACPI_ROUND_BITS_UP_TO_BYTES (ObjDesc->CommonField.BitLength);
if (ByteFieldLength > BufferLength)
{
- ACPI_DEBUG_PRINT ((ACPI_DB_INFO,
+ ACPI_DEBUG_PRINT ((ACPI_DB_BFIELD,
"Field size %X (bytes) too large for buffer (%X)\n",
ByteFieldLength, BufferLength));
@@ -812,7 +812,7 @@ AcpiExExtractFromField (
DatumCount = ACPI_ROUND_UP_TO (ByteFieldLength,
ObjDesc->CommonField.AccessByteWidth);
- ACPI_DEBUG_PRINT ((ACPI_DB_INFO,
+ ACPI_DEBUG_PRINT ((ACPI_DB_BFIELD,
"ByteLen=%x, DatumLen=%x, ByteGran=%x\n",
ByteFieldLength, DatumCount,ObjDesc->CommonField.AccessByteWidth));
@@ -991,7 +991,7 @@ AcpiExInsertIntoField (
ByteFieldLength = ACPI_ROUND_BITS_UP_TO_BYTES (ObjDesc->CommonField.BitLength);
if (BufferLength < ByteFieldLength)
{
- ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Buffer length %X too small for field %X\n",
+ ACPI_DEBUG_PRINT ((ACPI_DB_BFIELD, "Buffer length %X too small for field %X\n",
BufferLength, ByteFieldLength));
return_ACPI_STATUS (AE_BUFFER_OVERFLOW);
@@ -1001,7 +1001,7 @@ AcpiExInsertIntoField (
DatumCount = ACPI_ROUND_UP_TO (ByteFieldLength, ObjDesc->CommonField.AccessByteWidth);
- ACPI_DEBUG_PRINT ((ACPI_DB_INFO,
+ ACPI_DEBUG_PRINT ((ACPI_DB_BFIELD,
"ByteLen=%x, DatumLen=%x, ByteGran=%x\n",
ByteFieldLength, DatumCount, ObjDesc->CommonField.AccessByteWidth));
diff --git a/sys/contrib/dev/acpica/exoparg1.c b/sys/contrib/dev/acpica/exoparg1.c
index e9b785b..5c49fa7 100644
--- a/sys/contrib/dev/acpica/exoparg1.c
+++ b/sys/contrib/dev/acpica/exoparg1.c
@@ -2,7 +2,7 @@
/******************************************************************************
*
* Module Name: exoparg1 - AML execution - opcodes with 1 argument
- * $Revision: 134 $
+ * $Revision: 135 $
*
*****************************************************************************/
@@ -928,10 +928,22 @@ AcpiExOpcode_1A_0T_1R (
switch (Operand[0]->Reference.TargetType)
{
case ACPI_TYPE_BUFFER_FIELD:
+
+ /* Ensure that the Buffer arguments are evaluated */
+
+ TempDesc = Operand[0]->Reference.Object;
+#if 0
+
+ Status = AcpiDsGetBufferArguments (TempDesc);
+ if (ACPI_FAILURE (Status))
+ {
+ goto Cleanup;
+ }
+#endif
+
/*
- * The target is a buffer, we must create a new object that
- * contains one element of the buffer, the element pointed
- * to by the index.
+ * Create a new object that contains one element of the
+ * buffer -- the element pointed to by the index.
*
* NOTE: index into a buffer is NOT a pointer to a
* sub-buffer of the main buffer, it is only a pointer to a
@@ -949,7 +961,6 @@ AcpiExOpcode_1A_0T_1R (
* indexed location, we don't need to add an additional
* reference to the buffer itself.
*/
- TempDesc = Operand[0]->Reference.Object;
ReturnDesc->Integer.Value =
TempDesc->Buffer.Pointer[Operand[0]->Reference.Offset];
break;
@@ -957,10 +968,18 @@ AcpiExOpcode_1A_0T_1R (
case ACPI_TYPE_PACKAGE:
+#if 0
+ /* Ensure that the Package arguments are evaluated */
+
+ Status = AcpiDsGetPackageArguments (Operand[0]->Reference.Object);
+ if (ACPI_FAILURE (Status))
+ {
+ goto Cleanup;
+ }
+#endif
/*
- * The target is a package, we want to return the referenced
- * element of the package. We must add another reference to
- * this object, however.
+ * Return the referenced element of the package. We must add
+ * another reference to the referenced object, however.
*/
ReturnDesc = *(Operand[0]->Reference.Where);
if (!ReturnDesc)
diff --git a/sys/contrib/dev/acpica/exoparg2.c b/sys/contrib/dev/acpica/exoparg2.c
index 71c946b..26fc569 100644
--- a/sys/contrib/dev/acpica/exoparg2.c
+++ b/sys/contrib/dev/acpica/exoparg2.c
@@ -1,7 +1,7 @@
/******************************************************************************
*
* Module Name: exoparg2 - AML execution - opcodes with 2 arguments
- * $Revision: 104 $
+ * $Revision: 105 $
*
*****************************************************************************/
@@ -177,51 +177,47 @@ AcpiExOpcode_2A_0T_0R (
ACPI_STATUS Status = AE_OK;
- ACPI_FUNCTION_TRACE_STR ("ExOpcode_2A_0T_0R", AcpiPsGetOpcodeName (WalkState->Opcode));
+ ACPI_FUNCTION_TRACE_STR ("ExOpcode_2A_0T_0R",
+ AcpiPsGetOpcodeName (WalkState->Opcode));
/* Examine the opcode */
switch (WalkState->Opcode)
{
-
case AML_NOTIFY_OP: /* Notify (NotifyObject, NotifyValue) */
/* The first operand is a namespace node */
Node = (ACPI_NAMESPACE_NODE *) Operand[0];
- /* The node must refer to a device or thermal zone or processor */
+ /* Notifies allowed on this object? */
- switch (Node->Type)
+ if (!AcpiEvIsNotifyObject (Node))
{
- case ACPI_TYPE_DEVICE:
- case ACPI_TYPE_THERMAL:
- case ACPI_TYPE_PROCESSOR:
-
- /*
- * Dispatch the notify to the appropriate handler
- * NOTE: the request is queued for execution after this method
- * completes. The notify handlers are NOT invoked synchronously
- * from this thread -- because handlers may in turn run other
- * control methods.
- */
- Status = AcpiEvQueueNotifyRequest (Node,
- (UINT32) Operand[1]->Integer.Value);
- break;
-
- default:
- ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Unexpected notify object type %X\n",
- Node->Type));
+ ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Unexpected notify object type [%s]\n",
+ AcpiUtGetTypeName (Node->Type)));
Status = AE_AML_OPERAND_TYPE;
break;
}
+
+ /*
+ * Dispatch the notify to the appropriate handler
+ * NOTE: the request is queued for execution after this method
+ * completes. The notify handlers are NOT invoked synchronously
+ * from this thread -- because handlers may in turn run other
+ * control methods.
+ */
+ Status = AcpiEvQueueNotifyRequest (Node,
+ (UINT32) Operand[1]->Integer.Value);
break;
+
default:
- ACPI_REPORT_ERROR (("AcpiExOpcode_2A_0T_0R: Unknown opcode %X\n", WalkState->Opcode));
+ ACPI_REPORT_ERROR (("AcpiExOpcode_2A_0T_0R: Unknown opcode %X\n",
+ WalkState->Opcode));
Status = AE_AML_BAD_OPCODE;
}
diff --git a/sys/contrib/dev/acpica/exprep.c b/sys/contrib/dev/acpica/exprep.c
index ed24884..268cf20 100644
--- a/sys/contrib/dev/acpica/exprep.c
+++ b/sys/contrib/dev/acpica/exprep.c
@@ -2,7 +2,7 @@
/******************************************************************************
*
* Module Name: exprep - ACPI AML (p-code) execution - field prep utilities
- * $Revision: 114 $
+ * $Revision: 115 $
*
*****************************************************************************/
@@ -303,16 +303,18 @@ AcpiExPrepCommonFieldObject (
* two pieces of information - the width of each field access and the
* necessary ByteAlignment (address granularity) of the access.
*
- * For AnyAcc, the AccessBitWidth is the largest width that is both necessary
- * and possible in an attempt to access the whole field in one
- * I/O operation. However, for AnyAcc, the ByteAlignment is always one byte.
+ * For AnyAcc, the AccessBitWidth is the largest width that is both
+ * necessary and possible in an attempt to access the whole field in one
+ * I/O operation. However, for AnyAcc, the ByteAlignment is always one
+ * byte.
*
* For all Buffer Fields, the ByteAlignment is always one byte.
*
- * For all other access types (Byte, Word, Dword, Qword), the Bitwidth is the
- * same (equivalent) as the ByteAlignment.
+ * For all other access types (Byte, Word, Dword, Qword), the Bitwidth is
+ * the same (equivalent) as the ByteAlignment.
*/
- AccessBitWidth = AcpiExDecodeFieldAccess (ObjDesc, FieldFlags, &ByteAlignment);
+ AccessBitWidth = AcpiExDecodeFieldAccess (ObjDesc, FieldFlags,
+ &ByteAlignment);
if (!AccessBitWidth)
{
return_ACPI_STATUS (AE_AML_OPERAND_VALUE);
@@ -320,45 +322,59 @@ AcpiExPrepCommonFieldObject (
/* Setup width (access granularity) fields */
- ObjDesc->CommonField.AccessByteWidth = (UINT8) ACPI_DIV_8 (AccessBitWidth); /* 1, 2, 4, 8 */
+ ObjDesc->CommonField.AccessByteWidth = (UINT8)
+ ACPI_DIV_8 (AccessBitWidth); /* 1, 2, 4, 8 */
/*
- * BaseByteOffset is the address of the start of the field within the region. It is
- * the byte address of the first *datum* (field-width data unit) of the field.
- * (i.e., the first datum that contains at least the first *bit* of the field.)
- * Note: ByteAlignment is always either equal to the AccessBitWidth or 8 (Byte access),
- * and it defines the addressing granularity of the parent region or buffer.
+ * BaseByteOffset is the address of the start of the field within the
+ * region. It is the byte address of the first *datum* (field-width data
+ * unit) of the field. (i.e., the first datum that contains at least the
+ * first *bit* of the field.)
+ *
+ * Note: ByteAlignment is always either equal to the AccessBitWidth or 8
+ * (Byte access), and it defines the addressing granularity of the parent
+ * region or buffer.
*/
- NearestByteAddress = ACPI_ROUND_BITS_DOWN_TO_BYTES (FieldBitPosition);
- ObjDesc->CommonField.BaseByteOffset = ACPI_ROUND_DOWN (NearestByteAddress, ByteAlignment);
+ NearestByteAddress =
+ ACPI_ROUND_BITS_DOWN_TO_BYTES (FieldBitPosition);
+ ObjDesc->CommonField.BaseByteOffset =
+ ACPI_ROUND_DOWN (NearestByteAddress, ByteAlignment);
/*
- * StartFieldBitOffset is the offset of the first bit of the field within a field datum.
+ * StartFieldBitOffset is the offset of the first bit of the field within
+ * a field datum.
*/
- ObjDesc->CommonField.StartFieldBitOffset = (UINT8) (FieldBitPosition -
- ACPI_MUL_8 (ObjDesc->CommonField.BaseByteOffset));
+ ObjDesc->CommonField.StartFieldBitOffset = (UINT8)
+ (FieldBitPosition - ACPI_MUL_8 (ObjDesc->CommonField.BaseByteOffset));
/*
* Valid bits -- the number of bits that compose a partial datum,
- * 1) At the end of the field within the region (arbitrary starting bit offset)
- * 2) At the end of a buffer used to contain the field (starting offset always zero)
+ * 1) At the end of the field within the region (arbitrary starting bit
+ * offset)
+ * 2) At the end of a buffer used to contain the field (starting offset
+ * always zero)
*/
- ObjDesc->CommonField.EndFieldValidBits = (UINT8) ((ObjDesc->CommonField.StartFieldBitOffset + FieldBitLength) %
+ ObjDesc->CommonField.EndFieldValidBits = (UINT8)
+ ((ObjDesc->CommonField.StartFieldBitOffset + FieldBitLength) %
AccessBitWidth);
- ObjDesc->CommonField.EndBufferValidBits = (UINT8) (FieldBitLength % AccessBitWidth); /* StartBufferBitOffset always = 0 */
+ /* StartBufferBitOffset always = 0 */
+
+ ObjDesc->CommonField.EndBufferValidBits = (UINT8)
+ (FieldBitLength % AccessBitWidth);
/*
- * DatumValidBits is the number of valid field bits in the first field datum.
+ * DatumValidBits is the number of valid field bits in the first
+ * field datum.
*/
- ObjDesc->CommonField.DatumValidBits = (UINT8) (AccessBitWidth -
- ObjDesc->CommonField.StartFieldBitOffset);
+ ObjDesc->CommonField.DatumValidBits = (UINT8)
+ (AccessBitWidth - ObjDesc->CommonField.StartFieldBitOffset);
/*
* Does the entire field fit within a single field access element? (datum)
* (i.e., without crossing a datum boundary)
*/
if ((ObjDesc->CommonField.StartFieldBitOffset + FieldBitLength) <=
- (UINT16) AccessBitWidth)
+ (UINT16) AccessBitWidth)
{
ObjDesc->Common.Flags |= AOPOBJ_SINGLE_DATUM;
}
@@ -448,7 +464,7 @@ AcpiExPrepFieldValue (
AcpiUtAddReference (ObjDesc->Field.RegionObj);
- ACPI_DEBUG_PRINT ((ACPI_DB_INFO,
+ ACPI_DEBUG_PRINT ((ACPI_DB_BFIELD,
"RegionField: Bitoff=%X Off=%X Gran=%X Region %p\n",
ObjDesc->Field.StartFieldBitOffset, ObjDesc->Field.BaseByteOffset,
ObjDesc->Field.AccessByteWidth, ObjDesc->Field.RegionObj));
@@ -466,9 +482,12 @@ AcpiExPrepFieldValue (
AcpiUtAddReference (ObjDesc->BankField.RegionObj);
AcpiUtAddReference (ObjDesc->BankField.BankObj);
- ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Bank Field: BitOff=%X Off=%X Gran=%X Region %p BankReg %p\n",
- ObjDesc->BankField.StartFieldBitOffset, ObjDesc->BankField.BaseByteOffset,
- ObjDesc->Field.AccessByteWidth, ObjDesc->BankField.RegionObj,
+ ACPI_DEBUG_PRINT ((ACPI_DB_BFIELD,
+ "Bank Field: BitOff=%X Off=%X Gran=%X Region %p BankReg %p\n",
+ ObjDesc->BankField.StartFieldBitOffset,
+ ObjDesc->BankField.BaseByteOffset,
+ ObjDesc->Field.AccessByteWidth,
+ ObjDesc->BankField.RegionObj,
ObjDesc->BankField.BankObj));
break;
@@ -477,8 +496,8 @@ AcpiExPrepFieldValue (
ObjDesc->IndexField.IndexObj = AcpiNsGetAttachedObject (Info->RegisterNode);
ObjDesc->IndexField.DataObj = AcpiNsGetAttachedObject (Info->DataRegisterNode);
- ObjDesc->IndexField.Value = (UINT32) (Info->FieldBitPosition /
- ACPI_MUL_8 (ObjDesc->Field.AccessByteWidth));
+ ObjDesc->IndexField.Value = (UINT32)
+ (Info->FieldBitPosition / ACPI_MUL_8 (ObjDesc->Field.AccessByteWidth));
if (!ObjDesc->IndexField.DataObj || !ObjDesc->IndexField.IndexObj)
{
@@ -491,9 +510,12 @@ AcpiExPrepFieldValue (
AcpiUtAddReference (ObjDesc->IndexField.DataObj);
AcpiUtAddReference (ObjDesc->IndexField.IndexObj);
- ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "IndexField: bitoff=%X off=%X gran=%X Index %p Data %p\n",
- ObjDesc->IndexField.StartFieldBitOffset, ObjDesc->IndexField.BaseByteOffset,
- ObjDesc->Field.AccessByteWidth, ObjDesc->IndexField.IndexObj,
+ ACPI_DEBUG_PRINT ((ACPI_DB_BFIELD,
+ "IndexField: bitoff=%X off=%X gran=%X Index %p Data %p\n",
+ ObjDesc->IndexField.StartFieldBitOffset,
+ ObjDesc->IndexField.BaseByteOffset,
+ ObjDesc->Field.AccessByteWidth,
+ ObjDesc->IndexField.IndexObj,
ObjDesc->IndexField.DataObj));
break;
}
@@ -505,7 +527,7 @@ AcpiExPrepFieldValue (
Status = AcpiNsAttachObject (Info->FieldNode, ObjDesc,
AcpiNsGetType (Info->FieldNode));
- ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "set NamedObj %p (%4.4s) val = %p\n",
+ ACPI_DEBUG_PRINT ((ACPI_DB_BFIELD, "set NamedObj %p (%4.4s) val = %p\n",
Info->FieldNode, (char *) &(Info->FieldNode->Name), ObjDesc));
/* Remove local reference to the object */
diff --git a/sys/contrib/dev/acpica/exregion.c b/sys/contrib/dev/acpica/exregion.c
index 79b8b64..ef4685e 100644
--- a/sys/contrib/dev/acpica/exregion.c
+++ b/sys/contrib/dev/acpica/exregion.c
@@ -2,7 +2,7 @@
/******************************************************************************
*
* Module Name: exregion - ACPI default OpRegion (address space) handlers
- * $Revision: 72 $
+ * $Revision: 74 $
*
*****************************************************************************/
@@ -162,7 +162,6 @@ AcpiExSystemMemorySpaceHandler (
ACPI_MEM_SPACE_CONTEXT *MemInfo = RegionContext;
UINT32 Length;
UINT32 WindowSize;
- UINT32 Remaining;
ACPI_FUNCTION_TRACE ("ExSystemMemorySpaceHandler");
@@ -219,15 +218,11 @@ AcpiExSystemMemorySpaceHandler (
* Don't attempt to map memory beyond the end of the region, and
* constrain the maximum mapping size to something reasonable.
*/
- Remaining = (UINT32) ((MemInfo->Address + (ACPI_PHYSICAL_ADDRESS) MemInfo->Length) - Address);
- if (Remaining > SYSMEM_REGION_WINDOW_SIZE)
+ WindowSize = (UINT32) ((MemInfo->Address + MemInfo->Length) - Address);
+ if (WindowSize > SYSMEM_REGION_WINDOW_SIZE)
{
WindowSize = SYSMEM_REGION_WINDOW_SIZE;
}
- else
- {
- WindowSize = Remaining;
- }
/* Create a new mapping starting at the address given */
diff --git a/sys/contrib/dev/acpica/exresnte.c b/sys/contrib/dev/acpica/exresnte.c
index dfbc5be..bd671dc 100644
--- a/sys/contrib/dev/acpica/exresnte.c
+++ b/sys/contrib/dev/acpica/exresnte.c
@@ -2,7 +2,7 @@
/******************************************************************************
*
* Module Name: exresnte - AML Interpreter object resolution
- * $Revision: 50 $
+ * $Revision: 52 $
*
*****************************************************************************/
@@ -218,10 +218,14 @@ AcpiExResolveNodeToValue (
return_ACPI_STATUS (AE_AML_OPERAND_TYPE);
}
- /* Return an additional reference to the object */
+ Status = AcpiDsGetPackageArguments (SourceDesc);
+ if (ACPI_SUCCESS (Status))
+ {
+ /* Return an additional reference to the object */
- ObjDesc = SourceDesc;
- AcpiUtAddReference (ObjDesc);
+ ObjDesc = SourceDesc;
+ AcpiUtAddReference (ObjDesc);
+ }
break;
@@ -234,10 +238,14 @@ AcpiExResolveNodeToValue (
return_ACPI_STATUS (AE_AML_OPERAND_TYPE);
}
- /* Return an additional reference to the object */
+ Status = AcpiDsGetBufferArguments (SourceDesc);
+ if (ACPI_SUCCESS (Status))
+ {
+ /* Return an additional reference to the object */
- ObjDesc = SourceDesc;
- AcpiUtAddReference (ObjDesc);
+ ObjDesc = SourceDesc;
+ AcpiUtAddReference (ObjDesc);
+ }
break;
@@ -281,7 +289,7 @@ AcpiExResolveNodeToValue (
ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "FieldRead Node=%p SourceDesc=%p Type=%X\n",
Node, SourceDesc, EntryType));
- Status = AcpiExReadDataFromField (SourceDesc, &ObjDesc);
+ Status = AcpiExReadDataFromField (WalkState, SourceDesc, &ObjDesc);
break;
/*
diff --git a/sys/contrib/dev/acpica/exresolv.c b/sys/contrib/dev/acpica/exresolv.c
index 17a0fc7..d869654 100644
--- a/sys/contrib/dev/acpica/exresolv.c
+++ b/sys/contrib/dev/acpica/exresolv.c
@@ -2,7 +2,7 @@
/******************************************************************************
*
* Module Name: exresolv - AML Interpreter object resolution
- * $Revision: 106 $
+ * $Revision: 109 $
*
*****************************************************************************/
@@ -191,7 +191,7 @@ AcpiExResolveToValue (
}
}
- ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Resolved object %p\n", *StackPtr));
+ ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Resolved object %p\n", *StackPtr));
return_ACPI_STATUS (AE_OK);
}
@@ -277,7 +277,7 @@ AcpiExResolveObjectToValue (
AcpiUtRemoveReference (StackDesc);
*StackPtr = ObjDesc;
- ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "[Arg/Local %d] ValueObj is %p\n",
+ ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "[Arg/Local %d] ValueObj is %p\n",
StackDesc->Reference.Offset, ObjDesc));
break;
@@ -395,6 +395,19 @@ AcpiExResolveObjectToValue (
break; /* case INTERNAL_TYPE_REFERENCE */
+
+ case ACPI_TYPE_BUFFER:
+
+ Status = AcpiDsGetBufferArguments (StackDesc);
+ break;
+
+
+ case ACPI_TYPE_PACKAGE:
+
+ Status = AcpiDsGetPackageArguments (StackDesc);
+ break;
+
+
/*
* These cases may never happen here, but just in case..
*/
@@ -406,7 +419,7 @@ AcpiExResolveObjectToValue (
ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "FieldRead SourceDesc=%p Type=%X\n",
StackDesc, StackDesc->Common.Type));
- Status = AcpiExReadDataFromField (StackDesc, &ObjDesc);
+ Status = AcpiExReadDataFromField (WalkState, StackDesc, &ObjDesc);
*StackPtr = (void *) ObjDesc;
break;
diff --git a/sys/contrib/dev/acpica/exresop.c b/sys/contrib/dev/acpica/exresop.c
index f513053..dcd91ec 100644
--- a/sys/contrib/dev/acpica/exresop.c
+++ b/sys/contrib/dev/acpica/exresop.c
@@ -2,7 +2,7 @@
/******************************************************************************
*
* Module Name: exresop - AML Interpreter operand/object resolution
- * $Revision: 47 $
+ * $Revision: 48 $
*
*****************************************************************************/
@@ -163,7 +163,7 @@ AcpiExCheckObjectType (
if (TypeNeeded != ThisType)
{
- ACPI_DEBUG_PRINT ((ACPI_DB_INFO,
+ ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
"Needed [%s], found [%s] %p\n",
AcpiUtGetTypeName (TypeNeeded),
AcpiUtGetTypeName (ThisType), Object));
@@ -231,8 +231,8 @@ AcpiExResolveOperands (
return_ACPI_STATUS (AE_AML_INTERNAL);
}
- ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Opcode %X OperandTypes=%X \n",
- Opcode, ArgTypes));
+ ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Opcode %X [%s] OperandTypes=%X \n",
+ Opcode, OpInfo->Name, ArgTypes));
/*
* Normal exit is with (ArgTypes == 0) at end of argument list.
@@ -306,7 +306,7 @@ AcpiExResolveOperands (
case AML_LOCAL_OP:
case AML_REVISION_OP:
- ACPI_DEBUG_ONLY_MEMBERS (ACPI_DEBUG_PRINT ((ACPI_DB_INFO,
+ ACPI_DEBUG_ONLY_MEMBERS (ACPI_DEBUG_PRINT ((ACPI_DB_EXEC,
"Reference Opcode: %s\n", OpInfo->Name)));
break;
diff --git a/sys/contrib/dev/acpica/exstore.c b/sys/contrib/dev/acpica/exstore.c
index 9b09a38..6894fd4 100644
--- a/sys/contrib/dev/acpica/exstore.c
+++ b/sys/contrib/dev/acpica/exstore.c
@@ -2,7 +2,7 @@
/******************************************************************************
*
* Module Name: exstore - AML Interpreter object store support
- * $Revision: 162 $
+ * $Revision: 163 $
*
*****************************************************************************/
@@ -246,7 +246,7 @@ AcpiExStore (
* Storing to the Debug object causes the value stored to be
* displayed and otherwise has no effect -- see ACPI Specification
*/
- ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "**** Write to Debug Object: ****:\n\n"));
+ ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "**** Write to Debug Object: ****:\n\n"));
ACPI_DEBUG_PRINT_RAW ((ACPI_DB_DEBUG_OBJECT, "[ACPI Debug] %s: ",
AcpiUtGetTypeName (SourceDesc->Common.Type)));
@@ -288,7 +288,7 @@ AcpiExStore (
break;
}
- ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INFO, "\n"));
+ ACPI_DEBUG_PRINT_RAW ((ACPI_DB_EXEC, "\n"));
break;
@@ -506,7 +506,7 @@ AcpiExStoreObjectToNode (
TargetType = AcpiNsGetType (Node);
TargetDesc = AcpiNsGetAttachedObject (Node);
- ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Storing %p(%s) into node %p(%s)\n",
+ ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Storing %p(%s) into node %p(%s)\n",
SourceDesc, AcpiUtGetTypeName (SourceDesc->Common.Type),
Node, AcpiUtGetTypeName (TargetType)));
@@ -562,7 +562,7 @@ AcpiExStoreObjectToNode (
*/
Status = AcpiNsAttachObject (Node, NewDesc, TargetType);
- ACPI_DEBUG_PRINT ((ACPI_DB_INFO,
+ ACPI_DEBUG_PRINT ((ACPI_DB_EXEC,
"Store %s into %s via Convert/Attach\n",
AcpiUtGetTypeName (SourceDesc->Common.Type),
AcpiUtGetTypeName (NewDesc->Common.Type)));
@@ -572,7 +572,7 @@ AcpiExStoreObjectToNode (
default:
- ACPI_DEBUG_PRINT ((ACPI_DB_INFO,
+ ACPI_DEBUG_PRINT ((ACPI_DB_EXEC,
"Storing %s (%p) directly into node (%p), no implicit conversion\n",
AcpiUtGetTypeName (SourceDesc->Common.Type), SourceDesc, Node));
diff --git a/sys/contrib/dev/acpica/exstoren.c b/sys/contrib/dev/acpica/exstoren.c
index f9232f0..d322f84 100644
--- a/sys/contrib/dev/acpica/exstoren.c
+++ b/sys/contrib/dev/acpica/exstoren.c
@@ -3,7 +3,7 @@
*
* Module Name: exstoren - AML Interpreter object store support,
* Store to Node (namespace object)
- * $Revision: 46 $
+ * $Revision: 47 $
*
*****************************************************************************/
@@ -241,7 +241,7 @@ AcpiExResolveObject (
* FUNCTION: AcpiExStoreObjectToObject
*
* PARAMETERS: SourceDesc - Object to store
- * DestDesc - Object to recieve a copy of the source
+ * DestDesc - Object to receive a copy of the source
* NewDesc - New object if DestDesc is obsoleted
* WalkState - Current walk state
*
diff --git a/sys/contrib/dev/acpica/exstorob.c b/sys/contrib/dev/acpica/exstorob.c
index 84d091c..4e873f5 100644
--- a/sys/contrib/dev/acpica/exstorob.c
+++ b/sys/contrib/dev/acpica/exstorob.c
@@ -2,7 +2,7 @@
/******************************************************************************
*
* Module Name: exstorob - AML Interpreter object store support, store to object
- * $Revision: 41 $
+ * $Revision: 42 $
*
*****************************************************************************/
@@ -200,6 +200,10 @@ AcpiExStoreBufferToBuffer (
Length, TargetDesc->Buffer.Length));
}
+ /* Copy flags */
+
+ TargetDesc->Buffer.Flags = SourceDesc->Buffer.Flags;
+
return (AE_OK);
}
diff --git a/sys/contrib/dev/acpica/hwgpe.c b/sys/contrib/dev/acpica/hwgpe.c
index b6c71cb..09981c3 100644
--- a/sys/contrib/dev/acpica/hwgpe.c
+++ b/sys/contrib/dev/acpica/hwgpe.c
@@ -2,7 +2,7 @@
/******************************************************************************
*
* Module Name: hwgpe - Low level GPE enable/disable/clear functions
- * $Revision: 39 $
+ * $Revision: 40 $
*
*****************************************************************************/
@@ -180,10 +180,10 @@ AcpiHwEnableGpe (
* Read the current value of the register, set the appropriate bit
* to enable the GPE, and write out the new register.
*/
- InByte = 0;
- AcpiOsReadPort (AcpiGbl_GpeRegisterInfo[RegisterIndex].EnableAddr, &InByte, 8);
- AcpiOsWritePort (AcpiGbl_GpeRegisterInfo[RegisterIndex].EnableAddr,
- (InByte | BitMask), 8);
+ InByte = AcpiHwLowLevelRead (8,
+ &AcpiGbl_GpeRegisterInfo[RegisterIndex].EnableAddress, 0);
+ AcpiHwLowLevelWrite (8, (InByte | BitMask),
+ &AcpiGbl_GpeRegisterInfo[RegisterIndex].EnableAddress, 0);
}
@@ -262,10 +262,10 @@ AcpiHwDisableGpe (
* Read the current value of the register, clear the appropriate bit,
* and write out the new register value to disable the GPE.
*/
- InByte = 0;
- AcpiOsReadPort (AcpiGbl_GpeRegisterInfo[RegisterIndex].EnableAddr, &InByte, 8);
- AcpiOsWritePort (AcpiGbl_GpeRegisterInfo[RegisterIndex].EnableAddr,
- (InByte & ~BitMask), 8);
+ InByte = AcpiHwLowLevelRead (8,
+ &AcpiGbl_GpeRegisterInfo[RegisterIndex].EnableAddress, 0);
+ AcpiHwLowLevelWrite (8, (InByte & ~BitMask),
+ &AcpiGbl_GpeRegisterInfo[RegisterIndex].EnableAddress, 0);
AcpiHwDisableGpeForWakeup(GpeNumber);
}
@@ -345,7 +345,8 @@ AcpiHwClearGpe (
* Write a one to the appropriate bit in the status register to
* clear this GPE.
*/
- AcpiOsWritePort (AcpiGbl_GpeRegisterInfo[RegisterIndex].StatusAddr, BitMask, 8);
+ AcpiHwLowLevelWrite (8, BitMask,
+ &AcpiGbl_GpeRegisterInfo[RegisterIndex].StatusAddress, 0);
}
@@ -393,8 +394,7 @@ AcpiHwGetGpeStatus (
/* GPE Enabled? */
- InByte = 0;
- AcpiOsReadPort (GpeRegisterInfo->EnableAddr, &InByte, 8);
+ InByte = AcpiHwLowLevelRead (8, &GpeRegisterInfo->EnableAddress, 0);
if (BitMask & InByte)
{
(*EventStatus) |= ACPI_EVENT_FLAG_ENABLED;
@@ -409,8 +409,7 @@ AcpiHwGetGpeStatus (
/* GPE active (set)? */
- InByte = 0;
- AcpiOsReadPort (GpeRegisterInfo->StatusAddr, &InByte, 8);
+ InByte = AcpiHwLowLevelRead (8, &GpeRegisterInfo->StatusAddress, 0);
if (BitMask & InByte)
{
(*EventStatus) |= ACPI_EVENT_FLAG_SET;
@@ -453,14 +452,14 @@ AcpiHwDisableNonWakeupGpes (
* Read the enabled status of all GPEs. We
* will be using it to restore all the GPEs later.
*/
- AcpiOsReadPort (GpeRegisterInfo->EnableAddr,
- &GpeRegisterInfo->Enable, 8);
+ GpeRegisterInfo->Enable = (UINT8) AcpiHwLowLevelRead (8,
+ &GpeRegisterInfo->EnableAddress, 0);
/*
* Disable all GPEs except wakeup GPEs.
*/
- AcpiOsWritePort(GpeRegisterInfo->EnableAddr,
- GpeRegisterInfo->WakeEnable, 8);
+ AcpiHwLowLevelWrite (8, GpeRegisterInfo->WakeEnable,
+ &GpeRegisterInfo->EnableAddress, 0);
}
}
@@ -496,7 +495,7 @@ AcpiHwEnableNonWakeupGpes (
* We previously stored the enabled status of all GPEs.
* Blast them back in.
*/
- AcpiOsWritePort(GpeRegisterInfo->EnableAddr,
- GpeRegisterInfo->Enable, 8);
+ AcpiHwLowLevelWrite (8, GpeRegisterInfo->Enable, &
+ GpeRegisterInfo->EnableAddress, 0);
}
}
diff --git a/sys/contrib/dev/acpica/hwregs.c b/sys/contrib/dev/acpica/hwregs.c
index 40107cc..97146d4 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: 120 $
+ * $Revision: 121 $
*
******************************************************************************/
@@ -167,9 +167,8 @@ AcpiHwClearAcpiStatus (void)
if (ACPI_VALID_ADDRESS (AcpiGbl_FADT->XPm1bEvtBlk.Address))
{
- AcpiOsWritePort ((ACPI_IO_ADDRESS)
- ACPI_GET_ADDRESS (AcpiGbl_FADT->XPm1bEvtBlk.Address),
- ACPI_BITMASK_ALL_FIXED_STATUS, 16);
+ AcpiHwLowLevelWrite (16, ACPI_BITMASK_ALL_FIXED_STATUS,
+ &AcpiGbl_FADT->XPm1bEvtBlk, 0);
}
/* Clear the GPE Bits */
@@ -178,9 +177,8 @@ AcpiHwClearAcpiStatus (void)
{
for (i = 0; i < AcpiGbl_GpeBlockInfo[GpeBlock].RegisterCount; i++)
{
- AcpiOsWritePort ((ACPI_IO_ADDRESS)
- (AcpiGbl_GpeBlockInfo[GpeBlock].BlockAddress + i),
- 0xFF, 8);
+ AcpiHwLowLevelWrite (8, 0xFF,
+ AcpiGbl_GpeBlockInfo[GpeBlock].BlockAddress, i);
}
}
diff --git a/sys/contrib/dev/acpica/hwsleep.c b/sys/contrib/dev/acpica/hwsleep.c
index 0db2df6..d72181e 100644
--- a/sys/contrib/dev/acpica/hwsleep.c
+++ b/sys/contrib/dev/acpica/hwsleep.c
@@ -2,7 +2,7 @@
/******************************************************************************
*
* Name: hwsleep.c - ACPI Hardware Sleep/Wake Interface
- * $Revision: 35 $
+ * $Revision: 37 $
*
*****************************************************************************/
@@ -337,6 +337,7 @@ AcpiEnterSleepState (
PM1BControl |= SleepEnableRegInfo->AccessBitMask;
/* Write #2: SLP_TYP + SLP_EN */
+ ACPI_FLUSH_CPU_CACHE();
AcpiHwRegisterWrite (ACPI_MTX_LOCK, ACPI_REGISTER_PM1A_CONTROL, PM1AControl);
AcpiHwRegisterWrite (ACPI_MTX_LOCK, ACPI_REGISTER_PM1B_CONTROL, PM1BControl);
diff --git a/sys/contrib/dev/acpica/hwtimer.c b/sys/contrib/dev/acpica/hwtimer.c
index 8339b27..cda38ff 100644
--- a/sys/contrib/dev/acpica/hwtimer.c
+++ b/sys/contrib/dev/acpica/hwtimer.c
@@ -2,7 +2,7 @@
/******************************************************************************
*
* Name: hwtimer.c - ACPI Power Management Timer Interface
- * $Revision: 19 $
+ * $Revision: 20 $
*
*****************************************************************************/
@@ -183,8 +183,7 @@ AcpiGetTimer (
return_ACPI_STATUS (AE_BAD_PARAMETER);
}
- AcpiOsReadPort ((ACPI_IO_ADDRESS)
- ACPI_GET_ADDRESS (AcpiGbl_FADT->XPmTmrBlk.Address), Ticks, 32);
+ *Ticks = AcpiHwLowLevelRead (32, &AcpiGbl_FADT->XPmTmrBlk, 0);
return_ACPI_STATUS (AE_OK);
}
diff --git a/sys/contrib/dev/acpica/nsaccess.c b/sys/contrib/dev/acpica/nsaccess.c
index fb65f46..588617a 100644
--- a/sys/contrib/dev/acpica/nsaccess.c
+++ b/sys/contrib/dev/acpica/nsaccess.c
@@ -1,7 +1,7 @@
/*******************************************************************************
*
* Module Name: nsaccess - Top-level functions for accessing ACPI namespace
- * $Revision: 152 $
+ * $Revision: 153 $
*
******************************************************************************/
@@ -648,8 +648,9 @@ AcpiNsLookup (
return_ACPI_STATUS (Status);
}
- ACPI_DEBUG_PRINT ((ACPI_DB_INFO,
- "Setting global scope to %p\n", ThisNode));
+ ACPI_DEBUG_PRINT ((ACPI_DB_NAMES,
+ "Setting current scope to [%4.4s] (%p)\n",
+ ThisNode->Name.Ascii, ThisNode));
}
}
diff --git a/sys/contrib/dev/acpica/nsalloc.c b/sys/contrib/dev/acpica/nsalloc.c
index b12b26d..3db018c 100644
--- a/sys/contrib/dev/acpica/nsalloc.c
+++ b/sys/contrib/dev/acpica/nsalloc.c
@@ -1,7 +1,7 @@
/*******************************************************************************
*
* Module Name: nsalloc - Namespace allocation and deletion utilities
- * $Revision: 70 $
+ * $Revision: 72 $
*
******************************************************************************/
@@ -156,7 +156,7 @@ AcpiNsCreateNode (
ACPI_MEM_TRACKING (AcpiGbl_MemoryLists[ACPI_MEM_LIST_NSNODE].TotalAllocated++);
- Node->Name = Name;
+ Node->Name.Integer = Name;
Node->ReferenceCount = 1;
ACPI_SET_DESCRIPTOR_TYPE (Node, ACPI_DESC_TYPE_NAMED);
@@ -309,7 +309,7 @@ AcpiNsInstallNode (
* We will fill in the actual type when the
* real definition is found later.
*/
- ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "[%4.4s] is a forward reference\n",
+ ACPI_DEBUG_PRINT ((ACPI_DB_NAMES, "[%4.4s] is a forward reference\n",
(char *) &Node->Name));
}
@@ -412,7 +412,7 @@ AcpiNsDeleteChildren (
ACPI_MEM_TRACKING (AcpiGbl_MemoryLists[ACPI_MEM_LIST_NSNODE].TotalFreed++);
- ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Object %p, Remaining %X\n",
+ ACPI_DEBUG_PRINT ((ACPI_DB_ALLOCATIONS, "Object %p, Remaining %X\n",
ChildNode, AcpiGbl_CurrentNodeCount));
/*
diff --git a/sys/contrib/dev/acpica/nsdump.c b/sys/contrib/dev/acpica/nsdump.c
index ee74fee..0f6e915 100644
--- a/sys/contrib/dev/acpica/nsdump.c
+++ b/sys/contrib/dev/acpica/nsdump.c
@@ -1,7 +1,7 @@
/******************************************************************************
*
* Module Name: nsdump - table dumping routines for debug
- * $Revision: 127 $
+ * $Revision: 129 $
*
*****************************************************************************/
@@ -146,7 +146,7 @@ AcpiNsPrintPathname (
UINT32 NumSegments,
char *Pathname)
{
- ACPI_FUNCTION_NAME ("AcpiNsPrintPathname");
+ ACPI_FUNCTION_NAME ("NsPrintPathname");
if (!(AcpiDbgLevel & ACPI_LV_NAMES) || !(AcpiDbgLayer & ACPI_NAMESPACE))
@@ -340,7 +340,7 @@ AcpiNsDumpOneObject (
Type = INTERNAL_TYPE_DEF_ANY; /* prints as *ERROR* */
}
- if (!AcpiUtValidAcpiName (ThisNode->Name))
+ if (!AcpiUtValidAcpiName (ThisNode->Name.Integer))
{
ACPI_REPORT_WARNING (("Invalid ACPI Name %08X\n", ThisNode->Name));
}
@@ -371,62 +371,95 @@ AcpiNsDumpOneObject (
switch (Type)
{
case ACPI_TYPE_PROCESSOR:
+
AcpiOsPrintf (" ID %d Addr %.4X Len %.4X\n",
ObjDesc->Processor.ProcId,
ObjDesc->Processor.Address,
ObjDesc->Processor.Length);
break;
+
case ACPI_TYPE_DEVICE:
+
AcpiOsPrintf (" Notification object: %p", ObjDesc);
break;
+
case ACPI_TYPE_METHOD:
+
AcpiOsPrintf (" Args %d Len %.4X Aml %p \n",
ObjDesc->Method.ParamCount,
ObjDesc->Method.AmlLength,
ObjDesc->Method.AmlStart);
break;
+
case ACPI_TYPE_INTEGER:
+
AcpiOsPrintf (" = %8.8X%8.8X\n",
ACPI_HIDWORD (ObjDesc->Integer.Value),
ACPI_LODWORD (ObjDesc->Integer.Value));
break;
+
case ACPI_TYPE_PACKAGE:
- AcpiOsPrintf (" Elements %.2X\n",
- ObjDesc->Package.Count);
+
+ if (ObjDesc->Common.Flags & AOPOBJ_DATA_VALID)
+ {
+ AcpiOsPrintf (" Elements %.2X\n",
+ ObjDesc->Package.Count);
+ }
+ else
+ {
+ AcpiOsPrintf (" [Length not yet evaluated]\n");
+ }
break;
- case ACPI_TYPE_BUFFER:
- AcpiOsPrintf (" Len %.2X",
- ObjDesc->Buffer.Length);
- /* Dump some of the buffer */
+ case ACPI_TYPE_BUFFER:
- if (ObjDesc->Buffer.Length > 0)
+ if (ObjDesc->Common.Flags & AOPOBJ_DATA_VALID)
{
- AcpiOsPrintf (" =");
- for (i = 0; (i < ObjDesc->Buffer.Length && i < 12); i++)
+ AcpiOsPrintf (" Len %.2X",
+ ObjDesc->Buffer.Length);
+
+ /* Dump some of the buffer */
+
+ if (ObjDesc->Buffer.Length > 0)
{
- AcpiOsPrintf (" %.2X", ObjDesc->Buffer.Pointer[i]);
+ AcpiOsPrintf (" =");
+ for (i = 0; (i < ObjDesc->Buffer.Length && i < 12); i++)
+ {
+ AcpiOsPrintf (" %.2X", ObjDesc->Buffer.Pointer[i]);
+ }
}
+ AcpiOsPrintf ("\n");
+ }
+ else
+ {
+ AcpiOsPrintf (" [Length not yet evaluated]\n");
}
- AcpiOsPrintf ("\n");
break;
+
case ACPI_TYPE_STRING:
+
AcpiOsPrintf (" Len %.2X", ObjDesc->String.Length);
if (ObjDesc->String.Length > 0)
{
- AcpiOsPrintf (" = \"%.32s\"...", ObjDesc->String.Pointer);
+ AcpiOsPrintf (" = \"%.32s\"", ObjDesc->String.Pointer);
+ if (ObjDesc->String.Length > 32)
+ {
+ AcpiOsPrintf ("...");
+ }
}
AcpiOsPrintf ("\n");
break;
+
case ACPI_TYPE_REGION:
+
AcpiOsPrintf (" [%s]", AcpiUtGetRegionName (ObjDesc->Region.SpaceId));
if (ObjDesc->Region.Flags & AOPOBJ_DATA_VALID)
{
@@ -437,16 +470,20 @@ AcpiNsDumpOneObject (
}
else
{
- AcpiOsPrintf (" [Address/Length not evaluated]\n");
+ AcpiOsPrintf (" [Address/Length not yet evaluated]\n");
}
break;
+
case INTERNAL_TYPE_REFERENCE:
+
AcpiOsPrintf (" [%s]\n",
AcpiPsGetOpcodeName (ObjDesc->Reference.Opcode));
break;
+
case ACPI_TYPE_BUFFER_FIELD:
+
if (ObjDesc->BufferField.BufferObj &&
ObjDesc->BufferField.BufferObj->Buffer.Node)
{
@@ -455,24 +492,32 @@ AcpiNsDumpOneObject (
}
break;
+
case INTERNAL_TYPE_REGION_FIELD:
+
AcpiOsPrintf (" Rgn [%4.4s]",
(char *) &ObjDesc->CommonField.RegionObj->Region.Node->Name);
break;
+
case INTERNAL_TYPE_BANK_FIELD:
+
AcpiOsPrintf (" Rgn [%4.4s] Bnk [%4.4s]",
(char *) &ObjDesc->CommonField.RegionObj->Region.Node->Name,
(char *) &ObjDesc->BankField.BankObj->CommonField.Node->Name);
break;
+
case INTERNAL_TYPE_INDEX_FIELD:
+
AcpiOsPrintf (" Idx [%4.4s] Dat [%4.4s]",
(char *) &ObjDesc->IndexField.IndexObj->CommonField.Node->Name,
(char *) &ObjDesc->IndexField.DataObj->CommonField.Node->Name);
break;
+
default:
+
AcpiOsPrintf (" Object %p\n", ObjDesc);
break;
}
diff --git a/sys/contrib/dev/acpica/nseval.c b/sys/contrib/dev/acpica/nseval.c
index 725b4f3..a584e77 100644
--- a/sys/contrib/dev/acpica/nseval.c
+++ b/sys/contrib/dev/acpica/nseval.c
@@ -2,7 +2,7 @@
*
* Module Name: nseval - Object evaluation interfaces -- includes control
* method lookup and execution.
- * $Revision: 109 $
+ * $Revision: 112 $
*
******************************************************************************/
@@ -211,7 +211,7 @@ AcpiNsEvaluateRelative (
if (ACPI_FAILURE (Status))
{
- ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Object [%s] not found [%s]\n",
+ ACPI_DEBUG_PRINT ((ACPI_DB_NAMES, "Object [%s] not found [%s]\n",
Pathname, AcpiFormatException (Status)));
goto Cleanup;
}
@@ -220,12 +220,12 @@ AcpiNsEvaluateRelative (
* Now that we have a handle to the object, we can attempt
* to evaluate it.
*/
- ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "%s [%p] Value %p\n",
+ ACPI_DEBUG_PRINT ((ACPI_DB_NAMES, "%s [%p] Value %p\n",
Pathname, Node, AcpiNsGetAttachedObject (Node)));
Status = AcpiNsEvaluateByHandle (Node, Params, ReturnObject);
- ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "*** Completed eval of object %s ***\n",
+ ACPI_DEBUG_PRINT ((ACPI_DB_NAMES, "*** Completed eval of object %s ***\n",
Pathname));
Cleanup:
@@ -293,7 +293,7 @@ AcpiNsEvaluateByName (
if (ACPI_FAILURE (Status))
{
- ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Object at [%s] was not found, status=%.4X\n",
+ ACPI_DEBUG_PRINT ((ACPI_DB_NAMES, "Object at [%s] was not found, status=%.4X\n",
Pathname, Status));
goto Cleanup;
}
@@ -302,12 +302,12 @@ AcpiNsEvaluateByName (
* Now that we have a handle to the object, we can attempt
* to evaluate it.
*/
- ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "%s [%p] Value %p\n",
+ ACPI_DEBUG_PRINT ((ACPI_DB_NAMES, "%s [%p] Value %p\n",
Pathname, Node, AcpiNsGetAttachedObject (Node)));
Status = AcpiNsEvaluateByHandle (Node, Params, ReturnObject);
- ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "*** Completed eval of object %s ***\n",
+ ACPI_DEBUG_PRINT ((ACPI_DB_NAMES, "*** Completed eval of object %s ***\n",
Pathname));
@@ -503,16 +503,11 @@ AcpiNsExecuteControlMethod (
return_ACPI_STATUS (AE_NULL_OBJECT);
}
-
- ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Control method at Offset %p Length %x]\n",
- ObjDesc->Method.AmlStart + 1, ObjDesc->Method.AmlLength - 1));
-
ACPI_DUMP_PATHNAME (MethodNode, "NsExecuteControlMethod: Executing",
- ACPI_LV_NAMES, _COMPONENT);
-
- ACPI_DEBUG_PRINT ((ACPI_DB_NAMES, "At offset %p\n",
- ObjDesc->Method.AmlStart + 1));
+ ACPI_LV_INFO, _COMPONENT);
+ ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Method at AML address %p Length %x\n",
+ ObjDesc->Method.AmlStart + 1, ObjDesc->Method.AmlLength - 1));
/*
* Unlock the namespace before execution. This allows namespace access
@@ -615,7 +610,7 @@ AcpiNsGetObjectValue (
{
Status = AE_CTRL_RETURN_VALUE;
*ReturnObjDesc = ObjDesc;
- ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Returning obj %p\n", *ReturnObjDesc));
+ ACPI_DEBUG_PRINT ((ACPI_DB_NAMES, "Returning obj %p\n", *ReturnObjDesc));
}
}
diff --git a/sys/contrib/dev/acpica/nsinit.c b/sys/contrib/dev/acpica/nsinit.c
index eeedf6e..b9a8d33 100644
--- a/sys/contrib/dev/acpica/nsinit.c
+++ b/sys/contrib/dev/acpica/nsinit.c
@@ -1,7 +1,7 @@
/******************************************************************************
*
* Module Name: nsinit - namespace initialization
- * $Revision: 41 $
+ * $Revision: 43 $
*
*****************************************************************************/
@@ -152,15 +152,11 @@ AcpiNsInitializeObjects (
ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH,
"**** Starting initialization of namespace objects ****\n"));
- ACPI_DEBUG_PRINT_RAW ((ACPI_DB_OK, "Completing Region and Field initialization:"));
+ ACPI_DEBUG_PRINT_RAW ((ACPI_DB_OK, "Completing Region/Field/Buffer/Package initialization:"));
+ /* Set all init info to zero */
- Info.FieldCount = 0;
- Info.FieldInit = 0;
- Info.OpRegionCount = 0;
- Info.OpRegionInit = 0;
- Info.ObjectCount = 0;
-
+ ACPI_MEMSET (&Info, 0, sizeof (ACPI_INIT_WALK_INFO));
/* Walk entire namespace from the supplied root */
@@ -173,9 +169,11 @@ AcpiNsInitializeObjects (
}
ACPI_DEBUG_PRINT_RAW ((ACPI_DB_OK,
- "\n%d/%d Regions, %d/%d Fields initialized (%d nodes total)\n",
- Info.OpRegionInit, Info.OpRegionCount, Info.FieldInit,
- Info.FieldCount, Info.ObjectCount));
+ "\n Initialized %d/%d Regions %d/%d Fields %d/%d Buffers %d/%d Packages (%d nodes)\n",
+ Info.OpRegionInit, Info.OpRegionCount,
+ Info.FieldInit, Info.FieldCount,
+ Info.BufferInit, Info.BufferCount,
+ Info.PackageInit, Info.PackageCount, Info.ObjectCount));
ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH,
"%d Control Methods found\n", Info.MethodCount));
ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH,
@@ -212,12 +210,15 @@ AcpiNsInitializeDevices (
ACPI_FUNCTION_TRACE ("NsInitializeDevices");
+ /* Init counters */
+
Info.DeviceCount = 0;
Info.Num_STA = 0;
Info.Num_INI = 0;
+ ACPI_DEBUG_PRINT_RAW ((ACPI_DB_OK, "Executing all Device _STA and_INI methods:"));
- ACPI_DEBUG_PRINT_RAW ((ACPI_DB_OK, "Executing device _INI methods:"));
+ /* Walk namespace for all objects of type Device */
Status = AcpiNsWalkNamespace (ACPI_TYPE_DEVICE, ACPI_ROOT_OBJECT,
ACPI_UINT32_MAX, FALSE, AcpiNsInitOneDevice, &Info, NULL);
@@ -227,9 +228,8 @@ AcpiNsInitializeDevices (
ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "WalkNamespace failed! %x\n", Status));
}
-
ACPI_DEBUG_PRINT_RAW ((ACPI_DB_OK,
- "\n%d Devices found: %d _STA, %d _INI\n",
+ "\n%d Devices found containing: %d _STA, %d _INI methods\n",
Info.DeviceCount, Info.Num_STA, Info.Num_INI));
return_ACPI_STATUS (Status);
@@ -275,7 +275,6 @@ AcpiNsInitOneObject (
Info->ObjectCount++;
-
/* And even then, we are only interested in a few object types */
Type = AcpiNsGetType (ObjHandle);
@@ -285,12 +284,39 @@ AcpiNsInitOneObject (
return (AE_OK);
}
- if ((Type != ACPI_TYPE_REGION) &&
- (Type != ACPI_TYPE_BUFFER_FIELD))
+ /* Increment counters for object types we are looking for */
+
+ switch (Type)
{
+ case ACPI_TYPE_REGION:
+ Info->OpRegionCount++;
+ break;
+
+ case ACPI_TYPE_BUFFER_FIELD:
+ Info->FieldCount++;
+ break;
+
+ case ACPI_TYPE_BUFFER:
+ Info->BufferCount++;
+ break;
+
+ case ACPI_TYPE_PACKAGE:
+ Info->PackageCount++;
+ break;
+
+ default:
+
+ /* No init required, just exit now */
return (AE_OK);
}
+ /*
+ * If the object is already initialized, nothing else to do
+ */
+ if (ObjDesc->Common.Flags & AOPOBJ_DATA_VALID)
+ {
+ return (AE_OK);
+ }
/*
* Must lock the interpreter before executing AML code
@@ -301,68 +327,56 @@ AcpiNsInitOneObject (
return (Status);
}
+ /*
+ * Each of these types can contain executable AML code within
+ * the declaration.
+ */
switch (Type)
{
-
case ACPI_TYPE_REGION:
- Info->OpRegionCount++;
- if (ObjDesc->Common.Flags & AOPOBJ_DATA_VALID)
- {
- break;
- }
-
Info->OpRegionInit++;
Status = AcpiDsGetRegionArguments (ObjDesc);
- if (ACPI_FAILURE (Status))
- {
- ACPI_DEBUG_PRINT_RAW ((ACPI_DB_ERROR, "\n"));
- ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
- "%s while getting region arguments [%4.4s]\n",
- AcpiFormatException (Status), (char *) &Node->Name));
- }
-
- if (!(AcpiDbgLevel & ACPI_LV_INIT))
- {
- ACPI_DEBUG_PRINT_RAW ((ACPI_DB_OK, "."));
- }
-
break;
case ACPI_TYPE_BUFFER_FIELD:
- Info->FieldCount++;
- if (ObjDesc->Common.Flags & AOPOBJ_DATA_VALID)
- {
- break;
- }
-
Info->FieldInit++;
Status = AcpiDsGetBufferFieldArguments (ObjDesc);
- if (ACPI_FAILURE (Status))
- {
- ACPI_DEBUG_PRINT_RAW ((ACPI_DB_ERROR, "\n"));
- ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
- "%s while getting buffer field arguments [%4.4s]\n",
- AcpiFormatException (Status), (char *) &Node->Name));
- }
- if (!(AcpiDbgLevel & ACPI_LV_INIT))
- {
- ACPI_DEBUG_PRINT_RAW ((ACPI_DB_OK, "."));
- }
+ break;
+
+ case ACPI_TYPE_BUFFER:
+ Info->BufferInit++;
+ Status = AcpiDsGetBufferArguments (ObjDesc);
break;
- default:
+
+ case ACPI_TYPE_PACKAGE:
+
+ Info->PackageInit++;
+ Status = AcpiDsGetPackageArguments (ObjDesc);
break;
}
+ if (ACPI_FAILURE (Status))
+ {
+ ACPI_DEBUG_PRINT_RAW ((ACPI_DB_ERROR, "\n"));
+ ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
+ "Could not execute arguments for [%4.4s] (%s), %s\n",
+ (char *) &Node->Name, AcpiUtGetTypeName (Type), AcpiFormatException (Status)));
+ }
+
+ if (!(AcpiDbgLevel & ACPI_LV_INIT))
+ {
+ ACPI_DEBUG_PRINT_RAW ((ACPI_DB_OK, "."));
+ }
/*
* We ignore errors from above, and always return OK, since
- * we don't want to abort the walk on a single error.
+ * we don't want to abort the walk on any single error.
*/
AcpiExExitInterpreter ();
return (AE_OK);
@@ -446,7 +460,6 @@ AcpiNsInitOneDevice (
return_ACPI_STATUS(AE_CTRL_DEPTH);
}
-
/*
* The device is present. Run _INI.
*/
diff --git a/sys/contrib/dev/acpica/nsobject.c b/sys/contrib/dev/acpica/nsobject.c
index 6ba1338..94ece02 100644
--- a/sys/contrib/dev/acpica/nsobject.c
+++ b/sys/contrib/dev/acpica/nsobject.c
@@ -2,7 +2,7 @@
*
* Module Name: nsobject - Utilities for objects attached to namespace
* table entries
- * $Revision: 78 $
+ * $Revision: 80 $
*
******************************************************************************/
@@ -328,7 +328,7 @@ AcpiNsDetachObject (
Node->Type = ACPI_TYPE_ANY;
- ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Node %p [%4.4s] Object %p\n",
+ ACPI_DEBUG_PRINT ((ACPI_DB_NAMES, "Node %p [%4.4s] Object %p\n",
Node, (char *) &Node->Name, ObjDesc));
/* Remove one reference on the object (and all subobjects) */
@@ -389,7 +389,7 @@ ACPI_OPERAND_OBJECT *
AcpiNsGetSecondaryObject (
ACPI_OPERAND_OBJECT *ObjDesc)
{
- ACPI_FUNCTION_TRACE_PTR ("AcpiNsGetSecondaryObject", ObjDesc);
+ ACPI_FUNCTION_TRACE_PTR ("NsGetSecondaryObject", ObjDesc);
if ((!ObjDesc) ||
diff --git a/sys/contrib/dev/acpica/nssearch.c b/sys/contrib/dev/acpica/nssearch.c
index fb01c78..52f59b5 100644
--- a/sys/contrib/dev/acpica/nssearch.c
+++ b/sys/contrib/dev/acpica/nssearch.c
@@ -1,7 +1,7 @@
/*******************************************************************************
*
* Module Name: nssearch - Namespace search
- * $Revision: 83 $
+ * $Revision: 84 $
*
******************************************************************************/
@@ -190,7 +190,7 @@ AcpiNsSearchNode (
{
/* Check for match against the name */
- if (NextNode->Name == TargetName)
+ if (NextNode->Name.Integer == TargetName)
{
/*
* Found matching entry. Capture the type if appropriate, before
@@ -245,8 +245,8 @@ AcpiNsSearchNode (
/* Searched entire table, not found */
- ACPI_DEBUG_PRINT ((ACPI_DB_NAMES, "Name %4.4s (type %X) not found at %p\n",
- (char *) &TargetName, Type, NextNode));
+ ACPI_DEBUG_PRINT ((ACPI_DB_NAMES, "Name %4.4s Type [%s] not found at %p\n",
+ (char *) &TargetName, AcpiUtGetTypeName (Type), NextNode));
return_ACPI_STATUS (AE_NOT_FOUND);
}
@@ -308,8 +308,8 @@ AcpiNsSearchParentTree (
if (AcpiNsLocal (Type))
{
- ACPI_DEBUG_PRINT ((ACPI_DB_NAMES, "[%4.4s] type %X is local(no search)\n",
- (char *) &TargetName, Type));
+ ACPI_DEBUG_PRINT ((ACPI_DB_NAMES, "[%4.4s] type [%s] must be local to this scope (no parent search)\n",
+ (char *) &TargetName, AcpiUtGetTypeName (Type)));
}
return_ACPI_STATUS (AE_NOT_FOUND);
diff --git a/sys/contrib/dev/acpica/nsutils.c b/sys/contrib/dev/acpica/nsutils.c
index f2966f9..5385470 100644
--- a/sys/contrib/dev/acpica/nsutils.c
+++ b/sys/contrib/dev/acpica/nsutils.c
@@ -2,7 +2,7 @@
*
* Module Name: nsutils - Utilities for accessing ACPI namespace, accessing
* parents and siblings and Scope manipulation
- * $Revision: 104 $
+ * $Revision: 105 $
*
*****************************************************************************/
@@ -358,7 +358,6 @@ AcpiNsBuildInternalName (
Result = &InternalName[3];
}
}
-
else
{
/*
@@ -391,7 +390,6 @@ AcpiNsBuildInternalName (
}
}
-
/* Build the name (minus path separators) */
for (; NumSegments; NumSegments--)
@@ -435,12 +433,12 @@ AcpiNsBuildInternalName (
if (Info->FullyQualified)
{
ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "returning [%p] (abs) \"\\%s\"\n",
- InternalName, &InternalName[0]));
+ InternalName, InternalName));
}
else
{
ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "returning [%p] (rel) \"%s\"\n",
- InternalName, &InternalName[2]));
+ InternalName, InternalName));
}
return_ACPI_STATUS (AE_OK);
@@ -968,9 +966,9 @@ AcpiNsFindParentName (
ChildNode, (char *) &ChildNode->Name,
ParentNode, (char *) &ParentNode->Name));
- if (ParentNode->Name)
+ if (ParentNode->Name.Integer)
{
- return_VALUE (ParentNode->Name);
+ return_VALUE (ParentNode->Name.Integer);
}
}
@@ -1010,7 +1008,7 @@ AcpiNsExistDownstreamSibling (
return (FALSE);
}
- if (Node->Name)
+ if (Node->Name.Integer)
{
return (TRUE);
}
diff --git a/sys/contrib/dev/acpica/nsxfname.c b/sys/contrib/dev/acpica/nsxfname.c
index c6555a1..0071e11 100644
--- a/sys/contrib/dev/acpica/nsxfname.c
+++ b/sys/contrib/dev/acpica/nsxfname.c
@@ -2,7 +2,7 @@
*
* Module Name: nsxfname - Public interfaces to the ACPI subsystem
* ACPI Namespace oriented interfaces
- * $Revision: 89 $
+ * $Revision: 90 $
*
*****************************************************************************/
@@ -351,8 +351,8 @@ AcpiGetObjectInfo (
return (AE_BAD_PARAMETER);
}
- Info->Type = Node->Type;
- Info->Name = Node->Name;
+ Info->Type = Node->Type;
+ Info->Name = Node->Name.Integer;
Status = AcpiUtReleaseMutex (ACPI_MTX_NAMESPACE);
if (ACPI_FAILURE (Status))
diff --git a/sys/contrib/dev/acpica/psopcode.c b/sys/contrib/dev/acpica/psopcode.c
index 459c661..068ad9a 100644
--- a/sys/contrib/dev/acpica/psopcode.c
+++ b/sys/contrib/dev/acpica/psopcode.c
@@ -1,7 +1,7 @@
/******************************************************************************
*
* Module Name: psopcode - Parser/Interpreter opcode information table
- * $Revision: 64 $
+ * $Revision: 66 $
*
*****************************************************************************/
@@ -310,7 +310,7 @@
#define ARGI_BIT_XOR_OP ARGI_LIST3 (ARGI_INTEGER, ARGI_INTEGER, ARGI_TARGETREF)
#define ARGI_BREAK_OP ARG_NONE
#define ARGI_BREAK_POINT_OP ARG_NONE
-#define ARGI_BUFFER_OP ARGI_INVALID_OPCODE
+#define ARGI_BUFFER_OP ARGI_LIST1 (ARGI_INTEGER)
#define ARGI_BYTE_OP ARGI_INVALID_OPCODE
#define ARGI_BYTELIST_OP ARGI_INVALID_OPCODE
#define ARGI_CONCAT_OP ARGI_LIST3 (ARGI_COMPUTEDATA,ARGI_COMPUTEDATA, ARGI_TARGETREF)
@@ -375,7 +375,7 @@
#define ARGI_NOTIFY_OP ARGI_LIST2 (ARGI_DEVICE_REF, ARGI_INTEGER)
#define ARGI_ONE_OP ARG_NONE
#define ARGI_ONES_OP ARG_NONE
-#define ARGI_PACKAGE_OP ARGI_INVALID_OPCODE
+#define ARGI_PACKAGE_OP ARGI_LIST1 (ARGI_INTEGER)
#define ARGI_POWER_RES_OP ARGI_INVALID_OPCODE
#define ARGI_PROCESSOR_OP ARGI_INVALID_OPCODE
#define ARGI_QWORD_OP ARGI_INVALID_OPCODE
@@ -406,7 +406,7 @@
#define ARGI_TO_STRING_OP ARGI_LIST3 (ARGI_BUFFER, ARGI_INTEGER, ARGI_FIXED_TARGET)
#define ARGI_TYPE_OP ARGI_LIST1 (ARGI_ANYTYPE)
#define ARGI_UNLOAD_OP ARGI_LIST1 (ARGI_DDBHANDLE)
-#define ARGI_VAR_PACKAGE_OP ARGI_INVALID_OPCODE
+#define ARGI_VAR_PACKAGE_OP ARGI_LIST1 (ARGI_INTEGER)
#define ARGI_WAIT_OP ARGI_LIST2 (ARGI_EVENT, ARGI_INTEGER)
#define ARGI_WHILE_OP ARGI_INVALID_OPCODE
#define ARGI_WORD_OP ARGI_INVALID_OPCODE
@@ -513,6 +513,7 @@
AML_CREATE_DWORD_FIELD_OP
AML_CREATE_QWORD_FIELD_OP
AML_REGION_OP
+ AML_BUFFER_OP
Field opcodes
@@ -552,8 +553,8 @@ static const ACPI_OPCODE_INFO AcpiGbl_AmlOpInfo[] =
/* 06 */ ACPI_OP ("DwordConst", ARGP_DWORD_OP, ARGI_DWORD_OP, ACPI_TYPE_INTEGER, AML_CLASS_ARGUMENT, AML_TYPE_LITERAL, 0),
/* 07 */ ACPI_OP ("String", ARGP_STRING_OP, ARGI_STRING_OP, ACPI_TYPE_STRING, AML_CLASS_ARGUMENT, AML_TYPE_LITERAL, 0),
/* 08 */ ACPI_OP ("Scope", ARGP_SCOPE_OP, ARGI_SCOPE_OP, INTERNAL_TYPE_SCOPE, AML_CLASS_NAMED_OBJECT, AML_TYPE_NAMED_NO_OBJ, AML_HAS_ARGS | AML_NSOBJECT | AML_NSOPCODE | AML_NSNODE | AML_NAMED),
-/* 09 */ ACPI_OP ("Buffer", ARGP_BUFFER_OP, ARGI_BUFFER_OP, ACPI_TYPE_BUFFER, AML_CLASS_ARGUMENT, AML_TYPE_DATA_TERM, AML_HAS_ARGS),
-/* 0A */ ACPI_OP ("Package", ARGP_PACKAGE_OP, ARGI_PACKAGE_OP, ACPI_TYPE_PACKAGE, AML_CLASS_ARGUMENT, AML_TYPE_DATA_TERM, AML_HAS_ARGS),
+/* 09 */ ACPI_OP ("Buffer", ARGP_BUFFER_OP, ARGI_BUFFER_OP, ACPI_TYPE_BUFFER, AML_CLASS_CREATE, AML_TYPE_CREATE_OBJECT, AML_HAS_ARGS | AML_DEFER),
+/* 0A */ ACPI_OP ("Package", ARGP_PACKAGE_OP, ARGI_PACKAGE_OP, ACPI_TYPE_PACKAGE, AML_CLASS_CREATE, AML_TYPE_CREATE_OBJECT, AML_HAS_ARGS | AML_DEFER),
/* 0B */ ACPI_OP ("Method", ARGP_METHOD_OP, ARGI_METHOD_OP, ACPI_TYPE_METHOD, AML_CLASS_NAMED_OBJECT, AML_TYPE_NAMED_COMPLEX, AML_HAS_ARGS | AML_NSOBJECT | AML_NSOPCODE | AML_NSNODE | AML_NAMED | AML_DEFER),
/* 0C */ ACPI_OP ("Local0", ARGP_LOCAL0, ARGI_LOCAL0, INTERNAL_TYPE_REFERENCE, AML_CLASS_ARGUMENT, AML_TYPE_LOCAL_VARIABLE, 0),
/* 0D */ ACPI_OP ("Local1", ARGP_LOCAL1, ARGI_LOCAL1, INTERNAL_TYPE_REFERENCE, AML_CLASS_ARGUMENT, AML_TYPE_LOCAL_VARIABLE, 0),
@@ -664,7 +665,7 @@ static const ACPI_OPCODE_INFO AcpiGbl_AmlOpInfo[] =
/* ACPI 2.0 opcodes */
/* 6E */ ACPI_OP ("QwordConst", ARGP_QWORD_OP, ARGI_QWORD_OP, ACPI_TYPE_INTEGER, AML_CLASS_ARGUMENT, AML_TYPE_LITERAL, 0),
-/* 6F */ ACPI_OP ("Package /*Var*/", ARGP_VAR_PACKAGE_OP, ARGI_VAR_PACKAGE_OP, ACPI_TYPE_PACKAGE, AML_CLASS_ARGUMENT, AML_TYPE_DATA_TERM, AML_HAS_ARGS | AML_DEFER),
+/* 6F */ ACPI_OP ("Package /*Var*/", ARGP_VAR_PACKAGE_OP, ARGI_VAR_PACKAGE_OP, ACPI_TYPE_PACKAGE, AML_CLASS_CREATE, AML_TYPE_CREATE_OBJECT, AML_HAS_ARGS | AML_DEFER),
/* 70 */ ACPI_OP ("ConcatenateResTemplate", ARGP_CONCAT_RES_OP, ARGI_CONCAT_RES_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_2A_1T_1R, AML_FLAGS_EXEC_2A_1T_1R),
/* 71 */ ACPI_OP ("Mod", ARGP_MOD_OP, ARGI_MOD_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_2A_1T_1R, AML_FLAGS_EXEC_2A_1T_1R),
/* 72 */ ACPI_OP ("CreateQWordField", ARGP_CREATE_QWORD_FIELD_OP,ARGI_CREATE_QWORD_FIELD_OP, ACPI_TYPE_BUFFER_FIELD, AML_CLASS_CREATE, AML_TYPE_CREATE_FIELD, AML_HAS_ARGS | AML_NSOBJECT | AML_NSNODE | AML_DEFER | AML_CREATE),
@@ -678,6 +679,7 @@ static const ACPI_OPCODE_INFO AcpiGbl_AmlOpInfo[] =
/* 7A */ ACPI_OP ("Continue", ARGP_CONTINUE_OP, ARGI_CONTINUE_OP, ACPI_TYPE_ANY, AML_CLASS_CONTROL, AML_TYPE_CONTROL, 0),
/* 7B */ ACPI_OP ("LoadTable", ARGP_LOAD_TABLE_OP, ARGI_LOAD_TABLE_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_6A_0T_1R, AML_FLAGS_EXEC_6A_0T_1R),
/* 7C */ ACPI_OP ("DataTableRegion", ARGP_DATA_REGION_OP, ARGI_DATA_REGION_OP, ACPI_TYPE_REGION, AML_CLASS_NAMED_OBJECT, AML_TYPE_NAMED_SIMPLE, AML_HAS_ARGS | AML_NSOBJECT | AML_NSOPCODE | AML_NSNODE | AML_NAMED),
+/* 7D */ ACPI_OP ("[EvalSubTree]", ARGP_SCOPE_OP, ARGI_SCOPE_OP, INTERNAL_TYPE_SCOPE, AML_CLASS_NAMED_OBJECT, AML_TYPE_NAMED_NO_OBJ, AML_HAS_ARGS | AML_NSOBJECT | AML_NSOPCODE | AML_NSNODE)
/*! [End] no source code translation !*/
};
@@ -697,7 +699,7 @@ static const UINT8 AcpiGbl_ShortOpIndex[256] =
/* 0x18 */ _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK,
/* 0x20 */ _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK,
/* 0x28 */ _UNK, _UNK, _UNK, _UNK, _UNK, 0x63, _PFX, _PFX,
-/* 0x30 */ 0x67, 0x66, 0x68, 0x65, 0x69, 0x64, 0x6A, _UNK,
+/* 0x30 */ 0x67, 0x66, 0x68, 0x65, 0x69, 0x64, 0x6A, 0x7D,
/* 0x38 */ _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK,
/* 0x40 */ _UNK, _ASC, _ASC, _ASC, _ASC, _ASC, _ASC, _ASC,
/* 0x48 */ _ASC, _ASC, _ASC, _ASC, _ASC, _ASC, _ASC, _ASC,
diff --git a/sys/contrib/dev/acpica/psparse.c b/sys/contrib/dev/acpica/psparse.c
index c2507b5..2693db5 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: 119 $
+ * $Revision: 121 $
*
*****************************************************************************/
@@ -319,7 +319,7 @@ AcpiPsCompleteThisOp (
/*
* These opcodes contain TermArg operands. The current
- * op must be replace by a placeholder return op
+ * op must be replaced by a placeholder return op
*/
ReplacementOp = AcpiPsAllocOp (AML_INT_RETURN_VALUE_OP);
if (!ReplacementOp)
@@ -332,10 +332,13 @@ AcpiPsCompleteThisOp (
/*
* These opcodes contain TermArg operands. The current
- * op must be replace by a placeholder return op
+ * op must be replaced by a placeholder return op
*/
- if ((Op->Parent->Opcode == AML_REGION_OP) ||
- (Op->Parent->Opcode == AML_DATA_REGION_OP))
+ if ((Op->Parent->Opcode == AML_REGION_OP) ||
+ (Op->Parent->Opcode == AML_DATA_REGION_OP) ||
+ (Op->Parent->Opcode == AML_BUFFER_OP) ||
+ (Op->Parent->Opcode == AML_PACKAGE_OP) ||
+ (Op->Parent->Opcode == AML_VAR_PACKAGE_OP))
{
ReplacementOp = AcpiPsAllocOp (AML_INT_RETURN_VALUE_OP);
if (!ReplacementOp)
@@ -343,6 +346,27 @@ AcpiPsCompleteThisOp (
return_VALUE (FALSE);
}
}
+
+ if ((Op->Parent->Opcode == AML_NAME_OP) &&
+ (WalkState->DescendingCallback != AcpiDsExecBeginOp))
+
+ {
+ if ((Op->Opcode == AML_BUFFER_OP) ||
+ (Op->Opcode == AML_PACKAGE_OP) ||
+ (Op->Opcode == AML_VAR_PACKAGE_OP))
+ {
+ ReplacementOp = AcpiPsAllocOp (Op->Opcode);
+ if (!ReplacementOp)
+ {
+ return_VALUE (FALSE);
+ }
+
+ ((ACPI_PARSE2_OBJECT *) ReplacementOp)->Data =
+ ((ACPI_PARSE2_OBJECT *) Op)->Data;
+ ((ACPI_PARSE2_OBJECT *) ReplacementOp)->Length =
+ ((ACPI_PARSE2_OBJECT *) Op)->Length;
+ }
+ }
break;
default:
@@ -364,6 +388,7 @@ AcpiPsCompleteThisOp (
{
ReplacementOp->Parent = Op->Parent;
ReplacementOp->Value.Arg = NULL;
+ ReplacementOp->Node = Op->Node;
Op->Parent->Value.Arg = ReplacementOp;
ReplacementOp->Next = Op->Next;
}
@@ -384,10 +409,11 @@ AcpiPsCompleteThisOp (
{
if (ReplacementOp)
{
- ReplacementOp->Parent = Op->Parent;
+ ReplacementOp->Parent = Op->Parent;
ReplacementOp->Value.Arg = NULL;
- Prev->Next = ReplacementOp;
- ReplacementOp->Next = Op->Next;
+ ReplacementOp->Node = Op->Node;
+ Prev->Next = ReplacementOp;
+ ReplacementOp->Next = Op->Next;
Next = NULL;
}
else
@@ -422,9 +448,10 @@ AcpiPsCompleteThisOp (
*
* PARAMETERS: ParserState - Current parser state object
*
- * RETURN:
+ * RETURN: Status
*
- * DESCRIPTION:
+ * DESCRIPTION: Update the parser state based upon the return exception from
+ * the parser callback.
*
******************************************************************************/
@@ -553,7 +580,7 @@ AcpiPsParseLoop (
ACPI_PARSE_OBJECT *Arg = NULL;
ACPI_PARSE_OBJECT PreOp;
ACPI_PARSE_STATE *ParserState;
- UINT8 *AmlOpStart;
+ UINT8 *AmlOpStart = NULL;
ACPI_FUNCTION_TRACE_PTR ("PsParseLoop", WalkState);
@@ -580,7 +607,6 @@ AcpiPsParseLoop (
(WalkState->ControlState->Common.State ==
ACPI_CONTROL_PREDICATE_EXECUTING))
{
-
/*
* A predicate was just completed, get the value of the
* predicate and branch based on that value
@@ -608,7 +634,6 @@ AcpiPsParseLoop (
AcpiPsPopScope (ParserState, &Op, &WalkState->ArgTypes, &WalkState->ArgCount);
ACPI_DEBUG_PRINT ((ACPI_DB_PARSE, "Popped scope, Op=%p\n", Op));
}
-
else if (WalkState->PrevOp)
{
/* We were in the middle of an op */
@@ -656,8 +681,8 @@ AcpiPsParseLoop (
/* The opcode is unrecognized. Just skip unknown opcodes */
ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
- "Found unknown opcode %X at AML offset %X, ignoring\n",
- WalkState->Opcode, WalkState->AmlOffset));
+ "Found unknown opcode %X at AML address %p offset %X, ignoring\n",
+ WalkState->Opcode, ParserState->Aml, WalkState->AmlOffset));
ACPI_DUMP_BUFFER (ParserState->Aml, 128);
@@ -673,10 +698,8 @@ AcpiPsParseLoop (
ParserState->Aml += AcpiPsGetOpcodeSize (WalkState->Opcode);
WalkState->ArgTypes = WalkState->OpInfo->ParseArgs;
break;
-
}
-
/* Create Op structure and append to parent's argument list */
if (WalkState->OpInfo->Flags & AML_NAMED)
@@ -693,7 +716,6 @@ AcpiPsParseLoop (
INCREMENT_ARG_LIST (WalkState->ArgTypes);
}
-
/* We know that this arg is a name, move to next arg */
INCREMENT_ARG_LIST (WalkState->ArgTypes);
@@ -753,7 +775,6 @@ AcpiPsParseLoop (
((ACPI_PARSE2_OBJECT * ) Op)->Length = 0;
}
}
-
else
{
/* Not a named opcode, just allocate Op and append to parent */
@@ -817,7 +838,7 @@ AcpiPsParseLoop (
if (WalkState->ArgTypes) /* Are there any arguments that must be processed? */
{
- /* get arguments */
+ /* Get arguments */
switch (Op->Opcode)
{
@@ -827,7 +848,7 @@ AcpiPsParseLoop (
case AML_QWORD_OP: /* AML_QWORDATA_ARG */
case AML_STRING_OP: /* AML_ASCIICHARLIST_ARG */
- /* fill in constant or string argument directly */
+ /* Fill in constant or string argument directly */
AcpiPsGetNextSimpleArg (ParserState,
GET_CURRENT_ARG_TYPE (WalkState->ArgTypes), Op);
@@ -859,10 +880,12 @@ AcpiPsParseLoop (
INCREMENT_ARG_LIST (WalkState->ArgTypes);
}
- /* For a method, save the length and address of the body */
-
- if (Op->Opcode == AML_METHOD_OP)
+ switch (Op->Opcode)
{
+ case AML_METHOD_OP:
+
+ /* For a method, save the length and address of the body */
+
/*
* Skip parsing of control method or opregion body,
* because we don't have enough info in the first pass
@@ -871,7 +894,6 @@ AcpiPsParseLoop (
((ACPI_PARSE2_OBJECT * ) Op)->Data = ParserState->Aml;
((ACPI_PARSE2_OBJECT * ) Op)->Length = (UINT32) (ParserState->PkgEnd -
ParserState->Aml);
-
/*
* Skip body of method. For OpRegions, we must continue
* parsing because the opregion is not a standalone
@@ -879,19 +901,44 @@ AcpiPsParseLoop (
*/
ParserState->Aml = ParserState->PkgEnd;
WalkState->ArgCount = 0;
- }
- else if (Op->Opcode == AML_WHILE_OP)
- {
+ break;
+
+ case AML_BUFFER_OP:
+ case AML_PACKAGE_OP:
+ case AML_VAR_PACKAGE_OP:
+
+ if ((Op->Parent) &&
+ (Op->Parent->Opcode == AML_NAME_OP) &&
+ (WalkState->DescendingCallback != AcpiDsExecBeginOp))
+ {
+ /*
+ * Skip parsing of
+ * because we don't have enough info in the first pass
+ * to parse them correctly.
+ */
+ ((ACPI_PARSE2_OBJECT * ) Op)->Data = AmlOpStart;
+ ((ACPI_PARSE2_OBJECT * ) Op)->Length = (UINT32) (ParserState->PkgEnd -
+ AmlOpStart);
+ /*
+ * Skip body
+ */
+ ParserState->Aml = ParserState->PkgEnd;
+ WalkState->ArgCount = 0;
+ }
+ break;
+
+ case AML_WHILE_OP:
+
if (WalkState->ControlState)
{
WalkState->ControlState->Control.PackageEnd = ParserState->PkgEnd;
}
+ break;
}
break;
}
}
-
/* Check for arguments that need to be processed */
if (WalkState->ArgCount)
@@ -903,7 +950,6 @@ AcpiPsParseLoop (
continue;
}
-
/* All arguments have been processed -- Op is complete, prepare for next */
WalkState->OpInfo = AcpiPsGetOpcodeInfo (Op->Opcode);
diff --git a/sys/contrib/dev/acpica/psutils.c b/sys/contrib/dev/acpica/psutils.c
index 51ae639..e15cfa0 100644
--- a/sys/contrib/dev/acpica/psutils.c
+++ b/sys/contrib/dev/acpica/psutils.c
@@ -1,7 +1,7 @@
/******************************************************************************
*
* Module Name: psutils - Parser miscellaneous utilities (Parser only)
- * $Revision: 49 $
+ * $Revision: 50 $
*
*****************************************************************************/
@@ -189,26 +189,22 @@ AcpiPsAllocOp (
Size = sizeof (ACPI_PARSE2_OBJECT);
Flags = ACPI_PARSEOP_DEFERRED;
}
-
else if (OpInfo->Flags & AML_NAMED)
{
Size = sizeof (ACPI_PARSE2_OBJECT);
Flags = ACPI_PARSEOP_NAMED;
}
-
else if (Opcode == AML_INT_BYTELIST_OP)
{
Size = sizeof (ACPI_PARSE2_OBJECT);
Flags = ACPI_PARSEOP_BYTELIST;
}
-
else
{
Size = sizeof (ACPI_PARSE_OBJECT);
Flags = ACPI_PARSEOP_GENERIC;
}
-
if (Size == sizeof (ACPI_PARSE_OBJECT))
{
/*
@@ -216,7 +212,6 @@ AcpiPsAllocOp (
*/
Op = AcpiUtAcquireFromCache (ACPI_MEM_LIST_PSNODE);
}
-
else
{
Op = AcpiUtAcquireFromCache (ACPI_MEM_LIST_PSNODE_EXT);
@@ -256,14 +251,13 @@ AcpiPsFreeOp (
if (Op->Opcode == AML_INT_RETURN_VALUE_OP)
{
- ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Free retval op: %p\n", Op));
+ ACPI_DEBUG_PRINT ((ACPI_DB_ALLOCATIONS, "Free retval op: %p\n", Op));
}
if (Op->Flags == ACPI_PARSEOP_GENERIC)
{
AcpiUtReleaseToCache (ACPI_MEM_LIST_PSNODE, Op);
}
-
else
{
AcpiUtReleaseToCache (ACPI_MEM_LIST_PSNODE_EXT, Op);
diff --git a/sys/contrib/dev/acpica/psxface.c b/sys/contrib/dev/acpica/psxface.c
index 06d46d6..48a8168 100644
--- a/sys/contrib/dev/acpica/psxface.c
+++ b/sys/contrib/dev/acpica/psxface.c
@@ -1,7 +1,7 @@
/******************************************************************************
*
* Module Name: psxface - Parser external interfaces
- * $Revision: 59 $
+ * $Revision: 61 $
*
*****************************************************************************/
@@ -199,7 +199,7 @@ AcpiPsxExecute (
* 1) Perform the first pass parse of the method to enter any
* named objects that it creates into the namespace
*/
- ACPI_DEBUG_PRINT ((ACPI_DB_INFO,
+ ACPI_DEBUG_PRINT ((ACPI_DB_PARSE,
"**** Begin Method Parse **** Entry=%p obj=%p\n",
MethodNode, ObjDesc));
@@ -244,7 +244,7 @@ AcpiPsxExecute (
/*
* 2) Execute the method. Performs second pass parse simultaneously
*/
- ACPI_DEBUG_PRINT ((ACPI_DB_INFO,
+ ACPI_DEBUG_PRINT ((ACPI_DB_PARSE,
"**** Begin Method Execution **** Entry=%p obj=%p\n",
MethodNode, ObjDesc));
@@ -258,7 +258,7 @@ AcpiPsxExecute (
/* Init new op with the method name and pointer back to the NS node */
- AcpiPsSetName (Op, MethodNode->Name);
+ AcpiPsSetName (Op, MethodNode->Name.Integer);
Op->Node = MethodNode;
/* Create and initialize a new walk state */
@@ -300,7 +300,7 @@ AcpiPsxExecute (
*/
if (*ReturnObjDesc)
{
- ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Method returned ObjDesc=%p\n",
+ ACPI_DEBUG_PRINT ((ACPI_DB_PARSE, "Method returned ObjDesc=%p\n",
*ReturnObjDesc));
ACPI_DUMP_STACK_ENTRY (*ReturnObjDesc);
diff --git a/sys/contrib/dev/acpica/tbget.c b/sys/contrib/dev/acpica/tbget.c
index af12874..606dd23 100644
--- a/sys/contrib/dev/acpica/tbget.c
+++ b/sys/contrib/dev/acpica/tbget.c
@@ -1,7 +1,7 @@
/******************************************************************************
*
* Module Name: tbget - ACPI Table get* routines
- * $Revision: 63 $
+ * $Revision: 67 $
*
*****************************************************************************/
@@ -222,8 +222,7 @@ AcpiTbGetTablePtr (
ACPI_STATUS
AcpiTbGetTable (
- ACPI_PHYSICAL_ADDRESS PhysicalAddress,
- ACPI_TABLE_HEADER *BufferPtr,
+ ACPI_POINTER *Address,
ACPI_TABLE_DESC *TableInfo)
{
ACPI_TABLE_HEADER *TableHeader = NULL;
@@ -236,24 +235,19 @@ AcpiTbGetTable (
ACPI_FUNCTION_TRACE ("TbGetTable");
- if (!TableInfo)
+ if (!TableInfo || !Address)
{
return_ACPI_STATUS (AE_BAD_PARAMETER);
}
- if (BufferPtr)
+ switch (Address->PointerType)
{
+ case ACPI_LOGICAL_POINTER:
+
/*
* Getting data from a buffer, not BIOS tables
*/
- TableHeader = BufferPtr;
- Status = AcpiTbValidateTableHeader (TableHeader);
- if (ACPI_FAILURE (Status))
- {
- /* Table failed verification, map all errors to BAD_DATA */
-
- return_ACPI_STATUS (AE_BAD_DATA);
- }
+ TableHeader = Address->Pointer.Logical;
/* Allocate buffer for the entire table */
@@ -266,22 +260,23 @@ AcpiTbGetTable (
/* Copy the entire table (including header) to the local buffer */
Size = TableHeader->Length;
- ACPI_MEMCPY (FullTable, BufferPtr, Size);
+ ACPI_MEMCPY (FullTable, TableHeader, Size);
/* Save allocation type */
Allocation = ACPI_MEM_ALLOCATED;
- }
+ break;
- /*
- * Not reading from a buffer, just map the table's physical memory
- * into our address space.
- */
- else
- {
+
+ case ACPI_PHYSICAL_POINTER:
+
+ /*
+ * Not reading from a buffer, just map the table's physical memory
+ * into our address space.
+ */
Size = SIZE_IN_HEADER;
- Status = AcpiTbMapAcpiTable (PhysicalAddress, &Size, &FullTable);
+ Status = AcpiTbMapAcpiTable (Address->Pointer.Physical, &Size, &FullTable);
if (ACPI_FAILURE (Status))
{
return_ACPI_STATUS (Status);
@@ -290,6 +285,11 @@ AcpiTbGetTable (
/* Save allocation type */
Allocation = ACPI_MEM_MAPPED;
+ break;
+
+
+ default:
+ return_ACPI_STATUS (AE_BAD_PARAMETER);
}
/* Return values */
@@ -299,6 +299,12 @@ AcpiTbGetTable (
TableInfo->Allocation = Allocation;
TableInfo->BasePointer = FullTable;
+ ACPI_DEBUG_PRINT ((ACPI_DB_INFO,
+ "Found table [%4.4s] at %8.8X%8.8X, mapped/copied to %p\n",
+ FullTable->Signature,
+ ACPI_HIDWORD (Address->Pointer.Physical),
+ ACPI_LODWORD (Address->Pointer.Physical), FullTable));
+
return_ACPI_STATUS (Status);
}
@@ -312,9 +318,15 @@ AcpiTbGetTable (
*
* RETURN: Status
*
- * DESCRIPTION: Load and validate all tables other than the RSDT. The RSDT must
+ * DESCRIPTION: Load and validate tables other than the RSDT. The RSDT must
* already be loaded and validated.
*
+ * Get the minimum set of ACPI tables, namely:
+ *
+ * 1) FADT (via RSDT in loop below)
+ * 2) FACS (via FADT)
+ * 3) DSDT (via FADT)
+ *
******************************************************************************/
ACPI_STATUS
@@ -325,6 +337,7 @@ AcpiTbGetAllTables (
ACPI_STATUS Status = AE_OK;
UINT32 Index;
ACPI_TABLE_DESC TableInfo;
+ ACPI_POINTER Address;
ACPI_FUNCTION_TRACE ("TbGetAllTables");
@@ -335,7 +348,9 @@ AcpiTbGetAllTables (
/*
* Loop through all table pointers found in RSDT.
* This will NOT include the FACS and DSDT - we must get
- * them after the loop
+ * them after the loop.
+ *
+ * The ONLY table we are interested in getting here is the FADT.
*/
for (Index = 0; Index < NumberOfTables; Index++)
{
@@ -345,19 +360,10 @@ AcpiTbGetAllTables (
/* Get the table via the XSDT */
- Status = AcpiTbGetTable ((ACPI_PHYSICAL_ADDRESS)
- ACPI_GET_ADDRESS (AcpiGbl_XSDT->TableOffsetEntry[Index]),
- TablePtr, &TableInfo);
-
- /* Ignore a table that failed verification */
-
- if (Status == AE_BAD_DATA)
- {
- continue;
- }
-
- /* However, abort on serious errors */
+ Address.PointerType = AcpiGbl_TableFlags;
+ Address.Pointer.Value = ACPI_GET_ADDRESS (AcpiGbl_XSDT->TableOffsetEntry[Index]);
+ Status = AcpiTbGetTable (&Address, &TableInfo);
if (ACPI_FAILURE (Status))
{
return_ACPI_STATUS (Status);
@@ -374,6 +380,7 @@ AcpiTbGetAllTables (
* determine if there are enough tables to continue.
*/
AcpiTbUninstallTable (&TableInfo);
+ Status = AE_OK;
}
}
@@ -384,25 +391,21 @@ AcpiTbGetAllTables (
Status = AcpiTbConvertTableFadt ();
if (ACPI_FAILURE (Status))
{
+ ACPI_REPORT_ERROR (("Could not convert FADT to internal common format\n"));
return_ACPI_STATUS (Status);
}
/*
- * Get the minimum set of ACPI tables, namely:
- *
- * 1) FADT (via RSDT in loop above)
- * 2) FACS
- * 3) DSDT
- *
- */
-
- /*
* Get the FACS (must have the FADT first, from loop above)
* AcpiTbGetTableFacs will fail if FADT pointer is not valid
*/
- Status = AcpiTbGetTableFacs (TablePtr, &TableInfo);
+ Address.PointerType = AcpiGbl_TableFlags;
+ Address.Pointer.Value = ACPI_GET_ADDRESS (AcpiGbl_FADT->XFirmwareCtrl);
+
+ Status = AcpiTbGetTable (&Address, &TableInfo);
if (ACPI_FAILURE (Status))
{
+ ACPI_REPORT_ERROR (("Could not get the FACS\n"));
return_ACPI_STATUS (Status);
}
@@ -411,6 +414,7 @@ AcpiTbGetAllTables (
Status = AcpiTbInstallTable (TablePtr, &TableInfo);
if (ACPI_FAILURE (Status))
{
+ ACPI_REPORT_ERROR (("Could not install the FACS\n"));
return_ACPI_STATUS (Status);
}
@@ -421,16 +425,20 @@ AcpiTbGetAllTables (
Status = AcpiTbBuildCommonFacs (&TableInfo);
if (ACPI_FAILURE (Status))
{
+ ACPI_REPORT_ERROR (("Could not convert FACS to common internal format\n"));
return_ACPI_STATUS (Status);
}
/*
* Get the DSDT (We know that the FADT is valid now)
*/
- Status = AcpiTbGetTable ((ACPI_PHYSICAL_ADDRESS) ACPI_GET_ADDRESS (AcpiGbl_FADT->XDsdt),
- TablePtr, &TableInfo);
+ Address.PointerType = AcpiGbl_TableFlags;
+ Address.Pointer.Value = ACPI_GET_ADDRESS (AcpiGbl_FADT->XDsdt);
+
+ Status = AcpiTbGetTable (&Address, &TableInfo);
if (ACPI_FAILURE (Status))
{
+ ACPI_REPORT_ERROR (("Could not get the DSDT\n"));
return_ACPI_STATUS (Status);
}
@@ -439,20 +447,16 @@ AcpiTbGetAllTables (
Status = AcpiTbInstallTable (TablePtr, &TableInfo);
if (ACPI_FAILURE (Status))
{
+ ACPI_REPORT_ERROR (("Could not install the DSDT\n"));
return_ACPI_STATUS (Status);
}
- /* Dump the DSDT Header */
-
- ACPI_DEBUG_PRINT ((ACPI_DB_TABLES, "Hex dump of DSDT Header:\n"));
- ACPI_DUMP_BUFFER ((UINT8 *) AcpiGbl_DSDT, sizeof (ACPI_TABLE_HEADER));
-
/* Dump the entire DSDT */
ACPI_DEBUG_PRINT ((ACPI_DB_TABLES,
- "Hex dump of DSDT (After header), size %d (%x)\n",
+ "Hex dump of entire DSDT, size %d (0x%X)\n",
AcpiGbl_DSDT->Length, AcpiGbl_DSDT->Length));
- ACPI_DUMP_BUFFER ((UINT8 *) (AcpiGbl_DSDT + 1), AcpiGbl_DSDT->Length);
+ ACPI_DUMP_BUFFER ((UINT8 *) AcpiGbl_DSDT, AcpiGbl_DSDT->Length);
/* Always delete the RSDP mapping, we are done with it */
@@ -475,7 +479,7 @@ AcpiTbGetAllTables (
ACPI_STATUS
AcpiTbVerifyRsdp (
- ACPI_PHYSICAL_ADDRESS RsdpPhysicalAddress)
+ ACPI_POINTER *Address)
{
ACPI_TABLE_DESC TableInfo;
ACPI_STATUS Status;
@@ -485,14 +489,27 @@ AcpiTbVerifyRsdp (
ACPI_FUNCTION_TRACE ("TbVerifyRsdp");
- /*
- * Obtain access to the RSDP structure
- */
- Status = AcpiOsMapMemory (RsdpPhysicalAddress, sizeof (RSDP_DESCRIPTOR),
- (void **) &Rsdp);
- if (ACPI_FAILURE (Status))
+ switch (Address->PointerType)
{
- return_ACPI_STATUS (Status);
+ case ACPI_LOGICAL_POINTER:
+
+ Rsdp = Address->Pointer.Logical;
+ break;
+
+ case ACPI_PHYSICAL_POINTER:
+ /*
+ * Obtain access to the RSDP structure
+ */
+ Status = AcpiOsMapMemory (Address->Pointer.Physical, sizeof (RSDP_DESCRIPTOR),
+ (void **) &Rsdp);
+ if (ACPI_FAILURE (Status))
+ {
+ return_ACPI_STATUS (Status);
+ }
+ break;
+
+ default:
+ return_ACPI_STATUS (AE_BAD_PARAMETER);
}
/*
@@ -525,7 +542,6 @@ AcpiTbVerifyRsdp (
}
}
-
/* The RSDP supplied is OK */
TableInfo.Pointer = (ACPI_TABLE_HEADER *) Rsdp;
@@ -550,7 +566,10 @@ AcpiTbVerifyRsdp (
/* Error exit */
Cleanup:
- AcpiOsUnmapMemory (Rsdp, sizeof (RSDP_DESCRIPTOR));
+ if (AcpiGbl_TableFlags & ACPI_PHYSICAL_POINTER)
+ {
+ AcpiOsUnmapMemory (Rsdp, sizeof (RSDP_DESCRIPTOR));
+ }
return_ACPI_STATUS (Status);
}
@@ -568,30 +587,28 @@ Cleanup:
*
******************************************************************************/
-ACPI_PHYSICAL_ADDRESS
-AcpiTbGetRsdtAddress (void)
+void
+AcpiTbGetRsdtAddress (
+ ACPI_POINTER *OutAddress)
{
- ACPI_PHYSICAL_ADDRESS PhysicalAddress;
-
ACPI_FUNCTION_ENTRY ();
+ OutAddress->PointerType = AcpiGbl_TableFlags;
+
/*
* For RSDP revision 0 or 1, we use the RSDT.
* For RSDP revision 2 (and above), we use the XSDT
*/
if (AcpiGbl_RSDP->Revision < 2)
{
- PhysicalAddress = (ACPI_PHYSICAL_ADDRESS) AcpiGbl_RSDP->RsdtPhysicalAddress;
+ OutAddress->Pointer.Value = AcpiGbl_RSDP->RsdtPhysicalAddress;
}
else
{
- PhysicalAddress = (ACPI_PHYSICAL_ADDRESS)
- ACPI_GET_ADDRESS (AcpiGbl_RSDP->XsdtPhysicalAddress);
+ OutAddress->Pointer.Value = ACPI_GET_ADDRESS (AcpiGbl_RSDP->XsdtPhysicalAddress);
}
-
- return (PhysicalAddress);
}
@@ -667,27 +684,55 @@ AcpiTbValidateRsdt (
ACPI_STATUS
AcpiTbGetTablePointer (
- ACPI_PHYSICAL_ADDRESS PhysicalAddress,
+ ACPI_POINTER *Address,
UINT32 Flags,
UINT32 *Size,
ACPI_TABLE_HEADER **TablePtr)
{
- ACPI_STATUS Status;
+ ACPI_STATUS Status = AE_OK;
ACPI_FUNCTION_ENTRY ();
+ /*
+ * What mode is the processor in? (Virtual or Physical addressing)
+ */
if ((Flags & ACPI_MEMORY_MODE) == ACPI_LOGICAL_ADDRESSING)
{
- *Size = SIZE_IN_HEADER;
- Status = AcpiTbMapAcpiTable (PhysicalAddress, Size, TablePtr);
+ /* Incoming pointer can be either logical or physical */
+
+ switch (Address->PointerType)
+ {
+ case ACPI_PHYSICAL_POINTER:
+
+ *Size = SIZE_IN_HEADER;
+ Status = AcpiTbMapAcpiTable (Address->Pointer.Physical, Size, TablePtr);
+ break;
+
+ case ACPI_LOGICAL_POINTER:
+
+ *TablePtr = Address->Pointer.Logical;
+ *Size = 0;
+ break;
+ }
}
else
{
- *Size = 0;
- *TablePtr = ACPI_PHYSADDR_TO_PTR (PhysicalAddress);
- Status = AE_OK;
+ /* In Physical addressing mode, all pointers must be physical */
+
+ switch (Address->PointerType)
+ {
+ case ACPI_PHYSICAL_POINTER:
+ *Size = 0;
+ *TablePtr = Address->Pointer.Logical;
+ break;
+
+ case ACPI_LOGICAL_POINTER:
+
+ Status = AE_BAD_PARAMETER;
+ break;
+ }
}
return (Status);
@@ -712,7 +757,7 @@ AcpiTbGetTableRsdt (
{
ACPI_TABLE_DESC TableInfo;
ACPI_STATUS Status;
- ACPI_PHYSICAL_ADDRESS PhysicalAddress;
+ ACPI_POINTER Address;
ACPI_FUNCTION_TRACE ("TbGetTableRsdt");
@@ -727,11 +772,11 @@ AcpiTbGetTableRsdt (
ACPI_HIDWORD (AcpiGbl_RSDP->RsdtPhysicalAddress),
ACPI_LODWORD (AcpiGbl_RSDP->RsdtPhysicalAddress)));
- PhysicalAddress = AcpiTbGetRsdtAddress ();
/* Get the RSDT/XSDT */
- Status = AcpiTbGetTable (PhysicalAddress, NULL, &TableInfo);
+ AcpiTbGetRsdtAddress (&Address);
+ Status = AcpiTbGetTable (&Address, &TableInfo);
if (ACPI_FAILURE (Status))
{
ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Could not get the RSDT, %s\n",
@@ -776,86 +821,3 @@ AcpiTbGetTableRsdt (
}
-/******************************************************************************
- *
- * FUNCTION: AcpiTbGetTableFacs
- *
- * PARAMETERS: *BufferPtr - If BufferPtr is valid, read data from
- * buffer rather than searching memory
- * *TableInfo - Where the table info is returned
- *
- * RETURN: Status
- *
- * DESCRIPTION: Returns a pointer to the FACS as defined in FADT. This
- * function assumes the global variable FADT has been
- * correctly initialized. The value of FADT->FirmwareCtrl
- * into a far pointer which is returned.
- *
- *****************************************************************************/
-
-ACPI_STATUS
-AcpiTbGetTableFacs (
- ACPI_TABLE_HEADER *BufferPtr,
- ACPI_TABLE_DESC *TableInfo)
-{
- ACPI_TABLE_HEADER *TablePtr = NULL;
- UINT32 Size;
- UINT8 Allocation;
- ACPI_STATUS Status = AE_OK;
-
-
- ACPI_FUNCTION_TRACE ("TbGetTableFacs");
-
-
- /* Must have a valid FADT pointer */
-
- if (!AcpiGbl_FADT)
- {
- return_ACPI_STATUS (AE_NO_ACPI_TABLES);
- }
-
- Size = sizeof (FACS_DESCRIPTOR);
- if (BufferPtr)
- {
- /*
- * Getting table from a file -- allocate a buffer and
- * read the table.
- */
- TablePtr = ACPI_MEM_ALLOCATE (Size);
- if(!TablePtr)
- {
- return_ACPI_STATUS (AE_NO_MEMORY);
- }
-
- ACPI_MEMCPY (TablePtr, BufferPtr, Size);
-
- /* Save allocation type */
-
- Allocation = ACPI_MEM_ALLOCATED;
- }
- else
- {
- /* Just map the physical memory to our address space */
-
- Status = AcpiTbMapAcpiTable ((ACPI_PHYSICAL_ADDRESS) ACPI_GET_ADDRESS (AcpiGbl_FADT->XFirmwareCtrl),
- &Size, &TablePtr);
- if (ACPI_FAILURE (Status))
- {
- return_ACPI_STATUS (Status);
- }
-
- /* Save allocation type */
-
- Allocation = ACPI_MEM_MAPPED;
- }
-
- /* Return values */
-
- TableInfo->Pointer = TablePtr;
- TableInfo->Length = Size;
- TableInfo->Allocation = Allocation;
- TableInfo->BasePointer = TablePtr;
-
- return_ACPI_STATUS (Status);
-}
-
diff --git a/sys/contrib/dev/acpica/tbinstal.c b/sys/contrib/dev/acpica/tbinstal.c
index 7198a0c..819c6ce 100644
--- a/sys/contrib/dev/acpica/tbinstal.c
+++ b/sys/contrib/dev/acpica/tbinstal.c
@@ -1,7 +1,7 @@
/******************************************************************************
*
* Module Name: tbinstal - ACPI table installation and removal
- * $Revision: 55 $
+ * $Revision: 57 $
*
*****************************************************************************/
@@ -276,31 +276,39 @@ AcpiTbRecognizeTable (
* We only "recognize" a limited number of ACPI tables -- namely, the
* ones that are used by the subsystem (DSDT, FADT, etc.)
*
- * An AE_NOT_FOUND means that the table was not recognized.
+ * An AE_TABLE_NOT_SUPPORTED means that the table was not recognized.
* This can be any one of many valid ACPI tables, it just isn't one of
* the tables that is consumed by the core subsystem
*/
Status = AcpiTbMatchSignature (TableHeader->Signature, TableInfo);
- if (ACPI_SUCCESS (Status))
+ if (ACPI_FAILURE (Status))
+ {
+ return_ACPI_STATUS (Status);
+ }
+
+ Status = AcpiTbValidateTableHeader (TableHeader);
+ if (ACPI_FAILURE (Status))
{
- /* Return the table type and length via the info struct */
+ return_ACPI_STATUS (Status);
+ }
- TableInfo->Length = TableHeader->Length;
+ /* Return the table type and length via the info struct */
- /*
- * Validate checksum for _most_ tables,
- * even the ones whose signature we don't recognize
- */
- if (TableInfo->Type != ACPI_TABLE_FACS)
+ TableInfo->Length = TableHeader->Length;
+
+ /*
+ * Validate checksum for _most_ tables,
+ * even the ones whose signature we don't recognize
+ */
+ if (TableInfo->Type != ACPI_TABLE_FACS)
+ {
+ Status = AcpiTbVerifyTableChecksum (TableHeader);
+ if (ACPI_FAILURE (Status) &&
+ (!ACPI_CHECKSUM_ABORT))
{
- Status = AcpiTbVerifyTableChecksum (TableHeader);
- if (ACPI_FAILURE (Status) &&
- (!ACPI_CHECKSUM_ABORT))
- {
- /* Ignore the error if configuration says so */
+ /* Ignore the error if configuration says so */
- Status = AE_OK;
- }
+ Status = AE_OK;
}
}
@@ -484,10 +492,6 @@ AcpiTbDeleteAcpiTable (
return;
}
- /* Free the table */
-
- AcpiTbFreeAcpiTablesOfType (&AcpiGbl_AcpiTables[Type]);
-
/* Clear the appropriate "typed" global table pointer */
switch (Type)
@@ -518,6 +522,10 @@ AcpiTbDeleteAcpiTable (
break;
}
+ /* Free the table */
+
+ AcpiTbFreeAcpiTablesOfType (&AcpiGbl_AcpiTables[Type]);
+
(void) AcpiUtReleaseMutex (ACPI_MTX_TABLES);
return_VOID;
}
diff --git a/sys/contrib/dev/acpica/tbutils.c b/sys/contrib/dev/acpica/tbutils.c
index 3c1f1cb..4b66ac9 100644
--- a/sys/contrib/dev/acpica/tbutils.c
+++ b/sys/contrib/dev/acpica/tbutils.c
@@ -1,7 +1,7 @@
/******************************************************************************
*
* Module Name: tbutils - Table manipulation utilities
- * $Revision: 49 $
+ * $Revision: 51 $
*
*****************************************************************************/
@@ -166,7 +166,6 @@ AcpiTbHandleToObject (
} while (ListHead != &AcpiGbl_AcpiTables[i]);
}
-
ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "TableId=%X does not exist\n", TableId));
return (AE_BAD_PARAMETER);
}
@@ -211,7 +210,6 @@ AcpiTbValidateTableHeader (
return (AE_BAD_ADDRESS);
}
-
/* Ensure that the signature is 4 ASCII characters */
ACPI_MOVE_UNALIGNED32_TO_32 (&Signature, &TableHeader->Signature);
@@ -221,12 +219,11 @@ AcpiTbValidateTableHeader (
"Table signature at %p [%p] has invalid characters\n",
TableHeader, &Signature));
- ACPI_REPORT_WARNING (("Invalid table signature %4.4s found\n", (char *) &Signature));
+ ACPI_REPORT_WARNING (("Invalid table signature found: [%4.4s]\n", (char *) &Signature));
ACPI_DUMP_BUFFER (TableHeader, sizeof (ACPI_TABLE_HEADER));
return (AE_BAD_SIGNATURE);
}
-
/* Validate the table length */
if (TableHeader->Length < sizeof (ACPI_TABLE_HEADER))
@@ -309,10 +306,10 @@ AcpiTbMapAcpiTable (
}
}
-
/* Map the physical memory for the correct length */
- Status = AcpiOsMapMemory (PhysicalAddress, TableSize, (void **) &Table);
+ Status = AcpiOsMapMemory (PhysicalAddress, TableSize,
+ (void **) &Table);
if (ACPI_FAILURE (Status))
{
return (Status);
@@ -324,7 +321,6 @@ AcpiTbMapAcpiTable (
*Size = TableSize;
*LogicalAddress = Table;
-
return (Status);
}
@@ -366,8 +362,6 @@ AcpiTbVerifyTableChecksum (
Status = AE_BAD_CHECKSUM;
}
-
-
return_ACPI_STATUS (Status);
}
@@ -406,7 +400,6 @@ AcpiTbChecksum (
sum = (UINT8) (sum + *rover);
}
}
-
return (sum);
}
diff --git a/sys/contrib/dev/acpica/tbxface.c b/sys/contrib/dev/acpica/tbxface.c
index 7ff0f63..1162ff8 100644
--- a/sys/contrib/dev/acpica/tbxface.c
+++ b/sys/contrib/dev/acpica/tbxface.c
@@ -2,7 +2,7 @@
*
* Module Name: tbxface - Public interfaces to the ACPI subsystem
* ACPI table oriented interfaces
- * $Revision: 51 $
+ * $Revision: 52 $
*
*****************************************************************************/
@@ -143,7 +143,7 @@
ACPI_STATUS
AcpiLoadTables (void)
{
- ACPI_PHYSICAL_ADDRESS RsdpPhysicalAddress;
+ ACPI_POINTER RsdpAddress;
ACPI_STATUS Status;
UINT32 NumberOfTables = 0;
@@ -154,7 +154,7 @@ AcpiLoadTables (void)
/* Get the RSDP */
Status = AcpiOsGetRootPointer (ACPI_LOGICAL_ADDRESSING,
- &RsdpPhysicalAddress);
+ &RsdpAddress);
if (ACPI_FAILURE (Status))
{
ACPI_REPORT_ERROR (("AcpiLoadTables: Could not get RSDP, %s\n",
@@ -164,7 +164,9 @@ AcpiLoadTables (void)
/* Map and validate the RSDP */
- Status = AcpiTbVerifyRsdp (RsdpPhysicalAddress);
+ AcpiGbl_TableFlags = RsdpAddress.PointerType;
+
+ Status = AcpiTbVerifyRsdp (&RsdpAddress);
if (ACPI_FAILURE (Status))
{
ACPI_REPORT_ERROR (("AcpiLoadTables: RSDP Failed validation: %s\n",
@@ -238,6 +240,7 @@ AcpiLoadTable (
{
ACPI_STATUS Status;
ACPI_TABLE_DESC TableInfo;
+ ACPI_POINTER Address;
ACPI_FUNCTION_TRACE ("AcpiLoadTable");
@@ -250,7 +253,10 @@ AcpiLoadTable (
/* Copy the table to a local buffer */
- Status = AcpiTbGetTable (0, TablePtr, &TableInfo);
+ Address.PointerType = ACPI_LOGICAL_POINTER;
+ Address.Pointer.Logical = TablePtr;
+
+ Status = AcpiTbGetTable (&Address, &TableInfo);
if (ACPI_FAILURE (Status))
{
return_ACPI_STATUS (Status);
diff --git a/sys/contrib/dev/acpica/tbxfroot.c b/sys/contrib/dev/acpica/tbxfroot.c
index 8a2e147..0017ddc 100644
--- a/sys/contrib/dev/acpica/tbxfroot.c
+++ b/sys/contrib/dev/acpica/tbxfroot.c
@@ -1,7 +1,7 @@
/******************************************************************************
*
* Module Name: tbxfroot - Find the root ACPI table (RSDT)
- * $Revision: 58 $
+ * $Revision: 61 $
*
*****************************************************************************/
@@ -213,7 +213,8 @@ AcpiGetFirmwareTable (
UINT32 Flags,
ACPI_TABLE_HEADER **TablePointer)
{
- ACPI_PHYSICAL_ADDRESS PhysicalAddress;
+ ACPI_POINTER RsdpAddress;
+ ACPI_POINTER Address;
ACPI_TABLE_HEADER *RsdtPtr = NULL;
ACPI_TABLE_HEADER *TablePtr;
ACPI_STATUS Status;
@@ -246,7 +247,7 @@ AcpiGetFirmwareTable (
{
/* Get the RSDP */
- Status = AcpiOsGetRootPointer (Flags, &PhysicalAddress);
+ Status = AcpiOsGetRootPointer (Flags, &RsdpAddress);
if (ACPI_FAILURE (Status))
{
ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "RSDP not found\n"));
@@ -257,7 +258,7 @@ AcpiGetFirmwareTable (
if ((Flags & ACPI_MEMORY_MODE) == ACPI_LOGICAL_ADDRESSING)
{
- Status = AcpiOsMapMemory (PhysicalAddress, sizeof (RSDP_DESCRIPTOR),
+ Status = AcpiOsMapMemory (RsdpAddress.Pointer.Physical, sizeof (RSDP_DESCRIPTOR),
(void **) &AcpiGbl_RSDP);
if (ACPI_FAILURE (Status))
{
@@ -266,7 +267,7 @@ AcpiGetFirmwareTable (
}
else
{
- AcpiGbl_RSDP = ACPI_PHYSADDR_TO_PTR (PhysicalAddress);
+ AcpiGbl_RSDP = RsdpAddress.Pointer.Logical;
}
/*
@@ -297,8 +298,9 @@ AcpiGetFirmwareTable (
/* Get the RSDT and validate it */
- PhysicalAddress = AcpiTbGetRsdtAddress ();
- Status = AcpiTbGetTablePointer (PhysicalAddress, Flags, &RsdtSize, &RsdtPtr);
+ AcpiTbGetRsdtAddress (&Address);
+
+ Status = AcpiTbGetTablePointer (&Address, Flags, &RsdtSize, &RsdtPtr);
if (ACPI_FAILURE (Status))
{
return_ACPI_STATUS (Status);
@@ -323,20 +325,20 @@ AcpiGetFirmwareTable (
{
/* Get the next table pointer */
+ Address.PointerType = AcpiGbl_TableFlags;
if (AcpiGbl_RSDP->Revision < 2)
{
- PhysicalAddress = (ACPI_PHYSICAL_ADDRESS)
- ((RSDT_DESCRIPTOR *) RsdtPtr)->TableOffsetEntry[i];
+ Address.Pointer.Value = ((RSDT_DESCRIPTOR *) RsdtPtr)->TableOffsetEntry[i];
}
else
{
- PhysicalAddress = (ACPI_PHYSICAL_ADDRESS)
- ACPI_GET_ADDRESS (((XSDT_DESCRIPTOR *) RsdtPtr)->TableOffsetEntry[i]);
+ Address.Pointer.Value = ACPI_GET_ADDRESS (
+ ((XSDT_DESCRIPTOR *) RsdtPtr)->TableOffsetEntry[i]);
}
/* Get addressibility if necessary */
- Status = AcpiTbGetTablePointer (PhysicalAddress, Flags, &TableSize, &TablePtr);
+ Status = AcpiTbGetTablePointer (&Address, Flags, &TableSize, &TablePtr);
if (ACPI_FAILURE (Status))
{
goto Cleanup;
@@ -389,8 +391,8 @@ Cleanup:
*
* FUNCTION: AcpiFindRootPointer
*
- * PARAMETERS: **RsdpPhysicalAddress - Where to place the RSDP address
- * Flags - Logical/Physical addressing
+ * PARAMETERS: **RsdpAddress - Where to place the RSDP address
+ * Flags - Logical/Physical addressing
*
* RETURN: Status, Physical address of the RSDP
*
@@ -401,7 +403,7 @@ Cleanup:
ACPI_STATUS
AcpiFindRootPointer (
UINT32 Flags,
- ACPI_PHYSICAL_ADDRESS *RsdpPhysicalAddress)
+ ACPI_POINTER *RsdpAddress)
{
ACPI_TABLE_DESC TableInfo;
ACPI_STATUS Status;
@@ -419,7 +421,8 @@ AcpiFindRootPointer (
return_ACPI_STATUS (AE_NO_ACPI_TABLES);
}
- *RsdpPhysicalAddress = TableInfo.PhysicalAddress;
+ RsdpAddress->PointerType = ACPI_PHYSICAL_POINTER;
+ RsdpAddress->Pointer.Physical = TableInfo.PhysicalAddress;
return_ACPI_STATUS (AE_OK);
}
diff --git a/sys/contrib/dev/acpica/utcopy.c b/sys/contrib/dev/acpica/utcopy.c
index 4587b10..e215f67 100644
--- a/sys/contrib/dev/acpica/utcopy.c
+++ b/sys/contrib/dev/acpica/utcopy.c
@@ -1,7 +1,7 @@
/******************************************************************************
*
* Module Name: utcopy - Internal to external object translation utilities
- * $Revision: 94 $
+ * $Revision: 95 $
*
*****************************************************************************/
@@ -761,6 +761,9 @@ AcpiUtCopySimpleObject (
case ACPI_TYPE_BUFFER:
DestDesc->Buffer.Node = NULL;
+ DestDesc->Common.Flags = SourceDesc->Common.Flags;
+
+ /* Fall through to common string/buffer case */
case ACPI_TYPE_STRING:
@@ -857,6 +860,7 @@ AcpiUtCopyIelementToIelement (
}
TargetObject->Package.Count = SourceObject->Package.Count;
+ TargetObject->Common.Flags = SourceObject->Common.Flags;
/*
* Pass the new package object back to the package walk routine
@@ -905,6 +909,7 @@ AcpiUtCopyIpackageToIpackage (
DestObj->Common.Type = SourceObj->Common.Type;
+ DestObj->Common.Flags = SourceObj->Common.Flags;
DestObj->Package.Count = SourceObj->Package.Count;
@@ -920,10 +925,6 @@ AcpiUtCopyIpackageToIpackage (
return_ACPI_STATUS (AE_NO_MEMORY);
}
- /* Init */
-
- DestObj->Package.NextElement = DestObj->Package.Elements;
-
/*
* Copy the package element-by-element by walking the package "tree".
* This handles nested packages of arbitrary depth.
diff --git a/sys/contrib/dev/acpica/utdebug.c b/sys/contrib/dev/acpica/utdebug.c
index bf2116d..76dcd25 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: 96 $
+ * $Revision: 97 $
*
*****************************************************************************/
@@ -610,6 +610,12 @@ AcpiUtDumpBuffer (
return;
}
+ if ((Count < 4) || (Count & 0x01))
+ {
+ Display = DB_BYTE_DISPLAY;
+ }
+
+ AcpiOsPrintf ("\nOffset Value\n");
/*
* Nasty little dump buffer routine!
diff --git a/sys/contrib/dev/acpica/utdelete.c b/sys/contrib/dev/acpica/utdelete.c
index 478bc78..3eb0dcb 100644
--- a/sys/contrib/dev/acpica/utdelete.c
+++ b/sys/contrib/dev/acpica/utdelete.c
@@ -1,7 +1,7 @@
/*******************************************************************************
*
* Module Name: utdelete - object deletion and reference count utilities
- * $Revision: 87 $
+ * $Revision: 88 $
*
******************************************************************************/
@@ -162,10 +162,9 @@ AcpiUtDeleteInternalObj (
*/
switch (Object->Common.Type)
{
-
case ACPI_TYPE_STRING:
- ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "**** String %p, ptr %p\n",
+ ACPI_DEBUG_PRINT ((ACPI_DB_ALLOCATIONS, "**** String %p, ptr %p\n",
Object, Object->String.Pointer));
/* Free the actual string buffer */
@@ -179,7 +178,7 @@ AcpiUtDeleteInternalObj (
case ACPI_TYPE_BUFFER:
- ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "**** Buffer %p, ptr %p\n",
+ ACPI_DEBUG_PRINT ((ACPI_DB_ALLOCATIONS, "**** Buffer %p, ptr %p\n",
Object, Object->Buffer.Pointer));
/* Free the actual buffer */
@@ -190,7 +189,7 @@ AcpiUtDeleteInternalObj (
case ACPI_TYPE_PACKAGE:
- ACPI_DEBUG_PRINT ((ACPI_DB_INFO, " **** Package of count %X\n",
+ ACPI_DEBUG_PRINT ((ACPI_DB_ALLOCATIONS, " **** Package of count %X\n",
Object->Package.Count));
/*
@@ -206,7 +205,7 @@ AcpiUtDeleteInternalObj (
case ACPI_TYPE_MUTEX:
- ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "***** Mutex %p, Semaphore %p\n",
+ ACPI_DEBUG_PRINT ((ACPI_DB_ALLOCATIONS, "***** Mutex %p, Semaphore %p\n",
Object, Object->Mutex.Semaphore));
AcpiExUnlinkMutex (Object);
@@ -216,7 +215,7 @@ AcpiUtDeleteInternalObj (
case ACPI_TYPE_EVENT:
- ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "***** Event %p, Semaphore %p\n",
+ ACPI_DEBUG_PRINT ((ACPI_DB_ALLOCATIONS, "***** Event %p, Semaphore %p\n",
Object, Object->Event.Semaphore));
AcpiOsDeleteSemaphore (Object->Event.Semaphore);
@@ -226,7 +225,7 @@ AcpiUtDeleteInternalObj (
case ACPI_TYPE_METHOD:
- ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "***** Method %p\n", Object));
+ ACPI_DEBUG_PRINT ((ACPI_DB_ALLOCATIONS, "***** Method %p\n", Object));
/* Delete the method semaphore if it exists */
@@ -240,7 +239,7 @@ AcpiUtDeleteInternalObj (
case ACPI_TYPE_REGION:
- ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "***** Region %p\n", Object));
+ ACPI_DEBUG_PRINT ((ACPI_DB_ALLOCATIONS, "***** Region %p\n", Object));
SecondDesc = AcpiNsGetSecondaryObject (Object);
if (SecondDesc)
@@ -266,7 +265,7 @@ AcpiUtDeleteInternalObj (
case ACPI_TYPE_BUFFER_FIELD:
- ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "***** Buffer Field %p\n", Object));
+ ACPI_DEBUG_PRINT ((ACPI_DB_ALLOCATIONS, "***** Buffer Field %p\n", Object));
SecondDesc = AcpiNsGetSecondaryObject (Object);
if (SecondDesc)
@@ -285,14 +284,14 @@ AcpiUtDeleteInternalObj (
if (ObjPointer)
{
- ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Deleting Object Subptr %p\n",
+ ACPI_DEBUG_PRINT ((ACPI_DB_ALLOCATIONS, "Deleting Object Subptr %p\n",
ObjPointer));
ACPI_MEM_FREE (ObjPointer);
}
/* Now the object can be safely deleted */
- ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Deleting Object %p [%s]\n",
+ ACPI_DEBUG_PRINT ((ACPI_DB_ALLOCATIONS, "Deleting Object %p [%s]\n",
Object, AcpiUtGetTypeName (Object->Common.Type)));
AcpiUtDeleteObjectDesc (Object);
@@ -333,7 +332,6 @@ AcpiUtDeleteInternalObjectList (
/* Free the combined parameter pointer list and object array */
ACPI_MEM_FREE (ObjList);
-
return_ACPI_STATUS (AE_OK);
}
@@ -362,12 +360,12 @@ AcpiUtUpdateRefCount (
ACPI_FUNCTION_NAME ("UtUpdateRefCount");
+
if (!Object)
{
return;
}
-
Count = Object->Common.ReferenceCount;
NewCount = Count;
@@ -382,7 +380,7 @@ AcpiUtUpdateRefCount (
NewCount++;
Object->Common.ReferenceCount = NewCount;
- ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Obj %p Refs=%X, [Incremented]\n",
+ ACPI_DEBUG_PRINT ((ACPI_DB_ALLOCATIONS, "Obj %p Refs=%X, [Incremented]\n",
Object, NewCount));
break;
@@ -391,23 +389,22 @@ AcpiUtUpdateRefCount (
if (Count < 1)
{
- ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Obj %p Refs=%X, can't decrement! (Set to 0)\n",
+ ACPI_DEBUG_PRINT ((ACPI_DB_ALLOCATIONS, "Obj %p Refs=%X, can't decrement! (Set to 0)\n",
Object, NewCount));
NewCount = 0;
}
-
else
{
NewCount--;
- ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Obj %p Refs=%X, [Decremented]\n",
+ ACPI_DEBUG_PRINT ((ACPI_DB_ALLOCATIONS, "Obj %p Refs=%X, [Decremented]\n",
Object, NewCount));
}
if (Object->Common.Type == ACPI_TYPE_METHOD)
{
- ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Method Obj %p Refs=%X, [Decremented]\n",
+ ACPI_DEBUG_PRINT ((ACPI_DB_ALLOCATIONS, "Method Obj %p Refs=%X, [Decremented]\n",
Object, NewCount));
}
@@ -422,7 +419,7 @@ AcpiUtUpdateRefCount (
case REF_FORCE_DELETE:
- ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Obj %p Refs=%X, Force delete! (Set to 0)\n",
+ ACPI_DEBUG_PRINT ((ACPI_DB_ALLOCATIONS, "Obj %p Refs=%X, Force delete! (Set to 0)\n",
Object, Count));
NewCount = 0;
@@ -437,7 +434,6 @@ AcpiUtUpdateRefCount (
break;
}
-
/*
* Sanity check the reference count, for debug purposes only.
* (A deleted object will have a huge reference count)
@@ -504,7 +500,7 @@ AcpiUtUpdateObjectReference (
*/
if (ACPI_GET_DESCRIPTOR_TYPE (Object) == ACPI_DESC_TYPE_NAMED)
{
- ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Object %p is NS handle\n", Object));
+ ACPI_DEBUG_PRINT ((ACPI_DB_ALLOCATIONS, "Object %p is NS handle\n", Object));
return_ACPI_STATUS (AE_OK);
}
@@ -689,7 +685,6 @@ AcpiUtAddReference (
* We have a valid ACPI internal object, now increment the reference count
*/
AcpiUtUpdateObjectReference (Object, REF_INCREMENT);
-
return_VOID;
}
@@ -733,7 +728,7 @@ AcpiUtRemoveReference (
return_VOID;
}
- ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Obj %p Refs=%X\n",
+ ACPI_DEBUG_PRINT ((ACPI_DB_ALLOCATIONS, "Obj %p Refs=%X\n",
Object, Object->Common.ReferenceCount));
/*
diff --git a/sys/contrib/dev/acpica/uteval.c b/sys/contrib/dev/acpica/uteval.c
index 51c9284..55560dde 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: 37 $
+ * $Revision: 38 $
*
*****************************************************************************/
@@ -162,7 +162,7 @@ AcpiUtEvaluateNumericObject (
{
if (Status == AE_NOT_FOUND)
{
- ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "%s on %4.4s was not found\n",
+ ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "%s on %4.4s was not found\n",
ObjectName, (char *) &DeviceNode->Name));
}
else
@@ -247,7 +247,7 @@ AcpiUtExecute_HID (
{
if (Status == AE_NOT_FOUND)
{
- ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "_HID on %4.4s was not found\n",
+ ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "_HID on %4.4s was not found\n",
(char *) &DeviceNode->Name));
}
else
@@ -338,7 +338,7 @@ AcpiUtExecute_CID (
{
if (Status == AE_NOT_FOUND)
{
- ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "_CID on %4.4s was not found\n",
+ ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "_CID on %4.4s was not found\n",
(char *)&DeviceNode->Name));
}
else
@@ -437,7 +437,7 @@ AcpiUtExecute_UID (
{
if (Status == AE_NOT_FOUND)
{
- ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "_UID on %4.4s was not found\n",
+ ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "_UID on %4.4s was not found\n",
(char *) &DeviceNode->Name));
}
else
@@ -529,7 +529,7 @@ AcpiUtExecute_STA (
METHOD_NAME__STA, NULL, &ObjDesc);
if (AE_NOT_FOUND == Status)
{
- ACPI_DEBUG_PRINT ((ACPI_DB_INFO,
+ ACPI_DEBUG_PRINT ((ACPI_DB_EXEC,
"_STA on %4.4s was not found, assuming present.\n",
(char *) &DeviceNode->Name));
diff --git a/sys/contrib/dev/acpica/utglobal.c b/sys/contrib/dev/acpica/utglobal.c
index 4758da7..babf233 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: 153 $
+ * $Revision: 155 $
*
*****************************************************************************/
@@ -128,6 +128,7 @@
ACPI_MODULE_NAME ("utglobal")
+
/******************************************************************************
*
* FUNCTION: AcpiFormatException
@@ -148,9 +149,11 @@ AcpiFormatException (
ACPI_STATUS SubStatus;
- SubStatus = (Status & ~AE_CODE_MASK);
+ ACPI_FUNCTION_NAME ("FormatException");
+ SubStatus = (Status & ~AE_CODE_MASK);
+
switch (Status & AE_CODE_MASK)
{
case AE_CODE_ENVIRONMENTAL:
@@ -158,47 +161,57 @@ AcpiFormatException (
if (SubStatus <= AE_CODE_ENV_MAX)
{
Exception = AcpiGbl_ExceptionNames_Env [SubStatus];
+ break;
}
- break;
+ goto Unknown;
case AE_CODE_PROGRAMMER:
if (SubStatus <= AE_CODE_PGM_MAX)
{
Exception = AcpiGbl_ExceptionNames_Pgm [SubStatus -1];
+ break;
}
- break;
+ goto Unknown;
case AE_CODE_ACPI_TABLES:
if (SubStatus <= AE_CODE_TBL_MAX)
{
Exception = AcpiGbl_ExceptionNames_Tbl [SubStatus -1];
+ break;
}
- break;
+ goto Unknown;
case AE_CODE_AML:
if (SubStatus <= AE_CODE_AML_MAX)
{
Exception = AcpiGbl_ExceptionNames_Aml [SubStatus -1];
+ break;
}
- break;
+ goto Unknown;
case AE_CODE_CONTROL:
if (SubStatus <= AE_CODE_CTRL_MAX)
{
Exception = AcpiGbl_ExceptionNames_Ctrl [SubStatus -1];
+ break;
}
- break;
+ goto Unknown;
default:
- break;
+ goto Unknown;
}
return ((const char *) Exception);
+
+Unknown:
+
+ ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Unknown exception code: 0x%8.8X\n", Status));
+ return ((const char *) Exception);
}
@@ -272,10 +285,10 @@ const ACPI_PREDEFINED_NAMES AcpiGbl_PreDefinedNames[] =
{"_SB_", ACPI_TYPE_DEVICE},
{"_SI_", INTERNAL_TYPE_DEF_ANY},
{"_TZ_", INTERNAL_TYPE_DEF_ANY},
- {"_REV", ACPI_TYPE_INTEGER, "2"},
- {"_OS_", ACPI_TYPE_STRING, ACPI_OS_NAME},
- {"_GL_", ACPI_TYPE_MUTEX, "0"},
- {NULL, ACPI_TYPE_ANY} /* Table terminator */
+ {"_REV", ACPI_TYPE_INTEGER, "2"},
+ {"_OS_", ACPI_TYPE_STRING, ACPI_OS_NAME},
+ {"_GL_", ACPI_TYPE_MUTEX, "0"},
+ {NULL, ACPI_TYPE_ANY} /* Table terminator */
};
@@ -292,16 +305,16 @@ const UINT8 AcpiGbl_NsProperties[] =
ACPI_NS_NORMAL, /* 01 Number */
ACPI_NS_NORMAL, /* 02 String */
ACPI_NS_NORMAL, /* 03 Buffer */
- ACPI_NS_LOCAL, /* 04 Package */
+ ACPI_NS_NORMAL, /* 04 Package */
ACPI_NS_NORMAL, /* 05 FieldUnit */
- ACPI_NS_NEWSCOPE | ACPI_NS_LOCAL, /* 06 Device */
- ACPI_NS_LOCAL, /* 07 AcpiEvent */
- ACPI_NS_NEWSCOPE | ACPI_NS_LOCAL, /* 08 Method */
- ACPI_NS_LOCAL, /* 09 Mutex */
- ACPI_NS_LOCAL, /* 10 Region */
- ACPI_NS_NEWSCOPE | ACPI_NS_LOCAL, /* 11 Power */
- ACPI_NS_NEWSCOPE | ACPI_NS_LOCAL, /* 12 Processor */
- ACPI_NS_NEWSCOPE | ACPI_NS_LOCAL, /* 13 Thermal */
+ ACPI_NS_NEWSCOPE, /* 06 Device */
+ ACPI_NS_NORMAL, /* 07 Event */
+ ACPI_NS_NEWSCOPE, /* 08 Method */
+ ACPI_NS_NORMAL, /* 09 Mutex */
+ ACPI_NS_NORMAL, /* 10 Region */
+ ACPI_NS_NEWSCOPE, /* 11 Power */
+ ACPI_NS_NEWSCOPE, /* 12 Processor */
+ ACPI_NS_NEWSCOPE, /* 13 Thermal */
ACPI_NS_NORMAL, /* 14 BufferField */
ACPI_NS_NORMAL, /* 15 DdbHandle */
ACPI_NS_NORMAL, /* 16 Debug Object */
@@ -857,6 +870,7 @@ AcpiUtInitGlobals (
/* Miscellaneous variables */
+ AcpiGbl_TableFlags = ACPI_PHYSICAL_POINTER;
AcpiGbl_RsdpOriginalLocation = 0;
AcpiGbl_CmSingleStep = FALSE;
AcpiGbl_DbTerminateThreads = FALSE;
@@ -878,7 +892,7 @@ AcpiUtInitGlobals (
AcpiGbl_RootNode = NULL;
- AcpiGbl_RootNodeStruct.Name = ACPI_ROOT_NAME;
+ AcpiGbl_RootNodeStruct.Name.Integer = ACPI_ROOT_NAME;
AcpiGbl_RootNodeStruct.Descriptor = ACPI_DESC_TYPE_NAMED;
AcpiGbl_RootNodeStruct.Type = ACPI_TYPE_ANY;
AcpiGbl_RootNodeStruct.Child = NULL;
OpenPOWER on IntegriCloud