aboutsummaryrefslogtreecommitdiff
path: root/sys/contrib/dev/acpica
diff options
context:
space:
mode:
Diffstat (limited to 'sys/contrib/dev/acpica')
-rw-r--r--sys/contrib/dev/acpica/acconfig.h13
-rw-r--r--sys/contrib/dev/acpica/acdebug.h45
-rw-r--r--sys/contrib/dev/acpica/acdisasm.h454
-rw-r--r--sys/contrib/dev/acpica/acenv.h17
-rw-r--r--sys/contrib/dev/acpica/acfreebsd.h3
-rw-r--r--sys/contrib/dev/acpica/acglobal.h15
-rw-r--r--sys/contrib/dev/acpica/aclocal.h34
-rw-r--r--sys/contrib/dev/acpica/acmacros.h15
-rw-r--r--sys/contrib/dev/acpica/acnamesp.h4
-rw-r--r--sys/contrib/dev/acpica/acparser.h6
-rw-r--r--sys/contrib/dev/acpica/acpiosxf.h8
-rw-r--r--sys/contrib/dev/acpica/acpixf.h4
-rw-r--r--sys/contrib/dev/acpica/actables.h69
-rw-r--r--sys/contrib/dev/acpica/actbl.h14
-rw-r--r--sys/contrib/dev/acpica/actypes.h16
-rw-r--r--sys/contrib/dev/acpica/acutils.h10
-rw-r--r--sys/contrib/dev/acpica/amlcode.h10
-rw-r--r--sys/contrib/dev/acpica/amlresrc.h590
-rw-r--r--sys/contrib/dev/acpica/dbcmds.c5
-rw-r--r--sys/contrib/dev/acpica/dbdisply.c94
-rw-r--r--sys/contrib/dev/acpica/dbexec.c10
-rw-r--r--sys/contrib/dev/acpica/dbfileio.c25
-rw-r--r--sys/contrib/dev/acpica/dbxface.c6
-rw-r--r--sys/contrib/dev/acpica/dmbuffer.c627
-rw-r--r--sys/contrib/dev/acpica/dmnames.c541
-rw-r--r--sys/contrib/dev/acpica/dmopcode.c614
-rw-r--r--sys/contrib/dev/acpica/dmresrc.c528
-rw-r--r--sys/contrib/dev/acpica/dmresrcl.c605
-rw-r--r--sys/contrib/dev/acpica/dmresrcs.c352
-rw-r--r--sys/contrib/dev/acpica/dmutils.c405
-rw-r--r--sys/contrib/dev/acpica/dmwalk.c921
-rw-r--r--sys/contrib/dev/acpica/dsmethod.c4
-rw-r--r--sys/contrib/dev/acpica/dsobject.c405
-rw-r--r--sys/contrib/dev/acpica/dsutils.c87
-rw-r--r--sys/contrib/dev/acpica/dswload.c27
-rw-r--r--sys/contrib/dev/acpica/dswstate.c6
-rw-r--r--sys/contrib/dev/acpica/exconfig.c4
-rw-r--r--sys/contrib/dev/acpica/excreate.c4
-rw-r--r--sys/contrib/dev/acpica/exdump.c15
-rw-r--r--sys/contrib/dev/acpica/exmisc.c62
-rw-r--r--sys/contrib/dev/acpica/exoparg1.c39
-rw-r--r--sys/contrib/dev/acpica/exoparg2.c11
-rw-r--r--sys/contrib/dev/acpica/exresnte.c4
-rw-r--r--sys/contrib/dev/acpica/exresolv.c4
-rw-r--r--sys/contrib/dev/acpica/exresop.c3
-rw-r--r--sys/contrib/dev/acpica/exstore.c3
-rw-r--r--sys/contrib/dev/acpica/exutils.c63
-rw-r--r--sys/contrib/dev/acpica/nsdump.c93
-rw-r--r--sys/contrib/dev/acpica/nsdumpdv.c221
-rw-r--r--sys/contrib/dev/acpica/nseval.c5
-rw-r--r--sys/contrib/dev/acpica/nsload.c118
-rw-r--r--sys/contrib/dev/acpica/nsnames.c4
-rw-r--r--sys/contrib/dev/acpica/nsxfeval.c866
-rw-r--r--sys/contrib/dev/acpica/nsxfobj.c820
-rw-r--r--sys/contrib/dev/acpica/psargs.c40
-rw-r--r--sys/contrib/dev/acpica/psfind.c17
-rw-r--r--sys/contrib/dev/acpica/psopcode.c4
-rw-r--r--sys/contrib/dev/acpica/psparse.c8
-rw-r--r--sys/contrib/dev/acpica/psutils.c38
-rw-r--r--sys/contrib/dev/acpica/psxface.c6
-rw-r--r--sys/contrib/dev/acpica/rscreate.c6
-rw-r--r--sys/contrib/dev/acpica/rsio.c25
-rw-r--r--sys/contrib/dev/acpica/rsirq.c21
-rw-r--r--sys/contrib/dev/acpica/rslist.c4
-rw-r--r--sys/contrib/dev/acpica/tbconvrt.c14
-rw-r--r--sys/contrib/dev/acpica/tbget.c844
-rw-r--r--sys/contrib/dev/acpica/tbgetall.c397
-rw-r--r--sys/contrib/dev/acpica/tbinstal.c61
-rw-r--r--sys/contrib/dev/acpica/tbrsdt.c407
-rw-r--r--sys/contrib/dev/acpica/tbutils.c97
-rw-r--r--sys/contrib/dev/acpica/tbxface.c15
-rw-r--r--sys/contrib/dev/acpica/tbxfroot.c72
-rw-r--r--sys/contrib/dev/acpica/utcopy.c19
-rw-r--r--sys/contrib/dev/acpica/utglobal.c126
-rw-r--r--sys/contrib/dev/acpica/utxface.c27
75 files changed, 8799 insertions, 2377 deletions
diff --git a/sys/contrib/dev/acpica/acconfig.h b/sys/contrib/dev/acpica/acconfig.h
index bb16e2bd4f50..c08b5f8c8536 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: 104 $
+ * $Revision: 107 $
*
*****************************************************************************/
@@ -145,7 +145,7 @@
/* Version string */
-#define ACPI_CA_VERSION 0x20020611
+#define ACPI_CA_VERSION 0x20020725
/* Version of ACPI supported */
@@ -243,6 +243,15 @@
#define ACPI_MAX_ADDRESS_SPACE 255
+/* Array sizes. Used for range checking also */
+
+#define NUM_ACCESS_TYPES 6
+#define NUM_UPDATE_RULES 3
+#define NUM_LOCK_RULES 2
+#define NUM_MATCH_OPS 6
+#define NUM_OPCODES 256
+#define NUM_FIELD_NAMES 2
+
/* RSDP checksums */
#define ACPI_RSDP_CHECKSUM_LENGTH 20
diff --git a/sys/contrib/dev/acpica/acdebug.h b/sys/contrib/dev/acpica/acdebug.h
index 543289b02d21..68fd1f09265e 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: 61 $
+ * $Revision: 63 $
*
*****************************************************************************/
@@ -120,7 +120,6 @@
#define ACPI_DEBUG_BUFFER_SIZE 4196
-
typedef struct CommandInfo
{
NATIVE_CHAR *Name; /* Command Name */
@@ -276,44 +275,6 @@ AcpiDbWalkForSpecificObjects (
void **ReturnValue);
-
-/*
- * dbdisasm - AML disassembler
- */
-
-void
-AcpiDbDisplayOp (
- ACPI_WALK_STATE *WalkState,
- ACPI_PARSE_OBJECT *Origin,
- UINT32 NumOpcodes);
-
-void
-AcpiDbDisplayNamestring (
- NATIVE_CHAR *Name);
-
-void
-AcpiDbDisplayPath (
- ACPI_PARSE_OBJECT *Op);
-
-void
-AcpiDbDisplayOpcode (
- ACPI_WALK_STATE *WalkState,
- ACPI_PARSE_OBJECT *Op);
-
-void
-AcpiDbDecodeInternalObject (
- ACPI_OPERAND_OBJECT *ObjDesc);
-
-UINT32
-AcpiDbBlockType (
- ACPI_PARSE_OBJECT *Op);
-
-ACPI_STATUS
-AcpiPsDisplayObjectPathname (
- ACPI_WALK_STATE *WalkState,
- ACPI_PARSE_OBJECT *Op);
-
-
/*
* dbdisply - debug display commands
*/
@@ -370,6 +331,10 @@ void *
AcpiDbGetPointer (
void *Target);
+void
+AcpiDbDecodeInternalObject (
+ ACPI_OPERAND_OBJECT *ObjDesc);
+
/*
* dbexec - debugger control method execution
diff --git a/sys/contrib/dev/acpica/acdisasm.h b/sys/contrib/dev/acpica/acdisasm.h
new file mode 100644
index 000000000000..9cad736313a1
--- /dev/null
+++ b/sys/contrib/dev/acpica/acdisasm.h
@@ -0,0 +1,454 @@
+/******************************************************************************
+ *
+ * Name: acdisasm.h - AML disassembler
+ * $Revision: 2 $
+ *
+ *****************************************************************************/
+
+/******************************************************************************
+ *
+ * 1. Copyright Notice
+ *
+ * Some or all of this work - Copyright (c) 1999 - 2002, Intel Corp.
+ * All rights reserved.
+ *
+ * 2. License
+ *
+ * 2.1. This is your license from Intel Corp. under its intellectual property
+ * rights. You may have additional license terms from the party that provided
+ * you this software, covering your right to use that party's intellectual
+ * property rights.
+ *
+ * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a
+ * copy of the source code appearing in this file ("Covered Code") an
+ * irrevocable, perpetual, worldwide license under Intel's copyrights in the
+ * base code distributed originally by Intel ("Original Intel Code") to copy,
+ * make derivatives, distribute, use and display any portion of the Covered
+ * Code in any form, with the right to sublicense such rights; and
+ *
+ * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent
+ * license (with the right to sublicense), under only those claims of Intel
+ * patents that are infringed by the Original Intel Code, to make, use, sell,
+ * offer to sell, and import the Covered Code and derivative works thereof
+ * solely to the minimum extent necessary to exercise the above copyright
+ * license, and in no event shall the patent license extend to any additions
+ * to or modifications of the Original Intel Code. No other license or right
+ * is granted directly or by implication, estoppel or otherwise;
+ *
+ * The above copyright and patent license is granted only if the following
+ * conditions are met:
+ *
+ * 3. Conditions
+ *
+ * 3.1. Redistribution of Source with Rights to Further Distribute Source.
+ * Redistribution of source code of any substantial portion of the Covered
+ * Code or modification with rights to further distribute source must include
+ * the above Copyright Notice, the above License, this list of Conditions,
+ * and the following Disclaimer and Export Compliance provision. In addition,
+ * Licensee must cause all Covered Code to which Licensee contributes to
+ * contain a file documenting the changes Licensee made to create that Covered
+ * Code and the date of any change. Licensee must include in that file the
+ * documentation of any changes made by any predecessor Licensee. Licensee
+ * must include a prominent statement that the modification is derived,
+ * directly or indirectly, from Original Intel Code.
+ *
+ * 3.2. Redistribution of Source with no Rights to Further Distribute Source.
+ * Redistribution of source code of any substantial portion of the Covered
+ * Code or modification without rights to further distribute source must
+ * include the following Disclaimer and Export Compliance provision in the
+ * documentation and/or other materials provided with distribution. In
+ * addition, Licensee may not authorize further sublicense of source of any
+ * portion of the Covered Code, and must include terms to the effect that the
+ * license from Licensee to its licensee is limited to the intellectual
+ * property embodied in the software Licensee provides to its licensee, and
+ * not to intellectual property embodied in modifications its licensee may
+ * make.
+ *
+ * 3.3. Redistribution of Executable. Redistribution in executable form of any
+ * substantial portion of the Covered Code or modification must reproduce the
+ * above Copyright Notice, and the following Disclaimer and Export Compliance
+ * provision in the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * 3.4. Intel retains all right, title, and interest in and to the Original
+ * Intel Code.
+ *
+ * 3.5. Neither the name Intel nor any other trademark owned or controlled by
+ * Intel shall be used in advertising or otherwise to promote the sale, use or
+ * other dealings in products derived from or relating to the Covered Code
+ * without prior written authorization from Intel.
+ *
+ * 4. Disclaimer and Export Compliance
+ *
+ * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED
+ * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE
+ * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE,
+ * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY
+ * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY
+ * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A
+ * PARTICULAR PURPOSE.
+ *
+ * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES
+ * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR
+ * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT,
+ * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY
+ * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL
+ * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS
+ * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY
+ * LIMITED REMEDY.
+ *
+ * 4.3. Licensee shall not export, either directly or indirectly, any of this
+ * software or system incorporating such software without first obtaining any
+ * required license or other approval from the U. S. Department of Commerce or
+ * any other agency or department of the United States Government. In the
+ * event Licensee exports any such software from the United States or
+ * re-exports any such software from a foreign destination, Licensee shall
+ * ensure that the distribution and export/re-export of the software is in
+ * compliance with all laws, regulations, orders, or other restrictions of the
+ * U.S. Export Administration Regulations. Licensee agrees that neither it nor
+ * any of its subsidiaries will export/re-export any technical data, process,
+ * software, or service, directly or indirectly, to any country for which the
+ * United States government or any agency thereof requires an export license,
+ * other governmental approval, or letter of assurance, without first obtaining
+ * such license, approval or letter.
+ *
+ *****************************************************************************/
+
+#ifndef __ACDISASM_H__
+#define __ACDISASM_H__
+
+#include "amlresrc.h"
+
+
+#define BLOCK_NONE 0
+#define BLOCK_PAREN 1
+#define BLOCK_BRACE 2
+#define BLOCK_COMMA_LIST 4
+
+extern const char *AcpiGbl_IoDecode[2];
+extern const char *AcpiGbl_WordDecode[4];
+extern const char *AcpiGbl_ConsumeDecode[2];
+extern const char *AcpiGbl_MinDecode[2];
+extern const char *AcpiGbl_MaxDecode[2];
+extern const char *AcpiGbl_DECDecode[2];
+extern const char *AcpiGbl_RNGDecode[4];
+extern const char *AcpiGbl_MEMDecode[4];
+extern const char *AcpiGbl_RWDecode[2];
+extern const char *AcpiGbl_IrqDecode[2];
+extern const char *AcpiGbl_HEDecode[2];
+extern const char *AcpiGbl_LLDecode[2];
+extern const char *AcpiGbl_SHRDecode[2];
+extern const char *AcpiGbl_TYPDecode[4];
+extern const char *AcpiGbl_BMDecode[2];
+extern const char *AcpiGbl_SIZDecode[4];
+extern const NATIVE_CHAR *AcpiGbl_LockRule[NUM_LOCK_RULES];
+extern const NATIVE_CHAR *AcpiGbl_AccessTypes[NUM_ACCESS_TYPES];
+extern const NATIVE_CHAR *AcpiGbl_UpdateRules[NUM_UPDATE_RULES];
+extern const NATIVE_CHAR *AcpiGbl_MatchOps[NUM_MATCH_OPS];
+
+
+typedef struct acpi_op_walk_info
+{
+ UINT32 Level;
+ UINT32 BitOffset;
+
+} ACPI_OP_WALK_INFO;
+
+typedef
+ACPI_STATUS (*ASL_WALK_CALLBACK) (
+ ACPI_PARSE_OBJECT *Op,
+ UINT32 Level,
+ void *Context);
+
+
+
+/*
+ * dmwalk
+ */
+
+void
+AcpiDmWalkParseTree (
+ ACPI_PARSE_OBJECT *Op,
+ ASL_WALK_CALLBACK DescendingCallback,
+ ASL_WALK_CALLBACK AscendingCallback,
+ void *Context);
+
+ACPI_STATUS
+AcpiDmDescendingOp (
+ ACPI_PARSE_OBJECT *Op,
+ UINT32 Level,
+ void *Context);
+
+ACPI_STATUS
+AcpiDmAscendingOp (
+ ACPI_PARSE_OBJECT *Op,
+ UINT32 Level,
+ void *Context);
+
+
+/*
+ * dmopcode
+ */
+
+void
+AcpiDmValidateName (
+ char *Name,
+ ACPI_PARSE_OBJECT *Op);
+
+UINT32
+AcpiDmDumpName (
+ char *Name);
+
+void
+AcpiDmString (
+ char *String);
+
+void
+AcpiDmUnicode (
+ ACPI_PARSE_OBJECT *Op);
+
+void
+AcpiDmDisassemble (
+ ACPI_WALK_STATE *WalkState,
+ ACPI_PARSE_OBJECT *Origin,
+ UINT32 NumOpcodes);
+
+void
+AcpiDmNamestring (
+ NATIVE_CHAR *Name);
+
+void
+AcpiDmDisplayPath (
+ ACPI_PARSE_OBJECT *Op);
+
+void
+AcpiDmDisassembleOneOp (
+ ACPI_WALK_STATE *WalkState,
+ ACPI_OP_WALK_INFO *Info,
+ ACPI_PARSE_OBJECT *Op);
+
+void
+AcpiDmDecodeInternalObject (
+ ACPI_OPERAND_OBJECT *ObjDesc);
+
+void
+AcpiDmDecodeNode (
+ ACPI_NAMESPACE_NODE *Node);
+
+UINT32
+AcpiDmBlockType (
+ ACPI_PARSE_OBJECT *Op);
+
+UINT32
+AcpiDmListType (
+ ACPI_PARSE_OBJECT *Op);
+
+ACPI_STATUS
+AcpiPsDisplayObjectPathname (
+ ACPI_WALK_STATE *WalkState,
+ ACPI_PARSE_OBJECT *Op);
+
+void
+AcpiDmMethodFlags (
+ ACPI_PARSE_OBJECT *Op);
+
+void
+AcpiDmFieldFlags (
+ ACPI_PARSE_OBJECT *Op);
+
+void
+AcpiDmAddressSpace (
+ UINT8 SpaceId);
+
+void
+AcpiDmRegionFlags (
+ ACPI_PARSE_OBJECT *Op);
+
+void
+AcpiDmMatchOp (
+ ACPI_PARSE_OBJECT *Op);
+
+void
+AcpiDmMatchKeyword (
+ ACPI_PARSE_OBJECT *Op);
+
+BOOLEAN
+AcpiDmCommaIfListMember (
+ ACPI_PARSE_OBJECT *Op);
+
+void
+AcpiDmCommaIfFieldMember (
+ ACPI_PARSE_OBJECT *Op);
+
+
+/*
+ * dmbuffer
+ */
+
+void
+AcpiIsEisaId (
+ ACPI_PARSE_OBJECT *Op);
+
+void
+AcpiDmEisaId (
+ UINT32 EncodedId);
+
+BOOLEAN
+AcpiDmIsUnicodeBuffer (
+ ACPI_PARSE_OBJECT *Op);
+
+BOOLEAN
+AcpiDmIsStringBuffer (
+ ACPI_PARSE_OBJECT *Op);
+
+
+/*
+ * dmresrc
+ */
+
+void
+AcpiDmDisasmByteList (
+ UINT32 Level,
+ UINT8 *ByteData,
+ UINT32 ByteCount);
+
+void
+AcpiDmByteList (
+ ACPI_OP_WALK_INFO *Info,
+ ACPI_PARSE_OBJECT *Op);
+
+void
+AcpiDmResourceDescriptor (
+ ACPI_OP_WALK_INFO *Info,
+ UINT8 *ByteData,
+ UINT32 ByteCount);
+
+BOOLEAN
+AcpiDmIsResourceDescriptor (
+ ACPI_PARSE_OBJECT *Op);
+
+void
+AcpiDmIndent (
+ UINT32 Level);
+
+void
+AcpiDmBitList (
+ UINT16 Mask);
+
+
+/*
+ * dmresrcl
+ */
+
+void
+AcpiDmIoFlags (
+ UINT8 Flags);
+
+void
+AcpiDmMemoryFlags (
+ UINT8 Flags,
+ UINT8 SpecificFlags);
+
+void
+AcpiDmWordDescriptor (
+ ASL_WORD_ADDRESS_DESC *Resource,
+ UINT32 Length,
+ UINT32 Level);
+
+void
+AcpiDmDwordDescriptor (
+ ASL_DWORD_ADDRESS_DESC *Resource,
+ UINT32 Length,
+ UINT32 Level);
+
+void
+AcpiDmQwordDescriptor (
+ ASL_QWORD_ADDRESS_DESC *Resource,
+ UINT32 Length,
+ UINT32 Level);
+
+void
+AcpiDmMemory24Descriptor (
+ ASL_MEMORY_24_DESC *Resource,
+ UINT32 Length,
+ UINT32 Level);
+
+void
+AcpiDmMemory32Descriptor (
+ ASL_MEMORY_32_DESC *Resource,
+ UINT32 Length,
+ UINT32 Level);
+
+void
+AcpiDmFixedMem32Descriptor (
+ ASL_FIXED_MEMORY_32_DESC *Resource,
+ UINT32 Length,
+ UINT32 Level);
+
+void
+AcpiDmGenericRegisterDescriptor (
+ ASL_GENERAL_REGISTER_DESC *Resource,
+ UINT32 Length,
+ UINT32 Level);
+
+void
+AcpiDmInterruptDescriptor (
+ ASL_EXTENDED_XRUPT_DESC *Resource,
+ UINT32 Length,
+ UINT32 Level);
+
+void
+AcpiDmVendorLargeDescriptor (
+ ASL_LARGE_VENDOR_DESC *Resource,
+ UINT32 Length,
+ UINT32 Level);
+
+
+/*
+ * dmresrcs
+ */
+
+void
+AcpiDmIrqDescriptor (
+ ASL_IRQ_FORMAT_DESC *Resource,
+ UINT32 Length,
+ UINT32 Level);
+
+void
+AcpiDmDmaDescriptor (
+ ASL_DMA_FORMAT_DESC *Resource,
+ UINT32 Length,
+ UINT32 Level);
+
+void
+AcpiDmIoDescriptor (
+ ASL_IO_PORT_DESC *Resource,
+ UINT32 Length,
+ UINT32 Level);
+
+void
+AcpiDmFixedIoDescriptor (
+ ASL_FIXED_IO_PORT_DESC *Resource,
+ UINT32 Length,
+ UINT32 Level);
+
+void
+AcpiDmStartDependentDescriptor (
+ ASL_START_DEPENDENT_DESC *Resource,
+ UINT32 Length,
+ UINT32 Level);
+
+void
+AcpiDmEndDependentDescriptor (
+ ASL_START_DEPENDENT_DESC *Resource,
+ UINT32 Length,
+ UINT32 Level);
+
+void
+AcpiDmVendorSmallDescriptor (
+ ASL_SMALL_VENDOR_DESC *Resource,
+ UINT32 Length,
+ UINT32 Level);
+
+
+#endif /* __ACDISASM_H__ */
diff --git a/sys/contrib/dev/acpica/acenv.h b/sys/contrib/dev/acpica/acenv.h
index 04945ef733bf..9c4cfddbc2a6 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: 95 $
+ * $Revision: 99 $
*
*****************************************************************************/
@@ -123,11 +123,13 @@
*/
#ifdef _ACPI_DUMP_APP
+#ifndef MSDOS
#define ACPI_DEBUG
+#endif
#define ACPI_APPLICATION
-#define ENABLE_DEBUGGER
+#define ACPI_DISASSEMBLER
+#define ACPI_NO_METHOD_EXECUTION
#define ACPI_USE_SYSTEM_CLIBRARY
-#define PARSER_ONLY
#endif
#ifdef _ACPI_EXEC_APP
@@ -136,13 +138,15 @@
#define ACPI_DEBUG
#define ACPI_APPLICATION
#define ENABLE_DEBUGGER
+#define ACPI_DISASSEMBLER
#define ACPI_USE_SYSTEM_CLIBRARY
#endif
#ifdef _ACPI_ASL_COMPILER
#define ACPI_DEBUG
#define ACPI_APPLICATION
-/* #define ENABLE_DEBUGGER */
+#define ACPI_DISASSEMBLER
+#define ACPI_CONSTANT_EVAL_ONLY
#define ACPI_USE_SYSTEM_CLIBRARY
#endif
@@ -274,7 +278,6 @@
/*
* Use the standard C library headers.
* We want to keep these to a minimum.
- *
*/
#ifdef ACPI_USE_STANDARD_HEADERS
@@ -304,12 +307,16 @@
#define ACPI_STRTOUL(d,s,n) strtoul((d), (s), (ACPI_SIZE)(n))
#define ACPI_MEMCPY(d,s,n) (void) memcpy((d), (s), (ACPI_SIZE)(n))
#define ACPI_MEMSET(d,s,n) (void) memset((d), (s), (ACPI_SIZE)(n))
+
#define ACPI_TOUPPER toupper
#define ACPI_TOLOWER tolower
#define ACPI_IS_XDIGIT isxdigit
#define ACPI_IS_DIGIT isdigit
#define ACPI_IS_SPACE isspace
#define ACPI_IS_UPPER isupper
+#define ACPI_IS_PRINT isprint
+#define ACPI_IS_ALPHA isalpha
+#define ACPI_IS_ASCII isascii
/******************************************************************************
*
diff --git a/sys/contrib/dev/acpica/acfreebsd.h b/sys/contrib/dev/acpica/acfreebsd.h
index c2e8a93d2fd1..2154882f4746 100644
--- a/sys/contrib/dev/acpica/acfreebsd.h
+++ b/sys/contrib/dev/acpica/acfreebsd.h
@@ -1,7 +1,7 @@
/******************************************************************************
*
* Name: acfreebsd.h - OS specific defines, etc.
- * $Revision: 7 $
+ * $Revision: 9 $
*
*****************************************************************************/
@@ -126,6 +126,7 @@
/* FreeBSD uses GCC */
#include "acgcc.h"
+#include <machine/acpica_machdep.h>
#ifdef _KERNEL
#include <sys/ctype.h>
diff --git a/sys/contrib/dev/acpica/acglobal.h b/sys/contrib/dev/acpica/acglobal.h
index c4cf5e4ddc15..d39861e19c27 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: 125 $
+ * $Revision: 128 $
*
*****************************************************************************/
@@ -163,6 +163,7 @@ extern UINT32 AcpiGbl_NestingLevel;
*
*/
ACPI_EXTERN UINT32 AcpiGbl_TableFlags;
+ACPI_EXTERN UINT32 AcpiGbl_RsdtTableCount;
ACPI_EXTERN RSDP_DESCRIPTOR *AcpiGbl_RSDP;
ACPI_EXTERN XSDT_DESCRIPTOR *AcpiGbl_XSDT;
ACPI_EXTERN FADT_DESCRIPTOR *AcpiGbl_FADT;
@@ -230,8 +231,9 @@ ACPI_EXTERN BOOLEAN AcpiGbl_GlobalLockPresent;
extern BOOLEAN AcpiGbl_Shutdown;
extern UINT32 AcpiGbl_StartupFlags;
extern const UINT8 AcpiGbl_DecodeTo8bit[8];
-extern const NATIVE_CHAR *AcpiGbl_DbSleepStates[ACPI_NUM_SLEEP_STATES];
+extern const NATIVE_CHAR *AcpiGbl_DbSleepStates[ACPI_NUM_SLEEP_STATES];
extern const ACPI_OPCODE_INFO AcpiGbl_AmlOpInfo[AML_NUM_OPCODES];
+extern const NATIVE_CHAR *AcpiGbl_RegionTypes[ACPI_NUM_PREDEFINED_REGIONS];
/*****************************************************************************
@@ -327,6 +329,12 @@ ACPI_EXTERN ACPI_GPE_INDEX_INFO *AcpiGbl_GpeNumberToIndex;
ACPI_EXTERN UINT8 AcpiGbl_DbOutputFlags;
+#ifdef ACPI_DISASSEMBLER
+
+ACPI_EXTERN BOOLEAN AcpiGbl_DbOpt_disasm;
+ACPI_EXTERN BOOLEAN AcpiGbl_DbOpt_verbose;
+#endif
+
#ifdef ENABLE_DEBUGGER
@@ -337,9 +345,7 @@ ACPI_EXTERN int optind;
ACPI_EXTERN NATIVE_CHAR *optarg;
ACPI_EXTERN BOOLEAN AcpiGbl_DbOpt_tables;
-ACPI_EXTERN BOOLEAN AcpiGbl_DbOpt_disasm;
ACPI_EXTERN BOOLEAN AcpiGbl_DbOpt_stats;
-ACPI_EXTERN BOOLEAN AcpiGbl_DbOpt_verbose;
ACPI_EXTERN BOOLEAN AcpiGbl_DbOpt_ini_methods;
@@ -351,7 +357,6 @@ ACPI_EXTERN NATIVE_CHAR AcpiGbl_DbDebugFilename[40];
ACPI_EXTERN BOOLEAN AcpiGbl_DbOutputToFile;
ACPI_EXTERN NATIVE_CHAR *AcpiGbl_DbBuffer;
ACPI_EXTERN NATIVE_CHAR *AcpiGbl_DbFilename;
-ACPI_EXTERN NATIVE_CHAR *AcpiGbl_DbDisasmIndent;
ACPI_EXTERN UINT32 AcpiGbl_DbDebugLevel;
ACPI_EXTERN UINT32 AcpiGbl_DbConsoleDebugLevel;
ACPI_EXTERN ACPI_TABLE_HEADER *AcpiGbl_DbTablePtr;
diff --git a/sys/contrib/dev/acpica/aclocal.h b/sys/contrib/dev/acpica/aclocal.h
index 5a4c732dcc6f..f8431234bdc5 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: 167 $
+ * $Revision: 173 $
*
*****************************************************************************/
@@ -124,10 +124,6 @@ typedef void* ACPI_MUTEX;
typedef UINT32 ACPI_MUTEX_HANDLE;
-#define ACPI_MEMORY_MODE 0x01
-#define ACPI_LOGICAL_ADDRESSING 0x00
-#define ACPI_PHYSICAL_ADDRESSING 0x01
-
/* Total number of aml opcodes defined */
#define AML_NUM_OPCODES 0x7E
@@ -663,8 +659,8 @@ ACPI_STATUS (*ACPI_EXECUTE_OP) (
*/
typedef struct acpi_opcode_info
{
-#ifdef _OPCODE_NAMES
- NATIVE_CHAR *Name; /* Opcode name (debug only) */
+#if defined(ACPI_DISASSEMBLER) || defined(ACPI_DEBUG)
+ NATIVE_CHAR *Name; /* Opcode name (disassembler/debug only) */
#endif
UINT32 ParseArgs; /* Grammar/Parse time arguments */
UINT32 RuntimeArgs; /* Interpret time arguments */
@@ -699,15 +695,23 @@ typedef union acpi_parse_val
UINT32 AmlOffset; /* offset of declaration in AML */\
union acpi_parse_obj *Parent; /* parent op */\
union acpi_parse_obj *Next; /* next op */\
- ACPI_DEBUG_ONLY_MEMBERS (\
+ ACPI_DISASM_ONLY_MEMBERS (\
+ UINT8 DisasmFlags; /* Used during AML disassembly */\
+ UINT8 DisasmOpcode; /* Subtype used for disassembly */\
NATIVE_CHAR AmlOpName[16]) /* op name (debug only) */\
/* NON-DEBUG members below: */\
ACPI_NAMESPACE_NODE *Node; /* for use by interpreter */\
ACPI_PARSE_VALUE Value; /* Value or args associated with the opcode */\
+#define ACPI_DASM_BUFFER 0x00
+#define ACPI_DASM_RESOURCE 0x01
+#define ACPI_DASM_STRING 0x02
+#define ACPI_DASM_UNICODE 0x03
+#define ACPI_DASM_EISAID 0x04
+#define ACPI_DASM_MATCHOP 0x05
/*
- * generic operation (eg. If, While, Store)
+ * generic operation (for example: If, While, Store)
*/
typedef struct acpi_parseobj_common
{
@@ -722,6 +726,7 @@ typedef struct acpi_parseobj_common
typedef struct acpi_parseobj_named
{
ACPI_PARSE_COMMON
+ UINT8 *Path;
UINT8 *Data; /* AML body or bytelist data */
UINT32 Length; /* AML length */
UINT32 Name; /* 4-byte name or zero if no name */
@@ -749,15 +754,15 @@ typedef struct acpi_parseobj_asl
UINT32 LogicalByteOffset;
UINT32 EndLine;
UINT32 EndLogicalLine;
- UINT16 ParseOpcode;
UINT32 AcpiBtype;
UINT32 AmlLength;
UINT32 AmlSubtreeLength;
UINT32 FinalAmlLength;
UINT32 FinalAmlOffset;
+ UINT16 ParseOpcode;
+ UINT16 CompileFlags;
UINT8 AmlOpcodeLength;
UINT8 AmlPkgLenBytes;
- UINT16 CompileFlags;
UINT8 Extra;
char ParseOpName[12];
@@ -802,6 +807,13 @@ typedef struct acpi_parse_state
#define ACPI_PARSEOP_BYTELIST 0x08
#define ACPI_PARSEOP_IN_CACHE 0x80
+/* Parse object DisasmFlags */
+
+#define ACPI_PARSEOP_IGNORE 0x01
+#define ACPI_PARSEOP_PARAMLIST 0x02
+#define ACPI_PARSEOP_EMPTY_TERMLIST 0x04
+#define ACPI_PARSEOP_SPECIAL 0x10
+
/*****************************************************************************
*
diff --git a/sys/contrib/dev/acpica/acmacros.h b/sys/contrib/dev/acpica/acmacros.h
index d557015742bb..1394c9cb7524 100644
--- a/sys/contrib/dev/acpica/acmacros.h
+++ b/sys/contrib/dev/acpica/acmacros.h
@@ -1,7 +1,7 @@
/******************************************************************************
*
* Name: acmacros.h - C macros for the entire subsystem.
- * $Revision: 124 $
+ * $Revision: 126 $
*
*****************************************************************************/
@@ -378,12 +378,18 @@
/*
* Macros for the master AML opcode table
*/
-#if defined(ACPI_DEBUG) || defined(ENABLE_DEBUGGER)
+#if defined(ACPI_DISASSEMBLER) || defined (ACPI_DEBUG)
#define ACPI_OP(Name,PArgs,IArgs,ObjType,Class,Type,Flags) {Name,PArgs,IArgs,Flags,ObjType,Class,Type}
#else
#define ACPI_OP(Name,PArgs,IArgs,ObjType,Class,Type,Flags) {PArgs,IArgs,Flags,ObjType,Class,Type}
#endif
+#ifdef ACPI_DISASSEMBLER
+#define ACPI_DISASM_ONLY_MEMBERS(a) a;
+#else
+#define ACPI_DISASM_ONLY_MEMBERS(a)
+#endif
+
#define ARG_TYPE_WIDTH 5
#define ARG_1(x) ((UINT32)(x))
#define ARG_2(x) ((UINT32)(x) << (1 * ARG_TYPE_WIDTH))
@@ -526,7 +532,6 @@
#define ACPI_DEBUG_DEFINE(a) a;
#define ACPI_DEBUG_ONLY_MEMBERS(a) a;
-#define _OPCODE_NAMES
#define _VERBOSE_STRUCTURES
@@ -606,10 +611,6 @@
#define return_VALUE(s) return(s)
#define return_PTR(s) return(s)
-#ifdef ENABLE_DEBUGGER
-#define _OPCODE_NAMES
-#endif
-
#endif
/*
diff --git a/sys/contrib/dev/acpica/acnamesp.h b/sys/contrib/dev/acpica/acnamesp.h
index 6c230dd902b1..ea935f9f3aa9 100644
--- a/sys/contrib/dev/acpica/acnamesp.h
+++ b/sys/contrib/dev/acpica/acnamesp.h
@@ -1,7 +1,7 @@
/******************************************************************************
*
* Name: acnamesp.h - Namespace subcomponent prototypes and defines
- * $Revision: 125 $
+ * $Revision: 126 $
*
*****************************************************************************/
@@ -134,7 +134,7 @@
/* Definitions of the predefined namespace names */
#define ACPI_UNKNOWN_NAME (UINT32) 0x3F3F3F3F /* Unknown name is "????" */
-#define ACPI_ROOT_NAME (UINT32) 0x2F202020 /* Root name is "/ " */
+#define ACPI_ROOT_NAME (UINT32) 0x5F5F5F5C /* Root name is "\___" */
#define ACPI_SYS_BUS_NAME (UINT32) 0x5F53425F /* Sys bus name is "_SB_" */
#define ACPI_NS_ROOT_PATH "\\"
diff --git a/sys/contrib/dev/acpica/acparser.h b/sys/contrib/dev/acpica/acparser.h
index a7e2e501ba2f..04b6a08aa8ac 100644
--- a/sys/contrib/dev/acpica/acparser.h
+++ b/sys/contrib/dev/acpica/acparser.h
@@ -1,7 +1,7 @@
/******************************************************************************
*
* Module Name: acparser.h - AML Parser subcomponent prototypes and defines
- * $Revision: 59 $
+ * $Revision: 60 $
*
*****************************************************************************/
@@ -357,6 +357,10 @@ AcpiPsDeleteCompletedOp (
/* psutils - parser utilities */
+ACPI_PARSE_OBJECT *
+AcpiPsCreateScopeOp (
+ void);
+
void
AcpiPsInitOp (
ACPI_PARSE_OBJECT *op,
diff --git a/sys/contrib/dev/acpica/acpiosxf.h b/sys/contrib/dev/acpica/acpiosxf.h
index ef2a2fc05766..9263d7ea8eff 100644
--- a/sys/contrib/dev/acpica/acpiosxf.h
+++ b/sys/contrib/dev/acpica/acpiosxf.h
@@ -296,7 +296,6 @@ AcpiOsReadPort (
void *Value,
UINT32 Width);
-
ACPI_STATUS
AcpiOsWritePort (
ACPI_IO_ADDRESS Address,
@@ -314,7 +313,6 @@ AcpiOsReadMemory (
void *Value,
UINT32 Width);
-
ACPI_STATUS
AcpiOsWriteMemory (
ACPI_PHYSICAL_ADDRESS Address,
@@ -333,7 +331,6 @@ AcpiOsReadPciConfiguration (
void *Value,
UINT32 Width);
-
ACPI_STATUS
AcpiOsWritePciConfiguration (
ACPI_PCI_ID *PciId,
@@ -351,7 +348,6 @@ AcpiOsReadable (
void *Pointer,
UINT32 Length);
-
BOOLEAN
AcpiOsWritable (
void *Pointer,
@@ -380,6 +376,10 @@ AcpiOsVprintf (
const NATIVE_CHAR *Format,
va_list Args);
+void
+AcpiOsRedirectOutput (
+ void *Destination);
+
/*
* Debug input
diff --git a/sys/contrib/dev/acpica/acpixf.h b/sys/contrib/dev/acpica/acpixf.h
index 046bc52e6996..8ea681e17743 100644
--- a/sys/contrib/dev/acpica/acpixf.h
+++ b/sys/contrib/dev/acpica/acpixf.h
@@ -135,6 +135,10 @@ AcpiEnableSubsystem (
UINT32 Flags);
ACPI_STATUS
+AcpiInitializeObjects (
+ UINT32 Flags);
+
+ACPI_STATUS
AcpiTerminate (
void);
diff --git a/sys/contrib/dev/acpica/actables.h b/sys/contrib/dev/acpica/actables.h
index 4919d27352a2..0fcfd8716c03 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: 41 $
+ * $Revision: 42 $
*
*****************************************************************************/
@@ -134,8 +134,7 @@ AcpiTbHandleToObject (
ACPI_STATUS
AcpiTbConvertToXsdt (
- ACPI_TABLE_DESC *TableInfo,
- UINT32 *NumberOfTables);
+ ACPI_TABLE_DESC *TableInfo);
ACPI_STATUS
AcpiTbConvertTableFadt (
@@ -154,13 +153,31 @@ AcpiTbGetTableCount (
* tbget - Table "get" routines
*/
-void
-AcpiTbTableOverride (
+ACPI_STATUS
+AcpiTbGetTable (
+ ACPI_POINTER *Address,
ACPI_TABLE_DESC *TableInfo);
ACPI_STATUS
-AcpiTbGetTableWithOverride (
+AcpiTbGetTableHeader (
ACPI_POINTER *Address,
+ ACPI_TABLE_HEADER *ReturnHeader);
+
+ACPI_STATUS
+AcpiTbGetTableBody (
+ ACPI_POINTER *Address,
+ ACPI_TABLE_HEADER *Header,
+ ACPI_TABLE_DESC *TableInfo);
+
+ACPI_STATUS
+AcpiTbGetThisTable (
+ ACPI_POINTER *Address,
+ ACPI_TABLE_HEADER *Header,
+ ACPI_TABLE_DESC *TableInfo);
+
+ACPI_STATUS
+AcpiTbTableOverride (
+ ACPI_TABLE_HEADER *Header,
ACPI_TABLE_DESC *TableInfo);
ACPI_STATUS
@@ -170,11 +187,6 @@ AcpiTbGetTablePtr (
ACPI_TABLE_HEADER **TablePtrLoc);
ACPI_STATUS
-AcpiTbGetTable (
- ACPI_POINTER *Address,
- ACPI_TABLE_DESC *TableInfo);
-
-ACPI_STATUS
AcpiTbVerifyRsdp (
ACPI_POINTER *Address);
@@ -187,20 +199,19 @@ AcpiTbValidateRsdt (
ACPI_TABLE_HEADER *TablePtr);
ACPI_STATUS
-AcpiTbGetTablePointer (
- ACPI_POINTER *Address,
- UINT32 Flags,
- ACPI_SIZE *Size,
- ACPI_TABLE_HEADER **TablePtr);
-
-/*
- * tbgetall - Get all firmware ACPI tables
- */
+AcpiTbGetRequiredTables (
+ void);
ACPI_STATUS
-AcpiTbGetAllTables (
- UINT32 NumberOfTables);
+AcpiTbGetPrimaryTable (
+ ACPI_POINTER *Address,
+ ACPI_TABLE_DESC *TableInfo);
+ACPI_STATUS
+AcpiTbGetSecondaryTable (
+ ACPI_POINTER *Address,
+ ACPI_STRING Signature,
+ ACPI_TABLE_DESC *TableInfo);
/*
* tbinstall - Table installation
@@ -213,11 +224,13 @@ AcpiTbInstallTable (
ACPI_STATUS
AcpiTbMatchSignature (
NATIVE_CHAR *Signature,
- ACPI_TABLE_DESC *TableInfo);
+ ACPI_TABLE_DESC *TableInfo,
+ UINT8 SearchType);
ACPI_STATUS
AcpiTbRecognizeTable (
- ACPI_TABLE_DESC *TableInfo);
+ ACPI_TABLE_DESC *TableInfo,
+ UINT8 SearchType);
ACPI_STATUS
AcpiTbInitTableDescriptor (
@@ -256,7 +269,7 @@ AcpiTbFreeAcpiTablesOfType (
ACPI_STATUS
AcpiTbGetTableRsdt (
- UINT32 *NumberOfTables);
+ void);
UINT8 *
AcpiTbScanMemoryForRsdp (
@@ -281,12 +294,6 @@ AcpiTbFindTable (
ACPI_TABLE_HEADER **TablePtr);
ACPI_STATUS
-AcpiTbMapAcpiTable (
- ACPI_PHYSICAL_ADDRESS PhysicalAddress,
- ACPI_SIZE *Size,
- ACPI_TABLE_HEADER **LogicalAddress);
-
-ACPI_STATUS
AcpiTbVerifyTableChecksum (
ACPI_TABLE_HEADER *TableHeader);
diff --git a/sys/contrib/dev/acpica/actbl.h b/sys/contrib/dev/acpica/actbl.h
index ac83e4576cb3..ea06efff4ef8 100644
--- a/sys/contrib/dev/acpica/actbl.h
+++ b/sys/contrib/dev/acpica/actbl.h
@@ -1,7 +1,7 @@
/******************************************************************************
*
* Name: actbl.h - Table data structures defined in ACPI specification
- * $Revision: 52 $
+ * $Revision: 53 $
*
*****************************************************************************/
@@ -276,9 +276,15 @@ typedef struct /* Smart Battery Description Table */
/* Definitions for the Flags bitfield member of ACPI_TABLE_SUPPORT */
-#define ACPI_TABLE_SINGLE 0
-#define ACPI_TABLE_MULTIPLE 1
-#define ACPI_TABLE_EXECUTABLE 2
+#define ACPI_TABLE_SINGLE 0x00
+#define ACPI_TABLE_MULTIPLE 0x01
+#define ACPI_TABLE_EXECUTABLE 0x02
+
+#define ACPI_TABLE_ROOT 0x00
+#define ACPI_TABLE_PRIMARY 0x10
+#define ACPI_TABLE_SECONDARY 0x20
+#define ACPI_TABLE_OTHER 0x30
+#define ACPI_TABLE_TYPE_MASK 0x30
/* Data about each known table type */
diff --git a/sys/contrib/dev/acpica/actypes.h b/sys/contrib/dev/acpica/actypes.h
index dbff91035a1c..903b58197181 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: 237 $
+ * $Revision: 238 $
*
*****************************************************************************/
@@ -300,8 +300,18 @@ typedef struct AcpiPointer
/* PointerTypes for above */
-#define ACPI_LOGICAL_POINTER 0x01
-#define ACPI_PHYSICAL_POINTER 0x02
+#define ACPI_PHYSICAL_POINTER 0x01
+#define ACPI_LOGICAL_POINTER 0x02
+
+/* Processor mode */
+
+#define ACPI_PHYSICAL_ADDRESSING 0x04
+#define ACPI_LOGICAL_ADDRESSING 0x08
+#define ACPI_MEMORY_MODE 0x0C
+
+#define ACPI_PHYSMODE_PHYSPTR ACPI_PHYSICAL_ADDRESSING | ACPI_PHYSICAL_POINTER
+#define ACPI_LOGMODE_PHYSPTR ACPI_LOGICAL_ADDRESSING | ACPI_PHYSICAL_POINTER
+#define ACPI_LOGMODE_LOGPTR ACPI_LOGICAL_ADDRESSING | ACPI_LOGICAL_POINTER
/*
diff --git a/sys/contrib/dev/acpica/acutils.h b/sys/contrib/dev/acpica/acutils.h
index 3dc539a00424..dbf40dcc368d 100644
--- a/sys/contrib/dev/acpica/acutils.h
+++ b/sys/contrib/dev/acpica/acutils.h
@@ -1,7 +1,7 @@
/******************************************************************************
*
* Name: acutils.h -- prototypes for the common (subsystem-wide) procedures
- * $Revision: 139 $
+ * $Revision: 142 $
*
*****************************************************************************/
@@ -191,6 +191,8 @@ NATIVE_CHAR *
AcpiUtGetMutexName (
UINT32 MutexId);
+#endif
+
NATIVE_CHAR *
AcpiUtGetTypeName (
ACPI_OBJECT_TYPE Type);
@@ -199,9 +201,6 @@ NATIVE_CHAR *
AcpiUtGetObjectTypeName (
ACPI_OPERAND_OBJECT *ObjDesc);
-#endif
-
-
NATIVE_CHAR *
AcpiUtGetRegionName (
UINT8 SpaceId);
@@ -316,6 +315,9 @@ extern const UINT8 _acpi_ctype[];
#define ACPI_IS_XDIGIT(c) (_acpi_ctype[(unsigned char)(c)] & (_ACPI_XD))
#define ACPI_IS_UPPER(c) (_acpi_ctype[(unsigned char)(c)] & (_ACPI_UP))
#define ACPI_IS_LOWER(c) (_acpi_ctype[(unsigned char)(c)] & (_ACPI_LO))
+#define ACPI_IS_PRINT(c) (_acpi_ctype[(unsigned char)(c)] & (_ACPI_LO | _ACPI_UP | _ACPI_DI | _ACPI_SP | _ACPI_PU))
+#define ACPI_IS_ALPHA(c) (_acpi_ctype[(unsigned char)(c)] & (_ACPI_LO | _ACPI_UP))
+#define ACPI_IS_ASCII(c) ((c) < 0x80)
#endif /* ACPI_USE_SYSTEM_CLIBRARY */
diff --git a/sys/contrib/dev/acpica/amlcode.h b/sys/contrib/dev/acpica/amlcode.h
index 732c01bfd9e5..d807c9a85ed9 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: 68 $
+ * $Revision: 69 $
*
*****************************************************************************/
@@ -565,13 +565,5 @@ typedef enum
#define METHOD_FLAGS_SYNCH_LEVEL 0xF0
-/* Array sizes. Used for range checking also */
-
-#define NUM_ACCESS_TYPES 6
-#define NUM_UPDATE_RULES 3
-#define NUM_MATCH_OPS 7
-#define NUM_OPCODES 256
-#define NUM_FIELD_NAMES 2
-
#endif /* __AMLCODE_H__ */
diff --git a/sys/contrib/dev/acpica/amlresrc.h b/sys/contrib/dev/acpica/amlresrc.h
new file mode 100644
index 000000000000..6b4994bc8fba
--- /dev/null
+++ b/sys/contrib/dev/acpica/amlresrc.h
@@ -0,0 +1,590 @@
+
+/******************************************************************************
+ *
+ * Module Name: amlresrc.h - AML resource descriptors
+ * $Revision: 20 $
+ *
+ *****************************************************************************/
+
+/******************************************************************************
+ *
+ * 1. Copyright Notice
+ *
+ * Some or all of this work - Copyright (c) 1999 - 2002, Intel Corp.
+ * All rights reserved.
+ *
+ * 2. License
+ *
+ * 2.1. This is your license from Intel Corp. under its intellectual property
+ * rights. You may have additional license terms from the party that provided
+ * you this software, covering your right to use that party's intellectual
+ * property rights.
+ *
+ * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a
+ * copy of the source code appearing in this file ("Covered Code") an
+ * irrevocable, perpetual, worldwide license under Intel's copyrights in the
+ * base code distributed originally by Intel ("Original Intel Code") to copy,
+ * make derivatives, distribute, use and display any portion of the Covered
+ * Code in any form, with the right to sublicense such rights; and
+ *
+ * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent
+ * license (with the right to sublicense), under only those claims of Intel
+ * patents that are infringed by the Original Intel Code, to make, use, sell,
+ * offer to sell, and import the Covered Code and derivative works thereof
+ * solely to the minimum extent necessary to exercise the above copyright
+ * license, and in no event shall the patent license extend to any additions
+ * to or modifications of the Original Intel Code. No other license or right
+ * is granted directly or by implication, estoppel or otherwise;
+ *
+ * The above copyright and patent license is granted only if the following
+ * conditions are met:
+ *
+ * 3. Conditions
+ *
+ * 3.1. Redistribution of Source with Rights to Further Distribute Source.
+ * Redistribution of source code of any substantial portion of the Covered
+ * Code or modification with rights to further distribute source must include
+ * the above Copyright Notice, the above License, this list of Conditions,
+ * and the following Disclaimer and Export Compliance provision. In addition,
+ * Licensee must cause all Covered Code to which Licensee contributes to
+ * contain a file documenting the changes Licensee made to create that Covered
+ * Code and the date of any change. Licensee must include in that file the
+ * documentation of any changes made by any predecessor Licensee. Licensee
+ * must include a prominent statement that the modification is derived,
+ * directly or indirectly, from Original Intel Code.
+ *
+ * 3.2. Redistribution of Source with no Rights to Further Distribute Source.
+ * Redistribution of source code of any substantial portion of the Covered
+ * Code or modification without rights to further distribute source must
+ * include the following Disclaimer and Export Compliance provision in the
+ * documentation and/or other materials provided with distribution. In
+ * addition, Licensee may not authorize further sublicense of source of any
+ * portion of the Covered Code, and must include terms to the effect that the
+ * license from Licensee to its licensee is limited to the intellectual
+ * property embodied in the software Licensee provides to its licensee, and
+ * not to intellectual property embodied in modifications its licensee may
+ * make.
+ *
+ * 3.3. Redistribution of Executable. Redistribution in executable form of any
+ * substantial portion of the Covered Code or modification must reproduce the
+ * above Copyright Notice, and the following Disclaimer and Export Compliance
+ * provision in the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * 3.4. Intel retains all right, title, and interest in and to the Original
+ * Intel Code.
+ *
+ * 3.5. Neither the name Intel nor any other trademark owned or controlled by
+ * Intel shall be used in advertising or otherwise to promote the sale, use or
+ * other dealings in products derived from or relating to the Covered Code
+ * without prior written authorization from Intel.
+ *
+ * 4. Disclaimer and Export Compliance
+ *
+ * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED
+ * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE
+ * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE,
+ * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY
+ * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY
+ * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A
+ * PARTICULAR PURPOSE.
+ *
+ * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES
+ * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR
+ * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT,
+ * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY
+ * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL
+ * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS
+ * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY
+ * LIMITED REMEDY.
+ *
+ * 4.3. Licensee shall not export, either directly or indirectly, any of this
+ * software or system incorporating such software without first obtaining any
+ * required license or other approval from the U. S. Department of Commerce or
+ * any other agency or department of the United States Government. In the
+ * event Licensee exports any such software from the United States or
+ * re-exports any such software from a foreign destination, Licensee shall
+ * ensure that the distribution and export/re-export of the software is in
+ * compliance with all laws, regulations, orders, or other restrictions of the
+ * U.S. Export Administration Regulations. Licensee agrees that neither it nor
+ * any of its subsidiaries will export/re-export any technical data, process,
+ * software, or service, directly or indirectly, to any country for which the
+ * United States government or any agency thereof requires an export license,
+ * other governmental approval, or letter of assurance, without first obtaining
+ * such license, approval or letter.
+ *
+ *****************************************************************************/
+
+
+#ifndef __AMLRESRC_H
+#define __AMLRESRC_H
+
+
+#define ASL_RESNAME_ADDRESS "_ADR"
+#define ASL_RESNAME_ALIGNMENT "_ALN"
+#define ASL_RESNAME_ADDRESSSPACE "_ASI"
+#define ASL_RESNAME_BASEADDRESS "_BAS"
+#define ASL_RESNAME_BUSMASTER "_BM_" /* Master(1), Slave(0) */
+#define ASL_RESNAME_DECODE "_DEC"
+#define ASL_RESNAME_DMA "_DMA"
+#define ASL_RESNAME_DMATYPE "_TYP" /* Compatible(0), A(1), B(2), F(3) */
+#define ASL_RESNAME_GRANULARITY "_GRA"
+#define ASL_RESNAME_INTERRUPT "_INT"
+#define ASL_RESNAME_INTERRUPTLEVEL "_LL_" /* ActiveLo(1), ActiveHi(0) */
+#define ASL_RESNAME_INTERRUPTSHARE "_SHR" /* Shareable(1), NoShare(0) */
+#define ASL_RESNAME_INTERRUPTTYPE "_HE_" /* Edge(1), Level(0) */
+#define ASL_RESNAME_LENGTH "_LEN"
+#define ASL_RESNAME_MEMATTRIBUTES "_MTP" /* Memory(0), Reserved(1), ACPI(2), NVS(3) */
+#define ASL_RESNAME_MEMTYPE "_MEM" /* NonCache(0), Cacheable(1) Cache+combine(2), Cache+prefetch(3) */
+#define ASL_RESNAME_MAXADDR "_MAX"
+#define ASL_RESNAME_MINADDR "_MIN"
+#define ASL_RESNAME_MAXTYPE "_MAF"
+#define ASL_RESNAME_MINTYPE "_MIF"
+#define ASL_RESNAME_REGISTERBITOFFSET "_RBO"
+#define ASL_RESNAME_REGISTERBITWIDTH "_RBW"
+#define ASL_RESNAME_RANGETYPE "_RNG"
+#define ASL_RESNAME_READWRITETYPE "_RW_" /* ReadOnly(0), Writeable (1) */
+#define ASL_RESNAME_TRANSLATION "_TRA"
+#define ASL_RESNAME_TRANSTYPE "_TRS" /* Sparse(1), Dense(0) */
+#define ASL_RESNAME_TYPE "_TTP" /* Translation(1), Static (0) */
+#define ASL_RESNAME_XFERTYPE "_SIZ" /* 8(0), 8And16(1), 16(2) */
+
+
+/* Default sizes for "small" resource descriptors */
+
+#define ASL_RDESC_IRQ_SIZE 0x02
+#define ASL_RDESC_DMA_SIZE 0x02
+#define ASL_RDESC_ST_DEPEND_SIZE 0x00
+#define ASL_RDESC_END_DEPEND_SIZE 0x00
+#define ASL_RDESC_IO_SIZE 0x07
+#define ASL_RDESC_FIXED_IO_SIZE 0x03
+#define ASL_RDESC_END_TAG_SIZE 0x01
+
+
+typedef struct asl_resource_node
+{
+ UINT32 BufferLength;
+ void *Buffer;
+ struct asl_resource_node *Next;
+
+} ASL_RESOURCE_NODE;
+
+
+/*
+ * Resource descriptors defined in the ACPI specification.
+ *
+ * Alignment must be BYTE because these descriptors
+ * are used to overlay the AML byte stream.
+ */
+#pragma pack(1)
+
+typedef struct asl_irq_format_desc
+{
+ UINT8 DescriptorType;
+ UINT16 IrqMask;
+ UINT8 Flags;
+
+} ASL_IRQ_FORMAT_DESC;
+
+
+typedef struct asl_irq_noflags_desc
+{
+ UINT8 DescriptorType;
+ UINT16 IrqMask;
+
+} ASL_IRQ_NOFLAGS_DESC;
+
+
+typedef struct asl_dma_format_desc
+{
+ UINT8 DescriptorType;
+ UINT8 DmaChannelMask;
+ UINT8 Flags;
+
+} ASL_DMA_FORMAT_DESC;
+
+
+typedef struct asl_start_dependent_desc
+{
+ UINT8 DescriptorType;
+ UINT8 Flags;
+
+} ASL_START_DEPENDENT_DESC;
+
+
+typedef struct asl_start_dependent_noprio_desc
+{
+ UINT8 DescriptorType;
+
+} ASL_START_DEPENDENT_NOPRIO_DESC;
+
+
+typedef struct asl_end_dependent_desc
+{
+ UINT8 DescriptorType;
+
+} ASL_END_DEPENDENT_DESC;
+
+
+typedef struct asl_io_port_desc
+{
+ UINT8 DescriptorType;
+ UINT8 Information;
+ UINT16 AddressMin;
+ UINT16 AddressMax;
+ UINT8 Alignment;
+ UINT8 Length;
+
+} ASL_IO_PORT_DESC;
+
+
+typedef struct asl_fixed_io_port_desc
+{
+ UINT8 DescriptorType;
+ UINT16 BaseAddress;
+ UINT8 Length;
+
+} ASL_FIXED_IO_PORT_DESC;
+
+
+typedef struct asl_small_vendor_desc
+{
+ UINT8 DescriptorType;
+ UINT8 VendorDefined[7];
+
+} ASL_SMALL_VENDOR_DESC;
+
+
+typedef struct asl_end_tag_desc
+{
+ UINT8 DescriptorType;
+ UINT8 Checksum;
+
+} ASL_END_TAG_DESC;
+
+
+/* LARGE descriptors */
+
+typedef struct asl_memory_24_desc
+{
+ UINT8 DescriptorType;
+ UINT16 Length;
+ UINT8 Information;
+ UINT16 AddressMin;
+ UINT16 AddressMax;
+ UINT16 Alignment;
+ UINT16 RangeLength;
+
+} ASL_MEMORY_24_DESC;
+
+
+typedef struct asl_large_vendor_desc
+{
+ UINT8 DescriptorType;
+ UINT16 Length;
+ UINT8 VendorDefined[1];
+
+} ASL_LARGE_VENDOR_DESC;
+
+
+typedef struct asl_memory_32_desc
+{
+ UINT8 DescriptorType;
+ UINT16 Length;
+ UINT8 Information;
+ UINT32 AddressMin;
+ UINT32 AddressMax;
+ UINT32 Alignment;
+ UINT32 RangeLength;
+
+} ASL_MEMORY_32_DESC;
+
+
+typedef struct asl_fixed_memory_32_desc
+{
+ UINT8 DescriptorType;
+ UINT16 Length;
+ UINT8 Information;
+ UINT32 BaseAddress;
+ UINT32 RangeLength;
+
+} ASL_FIXED_MEMORY_32_DESC;
+
+
+typedef struct asl_qword_address_desc
+{
+ UINT8 DescriptorType;
+ UINT16 Length;
+ UINT8 ResourceType;
+ UINT8 Flags;
+ UINT8 SpecificFlags;
+ UINT64 Granularity;
+ UINT64 AddressMin;
+ UINT64 AddressMax;
+ UINT64 TranslationOffset;
+ UINT64 AddressLength;
+ UINT8 OptionalFields[2];
+
+} ASL_QWORD_ADDRESS_DESC;
+
+
+typedef struct asl_dword_address_desc
+{
+ UINT8 DescriptorType;
+ UINT16 Length;
+ UINT8 ResourceType;
+ UINT8 Flags;
+ UINT8 SpecificFlags;
+ UINT32 Granularity;
+ UINT32 AddressMin;
+ UINT32 AddressMax;
+ UINT32 TranslationOffset;
+ UINT32 AddressLength;
+ UINT8 OptionalFields[2];
+
+} ASL_DWORD_ADDRESS_DESC;
+
+
+typedef struct asl_word_address_desc
+{
+ UINT8 DescriptorType;
+ UINT16 Length;
+ UINT8 ResourceType;
+ UINT8 Flags;
+ UINT8 SpecificFlags;
+ UINT16 Granularity;
+ UINT16 AddressMin;
+ UINT16 AddressMax;
+ UINT16 TranslationOffset;
+ UINT16 AddressLength;
+ UINT8 OptionalFields[2];
+
+} ASL_WORD_ADDRESS_DESC;
+
+
+typedef struct asl_extended_xrupt_desc
+{
+ UINT8 DescriptorType;
+ UINT16 Length;
+ UINT8 Flags;
+ UINT8 TableLength;
+ UINT32 InterruptNumber[1];
+ /* ResSourceIndex, ResSource optional fields follow */
+
+} ASL_EXTENDED_XRUPT_DESC;
+
+
+typedef struct asl_general_register_desc
+{
+ UINT8 DescriptorType;
+ UINT16 Length;
+ UINT8 AddressSpaceId;
+ UINT8 BitWidth;
+ UINT8 BitOffset;
+ UINT8 Reserved;
+ UINT64 Address;
+
+} ASL_GENERAL_REGISTER_DESC;
+
+/* restore default alignment */
+
+#pragma pack()
+
+/* Union of all resource descriptors, sow we can allocate the worst case */
+
+typedef union asl_resource_desc
+{
+ ASL_IRQ_FORMAT_DESC Irq;
+ ASL_DMA_FORMAT_DESC Dma;
+ ASL_START_DEPENDENT_DESC Std;
+ ASL_END_DEPENDENT_DESC End;
+ ASL_IO_PORT_DESC Iop;
+ ASL_FIXED_IO_PORT_DESC Fio;
+ ASL_SMALL_VENDOR_DESC Smv;
+ ASL_END_TAG_DESC Et;
+
+ ASL_MEMORY_24_DESC M24;
+ ASL_LARGE_VENDOR_DESC Lgv;
+ ASL_MEMORY_32_DESC M32;
+ ASL_FIXED_MEMORY_32_DESC F32;
+ ASL_QWORD_ADDRESS_DESC Qas;
+ ASL_DWORD_ADDRESS_DESC Das;
+ ASL_WORD_ADDRESS_DESC Was;
+ ASL_EXTENDED_XRUPT_DESC Exx;
+ ASL_GENERAL_REGISTER_DESC Grg;
+ UINT32 U32Item;
+ UINT16 U16Item;
+ UINT8 U8Item;
+
+} ASL_RESOURCE_DESC;
+
+
+#define NEXT_RESOURCE_DESC(a,b) (ASL_RESOURCE_DESC *) (((char *) (a)) + sizeof(b))
+
+#define DEFAULT_RESOURCE_DESC_SIZE (sizeof (ASL_RESOURCE_DESC) + sizeof (ASL_END_TAG_DESC))
+
+
+/*
+ * Resource utilities
+ */
+
+ASL_RESOURCE_NODE *
+RsAllocateResourceNode (
+ UINT32 Size);
+
+ void
+RsCreateBitField (
+ ACPI_PARSE_OBJECT *Op,
+ char *Name,
+ UINT32 ByteOffset,
+ UINT32 BitOffset);
+
+void
+RsCreateByteField (
+ ACPI_PARSE_OBJECT *Op,
+ char *Name,
+ UINT32 ByteOffset);
+
+void
+RsSetFlagBits (
+ UINT8 *Flags,
+ ACPI_PARSE_OBJECT *Op,
+ UINT8 Position,
+ UINT8 Default);
+
+ACPI_PARSE_OBJECT *
+RsCompleteNodeAndGetNext (
+ ACPI_PARSE_OBJECT *Op);
+
+ASL_RESOURCE_NODE *
+RsDoOneResourceDescriptor (
+ ACPI_PARSE_OBJECT *DescriptorTypeOp,
+ UINT32 CurrentByteOffset);
+
+UINT32
+RsLinkDescriptorChain (
+ ASL_RESOURCE_NODE **PreviousRnode,
+ ASL_RESOURCE_NODE *Rnode);
+
+
+/*
+ * Small descriptors
+ */
+
+ASL_RESOURCE_NODE *
+RsDoDmaDescriptor (
+ ACPI_PARSE_OBJECT *Op,
+ UINT32 CurrentByteOffset);
+
+ASL_RESOURCE_NODE *
+RsDoEndDependentDescriptor (
+ ACPI_PARSE_OBJECT *Op,
+ UINT32 CurrentByteOffset);
+
+ASL_RESOURCE_NODE *
+RsDoFixedIoDescriptor (
+ ACPI_PARSE_OBJECT *Op,
+ UINT32 CurrentByteOffset);
+
+ASL_RESOURCE_NODE *
+RsDoInterruptDescriptor (
+ ACPI_PARSE_OBJECT *Op,
+ UINT32 CurrentByteOffset);
+
+ASL_RESOURCE_NODE *
+RsDoIoDescriptor (
+ ACPI_PARSE_OBJECT *Op,
+ UINT32 CurrentByteOffset);
+
+ASL_RESOURCE_NODE *
+RsDoIrqDescriptor (
+ ACPI_PARSE_OBJECT *Op,
+ UINT32 CurrentByteOffset);
+
+ASL_RESOURCE_NODE *
+RsDoIrqNoFlagsDescriptor (
+ ACPI_PARSE_OBJECT *Op,
+ UINT32 CurrentByteOffset);
+
+ASL_RESOURCE_NODE *
+RsDoMemory24Descriptor (
+ ACPI_PARSE_OBJECT *Op,
+ UINT32 CurrentByteOffset);
+
+ASL_RESOURCE_NODE *
+RsDoMemory32Descriptor (
+ ACPI_PARSE_OBJECT *Op,
+ UINT32 CurrentByteOffset);
+
+ASL_RESOURCE_NODE *
+RsDoMemory32FixedDescriptor (
+ ACPI_PARSE_OBJECT *Op,
+ UINT32 CurrentByteOffset);
+
+ASL_RESOURCE_NODE *
+RsDoStartDependentDescriptor (
+ ACPI_PARSE_OBJECT *Op,
+ UINT32 CurrentByteOffset);
+
+ASL_RESOURCE_NODE *
+RsDoStartDependentNoPriDescriptor (
+ ACPI_PARSE_OBJECT *Op,
+ UINT32 CurrentByteOffset);
+
+ASL_RESOURCE_NODE *
+RsDoVendorSmallDescriptor (
+ ACPI_PARSE_OBJECT *Op,
+ UINT32 CurrentByteOffset);
+
+
+/*
+ * Large descriptors
+ */
+
+UINT32
+RsGetStringDataLength (
+ ACPI_PARSE_OBJECT *InitializerOp);
+
+ASL_RESOURCE_NODE *
+RsDoDwordIoDescriptor (
+ ACPI_PARSE_OBJECT *Op,
+ UINT32 CurrentByteOffset);
+
+ASL_RESOURCE_NODE *
+RsDoDwordMemoryDescriptor (
+ ACPI_PARSE_OBJECT *Op,
+ UINT32 CurrentByteOffset);
+
+ASL_RESOURCE_NODE *
+RsDoQwordIoDescriptor (
+ ACPI_PARSE_OBJECT *Op,
+ UINT32 CurrentByteOffset);
+
+ASL_RESOURCE_NODE *
+RsDoQwordMemoryDescriptor (
+ ACPI_PARSE_OBJECT *Op,
+ UINT32 CurrentByteOffset);
+
+ASL_RESOURCE_NODE *
+RsDoWordIoDescriptor (
+ ACPI_PARSE_OBJECT *Op,
+ UINT32 CurrentByteOffset);
+
+ASL_RESOURCE_NODE *
+RsDoWordBusNumberDescriptor (
+ ACPI_PARSE_OBJECT *Op,
+ UINT32 CurrentByteOffset);
+
+ASL_RESOURCE_NODE *
+RsDoVendorLargeDescriptor (
+ ACPI_PARSE_OBJECT *Op,
+ UINT32 CurrentByteOffset);
+
+ASL_RESOURCE_NODE *
+RsDoGeneralRegisterDescriptor (
+ ACPI_PARSE_OBJECT *Op,
+ UINT32 CurrentByteOffset);
+
+
+#endif
+
diff --git a/sys/contrib/dev/acpica/dbcmds.c b/sys/contrib/dev/acpica/dbcmds.c
index 271301dc00c3..49927874dad7 100644
--- a/sys/contrib/dev/acpica/dbcmds.c
+++ b/sys/contrib/dev/acpica/dbcmds.c
@@ -1,7 +1,7 @@
/*******************************************************************************
*
* Module Name: dbcmds - debug commands and output routines
- * $Revision: 84 $
+ * $Revision: 85 $
*
******************************************************************************/
@@ -122,6 +122,7 @@
#include "acevents.h"
#include "acdebug.h"
#include "acresrc.h"
+#include "acdisasm.h"
#ifdef ENABLE_DEBUGGER
@@ -448,7 +449,7 @@ AcpiDbDisassembleAml (
NumStatements = ACPI_STRTOUL (Statements, NULL, 0);
}
- AcpiDbDisplayOp (NULL, Op, NumStatements);
+ AcpiDmDisassemble (NULL, Op, NumStatements);
}
diff --git a/sys/contrib/dev/acpica/dbdisply.c b/sys/contrib/dev/acpica/dbdisply.c
index 39783c648a2d..6013450df0a8 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: 75 $
+ * $Revision: 76 $
*
******************************************************************************/
@@ -411,6 +411,12 @@ AcpiDbDecodeInternalObject (
return;
}
+ if (ACPI_GET_DESCRIPTOR_TYPE (ObjDesc) != ACPI_DESC_TYPE_OPERAND)
+ {
+ AcpiOsPrintf ("%p", ObjDesc);
+ return;
+ }
+
AcpiOsPrintf (" %s", AcpiUtGetObjectTypeName (ObjDesc));
switch (ACPI_GET_OBJECT_TYPE (ObjDesc))
@@ -449,7 +455,8 @@ AcpiDbDecodeInternalObject (
default:
- /* No additional display for other types */
+
+ AcpiOsPrintf ("%p", ObjDesc);
break;
}
}
@@ -457,6 +464,40 @@ AcpiDbDecodeInternalObject (
/*******************************************************************************
*
+ * FUNCTION: AcpiDbDecodeNode
+ *
+ * PARAMETERS: Node - Object to be displayed
+ *
+ * RETURN: None
+ *
+ * DESCRIPTION: Short display of a namespace node
+ *
+ ******************************************************************************/
+
+void
+AcpiDbDecodeNode (
+ ACPI_NAMESPACE_NODE *Node)
+{
+
+
+ AcpiOsPrintf ("<Node> Name %4.4s Type-%s",
+ Node->Name.Ascii, AcpiUtGetTypeName (Node->Type));
+
+ if (Node->Flags & ANOBJ_METHOD_ARG)
+ {
+ AcpiOsPrintf (" [Method Arg]");
+ }
+ if (Node->Flags & ANOBJ_METHOD_LOCAL)
+ {
+ AcpiOsPrintf (" [Method Local]");
+ }
+
+ AcpiDbDecodeInternalObject (AcpiNsGetAttachedObject (Node));
+}
+
+
+/*******************************************************************************
+ *
* FUNCTION: AcpiDbDisplayInternalObject
*
* PARAMETERS: ObjDesc - Object to be displayed
@@ -496,18 +537,7 @@ AcpiDbDisplayInternalObject (
case ACPI_DESC_TYPE_NAMED:
- AcpiOsPrintf ("<Node> Name %4.4s Type-%s",
- ((ACPI_NAMESPACE_NODE *)ObjDesc)->Name.Ascii,
- AcpiUtGetTypeName (((ACPI_NAMESPACE_NODE *) ObjDesc)->Type));
-
- if (((ACPI_NAMESPACE_NODE *) ObjDesc)->Flags & ANOBJ_METHOD_ARG)
- {
- AcpiOsPrintf (" [Method Arg]");
- }
- if (((ACPI_NAMESPACE_NODE *) ObjDesc)->Flags & ANOBJ_METHOD_LOCAL)
- {
- AcpiOsPrintf (" [Method Local]");
- }
+ AcpiDbDecodeNode ((ACPI_NAMESPACE_NODE *) ObjDesc);
break;
@@ -525,9 +555,11 @@ AcpiDbDisplayInternalObject (
switch (ACPI_GET_OBJECT_TYPE (ObjDesc))
{
case INTERNAL_TYPE_REFERENCE:
+
switch (ObjDesc->Reference.Opcode)
{
case AML_LOCAL_OP:
+
AcpiOsPrintf ("[Local%d] ", ObjDesc->Reference.Offset);
if (WalkState)
{
@@ -537,7 +569,9 @@ AcpiDbDisplayInternalObject (
}
break;
+
case AML_ARG_OP:
+
AcpiOsPrintf ("[Arg%d] ", ObjDesc->Reference.Offset);
if (WalkState)
{
@@ -547,24 +581,52 @@ AcpiDbDisplayInternalObject (
}
break;
+
case AML_DEBUG_OP:
+
AcpiOsPrintf ("[Debug] ");
break;
+
case AML_INDEX_OP:
- AcpiOsPrintf ("[Index] ");
+
+ AcpiOsPrintf ("[Index] ");
AcpiDbDecodeInternalObject (ObjDesc->Reference.Object);
break;
+
+ case AML_REF_OF_OP:
+
+ AcpiOsPrintf ("[Reference] ");
+
+ /* Reference can be to a Node or an Operand object */
+
+ switch (ACPI_GET_DESCRIPTOR_TYPE (ObjDesc->Reference.Object))
+ {
+ case ACPI_DESC_TYPE_NAMED:
+ AcpiDbDecodeNode (ObjDesc->Reference.Object);
+ break;
+
+ case ACPI_DESC_TYPE_OPERAND:
+ AcpiDbDecodeInternalObject (ObjDesc->Reference.Object);
+ break;
+
+ default:
+ break;
+ }
+ break;
+
+
default:
+
AcpiOsPrintf ("Unknown Reference opcode %X\n",
ObjDesc->Reference.Opcode);
break;
-
}
break;
default:
+
AcpiOsPrintf ("<Obj> ");
AcpiOsPrintf (" ");
AcpiDbDecodeInternalObject (ObjDesc);
diff --git a/sys/contrib/dev/acpica/dbexec.c b/sys/contrib/dev/acpica/dbexec.c
index e2176ecdfecd..ddb8eb076055 100644
--- a/sys/contrib/dev/acpica/dbexec.c
+++ b/sys/contrib/dev/acpica/dbexec.c
@@ -1,7 +1,7 @@
/*******************************************************************************
*
* Module Name: dbexec - debugger control method execution
- * $Revision: 41 $
+ * $Revision: 42 $
*
******************************************************************************/
@@ -322,6 +322,9 @@ AcpiDbExecute (
AcpiGbl_DbMethodInfo.Args = Args;
AcpiGbl_DbMethodInfo.Flags = Flags;
+ ReturnObj.Pointer = NULL;
+ ReturnObj.Length = ACPI_ALLOCATE_BUFFER;
+
AcpiDbExecuteSetup (&AcpiGbl_DbMethodInfo);
Status = AcpiDbExecuteMethod (&AcpiGbl_DbMethodInfo, &ReturnObj);
@@ -363,6 +366,11 @@ AcpiDbExecute (
AcpiGbl_DbMethodInfo.Pathname, ReturnObj.Pointer, ReturnObj.Length);
AcpiDbDumpObject (ReturnObj.Pointer, 1);
}
+ else
+ {
+ AcpiOsPrintf ("No return object from execution of %s\n",
+ AcpiGbl_DbMethodInfo.Pathname);
+ }
}
AcpiDbSetOutputDestination (ACPI_DB_CONSOLE_OUTPUT);
diff --git a/sys/contrib/dev/acpica/dbfileio.c b/sys/contrib/dev/acpica/dbfileio.c
index 42d0551bc997..c04f5311d328 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: 63 $
+ * $Revision: 67 $
*
******************************************************************************/
@@ -121,7 +121,7 @@
#include "acnamesp.h"
#include "actables.h"
-#ifdef ENABLE_DEBUGGER
+#if (defined ENABLE_DEBUGGER || defined ACPI_DISASSEMBLER)
#define _COMPONENT ACPI_DEBUGGER
ACPI_MODULE_NAME ("dbfileio")
@@ -180,6 +180,7 @@ AcpiDbMatchArgument (
}
+#ifdef ENABLE_DEBUGGER
/*******************************************************************************
*
* FUNCTION: AcpiDbCloseDebugFile
@@ -245,6 +246,7 @@ AcpiDbOpenDebugFile (
#endif
}
+#endif
#ifdef ACPI_APPLICATION
@@ -288,7 +290,7 @@ AcpiDbLoadTable(
Status = AcpiTbValidateTableHeader (&TableHeader);
if ((ACPI_FAILURE (Status)) ||
- (TableHeader.Length > 524288)) /* 1/2 Mbyte should be enough */
+ (TableHeader.Length > 0x800000)) /* 8 Mbyte should be enough */
{
AcpiOsPrintf ("Table header is invalid!\n");
return (AE_ERROR);
@@ -383,9 +385,14 @@ AeLocalLoadTable (
return_ACPI_STATUS (AE_BAD_PARAMETER);
}
- /* Install the new table into the local data structures */
-
TableInfo.Pointer = TablePtr;
+ Status = AcpiTbRecognizeTable (&TableInfo, ACPI_TABLE_SECONDARY);
+ if (ACPI_FAILURE (Status))
+ {
+ return_ACPI_STATUS (Status);
+ }
+
+ /* Install the new table into the local data structures */
Status = AcpiTbInstallTable (&TableInfo);
if (ACPI_FAILURE (Status))
@@ -397,7 +404,7 @@ AeLocalLoadTable (
}
-#ifndef PARSER_ONLY
+#if (!defined (ACPI_NO_METHOD_EXECUTION) && !defined (ACPI_CONSTANT_EVAL_ONLY))
Status = AcpiNsLoadTable (TableInfo.InstalledDesc, AcpiGbl_RootNode);
if (ACPI_FAILURE (Status))
{
@@ -433,7 +440,7 @@ AcpiDbGetAcpiTable (
/* Get the entire file */
- AcpiOsPrintf ("Loading Acpi table from file %s\n", Filename);
+ fprintf (stderr, "Loading Acpi table from file %s\n", Filename);
Status = AcpiDbLoadTable (fp, &AcpiGbl_DbTablePtr, &TableLength);
fclose(fp);
@@ -492,8 +499,8 @@ AcpiDbLoadAcpiTable (
return (Status);
}
- AcpiOsPrintf ("%4.4s at %p successfully installed and loaded\n",
- AcpiGbl_DbTablePtr->Signature, AcpiGbl_DbTablePtr);
+ fprintf (stderr, "Acpi table [%4.4s] successfully installed and loaded\n",
+ AcpiGbl_DbTablePtr->Signature);
AcpiGbl_AcpiHardwarePresent = FALSE;
diff --git a/sys/contrib/dev/acpica/dbxface.c b/sys/contrib/dev/acpica/dbxface.c
index fe2f8c735da0..5bad0632cbba 100644
--- a/sys/contrib/dev/acpica/dbxface.c
+++ b/sys/contrib/dev/acpica/dbxface.c
@@ -1,7 +1,7 @@
/*******************************************************************************
*
* Module Name: dbxface - AML Debugger external interfaces
- * $Revision: 59 $
+ * $Revision: 61 $
*
******************************************************************************/
@@ -118,6 +118,7 @@
#include "acpi.h"
#include "amlcode.h"
#include "acdebug.h"
+#include "acdisasm.h"
#ifdef ENABLE_DEBUGGER
@@ -268,7 +269,7 @@ AcpiDbSingleStep (
/* Now we can display it */
- AcpiDbDisplayOp (WalkState, DisplayOp, ACPI_UINT32_MAX);
+ AcpiDmDisassemble (WalkState, DisplayOp, ACPI_UINT32_MAX);
if ((Op->Common.AmlOpcode == AML_IF_OP) ||
(Op->Common.AmlOpcode == AML_WHILE_OP))
@@ -476,7 +477,6 @@ AcpiDbInitialize (void)
if (!AcpiGbl_DbOpt_verbose)
{
- AcpiGbl_DbDisasmIndent = " ";
AcpiGbl_DbOpt_disasm = TRUE;
AcpiGbl_DbOpt_stats = FALSE;
}
diff --git a/sys/contrib/dev/acpica/dmbuffer.c b/sys/contrib/dev/acpica/dmbuffer.c
new file mode 100644
index 000000000000..b34941577288
--- /dev/null
+++ b/sys/contrib/dev/acpica/dmbuffer.c
@@ -0,0 +1,627 @@
+/*******************************************************************************
+ *
+ * Module Name: dmbuffer - AML disassembler, buffer and string support
+ * $Revision: 5 $
+ *
+ ******************************************************************************/
+
+/******************************************************************************
+ *
+ * 1. Copyright Notice
+ *
+ * Some or all of this work - Copyright (c) 1999 - 2002, Intel Corp.
+ * All rights reserved.
+ *
+ * 2. License
+ *
+ * 2.1. This is your license from Intel Corp. under its intellectual property
+ * rights. You may have additional license terms from the party that provided
+ * you this software, covering your right to use that party's intellectual
+ * property rights.
+ *
+ * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a
+ * copy of the source code appearing in this file ("Covered Code") an
+ * irrevocable, perpetual, worldwide license under Intel's copyrights in the
+ * base code distributed originally by Intel ("Original Intel Code") to copy,
+ * make derivatives, distribute, use and display any portion of the Covered
+ * Code in any form, with the right to sublicense such rights; and
+ *
+ * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent
+ * license (with the right to sublicense), under only those claims of Intel
+ * patents that are infringed by the Original Intel Code, to make, use, sell,
+ * offer to sell, and import the Covered Code and derivative works thereof
+ * solely to the minimum extent necessary to exercise the above copyright
+ * license, and in no event shall the patent license extend to any additions
+ * to or modifications of the Original Intel Code. No other license or right
+ * is granted directly or by implication, estoppel or otherwise;
+ *
+ * The above copyright and patent license is granted only if the following
+ * conditions are met:
+ *
+ * 3. Conditions
+ *
+ * 3.1. Redistribution of Source with Rights to Further Distribute Source.
+ * Redistribution of source code of any substantial portion of the Covered
+ * Code or modification with rights to further distribute source must include
+ * the above Copyright Notice, the above License, this list of Conditions,
+ * and the following Disclaimer and Export Compliance provision. In addition,
+ * Licensee must cause all Covered Code to which Licensee contributes to
+ * contain a file documenting the changes Licensee made to create that Covered
+ * Code and the date of any change. Licensee must include in that file the
+ * documentation of any changes made by any predecessor Licensee. Licensee
+ * must include a prominent statement that the modification is derived,
+ * directly or indirectly, from Original Intel Code.
+ *
+ * 3.2. Redistribution of Source with no Rights to Further Distribute Source.
+ * Redistribution of source code of any substantial portion of the Covered
+ * Code or modification without rights to further distribute source must
+ * include the following Disclaimer and Export Compliance provision in the
+ * documentation and/or other materials provided with distribution. In
+ * addition, Licensee may not authorize further sublicense of source of any
+ * portion of the Covered Code, and must include terms to the effect that the
+ * license from Licensee to its licensee is limited to the intellectual
+ * property embodied in the software Licensee provides to its licensee, and
+ * not to intellectual property embodied in modifications its licensee may
+ * make.
+ *
+ * 3.3. Redistribution of Executable. Redistribution in executable form of any
+ * substantial portion of the Covered Code or modification must reproduce the
+ * above Copyright Notice, and the following Disclaimer and Export Compliance
+ * provision in the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * 3.4. Intel retains all right, title, and interest in and to the Original
+ * Intel Code.
+ *
+ * 3.5. Neither the name Intel nor any other trademark owned or controlled by
+ * Intel shall be used in advertising or otherwise to promote the sale, use or
+ * other dealings in products derived from or relating to the Covered Code
+ * without prior written authorization from Intel.
+ *
+ * 4. Disclaimer and Export Compliance
+ *
+ * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED
+ * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE
+ * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE,
+ * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY
+ * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY
+ * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A
+ * PARTICULAR PURPOSE.
+ *
+ * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES
+ * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR
+ * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT,
+ * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY
+ * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL
+ * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS
+ * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY
+ * LIMITED REMEDY.
+ *
+ * 4.3. Licensee shall not export, either directly or indirectly, any of this
+ * software or system incorporating such software without first obtaining any
+ * required license or other approval from the U. S. Department of Commerce or
+ * any other agency or department of the United States Government. In the
+ * event Licensee exports any such software from the United States or
+ * re-exports any such software from a foreign destination, Licensee shall
+ * ensure that the distribution and export/re-export of the software is in
+ * compliance with all laws, regulations, orders, or other restrictions of the
+ * U.S. Export Administration Regulations. Licensee agrees that neither it nor
+ * any of its subsidiaries will export/re-export any technical data, process,
+ * software, or service, directly or indirectly, to any country for which the
+ * United States government or any agency thereof requires an export license,
+ * other governmental approval, or letter of assurance, without first obtaining
+ * such license, approval or letter.
+ *
+ *****************************************************************************/
+
+
+#include "acpi.h"
+#include "acdisasm.h"
+#include "acparser.h"
+#include "amlcode.h"
+
+
+#ifdef ACPI_DISASSEMBLER
+
+#define _COMPONENT ACPI_DEBUGGER
+ ACPI_MODULE_NAME ("dmbuffer")
+
+
+/*******************************************************************************
+ *
+ * FUNCTION: AcpiDmDisasmByteList
+ *
+ * PARAMETERS: Level - Current source code indentation level
+ * ByteData - Pointer to the byte list
+ * ByteCount - Length of the byte list
+ *
+ * RETURN: None
+ *
+ * DESCRIPTION: Dump a list of bytes in Hex format
+ *
+ ******************************************************************************/
+
+void
+AcpiDmDisasmByteList (
+ UINT32 Level,
+ UINT8 *ByteData,
+ UINT32 ByteCount)
+{
+ UINT32 i;
+
+
+ AcpiDmIndent (Level);
+
+ /* Dump the byte list */
+
+ for (i = 0; i < ByteCount; i++)
+ {
+ AcpiOsPrintf ("0x%2.2X", (UINT32) ByteData[i]);
+
+ /* Add comma if there are more bytes to display */
+
+ if (i < (ByteCount -1))
+ {
+ AcpiOsPrintf (", ");
+ }
+
+ /* New line every 8 bytes */
+
+ if ((((i+1) % 8) == 0) && ((i+1) < ByteCount))
+ {
+ AcpiOsPrintf ("\n");
+ AcpiDmIndent (Level);
+ }
+ }
+
+ if (Level)
+ {
+ AcpiOsPrintf ("\n");
+ }
+}
+
+
+/*******************************************************************************
+ *
+ * FUNCTION: AcpiDmByteList
+ *
+ * PARAMETERS: Info - Parse tree walk info
+ * Op - Byte list op
+ *
+ * RETURN: None
+ *
+ * DESCRIPTION: Dump a buffer byte list, handling the various types of buffers.
+ * Buffer type must be already set in the Op DisasmOpcode.
+ *
+ ******************************************************************************/
+
+void
+AcpiDmByteList (
+ ACPI_OP_WALK_INFO *Info,
+ ACPI_PARSE_OBJECT *Op)
+{
+ UINT8 *ByteData;
+ UINT32 ByteCount;
+
+
+ ByteData = Op->Named.Data;
+ ByteCount = Op->Common.Value.Integer32;
+
+ /*
+ * The byte list belongs to a buffer, and can be produced by either
+ * a ResourceTemplate, Unicode, quoted string, or a plain byte list.
+ */
+ switch (Op->Common.Parent->Common.DisasmOpcode)
+ {
+ case ACPI_DASM_RESOURCE:
+
+ AcpiDmResourceDescriptor (Info, ByteData, ByteCount);
+ break;
+
+ case ACPI_DASM_STRING:
+
+ AcpiDmIndent (Info->Level);
+ AcpiDmString ((char *) ByteData);
+ AcpiOsPrintf ("\n");
+ break;
+
+ case ACPI_DASM_UNICODE:
+
+ AcpiDmUnicode (Op);
+ break;
+
+ case ACPI_DASM_BUFFER:
+ default:
+
+ /*
+ * Not a resource, string, or unicode string.
+ * Just dump the buffer
+ */
+ AcpiDmDisasmByteList (Info->Level, ByteData, ByteCount);
+ break;
+ }
+}
+
+
+/*******************************************************************************
+ *
+ * FUNCTION: AcpiDmIsUnicodeBuffer
+ *
+ * PARAMETERS: Op - Buffer Object to be examined
+ *
+ * RETURN: TRUE if buffer contains a UNICODE string
+ *
+ * DESCRIPTION: Determine if a buffer Op contains a Unicode string
+ *
+ ******************************************************************************/
+
+BOOLEAN
+AcpiDmIsUnicodeBuffer (
+ ACPI_PARSE_OBJECT *Op)
+{
+ UINT8 *ByteData;
+ UINT32 ByteCount;
+ UINT32 WordCount;
+ ACPI_PARSE_OBJECT *SizeOp;
+ ACPI_PARSE_OBJECT *NextOp;
+ NATIVE_UINT i;
+
+
+ /* Buffer size is the buffer argument */
+
+ SizeOp = Op->Common.Value.Arg;
+
+ /* Next, the initializer byte list to examine */
+
+ NextOp = SizeOp->Common.Next;
+ if (!NextOp)
+ {
+ return (FALSE);
+ }
+
+ /* Extract the byte list info */
+
+ ByteData = NextOp->Named.Data;
+ ByteCount = NextOp->Common.Value.Integer32;
+ WordCount = ACPI_DIV_2 (ByteCount);
+
+ /*
+ * Unicode string must have an even number of bytes and last
+ * word must be zero
+ */
+ if ((!ByteCount) ||
+ (ByteCount < 4) ||
+ (ByteCount & 1) ||
+ ((UINT16 *) (void *) ByteData)[WordCount - 1] != 0)
+ {
+ return (FALSE);
+ }
+
+ /* For each word, 1st byte must be ascii, 2nd byte must be zero */
+
+ for (i = 0; i < (ByteCount - 2); i += 2)
+ {
+ if ((!ACPI_IS_PRINT (ByteData[i])) ||
+ (ByteData[i + 1] != 0))
+ {
+ return (FALSE);
+ }
+ }
+
+ /* Ignore the Size argument in the disassembly of this buffer op */
+
+ SizeOp->Common.DisasmFlags |= ACPI_PARSEOP_IGNORE;
+ return (TRUE);
+}
+
+
+/*******************************************************************************
+ *
+ * FUNCTION: AcpiDmIsStringBuffer
+ *
+ * PARAMETERS: Op - Buffer Object to be examined
+ *
+ * RETURN: TRUE if buffer contains a ASCII string
+ *
+ * DESCRIPTION: Determine if a buffer Op contains a ASCII string
+ *
+ ******************************************************************************/
+
+BOOLEAN
+AcpiDmIsStringBuffer (
+ ACPI_PARSE_OBJECT *Op)
+{
+ UINT8 *ByteData;
+ UINT32 ByteCount;
+ ACPI_PARSE_OBJECT *SizeOp;
+ ACPI_PARSE_OBJECT *NextOp;
+ UINT32 i;
+
+
+ /* Buffer size is the buffer argument */
+
+ SizeOp = Op->Common.Value.Arg;
+
+ /* Next, the initializer byte list to examine */
+
+ NextOp = SizeOp->Common.Next;
+ if (!NextOp)
+ {
+ return (FALSE);
+ }
+
+ /* Extract the byte list info */
+
+ ByteData = NextOp->Named.Data;
+ ByteCount = NextOp->Common.Value.Integer32;
+
+ /* Last byte must be the null terminator */
+
+ if ((!ByteCount) ||
+ (ByteCount < 2) ||
+ (ByteData[ByteCount-1] != 0))
+ {
+ return (FALSE);
+ }
+
+ for (i = 0; i < (ByteCount - 1); i++)
+ {
+ /* TBD: allow some escapes (non-ascii chars).
+ * they will be handled in the string output routine
+ */
+
+ if (!ACPI_IS_PRINT (ByteData[i]))
+ {
+ return (FALSE);
+ }
+ }
+
+ return (TRUE);
+}
+
+
+/*******************************************************************************
+ *
+ * FUNCTION: AcpiDmString
+ *
+ * PARAMETERS: String - Null terminated ASCII string
+ *
+ * RETURN: None
+ *
+ * DESCRIPTION: Dump an ASCII string with support for ACPI-defined escape
+ * sequences.
+ *
+ ******************************************************************************/
+
+void
+AcpiDmString (
+ char *String)
+{
+ UINT32 i;
+
+
+ if (!String)
+ {
+ AcpiOsPrintf ("<\"NULL STRING PTR\">");
+ return;
+ }
+
+ AcpiOsPrintf ("\"");
+ for (i = 0; String[i]; i++)
+ {
+ /* Escape sequences */
+
+ switch (String[i])
+ {
+ case 0x07:
+ AcpiOsPrintf ("\\a"); /* BELL */
+ break;
+
+ case 0x08:
+ AcpiOsPrintf ("\\b"); /* BACKSPACE */
+ break;
+
+ case 0x0C:
+ AcpiOsPrintf ("\\f"); /* FORMFEED */
+ break;
+
+ case 0x0A:
+ AcpiOsPrintf ("\\n"); /* LINEFEED */
+ break;
+
+ case 0x0D:
+ AcpiOsPrintf ("\\r"); /* CARRIAGE RETURN*/
+ break;
+
+ case 0x09:
+ AcpiOsPrintf ("\\t"); /* HORIZONTAL TAB */
+ break;
+
+ case 0x0B:
+ AcpiOsPrintf ("\\v"); /* VERTICAL TAB */
+ break;
+
+ case '\'': /* Single Quote */
+ case '\"': /* Double Quote */
+ case '\\': /* Backslash */
+ AcpiOsPrintf ("\\%c", (int) String[i]);
+ break;
+
+ default:
+
+ /* Check for printable character or hex escape */
+
+ if (ACPI_IS_PRINT (String[i]))
+ {
+ /* This is a normal character */
+
+ AcpiOsPrintf ("%c", (int) String[i]);
+ }
+ else
+ {
+ /* All others will be Hex escapes */
+
+ AcpiOsPrintf ("\\x%2.2X", (INT32) String[i]);
+ }
+ break;
+ }
+ }
+ AcpiOsPrintf ("\"");
+}
+
+
+/*******************************************************************************
+ *
+ * FUNCTION: AcpiDmUnicode
+ *
+ * PARAMETERS: Op - Byte List op containing Unicode string
+ *
+ * RETURN: None
+ *
+ * DESCRIPTION: Dump Unicode string as a standard ASCII string. (Remove
+ * the extra zero bytes).
+ *
+ ******************************************************************************/
+
+void
+AcpiDmUnicode (
+ ACPI_PARSE_OBJECT *Op)
+{
+ UINT16 *WordData;
+ UINT32 WordCount;
+ UINT32 i;
+
+
+ /* Extract the buffer info as a WORD buffer */
+
+ WordData = ACPI_CAST_PTR (UINT16, Op->Named.Data);
+ WordCount = ACPI_DIV_2 (Op->Common.Value.Integer32);
+
+
+ AcpiOsPrintf ("\"");
+
+ /* Write every other byte as an ASCII character */
+
+ for (i = 0; i < (WordCount - 1); i++)
+ {
+ AcpiOsPrintf ("%c", (int) WordData[i]);
+ }
+
+ AcpiOsPrintf ("\")");
+}
+
+
+/*******************************************************************************
+ *
+ * FUNCTION: AcpiIsEisaId
+ *
+ * PARAMETERS: Op - Op to be examined
+ *
+ * RETURN: None
+ *
+ * DESCRIPTION: Determine if an Op can be converted to an EisaId.
+ *
+ ******************************************************************************/
+
+void
+AcpiIsEisaId (
+ ACPI_PARSE_OBJECT *Op)
+{
+ UINT32 Name;
+ UINT32 BigEndianId;
+ ACPI_PARSE_OBJECT *NextOp;
+ NATIVE_UINT i;
+ UINT32 Prefix[3];
+
+
+ /* Get the NameSegment */
+
+ Name = AcpiPsGetName (Op);
+ if (!Name)
+ {
+ return;
+ }
+
+ /* We are looking for _HID */
+
+ if (ACPI_STRNCMP ((char *) &Name, "_HID", 4))
+ {
+ return;
+ }
+
+ /* The parameter must be either a word or a dword */
+
+ NextOp = AcpiPsGetDepthNext (NULL, Op);
+ if ((NextOp->Common.AmlOpcode != AML_DWORD_OP) &&
+ (NextOp->Common.AmlOpcode != AML_WORD_OP))
+ {
+ return;
+ }
+
+ /* Swap from little-endian to big-endian to simplify conversion */
+
+ BigEndianId = AcpiUtDwordByteSwap (NextOp->Common.Value.Integer32);
+
+ /* Create the 3 leading ASCII letters */
+
+ Prefix[0] = ((BigEndianId >> 26) & 0x1F) + 0x40;
+ Prefix[1] = ((BigEndianId >> 21) & 0x1F) + 0x40;
+ Prefix[2] = ((BigEndianId >> 16) & 0x1F) + 0x40;
+
+ /* Verify that all 3 are ascii and alpha */
+
+ for (i = 0; i < 3; i++)
+ {
+ if (!ACPI_IS_ASCII (Prefix[i]) ||
+ !ACPI_IS_ALPHA (Prefix[i]))
+ {
+ return;
+ }
+ }
+
+ /* OK - mark this node as convertable to an EISA ID */
+
+ NextOp->Common.DisasmOpcode = ACPI_DASM_EISAID;
+}
+
+
+/*******************************************************************************
+ *
+ * FUNCTION: AcpiDmEisaId
+ *
+ * PARAMETERS: EncodedId - Raw encoded EISA ID.
+ *
+ * RETURN: None
+ *
+ * DESCRIPTION: Convert an encoded EISAID back to the original ASCII String.
+ *
+ ******************************************************************************/
+
+void
+AcpiDmEisaId (
+ UINT32 EncodedId)
+{
+ UINT32 BigEndianId;
+
+
+ /* Swap from little-endian to big-endian to simplify conversion */
+
+ BigEndianId = AcpiUtDwordByteSwap (EncodedId);
+
+
+ /* Split to form "AAANNNN" string */
+
+ AcpiOsPrintf ("EisaId (\"%c%c%c%4.4X\")",
+
+ /* Three Alpha characters (AAA), 5 bits each */
+
+ (int) ((BigEndianId >> 26) & 0x1F) + 0x40,
+ (int) ((BigEndianId >> 21) & 0x1F) + 0x40,
+ (int) ((BigEndianId >> 16) & 0x1F) + 0x40,
+
+ /* Numeric part (NNNN) is simply the lower 16 bits */
+
+ (UINT32) (BigEndianId & 0xFFFF));
+}
+
+#endif
diff --git a/sys/contrib/dev/acpica/dmnames.c b/sys/contrib/dev/acpica/dmnames.c
new file mode 100644
index 000000000000..b773c917bce5
--- /dev/null
+++ b/sys/contrib/dev/acpica/dmnames.c
@@ -0,0 +1,541 @@
+/*******************************************************************************
+ *
+ * Module Name: dmnames - AML disassembler, names, namestrings, pathnames
+ * $Revision: 2 $
+ *
+ ******************************************************************************/
+
+/******************************************************************************
+ *
+ * 1. Copyright Notice
+ *
+ * Some or all of this work - Copyright (c) 1999 - 2002, Intel Corp.
+ * All rights reserved.
+ *
+ * 2. License
+ *
+ * 2.1. This is your license from Intel Corp. under its intellectual property
+ * rights. You may have additional license terms from the party that provided
+ * you this software, covering your right to use that party's intellectual
+ * property rights.
+ *
+ * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a
+ * copy of the source code appearing in this file ("Covered Code") an
+ * irrevocable, perpetual, worldwide license under Intel's copyrights in the
+ * base code distributed originally by Intel ("Original Intel Code") to copy,
+ * make derivatives, distribute, use and display any portion of the Covered
+ * Code in any form, with the right to sublicense such rights; and
+ *
+ * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent
+ * license (with the right to sublicense), under only those claims of Intel
+ * patents that are infringed by the Original Intel Code, to make, use, sell,
+ * offer to sell, and import the Covered Code and derivative works thereof
+ * solely to the minimum extent necessary to exercise the above copyright
+ * license, and in no event shall the patent license extend to any additions
+ * to or modifications of the Original Intel Code. No other license or right
+ * is granted directly or by implication, estoppel or otherwise;
+ *
+ * The above copyright and patent license is granted only if the following
+ * conditions are met:
+ *
+ * 3. Conditions
+ *
+ * 3.1. Redistribution of Source with Rights to Further Distribute Source.
+ * Redistribution of source code of any substantial portion of the Covered
+ * Code or modification with rights to further distribute source must include
+ * the above Copyright Notice, the above License, this list of Conditions,
+ * and the following Disclaimer and Export Compliance provision. In addition,
+ * Licensee must cause all Covered Code to which Licensee contributes to
+ * contain a file documenting the changes Licensee made to create that Covered
+ * Code and the date of any change. Licensee must include in that file the
+ * documentation of any changes made by any predecessor Licensee. Licensee
+ * must include a prominent statement that the modification is derived,
+ * directly or indirectly, from Original Intel Code.
+ *
+ * 3.2. Redistribution of Source with no Rights to Further Distribute Source.
+ * Redistribution of source code of any substantial portion of the Covered
+ * Code or modification without rights to further distribute source must
+ * include the following Disclaimer and Export Compliance provision in the
+ * documentation and/or other materials provided with distribution. In
+ * addition, Licensee may not authorize further sublicense of source of any
+ * portion of the Covered Code, and must include terms to the effect that the
+ * license from Licensee to its licensee is limited to the intellectual
+ * property embodied in the software Licensee provides to its licensee, and
+ * not to intellectual property embodied in modifications its licensee may
+ * make.
+ *
+ * 3.3. Redistribution of Executable. Redistribution in executable form of any
+ * substantial portion of the Covered Code or modification must reproduce the
+ * above Copyright Notice, and the following Disclaimer and Export Compliance
+ * provision in the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * 3.4. Intel retains all right, title, and interest in and to the Original
+ * Intel Code.
+ *
+ * 3.5. Neither the name Intel nor any other trademark owned or controlled by
+ * Intel shall be used in advertising or otherwise to promote the sale, use or
+ * other dealings in products derived from or relating to the Covered Code
+ * without prior written authorization from Intel.
+ *
+ * 4. Disclaimer and Export Compliance
+ *
+ * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED
+ * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE
+ * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE,
+ * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY
+ * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY
+ * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A
+ * PARTICULAR PURPOSE.
+ *
+ * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES
+ * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR
+ * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT,
+ * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY
+ * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL
+ * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS
+ * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY
+ * LIMITED REMEDY.
+ *
+ * 4.3. Licensee shall not export, either directly or indirectly, any of this
+ * software or system incorporating such software without first obtaining any
+ * required license or other approval from the U. S. Department of Commerce or
+ * any other agency or department of the United States Government. In the
+ * event Licensee exports any such software from the United States or
+ * re-exports any such software from a foreign destination, Licensee shall
+ * ensure that the distribution and export/re-export of the software is in
+ * compliance with all laws, regulations, orders, or other restrictions of the
+ * U.S. Export Administration Regulations. Licensee agrees that neither it nor
+ * any of its subsidiaries will export/re-export any technical data, process,
+ * software, or service, directly or indirectly, to any country for which the
+ * United States government or any agency thereof requires an export license,
+ * other governmental approval, or letter of assurance, without first obtaining
+ * such license, approval or letter.
+ *
+ *****************************************************************************/
+
+
+#include "acpi.h"
+#include "acparser.h"
+#include "amlcode.h"
+#include "acnamesp.h"
+#include "acdisasm.h"
+
+
+#ifdef ACPI_DISASSEMBLER
+
+#define _COMPONENT ACPI_DEBUGGER
+ ACPI_MODULE_NAME ("dmnames")
+
+
+/*******************************************************************************
+ *
+ * FUNCTION: AcpiDmValidateName
+ *
+ * PARAMETERS: Name - 4 character ACPI name
+ *
+ * RETURN: None
+ *
+ * DESCRIPTION: Lookup the name
+ *
+ ******************************************************************************/
+
+void
+AcpiDmValidateName (
+ char *Name,
+ ACPI_PARSE_OBJECT *Op)
+{
+#ifdef PARSER_ONLY
+ ACPI_PARSE_OBJECT *TargetOp;
+
+
+ if ((!Name) ||
+ (!Op->Common.Parent))
+ {
+ return;
+ }
+
+ TargetOp = AcpiPsFind (Op, Name, 0, 0);
+ if (!TargetOp)
+ {
+ /*
+ * Didn't find the name in the parse tree. This may be
+ * a problem, or it may simply be one of the predefined names
+ * (such as _OS_). Rather than worry about looking up all
+ * the predefined names, just display the name as given
+ */
+ AcpiOsPrintf (" /**** Name not found or not accessible from this scope ****/ ");
+ }
+#endif
+
+}
+
+
+/*******************************************************************************
+ *
+ * FUNCTION: AcpiDmDumpName
+ *
+ * PARAMETERS: Name - 4 character ACPI name
+ *
+ * RETURN: Final length of name
+ *
+ * DESCRIPTION: Dump an ACPI name, minus any trailing underscores.
+ *
+ ******************************************************************************/
+
+UINT32
+AcpiDmDumpName (
+ char *Name)
+{
+ UINT32 i;
+ UINT32 Length;
+ char *End = Name + ACPI_NAME_SIZE;
+
+
+ for (i = 0; i < ACPI_NAME_SIZE; i++)
+ {
+ if (Name[i] != '_')
+ {
+ End = &Name[i];
+ }
+ }
+
+ Length = (UINT32)(End - Name) + 1;
+ for (i = 0; i < Length; i++)
+ {
+ AcpiOsPrintf ("%c", Name[i]);
+ }
+
+ return (Length);
+}
+
+
+/*******************************************************************************
+ *
+ * FUNCTION: AcpiPsDisplayObjectPathname
+ *
+ * PARAMETERS: WalkState - Current walk state
+ * Op - Object whose pathname is to be obtained
+ *
+ * RETURN: Status
+ *
+ * DESCRIPTION: Diplay the pathname associated with a named object. Two
+ * versions. One searches the parse tree (for parser-only
+ * applications suchas AcpiDump), and the other searches the
+ * ACPI namespace (the parse tree is probably deleted)
+ *
+ ******************************************************************************/
+
+#ifdef PARSER_ONLY
+
+ACPI_STATUS
+AcpiPsDisplayObjectPathname (
+ ACPI_WALK_STATE *WalkState,
+ ACPI_PARSE_OBJECT *Op)
+{
+ ACPI_PARSE_OBJECT *TargetOp;
+ char *Name;
+
+
+ if (Op->Common.Flags & ACPI_PARSEOP_GENERIC)
+ {
+ Name = Op->Common.Value.Name;
+ if (Name[0] == '\\')
+ {
+ AcpiOsPrintf (" (Fully Qualified Pathname)");
+ return (AE_OK);
+ }
+ }
+ else
+ {
+ Name = (char *) &Op->Named.Name;
+ }
+
+ /* Search parent tree up to the root if necessary */
+
+ TargetOp = AcpiPsFind (Op, Name, 0, 0);
+ if (!TargetOp)
+ {
+ /*
+ * Didn't find the name in the parse tree. This may be
+ * a problem, or it may simply be one of the predefined names
+ * (such as _OS_). Rather than worry about looking up all
+ * the predefined names, just display the name as given
+ */
+ AcpiOsPrintf (" **** Path not found in parse tree");
+ }
+ else
+ {
+ /* The target was found, print the name and complete path */
+
+ AcpiOsPrintf (" (Path ");
+ AcpiDmDisplayPath (TargetOp);
+ AcpiOsPrintf (")");
+ }
+
+ return (AE_OK);
+}
+
+#else
+
+ACPI_STATUS
+AcpiPsDisplayObjectPathname (
+ ACPI_WALK_STATE *WalkState,
+ ACPI_PARSE_OBJECT *Op)
+{
+ ACPI_STATUS Status;
+ ACPI_NAMESPACE_NODE *Node;
+ ACPI_BUFFER Buffer;
+ UINT32 DebugLevel;
+
+
+ /* Save current debug level so we don't get extraneous debug output */
+
+ DebugLevel = AcpiDbgLevel;
+ AcpiDbgLevel = 0;
+
+ /* Just get the Node out of the Op object */
+
+ Node = Op->Common.Node;
+ if (!Node)
+ {
+ /* Node not defined in this scope, look it up */
+
+ Status = AcpiNsLookup (WalkState->ScopeInfo, Op->Common.Value.String, ACPI_TYPE_ANY,
+ ACPI_IMODE_EXECUTE, ACPI_NS_SEARCH_PARENT, WalkState, &(Node));
+
+ if (ACPI_FAILURE (Status))
+ {
+ /*
+ * We can't get the pathname since the object
+ * is not in the namespace. This can happen during single
+ * stepping where a dynamic named object is *about* to be created.
+ */
+ AcpiOsPrintf (" [Path not found]");
+ goto Exit;
+ }
+
+ /* Save it for next time. */
+
+ Op->Common.Node = Node;
+ }
+
+ /* Convert NamedDesc/handle to a full pathname */
+
+ Buffer.Length = ACPI_ALLOCATE_LOCAL_BUFFER;
+ Status = AcpiNsHandleToPathname (Node, &Buffer);
+ if (ACPI_FAILURE (Status))
+ {
+ AcpiOsPrintf ("****Could not get pathname****)");
+ goto Exit;
+ }
+
+ AcpiOsPrintf (" (Path %s)", (char *) Buffer.Pointer);
+ ACPI_MEM_FREE (Buffer.Pointer);
+
+
+Exit:
+ /* Restore the debug level */
+
+ AcpiDbgLevel = DebugLevel;
+ return (Status);
+}
+
+#endif
+
+
+/*******************************************************************************
+ *
+ * FUNCTION: AcpiDmNamestring
+ *
+ * PARAMETERS: Name - ACPI Name string to store
+ *
+ * RETURN: None
+ *
+ * DESCRIPTION: Decode an ACPI namestring. Handles prefix characters
+ *
+ ******************************************************************************/
+
+void
+AcpiDmNamestring (
+ NATIVE_CHAR *Name)
+{
+ UINT32 SegCount;
+
+
+ if (!Name)
+ {
+ return;
+ }
+
+ /* Handle all Scope Prefix operators */
+
+ while (AcpiPsIsPrefixChar (ACPI_GET8 (Name)))
+ {
+ /* Append prefix character */
+
+ AcpiOsPrintf ("%1c", ACPI_GET8 (Name));
+ Name++;
+ }
+
+ switch (ACPI_GET8 (Name))
+ {
+ case 0:
+ SegCount = 0;
+ break;
+
+ case AML_DUAL_NAME_PREFIX:
+ SegCount = 2;
+ Name++;
+ break;
+
+ case AML_MULTI_NAME_PREFIX_OP:
+ SegCount = (UINT32) ACPI_GET8 (Name + 1);
+ Name += 2;
+ break;
+
+ default:
+ SegCount = 1;
+ break;
+ }
+
+ while (SegCount)
+ {
+ /* Append Name segment */
+
+ AcpiDmDumpName ((char *) Name);
+
+ SegCount--;
+ if (SegCount)
+ {
+ /* Not last name, append dot separator */
+
+ AcpiOsPrintf (".");
+ }
+ Name += ACPI_NAME_SIZE;
+ }
+}
+
+
+/*******************************************************************************
+ *
+ * FUNCTION: AcpiDmDisplayPath
+ *
+ * PARAMETERS: Op - Named Op whose path is to be constructed
+ *
+ * RETURN: None
+ *
+ * DESCRIPTION: Walk backwards from current scope and display the name
+ * of each previous level of scope up to the root scope
+ * (like "pwd" does with file systems)
+ *
+ ******************************************************************************/
+
+void
+AcpiDmDisplayPath (
+ ACPI_PARSE_OBJECT *Op)
+{
+ ACPI_PARSE_OBJECT *Prev;
+ ACPI_PARSE_OBJECT *Search;
+ UINT32 Name;
+ BOOLEAN DoDot = FALSE;
+ ACPI_PARSE_OBJECT *NamePath;
+ const ACPI_OPCODE_INFO *OpInfo;
+
+
+ /* We are only interested in named objects */
+
+ OpInfo = AcpiPsGetOpcodeInfo (Op->Common.AmlOpcode);
+ if (!(OpInfo->Flags & AML_NSNODE))
+ {
+ return;
+ }
+
+ if (OpInfo->Flags & AML_CREATE)
+ {
+ /* Field creation - check for a fully qualified namepath */
+
+ if (Op->Common.AmlOpcode == AML_CREATE_FIELD_OP)
+ {
+ NamePath = AcpiPsGetArg (Op, 3);
+ }
+ else
+ {
+ NamePath = AcpiPsGetArg (Op, 2);
+ }
+
+ if ((NamePath) &&
+ (NamePath->Common.Value.String) &&
+ (NamePath->Common.Value.String[0] == '\\'))
+ {
+ AcpiDmNamestring (NamePath->Common.Value.String);
+ return;
+ }
+ }
+
+ Prev = NULL; /* Start with Root Node */
+
+ while (Prev != Op)
+ {
+ /* Search upwards in the tree to find scope with "prev" as its parent */
+
+ Search = Op;
+ for (; ;)
+ {
+ if (Search->Common.Parent == Prev)
+ {
+ break;
+ }
+
+ /* Go up one level */
+
+ Search = Search->Common.Parent;
+ }
+
+ if (Prev)
+ {
+ OpInfo = AcpiPsGetOpcodeInfo (Search->Common.AmlOpcode);
+ if (!(OpInfo->Flags & AML_FIELD))
+ {
+ /* Below root scope, append scope name */
+
+ if (DoDot)
+ {
+ /* Append dot */
+
+ AcpiOsPrintf (".");
+ }
+
+ if (OpInfo->Flags & AML_CREATE)
+ {
+ if (Op->Common.AmlOpcode == AML_CREATE_FIELD_OP)
+ {
+ NamePath = AcpiPsGetArg (Op, 3);
+ }
+ else
+ {
+ NamePath = AcpiPsGetArg (Op, 2);
+ }
+
+ if ((NamePath) &&
+ (NamePath->Common.Value.String))
+ {
+ AcpiDmDumpName (NamePath->Common.Value.String);
+ }
+ }
+ else
+ {
+ Name = AcpiPsGetName (Search);
+ AcpiDmDumpName ((char *) &Name);
+ }
+
+ DoDot = TRUE;
+ }
+ }
+ Prev = Search;
+ }
+}
+
+#endif
+
+
diff --git a/sys/contrib/dev/acpica/dmopcode.c b/sys/contrib/dev/acpica/dmopcode.c
new file mode 100644
index 000000000000..b08042e987cb
--- /dev/null
+++ b/sys/contrib/dev/acpica/dmopcode.c
@@ -0,0 +1,614 @@
+/*******************************************************************************
+ *
+ * Module Name: dmopcode - AML disassembler, specific AML opcodes
+ * $Revision: 75 $
+ *
+ ******************************************************************************/
+
+/******************************************************************************
+ *
+ * 1. Copyright Notice
+ *
+ * Some or all of this work - Copyright (c) 1999 - 2002, Intel Corp.
+ * All rights reserved.
+ *
+ * 2. License
+ *
+ * 2.1. This is your license from Intel Corp. under its intellectual property
+ * rights. You may have additional license terms from the party that provided
+ * you this software, covering your right to use that party's intellectual
+ * property rights.
+ *
+ * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a
+ * copy of the source code appearing in this file ("Covered Code") an
+ * irrevocable, perpetual, worldwide license under Intel's copyrights in the
+ * base code distributed originally by Intel ("Original Intel Code") to copy,
+ * make derivatives, distribute, use and display any portion of the Covered
+ * Code in any form, with the right to sublicense such rights; and
+ *
+ * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent
+ * license (with the right to sublicense), under only those claims of Intel
+ * patents that are infringed by the Original Intel Code, to make, use, sell,
+ * offer to sell, and import the Covered Code and derivative works thereof
+ * solely to the minimum extent necessary to exercise the above copyright
+ * license, and in no event shall the patent license extend to any additions
+ * to or modifications of the Original Intel Code. No other license or right
+ * is granted directly or by implication, estoppel or otherwise;
+ *
+ * The above copyright and patent license is granted only if the following
+ * conditions are met:
+ *
+ * 3. Conditions
+ *
+ * 3.1. Redistribution of Source with Rights to Further Distribute Source.
+ * Redistribution of source code of any substantial portion of the Covered
+ * Code or modification with rights to further distribute source must include
+ * the above Copyright Notice, the above License, this list of Conditions,
+ * and the following Disclaimer and Export Compliance provision. In addition,
+ * Licensee must cause all Covered Code to which Licensee contributes to
+ * contain a file documenting the changes Licensee made to create that Covered
+ * Code and the date of any change. Licensee must include in that file the
+ * documentation of any changes made by any predecessor Licensee. Licensee
+ * must include a prominent statement that the modification is derived,
+ * directly or indirectly, from Original Intel Code.
+ *
+ * 3.2. Redistribution of Source with no Rights to Further Distribute Source.
+ * Redistribution of source code of any substantial portion of the Covered
+ * Code or modification without rights to further distribute source must
+ * include the following Disclaimer and Export Compliance provision in the
+ * documentation and/or other materials provided with distribution. In
+ * addition, Licensee may not authorize further sublicense of source of any
+ * portion of the Covered Code, and must include terms to the effect that the
+ * license from Licensee to its licensee is limited to the intellectual
+ * property embodied in the software Licensee provides to its licensee, and
+ * not to intellectual property embodied in modifications its licensee may
+ * make.
+ *
+ * 3.3. Redistribution of Executable. Redistribution in executable form of any
+ * substantial portion of the Covered Code or modification must reproduce the
+ * above Copyright Notice, and the following Disclaimer and Export Compliance
+ * provision in the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * 3.4. Intel retains all right, title, and interest in and to the Original
+ * Intel Code.
+ *
+ * 3.5. Neither the name Intel nor any other trademark owned or controlled by
+ * Intel shall be used in advertising or otherwise to promote the sale, use or
+ * other dealings in products derived from or relating to the Covered Code
+ * without prior written authorization from Intel.
+ *
+ * 4. Disclaimer and Export Compliance
+ *
+ * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED
+ * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE
+ * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE,
+ * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY
+ * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY
+ * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A
+ * PARTICULAR PURPOSE.
+ *
+ * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES
+ * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR
+ * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT,
+ * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY
+ * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL
+ * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS
+ * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY
+ * LIMITED REMEDY.
+ *
+ * 4.3. Licensee shall not export, either directly or indirectly, any of this
+ * software or system incorporating such software without first obtaining any
+ * required license or other approval from the U. S. Department of Commerce or
+ * any other agency or department of the United States Government. In the
+ * event Licensee exports any such software from the United States or
+ * re-exports any such software from a foreign destination, Licensee shall
+ * ensure that the distribution and export/re-export of the software is in
+ * compliance with all laws, regulations, orders, or other restrictions of the
+ * U.S. Export Administration Regulations. Licensee agrees that neither it nor
+ * any of its subsidiaries will export/re-export any technical data, process,
+ * software, or service, directly or indirectly, to any country for which the
+ * United States government or any agency thereof requires an export license,
+ * other governmental approval, or letter of assurance, without first obtaining
+ * such license, approval or letter.
+ *
+ *****************************************************************************/
+
+#include "acpi.h"
+#include "acparser.h"
+#include "amlcode.h"
+#include "acdisasm.h"
+#include "acdebug.h"
+
+#ifdef ACPI_DISASSEMBLER
+
+#define _COMPONENT ACPI_DEBUGGER
+ ACPI_MODULE_NAME ("dmopcode")
+
+
+/*******************************************************************************
+ *
+ * FUNCTION: AcpiDmMethodFlags
+ *
+ * PARAMETERS: Op - Method Object to be examined
+ *
+ * RETURN: None
+ *
+ * DESCRIPTION: Decode control method flags
+ *
+ ******************************************************************************/
+
+void
+AcpiDmMethodFlags (
+ ACPI_PARSE_OBJECT *Op)
+{
+ UINT32 Flags;
+ UINT32 Args;
+
+
+ /* The next Op contains the flags */
+
+ Op = AcpiPsGetDepthNext (NULL, Op);
+ Flags = Op->Common.Value.Integer8;
+ Args = Flags & 0x07;
+
+ /* Mark the Op as completed */
+
+ Op->Common.DisasmFlags |= ACPI_PARSEOP_IGNORE;
+
+ /* 1) Method argument count */
+
+ AcpiOsPrintf (", %d, ", Args);
+
+ /* 2) Serialize rule */
+
+ if (!(Flags & 0x08))
+ {
+ AcpiOsPrintf ("Not");
+ }
+
+ AcpiOsPrintf ("Serialized");
+
+ /* 3) SyncLevel */
+
+ if (Flags & 0xF0)
+ {
+ AcpiOsPrintf (", %d", Flags >> 4);
+ }
+}
+
+
+/*******************************************************************************
+ *
+ * FUNCTION: AcpiDmFieldFlags
+ *
+ * PARAMETERS: Op - Field Object to be examined
+ *
+ * RETURN: None
+ *
+ * DESCRIPTION: Decode Field definition flags
+ *
+ ******************************************************************************/
+
+void
+AcpiDmFieldFlags (
+ ACPI_PARSE_OBJECT *Op)
+{
+ UINT32 Flags;
+
+
+ /* The next Op contains the flags */
+
+ Op = AcpiPsGetDepthNext (NULL, Op);
+ Flags = Op->Common.Value.Integer8;
+
+ /* Mark the Op as completed */
+
+ Op->Common.DisasmFlags |= ACPI_PARSEOP_IGNORE;
+
+ AcpiOsPrintf ("%s, ", AcpiGbl_AccessTypes [Flags & 0x0F]);
+ AcpiOsPrintf ("%s, ", AcpiGbl_LockRule [(Flags & 0x10) >> 4]);
+ AcpiOsPrintf ("%s)", AcpiGbl_UpdateRules [(Flags & 0x60) >> 5]);
+}
+
+
+/*******************************************************************************
+ *
+ * FUNCTION: AcpiDmAddressSpace
+ *
+ * PARAMETERS: SpaceId - ID to be translated
+ *
+ * RETURN: None
+ *
+ * DESCRIPTION: Decode a SpaceId to an AddressSpaceKeyword
+ *
+ ******************************************************************************/
+
+void
+AcpiDmAddressSpace (
+ UINT8 SpaceId)
+{
+
+ if (SpaceId >= ACPI_NUM_PREDEFINED_REGIONS)
+ {
+ if (SpaceId == 0x7F)
+ {
+ AcpiOsPrintf ("FFixedHW, ");
+ }
+ else
+ {
+ AcpiOsPrintf ("0x%.2X, ", SpaceId);
+ }
+ }
+ else
+ {
+ AcpiOsPrintf ("%s, ", AcpiGbl_RegionTypes [SpaceId]);
+ }
+}
+
+
+/*******************************************************************************
+ *
+ * FUNCTION: AcpiDmRegionFlags
+ *
+ * PARAMETERS: Op - Object to be examined
+ *
+ * RETURN: None
+ *
+ * DESCRIPTION: Decode OperationRegion flags
+ *
+ ******************************************************************************/
+
+void
+AcpiDmRegionFlags (
+ ACPI_PARSE_OBJECT *Op)
+{
+
+
+ /* The next Op contains the SpaceId */
+
+ Op = AcpiPsGetDepthNext (NULL, Op);
+
+ /* Mark the Op as completed */
+
+ Op->Common.DisasmFlags |= ACPI_PARSEOP_IGNORE;
+
+ AcpiOsPrintf (", ");
+ AcpiDmAddressSpace (Op->Common.Value.Integer8);
+}
+
+
+/*******************************************************************************
+ *
+ * FUNCTION: AcpiDmMatchOp
+ *
+ * PARAMETERS: Op - Match Object to be examined
+ *
+ * RETURN: None
+ *
+ * DESCRIPTION: Decode Match opcode operands
+ *
+ ******************************************************************************/
+
+void
+AcpiDmMatchOp (
+ ACPI_PARSE_OBJECT *Op)
+{
+ ACPI_PARSE_OBJECT *NextOp;
+
+
+ NextOp = AcpiPsGetDepthNext (NULL, Op);
+ NextOp = NextOp->Common.Next;
+
+ if (!NextOp)
+ {
+ /* Handle partial tree during single-step */
+
+ return;
+ }
+
+ /* Mark the two nodes that contain the encoding for the match keywords */
+
+ NextOp->Common.DisasmOpcode = ACPI_DASM_MATCHOP;
+
+ NextOp = NextOp->Common.Next;
+ NextOp = NextOp->Common.Next;
+ NextOp->Common.DisasmOpcode = ACPI_DASM_MATCHOP;
+}
+
+
+/*******************************************************************************
+ *
+ * FUNCTION: AcpiDmMatchKeyword
+ *
+ * PARAMETERS: Op - Match Object to be examined
+ *
+ * RETURN: None
+ *
+ * DESCRIPTION: Decode Match opcode operands
+ *
+ ******************************************************************************/
+
+void
+AcpiDmMatchKeyword (
+ ACPI_PARSE_OBJECT *Op)
+{
+
+
+ if (Op->Common.Value.Integer32 >= NUM_MATCH_OPS)
+ {
+ AcpiOsPrintf ("/* Unknown Match Keyword encoding */");
+ }
+ else
+ {
+ AcpiOsPrintf ("%s", (char *) AcpiGbl_MatchOps[Op->Common.Value.Integer32]);
+ }
+}
+
+
+/*******************************************************************************
+ *
+ * FUNCTION: AcpiDmDisassembleOneOp
+ *
+ * PARAMETERS: WalkState - Current walk info
+ * Info - Parse tree walk info
+ * Op - Op that is to be printed
+ *
+ * RETURN: None
+ *
+ * DESCRIPTION: Disassemble a single AML opcode
+ *
+ ******************************************************************************/
+
+void
+AcpiDmDisassembleOneOp (
+ ACPI_WALK_STATE *WalkState,
+ ACPI_OP_WALK_INFO *Info,
+ ACPI_PARSE_OBJECT *Op)
+{
+ const ACPI_OPCODE_INFO *OpInfo = NULL;
+ UINT32 Offset;
+ UINT32 Length;
+
+
+ if (!Op)
+ {
+ AcpiOsPrintf ("<NULL OP PTR>");
+ return;
+ }
+
+ switch (Op->Common.DisasmOpcode)
+ {
+ case ACPI_DASM_MATCHOP:
+
+ AcpiDmMatchKeyword (Op);
+ return;
+
+ default:
+ break;
+ }
+
+
+ /* op and arguments */
+
+ switch (Op->Common.AmlOpcode)
+ {
+ case AML_ZERO_OP:
+
+ AcpiOsPrintf ("Zero");
+ break;
+
+
+ case AML_ONE_OP:
+
+ AcpiOsPrintf ("One");
+ break;
+
+
+ case AML_ONES_OP:
+
+ AcpiOsPrintf ("Ones");
+ break;
+
+
+ case AML_REVISION_OP:
+
+ AcpiOsPrintf ("Revision");
+ break;
+
+
+ case AML_BYTE_OP:
+
+ AcpiOsPrintf ("0x%.2X", (UINT32) Op->Common.Value.Integer8);
+ break;
+
+
+ case AML_WORD_OP:
+
+ if (Op->Common.DisasmOpcode == ACPI_DASM_EISAID)
+ {
+ AcpiDmEisaId (Op->Common.Value.Integer32);
+ }
+ else
+ {
+ AcpiOsPrintf ("0x%.2X", (UINT32) Op->Common.Value.Integer16);
+ }
+ break;
+
+
+ case AML_DWORD_OP:
+
+ if (Op->Common.DisasmOpcode == ACPI_DASM_EISAID)
+ {
+ AcpiDmEisaId (Op->Common.Value.Integer32);
+ }
+ else if ((Op->Common.Value.Integer32 == ACPI_UINT32_MAX) &&
+ (AcpiGbl_DSDT->Revision < 2))
+ {
+ AcpiOsPrintf ("Ones");
+ }
+ else
+ {
+ AcpiOsPrintf ("0x%.2X", Op->Common.Value.Integer32);
+ }
+ break;
+
+
+ case AML_QWORD_OP:
+
+ if ((Op->Common.Value.Integer == ACPI_INTEGER_MAX) &&
+ (AcpiGbl_DSDT->Revision >= 2))
+ {
+ AcpiOsPrintf ("Ones");
+ }
+ else
+ {
+ AcpiOsPrintf ("0x%X%8.8X", Op->Common.Value.Integer64.Hi,
+ Op->Common.Value.Integer64.Lo);
+ }
+ break;
+
+
+ case AML_STRING_OP:
+
+ AcpiDmString (Op->Common.Value.String);
+ break;
+
+
+ case AML_BUFFER_OP:
+
+ /*
+ * Determine the type of buffer. We can have one of the following:
+ *
+ * 1) ResourceTemplate containing Resource Descriptors.
+ * 2) Unicode String buffer
+ * 3) ASCII String buffer
+ * 4) Raw data buffer (if none of the above)
+ *
+ * Since there are no special AML opcodes to differentiate these
+ * types of buffers, we have to closely look at the data in the
+ * buffer to determine the type.
+ */
+ if (AcpiDmIsResourceDescriptor (Op))
+ {
+ Op->Common.DisasmOpcode = ACPI_DASM_RESOURCE;
+ AcpiOsPrintf ("ResourceTemplate");
+ }
+ else if (AcpiDmIsUnicodeBuffer (Op))
+ {
+ Op->Common.DisasmOpcode = ACPI_DASM_UNICODE;
+ AcpiOsPrintf ("Unicode (");
+ }
+ else if (AcpiDmIsStringBuffer (Op))
+ {
+ Op->Common.DisasmOpcode = ACPI_DASM_STRING;
+ AcpiOsPrintf ("Buffer");
+ }
+ else
+ {
+ Op->Common.DisasmOpcode = ACPI_DASM_BUFFER;
+ AcpiOsPrintf ("Buffer");
+ }
+ break;
+
+
+ case AML_INT_STATICSTRING_OP:
+
+ if (Op->Common.Value.String)
+ {
+ AcpiOsPrintf ("%s", Op->Common.Value.String);
+ }
+ else
+ {
+ AcpiOsPrintf ("\"<NULL STATIC STRING PTR>\"");
+ }
+ break;
+
+
+ case AML_INT_NAMEPATH_OP:
+
+ AcpiDmNamestring (Op->Common.Value.Name);
+ AcpiDmValidateName (Op->Common.Value.Name, Op);
+ break;
+
+
+ case AML_INT_NAMEDFIELD_OP:
+
+ Length = AcpiDmDumpName ((char *) &Op->Named.Name);
+ AcpiOsPrintf (",%*.s %d", (int) (5 - Length), " ", Op->Common.Value.Integer32);
+ AcpiDmCommaIfFieldMember (Op);
+
+ Info->BitOffset += Op->Common.Value.Integer32;
+ break;
+
+
+ case AML_INT_RESERVEDFIELD_OP:
+
+ /* Offset() -- Must account for previous offsets */
+
+ Offset = Op->Common.Value.Integer32;
+ Info->BitOffset += Offset;
+
+ if (Info->BitOffset % 8 == 0)
+ {
+ AcpiOsPrintf ("Offset (0x%.2X)", ACPI_DIV_8 (Info->BitOffset));
+ }
+ else
+ {
+ AcpiOsPrintf (" , %d", Offset);
+ }
+
+ AcpiDmCommaIfFieldMember (Op);
+ break;
+
+
+ case AML_INT_ACCESSFIELD_OP:
+
+ AcpiOsPrintf ("AccessAs (%s, 0x%.2X)",
+ AcpiGbl_AccessTypes [Op->Common.Value.Integer32 >> 8],
+ Op->Common.Value.Integer32 & 0x0F);
+
+ AcpiDmCommaIfFieldMember (Op);
+ break;
+
+
+ case AML_INT_BYTELIST_OP:
+
+ AcpiDmByteList (Info, Op);
+ break;
+
+
+ case AML_INT_METHODCALL_OP:
+
+ OpInfo = AcpiPsGetOpcodeInfo (Op->Common.AmlOpcode);
+ Op = AcpiPsGetDepthNext (NULL, Op);
+ Op->Common.DisasmFlags |= ACPI_PARSEOP_IGNORE;
+
+ AcpiDmNamestring (Op->Common.Value.Name);
+ break;
+
+
+ default:
+
+ /* Just get the opcode name and print it */
+
+ OpInfo = AcpiPsGetOpcodeInfo (Op->Common.AmlOpcode);
+ AcpiOsPrintf ("%s", OpInfo->Name);
+
+
+#ifdef ENABLE_DEBUGGER
+
+ if ((Op->Common.AmlOpcode == AML_INT_RETURN_VALUE_OP) &&
+ (WalkState) &&
+ (WalkState->Results) &&
+ (WalkState->Results->Results.NumResults))
+ {
+ AcpiDbDecodeInternalObject (
+ WalkState->Results->Results.ObjDesc [WalkState->Results->Results.NumResults-1]);
+ }
+#endif
+ break;
+ }
+}
+
+#endif /* ACPI_DISASSEMBLER */
diff --git a/sys/contrib/dev/acpica/dmresrc.c b/sys/contrib/dev/acpica/dmresrc.c
new file mode 100644
index 000000000000..b60f0c261e7f
--- /dev/null
+++ b/sys/contrib/dev/acpica/dmresrc.c
@@ -0,0 +1,528 @@
+/*******************************************************************************
+ *
+ * Module Name: dmresrc.c - Resource Descriptor disassembly
+ * $Revision: 3 $
+ *
+ ******************************************************************************/
+
+/******************************************************************************
+ *
+ * 1. Copyright Notice
+ *
+ * Some or all of this work - Copyright (c) 1999 - 2002, Intel Corp.
+ * All rights reserved.
+ *
+ * 2. License
+ *
+ * 2.1. This is your license from Intel Corp. under its intellectual property
+ * rights. You may have additional license terms from the party that provided
+ * you this software, covering your right to use that party's intellectual
+ * property rights.
+ *
+ * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a
+ * copy of the source code appearing in this file ("Covered Code") an
+ * irrevocable, perpetual, worldwide license under Intel's copyrights in the
+ * base code distributed originally by Intel ("Original Intel Code") to copy,
+ * make derivatives, distribute, use and display any portion of the Covered
+ * Code in any form, with the right to sublicense such rights; and
+ *
+ * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent
+ * license (with the right to sublicense), under only those claims of Intel
+ * patents that are infringed by the Original Intel Code, to make, use, sell,
+ * offer to sell, and import the Covered Code and derivative works thereof
+ * solely to the minimum extent necessary to exercise the above copyright
+ * license, and in no event shall the patent license extend to any additions
+ * to or modifications of the Original Intel Code. No other license or right
+ * is granted directly or by implication, estoppel or otherwise;
+ *
+ * The above copyright and patent license is granted only if the following
+ * conditions are met:
+ *
+ * 3. Conditions
+ *
+ * 3.1. Redistribution of Source with Rights to Further Distribute Source.
+ * Redistribution of source code of any substantial portion of the Covered
+ * Code or modification with rights to further distribute source must include
+ * the above Copyright Notice, the above License, this list of Conditions,
+ * and the following Disclaimer and Export Compliance provision. In addition,
+ * Licensee must cause all Covered Code to which Licensee contributes to
+ * contain a file documenting the changes Licensee made to create that Covered
+ * Code and the date of any change. Licensee must include in that file the
+ * documentation of any changes made by any predecessor Licensee. Licensee
+ * must include a prominent statement that the modification is derived,
+ * directly or indirectly, from Original Intel Code.
+ *
+ * 3.2. Redistribution of Source with no Rights to Further Distribute Source.
+ * Redistribution of source code of any substantial portion of the Covered
+ * Code or modification without rights to further distribute source must
+ * include the following Disclaimer and Export Compliance provision in the
+ * documentation and/or other materials provided with distribution. In
+ * addition, Licensee may not authorize further sublicense of source of any
+ * portion of the Covered Code, and must include terms to the effect that the
+ * license from Licensee to its licensee is limited to the intellectual
+ * property embodied in the software Licensee provides to its licensee, and
+ * not to intellectual property embodied in modifications its licensee may
+ * make.
+ *
+ * 3.3. Redistribution of Executable. Redistribution in executable form of any
+ * substantial portion of the Covered Code or modification must reproduce the
+ * above Copyright Notice, and the following Disclaimer and Export Compliance
+ * provision in the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * 3.4. Intel retains all right, title, and interest in and to the Original
+ * Intel Code.
+ *
+ * 3.5. Neither the name Intel nor any other trademark owned or controlled by
+ * Intel shall be used in advertising or otherwise to promote the sale, use or
+ * other dealings in products derived from or relating to the Covered Code
+ * without prior written authorization from Intel.
+ *
+ * 4. Disclaimer and Export Compliance
+ *
+ * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED
+ * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE
+ * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE,
+ * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY
+ * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY
+ * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A
+ * PARTICULAR PURPOSE.
+ *
+ * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES
+ * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR
+ * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT,
+ * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY
+ * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL
+ * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS
+ * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY
+ * LIMITED REMEDY.
+ *
+ * 4.3. Licensee shall not export, either directly or indirectly, any of this
+ * software or system incorporating such software without first obtaining any
+ * required license or other approval from the U. S. Department of Commerce or
+ * any other agency or department of the United States Government. In the
+ * event Licensee exports any such software from the United States or
+ * re-exports any such software from a foreign destination, Licensee shall
+ * ensure that the distribution and export/re-export of the software is in
+ * compliance with all laws, regulations, orders, or other restrictions of the
+ * U.S. Export Administration Regulations. Licensee agrees that neither it nor
+ * any of its subsidiaries will export/re-export any technical data, process,
+ * software, or service, directly or indirectly, to any country for which the
+ * United States government or any agency thereof requires an export license,
+ * other governmental approval, or letter of assurance, without first obtaining
+ * such license, approval or letter.
+ *
+ *****************************************************************************/
+
+
+#include "acpi.h"
+#include "amlcode.h"
+#include "acdisasm.h"
+
+#ifdef ACPI_DISASSEMBLER
+
+#define _COMPONENT ACPI_DEBUGGER
+ ACPI_MODULE_NAME ("dbresrc")
+
+
+/*******************************************************************************
+ *
+ * FUNCTION: AcpiDmBitList
+ *
+ * PARAMETERS: Mask - 16-bit value corresponding to 16 interrupt
+ * or DMA values
+ *
+ * RETURN: None
+ *
+ * DESCRIPTION: Dump a bit mask as a list of individual interrupt/dma levels.
+ *
+ ******************************************************************************/
+
+void
+AcpiDmBitList (
+ UINT16 Mask)
+{
+ UINT32 i;
+ BOOLEAN Previous = FALSE;
+
+
+ /* Open the initializer list */
+
+ AcpiOsPrintf (") {");
+
+ /* Examine each bit */
+
+ for (i = 0; i < 16; i++)
+ {
+ /* Only interested in bits that are set to 1 */
+
+ if (Mask & 1)
+ {
+ if (Previous)
+ {
+ AcpiOsPrintf (",");
+ }
+ Previous = TRUE;
+ AcpiOsPrintf ("%d", i);
+ }
+
+ Mask >>= 1;
+ }
+
+ /* Close list */
+
+ AcpiOsPrintf ("}\n");
+}
+
+
+/*******************************************************************************
+ *
+ * FUNCTION: AcpiDmResourceDescriptor
+ *
+ * PARAMETERS: Info - Curent parse tree walk info
+ * ByteData - Pointer to the byte list data
+ * ByteCount - Length of the byte list
+ *
+ * RETURN: None
+ *
+ * DESCRIPTION: Dump the contents of one ResourceTemplate descriptor.
+ *
+ ******************************************************************************/
+
+void
+AcpiDmResourceDescriptor (
+ ACPI_OP_WALK_INFO *Info,
+ UINT8 *ByteData,
+ UINT32 ByteCount)
+{
+ NATIVE_UINT CurrentByteOffset;
+ UINT8 CurrentByte;
+ UINT8 DescriptorId;
+ UINT32 Length;
+ void *DescriptorBody;
+ UINT32 Level;
+ BOOLEAN DependentFns = FALSE;
+
+
+ Level = Info->Level;
+
+ for (CurrentByteOffset = 0; CurrentByteOffset < ByteCount; )
+ {
+ CurrentByte = ByteData[CurrentByteOffset];
+ DescriptorBody = &ByteData[CurrentByteOffset];
+
+ if (CurrentByte & ACPI_RDESC_TYPE_LARGE)
+ {
+ DescriptorId = CurrentByte;
+ Length = (* (ACPI_CAST_PTR (UINT16, &ByteData[CurrentByteOffset + 1])));
+ CurrentByteOffset += 3;
+ }
+ else
+ {
+ DescriptorId = (UINT8) (CurrentByte & 0xF8);
+ Length = (ByteData[CurrentByteOffset] & 0x7);
+ CurrentByteOffset += 1;
+ }
+
+ CurrentByteOffset += (NATIVE_UINT) Length;
+
+ /* Determine type of resource */
+
+ switch (DescriptorId)
+ {
+ /*
+ * "Small" type descriptors
+ */
+ case ACPI_RDESC_TYPE_IRQ_FORMAT:
+
+ AcpiDmIrqDescriptor (DescriptorBody, Length, Level);
+ break;
+
+
+ case ACPI_RDESC_TYPE_DMA_FORMAT:
+
+ AcpiDmDmaDescriptor (DescriptorBody, Length, Level);
+ break;
+
+
+ case ACPI_RDESC_TYPE_START_DEPENDENT:
+
+ /* Finish a previous StartDependentFns */
+
+ if (DependentFns)
+ {
+ Level--;
+ AcpiDmIndent (Level);
+ AcpiOsPrintf ("}\n");
+ }
+
+ AcpiDmStartDependentDescriptor (DescriptorBody, Length, Level);
+ DependentFns = TRUE;
+ Level++;
+ break;
+
+
+ case ACPI_RDESC_TYPE_END_DEPENDENT:
+
+ Level--;
+ DependentFns = FALSE;
+ AcpiDmEndDependentDescriptor (DescriptorBody, Length, Level);
+ break;
+
+
+ case ACPI_RDESC_TYPE_IO_PORT:
+
+ AcpiDmIoDescriptor (DescriptorBody, Length, Level);
+ break;
+
+
+ case ACPI_RDESC_TYPE_FIXED_IO_PORT:
+
+ AcpiDmFixedIoDescriptor (DescriptorBody, Length, Level);
+ break;
+
+
+ case ACPI_RDESC_TYPE_SMALL_VENDOR:
+
+ AcpiDmVendorSmallDescriptor (DescriptorBody, Length, Level);
+ break;
+
+
+ case ACPI_RDESC_TYPE_END_TAG:
+
+ if (DependentFns)
+ {
+ /*
+ * Close an open StartDependentDescriptor. This indicates a missing
+ * EndDependentDescriptor.
+ */
+ Level--;
+ DependentFns = FALSE;
+ AcpiDmIndent (Level);
+ AcpiOsPrintf ("}\n");
+ AcpiDmIndent (Level);
+
+ AcpiOsPrintf ("/*** Missing EndDependentFunctions descriptor */");
+
+ /*
+ * We could fix the problem, but then the ASL would not match the AML
+ * So, we don't do this:
+ * AcpiDmEndDependentDescriptor (DescriptorBody, Length, Level);
+ */
+ }
+ return;
+
+
+ /*
+ * "Large" type descriptors
+ */
+ case ACPI_RDESC_TYPE_MEMORY_24:
+
+ AcpiDmMemory24Descriptor (DescriptorBody, Length, Level);
+ break;
+
+
+ case ACPI_RDESC_TYPE_GENERAL_REGISTER:
+
+ AcpiDmGenericRegisterDescriptor (DescriptorBody, Length, Level);
+ break;
+
+
+ case ACPI_RDESC_TYPE_LARGE_VENDOR:
+
+ AcpiDmVendorLargeDescriptor (DescriptorBody, Length, Level);
+ break;
+
+
+ case ACPI_RDESC_TYPE_MEMORY_32:
+
+ AcpiDmMemory32Descriptor (DescriptorBody, Length, Level);
+ break;
+
+
+ case ACPI_RDESC_TYPE_FIXED_MEMORY_32:
+
+ AcpiDmFixedMem32Descriptor (DescriptorBody, Length, Level);
+ break;
+
+
+ case ACPI_RDESC_TYPE_DWORD_ADDRESS_SPACE:
+
+ AcpiDmDwordDescriptor (DescriptorBody, Length, Level);
+ break;
+
+
+ case ACPI_RDESC_TYPE_WORD_ADDRESS_SPACE:
+
+ AcpiDmWordDescriptor (DescriptorBody, Length, Level);
+ break;
+
+
+ case ACPI_RDESC_TYPE_EXTENDED_XRUPT:
+
+ AcpiDmInterruptDescriptor (DescriptorBody, Length, Level);
+ break;
+
+
+ case ACPI_RDESC_TYPE_QWORD_ADDRESS_SPACE:
+
+ AcpiDmQwordDescriptor (DescriptorBody, Length, Level);
+ break;
+
+
+ default:
+ /*
+ * Anything else is unrecognized.
+ *
+ * Since the entire resource buffer has been already walked and
+ * validated, this is a very serious error indicating that someone
+ * overwrote the buffer.
+ */
+ AcpiOsPrintf ("/* Unknown Resource type (%X) */\n", DescriptorId);
+ return;
+ }
+ }
+}
+
+
+/*******************************************************************************
+ *
+ * FUNCTION: AcpiDmIsResourceDescriptor
+ *
+ * PARAMETERS: Op - Buffer Op to be examined
+ *
+ * RETURN: TRUE if this Buffer Op contains a valid resource
+ * descriptor.
+ *
+ * DESCRIPTION: Walk a byte list to determine if it consists of a valid set
+ * of resource descriptors. Nothing is output.
+ *
+ ******************************************************************************/
+
+BOOLEAN
+AcpiDmIsResourceDescriptor (
+ ACPI_PARSE_OBJECT *Op)
+{
+ UINT8 *ByteData;
+ UINT32 ByteCount;
+ ACPI_PARSE_OBJECT *NextOp;
+ NATIVE_UINT CurrentByteOffset;
+ UINT8 CurrentByte;
+ UINT8 DescriptorId;
+ UINT32 Length;
+
+
+ /* This op must be a buffer */
+
+ if (Op->Common.AmlOpcode != AML_BUFFER_OP)
+ {
+ return FALSE;
+ }
+
+ /* Get to the ByteData list */
+
+ NextOp = Op->Common.Value.Arg;
+ NextOp = NextOp->Common.Next;
+ if (!NextOp)
+ {
+ return (FALSE);
+ }
+
+ /* Extract the data pointer and data length */
+
+ ByteCount = NextOp->Common.Value.Integer32;
+ ByteData = NextOp->Named.Data;
+
+ /* The list must have a valid END_TAG */
+
+ if (ByteData[ByteCount-2] != (ACPI_RDESC_TYPE_END_TAG | 1))
+ {
+ return FALSE;
+ }
+
+ /*
+ * Walk the byte list. Abort on any invalid descriptor ID or
+ * or length
+ */
+ for (CurrentByteOffset = 0; CurrentByteOffset < ByteCount; )
+ {
+ CurrentByte = ByteData[CurrentByteOffset];
+
+ /* Large or small resource? */
+
+ if (CurrentByte & ACPI_RDESC_TYPE_LARGE)
+ {
+ DescriptorId = CurrentByte;
+ Length = (* (ACPI_CAST_PTR (UINT16, (&ByteData[CurrentByteOffset + 1]))));
+ CurrentByteOffset += 3;
+ }
+ else
+ {
+ DescriptorId = (UINT8) (CurrentByte & 0xF8);
+ Length = (ByteData[CurrentByteOffset] & 0x7);
+ CurrentByteOffset += 1;
+ }
+
+ CurrentByteOffset += (NATIVE_UINT) Length;
+
+ /* Determine type of resource */
+
+ switch (DescriptorId)
+ {
+ /*
+ * "Small" type descriptors
+ */
+ case ACPI_RDESC_TYPE_IRQ_FORMAT:
+ case ACPI_RDESC_TYPE_DMA_FORMAT:
+ case ACPI_RDESC_TYPE_START_DEPENDENT:
+ case ACPI_RDESC_TYPE_END_DEPENDENT:
+ case ACPI_RDESC_TYPE_IO_PORT:
+ case ACPI_RDESC_TYPE_FIXED_IO_PORT:
+ case ACPI_RDESC_TYPE_SMALL_VENDOR:
+ /*
+ * "Large" type descriptors
+ */
+ case ACPI_RDESC_TYPE_MEMORY_24:
+ case ACPI_RDESC_TYPE_GENERAL_REGISTER:
+ case ACPI_RDESC_TYPE_LARGE_VENDOR:
+ case ACPI_RDESC_TYPE_MEMORY_32:
+ case ACPI_RDESC_TYPE_FIXED_MEMORY_32:
+ case ACPI_RDESC_TYPE_DWORD_ADDRESS_SPACE:
+ case ACPI_RDESC_TYPE_WORD_ADDRESS_SPACE:
+ case ACPI_RDESC_TYPE_EXTENDED_XRUPT:
+ case ACPI_RDESC_TYPE_QWORD_ADDRESS_SPACE:
+
+ /* Valid descriptor ID, keep going */
+
+ break;
+
+
+ case ACPI_RDESC_TYPE_END_TAG:
+
+ /* We must be at the end of the ByteList */
+
+ if (CurrentByteOffset != ByteCount)
+ {
+ return (FALSE);
+ }
+
+ /* All descriptors/lengths valid, this is a valid descriptor */
+
+ return (TRUE);
+
+
+ default:
+
+ /* Bad descriptor, abort */
+
+ return (FALSE);
+ }
+ }
+
+ /* Did not find an END_TAG, something seriously wrong */
+
+ return (FALSE);
+}
+
+
+#endif
diff --git a/sys/contrib/dev/acpica/dmresrcl.c b/sys/contrib/dev/acpica/dmresrcl.c
new file mode 100644
index 000000000000..995569f29fd5
--- /dev/null
+++ b/sys/contrib/dev/acpica/dmresrcl.c
@@ -0,0 +1,605 @@
+/*******************************************************************************
+ *
+ * Module Name: dmresrcl.c - "Large" Resource Descriptor disassembly
+ * $Revision: 5 $
+ *
+ ******************************************************************************/
+
+/******************************************************************************
+ *
+ * 1. Copyright Notice
+ *
+ * Some or all of this work - Copyright (c) 1999 - 2002, Intel Corp.
+ * All rights reserved.
+ *
+ * 2. License
+ *
+ * 2.1. This is your license from Intel Corp. under its intellectual property
+ * rights. You may have additional license terms from the party that provided
+ * you this software, covering your right to use that party's intellectual
+ * property rights.
+ *
+ * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a
+ * copy of the source code appearing in this file ("Covered Code") an
+ * irrevocable, perpetual, worldwide license under Intel's copyrights in the
+ * base code distributed originally by Intel ("Original Intel Code") to copy,
+ * make derivatives, distribute, use and display any portion of the Covered
+ * Code in any form, with the right to sublicense such rights; and
+ *
+ * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent
+ * license (with the right to sublicense), under only those claims of Intel
+ * patents that are infringed by the Original Intel Code, to make, use, sell,
+ * offer to sell, and import the Covered Code and derivative works thereof
+ * solely to the minimum extent necessary to exercise the above copyright
+ * license, and in no event shall the patent license extend to any additions
+ * to or modifications of the Original Intel Code. No other license or right
+ * is granted directly or by implication, estoppel or otherwise;
+ *
+ * The above copyright and patent license is granted only if the following
+ * conditions are met:
+ *
+ * 3. Conditions
+ *
+ * 3.1. Redistribution of Source with Rights to Further Distribute Source.
+ * Redistribution of source code of any substantial portion of the Covered
+ * Code or modification with rights to further distribute source must include
+ * the above Copyright Notice, the above License, this list of Conditions,
+ * and the following Disclaimer and Export Compliance provision. In addition,
+ * Licensee must cause all Covered Code to which Licensee contributes to
+ * contain a file documenting the changes Licensee made to create that Covered
+ * Code and the date of any change. Licensee must include in that file the
+ * documentation of any changes made by any predecessor Licensee. Licensee
+ * must include a prominent statement that the modification is derived,
+ * directly or indirectly, from Original Intel Code.
+ *
+ * 3.2. Redistribution of Source with no Rights to Further Distribute Source.
+ * Redistribution of source code of any substantial portion of the Covered
+ * Code or modification without rights to further distribute source must
+ * include the following Disclaimer and Export Compliance provision in the
+ * documentation and/or other materials provided with distribution. In
+ * addition, Licensee may not authorize further sublicense of source of any
+ * portion of the Covered Code, and must include terms to the effect that the
+ * license from Licensee to its licensee is limited to the intellectual
+ * property embodied in the software Licensee provides to its licensee, and
+ * not to intellectual property embodied in modifications its licensee may
+ * make.
+ *
+ * 3.3. Redistribution of Executable. Redistribution in executable form of any
+ * substantial portion of the Covered Code or modification must reproduce the
+ * above Copyright Notice, and the following Disclaimer and Export Compliance
+ * provision in the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * 3.4. Intel retains all right, title, and interest in and to the Original
+ * Intel Code.
+ *
+ * 3.5. Neither the name Intel nor any other trademark owned or controlled by
+ * Intel shall be used in advertising or otherwise to promote the sale, use or
+ * other dealings in products derived from or relating to the Covered Code
+ * without prior written authorization from Intel.
+ *
+ * 4. Disclaimer and Export Compliance
+ *
+ * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED
+ * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE
+ * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE,
+ * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY
+ * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY
+ * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A
+ * PARTICULAR PURPOSE.
+ *
+ * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES
+ * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR
+ * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT,
+ * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY
+ * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL
+ * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS
+ * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY
+ * LIMITED REMEDY.
+ *
+ * 4.3. Licensee shall not export, either directly or indirectly, any of this
+ * software or system incorporating such software without first obtaining any
+ * required license or other approval from the U. S. Department of Commerce or
+ * any other agency or department of the United States Government. In the
+ * event Licensee exports any such software from the United States or
+ * re-exports any such software from a foreign destination, Licensee shall
+ * ensure that the distribution and export/re-export of the software is in
+ * compliance with all laws, regulations, orders, or other restrictions of the
+ * U.S. Export Administration Regulations. Licensee agrees that neither it nor
+ * any of its subsidiaries will export/re-export any technical data, process,
+ * software, or service, directly or indirectly, to any country for which the
+ * United States government or any agency thereof requires an export license,
+ * other governmental approval, or letter of assurance, without first obtaining
+ * such license, approval or letter.
+ *
+ *****************************************************************************/
+
+
+#include "acpi.h"
+#include "acdisasm.h"
+
+
+#ifdef ACPI_DISASSEMBLER
+
+#define _COMPONENT ACPI_DEBUGGER
+ ACPI_MODULE_NAME ("dbresrcl")
+
+
+/*******************************************************************************
+ *
+ * FUNCTION: AcpiDmIoFlags
+ *
+ * PARAMETERS: Flags - Flag byte to be decoded
+ *
+ * RETURN: None
+ *
+ * DESCRIPTION: Decode the flags specific to IO Address space descriptors
+ *
+ ******************************************************************************/
+
+void
+AcpiDmIoFlags (
+ UINT8 Flags)
+{
+ AcpiOsPrintf ("%s, %s, %s, %s,",
+ AcpiGbl_ConsumeDecode [(Flags & 1)],
+ AcpiGbl_MinDecode [(Flags & 0x4) >> 2],
+ AcpiGbl_MaxDecode [(Flags & 0x8) >> 3],
+ AcpiGbl_DECDecode [(Flags & 0x2) >> 1]);
+}
+
+
+/*******************************************************************************
+ *
+ * FUNCTION: AcpiDmMemoryFlags
+ *
+ * PARAMETERS: Flags - Flag byte to be decoded
+ * SpecificFlags - "Specific" flag byte to be decoded
+ *
+ * RETURN: None
+ *
+ * DESCRIPTION: Decode flags specific to Memory Address Space descriptors
+ *
+ ******************************************************************************/
+
+void
+AcpiDmMemoryFlags (
+ UINT8 Flags,
+ UINT8 SpecificFlags)
+{
+ AcpiOsPrintf ("%s, %s, %s, %s, %s, %s,",
+ AcpiGbl_ConsumeDecode [(Flags & 1)],
+ AcpiGbl_DECDecode [(Flags & 0x2) >> 1],
+ AcpiGbl_MinDecode [(Flags & 0x4) >> 2],
+ AcpiGbl_MaxDecode [(Flags & 0x8) >> 3],
+ AcpiGbl_MEMDecode [(SpecificFlags & 0x6) >> 1],
+ AcpiGbl_RWDecode [(SpecificFlags & 0x1)]);
+}
+
+
+/*******************************************************************************
+ *
+ * FUNCTION: AcpiDmWordDescriptor
+ *
+ * PARAMETERS: Resource - Pointer to the resource descriptor
+ * Length - Length of the descriptor in bytes
+ * Level - Current source code indentation level
+ *
+ * RETURN: None
+ *
+ * DESCRIPTION: Decode a Word Address Space descriptor
+ *
+ ******************************************************************************/
+
+void
+AcpiDmWordDescriptor (
+ ASL_WORD_ADDRESS_DESC *Resource,
+ UINT32 Length,
+ UINT32 Level)
+{
+
+ AcpiDmIndent (Level);
+ AcpiOsPrintf ("%s (",
+ AcpiGbl_WordDecode [(Resource->ResourceType & 3)]);
+
+ AcpiDmIoFlags (Resource->Flags);
+
+ if ((Resource->ResourceType & 0x3) == 1)
+ {
+ AcpiOsPrintf (" %s,",
+ AcpiGbl_RNGDecode [(Resource->SpecificFlags & 0x3)]);
+ }
+
+ /* The WORD values */
+
+ AcpiOsPrintf ("\n");
+ AcpiDmIndent (Level + 1);
+ AcpiOsPrintf ("0x%4.4X,\n",
+ (UINT32) Resource->Granularity);
+ AcpiDmIndent (Level + 1);
+ AcpiOsPrintf ("0x%4.4X,\n",
+ (UINT32) Resource->AddressMin);
+ AcpiDmIndent (Level + 1);
+ AcpiOsPrintf ("0x%4.4X,\n",
+ (UINT32) Resource->AddressMax);
+ AcpiDmIndent (Level + 1);
+ AcpiOsPrintf ("0x%4.4X,\n",
+ (UINT32) Resource->TranslationOffset);
+ AcpiDmIndent (Level + 1);
+ AcpiOsPrintf ("0x%4.4X",
+ (UINT32) Resource->AddressLength);
+
+ /* Optional fields */
+
+ if (Length > 13)
+ {
+ AcpiOsPrintf (", 0x%2.2X",
+ (UINT32) Resource->OptionalFields[0]);
+ }
+
+ if (Length > 14)
+ {
+ AcpiOsPrintf (", %s",
+ &Resource->OptionalFields[1]);
+ }
+ AcpiOsPrintf (")\n");
+}
+
+
+/*******************************************************************************
+ *
+ * FUNCTION: AcpiDmDwordDescriptor
+ *
+ * PARAMETERS: Resource - Pointer to the resource descriptor
+ * Length - Length of the descriptor in bytes
+ * Level - Current source code indentation level
+ *
+ * RETURN: None
+ *
+ * DESCRIPTION: Decode a DWord Address Space descriptor
+ *
+ ******************************************************************************/
+
+void
+AcpiDmDwordDescriptor (
+ ASL_DWORD_ADDRESS_DESC *Resource,
+ UINT32 Length,
+ UINT32 Level)
+{
+
+ AcpiDmIndent (Level);
+ AcpiOsPrintf ("D%s (",
+ AcpiGbl_WordDecode [(Resource->ResourceType & 3)]);
+
+ if ((Resource->ResourceType & 0x3) == 1)
+ {
+ AcpiDmIoFlags (Resource->Flags);
+ AcpiOsPrintf (" %s,",
+ AcpiGbl_RNGDecode [(Resource->SpecificFlags & 0x3)]);
+ }
+ else
+ {
+ AcpiDmMemoryFlags (Resource->Flags, Resource->SpecificFlags);
+ }
+
+ /* The DWORD values */
+
+ AcpiOsPrintf ("\n");
+ AcpiDmIndent (Level + 1);
+ AcpiOsPrintf ("0x%8.8X,\n",
+ Resource->Granularity);
+ AcpiDmIndent (Level + 1);
+ AcpiOsPrintf ("0x%8.8X,\n",
+ Resource->AddressMin);
+ AcpiDmIndent (Level + 1);
+ AcpiOsPrintf ("0x%8.8X,\n",
+ Resource->AddressMax);
+ AcpiDmIndent (Level + 1);
+ AcpiOsPrintf ("0x%8.8X,\n",
+ Resource->TranslationOffset);
+ AcpiDmIndent (Level + 1);
+ AcpiOsPrintf ("0x%8.8X",
+ Resource->AddressLength);
+
+ /* Optional fields */
+
+ if (Length > 23)
+ {
+ AcpiOsPrintf (", 0x%2.2X",
+ Resource->OptionalFields[0]);
+ }
+ if (Length > 24)
+ {
+ AcpiOsPrintf (", %s",
+ &Resource->OptionalFields[1]);
+ }
+ AcpiOsPrintf (")\n");
+}
+
+
+/*******************************************************************************
+ *
+ * FUNCTION: AcpiDmQwordDescriptor
+ *
+ * PARAMETERS: Resource - Pointer to the resource descriptor
+ * Length - Length of the descriptor in bytes
+ * Level - Current source code indentation level
+ *
+ * RETURN: None
+ *
+ * DESCRIPTION: Decode a QWord Address Space descriptor
+ *
+ ******************************************************************************/
+
+void
+AcpiDmQwordDescriptor (
+ ASL_QWORD_ADDRESS_DESC *Resource,
+ UINT32 Length,
+ UINT32 Level)
+{
+
+ AcpiDmIndent (Level);
+ AcpiOsPrintf ("Q%s (",
+ AcpiGbl_WordDecode [(Resource->ResourceType & 3)]);
+
+ if ((Resource->ResourceType & 0x3) == 1)
+ {
+ AcpiDmIoFlags (Resource->Flags);
+ AcpiOsPrintf (" %s,",
+ AcpiGbl_RNGDecode [(Resource->SpecificFlags & 0x3)]);
+ }
+ else
+ {
+ AcpiDmMemoryFlags (Resource->Flags, Resource->SpecificFlags);
+ }
+
+ /* The QWORD values */
+
+ AcpiOsPrintf ("\n");
+ AcpiDmIndent (Level + 1);
+ AcpiOsPrintf ("0x%8.8X%8.8X,\n",
+ ACPI_HIDWORD (ACPI_GET_ADDRESS (Resource->Granularity)),
+ ACPI_LODWORD (ACPI_GET_ADDRESS (Resource->Granularity)));
+
+ AcpiDmIndent (Level + 1);
+ AcpiOsPrintf ("0x%8.8X%8.8X,\n",
+ ACPI_HIDWORD (ACPI_GET_ADDRESS (Resource->AddressMin)),
+ ACPI_LODWORD (ACPI_GET_ADDRESS (Resource->AddressMin)));
+
+ AcpiDmIndent (Level + 1);
+ AcpiOsPrintf ("0x%8.8X%8.8X,\n",
+ ACPI_HIDWORD (ACPI_GET_ADDRESS (Resource->AddressMax)),
+ ACPI_LODWORD (ACPI_GET_ADDRESS (Resource->AddressMax)));
+
+ AcpiDmIndent (Level + 1);
+ AcpiOsPrintf ("0x%8.8X%8.8X,\n",
+ ACPI_HIDWORD (ACPI_GET_ADDRESS (Resource->TranslationOffset)),
+ ACPI_LODWORD (ACPI_GET_ADDRESS (Resource->TranslationOffset)));
+
+ AcpiDmIndent (Level + 1);
+ AcpiOsPrintf ("0x%8.8X%8.8X",
+ ACPI_HIDWORD (ACPI_GET_ADDRESS (Resource->AddressLength)),
+ ACPI_LODWORD (ACPI_GET_ADDRESS (Resource->AddressLength)));
+
+ /* Optional fields */
+
+ if (Length > 43)
+ {
+ AcpiOsPrintf (", 0x%2.2X",
+ Resource->OptionalFields[0]);
+ }
+ if (Length > 44)
+ {
+ AcpiOsPrintf (", %s",
+ &Resource->OptionalFields[1]);
+ }
+
+ AcpiOsPrintf (")\n");
+}
+
+
+/*******************************************************************************
+ *
+ * FUNCTION: AcpiDmMemory24Descriptor
+ *
+ * PARAMETERS: Resource - Pointer to the resource descriptor
+ * Length - Length of the descriptor in bytes
+ * Level - Current source code indentation level
+ *
+ * RETURN: None
+ *
+ * DESCRIPTION: Decode a Memory24 descriptor
+ *
+ ******************************************************************************/
+
+void
+AcpiDmMemory24Descriptor (
+ ASL_MEMORY_24_DESC *Resource,
+ UINT32 Length,
+ UINT32 Level)
+{
+
+ AcpiDmIndent (Level);
+ AcpiOsPrintf ("Memory24 (%s, 0x%4.4X, 0x%4.4X, 0x%4.4X, 0x%4.4X)\n",
+ AcpiGbl_RWDecode [Resource->Information & 1],
+ (UINT32) Resource->AddressMin,
+ (UINT32) Resource->AddressMax,
+ (UINT32) Resource->Alignment,
+ (UINT32) Resource->RangeLength);
+}
+
+
+/*******************************************************************************
+ *
+ * FUNCTION: AcpiDmMemory32Descriptor
+ *
+ * PARAMETERS: Resource - Pointer to the resource descriptor
+ * Length - Length of the descriptor in bytes
+ * Level - Current source code indentation level
+ *
+ * RETURN: None
+ *
+ * DESCRIPTION: Decode a Memory32 descriptor
+ *
+ ******************************************************************************/
+
+void
+AcpiDmMemory32Descriptor (
+ ASL_MEMORY_32_DESC *Resource,
+ UINT32 Length,
+ UINT32 Level)
+{
+
+ AcpiDmIndent (Level);
+ AcpiOsPrintf ("Memory32 (%s, 0x%8.8X, 0x%8.8X, 0x%8.8X, 0x%8.8X)\n",
+ AcpiGbl_RWDecode [Resource->Information & 1],
+ Resource->AddressMin,
+ Resource->AddressMax,
+ Resource->Alignment,
+ Resource->RangeLength);
+}
+
+
+/*******************************************************************************
+ *
+ * FUNCTION: AcpiDmFixedMem32Descriptor
+ *
+ * PARAMETERS: Resource - Pointer to the resource descriptor
+ * Length - Length of the descriptor in bytes
+ * Level - Current source code indentation level
+ *
+ * RETURN: None
+ *
+ * DESCRIPTION: Decode a Fixed Memory32 descriptor
+ *
+ ******************************************************************************/
+
+void
+AcpiDmFixedMem32Descriptor (
+ ASL_FIXED_MEMORY_32_DESC *Resource,
+ UINT32 Length,
+ UINT32 Level)
+{
+
+ AcpiDmIndent (Level);
+ AcpiOsPrintf ("Memory32Fixed (%s, 0x%8.8X, 0x%8.8X)\n",
+ AcpiGbl_RWDecode [Resource->Information & 1],
+ Resource->BaseAddress,
+ Resource->RangeLength);
+}
+
+
+/*******************************************************************************
+ *
+ * FUNCTION: AcpiDmGenericRegisterDescriptor
+ *
+ * PARAMETERS: Resource - Pointer to the resource descriptor
+ * Length - Length of the descriptor in bytes
+ * Level - Current source code indentation level
+ *
+ * RETURN: None
+ *
+ * DESCRIPTION: Decode a Generic Register descriptor
+ *
+ ******************************************************************************/
+
+void
+AcpiDmGenericRegisterDescriptor (
+ ASL_GENERAL_REGISTER_DESC *Resource,
+ UINT32 Length,
+ UINT32 Level)
+{
+
+ AcpiDmIndent (Level);
+ AcpiOsPrintf ("Register (");
+
+ AcpiDmAddressSpace (Resource->AddressSpaceId);
+
+ AcpiOsPrintf ("0x%2.2X, 0x%2.2X, 0x%8.8X%8.8X)\n",
+ (UINT32) Resource->BitWidth,
+ (UINT32) Resource->BitOffset,
+ ACPI_HIDWORD (ACPI_GET_ADDRESS (Resource->Address)),
+ ACPI_LODWORD (ACPI_GET_ADDRESS (Resource->Address)));
+}
+
+
+/*******************************************************************************
+ *
+ * FUNCTION: AcpiDmInterruptDescriptor
+ *
+ * PARAMETERS: Resource - Pointer to the resource descriptor
+ * Length - Length of the descriptor in bytes
+ * Level - Current source code indentation level
+ *
+ * RETURN: None
+ *
+ * DESCRIPTION: Decode a extended Interrupt descriptor
+ *
+ ******************************************************************************/
+
+void
+AcpiDmInterruptDescriptor (
+ ASL_EXTENDED_XRUPT_DESC *Resource,
+ UINT32 Length,
+ UINT32 Level)
+{
+ UINT32 i;
+
+
+ AcpiDmIndent (Level);
+ AcpiOsPrintf ("Interrupt (%s, %s, %s, %s)\n",
+ AcpiGbl_ConsumeDecode [(Resource->Flags & 1)],
+ AcpiGbl_HEDecode [(Resource->Flags >> 1) & 1],
+ AcpiGbl_LLDecode [(Resource->Flags >> 2) & 1],
+ AcpiGbl_SHRDecode [(Resource->Flags >> 3) & 1]);
+
+ /* TBD "Resource Source, optional */
+
+ AcpiDmIndent (Level);
+ AcpiOsPrintf ("{\n");
+ for (i = 0; i < Resource->TableLength; i++)
+ {
+ AcpiDmIndent (Level + 1);
+ AcpiOsPrintf ("0x%8.8X,\n", (UINT32) Resource->InterruptNumber[i]);
+ }
+
+ AcpiDmIndent (Level);
+ AcpiOsPrintf ("}\n");
+}
+
+
+/*******************************************************************************
+ *
+ * FUNCTION: AcpiDmVendorLargeDescriptor
+ *
+ * PARAMETERS: Resource - Pointer to the resource descriptor
+ * Length - Length of the descriptor in bytes
+ * Level - Current source code indentation level
+ *
+ * RETURN: None
+ *
+ * DESCRIPTION: Decode a Vendor Large descriptor
+ *
+ ******************************************************************************/
+
+void
+AcpiDmVendorLargeDescriptor (
+ ASL_LARGE_VENDOR_DESC *Resource,
+ UINT32 Length,
+ UINT32 Level)
+{
+
+ AcpiDmIndent (Level);
+ AcpiOsPrintf ("VendorLong ()\n");
+ AcpiDmIndent (Level);
+
+ AcpiOsPrintf ("{\n");
+
+ AcpiDmDisasmByteList (Level + 1, (UINT8 *) Resource->VendorDefined, Length);
+ AcpiDmIndent (Level);
+ AcpiOsPrintf ("}\n");
+}
+
+
+#endif
+
diff --git a/sys/contrib/dev/acpica/dmresrcs.c b/sys/contrib/dev/acpica/dmresrcs.c
new file mode 100644
index 000000000000..114e1d104f91
--- /dev/null
+++ b/sys/contrib/dev/acpica/dmresrcs.c
@@ -0,0 +1,352 @@
+/*******************************************************************************
+ *
+ * Module Name: dmresrcs.c - "Small" Resource Descriptor disassembly
+ * $Revision: 2 $
+ *
+ ******************************************************************************/
+
+/******************************************************************************
+ *
+ * 1. Copyright Notice
+ *
+ * Some or all of this work - Copyright (c) 1999 - 2002, Intel Corp.
+ * All rights reserved.
+ *
+ * 2. License
+ *
+ * 2.1. This is your license from Intel Corp. under its intellectual property
+ * rights. You may have additional license terms from the party that provided
+ * you this software, covering your right to use that party's intellectual
+ * property rights.
+ *
+ * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a
+ * copy of the source code appearing in this file ("Covered Code") an
+ * irrevocable, perpetual, worldwide license under Intel's copyrights in the
+ * base code distributed originally by Intel ("Original Intel Code") to copy,
+ * make derivatives, distribute, use and display any portion of the Covered
+ * Code in any form, with the right to sublicense such rights; and
+ *
+ * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent
+ * license (with the right to sublicense), under only those claims of Intel
+ * patents that are infringed by the Original Intel Code, to make, use, sell,
+ * offer to sell, and import the Covered Code and derivative works thereof
+ * solely to the minimum extent necessary to exercise the above copyright
+ * license, and in no event shall the patent license extend to any additions
+ * to or modifications of the Original Intel Code. No other license or right
+ * is granted directly or by implication, estoppel or otherwise;
+ *
+ * The above copyright and patent license is granted only if the following
+ * conditions are met:
+ *
+ * 3. Conditions
+ *
+ * 3.1. Redistribution of Source with Rights to Further Distribute Source.
+ * Redistribution of source code of any substantial portion of the Covered
+ * Code or modification with rights to further distribute source must include
+ * the above Copyright Notice, the above License, this list of Conditions,
+ * and the following Disclaimer and Export Compliance provision. In addition,
+ * Licensee must cause all Covered Code to which Licensee contributes to
+ * contain a file documenting the changes Licensee made to create that Covered
+ * Code and the date of any change. Licensee must include in that file the
+ * documentation of any changes made by any predecessor Licensee. Licensee
+ * must include a prominent statement that the modification is derived,
+ * directly or indirectly, from Original Intel Code.
+ *
+ * 3.2. Redistribution of Source with no Rights to Further Distribute Source.
+ * Redistribution of source code of any substantial portion of the Covered
+ * Code or modification without rights to further distribute source must
+ * include the following Disclaimer and Export Compliance provision in the
+ * documentation and/or other materials provided with distribution. In
+ * addition, Licensee may not authorize further sublicense of source of any
+ * portion of the Covered Code, and must include terms to the effect that the
+ * license from Licensee to its licensee is limited to the intellectual
+ * property embodied in the software Licensee provides to its licensee, and
+ * not to intellectual property embodied in modifications its licensee may
+ * make.
+ *
+ * 3.3. Redistribution of Executable. Redistribution in executable form of any
+ * substantial portion of the Covered Code or modification must reproduce the
+ * above Copyright Notice, and the following Disclaimer and Export Compliance
+ * provision in the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * 3.4. Intel retains all right, title, and interest in and to the Original
+ * Intel Code.
+ *
+ * 3.5. Neither the name Intel nor any other trademark owned or controlled by
+ * Intel shall be used in advertising or otherwise to promote the sale, use or
+ * other dealings in products derived from or relating to the Covered Code
+ * without prior written authorization from Intel.
+ *
+ * 4. Disclaimer and Export Compliance
+ *
+ * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED
+ * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE
+ * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE,
+ * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY
+ * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY
+ * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A
+ * PARTICULAR PURPOSE.
+ *
+ * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES
+ * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR
+ * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT,
+ * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY
+ * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL
+ * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS
+ * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY
+ * LIMITED REMEDY.
+ *
+ * 4.3. Licensee shall not export, either directly or indirectly, any of this
+ * software or system incorporating such software without first obtaining any
+ * required license or other approval from the U. S. Department of Commerce or
+ * any other agency or department of the United States Government. In the
+ * event Licensee exports any such software from the United States or
+ * re-exports any such software from a foreign destination, Licensee shall
+ * ensure that the distribution and export/re-export of the software is in
+ * compliance with all laws, regulations, orders, or other restrictions of the
+ * U.S. Export Administration Regulations. Licensee agrees that neither it nor
+ * any of its subsidiaries will export/re-export any technical data, process,
+ * software, or service, directly or indirectly, to any country for which the
+ * United States government or any agency thereof requires an export license,
+ * other governmental approval, or letter of assurance, without first obtaining
+ * such license, approval or letter.
+ *
+ *****************************************************************************/
+
+
+#include "acpi.h"
+#include "acdisasm.h"
+
+
+#ifdef ACPI_DISASSEMBLER
+
+#define _COMPONENT ACPI_DEBUGGER
+ ACPI_MODULE_NAME ("dbresrcs")
+
+
+/*******************************************************************************
+ *
+ * FUNCTION: AcpiDmIrqDescriptor
+ *
+ * PARAMETERS: Resource - Pointer to the resource descriptor
+ * Length - Length of the descriptor in bytes
+ * Level - Current source code indentation level
+ *
+ * RETURN: None
+ *
+ * DESCRIPTION: Decode a IRQ descriptor
+ *
+ ******************************************************************************/
+
+void
+AcpiDmIrqDescriptor (
+ ASL_IRQ_FORMAT_DESC *Resource,
+ UINT32 Length,
+ UINT32 Level)
+{
+
+ AcpiDmIndent (Level);
+ AcpiOsPrintf ("%s (",
+ AcpiGbl_IrqDecode [Length & 1]);
+
+ if (Length & 1)
+ {
+ AcpiOsPrintf ("%s, %s, %s",
+ AcpiGbl_HEDecode [Resource->Flags & 1],
+ AcpiGbl_LLDecode [(Resource->Flags >> 3) & 1],
+ AcpiGbl_SHRDecode [(Resource->Flags >> 4) & 1]);
+ }
+
+ AcpiDmBitList (Resource->IrqMask);
+}
+
+
+/*******************************************************************************
+ *
+ * FUNCTION: AcpiDmDmaDescriptor
+ *
+ * PARAMETERS: Resource - Pointer to the resource descriptor
+ * Length - Length of the descriptor in bytes
+ * Level - Current source code indentation level
+ *
+ * RETURN: None
+ *
+ * DESCRIPTION: Decode a DMA descriptor
+ *
+ ******************************************************************************/
+
+void
+AcpiDmDmaDescriptor (
+ ASL_DMA_FORMAT_DESC *Resource,
+ UINT32 Length,
+ UINT32 Level)
+{
+
+ AcpiDmIndent (Level);
+ AcpiOsPrintf ("DMA (%s, %s, %s",
+ AcpiGbl_TYPDecode [(Resource->Flags >> 5) & 3],
+ AcpiGbl_BMDecode [(Resource->Flags >> 2) & 1],
+ AcpiGbl_SIZDecode [(Resource->Flags >> 0) & 3]);
+
+ AcpiDmBitList (Resource->DmaChannelMask);
+}
+
+
+/*******************************************************************************
+ *
+ * FUNCTION: AcpiDmIoDescriptor
+ *
+ * PARAMETERS: Resource - Pointer to the resource descriptor
+ * Length - Length of the descriptor in bytes
+ * Level - Current source code indentation level
+ *
+ * RETURN: None
+ *
+ * DESCRIPTION: Decode an IO descriptor
+ *
+ ******************************************************************************/
+
+void
+AcpiDmIoDescriptor (
+ ASL_IO_PORT_DESC *Resource,
+ UINT32 Length,
+ UINT32 Level)
+{
+
+ AcpiDmIndent (Level);
+ AcpiOsPrintf ("IO (%s, 0x%4.4X, 0x%4.4X, 0x%2.2X, 0x%2.2X)\n",
+ AcpiGbl_IoDecode [(Resource->Information & 1)],
+ (UINT32) Resource->AddressMin,
+ (UINT32) Resource->AddressMax,
+ (UINT32) Resource->Alignment,
+ (UINT32) Resource->Length);
+}
+
+
+/*******************************************************************************
+ *
+ * FUNCTION: AcpiDmFixedIoDescriptor
+ *
+ * PARAMETERS: Resource - Pointer to the resource descriptor
+ * Length - Length of the descriptor in bytes
+ * Level - Current source code indentation level
+ *
+ * RETURN: None
+ *
+ * DESCRIPTION: Decode a Fixed IO descriptor
+ *
+ ******************************************************************************/
+
+void
+AcpiDmFixedIoDescriptor (
+ ASL_FIXED_IO_PORT_DESC *Resource,
+ UINT32 Length,
+ UINT32 Level)
+{
+
+ AcpiDmIndent (Level);
+ AcpiOsPrintf ("FixedIO (0x%4.4X, 0x%2.2X)\n",
+ (UINT32) Resource->BaseAddress,
+ (UINT32) Resource->Length);
+}
+
+
+/*******************************************************************************
+ *
+ * FUNCTION: AcpiDmStartDependentDescriptor
+ *
+ * PARAMETERS: Resource - Pointer to the resource descriptor
+ * Length - Length of the descriptor in bytes
+ * Level - Current source code indentation level
+ *
+ * RETURN: None
+ *
+ * DESCRIPTION: Decode a Start Dependendent functions descriptor
+ *
+ ******************************************************************************/
+
+void
+AcpiDmStartDependentDescriptor (
+ ASL_START_DEPENDENT_DESC *Resource,
+ UINT32 Length,
+ UINT32 Level)
+{
+
+ AcpiDmIndent (Level);
+
+ if (Length & 1)
+ {
+ AcpiOsPrintf ("StartDependentFn (0x%2.2X, 0x%2.2X)\n",
+ (UINT32) Resource->Flags & 3,
+ (UINT32) (Resource->Flags >> 2) & 3);
+ }
+ else
+ {
+ AcpiOsPrintf ("StartDependentFnNoPri ()\n");
+ }
+
+ AcpiDmIndent (Level);
+ AcpiOsPrintf ("{\n");
+}
+
+
+/*******************************************************************************
+ *
+ * FUNCTION: AcpiDmEndDependentDescriptor
+ *
+ * PARAMETERS: Resource - Pointer to the resource descriptor
+ * Length - Length of the descriptor in bytes
+ * Level - Current source code indentation level
+ *
+ * RETURN: None
+ *
+ * DESCRIPTION: Decode an End Dependent functions descriptor
+ *
+ ******************************************************************************/
+
+void
+AcpiDmEndDependentDescriptor (
+ ASL_START_DEPENDENT_DESC *Resource,
+ UINT32 Length,
+ UINT32 Level)
+{
+
+ AcpiDmIndent (Level);
+ AcpiOsPrintf ("}\n");
+ AcpiDmIndent (Level);
+ AcpiOsPrintf ("EndDependentFn ()\n");
+}
+
+
+/*******************************************************************************
+ *
+ * FUNCTION: AcpiDmVendorSmallDescriptor
+ *
+ * PARAMETERS: Resource - Pointer to the resource descriptor
+ * Length - Length of the descriptor in bytes
+ * Level - Current source code indentation level
+ *
+ * RETURN: None
+ *
+ * DESCRIPTION: Decode a Vendor Small Descriptor
+ *
+ ******************************************************************************/
+
+void
+AcpiDmVendorSmallDescriptor (
+ ASL_SMALL_VENDOR_DESC *Resource,
+ UINT32 Length,
+ UINT32 Level)
+{
+
+ AcpiDmIndent (Level);
+ AcpiOsPrintf ("VendorShort () {");
+
+ AcpiDmDisasmByteList (0, (UINT8 *) Resource->VendorDefined, Length);
+ AcpiOsPrintf ("}\n");
+}
+
+#endif
+
+
diff --git a/sys/contrib/dev/acpica/dmutils.c b/sys/contrib/dev/acpica/dmutils.c
new file mode 100644
index 000000000000..1cfd5b51624f
--- /dev/null
+++ b/sys/contrib/dev/acpica/dmutils.c
@@ -0,0 +1,405 @@
+/*******************************************************************************
+ *
+ * Module Name: dmutils - AML disassembler utilities
+ * $Revision: 2 $
+ *
+ ******************************************************************************/
+
+/******************************************************************************
+ *
+ * 1. Copyright Notice
+ *
+ * Some or all of this work - Copyright (c) 1999 - 2002, Intel Corp.
+ * All rights reserved.
+ *
+ * 2. License
+ *
+ * 2.1. This is your license from Intel Corp. under its intellectual property
+ * rights. You may have additional license terms from the party that provided
+ * you this software, covering your right to use that party's intellectual
+ * property rights.
+ *
+ * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a
+ * copy of the source code appearing in this file ("Covered Code") an
+ * irrevocable, perpetual, worldwide license under Intel's copyrights in the
+ * base code distributed originally by Intel ("Original Intel Code") to copy,
+ * make derivatives, distribute, use and display any portion of the Covered
+ * Code in any form, with the right to sublicense such rights; and
+ *
+ * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent
+ * license (with the right to sublicense), under only those claims of Intel
+ * patents that are infringed by the Original Intel Code, to make, use, sell,
+ * offer to sell, and import the Covered Code and derivative works thereof
+ * solely to the minimum extent necessary to exercise the above copyright
+ * license, and in no event shall the patent license extend to any additions
+ * to or modifications of the Original Intel Code. No other license or right
+ * is granted directly or by implication, estoppel or otherwise;
+ *
+ * The above copyright and patent license is granted only if the following
+ * conditions are met:
+ *
+ * 3. Conditions
+ *
+ * 3.1. Redistribution of Source with Rights to Further Distribute Source.
+ * Redistribution of source code of any substantial portion of the Covered
+ * Code or modification with rights to further distribute source must include
+ * the above Copyright Notice, the above License, this list of Conditions,
+ * and the following Disclaimer and Export Compliance provision. In addition,
+ * Licensee must cause all Covered Code to which Licensee contributes to
+ * contain a file documenting the changes Licensee made to create that Covered
+ * Code and the date of any change. Licensee must include in that file the
+ * documentation of any changes made by any predecessor Licensee. Licensee
+ * must include a prominent statement that the modification is derived,
+ * directly or indirectly, from Original Intel Code.
+ *
+ * 3.2. Redistribution of Source with no Rights to Further Distribute Source.
+ * Redistribution of source code of any substantial portion of the Covered
+ * Code or modification without rights to further distribute source must
+ * include the following Disclaimer and Export Compliance provision in the
+ * documentation and/or other materials provided with distribution. In
+ * addition, Licensee may not authorize further sublicense of source of any
+ * portion of the Covered Code, and must include terms to the effect that the
+ * license from Licensee to its licensee is limited to the intellectual
+ * property embodied in the software Licensee provides to its licensee, and
+ * not to intellectual property embodied in modifications its licensee may
+ * make.
+ *
+ * 3.3. Redistribution of Executable. Redistribution in executable form of any
+ * substantial portion of the Covered Code or modification must reproduce the
+ * above Copyright Notice, and the following Disclaimer and Export Compliance
+ * provision in the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * 3.4. Intel retains all right, title, and interest in and to the Original
+ * Intel Code.
+ *
+ * 3.5. Neither the name Intel nor any other trademark owned or controlled by
+ * Intel shall be used in advertising or otherwise to promote the sale, use or
+ * other dealings in products derived from or relating to the Covered Code
+ * without prior written authorization from Intel.
+ *
+ * 4. Disclaimer and Export Compliance
+ *
+ * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED
+ * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE
+ * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE,
+ * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY
+ * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY
+ * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A
+ * PARTICULAR PURPOSE.
+ *
+ * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES
+ * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR
+ * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT,
+ * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY
+ * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL
+ * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS
+ * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY
+ * LIMITED REMEDY.
+ *
+ * 4.3. Licensee shall not export, either directly or indirectly, any of this
+ * software or system incorporating such software without first obtaining any
+ * required license or other approval from the U. S. Department of Commerce or
+ * any other agency or department of the United States Government. In the
+ * event Licensee exports any such software from the United States or
+ * re-exports any such software from a foreign destination, Licensee shall
+ * ensure that the distribution and export/re-export of the software is in
+ * compliance with all laws, regulations, orders, or other restrictions of the
+ * U.S. Export Administration Regulations. Licensee agrees that neither it nor
+ * any of its subsidiaries will export/re-export any technical data, process,
+ * software, or service, directly or indirectly, to any country for which the
+ * United States government or any agency thereof requires an export license,
+ * other governmental approval, or letter of assurance, without first obtaining
+ * such license, approval or letter.
+ *
+ *****************************************************************************/
+
+
+#include "acpi.h"
+#include "amlcode.h"
+#include "acdisasm.h"
+
+
+#ifdef ACPI_DISASSEMBLER
+
+#define _COMPONENT ACPI_DEBUGGER
+ ACPI_MODULE_NAME ("dmutils")
+
+
+
+
+/* Data used in keeping track of fields */
+#if 0
+const NATIVE_CHAR *AcpiGbl_FENames[NUM_FIELD_NAMES] =
+{
+ "skip",
+ "?access?"
+}; /* FE = Field Element */
+#endif
+
+
+const NATIVE_CHAR *AcpiGbl_MatchOps[NUM_MATCH_OPS] =
+{
+ "MTR",
+ "MEQ",
+ "MLE",
+ "MLT",
+ "MGE",
+ "MGT"
+};
+
+
+/* Access type decoding */
+
+const NATIVE_CHAR *AcpiGbl_AccessTypes[NUM_ACCESS_TYPES] =
+{
+ "AnyAcc",
+ "ByteAcc",
+ "WordAcc",
+ "DWordAcc",
+ "QWordAcc",
+ "BufferAcc",
+};
+
+
+/* Lock rule decoding */
+
+const NATIVE_CHAR *AcpiGbl_LockRule[NUM_LOCK_RULES] =
+{
+ "NoLock",
+ "Lock"
+};
+
+/* Update rule decoding */
+
+const NATIVE_CHAR *AcpiGbl_UpdateRules[NUM_UPDATE_RULES] =
+{
+ "Preserve",
+ "WriteAsOnes",
+ "WriteAsZeros"
+};
+
+/*
+ * Strings used to decode resource descriptors
+ */
+const char *AcpiGbl_IoDecode[2] =
+{
+ "Decode10",
+ "Decode16"
+};
+
+const char *AcpiGbl_WordDecode[4] =
+{
+ "WordMemory",
+ "WordIO",
+ "WordBusNumber",
+ "Unknown-resource-type"
+};
+
+const char *AcpiGbl_ConsumeDecode[2] =
+{
+ "ResourceProducer",
+ "ResourceConsumer"
+};
+
+const char *AcpiGbl_MinDecode[2] =
+{
+ "MinNotFixed",
+ "MinFixed"
+};
+
+const char *AcpiGbl_MaxDecode[2] =
+{
+ "MaxNotFixed",
+ "MaxFixed"
+};
+
+const char *AcpiGbl_DECDecode[2] =
+{
+ "PosDecode",
+ "SubDecode"
+};
+
+const char *AcpiGbl_RNGDecode[4] =
+{
+ "InvalidRanges",
+ "NonISAOnlyRanges",
+ "ISAOnlyRanges",
+ "EntireRange"
+};
+
+const char *AcpiGbl_MEMDecode[4] =
+{
+ "NonCacheable",
+ "Cacheable",
+ "WriteCombining",
+ "Prefetchable"
+};
+
+const char *AcpiGbl_RWDecode[2] =
+{
+ "ReadOnly",
+ "ReadWrite"
+};
+
+const char *AcpiGbl_IrqDecode[2] =
+{
+ "IRQNoFlags",
+ "IRQ"
+};
+
+const char *AcpiGbl_HEDecode[2] =
+{
+ "Level",
+ "Edge"
+};
+
+const char *AcpiGbl_LLDecode[2] =
+{
+ "ActiveHigh",
+ "ActiveLow"
+};
+
+const char *AcpiGbl_SHRDecode[2] =
+{
+ "Exclusive",
+ "Shared"
+};
+
+const char *AcpiGbl_TYPDecode[4] =
+{
+ "Compatibility",
+ "TypeA",
+ "TypeB",
+ "TypeF"
+};
+
+const char *AcpiGbl_BMDecode[2] =
+{
+ "NotBusMaster",
+ "BusMaster"
+};
+
+const char *AcpiGbl_SIZDecode[4] =
+{
+ "Transfer8",
+ "Transfer8_16",
+ "Transfer16",
+ "InvalidSize"
+};
+
+
+/*******************************************************************************
+ *
+ * FUNCTION: AcpiDmIndent
+ *
+ * PARAMETERS: Level - Current source code indentation level
+ *
+ * RETURN: None
+ *
+ * DESCRIPTION: Indent 4 spaces per indentation level.
+ *
+ ******************************************************************************/
+
+void
+AcpiDmIndent (
+ UINT32 Level)
+{
+
+ if (!Level)
+ {
+ return;
+ }
+
+ AcpiOsPrintf ("%*.s", ACPI_MUL_4 (Level), " ");
+}
+
+
+/*******************************************************************************
+ *
+ * FUNCTION: AcpiDmCommaIfListMember
+ *
+ * PARAMETERS: Op - Current operator/operand
+ *
+ * RETURN: TRUE if a comma was inserted
+ *
+ * DESCRIPTION: Insert a comma if this Op is a member of an argument list.
+ *
+ ******************************************************************************/
+
+BOOLEAN
+AcpiDmCommaIfListMember (
+ ACPI_PARSE_OBJECT *Op)
+{
+
+ if (!Op->Common.Next)
+ {
+ return FALSE;
+ }
+
+ if (AcpiDmListType (Op->Common.Parent) & BLOCK_COMMA_LIST)
+ {
+ /* Check for a NULL target operand */
+
+ if ((Op->Common.Next->Common.AmlOpcode == AML_INT_NAMEPATH_OP) &&
+ (!Op->Common.Next->Common.Value.String))
+ {
+ /*
+ * To handle the Divide() case where there are two optional
+ * targets, look ahead one more op. If null, this null target
+ * is the one and only target -- no comma needed. Otherwise,
+ * we need a comma to prepare for the next target.
+ */
+ if (!Op->Common.Next->Common.Next)
+ {
+ return FALSE;
+ }
+ }
+
+ if ((Op->Common.DisasmFlags & ACPI_PARSEOP_PARAMLIST) &&
+ (!(Op->Common.Next->Common.DisasmFlags & ACPI_PARSEOP_PARAMLIST)))
+ {
+ return FALSE;
+ }
+
+ AcpiOsPrintf (", ");
+ return (TRUE);
+ }
+
+ else if ((Op->Common.DisasmFlags & ACPI_PARSEOP_PARAMLIST) &&
+ (Op->Common.Next->Common.DisasmFlags & ACPI_PARSEOP_PARAMLIST))
+ {
+ AcpiOsPrintf (", ");
+ return (TRUE);
+ }
+
+ return (FALSE);
+}
+
+
+/*******************************************************************************
+ *
+ * FUNCTION: AcpiDmCommaIfFieldMember
+ *
+ * PARAMETERS: Op - Current operator/operand
+ *
+ * RETURN: None
+ *
+ * DESCRIPTION: Insert a comma if this Op is a member of a Field argument list.
+ *
+ ******************************************************************************/
+
+void
+AcpiDmCommaIfFieldMember (
+ ACPI_PARSE_OBJECT *Op)
+{
+
+ if (Op->Common.Next)
+ {
+ AcpiOsPrintf (", ");
+ }
+}
+
+
+
+#endif
diff --git a/sys/contrib/dev/acpica/dmwalk.c b/sys/contrib/dev/acpica/dmwalk.c
new file mode 100644
index 000000000000..86404e27b578
--- /dev/null
+++ b/sys/contrib/dev/acpica/dmwalk.c
@@ -0,0 +1,921 @@
+/*******************************************************************************
+ *
+ * Module Name: dmwalk - AML disassembly tree walk
+ * $Revision: 6 $
+ *
+ ******************************************************************************/
+
+/******************************************************************************
+ *
+ * 1. Copyright Notice
+ *
+ * Some or all of this work - Copyright (c) 1999 - 2002, Intel Corp.
+ * All rights reserved.
+ *
+ * 2. License
+ *
+ * 2.1. This is your license from Intel Corp. under its intellectual property
+ * rights. You may have additional license terms from the party that provided
+ * you this software, covering your right to use that party's intellectual
+ * property rights.
+ *
+ * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a
+ * copy of the source code appearing in this file ("Covered Code") an
+ * irrevocable, perpetual, worldwide license under Intel's copyrights in the
+ * base code distributed originally by Intel ("Original Intel Code") to copy,
+ * make derivatives, distribute, use and display any portion of the Covered
+ * Code in any form, with the right to sublicense such rights; and
+ *
+ * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent
+ * license (with the right to sublicense), under only those claims of Intel
+ * patents that are infringed by the Original Intel Code, to make, use, sell,
+ * offer to sell, and import the Covered Code and derivative works thereof
+ * solely to the minimum extent necessary to exercise the above copyright
+ * license, and in no event shall the patent license extend to any additions
+ * to or modifications of the Original Intel Code. No other license or right
+ * is granted directly or by implication, estoppel or otherwise;
+ *
+ * The above copyright and patent license is granted only if the following
+ * conditions are met:
+ *
+ * 3. Conditions
+ *
+ * 3.1. Redistribution of Source with Rights to Further Distribute Source.
+ * Redistribution of source code of any substantial portion of the Covered
+ * Code or modification with rights to further distribute source must include
+ * the above Copyright Notice, the above License, this list of Conditions,
+ * and the following Disclaimer and Export Compliance provision. In addition,
+ * Licensee must cause all Covered Code to which Licensee contributes to
+ * contain a file documenting the changes Licensee made to create that Covered
+ * Code and the date of any change. Licensee must include in that file the
+ * documentation of any changes made by any predecessor Licensee. Licensee
+ * must include a prominent statement that the modification is derived,
+ * directly or indirectly, from Original Intel Code.
+ *
+ * 3.2. Redistribution of Source with no Rights to Further Distribute Source.
+ * Redistribution of source code of any substantial portion of the Covered
+ * Code or modification without rights to further distribute source must
+ * include the following Disclaimer and Export Compliance provision in the
+ * documentation and/or other materials provided with distribution. In
+ * addition, Licensee may not authorize further sublicense of source of any
+ * portion of the Covered Code, and must include terms to the effect that the
+ * license from Licensee to its licensee is limited to the intellectual
+ * property embodied in the software Licensee provides to its licensee, and
+ * not to intellectual property embodied in modifications its licensee may
+ * make.
+ *
+ * 3.3. Redistribution of Executable. Redistribution in executable form of any
+ * substantial portion of the Covered Code or modification must reproduce the
+ * above Copyright Notice, and the following Disclaimer and Export Compliance
+ * provision in the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * 3.4. Intel retains all right, title, and interest in and to the Original
+ * Intel Code.
+ *
+ * 3.5. Neither the name Intel nor any other trademark owned or controlled by
+ * Intel shall be used in advertising or otherwise to promote the sale, use or
+ * other dealings in products derived from or relating to the Covered Code
+ * without prior written authorization from Intel.
+ *
+ * 4. Disclaimer and Export Compliance
+ *
+ * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED
+ * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE
+ * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE,
+ * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY
+ * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY
+ * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A
+ * PARTICULAR PURPOSE.
+ *
+ * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES
+ * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR
+ * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT,
+ * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY
+ * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL
+ * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS
+ * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY
+ * LIMITED REMEDY.
+ *
+ * 4.3. Licensee shall not export, either directly or indirectly, any of this
+ * software or system incorporating such software without first obtaining any
+ * required license or other approval from the U. S. Department of Commerce or
+ * any other agency or department of the United States Government. In the
+ * event Licensee exports any such software from the United States or
+ * re-exports any such software from a foreign destination, Licensee shall
+ * ensure that the distribution and export/re-export of the software is in
+ * compliance with all laws, regulations, orders, or other restrictions of the
+ * U.S. Export Administration Regulations. Licensee agrees that neither it nor
+ * any of its subsidiaries will export/re-export any technical data, process,
+ * software, or service, directly or indirectly, to any country for which the
+ * United States government or any agency thereof requires an export license,
+ * other governmental approval, or letter of assurance, without first obtaining
+ * such license, approval or letter.
+ *
+ *****************************************************************************/
+
+
+#include "acpi.h"
+#include "acparser.h"
+#include "amlcode.h"
+#include "acdisasm.h"
+#include "acdebug.h"
+
+
+#ifdef ACPI_DISASSEMBLER
+
+#define _COMPONENT ACPI_DEBUGGER
+ ACPI_MODULE_NAME ("dmwalk")
+
+
+#define DB_FULL_OP_INFO "%5.5X #%4.4hX "
+
+
+
+/*******************************************************************************
+ *
+ * FUNCTION: AcpiDmDisassemble
+ *
+ * PARAMETERS: Origin - Starting object
+ * NumOpcodes - Max number of opcodes to be displayed
+ *
+ * RETURN: None
+ *
+ * DESCRIPTION: Disassemble parser object and its children. This is the
+ * main entry point of the disassembler.
+ *
+ ******************************************************************************/
+
+void
+AcpiDmDisassemble (
+ ACPI_WALK_STATE *WalkState,
+ ACPI_PARSE_OBJECT *Origin,
+ UINT32 NumOpcodes)
+{
+ ACPI_PARSE_OBJECT *Op = Origin;
+ ACPI_OP_WALK_INFO Info;
+
+
+ if (!Op)
+ {
+ return;
+ }
+
+ Info.Level = 0;
+ AcpiDmWalkParseTree (Op, AcpiDmDescendingOp, AcpiDmAscendingOp, &Info);
+
+ return;
+}
+
+
+/*******************************************************************************
+ *
+ * FUNCTION: AcpiDmWalkParseTree
+ *
+ * PARAMETERS: DescendingCallback - Called during tree descent
+ * AscendingCallback - Called during tree ascent
+ * Context - To be passed to the callbacks
+ *
+ * RETURN: Status from callback(s)
+ *
+ * DESCRIPTION: Walk the entire parse tree.
+ *
+ ******************************************************************************/
+
+void
+AcpiDmWalkParseTree (
+ ACPI_PARSE_OBJECT *Op,
+ ASL_WALK_CALLBACK DescendingCallback,
+ ASL_WALK_CALLBACK AscendingCallback,
+ void *Context)
+{
+ BOOLEAN NodePreviouslyVisited;
+ ACPI_PARSE_OBJECT *StartOp = Op;
+ ACPI_STATUS Status;
+ ACPI_PARSE_OBJECT *Next;
+ ACPI_OP_WALK_INFO *Info = Context;
+
+
+ Info->Level = 0;
+ NodePreviouslyVisited = FALSE;
+
+ while (Op)
+ {
+ if (NodePreviouslyVisited)
+ {
+ Status = AscendingCallback (Op, Info->Level, Context);
+ if (ACPI_FAILURE (Status))
+ {
+ return;
+ }
+ }
+ else
+ {
+ /*
+ * Let the callback process the node.
+ */
+ Status = DescendingCallback (Op, Info->Level, Context);
+ if (ACPI_SUCCESS (Status))
+ {
+ /* Visit children first, once */
+
+ Next = AcpiPsGetArg (Op, 0);
+ if (Next)
+ {
+ Info->Level++;
+ Op = Next;
+ continue;
+ }
+ }
+ else if (Status != AE_CTRL_DEPTH)
+ {
+ /* Exit immediately on any error */
+
+ return;
+ }
+ }
+
+ /* Terminate walk at start op */
+
+ if (Op == StartOp)
+ {
+ break;
+ }
+
+ /* No more children, re-visit this node */
+
+ if (!NodePreviouslyVisited)
+ {
+ NodePreviouslyVisited = TRUE;
+ continue;
+ }
+
+ /* No more children, visit peers */
+
+ if (Op->Common.Next)
+ {
+ Op = Op->Common.Next;
+ NodePreviouslyVisited = FALSE;
+ }
+ else
+ {
+ /* No peers, re-visit parent */
+
+ if (Info->Level != 0 )
+ {
+ Info->Level--;
+ }
+
+ Op = Op->Common.Parent;
+ NodePreviouslyVisited = TRUE;
+ }
+ }
+
+ /* If we get here, the walk completed with no errors */
+
+ return;
+}
+
+
+/*******************************************************************************
+ *
+ * FUNCTION: AcpiDmBlockType
+ *
+ * PARAMETERS: Op - Object to be examined
+ *
+ * RETURN: Status
+ *
+ * DESCRIPTION: Type of block for this op (parens or braces)
+ *
+ ******************************************************************************/
+
+UINT32
+AcpiDmBlockType (
+ ACPI_PARSE_OBJECT *Op)
+{
+ const ACPI_OPCODE_INFO *OpInfo;
+
+
+ if (!Op)
+ {
+ return (BLOCK_NONE);
+ }
+
+ switch (Op->Common.AmlOpcode)
+ {
+ case AML_ELSE_OP:
+
+ return (BLOCK_BRACE);
+
+ case AML_METHOD_OP:
+ case AML_DEVICE_OP:
+ case AML_SCOPE_OP:
+ case AML_PROCESSOR_OP:
+ case AML_POWER_RES_OP:
+ case AML_THERMAL_ZONE_OP:
+ case AML_IF_OP:
+ case AML_WHILE_OP:
+ case AML_FIELD_OP:
+ case AML_INDEX_FIELD_OP:
+ case AML_BANK_FIELD_OP:
+
+ return (BLOCK_PAREN | BLOCK_BRACE);
+
+ case AML_BUFFER_OP:
+
+ if (Op->Common.DisasmOpcode == ACPI_DASM_UNICODE)
+ {
+ return (BLOCK_NONE);
+ }
+
+ /*lint -fallthrough */
+
+ case AML_PACKAGE_OP:
+ case AML_VAR_PACKAGE_OP:
+
+ return (BLOCK_PAREN | BLOCK_BRACE);
+
+ case AML_EVENT_OP:
+
+ return (BLOCK_PAREN);
+
+ default:
+
+ OpInfo = AcpiPsGetOpcodeInfo (Op->Common.AmlOpcode);
+ if (OpInfo->Flags & AML_HAS_ARGS)
+ {
+ return (BLOCK_PAREN);
+ }
+
+ return (BLOCK_NONE);
+ }
+}
+
+
+/*******************************************************************************
+ *
+ * FUNCTION: AcpiDmListType
+ *
+ * PARAMETERS: Op - Object to be examined
+ *
+ * RETURN: Status
+ *
+ * DESCRIPTION: Type of block for this op (parens or braces)
+ *
+ ******************************************************************************/
+
+UINT32
+AcpiDmListType (
+ ACPI_PARSE_OBJECT *Op)
+{
+ const ACPI_OPCODE_INFO *OpInfo;
+
+
+ if (!Op)
+ {
+ return (BLOCK_NONE);
+ }
+
+ switch (Op->Common.AmlOpcode)
+ {
+
+ case AML_ELSE_OP:
+ case AML_METHOD_OP:
+ case AML_DEVICE_OP:
+ case AML_SCOPE_OP:
+ case AML_POWER_RES_OP:
+ case AML_PROCESSOR_OP:
+ case AML_THERMAL_ZONE_OP:
+ case AML_IF_OP:
+ case AML_WHILE_OP:
+ case AML_FIELD_OP:
+ case AML_INDEX_FIELD_OP:
+ case AML_BANK_FIELD_OP:
+
+ return (0);
+
+ case AML_BUFFER_OP:
+ case AML_PACKAGE_OP:
+ case AML_VAR_PACKAGE_OP:
+
+ return (BLOCK_COMMA_LIST);
+
+ default:
+
+ OpInfo = AcpiPsGetOpcodeInfo (Op->Common.AmlOpcode);
+ if (OpInfo->Flags & AML_HAS_ARGS)
+ {
+ return (BLOCK_COMMA_LIST);
+ }
+
+ return (BLOCK_NONE);
+ }
+}
+
+
+/*******************************************************************************
+ *
+ * FUNCTION: AcpiDmDescendingOp
+ *
+ * PARAMETERS: ASL_WALK_CALLBACK
+ *
+ * RETURN: Status
+ *
+ * DESCRIPTION: First visitation of a parse object during tree descent.
+ * Decode opcode name and begin parameter list(s), if any.
+ *
+ ******************************************************************************/
+
+ACPI_STATUS
+AcpiDmDescendingOp (
+ ACPI_PARSE_OBJECT *Op,
+ UINT32 Level,
+ void *Context)
+{
+ ACPI_OP_WALK_INFO *Info = Context;
+ const ACPI_OPCODE_INFO *OpInfo;
+ UINT32 Name;
+ ACPI_PARSE_OBJECT *NextOp;
+
+
+ if (Op->Common.DisasmFlags & ACPI_PARSEOP_IGNORE)
+ {
+ /* Ignore this op -- it was handled elsewhere */
+
+ return (AE_CTRL_DEPTH);
+ }
+
+
+ if (Level == 0)
+ {
+ /* In verbose mode, print the AML offset, opcode and depth count */
+
+ VERBOSE_PRINT ((DB_FULL_OP_INFO, (UINT32) Op->Common.AmlOffset,
+ Op->Common.AmlOpcode));
+
+ if (Op->Common.AmlOpcode == AML_SCOPE_OP)
+ {
+ AcpiOsPrintf ("{\n");
+ return (AE_OK);
+ }
+ }
+ else if ((AcpiDmBlockType (Op->Common.Parent) & BLOCK_BRACE) &&
+ (!(Op->Common.DisasmFlags & ACPI_PARSEOP_PARAMLIST)) &&
+ (Op->Common.AmlOpcode != AML_INT_BYTELIST_OP))
+ {
+ /* This is a first-level element of a term list, indent a new line */
+
+ AcpiDmIndent (Level);
+ }
+
+ /* Print the opcode name */
+
+ AcpiDmDisassembleOneOp (NULL, Info, Op);
+
+ if ((Op->Common.AmlOpcode == AML_NAME_OP) ||
+ (Op->Common.AmlOpcode == AML_RETURN_OP))
+ {
+ Info->Level--;
+ }
+
+ /*
+ * Start the opcode argument list if necessary
+ */
+ OpInfo = AcpiPsGetOpcodeInfo (Op->Common.AmlOpcode);
+
+ if ((OpInfo->Flags & AML_HAS_ARGS) ||
+ (Op->Common.AmlOpcode == AML_EVENT_OP))
+ {
+ /* This opcode has an argument list */
+
+ if (AcpiDmBlockType (Op) & BLOCK_PAREN)
+ {
+ AcpiOsPrintf (" (");
+ }
+
+ /*
+ * If this is a named opcode, print the associated name value
+ */
+ if (OpInfo->Flags & AML_NAMED)
+ {
+ switch (Op->Common.AmlOpcode)
+ {
+ case AML_ALIAS_OP:
+
+ NextOp = AcpiPsGetDepthNext (NULL, Op);
+ NextOp->Common.DisasmFlags |= ACPI_PARSEOP_IGNORE;
+ AcpiDmNamestring (NextOp->Common.Value.Name);
+ AcpiOsPrintf (", ");
+
+ /*lint -fallthrough */
+
+ default:
+
+ Name = AcpiPsGetName (Op);
+ if (Op->Named.Path)
+ {
+ AcpiDmNamestring ((char *) Op->Named.Path);
+ }
+ else
+ {
+ AcpiDmDumpName ((char *) &Name);
+ }
+
+
+ if (Op->Common.AmlOpcode != AML_INT_NAMEDFIELD_OP)
+ {
+ AcpiDmValidateName ((char *) &Name, Op);
+ if (AcpiGbl_DbOpt_verbose)
+ {
+ (void) AcpiPsDisplayObjectPathname (NULL, Op);
+ }
+ }
+ break;
+ }
+
+ switch (Op->Common.AmlOpcode)
+ {
+ case AML_METHOD_OP:
+
+ AcpiDmMethodFlags (Op);
+ AcpiOsPrintf (")");
+ break;
+
+
+ case AML_NAME_OP:
+
+ /* Check for _HID and related EISAID() */
+
+ AcpiIsEisaId (Op);
+ AcpiOsPrintf (", ");
+ break;
+
+
+ case AML_REGION_OP:
+
+ AcpiDmRegionFlags (Op);
+ break;
+
+
+ case AML_POWER_RES_OP:
+
+ /* Mark the next two Ops as part of the parameter list */
+
+ AcpiOsPrintf (", ");
+ NextOp = AcpiPsGetDepthNext (NULL, Op);
+ NextOp->Common.DisasmFlags |= ACPI_PARSEOP_PARAMLIST;
+
+ NextOp = NextOp->Common.Next;
+ NextOp->Common.DisasmFlags |= ACPI_PARSEOP_PARAMLIST;
+ return (AE_OK);
+
+
+ case AML_PROCESSOR_OP:
+
+ /* Mark the next three Ops as part of the parameter list */
+
+ AcpiOsPrintf (", ");
+ NextOp = AcpiPsGetDepthNext (NULL, Op);
+ NextOp->Common.DisasmFlags |= ACPI_PARSEOP_PARAMLIST;
+
+ NextOp = NextOp->Common.Next;
+ NextOp->Common.DisasmFlags |= ACPI_PARSEOP_PARAMLIST;
+
+ NextOp = NextOp->Common.Next;
+ NextOp->Common.DisasmFlags |= ACPI_PARSEOP_PARAMLIST;
+ return (AE_OK);
+
+
+ case AML_MUTEX_OP:
+
+ AcpiOsPrintf (", ");
+ return (AE_OK);
+
+
+ case AML_EVENT_OP:
+ case AML_ALIAS_OP:
+
+ return (AE_OK);
+
+
+ case AML_SCOPE_OP:
+ case AML_DEVICE_OP:
+ case AML_THERMAL_ZONE_OP:
+
+ AcpiOsPrintf (")");
+ break;
+
+
+ default:
+
+ AcpiOsPrintf ("*** Unhandled named opcode\n");
+ break;
+ }
+ }
+
+ else switch (Op->Common.AmlOpcode)
+ {
+ case AML_FIELD_OP:
+ case AML_BANK_FIELD_OP:
+ case AML_INDEX_FIELD_OP:
+
+ Info->BitOffset = 0;
+
+ /* Name of the parent OperationRegion */
+
+ NextOp = AcpiPsGetDepthNext (NULL, Op);
+ AcpiDmNamestring (NextOp->Common.Value.Name);
+ AcpiOsPrintf (", ");
+ NextOp->Common.DisasmFlags |= ACPI_PARSEOP_IGNORE;
+
+ switch (Op->Common.AmlOpcode)
+ {
+ case AML_BANK_FIELD_OP:
+
+ /* Namestring */
+
+ NextOp = AcpiPsGetDepthNext (NULL, NextOp);
+ AcpiDmNamestring (NextOp->Common.Value.Name);
+ NextOp->Common.DisasmFlags |= ACPI_PARSEOP_IGNORE;
+ AcpiOsPrintf (", ");
+
+
+ NextOp = NextOp->Common.Next;
+ AcpiDmDisassembleOneOp (NULL, Info, NextOp);
+ NextOp->Common.DisasmFlags |= ACPI_PARSEOP_IGNORE;
+ AcpiOsPrintf (", ");
+ break;
+
+ case AML_INDEX_FIELD_OP:
+
+ /* Namestring */
+
+ NextOp = AcpiPsGetDepthNext (NULL, NextOp);
+ AcpiDmNamestring (NextOp->Common.Value.Name);
+ AcpiOsPrintf (", ");
+ NextOp->Common.DisasmFlags |= ACPI_PARSEOP_IGNORE;
+ break;
+
+ default:
+
+ break;
+ }
+
+ AcpiDmFieldFlags (NextOp);
+ break;
+
+
+ case AML_BUFFER_OP:
+
+ /* The next op is the size parameter */
+
+ NextOp = AcpiPsGetDepthNext (NULL, Op);
+ if (!NextOp)
+ {
+ /* Single-step support */
+
+ return (AE_OK);
+ }
+
+ if (Op->Common.DisasmOpcode == ACPI_DASM_RESOURCE)
+ {
+ /*
+ * We have a resource list. Don't need to output
+ * the buffer size Op. Open up a new block
+ */
+ NextOp->Common.DisasmFlags |= ACPI_PARSEOP_IGNORE;
+ NextOp = NextOp->Common.Next;
+ AcpiOsPrintf (")\n");
+ AcpiDmIndent (Info->Level);
+ AcpiOsPrintf ("{\n");
+ return (AE_OK);
+ }
+
+ /* Normal Buffer, mark size as in the parameter list */
+
+ NextOp->Common.DisasmFlags |= ACPI_PARSEOP_PARAMLIST;
+ return (AE_OK);
+
+
+ case AML_VAR_PACKAGE_OP:
+ case AML_IF_OP:
+ case AML_WHILE_OP:
+
+ /* The next op is the size or predicate parameter */
+
+ NextOp = AcpiPsGetDepthNext (NULL, Op);
+ if (NextOp)
+ {
+ NextOp->Common.DisasmFlags |= ACPI_PARSEOP_PARAMLIST;
+ }
+ return (AE_OK);
+
+
+ case AML_PACKAGE_OP:
+
+ /* The next op is the size or predicate parameter */
+
+ NextOp = AcpiPsGetDepthNext (NULL, Op);
+ if (NextOp)
+ {
+ NextOp->Common.DisasmFlags |= ACPI_PARSEOP_PARAMLIST;
+ }
+ return (AE_OK);
+
+
+ case AML_MATCH_OP:
+
+ AcpiDmMatchOp (Op);
+ break;
+
+
+ default:
+
+ break;
+ }
+
+ if (AcpiDmBlockType (Op) & BLOCK_BRACE)
+ {
+ AcpiOsPrintf ("\n");
+ AcpiDmIndent (Level);
+ AcpiOsPrintf ("{\n");
+ }
+ }
+
+ return (AE_OK);
+}
+
+
+/*******************************************************************************
+ *
+ * FUNCTION: AcpiDmAscendingOp
+ *
+ * PARAMETERS: ASL_WALK_CALLBACK
+ *
+ * RETURN: Status
+ *
+ * DESCRIPTION: Second visitation of a parse object, during ascent of parse
+ * tree. Close out any parameter lists and complete the opcode.
+ *
+ ******************************************************************************/
+
+ACPI_STATUS
+AcpiDmAscendingOp (
+ ACPI_PARSE_OBJECT *Op,
+ UINT32 Level,
+ void *Context)
+{
+ ACPI_OP_WALK_INFO *Info = Context;
+
+
+ if (Op->Common.DisasmFlags & ACPI_PARSEOP_IGNORE)
+ {
+ /* Ignore this op -- it was handled elsewhere */
+
+ return (AE_OK);
+ }
+
+ if ((Level == 0) && (Op->Common.AmlOpcode == AML_SCOPE_OP))
+ {
+ /* Indicates the end of the current descriptor block (table) */
+
+ AcpiOsPrintf ("}\n\n");
+ return (AE_OK);
+ }
+
+ switch (AcpiDmBlockType (Op))
+ {
+ case BLOCK_PAREN:
+
+ /* Completed an op that has arguments, add closing paren */
+
+ AcpiOsPrintf (")");
+
+ /* Could be a nested operator, check if comma required */
+
+ if (!AcpiDmCommaIfListMember (Op))
+ {
+ if ((AcpiDmBlockType (Op->Common.Parent) & BLOCK_BRACE) &&
+ (!(Op->Common.DisasmFlags & ACPI_PARSEOP_PARAMLIST)) &&
+ (Op->Common.AmlOpcode != AML_INT_BYTELIST_OP))
+ {
+ /* This is a first-level element of a term list, start a new line */
+
+ AcpiOsPrintf ("\n");
+ }
+ }
+ break;
+
+
+ case BLOCK_BRACE:
+ case (BLOCK_BRACE | BLOCK_PAREN):
+
+ /* Completed an op that has a term list, add closing brace */
+
+ if (Op->Common.DisasmFlags & ACPI_PARSEOP_EMPTY_TERMLIST)
+ {
+ AcpiOsPrintf ("}");
+ }
+ else
+ {
+ AcpiDmIndent (Level);
+ AcpiOsPrintf ("}");
+ }
+
+ AcpiDmCommaIfListMember (Op);
+
+ if (AcpiDmBlockType (Op->Common.Parent) != BLOCK_PAREN)
+ {
+ AcpiOsPrintf ("\n");
+ if (!(Op->Common.DisasmFlags & ACPI_PARSEOP_EMPTY_TERMLIST))
+ {
+ if ((Op->Common.AmlOpcode == AML_IF_OP) &&
+ (Op->Common.Next) &&
+ (Op->Common.Next->Common.AmlOpcode == AML_ELSE_OP))
+ {
+ break;
+ }
+
+ if ((AcpiDmBlockType (Op->Common.Parent) & BLOCK_BRACE) &&
+ (!Op->Common.Next))
+ {
+ break;
+ }
+ AcpiOsPrintf ("\n");
+ }
+ }
+ break;
+
+
+ case BLOCK_NONE:
+ default:
+
+ /* Could be a nested operator, check if comma required */
+
+ if (!AcpiDmCommaIfListMember (Op))
+ {
+ if ((AcpiDmBlockType (Op->Common.Parent) & BLOCK_BRACE) &&
+ (!(Op->Common.DisasmFlags & ACPI_PARSEOP_PARAMLIST)) &&
+ (Op->Common.AmlOpcode != AML_INT_BYTELIST_OP))
+ {
+ /* This is a first-level element of a term list, start a new line */
+
+ AcpiOsPrintf ("\n");
+ }
+ }
+ else if (Op->Common.Parent)
+ {
+ switch (Op->Common.Parent->Common.AmlOpcode)
+ {
+ case AML_PACKAGE_OP:
+ case AML_VAR_PACKAGE_OP:
+
+ if (!(Op->Common.DisasmFlags & ACPI_PARSEOP_PARAMLIST))
+ {
+ AcpiOsPrintf ("\n");
+ }
+ break;
+
+ default:
+
+ break;
+ }
+ }
+ break;
+ }
+
+ if (Op->Common.DisasmFlags & ACPI_PARSEOP_PARAMLIST)
+ {
+ if ((Op->Common.Next) &&
+ (Op->Common.Next->Common.DisasmFlags & ACPI_PARSEOP_PARAMLIST))
+ {
+ return (AE_OK);
+ }
+
+ /*
+ * Just completed a parameter node for something like "Buffer (param)".
+ * Close the paren and open up the term list block with a brace
+ */
+ if (Op->Common.Next)
+ {
+ AcpiOsPrintf (")\n");
+ AcpiDmIndent (Level - 1);
+ AcpiOsPrintf ("{\n");
+ }
+ else
+ {
+ Op->Common.Parent->Common.DisasmFlags |= ACPI_PARSEOP_EMPTY_TERMLIST;
+ AcpiOsPrintf (") {");
+ }
+ }
+
+ if ((Op->Common.AmlOpcode == AML_NAME_OP) ||
+ (Op->Common.AmlOpcode == AML_RETURN_OP))
+ {
+ Info->Level++;
+ }
+ return (AE_OK);
+}
+
+
+#endif /* ACPI_DISASSEMBLER */
diff --git a/sys/contrib/dev/acpica/dsmethod.c b/sys/contrib/dev/acpica/dsmethod.c
index bab521a44e62..927c263bd790 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: 86 $
+ * $Revision: 87 $
*
*****************************************************************************/
@@ -398,7 +398,7 @@ AcpiDsCallControlMethod (
/* Create and init a Root Node */
- Op = AcpiPsAllocOp (AML_SCOPE_OP);
+ Op = AcpiPsCreateScopeOp ();
if (!Op)
{
Status = AE_NO_MEMORY;
diff --git a/sys/contrib/dev/acpica/dsobject.c b/sys/contrib/dev/acpica/dsobject.c
index 3a1ca0dd661e..2acf819a12b7 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: 103 $
+ * $Revision: 105 $
*
*****************************************************************************/
@@ -127,6 +127,7 @@
ACPI_MODULE_NAME ("dsobject")
+#ifndef ACPI_NO_METHOD_EXECUTION
/*******************************************************************************
*
* FUNCTION: AcpiDsInitOneObject
@@ -317,203 +318,6 @@ AcpiDsInitializeObjects (
/*****************************************************************************
*
- * FUNCTION: AcpiDsInitObjectFromOp
- *
- * PARAMETERS: WalkState - Current walk state
- * Op - Parser op used to init the internal object
- * Opcode - AML opcode associated with the object
- * RetObjDesc - Namespace object to be initialized
- *
- * RETURN: Status
- *
- * DESCRIPTION: Initialize a namespace object from a parser Op and its
- * associated arguments. The namespace object is a more compact
- * representation of the Op and its arguments.
- *
- ****************************************************************************/
-
-ACPI_STATUS
-AcpiDsInitObjectFromOp (
- ACPI_WALK_STATE *WalkState,
- ACPI_PARSE_OBJECT *Op,
- UINT16 Opcode,
- ACPI_OPERAND_OBJECT **RetObjDesc)
-{
- const ACPI_OPCODE_INFO *OpInfo;
- ACPI_OPERAND_OBJECT *ObjDesc;
- ACPI_STATUS Status = AE_OK;
-
-
- ACPI_FUNCTION_TRACE ("DsInitObjectFromOp");
-
-
- ObjDesc = *RetObjDesc;
- OpInfo = AcpiPsGetOpcodeInfo (Opcode);
- if (OpInfo->Class == AML_CLASS_UNKNOWN)
- {
- /* Unknown opcode */
-
- return_ACPI_STATUS (AE_TYPE);
- }
-
- /* Perform per-object initialization */
-
- switch (ACPI_GET_OBJECT_TYPE (ObjDesc))
- {
- case ACPI_TYPE_BUFFER:
-
- /*
- * Defer evaluation of Buffer TermArg operand
- */
- ObjDesc->Buffer.Node = (ACPI_NAMESPACE_NODE *) WalkState->Operands[0];
- ObjDesc->Buffer.AmlStart = Op->Named.Data;
- ObjDesc->Buffer.AmlLength = Op->Named.Length;
- break;
-
-
- case ACPI_TYPE_PACKAGE:
-
- /*
- * Defer evaluation of Package TermArg operand
- */
- ObjDesc->Package.Node = (ACPI_NAMESPACE_NODE *) WalkState->Operands[0];
- ObjDesc->Package.AmlStart = Op->Named.Data;
- ObjDesc->Package.AmlLength = Op->Named.Length;
- break;
-
-
- case ACPI_TYPE_INTEGER:
-
- switch (OpInfo->Type)
- {
- case AML_TYPE_CONSTANT:
- /*
- * Resolve AML Constants here - AND ONLY HERE!
- * All constants are integers.
- * We mark the integer with a flag that indicates that it started life
- * as a constant -- so that stores to constants will perform as expected (noop).
- * (ZeroOp is used as a placeholder for optional target operands.)
- */
- ObjDesc->Common.Flags = AOPOBJ_AML_CONSTANT;
-
- switch (Opcode)
- {
- case AML_ZERO_OP:
-
- ObjDesc->Integer.Value = 0;
- break;
-
- case AML_ONE_OP:
-
- ObjDesc->Integer.Value = 1;
- break;
-
- case AML_ONES_OP:
-
- ObjDesc->Integer.Value = ACPI_INTEGER_MAX;
-
- /* Truncate value if we are executing from a 32-bit ACPI table */
-
- AcpiExTruncateFor32bitTable (ObjDesc);
- break;
-
- case AML_REVISION_OP:
-
- ObjDesc->Integer.Value = ACPI_CA_SUPPORT_LEVEL;
- break;
-
- default:
-
- ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Unknown constant opcode %X\n", Opcode));
- Status = AE_AML_OPERAND_TYPE;
- break;
- }
- break;
-
-
- case AML_TYPE_LITERAL:
-
- ObjDesc->Integer.Value = Op->Common.Value.Integer;
- break;
-
-
- default:
- ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Unknown Integer type %X\n", OpInfo->Type));
- Status = AE_AML_OPERAND_TYPE;
- break;
- }
- break;
-
-
- case ACPI_TYPE_STRING:
-
- ObjDesc->String.Pointer = Op->Common.Value.String;
- ObjDesc->String.Length = ACPI_STRLEN (Op->Common.Value.String);
-
- /*
- * The string is contained in the ACPI table, don't ever try
- * to delete it
- */
- ObjDesc->Common.Flags |= AOPOBJ_STATIC_POINTER;
- break;
-
-
- case ACPI_TYPE_METHOD:
- break;
-
-
- case INTERNAL_TYPE_REFERENCE:
-
- switch (OpInfo->Type)
- {
- case AML_TYPE_LOCAL_VARIABLE:
-
- /* Split the opcode into a base opcode + offset */
-
- ObjDesc->Reference.Opcode = AML_LOCAL_OP;
- ObjDesc->Reference.Offset = Opcode - AML_LOCAL_OP;
- break;
-
-
- case AML_TYPE_METHOD_ARGUMENT:
-
- /* Split the opcode into a base opcode + offset */
-
- ObjDesc->Reference.Opcode = AML_ARG_OP;
- ObjDesc->Reference.Offset = Opcode - AML_ARG_OP;
- break;
-
-
- default: /* Other literals, etc.. */
-
- if (Op->Common.AmlOpcode == AML_INT_NAMEPATH_OP)
- {
- /* Node was saved in Op */
-
- ObjDesc->Reference.Node = Op->Common.Node;
- }
-
- ObjDesc->Reference.Opcode = Opcode;
- break;
- }
- break;
-
-
- default:
-
- ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Unimplemented data type: %X\n",
- ACPI_GET_OBJECT_TYPE (ObjDesc)));
-
- Status = AE_AML_OPERAND_TYPE;
- break;
- }
-
- return_ACPI_STATUS (Status);
-}
-
-
-/*****************************************************************************
- *
* FUNCTION: AcpiDsBuildInternalObject
*
* PARAMETERS: WalkState - Current walk state
@@ -915,4 +719,209 @@ AcpiDsCreateNode (
return_ACPI_STATUS (Status);
}
+#endif /* ACPI_NO_METHOD_EXECUTION */
+
+
+/*****************************************************************************
+ *
+ * FUNCTION: AcpiDsInitObjectFromOp
+ *
+ * PARAMETERS: WalkState - Current walk state
+ * Op - Parser op used to init the internal object
+ * Opcode - AML opcode associated with the object
+ * RetObjDesc - Namespace object to be initialized
+ *
+ * RETURN: Status
+ *
+ * DESCRIPTION: Initialize a namespace object from a parser Op and its
+ * associated arguments. The namespace object is a more compact
+ * representation of the Op and its arguments.
+ *
+ ****************************************************************************/
+
+ACPI_STATUS
+AcpiDsInitObjectFromOp (
+ ACPI_WALK_STATE *WalkState,
+ ACPI_PARSE_OBJECT *Op,
+ UINT16 Opcode,
+ ACPI_OPERAND_OBJECT **RetObjDesc)
+{
+ const ACPI_OPCODE_INFO *OpInfo;
+ ACPI_OPERAND_OBJECT *ObjDesc;
+ ACPI_STATUS Status = AE_OK;
+
+
+ ACPI_FUNCTION_TRACE ("DsInitObjectFromOp");
+
+
+ ObjDesc = *RetObjDesc;
+ OpInfo = AcpiPsGetOpcodeInfo (Opcode);
+ if (OpInfo->Class == AML_CLASS_UNKNOWN)
+ {
+ /* Unknown opcode */
+
+ return_ACPI_STATUS (AE_TYPE);
+ }
+
+ /* Perform per-object initialization */
+
+ switch (ACPI_GET_OBJECT_TYPE (ObjDesc))
+ {
+ case ACPI_TYPE_BUFFER:
+
+ /*
+ * Defer evaluation of Buffer TermArg operand
+ */
+ ObjDesc->Buffer.Node = (ACPI_NAMESPACE_NODE *) WalkState->Operands[0];
+ ObjDesc->Buffer.AmlStart = Op->Named.Data;
+ ObjDesc->Buffer.AmlLength = Op->Named.Length;
+ break;
+
+
+ case ACPI_TYPE_PACKAGE:
+
+ /*
+ * Defer evaluation of Package TermArg operand
+ */
+ ObjDesc->Package.Node = (ACPI_NAMESPACE_NODE *) WalkState->Operands[0];
+ ObjDesc->Package.AmlStart = Op->Named.Data;
+ ObjDesc->Package.AmlLength = Op->Named.Length;
+ break;
+
+
+ case ACPI_TYPE_INTEGER:
+
+ switch (OpInfo->Type)
+ {
+ case AML_TYPE_CONSTANT:
+ /*
+ * Resolve AML Constants here - AND ONLY HERE!
+ * All constants are integers.
+ * We mark the integer with a flag that indicates that it started life
+ * as a constant -- so that stores to constants will perform as expected (noop).
+ * (ZeroOp is used as a placeholder for optional target operands.)
+ */
+ ObjDesc->Common.Flags = AOPOBJ_AML_CONSTANT;
+
+ switch (Opcode)
+ {
+ case AML_ZERO_OP:
+
+ ObjDesc->Integer.Value = 0;
+ break;
+
+ case AML_ONE_OP:
+
+ ObjDesc->Integer.Value = 1;
+ break;
+
+ case AML_ONES_OP:
+
+ ObjDesc->Integer.Value = ACPI_INTEGER_MAX;
+
+ /* Truncate value if we are executing from a 32-bit ACPI table */
+
+#ifndef ACPI_NO_METHOD_EXECUTION
+ AcpiExTruncateFor32bitTable (ObjDesc);
+#endif
+ break;
+
+ case AML_REVISION_OP:
+
+ ObjDesc->Integer.Value = ACPI_CA_SUPPORT_LEVEL;
+ break;
+
+ default:
+
+ ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Unknown constant opcode %X\n", Opcode));
+ Status = AE_AML_OPERAND_TYPE;
+ break;
+ }
+ break;
+
+
+ case AML_TYPE_LITERAL:
+
+ ObjDesc->Integer.Value = Op->Common.Value.Integer;
+ break;
+
+
+ default:
+ ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Unknown Integer type %X\n", OpInfo->Type));
+ Status = AE_AML_OPERAND_TYPE;
+ break;
+ }
+ break;
+
+
+ case ACPI_TYPE_STRING:
+
+ ObjDesc->String.Pointer = Op->Common.Value.String;
+ ObjDesc->String.Length = ACPI_STRLEN (Op->Common.Value.String);
+
+ /*
+ * The string is contained in the ACPI table, don't ever try
+ * to delete it
+ */
+ ObjDesc->Common.Flags |= AOPOBJ_STATIC_POINTER;
+ break;
+
+
+ case ACPI_TYPE_METHOD:
+ break;
+
+
+ case INTERNAL_TYPE_REFERENCE:
+
+ switch (OpInfo->Type)
+ {
+ case AML_TYPE_LOCAL_VARIABLE:
+
+ /* Split the opcode into a base opcode + offset */
+
+ ObjDesc->Reference.Opcode = AML_LOCAL_OP;
+ ObjDesc->Reference.Offset = Opcode - AML_LOCAL_OP;
+#ifndef ACPI_NO_METHOD_EXECUTION
+ AcpiDsMethodDataGetNode (AML_LOCAL_OP, ObjDesc->Reference.Offset,
+ WalkState, (ACPI_NAMESPACE_NODE **) &ObjDesc->Reference.Object);
+#endif
+ break;
+
+
+ case AML_TYPE_METHOD_ARGUMENT:
+
+ /* Split the opcode into a base opcode + offset */
+
+ ObjDesc->Reference.Opcode = AML_ARG_OP;
+ ObjDesc->Reference.Offset = Opcode - AML_ARG_OP;
+ break;
+
+ default: /* Other literals, etc.. */
+
+ if (Op->Common.AmlOpcode == AML_INT_NAMEPATH_OP)
+ {
+ /* Node was saved in Op */
+
+ ObjDesc->Reference.Node = Op->Common.Node;
+ }
+
+ ObjDesc->Reference.Opcode = Opcode;
+ break;
+ }
+ break;
+
+
+ default:
+
+ ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Unimplemented data type: %X\n",
+ ACPI_GET_OBJECT_TYPE (ObjDesc)));
+
+ Status = AE_AML_OPERAND_TYPE;
+ break;
+ }
+
+ return_ACPI_STATUS (Status);
+}
+
+
diff --git a/sys/contrib/dev/acpica/dsutils.c b/sys/contrib/dev/acpica/dsutils.c
index 386551b2ac10..89e9b5679c9f 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: 93 $
+ * $Revision: 94 $
*
******************************************************************************/
@@ -127,6 +127,7 @@
#define _COMPONENT ACPI_DISPATCHER
ACPI_MODULE_NAME ("dsutils")
+#ifndef ACPI_NO_METHOD_EXECUTION
/*******************************************************************************
*
@@ -340,6 +341,49 @@ AcpiDsDeleteResultIfNotUsed (
/*******************************************************************************
*
+ * FUNCTION: AcpiDsResolveOperands
+ *
+ * PARAMETERS: WalkState - Current walk state with operands on stack
+ *
+ * RETURN: Status
+ *
+ * DESCRIPTION: Resolve all operands to their values. Used to prepare
+ * arguments to a control method invocation (a call from one
+ * method to another.)
+ *
+ ******************************************************************************/
+
+ACPI_STATUS
+AcpiDsResolveOperands (
+ ACPI_WALK_STATE *WalkState)
+{
+ UINT32 i;
+ ACPI_STATUS Status = AE_OK;
+
+
+ ACPI_FUNCTION_TRACE_PTR ("DsResolveOperands", WalkState);
+
+
+ /*
+ * Attempt to resolve each of the valid operands
+ * Method arguments are passed by value, not by reference
+ */
+ for (i = 0; i < WalkState->NumOperands; i++)
+ {
+ Status = AcpiExResolveToValue (&WalkState->Operands[i], WalkState);
+ if (ACPI_FAILURE (Status))
+ {
+ break;
+ }
+ }
+
+ return_ACPI_STATUS (Status);
+}
+#endif
+
+
+/*******************************************************************************
+ *
* FUNCTION: AcpiDsCreateOperand
*
* PARAMETERS: WalkState
@@ -640,44 +684,3 @@ Cleanup:
}
-/*******************************************************************************
- *
- * FUNCTION: AcpiDsResolveOperands
- *
- * PARAMETERS: WalkState - Current walk state with operands on stack
- *
- * RETURN: Status
- *
- * DESCRIPTION: Resolve all operands to their values. Used to prepare
- * arguments to a control method invocation (a call from one
- * method to another.)
- *
- ******************************************************************************/
-
-ACPI_STATUS
-AcpiDsResolveOperands (
- ACPI_WALK_STATE *WalkState)
-{
- UINT32 i;
- ACPI_STATUS Status = AE_OK;
-
-
- ACPI_FUNCTION_TRACE_PTR ("DsResolveOperands", WalkState);
-
-
- /*
- * Attempt to resolve each of the valid operands
- * Method arguments are passed by value, not by reference
- */
- for (i = 0; i < WalkState->NumOperands; i++)
- {
- Status = AcpiExResolveToValue (&WalkState->Operands[i], WalkState);
- if (ACPI_FAILURE (Status))
- {
- break;
- }
- }
-
- return_ACPI_STATUS (Status);
-}
-
diff --git a/sys/contrib/dev/acpica/dswload.c b/sys/contrib/dev/acpica/dswload.c
index 5881a0b086c1..6e794be5a92b 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: 66 $
+ * $Revision: 69 $
*
*****************************************************************************/
@@ -163,9 +163,11 @@ AcpiDsInitCallbacks (
break;
case 3:
+#ifndef ACPI_NO_METHOD_EXECUTION
WalkState->ParseFlags |= ACPI_PARSE_EXECUTE | ACPI_PARSE_DELETE_TREE;
WalkState->DescendingCallback = AcpiDsExecBeginOp;
WalkState->AscendingCallback = AcpiDsExecEndOp;
+#endif
break;
default:
@@ -269,6 +271,11 @@ AcpiDsLoad1BeginOp (
Op->Named.Name = Node->Name.Integer;
+#if (defined (ACPI_NO_METHOD_EXECUTION) || defined (ACPI_CONSTANT_EVAL_ONLY))
+ Op->Named.Path = (UINT8 *) Path;
+#endif
+
+
/*
* Put the Node in the "op" object that the parser uses, so we
* can get it again quickly when this scope is closed
@@ -322,6 +329,7 @@ AcpiDsLoad1EndOp (
ObjectType = WalkState->OpInfo->ObjectType;
+#ifndef ACPI_NO_METHOD_EXECUTION
if (WalkState->OpInfo->Flags & AML_FIELD)
{
if (WalkState->Opcode == AML_FIELD_OP ||
@@ -343,6 +351,7 @@ AcpiDsLoad1EndOp (
return (Status);
}
}
+#endif
if (Op->Common.AmlOpcode == AML_NAME_OP)
{
@@ -555,7 +564,9 @@ AcpiDsLoad2EndOp (
ACPI_NAMESPACE_NODE *Node;
ACPI_PARSE_OBJECT *Arg;
ACPI_NAMESPACE_NODE *NewNode;
+#ifndef ACPI_NO_METHOD_EXECUTION
UINT32 i;
+#endif
ACPI_FUNCTION_NAME ("DsLoad2EndOp");
@@ -575,13 +586,6 @@ AcpiDsLoad2EndOp (
{
ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH,
"Ending scope Op=%p State=%p\n", Op, WalkState));
-
- if (Op->Named.Name == ACPI_UINT16_MAX)
- {
- ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Unnamed scope! Op=%p State=%p\n",
- Op, WalkState));
- return (AE_OK);
- }
}
@@ -614,6 +618,7 @@ AcpiDsLoad2EndOp (
}
}
+
/*
* Named operations are as follows:
*
@@ -652,6 +657,8 @@ AcpiDsLoad2EndOp (
switch (WalkState->OpInfo->Type)
{
+#ifndef ACPI_NO_METHOD_EXECUTION
+
case AML_TYPE_CREATE_FIELD:
/*
@@ -745,7 +752,7 @@ AcpiDsLoad2EndOp (
}
break;
-
+#endif /* ACPI_NO_METHOD_EXECUTION */
case AML_TYPE_NAMED_COMPLEX:
@@ -773,6 +780,7 @@ AcpiDsLoad2EndOp (
break;
+#ifndef ACPI_NO_METHOD_EXECUTION
case AML_REGION_OP:
/*
* The OpRegion is not fully parsed at this time. Only valid argument is the SpaceId.
@@ -802,6 +810,7 @@ AcpiDsLoad2EndOp (
Status = AcpiDsCreateNode (WalkState, Node, Op);
break;
+#endif /* ACPI_NO_METHOD_EXECUTION */
default:
diff --git a/sys/contrib/dev/acpica/dswstate.c b/sys/contrib/dev/acpica/dswstate.c
index f38d72154f52..2b837088d961 100644
--- a/sys/contrib/dev/acpica/dswstate.c
+++ b/sys/contrib/dev/acpica/dswstate.c
@@ -1,7 +1,7 @@
/******************************************************************************
*
* Module Name: dswstate - Dispatcher parse tree walk management routines
- * $Revision: 65 $
+ * $Revision: 67 $
*
*****************************************************************************/
@@ -964,7 +964,7 @@ AcpiDsCreateWalkState (
/* Init the method args/local */
-#ifndef _ACPI_ASL_COMPILER
+#if (!defined (ACPI_NO_METHOD_EXECUTION) && !defined (ACPI_CONSTANT_EVAL_ONLY))
AcpiDsMethodDataInit (WalkState);
#endif
@@ -987,7 +987,6 @@ AcpiDsCreateWalkState (
}
-#ifndef _ACPI_ASL_COMPILER
/*******************************************************************************
*
* FUNCTION: AcpiDsInitAmlWalk
@@ -1079,7 +1078,6 @@ AcpiDsInitAmlWalk (
Status = AcpiDsInitCallbacks (WalkState, PassNumber);
return_ACPI_STATUS (Status);
}
-#endif
/*******************************************************************************
diff --git a/sys/contrib/dev/acpica/exconfig.c b/sys/contrib/dev/acpica/exconfig.c
index aaa631d5c803..e473771916fb 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: 66 $
+ * $Revision: 67 $
*
*****************************************************************************/
@@ -234,6 +234,7 @@ AcpiExLoadTableOp (
ACPI_FUNCTION_TRACE ("ExLoadTableOp");
+#if 0
/*
* Make sure that the signature does not match one of the tables that
* is already loaded.
@@ -245,6 +246,7 @@ AcpiExLoadTableOp (
return_ACPI_STATUS (AE_ALREADY_EXISTS);
}
+#endif
/* Find the ACPI table */
diff --git a/sys/contrib/dev/acpica/excreate.c b/sys/contrib/dev/acpica/excreate.c
index 6483351154d3..ce2f25e74b86 100644
--- a/sys/contrib/dev/acpica/excreate.c
+++ b/sys/contrib/dev/acpica/excreate.c
@@ -1,7 +1,7 @@
/******************************************************************************
*
* Module Name: excreate - Named object creation
- * $Revision: 92 $
+ * $Revision: 93 $
*
*****************************************************************************/
@@ -129,6 +129,7 @@
ACPI_MODULE_NAME ("excreate")
+#ifndef ACPI_NO_METHOD_EXECUTION
/*****************************************************************************
*
* FUNCTION: AcpiExCreateAlias
@@ -599,6 +600,7 @@ AcpiExCreatePowerResource (
return_ACPI_STATUS (Status);
}
+#endif
/*****************************************************************************
*
diff --git a/sys/contrib/dev/acpica/exdump.c b/sys/contrib/dev/acpica/exdump.c
index 768d6d3273e4..62cf206b254a 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: 155 $
+ * $Revision: 157 $
*
*****************************************************************************/
@@ -220,6 +220,13 @@ AcpiExDumpOperand (
break;
+ case AML_REF_OF_OP:
+
+ AcpiOsPrintf ("Reference: (RefOf) %p\n",
+ ObjDesc->Reference.Object);
+ break;
+
+
case AML_ARG_OP:
AcpiOsPrintf ("Reference: Arg%d",
@@ -258,10 +265,12 @@ AcpiExDumpOperand (
case AML_INT_NAMEPATH_OP:
+
AcpiOsPrintf ("Reference.Node->Name %X\n",
ObjDesc->Reference.Node->Name.Integer);
break;
+
default:
/* unknown opcode */
@@ -675,14 +684,14 @@ AcpiExDumpObjectDescriptor (
{
if (!((ACPI_LV_OBJECTS & AcpiDbgLevel) && (_COMPONENT & AcpiDbgLayer)))
{
- return;
+ return_VOID;
}
}
if (ACPI_GET_DESCRIPTOR_TYPE (ObjDesc) != ACPI_DESC_TYPE_OPERAND)
{
AcpiOsPrintf ("ExDumpObjectDescriptor: %p is not a valid ACPI object\n", ObjDesc);
- return;
+ return_VOID;
}
/* Common Fields */
diff --git a/sys/contrib/dev/acpica/exmisc.c b/sys/contrib/dev/acpica/exmisc.c
index d145adb69aad..4091a951928d 100644
--- a/sys/contrib/dev/acpica/exmisc.c
+++ b/sys/contrib/dev/acpica/exmisc.c
@@ -2,7 +2,7 @@
/******************************************************************************
*
* Module Name: exmisc - ACPI AML (p-code) execution - specific opcodes
- * $Revision: 106 $
+ * $Revision: 107 $
*
*****************************************************************************/
@@ -132,8 +132,9 @@
*
* FUNCTION: AcpiExGetObjectReference
*
- * PARAMETERS: ObjDesc - Create a reference to this object
- * ReturnDesc - Where to store the reference
+ * PARAMETERS: ObjDesc - Create a reference to this object
+ * ReturnDesc - Where to store the reference
+ * WalkState - Current state
*
* RETURN: Status
*
@@ -148,68 +149,79 @@ AcpiExGetObjectReference (
ACPI_OPERAND_OBJECT **ReturnDesc,
ACPI_WALK_STATE *WalkState)
{
- ACPI_STATUS Status = AE_OK;
+ ACPI_OPERAND_OBJECT *ReferenceObj;
+ ACPI_OPERAND_OBJECT *ReferencedObj;
ACPI_FUNCTION_TRACE_PTR ("ExGetObjectReference", ObjDesc);
+ *ReturnDesc = NULL;
+
switch (ACPI_GET_DESCRIPTOR_TYPE (ObjDesc))
{
case ACPI_DESC_TYPE_OPERAND:
if (ACPI_GET_OBJECT_TYPE (ObjDesc) != INTERNAL_TYPE_REFERENCE)
{
- *ReturnDesc = NULL;
- Status = AE_TYPE;
- goto Cleanup;
+ return_ACPI_STATUS (AE_AML_OPERAND_TYPE);
}
/*
- * Not a Name -- an indirect name pointer would have
- * been converted to a direct name pointer in AcpiExResolveOperands
+ * Must be a reference to a Local or Arg
*/
switch (ObjDesc->Reference.Opcode)
{
case AML_LOCAL_OP:
case AML_ARG_OP:
- Status = AcpiDsMethodDataGetNode (ObjDesc->Reference.Opcode,
- ObjDesc->Reference.Offset, WalkState,
- ACPI_CAST_INDIRECT_PTR (ACPI_NAMESPACE_NODE, ReturnDesc));
+ /* The referenced object is the pseudo-node for the local/arg */
+
+ ReferencedObj = ObjDesc->Reference.Object;
break;
default:
- ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "(Internal) Unknown Ref subtype %02x\n",
+ ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Unknown Reference subtype %X\n",
ObjDesc->Reference.Opcode));
- *ReturnDesc = NULL;
- Status = AE_AML_INTERNAL;
- goto Cleanup;
+ return_ACPI_STATUS (AE_AML_INTERNAL);
}
break;
case ACPI_DESC_TYPE_NAMED:
- /* Must be a named object; Just return the Node */
-
- *ReturnDesc = ObjDesc;
+ /*
+ * A named reference that has already been resolved to a Node
+ */
+ ReferencedObj = ObjDesc;
break;
default:
- *ReturnDesc = NULL;
- Status = AE_TYPE;
- break;
+ ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Invalid descriptor type %X in %p\n",
+ ACPI_GET_DESCRIPTOR_TYPE (ObjDesc), ObjDesc));
+ return_ACPI_STATUS (AE_TYPE);
}
-Cleanup:
+ /* Create a new reference object */
- ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Obj=%p Ref=%p\n", ObjDesc, *ReturnDesc));
- return_ACPI_STATUS (Status);
+ ReferenceObj = AcpiUtCreateInternalObject (INTERNAL_TYPE_REFERENCE);
+ if (!ReferenceObj)
+ {
+ return_ACPI_STATUS (AE_NO_MEMORY);
+ }
+
+ ReferenceObj->Reference.Opcode = AML_REF_OF_OP;
+ ReferenceObj->Reference.Object = ReferencedObj;
+ *ReturnDesc = ReferenceObj;
+
+ ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Object %p Type [%s], returning Reference %p\n",
+ ObjDesc, AcpiUtGetObjectTypeName (ObjDesc), *ReturnDesc));
+
+ return_ACPI_STATUS (AE_OK);
}
diff --git a/sys/contrib/dev/acpica/exoparg1.c b/sys/contrib/dev/acpica/exoparg1.c
index 6e9e7f7d1e67..eca50367a88d 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: 139 $
+ * $Revision: 141 $
*
*****************************************************************************/
@@ -464,7 +464,7 @@ AcpiExOpcode_1A_1T_1R (
goto Cleanup;
}
- /* Get the object reference and store it */
+ /* Get the object reference, store it, and remove our reference */
Status = AcpiExGetObjectReference (Operand[0], &ReturnDesc2, WalkState);
if (ACPI_FAILURE (Status))
@@ -473,6 +473,7 @@ AcpiExOpcode_1A_1T_1R (
}
Status = AcpiExStore (ReturnDesc2, Operand[1], WalkState);
+ AcpiUtRemoveReference (ReturnDesc2);
/* The object exists in the namespace, return TRUE */
@@ -867,6 +868,15 @@ AcpiExOpcode_1A_0T_1R (
Operand[0] = TempDesc;
break;
+ case AML_REF_OF_OP:
+
+ /* Get the object to which the reference refers */
+
+ TempDesc = Operand[0]->Reference.Object;
+ AcpiUtRemoveReference (Operand[0]);
+ Operand[0] = TempDesc;
+ break;
+
default:
/* Must be an Index op - handled below */
@@ -933,17 +943,7 @@ AcpiExOpcode_1A_0T_1R (
{
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
/*
* Create a new object that contains one element of the
@@ -972,15 +972,6 @@ 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
/*
* Return the referenced element of the package. We must add
* another reference to the referenced object, however.
@@ -1017,6 +1008,12 @@ AcpiExOpcode_1A_0T_1R (
ReturnDesc = Operand[0]->Reference.Object;
+ if (ACPI_GET_DESCRIPTOR_TYPE (ReturnDesc) == ACPI_DESC_TYPE_NAMED)
+ {
+
+ ReturnDesc = AcpiNsGetAttachedObject ((ACPI_NAMESPACE_NODE *) ReturnDesc);
+ }
+
/* Add another reference to the object! */
AcpiUtAddReference (ReturnDesc);
diff --git a/sys/contrib/dev/acpica/exoparg2.c b/sys/contrib/dev/acpica/exoparg2.c
index c0d9fc39d180..12f194751a48 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: 108 $
+ * $Revision: 109 $
*
*****************************************************************************/
@@ -470,7 +470,8 @@ AcpiExOpcode_2A_1T_1R (
if (Index >= Operand[0]->Package.Count)
{
- ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Index value beyond package end\n"));
+ ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Index value (%X) beyond package end (%X)\n",
+ Index, Operand[0]->Package.Count));
Status = AE_AML_PACKAGE_LIMIT;
goto Cleanup;
}
@@ -516,7 +517,8 @@ AcpiExOpcode_2A_1T_1R (
if (Index >= Operand[0]->Buffer.Length)
{
- ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Index value beyond end of buffer\n"));
+ ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Index value (%X) beyond end of buffer (%X)\n",
+ Index, Operand[0]->Buffer.Length));
Status = AE_AML_BUFFER_LIMIT;
goto Cleanup;
}
@@ -645,7 +647,8 @@ AcpiExOpcode_2A_0T_1R (
default:
- ACPI_REPORT_ERROR (("AcpiExOpcode_2A_0T_1R: Unknown opcode %X\n", WalkState->Opcode));
+ ACPI_REPORT_ERROR (("AcpiExOpcode_2A_0T_1R: Unknown opcode %X\n",
+ WalkState->Opcode));
Status = AE_AML_BAD_OPCODE;
goto Cleanup;
}
diff --git a/sys/contrib/dev/acpica/exresnte.c b/sys/contrib/dev/acpica/exresnte.c
index 874fbd96606d..4b4c8ff3b360 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: 56 $
+ * $Revision: 57 $
*
*****************************************************************************/
@@ -320,7 +320,7 @@ AcpiExResolveNodeToValue (
/* No named references are allowed here */
- ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Unsupported reference opcode %X\n",
+ ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Unsupported Reference opcode %X\n",
SourceDesc->Reference.Opcode));
return_ACPI_STATUS (AE_AML_OPERAND_TYPE);
diff --git a/sys/contrib/dev/acpica/exresolv.c b/sys/contrib/dev/acpica/exresolv.c
index 249e2cb5d134..b9972c0e7fbf 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: 114 $
+ * $Revision: 115 $
*
*****************************************************************************/
@@ -330,9 +330,11 @@ AcpiExResolveObjectToValue (
break;
+ case AML_REF_OF_OP:
case AML_DEBUG_OP:
/* Just leave the object as-is */
+
break;
diff --git a/sys/contrib/dev/acpica/exresop.c b/sys/contrib/dev/acpica/exresop.c
index ead95debe822..b3da7c5a3c6a 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: 53 $
+ * $Revision: 54 $
*
*****************************************************************************/
@@ -309,6 +309,7 @@ AcpiExResolveOperands (
case AML_DEBUG_OP:
case AML_NAME_OP:
case AML_INDEX_OP:
+ case AML_REF_OF_OP:
case AML_ARG_OP:
case AML_LOCAL_OP:
diff --git a/sys/contrib/dev/acpica/exstore.c b/sys/contrib/dev/acpica/exstore.c
index 2395ef44fd7c..97ec5e65c427 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: 167 $
+ * $Revision: 168 $
*
*****************************************************************************/
@@ -227,6 +227,7 @@ AcpiExStore (
switch (RefDesc->Reference.Opcode)
{
case AML_NAME_OP:
+ case AML_REF_OF_OP:
/* Storing an object into a Name "container" */
diff --git a/sys/contrib/dev/acpica/exutils.c b/sys/contrib/dev/acpica/exutils.c
index ce23c15907a6..fad89f89cd4e 100644
--- a/sys/contrib/dev/acpica/exutils.c
+++ b/sys/contrib/dev/acpica/exutils.c
@@ -2,7 +2,7 @@
/******************************************************************************
*
* Module Name: exutils - interpreter/scanner utilities
- * $Revision: 100 $
+ * $Revision: 102 $
*
*****************************************************************************/
@@ -144,6 +144,35 @@
/*******************************************************************************
*
+ * FUNCTION: AcpiExValidateObjectType
+ *
+ * PARAMETERS: Type Object type to validate
+ *
+ * DESCRIPTION: Determine if a type is a valid ACPI object type
+ *
+ ******************************************************************************/
+
+BOOLEAN
+AcpiExValidateObjectType (
+ ACPI_OBJECT_TYPE Type)
+{
+
+ ACPI_FUNCTION_ENTRY ();
+
+
+ if ((Type > ACPI_TYPE_MAX && Type < INTERNAL_TYPE_BEGIN) ||
+ (Type > INTERNAL_TYPE_MAX))
+ {
+ return (FALSE);
+ }
+
+ return (TRUE);
+}
+
+#ifndef ACPI_NO_METHOD_EXECUTION
+
+/*******************************************************************************
+ *
* FUNCTION: AcpiExEnterInterpreter
*
* PARAMETERS: None
@@ -212,34 +241,6 @@ AcpiExExitInterpreter (void)
/*******************************************************************************
*
- * FUNCTION: AcpiExValidateObjectType
- *
- * PARAMETERS: Type Object type to validate
- *
- * DESCRIPTION: Determine if a type is a valid ACPI object type
- *
- ******************************************************************************/
-
-BOOLEAN
-AcpiExValidateObjectType (
- ACPI_OBJECT_TYPE Type)
-{
-
- ACPI_FUNCTION_ENTRY ();
-
-
- if ((Type > ACPI_TYPE_MAX && Type < INTERNAL_TYPE_BEGIN) ||
- (Type > INTERNAL_TYPE_MAX))
- {
- return (FALSE);
- }
-
- return (TRUE);
-}
-
-
-/*******************************************************************************
- *
* FUNCTION: AcpiExTruncateFor32bitTable
*
* PARAMETERS: ObjDesc - Object to be truncated
@@ -365,6 +366,8 @@ AcpiExReleaseGlobalLock (
ACPI_REPORT_ERROR (("Could not release ACPI Global Lock\n"));
}
}
+
+ return_VOID;
}
@@ -482,4 +485,4 @@ AcpiExUnsignedIntegerToString (
}
}
-
+#endif
diff --git a/sys/contrib/dev/acpica/nsdump.c b/sys/contrib/dev/acpica/nsdump.c
index f2c7453bf24e..e8f3768f52d6 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: 136 $
+ * $Revision: 137 $
*
*****************************************************************************/
@@ -756,97 +756,6 @@ AcpiNsDumpObjects (
}
-#ifndef _ACPI_ASL_COMPILER
-/*******************************************************************************
- *
- * FUNCTION: AcpiNsDumpOneDevice
- *
- * PARAMETERS: Handle - Node to be dumped
- * Level - Nesting level of the handle
- * Context - Passed into WalkNamespace
- *
- * DESCRIPTION: Dump a single Node that represents a device
- * This procedure is a UserFunction called by AcpiNsWalkNamespace.
- *
- ******************************************************************************/
-
-ACPI_STATUS
-AcpiNsDumpOneDevice (
- ACPI_HANDLE ObjHandle,
- UINT32 Level,
- void *Context,
- void **ReturnValue)
-{
- ACPI_DEVICE_INFO Info;
- ACPI_STATUS Status;
- UINT32 i;
-
-
- ACPI_FUNCTION_NAME ("NsDumpOneDevice");
-
-
- Status = AcpiNsDumpOneObject (ObjHandle, Level, Context, ReturnValue);
-
- Status = AcpiGetObjectInfo (ObjHandle, &Info);
- if (ACPI_SUCCESS (Status))
- {
- for (i = 0; i < Level; i++)
- {
- ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, " "));
- }
-
- ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, " HID: %s, ADR: %8.8X%8.8X, Status: %X\n",
- Info.HardwareId,
- ACPI_HIDWORD (Info.Address), ACPI_LODWORD (Info.Address),
- Info.CurrentStatus));
- }
-
- return (Status);
-}
-
-
-/*******************************************************************************
- *
- * FUNCTION: AcpiNsDumpRootDevices
- *
- * PARAMETERS: None
- *
- * DESCRIPTION: Dump all objects of type "device"
- *
- ******************************************************************************/
-
-void
-AcpiNsDumpRootDevices (void)
-{
- ACPI_HANDLE SysBusHandle;
- ACPI_STATUS Status;
-
-
- ACPI_FUNCTION_NAME ("NsDumpRootDevices");
-
-
- /* Only dump the table if tracing is enabled */
-
- if (!(ACPI_LV_TABLES & AcpiDbgLevel))
- {
- return;
- }
-
- Status = AcpiGetHandle (0, ACPI_NS_SYSTEM_BUS, &SysBusHandle);
- if (ACPI_FAILURE (Status))
- {
- return;
- }
-
- ACPI_DEBUG_PRINT ((ACPI_DB_TABLES, "Display of all devices in the namespace:\n"));
-
- Status = AcpiNsWalkNamespace (ACPI_TYPE_DEVICE, SysBusHandle,
- ACPI_UINT32_MAX, ACPI_NS_WALK_NO_UNLOCK,
- AcpiNsDumpOneDevice, NULL, NULL);
-}
-
-#endif
-
/*******************************************************************************
*
* FUNCTION: AcpiNsDumpTables
diff --git a/sys/contrib/dev/acpica/nsdumpdv.c b/sys/contrib/dev/acpica/nsdumpdv.c
new file mode 100644
index 000000000000..2a61aeb25aa8
--- /dev/null
+++ b/sys/contrib/dev/acpica/nsdumpdv.c
@@ -0,0 +1,221 @@
+/******************************************************************************
+ *
+ * Module Name: nsdump - table dumping routines for debug
+ * $Revision: 1 $
+ *
+ *****************************************************************************/
+
+/******************************************************************************
+ *
+ * 1. Copyright Notice
+ *
+ * Some or all of this work - Copyright (c) 1999 - 2002, Intel Corp.
+ * All rights reserved.
+ *
+ * 2. License
+ *
+ * 2.1. This is your license from Intel Corp. under its intellectual property
+ * rights. You may have additional license terms from the party that provided
+ * you this software, covering your right to use that party's intellectual
+ * property rights.
+ *
+ * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a
+ * copy of the source code appearing in this file ("Covered Code") an
+ * irrevocable, perpetual, worldwide license under Intel's copyrights in the
+ * base code distributed originally by Intel ("Original Intel Code") to copy,
+
+ * make derivatives, distribute, use and display any portion of the Covered
+ * Code in any form, with the right to sublicense such rights; and
+ *
+ * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent
+ * license (with the right to sublicense), under only those claims of Intel
+ * patents that are infringed by the Original Intel Code, to make, use, sell,
+ * offer to sell, and import the Covered Code and derivative works thereof
+ * solely to the minimum extent necessary to exercise the above copyright
+ * license, and in no event shall the patent license extend to any additions
+ * to or modifications of the Original Intel Code. No other license or right
+ * is granted directly or by implication, estoppel or otherwise;
+ *
+ * The above copyright and patent license is granted only if the following
+ * conditions are met:
+ *
+ * 3. Conditions
+ *
+ * 3.1. Redistribution of Source with Rights to Further Distribute Source.
+ * Redistribution of source code of any substantial portion of the Covered
+ * Code or modification with rights to further distribute source must include
+ * the above Copyright Notice, the above License, this list of Conditions,
+ * and the following Disclaimer and Export Compliance provision. In addition,
+ * Licensee must cause all Covered Code to which Licensee contributes to
+ * contain a file documenting the changes Licensee made to create that Covered
+ * Code and the date of any change. Licensee must include in that file the
+ * documentation of any changes made by any predecessor Licensee. Licensee
+ * must include a prominent statement that the modification is derived,
+ * directly or indirectly, from Original Intel Code.
+ *
+ * 3.2. Redistribution of Source with no Rights to Further Distribute Source.
+ * Redistribution of source code of any substantial portion of the Covered
+ * Code or modification without rights to further distribute source must
+ * include the following Disclaimer and Export Compliance provision in the
+ * documentation and/or other materials provided with distribution. In
+ * addition, Licensee may not authorize further sublicense of source of any
+ * portion of the Covered Code, and must include terms to the effect that the
+ * license from Licensee to its licensee is limited to the intellectual
+ * property embodied in the software Licensee provides to its licensee, and
+ * not to intellectual property embodied in modifications its licensee may
+ * make.
+ *
+ * 3.3. Redistribution of Executable. Redistribution in executable form of any
+ * substantial portion of the Covered Code or modification must reproduce the
+ * above Copyright Notice, and the following Disclaimer and Export Compliance
+ * provision in the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * 3.4. Intel retains all right, title, and interest in and to the Original
+ * Intel Code.
+ *
+ * 3.5. Neither the name Intel nor any other trademark owned or controlled by
+ * Intel shall be used in advertising or otherwise to promote the sale, use or
+ * other dealings in products derived from or relating to the Covered Code
+ * without prior written authorization from Intel.
+ *
+ * 4. Disclaimer and Export Compliance
+ *
+ * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED
+ * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE
+ * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE,
+ * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY
+ * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY
+ * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A
+ * PARTICULAR PURPOSE.
+ *
+ * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES
+ * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR
+ * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT,
+ * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY
+ * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL
+ * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS
+ * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY
+ * LIMITED REMEDY.
+ *
+ * 4.3. Licensee shall not export, either directly or indirectly, any of this
+ * software or system incorporating such software without first obtaining any
+ * required license or other approval from the U. S. Department of Commerce or
+ * any other agency or department of the United States Government. In the
+ * event Licensee exports any such software from the United States or
+ * re-exports any such software from a foreign destination, Licensee shall
+ * ensure that the distribution and export/re-export of the software is in
+ * compliance with all laws, regulations, orders, or other restrictions of the
+ * U.S. Export Administration Regulations. Licensee agrees that neither it nor
+ * any of its subsidiaries will export/re-export any technical data, process,
+ * software, or service, directly or indirectly, to any country for which the
+ * United States government or any agency thereof requires an export license,
+ * other governmental approval, or letter of assurance, without first obtaining
+ * such license, approval or letter.
+ *
+ *****************************************************************************/
+
+#define __NSDUMPDV_C__
+
+#include "acpi.h"
+#include "acnamesp.h"
+#include "acparser.h"
+
+
+#define _COMPONENT ACPI_NAMESPACE
+ ACPI_MODULE_NAME ("nsdumpdv")
+
+
+#if defined(ACPI_DEBUG) || defined(ENABLE_DEBUGGER)
+
+/*******************************************************************************
+ *
+ * FUNCTION: AcpiNsDumpOneDevice
+ *
+ * PARAMETERS: Handle - Node to be dumped
+ * Level - Nesting level of the handle
+ * Context - Passed into WalkNamespace
+ *
+ * DESCRIPTION: Dump a single Node that represents a device
+ * This procedure is a UserFunction called by AcpiNsWalkNamespace.
+ *
+ ******************************************************************************/
+
+ACPI_STATUS
+AcpiNsDumpOneDevice (
+ ACPI_HANDLE ObjHandle,
+ UINT32 Level,
+ void *Context,
+ void **ReturnValue)
+{
+ ACPI_DEVICE_INFO Info;
+ ACPI_STATUS Status;
+ UINT32 i;
+
+
+ ACPI_FUNCTION_NAME ("NsDumpOneDevice");
+
+
+ Status = AcpiNsDumpOneObject (ObjHandle, Level, Context, ReturnValue);
+
+ Status = AcpiGetObjectInfo (ObjHandle, &Info);
+ if (ACPI_SUCCESS (Status))
+ {
+ for (i = 0; i < Level; i++)
+ {
+ ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, " "));
+ }
+
+ ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, " HID: %s, ADR: %8.8X%8.8X, Status: %X\n",
+ Info.HardwareId,
+ ACPI_HIDWORD (Info.Address), ACPI_LODWORD (Info.Address),
+ Info.CurrentStatus));
+ }
+
+ return (Status);
+}
+
+
+/*******************************************************************************
+ *
+ * FUNCTION: AcpiNsDumpRootDevices
+ *
+ * PARAMETERS: None
+ *
+ * DESCRIPTION: Dump all objects of type "device"
+ *
+ ******************************************************************************/
+
+void
+AcpiNsDumpRootDevices (void)
+{
+ ACPI_HANDLE SysBusHandle;
+ ACPI_STATUS Status;
+
+
+ ACPI_FUNCTION_NAME ("NsDumpRootDevices");
+
+
+ /* Only dump the table if tracing is enabled */
+
+ if (!(ACPI_LV_TABLES & AcpiDbgLevel))
+ {
+ return;
+ }
+
+ Status = AcpiGetHandle (0, ACPI_NS_SYSTEM_BUS, &SysBusHandle);
+ if (ACPI_FAILURE (Status))
+ {
+ return;
+ }
+
+ ACPI_DEBUG_PRINT ((ACPI_DB_TABLES, "Display of all devices in the namespace:\n"));
+
+ Status = AcpiNsWalkNamespace (ACPI_TYPE_DEVICE, SysBusHandle,
+ ACPI_UINT32_MAX, ACPI_NS_WALK_NO_UNLOCK,
+ AcpiNsDumpOneDevice, NULL, NULL);
+}
+
+#endif
+
+
diff --git a/sys/contrib/dev/acpica/nseval.c b/sys/contrib/dev/acpica/nseval.c
index 51b50da66d1c..5ac07b94514a 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: 116 $
+ * $Revision: 117 $
*
******************************************************************************/
@@ -602,7 +602,8 @@ AcpiNsGetObjectValue (
{
Status = AE_CTRL_RETURN_VALUE;
*ReturnObjDesc = ACPI_CAST_PTR (ACPI_OPERAND_OBJECT, ResolvedNode);
- ACPI_DEBUG_PRINT ((ACPI_DB_NAMES, "Returning obj %p\n", ResolvedNode));
+ ACPI_DEBUG_PRINT ((ACPI_DB_NAMES, "Returning object %p [%s]\n",
+ *ReturnObjDesc, AcpiUtGetObjectTypeName (*ReturnObjDesc)));
}
}
diff --git a/sys/contrib/dev/acpica/nsload.c b/sys/contrib/dev/acpica/nsload.c
index 352c21d8ed22..4bf6959a7338 100644
--- a/sys/contrib/dev/acpica/nsload.c
+++ b/sys/contrib/dev/acpica/nsload.c
@@ -1,7 +1,7 @@
/******************************************************************************
*
* Module Name: nsload - namespace loading/expanding/contracting procedures
- * $Revision: 55 $
+ * $Revision: 57 $
*
*****************************************************************************/
@@ -129,61 +129,7 @@
/*******************************************************************************
*
- * FUNCTION: AcpiLoadNamespace
- *
- * PARAMETERS: None
- *
- * RETURN: Status
- *
- * DESCRIPTION: Load the name space from what ever is pointed to by DSDT.
- * (DSDT points to either the BIOS or a buffer.)
- *
- ******************************************************************************/
-
-ACPI_STATUS
-AcpiNsLoadNamespace (
- void)
-{
- ACPI_STATUS Status;
-
-
- ACPI_FUNCTION_TRACE ("AcpiLoadNameSpace");
-
-
- /* There must be at least a DSDT installed */
-
- if (AcpiGbl_DSDT == NULL)
- {
- ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "DSDT is not in memory\n"));
- return_ACPI_STATUS (AE_NO_ACPI_TABLES);
- }
-
- /*
- * Load the namespace. The DSDT is required,
- * but the SSDT and PSDT tables are optional.
- */
- Status = AcpiNsLoadTableByType (ACPI_TABLE_DSDT);
- if (ACPI_FAILURE (Status))
- {
- return_ACPI_STATUS (Status);
- }
-
- /* Ignore exceptions from these */
-
- (void) AcpiNsLoadTableByType (ACPI_TABLE_SSDT);
- (void) AcpiNsLoadTableByType (ACPI_TABLE_PSDT);
-
- ACPI_DEBUG_PRINT_RAW ((ACPI_DB_OK,
- "ACPI Namespace successfully loaded at root %p\n",
- AcpiGbl_RootNode));
-
- return_ACPI_STATUS (Status);
-}
-
-
-/*******************************************************************************
- *
- * FUNCTION: AcpiNsOneParsePass
+ * FUNCTION: NsOneCompleteParse
*
* PARAMETERS: PassNumber - 1 or 2
* TableDesc - The table to be parsed.
@@ -209,13 +155,12 @@ AcpiNsOneCompleteParse (
/* Create and init a Root Node */
- ParseRoot = AcpiPsAllocOp (AML_SCOPE_OP);
+ ParseRoot = AcpiPsCreateScopeOp ();
if (!ParseRoot)
{
return_ACPI_STATUS (AE_NO_MEMORY);
}
- ParseRoot->Named.Name = ACPI_ROOT_NAME;
/* Create and initialize a new walk state */
@@ -303,6 +248,7 @@ AcpiNsParseTable (
return_ACPI_STATUS (Status);
}
+#ifndef ACPI_NO_METHOD_EXECUTION
/*******************************************************************************
*
@@ -536,6 +482,61 @@ UnlockAndExit:
/*******************************************************************************
*
+ * FUNCTION: AcpiLoadNamespace
+ *
+ * PARAMETERS: None
+ *
+ * RETURN: Status
+ *
+ * DESCRIPTION: Load the name space from what ever is pointed to by DSDT.
+ * (DSDT points to either the BIOS or a buffer.)
+ *
+ ******************************************************************************/
+
+ACPI_STATUS
+AcpiNsLoadNamespace (
+ void)
+{
+ ACPI_STATUS Status;
+
+
+ ACPI_FUNCTION_TRACE ("AcpiLoadNameSpace");
+
+
+ /* There must be at least a DSDT installed */
+
+ if (AcpiGbl_DSDT == NULL)
+ {
+ ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "DSDT is not in memory\n"));
+ return_ACPI_STATUS (AE_NO_ACPI_TABLES);
+ }
+
+ /*
+ * Load the namespace. The DSDT is required,
+ * but the SSDT and PSDT tables are optional.
+ */
+ Status = AcpiNsLoadTableByType (ACPI_TABLE_DSDT);
+ if (ACPI_FAILURE (Status))
+ {
+ return_ACPI_STATUS (Status);
+ }
+
+ /* Ignore exceptions from these */
+
+ (void) AcpiNsLoadTableByType (ACPI_TABLE_SSDT);
+ (void) AcpiNsLoadTableByType (ACPI_TABLE_PSDT);
+
+ ACPI_DEBUG_PRINT_RAW ((ACPI_DB_OK,
+ "ACPI Namespace successfully loaded at root %p\n",
+ AcpiGbl_RootNode));
+
+ return_ACPI_STATUS (Status);
+}
+
+
+
+/*******************************************************************************
+ *
* FUNCTION: AcpiNsDeleteSubtree
*
* PARAMETERS: StartHandle - Handle in namespace where search begins
@@ -672,4 +673,5 @@ AcpiNsUnloadNamespace (
return_ACPI_STATUS (Status);
}
+#endif
diff --git a/sys/contrib/dev/acpica/nsnames.c b/sys/contrib/dev/acpica/nsnames.c
index 8e539124677b..670ce3aa80b7 100644
--- a/sys/contrib/dev/acpica/nsnames.c
+++ b/sys/contrib/dev/acpica/nsnames.c
@@ -1,7 +1,7 @@
/*******************************************************************************
*
* Module Name: nsnames - Name manipulation and search
- * $Revision: 77 $
+ * $Revision: 78 $
*
******************************************************************************/
@@ -275,7 +275,7 @@ AcpiNsGetPathnameLength (
Size = 0;
NextNode = Node;
- while (NextNode != AcpiGbl_RootNode)
+ while (NextNode && (NextNode != AcpiGbl_RootNode))
{
Size += PATH_SEGMENT_LENGTH;
NextNode = AcpiNsGetParentNode (NextNode);
diff --git a/sys/contrib/dev/acpica/nsxfeval.c b/sys/contrib/dev/acpica/nsxfeval.c
new file mode 100644
index 000000000000..3986871633a3
--- /dev/null
+++ b/sys/contrib/dev/acpica/nsxfeval.c
@@ -0,0 +1,866 @@
+/*******************************************************************************
+ *
+ * Module Name: nsxfeval - Public interfaces to the ACPI subsystem
+ * ACPI Object evaluation interfaces
+ * $Revision: 1 $
+ *
+ ******************************************************************************/
+
+/******************************************************************************
+ *
+ * 1. Copyright Notice
+ *
+ * Some or all of this work - Copyright (c) 1999 - 2002, Intel Corp.
+ * All rights reserved.
+ *
+ * 2. License
+ *
+ * 2.1. This is your license from Intel Corp. under its intellectual property
+ * rights. You may have additional license terms from the party that provided
+ * you this software, covering your right to use that party's intellectual
+ * property rights.
+ *
+ * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a
+ * copy of the source code appearing in this file ("Covered Code") an
+ * irrevocable, perpetual, worldwide license under Intel's copyrights in the
+ * base code distributed originally by Intel ("Original Intel Code") to copy,
+ * make derivatives, distribute, use and display any portion of the Covered
+ * Code in any form, with the right to sublicense such rights; and
+ *
+ * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent
+ * license (with the right to sublicense), under only those claims of Intel
+ * patents that are infringed by the Original Intel Code, to make, use, sell,
+ * offer to sell, and import the Covered Code and derivative works thereof
+ * solely to the minimum extent necessary to exercise the above copyright
+ * license, and in no event shall the patent license extend to any additions
+ * to or modifications of the Original Intel Code. No other license or right
+ * is granted directly or by implication, estoppel or otherwise;
+ *
+ * The above copyright and patent license is granted only if the following
+ * conditions are met:
+ *
+ * 3. Conditions
+ *
+ * 3.1. Redistribution of Source with Rights to Further Distribute Source.
+ * Redistribution of source code of any substantial portion of the Covered
+ * Code or modification with rights to further distribute source must include
+ * the above Copyright Notice, the above License, this list of Conditions,
+ * and the following Disclaimer and Export Compliance provision. In addition,
+ * Licensee must cause all Covered Code to which Licensee contributes to
+ * contain a file documenting the changes Licensee made to create that Covered
+ * Code and the date of any change. Licensee must include in that file the
+ * documentation of any changes made by any predecessor Licensee. Licensee
+ * must include a prominent statement that the modification is derived,
+ * directly or indirectly, from Original Intel Code.
+ *
+ * 3.2. Redistribution of Source with no Rights to Further Distribute Source.
+ * Redistribution of source code of any substantial portion of the Covered
+ * Code or modification without rights to further distribute source must
+ * include the following Disclaimer and Export Compliance provision in the
+ * documentation and/or other materials provided with distribution. In
+ * addition, Licensee may not authorize further sublicense of source of any
+ * portion of the Covered Code, and must include terms to the effect that the
+ * license from Licensee to its licensee is limited to the intellectual
+ * property embodied in the software Licensee provides to its licensee, and
+ * not to intellectual property embodied in modifications its licensee may
+ * make.
+ *
+ * 3.3. Redistribution of Executable. Redistribution in executable form of any
+ * substantial portion of the Covered Code or modification must reproduce the
+ * above Copyright Notice, and the following Disclaimer and Export Compliance
+ * provision in the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * 3.4. Intel retains all right, title, and interest in and to the Original
+ * Intel Code.
+ *
+ * 3.5. Neither the name Intel nor any other trademark owned or controlled by
+ * Intel shall be used in advertising or otherwise to promote the sale, use or
+ * other dealings in products derived from or relating to the Covered Code
+ * without prior written authorization from Intel.
+ *
+ * 4. Disclaimer and Export Compliance
+ *
+ * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED
+ * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE
+ * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE,
+ * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY
+ * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY
+ * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A
+ * PARTICULAR PURPOSE.
+ *
+ * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES
+ * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR
+ * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT,
+ * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY
+ * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL
+ * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS
+ * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY
+ * LIMITED REMEDY.
+ *
+ * 4.3. Licensee shall not export, either directly or indirectly, any of this
+ * software or system incorporating such software without first obtaining any
+ * required license or other approval from the U. S. Department of Commerce or
+ * any other agency or department of the United States Government. In the
+ * event Licensee exports any such software from the United States or
+ * re-exports any such software from a foreign destination, Licensee shall
+ * ensure that the distribution and export/re-export of the software is in
+ * compliance with all laws, regulations, orders, or other restrictions of the
+ * U.S. Export Administration Regulations. Licensee agrees that neither it nor
+ * any of its subsidiaries will export/re-export any technical data, process,
+ * software, or service, directly or indirectly, to any country for which the
+ * United States government or any agency thereof requires an export license,
+ * other governmental approval, or letter of assurance, without first obtaining
+ * such license, approval or letter.
+ *
+ *****************************************************************************/
+
+
+#define __NSXFEVAL_C__
+
+#include "acpi.h"
+#include "acnamesp.h"
+
+
+#define _COMPONENT ACPI_NAMESPACE
+ ACPI_MODULE_NAME ("nsxfeval")
+
+
+/*******************************************************************************
+ *
+ * FUNCTION: AcpiEvaluateObjectTyped
+ *
+ * PARAMETERS: Handle - Object handle (optional)
+ * *Pathname - Object pathname (optional)
+ * **ExternalParams - List of parameters to pass to method,
+ * terminated by NULL. May be NULL
+ * if no parameters are being passed.
+ * *ReturnBuffer - Where to put method's return value (if
+ * any). If NULL, no value is returned.
+ * ReturnType - Expected type of return object
+ *
+ * RETURN: Status
+ *
+ * DESCRIPTION: Find and evaluate the given object, passing the given
+ * parameters if necessary. One of "Handle" or "Pathname" must
+ * be valid (non-null)
+ *
+ ******************************************************************************/
+
+ACPI_STATUS
+AcpiEvaluateObjectTyped (
+ ACPI_HANDLE Handle,
+ ACPI_STRING Pathname,
+ ACPI_OBJECT_LIST *ExternalParams,
+ ACPI_BUFFER *ReturnBuffer,
+ ACPI_OBJECT_TYPE ReturnType)
+{
+ ACPI_STATUS Status;
+ BOOLEAN MustFree = FALSE;
+
+
+ ACPI_FUNCTION_TRACE ("AcpiEvaluateObjectTyped");
+
+
+ /* Return buffer must be valid */
+
+ if (!ReturnBuffer)
+ {
+ return_ACPI_STATUS (AE_BAD_PARAMETER);
+ }
+
+ if (ReturnBuffer->Length == ACPI_ALLOCATE_BUFFER)
+ {
+ MustFree = TRUE;
+ }
+
+ /* Evaluate the object */
+
+ Status = AcpiEvaluateObject (Handle, Pathname, ExternalParams, ReturnBuffer);
+ if (ACPI_FAILURE (Status))
+ {
+ return_ACPI_STATUS (Status);
+ }
+
+ /* Type ANY means "don't care" */
+
+ if (ReturnType == ACPI_TYPE_ANY)
+ {
+ return_ACPI_STATUS (AE_OK);
+ }
+
+ if (ReturnBuffer->Length == 0)
+ {
+ /* Error because caller specifically asked for a return value */
+
+ ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
+ "No return value\n"));
+
+ return_ACPI_STATUS (AE_NULL_OBJECT);
+ }
+
+ /* Examine the object type returned from EvaluateObject */
+
+ if (((ACPI_OBJECT *) ReturnBuffer->Pointer)->Type == ReturnType)
+ {
+ return_ACPI_STATUS (AE_OK);
+ }
+
+ /* Return object type does not match requested type */
+
+ ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
+ "Incorrect return type [%s] requested [%s]\n",
+ AcpiUtGetTypeName (((ACPI_OBJECT *) ReturnBuffer->Pointer)->Type),
+ AcpiUtGetTypeName (ReturnType)));
+
+ if (MustFree)
+ {
+ /* Caller used ACPI_ALLOCATE_BUFFER, free the return buffer */
+
+ AcpiOsFree (ReturnBuffer->Pointer);
+ ReturnBuffer->Pointer = NULL;
+ }
+
+ ReturnBuffer->Length = 0;
+ return_ACPI_STATUS (AE_TYPE);
+}
+
+
+/*******************************************************************************
+ *
+ * FUNCTION: AcpiEvaluateObject
+ *
+ * PARAMETERS: Handle - Object handle (optional)
+ * *Pathname - Object pathname (optional)
+ * **ExternalParams - List of parameters to pass to method,
+ * terminated by NULL. May be NULL
+ * if no parameters are being passed.
+ * *ReturnBuffer - Where to put method's return value (if
+ * any). If NULL, no value is returned.
+ *
+ * RETURN: Status
+ *
+ * DESCRIPTION: Find and evaluate the given object, passing the given
+ * parameters if necessary. One of "Handle" or "Pathname" must
+ * be valid (non-null)
+ *
+ ******************************************************************************/
+
+ACPI_STATUS
+AcpiEvaluateObject (
+ ACPI_HANDLE Handle,
+ ACPI_STRING Pathname,
+ ACPI_OBJECT_LIST *ExternalParams,
+ ACPI_BUFFER *ReturnBuffer)
+{
+ ACPI_STATUS Status;
+ ACPI_OPERAND_OBJECT **InternalParams = NULL;
+ ACPI_OPERAND_OBJECT *InternalReturnObj = NULL;
+ ACPI_SIZE BufferSpaceNeeded;
+ UINT32 i;
+
+
+ ACPI_FUNCTION_TRACE ("AcpiEvaluateObject");
+
+
+ /*
+ * If there are parameters to be passed to the object
+ * (which must be a control method), the external objects
+ * must be converted to internal objects
+ */
+ if (ExternalParams && ExternalParams->Count)
+ {
+ /*
+ * Allocate a new parameter block for the internal objects
+ * Add 1 to count to allow for null terminated internal list
+ */
+ InternalParams = ACPI_MEM_CALLOCATE (((ACPI_SIZE) ExternalParams->Count + 1) *
+ sizeof (void *));
+ if (!InternalParams)
+ {
+ return_ACPI_STATUS (AE_NO_MEMORY);
+ }
+
+ /*
+ * Convert each external object in the list to an
+ * internal object
+ */
+ for (i = 0; i < ExternalParams->Count; i++)
+ {
+ Status = AcpiUtCopyEobjectToIobject (&ExternalParams->Pointer[i],
+ &InternalParams[i]);
+ if (ACPI_FAILURE (Status))
+ {
+ AcpiUtDeleteInternalObjectList (InternalParams);
+ return_ACPI_STATUS (Status);
+ }
+ }
+ InternalParams[ExternalParams->Count] = NULL;
+ }
+
+ /*
+ * Three major cases:
+ * 1) Fully qualified pathname
+ * 2) No handle, not fully qualified pathname (error)
+ * 3) Valid handle
+ */
+ if ((Pathname) &&
+ (AcpiNsValidRootPrefix (Pathname[0])))
+ {
+ /*
+ * The path is fully qualified, just evaluate by name
+ */
+ Status = AcpiNsEvaluateByName (Pathname, InternalParams,
+ &InternalReturnObj);
+ }
+ else if (!Handle)
+ {
+ /*
+ * A handle is optional iff a fully qualified pathname
+ * is specified. Since we've already handled fully
+ * qualified names above, this is an error
+ */
+ if (!Pathname)
+ {
+ ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
+ "Both Handle and Pathname are NULL\n"));
+ }
+ else
+ {
+ ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
+ "Handle is NULL and Pathname is relative\n"));
+ }
+
+ Status = AE_BAD_PARAMETER;
+ }
+ else
+ {
+ /*
+ * We get here if we have a handle -- and if we have a
+ * pathname it is relative. The handle will be validated
+ * in the lower procedures
+ */
+ if (!Pathname)
+ {
+ /*
+ * The null pathname case means the handle is for
+ * the actual object to be evaluated
+ */
+ Status = AcpiNsEvaluateByHandle (Handle, InternalParams,
+ &InternalReturnObj);
+ }
+ else
+ {
+ /*
+ * Both a Handle and a relative Pathname
+ */
+ Status = AcpiNsEvaluateRelative (Handle, Pathname, InternalParams,
+ &InternalReturnObj);
+ }
+ }
+
+
+ /*
+ * If we are expecting a return value, and all went well above,
+ * copy the return value to an external object.
+ */
+ if (ReturnBuffer)
+ {
+ if (!InternalReturnObj)
+ {
+ ReturnBuffer->Length = 0;
+ }
+ else
+ {
+ if (ACPI_GET_DESCRIPTOR_TYPE (InternalReturnObj) == ACPI_DESC_TYPE_NAMED)
+ {
+ /*
+ * If we received a NS Node as a return object, this means that
+ * the object we are evaluating has nothing interesting to
+ * return (such as a mutex, etc.) We return an error because
+ * these types are essentially unsupported by this interface.
+ * We don't check up front because this makes it easier to add
+ * support for various types at a later date if necessary.
+ */
+ Status = AE_TYPE;
+ InternalReturnObj = NULL; /* No need to delete a NS Node */
+ ReturnBuffer->Length = 0;
+ }
+
+ if (ACPI_SUCCESS (Status))
+ {
+ /*
+ * Find out how large a buffer is needed
+ * to contain the returned object
+ */
+ Status = AcpiUtGetObjectSize (InternalReturnObj,
+ &BufferSpaceNeeded);
+ if (ACPI_SUCCESS (Status))
+ {
+ /* Validate/Allocate/Clear caller buffer */
+
+ Status = AcpiUtInitializeBuffer (ReturnBuffer, BufferSpaceNeeded);
+ if (ACPI_FAILURE (Status))
+ {
+ /*
+ * Caller's buffer is too small or a new one can't be allocated
+ */
+ ACPI_DEBUG_PRINT ((ACPI_DB_INFO,
+ "Needed buffer size %X, %s\n",
+ (UINT32) BufferSpaceNeeded, AcpiFormatException (Status)));
+ }
+ else
+ {
+ /*
+ * We have enough space for the object, build it
+ */
+ Status = AcpiUtCopyIobjectToEobject (InternalReturnObj,
+ ReturnBuffer);
+ }
+ }
+ }
+ }
+ }
+
+ /* Delete the return and parameter objects */
+
+ if (InternalReturnObj)
+ {
+ /*
+ * Delete the internal return object. (Or at least
+ * decrement the reference count by one)
+ */
+ AcpiUtRemoveReference (InternalReturnObj);
+ }
+
+ /*
+ * Free the input parameter list (if we created one),
+ */
+ if (InternalParams)
+ {
+ /* Free the allocated parameter block */
+
+ AcpiUtDeleteInternalObjectList (InternalParams);
+ }
+
+ return_ACPI_STATUS (Status);
+}
+
+
+
+/*******************************************************************************
+ *
+ * FUNCTION: AcpiWalkNamespace
+ *
+ * PARAMETERS: Type - ACPI_OBJECT_TYPE to search for
+ * StartObject - Handle in namespace where search begins
+ * MaxDepth - Depth to which search is to reach
+ * UserFunction - Called when an object of "Type" is found
+ * Context - Passed to user function
+ * ReturnValue - Location where return value of
+ * UserFunction is put if terminated early
+ *
+ * RETURNS Return value from the UserFunction if terminated early.
+ * Otherwise, returns NULL.
+ *
+ * DESCRIPTION: Performs a modified depth-first walk of the namespace tree,
+ * starting (and ending) at the object specified by StartHandle.
+ * The UserFunction is called whenever an object that matches
+ * the type parameter is found. If the user function returns
+ * a non-zero value, the search is terminated immediately and this
+ * value is returned to the caller.
+ *
+ * The point of this procedure is to provide a generic namespace
+ * walk routine that can be called from multiple places to
+ * provide multiple services; the User Function can be tailored
+ * to each task, whether it is a print function, a compare
+ * function, etc.
+ *
+ ******************************************************************************/
+
+ACPI_STATUS
+AcpiWalkNamespace (
+ ACPI_OBJECT_TYPE Type,
+ ACPI_HANDLE StartObject,
+ UINT32 MaxDepth,
+ ACPI_WALK_CALLBACK UserFunction,
+ void *Context,
+ void **ReturnValue)
+{
+ ACPI_STATUS Status;
+
+
+ ACPI_FUNCTION_TRACE ("AcpiWalkNamespace");
+
+
+ /* Parameter validation */
+
+ if ((Type > ACPI_TYPE_MAX) ||
+ (!MaxDepth) ||
+ (!UserFunction))
+ {
+ return_ACPI_STATUS (AE_BAD_PARAMETER);
+ }
+
+ /*
+ * Lock the namespace around the walk.
+ * The namespace will be unlocked/locked around each call
+ * to the user function - since this function
+ * must be allowed to make Acpi calls itself.
+ */
+ Status = AcpiUtAcquireMutex (ACPI_MTX_NAMESPACE);
+ if (ACPI_FAILURE (Status))
+ {
+ return_ACPI_STATUS (Status);
+ }
+
+ Status = AcpiNsWalkNamespace (Type, StartObject, MaxDepth, ACPI_NS_WALK_UNLOCK,
+ UserFunction, Context, ReturnValue);
+
+ (void) AcpiUtReleaseMutex (ACPI_MTX_NAMESPACE);
+ return_ACPI_STATUS (Status);
+}
+
+
+/*******************************************************************************
+ *
+ * FUNCTION: AcpiNsGetDeviceCallback
+ *
+ * PARAMETERS: Callback from AcpiGetDevice
+ *
+ * RETURN: Status
+ *
+ * DESCRIPTION: Takes callbacks from WalkNamespace and filters out all non-
+ * present devices, or if they specified a HID, it filters based
+ * on that.
+ *
+ ******************************************************************************/
+
+static ACPI_STATUS
+AcpiNsGetDeviceCallback (
+ ACPI_HANDLE ObjHandle,
+ UINT32 NestingLevel,
+ void *Context,
+ void **ReturnValue)
+{
+ ACPI_STATUS Status;
+ ACPI_NAMESPACE_NODE *Node;
+ UINT32 Flags;
+ ACPI_DEVICE_ID Hid;
+ ACPI_DEVICE_ID Cid;
+ ACPI_GET_DEVICES_INFO *Info;
+
+
+ Info = Context;
+
+ Status = AcpiUtAcquireMutex (ACPI_MTX_NAMESPACE);
+ if (ACPI_FAILURE (Status))
+ {
+ return (Status);
+ }
+
+ Node = AcpiNsMapHandleToNode (ObjHandle);
+ Status = AcpiUtReleaseMutex (ACPI_MTX_NAMESPACE);
+ if (ACPI_FAILURE (Status))
+ {
+ return (Status);
+ }
+
+ if (!Node)
+ {
+ return (AE_BAD_PARAMETER);
+ }
+
+ /*
+ * Run _STA to determine if device is present
+ */
+ Status = AcpiUtExecute_STA (Node, &Flags);
+ if (ACPI_FAILURE (Status))
+ {
+ return (AE_CTRL_DEPTH);
+ }
+
+ if (!(Flags & 0x01))
+ {
+ /* Don't return at the device or children of the device if not there */
+ return (AE_CTRL_DEPTH);
+ }
+
+ /*
+ * Filter based on device HID & CID
+ */
+ if (Info->Hid != NULL)
+ {
+ Status = AcpiUtExecute_HID (Node, &Hid);
+ if (Status == AE_NOT_FOUND)
+ {
+ return (AE_OK);
+ }
+ else if (ACPI_FAILURE (Status))
+ {
+ return (AE_CTRL_DEPTH);
+ }
+
+ if (ACPI_STRNCMP (Hid.Buffer, Info->Hid, sizeof (Hid.Buffer)) != 0)
+ {
+ Status = AcpiUtExecute_CID (Node, &Cid);
+ if (Status == AE_NOT_FOUND)
+ {
+ return (AE_OK);
+ }
+ else if (ACPI_FAILURE (Status))
+ {
+ return (AE_CTRL_DEPTH);
+ }
+
+ /* TBD: Handle CID packages */
+
+ if (ACPI_STRNCMP (Cid.Buffer, Info->Hid, sizeof (Cid.Buffer)) != 0)
+ {
+ return (AE_OK);
+ }
+ }
+ }
+
+ Status = Info->UserFunction (ObjHandle, NestingLevel, Info->Context, ReturnValue);
+ return (Status);
+}
+
+
+/*******************************************************************************
+ *
+ * FUNCTION: AcpiGetDevices
+ *
+ * PARAMETERS: HID - HID to search for. Can be NULL.
+ * UserFunction - Called when a matching object is found
+ * Context - Passed to user function
+ * ReturnValue - Location where return value of
+ * UserFunction is put if terminated early
+ *
+ * RETURNS Return value from the UserFunction if terminated early.
+ * Otherwise, returns NULL.
+ *
+ * DESCRIPTION: Performs a modified depth-first walk of the namespace tree,
+ * starting (and ending) at the object specified by StartHandle.
+ * The UserFunction is called whenever an object that matches
+ * the type parameter is found. If the user function returns
+ * a non-zero value, the search is terminated immediately and this
+ * value is returned to the caller.
+ *
+ * This is a wrapper for WalkNamespace, but the callback performs
+ * additional filtering. Please see AcpiGetDeviceCallback.
+ *
+ ******************************************************************************/
+
+ACPI_STATUS
+AcpiGetDevices (
+ NATIVE_CHAR *HID,
+ ACPI_WALK_CALLBACK UserFunction,
+ void *Context,
+ void **ReturnValue)
+{
+ ACPI_STATUS Status;
+ ACPI_GET_DEVICES_INFO Info;
+
+
+ ACPI_FUNCTION_TRACE ("AcpiGetDevices");
+
+
+ /* Parameter validation */
+
+ if (!UserFunction)
+ {
+ return_ACPI_STATUS (AE_BAD_PARAMETER);
+ }
+
+ /*
+ * We're going to call their callback from OUR callback, so we need
+ * to know what it is, and their context parameter.
+ */
+ Info.Context = Context;
+ Info.UserFunction = UserFunction;
+ Info.Hid = HID;
+
+ /*
+ * Lock the namespace around the walk.
+ * The namespace will be unlocked/locked around each call
+ * to the user function - since this function
+ * must be allowed to make Acpi calls itself.
+ */
+ Status = AcpiUtAcquireMutex (ACPI_MTX_NAMESPACE);
+ if (ACPI_FAILURE (Status))
+ {
+ return_ACPI_STATUS (Status);
+ }
+
+ Status = AcpiNsWalkNamespace (ACPI_TYPE_DEVICE,
+ ACPI_ROOT_OBJECT, ACPI_UINT32_MAX,
+ ACPI_NS_WALK_UNLOCK,
+ AcpiNsGetDeviceCallback, &Info,
+ ReturnValue);
+
+ (void) AcpiUtReleaseMutex (ACPI_MTX_NAMESPACE);
+ return_ACPI_STATUS (Status);
+}
+
+
+/*******************************************************************************
+ *
+ * FUNCTION: AcpiAttachData
+ *
+ * PARAMETERS:
+ *
+ * RETURN: Status
+ *
+ * DESCRIPTION:
+ *
+ ******************************************************************************/
+
+ACPI_STATUS
+AcpiAttachData (
+ ACPI_HANDLE ObjHandle,
+ ACPI_OBJECT_HANDLER Handler,
+ void *Data)
+{
+ ACPI_NAMESPACE_NODE *Node;
+ ACPI_STATUS Status;
+
+
+ /* Parameter validation */
+
+ if (!ObjHandle ||
+ !Handler ||
+ !Data)
+ {
+ return (AE_BAD_PARAMETER);
+ }
+
+ Status = AcpiUtAcquireMutex (ACPI_MTX_NAMESPACE);
+ if (ACPI_FAILURE (Status))
+ {
+ return (Status);
+ }
+
+ /* Convert and validate the handle */
+
+ Node = AcpiNsMapHandleToNode (ObjHandle);
+ if (!Node)
+ {
+ Status = AE_BAD_PARAMETER;
+ goto UnlockAndExit;
+ }
+
+ Status = AcpiNsAttachData (Node, Handler, Data);
+
+UnlockAndExit:
+ (void) AcpiUtReleaseMutex (ACPI_MTX_NAMESPACE);
+ return (Status);
+}
+
+
+/*******************************************************************************
+ *
+ * FUNCTION: AcpiDetachData
+ *
+ * PARAMETERS:
+ *
+ * RETURN: Status
+ *
+ * DESCRIPTION:
+ *
+ ******************************************************************************/
+
+ACPI_STATUS
+AcpiDetachData (
+ ACPI_HANDLE ObjHandle,
+ ACPI_OBJECT_HANDLER Handler)
+{
+ ACPI_NAMESPACE_NODE *Node;
+ ACPI_STATUS Status;
+
+
+ /* Parameter validation */
+
+ if (!ObjHandle ||
+ !Handler)
+ {
+ return (AE_BAD_PARAMETER);
+ }
+
+ Status = AcpiUtAcquireMutex (ACPI_MTX_NAMESPACE);
+ if (ACPI_FAILURE (Status))
+ {
+ return (Status);
+ }
+
+ /* Convert and validate the handle */
+
+ Node = AcpiNsMapHandleToNode (ObjHandle);
+ if (!Node)
+ {
+ Status = AE_BAD_PARAMETER;
+ goto UnlockAndExit;
+ }
+
+ Status = AcpiNsDetachData (Node, Handler);
+
+UnlockAndExit:
+ (void) AcpiUtReleaseMutex (ACPI_MTX_NAMESPACE);
+ return (Status);
+}
+
+
+/*******************************************************************************
+ *
+ * FUNCTION: AcpiGetData
+ *
+ * PARAMETERS:
+ *
+ * RETURN: Status
+ *
+ * DESCRIPTION:
+ *
+ ******************************************************************************/
+
+ACPI_STATUS
+AcpiGetData (
+ ACPI_HANDLE ObjHandle,
+ ACPI_OBJECT_HANDLER Handler,
+ void **Data)
+{
+ ACPI_NAMESPACE_NODE *Node;
+ ACPI_STATUS Status;
+
+
+ /* Parameter validation */
+
+ if (!ObjHandle ||
+ !Handler ||
+ !Data)
+ {
+ return (AE_BAD_PARAMETER);
+ }
+
+ Status = AcpiUtAcquireMutex (ACPI_MTX_NAMESPACE);
+ if (ACPI_FAILURE (Status))
+ {
+ return (Status);
+ }
+
+ /* Convert and validate the handle */
+
+ Node = AcpiNsMapHandleToNode (ObjHandle);
+ if (!Node)
+ {
+ Status = AE_BAD_PARAMETER;
+ goto UnlockAndExit;
+ }
+
+ Status = AcpiNsGetAttachedData (Node, Handler, Data);
+
+UnlockAndExit:
+ (void) AcpiUtReleaseMutex (ACPI_MTX_NAMESPACE);
+ return (Status);
+}
+
+
diff --git a/sys/contrib/dev/acpica/nsxfobj.c b/sys/contrib/dev/acpica/nsxfobj.c
index bd3e26d3453b..baa72a9615a8 100644
--- a/sys/contrib/dev/acpica/nsxfobj.c
+++ b/sys/contrib/dev/acpica/nsxfobj.c
@@ -2,7 +2,7 @@
*
* Module Name: nsxfobj - Public interfaces to the ACPI subsystem
* ACPI Object oriented interfaces
- * $Revision: 112 $
+ * $Revision: 113 $
*
******************************************************************************/
@@ -125,420 +125,6 @@
#define _COMPONENT ACPI_NAMESPACE
ACPI_MODULE_NAME ("nsxfobj")
-
-/*******************************************************************************
- *
- * FUNCTION: AcpiEvaluateObjectTyped
- *
- * PARAMETERS: Handle - Object handle (optional)
- * *Pathname - Object pathname (optional)
- * **ExternalParams - List of parameters to pass to method,
- * terminated by NULL. May be NULL
- * if no parameters are being passed.
- * *ReturnBuffer - Where to put method's return value (if
- * any). If NULL, no value is returned.
- * ReturnType - Expected type of return object
- *
- * RETURN: Status
- *
- * DESCRIPTION: Find and evaluate the given object, passing the given
- * parameters if necessary. One of "Handle" or "Pathname" must
- * be valid (non-null)
- *
- ******************************************************************************/
-
-ACPI_STATUS
-AcpiEvaluateObjectTyped (
- ACPI_HANDLE Handle,
- ACPI_STRING Pathname,
- ACPI_OBJECT_LIST *ExternalParams,
- ACPI_BUFFER *ReturnBuffer,
- ACPI_OBJECT_TYPE ReturnType)
-{
- ACPI_STATUS Status;
- BOOLEAN MustFree = FALSE;
-
-
- ACPI_FUNCTION_TRACE ("AcpiEvaluateObjectTyped");
-
-
- /* Return buffer must be valid */
-
- if (!ReturnBuffer)
- {
- return_ACPI_STATUS (AE_BAD_PARAMETER);
- }
-
- if (ReturnBuffer->Length == ACPI_ALLOCATE_BUFFER)
- {
- MustFree = TRUE;
- }
-
- /* Evaluate the object */
-
- Status = AcpiEvaluateObject (Handle, Pathname, ExternalParams, ReturnBuffer);
- if (ACPI_FAILURE (Status))
- {
- return_ACPI_STATUS (Status);
- }
-
- /* Type ANY means "don't care" */
-
- if (ReturnType == ACPI_TYPE_ANY)
- {
- return_ACPI_STATUS (AE_OK);
- }
-
- if (ReturnBuffer->Length == 0)
- {
- /* Error because caller specifically asked for a return value */
-
- ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
- "No return value\n"));
-
- return_ACPI_STATUS (AE_NULL_OBJECT);
- }
-
- /* Examine the object type returned from EvaluateObject */
-
- if (((ACPI_OBJECT *) ReturnBuffer->Pointer)->Type == ReturnType)
- {
- return_ACPI_STATUS (AE_OK);
- }
-
- /* Return object type does not match requested type */
-
- ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
- "Incorrect return type [%s] requested [%s]\n",
- AcpiUtGetTypeName (((ACPI_OBJECT *) ReturnBuffer->Pointer)->Type),
- AcpiUtGetTypeName (ReturnType)));
-
- if (MustFree)
- {
- /* Caller used ACPI_ALLOCATE_BUFFER, free the return buffer */
-
- AcpiOsFree (ReturnBuffer->Pointer);
- ReturnBuffer->Pointer = NULL;
- }
-
- ReturnBuffer->Length = 0;
- return_ACPI_STATUS (AE_TYPE);
-}
-
-
-/*******************************************************************************
- *
- * FUNCTION: AcpiEvaluateObject
- *
- * PARAMETERS: Handle - Object handle (optional)
- * *Pathname - Object pathname (optional)
- * **ExternalParams - List of parameters to pass to method,
- * terminated by NULL. May be NULL
- * if no parameters are being passed.
- * *ReturnBuffer - Where to put method's return value (if
- * any). If NULL, no value is returned.
- *
- * RETURN: Status
- *
- * DESCRIPTION: Find and evaluate the given object, passing the given
- * parameters if necessary. One of "Handle" or "Pathname" must
- * be valid (non-null)
- *
- ******************************************************************************/
-
-ACPI_STATUS
-AcpiEvaluateObject (
- ACPI_HANDLE Handle,
- ACPI_STRING Pathname,
- ACPI_OBJECT_LIST *ExternalParams,
- ACPI_BUFFER *ReturnBuffer)
-{
- ACPI_STATUS Status;
- ACPI_OPERAND_OBJECT **InternalParams = NULL;
- ACPI_OPERAND_OBJECT *InternalReturnObj = NULL;
- ACPI_SIZE BufferSpaceNeeded;
- UINT32 i;
-
-
- ACPI_FUNCTION_TRACE ("AcpiEvaluateObject");
-
-
- /*
- * If there are parameters to be passed to the object
- * (which must be a control method), the external objects
- * must be converted to internal objects
- */
- if (ExternalParams && ExternalParams->Count)
- {
- /*
- * Allocate a new parameter block for the internal objects
- * Add 1 to count to allow for null terminated internal list
- */
- InternalParams = ACPI_MEM_CALLOCATE (((ACPI_SIZE) ExternalParams->Count + 1) *
- sizeof (void *));
- if (!InternalParams)
- {
- return_ACPI_STATUS (AE_NO_MEMORY);
- }
-
- /*
- * Convert each external object in the list to an
- * internal object
- */
- for (i = 0; i < ExternalParams->Count; i++)
- {
- Status = AcpiUtCopyEobjectToIobject (&ExternalParams->Pointer[i],
- &InternalParams[i]);
- if (ACPI_FAILURE (Status))
- {
- AcpiUtDeleteInternalObjectList (InternalParams);
- return_ACPI_STATUS (Status);
- }
- }
- InternalParams[ExternalParams->Count] = NULL;
- }
-
- /*
- * Three major cases:
- * 1) Fully qualified pathname
- * 2) No handle, not fully qualified pathname (error)
- * 3) Valid handle
- */
- if ((Pathname) &&
- (AcpiNsValidRootPrefix (Pathname[0])))
- {
- /*
- * The path is fully qualified, just evaluate by name
- */
- Status = AcpiNsEvaluateByName (Pathname, InternalParams,
- &InternalReturnObj);
- }
- else if (!Handle)
- {
- /*
- * A handle is optional iff a fully qualified pathname
- * is specified. Since we've already handled fully
- * qualified names above, this is an error
- */
- if (!Pathname)
- {
- ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
- "Both Handle and Pathname are NULL\n"));
- }
- else
- {
- ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
- "Handle is NULL and Pathname is relative\n"));
- }
-
- Status = AE_BAD_PARAMETER;
- }
- else
- {
- /*
- * We get here if we have a handle -- and if we have a
- * pathname it is relative. The handle will be validated
- * in the lower procedures
- */
- if (!Pathname)
- {
- /*
- * The null pathname case means the handle is for
- * the actual object to be evaluated
- */
- Status = AcpiNsEvaluateByHandle (Handle, InternalParams,
- &InternalReturnObj);
- }
- else
- {
- /*
- * Both a Handle and a relative Pathname
- */
- Status = AcpiNsEvaluateRelative (Handle, Pathname, InternalParams,
- &InternalReturnObj);
- }
- }
-
-
- /*
- * If we are expecting a return value, and all went well above,
- * copy the return value to an external object.
- */
- if (ReturnBuffer)
- {
- if (!InternalReturnObj)
- {
- ReturnBuffer->Length = 0;
- }
- else
- {
- if (ACPI_GET_DESCRIPTOR_TYPE (InternalReturnObj) == ACPI_DESC_TYPE_NAMED)
- {
- /*
- * If we received a NS Node as a return object, this means that
- * the object we are evaluating has nothing interesting to
- * return (such as a mutex, etc.) We return an error because
- * these types are essentially unsupported by this interface.
- * We don't check up front because this makes it easier to add
- * support for various types at a later date if necessary.
- */
- Status = AE_TYPE;
- InternalReturnObj = NULL; /* No need to delete a NS Node */
- ReturnBuffer->Length = 0;
- }
-
- if (ACPI_SUCCESS (Status))
- {
- /*
- * Find out how large a buffer is needed
- * to contain the returned object
- */
- Status = AcpiUtGetObjectSize (InternalReturnObj,
- &BufferSpaceNeeded);
- if (ACPI_SUCCESS (Status))
- {
- /* Validate/Allocate/Clear caller buffer */
-
- Status = AcpiUtInitializeBuffer (ReturnBuffer, BufferSpaceNeeded);
- if (ACPI_FAILURE (Status))
- {
- /*
- * Caller's buffer is too small or a new one can't be allocated
- */
- ACPI_DEBUG_PRINT ((ACPI_DB_INFO,
- "Needed buffer size %X, %s\n",
- (UINT32) BufferSpaceNeeded, AcpiFormatException (Status)));
- }
- else
- {
- /*
- * We have enough space for the object, build it
- */
- Status = AcpiUtCopyIobjectToEobject (InternalReturnObj,
- ReturnBuffer);
- }
- }
- }
- }
- }
-
- /* Delete the return and parameter objects */
-
- if (InternalReturnObj)
- {
- /*
- * Delete the internal return object. (Or at least
- * decrement the reference count by one)
- */
- AcpiUtRemoveReference (InternalReturnObj);
- }
-
- /*
- * Free the input parameter list (if we created one),
- */
- if (InternalParams)
- {
- /* Free the allocated parameter block */
-
- AcpiUtDeleteInternalObjectList (InternalParams);
- }
-
- return_ACPI_STATUS (Status);
-}
-
-
-/*******************************************************************************
- *
- * FUNCTION: AcpiGetNextObject
- *
- * PARAMETERS: Type - Type of object to be searched for
- * Parent - Parent object whose children we are getting
- * LastChild - Previous child that was found.
- * The NEXT child will be returned
- * RetHandle - Where handle to the next object is placed
- *
- * RETURN: Status
- *
- * DESCRIPTION: Return the next peer object within the namespace. If Handle is
- * valid, Scope is ignored. Otherwise, the first object within
- * Scope is returned.
- *
- ******************************************************************************/
-
-ACPI_STATUS
-AcpiGetNextObject (
- ACPI_OBJECT_TYPE Type,
- ACPI_HANDLE Parent,
- ACPI_HANDLE Child,
- ACPI_HANDLE *RetHandle)
-{
- ACPI_STATUS Status;
- ACPI_NAMESPACE_NODE *Node;
- ACPI_NAMESPACE_NODE *ParentNode = NULL;
- ACPI_NAMESPACE_NODE *ChildNode = NULL;
-
-
- /* Parameter validation */
-
- if (Type > ACPI_TYPE_MAX)
- {
- return (AE_BAD_PARAMETER);
- }
-
- Status = AcpiUtAcquireMutex (ACPI_MTX_NAMESPACE);
- if (ACPI_FAILURE (Status))
- {
- return (Status);
- }
-
- /* If null handle, use the parent */
-
- if (!Child)
- {
- /* Start search at the beginning of the specified scope */
-
- ParentNode = AcpiNsMapHandleToNode (Parent);
- if (!ParentNode)
- {
- Status = AE_BAD_PARAMETER;
- goto UnlockAndExit;
- }
- }
- else
- {
- /* Non-null handle, ignore the parent */
- /* Convert and validate the handle */
-
- ChildNode = AcpiNsMapHandleToNode (Child);
- if (!ChildNode)
- {
- Status = AE_BAD_PARAMETER;
- goto UnlockAndExit;
- }
- }
-
- /* Internal function does the real work */
-
- Node = AcpiNsGetNextNode (Type, ParentNode, ChildNode);
- if (!Node)
- {
- Status = AE_NOT_FOUND;
- goto UnlockAndExit;
- }
-
- if (RetHandle)
- {
- *RetHandle = AcpiNsConvertEntryToHandle (Node);
- }
-
-
-UnlockAndExit:
-
- (void) AcpiUtReleaseMutex (ACPI_MTX_NAMESPACE);
- return (Status);
-}
-
-
/*******************************************************************************
*
* FUNCTION: AcpiGetType
@@ -673,415 +259,91 @@ UnlockAndExit:
/*******************************************************************************
*
- * FUNCTION: AcpiWalkNamespace
- *
- * PARAMETERS: Type - ACPI_OBJECT_TYPE to search for
- * StartObject - Handle in namespace where search begins
- * MaxDepth - Depth to which search is to reach
- * UserFunction - Called when an object of "Type" is found
- * Context - Passed to user function
- * ReturnValue - Location where return value of
- * UserFunction is put if terminated early
+ * FUNCTION: AcpiGetNextObject
*
- * RETURNS Return value from the UserFunction if terminated early.
- * Otherwise, returns NULL.
+ * PARAMETERS: Type - Type of object to be searched for
+ * Parent - Parent object whose children we are getting
+ * LastChild - Previous child that was found.
+ * The NEXT child will be returned
+ * RetHandle - Where handle to the next object is placed
*
- * DESCRIPTION: Performs a modified depth-first walk of the namespace tree,
- * starting (and ending) at the object specified by StartHandle.
- * The UserFunction is called whenever an object that matches
- * the type parameter is found. If the user function returns
- * a non-zero value, the search is terminated immediately and this
- * value is returned to the caller.
+ * RETURN: Status
*
- * The point of this procedure is to provide a generic namespace
- * walk routine that can be called from multiple places to
- * provide multiple services; the User Function can be tailored
- * to each task, whether it is a print function, a compare
- * function, etc.
+ * DESCRIPTION: Return the next peer object within the namespace. If Handle is
+ * valid, Scope is ignored. Otherwise, the first object within
+ * Scope is returned.
*
******************************************************************************/
ACPI_STATUS
-AcpiWalkNamespace (
+AcpiGetNextObject (
ACPI_OBJECT_TYPE Type,
- ACPI_HANDLE StartObject,
- UINT32 MaxDepth,
- ACPI_WALK_CALLBACK UserFunction,
- void *Context,
- void **ReturnValue)
+ ACPI_HANDLE Parent,
+ ACPI_HANDLE Child,
+ ACPI_HANDLE *RetHandle)
{
ACPI_STATUS Status;
-
-
- ACPI_FUNCTION_TRACE ("AcpiWalkNamespace");
+ ACPI_NAMESPACE_NODE *Node;
+ ACPI_NAMESPACE_NODE *ParentNode = NULL;
+ ACPI_NAMESPACE_NODE *ChildNode = NULL;
/* Parameter validation */
- if ((Type > ACPI_TYPE_MAX) ||
- (!MaxDepth) ||
- (!UserFunction))
- {
- return_ACPI_STATUS (AE_BAD_PARAMETER);
- }
-
- /*
- * Lock the namespace around the walk.
- * The namespace will be unlocked/locked around each call
- * to the user function - since this function
- * must be allowed to make Acpi calls itself.
- */
- Status = AcpiUtAcquireMutex (ACPI_MTX_NAMESPACE);
- if (ACPI_FAILURE (Status))
+ if (Type > ACPI_TYPE_MAX)
{
- return_ACPI_STATUS (Status);
+ return (AE_BAD_PARAMETER);
}
- Status = AcpiNsWalkNamespace (Type, StartObject, MaxDepth, ACPI_NS_WALK_UNLOCK,
- UserFunction, Context, ReturnValue);
-
- (void) AcpiUtReleaseMutex (ACPI_MTX_NAMESPACE);
- return_ACPI_STATUS (Status);
-}
-
-
-/*******************************************************************************
- *
- * FUNCTION: AcpiNsGetDeviceCallback
- *
- * PARAMETERS: Callback from AcpiGetDevice
- *
- * RETURN: Status
- *
- * DESCRIPTION: Takes callbacks from WalkNamespace and filters out all non-
- * present devices, or if they specified a HID, it filters based
- * on that.
- *
- ******************************************************************************/
-
-static ACPI_STATUS
-AcpiNsGetDeviceCallback (
- ACPI_HANDLE ObjHandle,
- UINT32 NestingLevel,
- void *Context,
- void **ReturnValue)
-{
- ACPI_STATUS Status;
- ACPI_NAMESPACE_NODE *Node;
- UINT32 Flags;
- ACPI_DEVICE_ID Hid;
- ACPI_DEVICE_ID Cid;
- ACPI_GET_DEVICES_INFO *Info;
-
-
- Info = Context;
-
Status = AcpiUtAcquireMutex (ACPI_MTX_NAMESPACE);
if (ACPI_FAILURE (Status))
{
return (Status);
}
- Node = AcpiNsMapHandleToNode (ObjHandle);
- Status = AcpiUtReleaseMutex (ACPI_MTX_NAMESPACE);
- if (ACPI_FAILURE (Status))
- {
- return (Status);
- }
-
- if (!Node)
- {
- return (AE_BAD_PARAMETER);
- }
-
- /*
- * Run _STA to determine if device is present
- */
- Status = AcpiUtExecute_STA (Node, &Flags);
- if (ACPI_FAILURE (Status))
- {
- return (AE_CTRL_DEPTH);
- }
-
- if (!(Flags & 0x01))
- {
- /* Don't return at the device or children of the device if not there */
- return (AE_CTRL_DEPTH);
- }
+ /* If null handle, use the parent */
- /*
- * Filter based on device HID & CID
- */
- if (Info->Hid != NULL)
+ if (!Child)
{
- Status = AcpiUtExecute_HID (Node, &Hid);
- if (Status == AE_NOT_FOUND)
- {
- return (AE_OK);
- }
- else if (ACPI_FAILURE (Status))
- {
- return (AE_CTRL_DEPTH);
- }
+ /* Start search at the beginning of the specified scope */
- if (ACPI_STRNCMP (Hid.Buffer, Info->Hid, sizeof (Hid.Buffer)) != 0)
+ ParentNode = AcpiNsMapHandleToNode (Parent);
+ if (!ParentNode)
{
- Status = AcpiUtExecute_CID (Node, &Cid);
- if (Status == AE_NOT_FOUND)
- {
- return (AE_OK);
- }
- else if (ACPI_FAILURE (Status))
- {
- return (AE_CTRL_DEPTH);
- }
-
- /* TBD: Handle CID packages */
-
- if (ACPI_STRNCMP (Cid.Buffer, Info->Hid, sizeof (Cid.Buffer)) != 0)
- {
- return (AE_OK);
- }
+ Status = AE_BAD_PARAMETER;
+ goto UnlockAndExit;
}
}
-
- Status = Info->UserFunction (ObjHandle, NestingLevel, Info->Context, ReturnValue);
- return (Status);
-}
-
-
-/*******************************************************************************
- *
- * FUNCTION: AcpiGetDevices
- *
- * PARAMETERS: HID - HID to search for. Can be NULL.
- * UserFunction - Called when a matching object is found
- * Context - Passed to user function
- * ReturnValue - Location where return value of
- * UserFunction is put if terminated early
- *
- * RETURNS Return value from the UserFunction if terminated early.
- * Otherwise, returns NULL.
- *
- * DESCRIPTION: Performs a modified depth-first walk of the namespace tree,
- * starting (and ending) at the object specified by StartHandle.
- * The UserFunction is called whenever an object that matches
- * the type parameter is found. If the user function returns
- * a non-zero value, the search is terminated immediately and this
- * value is returned to the caller.
- *
- * This is a wrapper for WalkNamespace, but the callback performs
- * additional filtering. Please see AcpiGetDeviceCallback.
- *
- ******************************************************************************/
-
-ACPI_STATUS
-AcpiGetDevices (
- NATIVE_CHAR *HID,
- ACPI_WALK_CALLBACK UserFunction,
- void *Context,
- void **ReturnValue)
-{
- ACPI_STATUS Status;
- ACPI_GET_DEVICES_INFO Info;
-
-
- ACPI_FUNCTION_TRACE ("AcpiGetDevices");
-
-
- /* Parameter validation */
-
- if (!UserFunction)
- {
- return_ACPI_STATUS (AE_BAD_PARAMETER);
- }
-
- /*
- * We're going to call their callback from OUR callback, so we need
- * to know what it is, and their context parameter.
- */
- Info.Context = Context;
- Info.UserFunction = UserFunction;
- Info.Hid = HID;
-
- /*
- * Lock the namespace around the walk.
- * The namespace will be unlocked/locked around each call
- * to the user function - since this function
- * must be allowed to make Acpi calls itself.
- */
- Status = AcpiUtAcquireMutex (ACPI_MTX_NAMESPACE);
- if (ACPI_FAILURE (Status))
- {
- return_ACPI_STATUS (Status);
- }
-
- Status = AcpiNsWalkNamespace (ACPI_TYPE_DEVICE,
- ACPI_ROOT_OBJECT, ACPI_UINT32_MAX,
- ACPI_NS_WALK_UNLOCK,
- AcpiNsGetDeviceCallback, &Info,
- ReturnValue);
-
- (void) AcpiUtReleaseMutex (ACPI_MTX_NAMESPACE);
- return_ACPI_STATUS (Status);
-}
-
-
-/*******************************************************************************
- *
- * FUNCTION: AcpiAttachData
- *
- * PARAMETERS:
- *
- * RETURN: Status
- *
- * DESCRIPTION:
- *
- ******************************************************************************/
-
-ACPI_STATUS
-AcpiAttachData (
- ACPI_HANDLE ObjHandle,
- ACPI_OBJECT_HANDLER Handler,
- void *Data)
-{
- ACPI_NAMESPACE_NODE *Node;
- ACPI_STATUS Status;
-
-
- /* Parameter validation */
-
- if (!ObjHandle ||
- !Handler ||
- !Data)
+ else
{
- return (AE_BAD_PARAMETER);
- }
+ /* Non-null handle, ignore the parent */
+ /* Convert and validate the handle */
- Status = AcpiUtAcquireMutex (ACPI_MTX_NAMESPACE);
- if (ACPI_FAILURE (Status))
- {
- return (Status);
+ ChildNode = AcpiNsMapHandleToNode (Child);
+ if (!ChildNode)
+ {
+ Status = AE_BAD_PARAMETER;
+ goto UnlockAndExit;
+ }
}
- /* Convert and validate the handle */
+ /* Internal function does the real work */
- Node = AcpiNsMapHandleToNode (ObjHandle);
+ Node = AcpiNsGetNextNode (Type, ParentNode, ChildNode);
if (!Node)
{
- Status = AE_BAD_PARAMETER;
+ Status = AE_NOT_FOUND;
goto UnlockAndExit;
}
- Status = AcpiNsAttachData (Node, Handler, Data);
-
-UnlockAndExit:
- (void) AcpiUtReleaseMutex (ACPI_MTX_NAMESPACE);
- return (Status);
-}
-
-
-/*******************************************************************************
- *
- * FUNCTION: AcpiDetachData
- *
- * PARAMETERS:
- *
- * RETURN: Status
- *
- * DESCRIPTION:
- *
- ******************************************************************************/
-
-ACPI_STATUS
-AcpiDetachData (
- ACPI_HANDLE ObjHandle,
- ACPI_OBJECT_HANDLER Handler)
-{
- ACPI_NAMESPACE_NODE *Node;
- ACPI_STATUS Status;
-
-
- /* Parameter validation */
-
- if (!ObjHandle ||
- !Handler)
- {
- return (AE_BAD_PARAMETER);
- }
-
- Status = AcpiUtAcquireMutex (ACPI_MTX_NAMESPACE);
- if (ACPI_FAILURE (Status))
- {
- return (Status);
- }
-
- /* Convert and validate the handle */
-
- Node = AcpiNsMapHandleToNode (ObjHandle);
- if (!Node)
+ if (RetHandle)
{
- Status = AE_BAD_PARAMETER;
- goto UnlockAndExit;
+ *RetHandle = AcpiNsConvertEntryToHandle (Node);
}
- Status = AcpiNsDetachData (Node, Handler);
UnlockAndExit:
- (void) AcpiUtReleaseMutex (ACPI_MTX_NAMESPACE);
- return (Status);
-}
-
-
-/*******************************************************************************
- *
- * FUNCTION: AcpiGetData
- *
- * PARAMETERS:
- *
- * RETURN: Status
- *
- * DESCRIPTION:
- *
- ******************************************************************************/
-ACPI_STATUS
-AcpiGetData (
- ACPI_HANDLE ObjHandle,
- ACPI_OBJECT_HANDLER Handler,
- void **Data)
-{
- ACPI_NAMESPACE_NODE *Node;
- ACPI_STATUS Status;
-
-
- /* Parameter validation */
-
- if (!ObjHandle ||
- !Handler ||
- !Data)
- {
- return (AE_BAD_PARAMETER);
- }
-
- Status = AcpiUtAcquireMutex (ACPI_MTX_NAMESPACE);
- if (ACPI_FAILURE (Status))
- {
- return (Status);
- }
-
- /* Convert and validate the handle */
-
- Node = AcpiNsMapHandleToNode (ObjHandle);
- if (!Node)
- {
- Status = AE_BAD_PARAMETER;
- goto UnlockAndExit;
- }
-
- Status = AcpiNsGetAttachedData (Node, Handler, Data);
-
-UnlockAndExit:
(void) AcpiUtReleaseMutex (ACPI_MTX_NAMESPACE);
return (Status);
}
diff --git a/sys/contrib/dev/acpica/psargs.c b/sys/contrib/dev/acpica/psargs.c
index ed0fc7612962..40347886116d 100644
--- a/sys/contrib/dev/acpica/psargs.c
+++ b/sys/contrib/dev/acpica/psargs.c
@@ -1,7 +1,7 @@
/******************************************************************************
*
* Module Name: psargs - Parse AML opcode arguments
- * $Revision: 61 $
+ * $Revision: 62 $
*
*****************************************************************************/
@@ -435,7 +435,7 @@ AcpiPsGetNextNamepath (
NATIVE_CHAR *Path;
ACPI_PARSE_OBJECT *NameOp;
ACPI_STATUS Status;
- ACPI_NAMESPACE_NODE *MethodNode = NULL;
+ ACPI_OPERAND_OBJECT *MethodDesc;
ACPI_NAMESPACE_NODE *Node;
ACPI_GENERIC_STATE ScopeInfo;
@@ -476,32 +476,38 @@ AcpiPsGetNextNamepath (
{
if (Node->Type == ACPI_TYPE_METHOD)
{
- MethodNode = Node;
- ACPI_DEBUG_PRINT ((ACPI_DB_PARSE, "method - %p Path=%p\n",
- MethodNode, Path));
+ MethodDesc = AcpiNsGetAttachedObject (Node);
+ ACPI_DEBUG_PRINT ((ACPI_DB_PARSE, "Control Method - %p Desc %p Path=%p\n",
+ Node, MethodDesc, Path));
NameOp = AcpiPsAllocOp (AML_INT_NAMEPATH_OP);
- if (NameOp)
+ if (!NameOp)
{
- /* Change arg into a METHOD CALL and attach name to it */
+ return_VOID;
+ }
- AcpiPsInitOp (Arg, AML_INT_METHODCALL_OP);
+ /* Change arg into a METHOD CALL and attach name to it */
- NameOp->Common.Value.Name = Path;
+ AcpiPsInitOp (Arg, AML_INT_METHODCALL_OP);
- /* Point METHODCALL/NAME to the METHOD Node */
+ NameOp->Common.Value.Name = Path;
- NameOp->Common.Node = MethodNode;
- AcpiPsAppendArg (Arg, NameOp);
+ /* Point METHODCALL/NAME to the METHOD Node */
- if (!AcpiNsGetAttachedObject (MethodNode))
- {
- return_VOID;
- }
+ NameOp->Common.Node = Node;
+ AcpiPsAppendArg (Arg, NameOp);
- *ArgCount = (AcpiNsGetAttachedObject (MethodNode))->Method.ParamCount;
+ if (!MethodDesc)
+ {
+ ACPI_DEBUG_PRINT ((ACPI_DB_PARSE, "Control Method - %p has no attached object\n",
+ Node));
+ return_VOID;
}
+ ACPI_DEBUG_PRINT ((ACPI_DB_PARSE, "Control Method - %p Args %X\n",
+ Node, MethodDesc->Method.ParamCount));
+
+ *ArgCount = MethodDesc->Method.ParamCount;
return_VOID;
}
diff --git a/sys/contrib/dev/acpica/psfind.c b/sys/contrib/dev/acpica/psfind.c
index 17345ff46e7b..6862843fad3d 100644
--- a/sys/contrib/dev/acpica/psfind.c
+++ b/sys/contrib/dev/acpica/psfind.c
@@ -2,7 +2,7 @@
/******************************************************************************
*
* Module Name: psfind - Parse tree search routine
- * $Revision: 40 $
+ * $Revision: 42 $
*
*****************************************************************************/
@@ -301,6 +301,19 @@ AcpiPsFind (
AcpiGbl_PsFindCount++;
+#if 0
+ if ((Create) && (Opcode == AML_SCOPE_OP))
+ {
+ Op = AcpiPsAllocOp (AML_SCOPE_OP);
+ if (Op)
+ {
+ AcpiPsSetName (Op, 'XXXX');
+ AcpiPsAppendArg (Scope, Op);
+ }
+/* return_PTR (Op);*/
+ }
+#endif
+
/* Handle all prefixes in the name path */
while (AcpiPsIsPrefixChar (ACPI_GET8 (Path)))
@@ -337,6 +350,7 @@ AcpiPsFind (
Path++;
}
+
/* get name segment count */
switch (ACPI_GET8 (Path))
@@ -379,6 +393,7 @@ AcpiPsFind (
"Search scope %p Segs=%d Opcode=%4.4hX Create=%d\n",
Scope, SegCount, Opcode, Create));
+
/* match each name segment */
while (Scope && SegCount)
diff --git a/sys/contrib/dev/acpica/psopcode.c b/sys/contrib/dev/acpica/psopcode.c
index 3b90a5a9db82..53723e4de893 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: 70 $
+ * $Revision: 71 $
*
*****************************************************************************/
@@ -827,7 +827,7 @@ NATIVE_CHAR *
AcpiPsGetOpcodeName (
UINT16 Opcode)
{
-#ifdef ACPI_DEBUG
+#ifdef ACPI_DISASSEMBLER
const ACPI_OPCODE_INFO *Op;
diff --git a/sys/contrib/dev/acpica/psparse.c b/sys/contrib/dev/acpica/psparse.c
index f73fc1f75858..3740e192baeb 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: 127 $
+ * $Revision: 129 $
*
*****************************************************************************/
@@ -590,7 +590,7 @@ AcpiPsParseLoop (
ParserState = &WalkState->ParserState;
WalkState->ArgTypes = 0;
-#ifndef PARSER_ONLY
+#if (!defined (ACPI_NO_METHOD_EXECUTION) && !defined (ACPI_CONSTANT_EVAL_ONLY))
if (WalkState->WalkType & ACPI_WALK_METHOD_RESTART)
{
/* We are restarting a preempted control method */
@@ -708,6 +708,10 @@ AcpiPsParseLoop (
PreOp.Common.Value.Arg = NULL;
PreOp.Common.AmlOpcode = WalkState->Opcode;
+ /*
+ * Get and append arguments until we find the node that contains
+ * the name (the type ARGP_NAME).
+ */
while (GET_CURRENT_ARG_TYPE (WalkState->ArgTypes) != ARGP_NAME)
{
Arg = AcpiPsGetNextArg (ParserState,
diff --git a/sys/contrib/dev/acpica/psutils.c b/sys/contrib/dev/acpica/psutils.c
index 76ac4aaea6d8..ab9250d42a90 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: 51 $
+ * $Revision: 54 $
*
*****************************************************************************/
@@ -118,6 +118,7 @@
#include "acpi.h"
#include "acparser.h"
#include "amlcode.h"
+#include "acnamesp.h"
#define _COMPONENT ACPI_PARSER
ACPI_MODULE_NAME ("psutils")
@@ -125,6 +126,37 @@
/*******************************************************************************
*
+ * FUNCTION: AcpiPsCreateScopeOp
+ *
+ * PARAMETERS: None
+ *
+ * RETURN: ScopeOp
+ *
+ * DESCRIPTION: Create a Scope and associated namepath op with the root name
+ *
+ ******************************************************************************/
+
+ACPI_PARSE_OBJECT *
+AcpiPsCreateScopeOp (
+ void)
+{
+ ACPI_PARSE_OBJECT *ScopeOp;
+
+
+ ScopeOp = AcpiPsAllocOp (AML_SCOPE_OP);
+ if (!ScopeOp)
+ {
+ return (NULL);
+ }
+
+
+ ScopeOp->Named.Name = ACPI_ROOT_NAME;
+ return (ScopeOp);
+}
+
+
+/*******************************************************************************
+ *
* FUNCTION: AcpiPsInitOp
*
* PARAMETERS: Op - A newly allocated Op object
@@ -148,7 +180,7 @@ AcpiPsInitOp (
Op->Common.DataType = ACPI_DESC_TYPE_PARSER;
Op->Common.AmlOpcode = Opcode;
- ACPI_DEBUG_ONLY_MEMBERS (ACPI_STRNCPY (Op->Common.AmlOpName,
+ ACPI_DISASM_ONLY_MEMBERS (ACPI_STRNCPY (Op->Common.AmlOpName,
(AcpiPsGetOpcodeInfo (Opcode))->Name, sizeof (Op->Common.AmlOpName)));
}
@@ -254,7 +286,7 @@ AcpiPsFreeOp (
ACPI_DEBUG_PRINT ((ACPI_DB_ALLOCATIONS, "Free retval op: %p\n", Op));
}
- if (Op->Common.Flags == ACPI_PARSEOP_GENERIC)
+ if (Op->Common.Flags & ACPI_PARSEOP_GENERIC)
{
AcpiUtReleaseToCache (ACPI_MEM_LIST_PSNODE, Op);
}
diff --git a/sys/contrib/dev/acpica/psxface.c b/sys/contrib/dev/acpica/psxface.c
index a17da12875a6..7a30ed25f126 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: 64 $
+ * $Revision: 65 $
*
*****************************************************************************/
@@ -205,7 +205,7 @@ AcpiPsxExecute (
/* Create and init a Root Node */
- Op = AcpiPsAllocOp (AML_SCOPE_OP);
+ Op = AcpiPsCreateScopeOp ();
if (!Op)
{
return_ACPI_STATUS (AE_NO_MEMORY);
@@ -249,7 +249,7 @@ AcpiPsxExecute (
/* Create and init a Root Node */
- Op = AcpiPsAllocOp (AML_SCOPE_OP);
+ Op = AcpiPsCreateScopeOp ();
if (!Op)
{
return_ACPI_STATUS (AE_NO_MEMORY);
diff --git a/sys/contrib/dev/acpica/rscreate.c b/sys/contrib/dev/acpica/rscreate.c
index 97693857dea8..e0831e717955 100644
--- a/sys/contrib/dev/acpica/rscreate.c
+++ b/sys/contrib/dev/acpica/rscreate.c
@@ -1,7 +1,7 @@
/*******************************************************************************
*
* Module Name: rscreate - Create resource lists/tables
- * $Revision: 57 $
+ * $Revision: 58 $
*
******************************************************************************/
@@ -132,7 +132,6 @@
*
* PARAMETERS: ByteStreamBuffer - Pointer to the resource byte stream
* OutputBuffer - Pointer to the user's buffer
- * OutputBufferLength - Pointer to the size of OutputBuffer
*
* RETURN: Status - AE_OK if okay, else a valid ACPI_STATUS code
* If OutputBuffer is not large enough, OutputBufferLength
@@ -212,7 +211,6 @@ AcpiRsCreateResourceList (
* PARAMETERS: PackageObject - Pointer to an ACPI_OPERAND_OBJECT
* package
* OutputBuffer - Pointer to the user's buffer
- * OutputBufferLength - Size of OutputBuffer
*
* RETURN: Status AE_OK if okay, else a valid ACPI_STATUS code.
* If the OutputBuffer is too small, the error will be
@@ -349,7 +347,7 @@ AcpiRsCreatePciRoutingTable (
if ((*SubObjectList)->Reference.Opcode != AML_INT_NAMEPATH_OP)
{
- ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Need name, found reference op %X\n",
+ ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Need name, found reference op %X\n",
(*SubObjectList)->Reference.Opcode));
return_ACPI_STATUS (AE_BAD_DATA);
}
diff --git a/sys/contrib/dev/acpica/rsio.c b/sys/contrib/dev/acpica/rsio.c
index 330aa582ffe9..51cf96583416 100644
--- a/sys/contrib/dev/acpica/rsio.c
+++ b/sys/contrib/dev/acpica/rsio.c
@@ -1,7 +1,7 @@
/*******************************************************************************
*
* Module Name: rsio - IO and DMA resource descriptors
- * $Revision: 20 $
+ * $Revision: 22 $
*
******************************************************************************/
@@ -491,7 +491,7 @@ AcpiRsDmaResource (
Buffer += 1;
Temp8 = *Buffer;
- /* Decode the IRQ bits */
+ /* Decode the DMA channel bits */
for (i = 0, Index = 0; Index < 8; Index++)
{
@@ -501,19 +501,17 @@ AcpiRsDmaResource (
i++;
}
}
- if (i == 0)
- {
- /* Zero channels is invalid! */
-
- return_ACPI_STATUS (AE_BAD_DATA);
- }
- OutputStruct->Data.Dma.NumberOfChannels = i;
+ /* Zero DMA channels is valid */
- /*
- * Calculate the structure size based upon the number of interrupts
- */
- StructSize += ((ACPI_SIZE) OutputStruct->Data.Dma.NumberOfChannels - 1) * 4;
+ OutputStruct->Data.Dma.NumberOfChannels = i;
+ if (i > 0)
+ {
+ /*
+ * Calculate the structure size based upon the number of interrupts
+ */
+ StructSize += ((ACPI_SIZE) i - 1) * 4;
+ }
/*
* Point to Byte 2
@@ -528,6 +526,7 @@ AcpiRsDmaResource (
if (0x03 == OutputStruct->Data.Dma.Transfer)
{
+ ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Invalid DMA.Transfer preference (3)\n"));
return_ACPI_STATUS (AE_BAD_DATA);
}
diff --git a/sys/contrib/dev/acpica/rsirq.c b/sys/contrib/dev/acpica/rsirq.c
index 79afd1e7a96c..12bc8271b759 100644
--- a/sys/contrib/dev/acpica/rsirq.c
+++ b/sys/contrib/dev/acpica/rsirq.c
@@ -1,7 +1,7 @@
/*******************************************************************************
*
* Module Name: rsirq - IRQ resource descriptors
- * $Revision: 28 $
+ * $Revision: 30 $
*
******************************************************************************/
@@ -190,18 +190,16 @@ AcpiRsIrqResource (
}
}
- if (i == 0)
- {
- /* Zero interrupts is invalid! */
+ /* Zero interrupts is valid */
- return_ACPI_STATUS (AE_BAD_DATA);
- }
OutputStruct->Data.Irq.NumberOfInterrupts = i;
-
- /*
- * Calculate the structure size based upon the number of interrupts
- */
- StructSize += ((ACPI_SIZE) OutputStruct->Data.Irq.NumberOfInterrupts - 1) * 4;
+ if (i > 0)
+ {
+ /*
+ * Calculate the structure size based upon the number of interrupts
+ */
+ StructSize += ((ACPI_SIZE) i - 1) * 4;
+ }
/*
* Point to Byte 3 if it is used
@@ -233,6 +231,7 @@ AcpiRsIrqResource (
* are allowed (ACPI spec v1.0b ection 6.4.2.1),
* so an error will occur if we reach this point
*/
+ ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Invalid interrupt polarity/trigger in resource list\n"));
return_ACPI_STATUS (AE_BAD_DATA);
}
}
diff --git a/sys/contrib/dev/acpica/rslist.c b/sys/contrib/dev/acpica/rslist.c
index 9f4a7a07373f..196873eedd97 100644
--- a/sys/contrib/dev/acpica/rslist.c
+++ b/sys/contrib/dev/acpica/rslist.c
@@ -1,7 +1,7 @@
/*******************************************************************************
*
* Module Name: rslist - Linked list utilities
- * $Revision: 30 $
+ * $Revision: 31 $
*
******************************************************************************/
@@ -570,6 +570,8 @@ AcpiRsListToByteStream (
* If we get here, everything is out of sync,
* so exit with an error
*/
+ ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Invalid descriptor type (%X) in resource list\n",
+ LinkedList->Id));
Status = AE_BAD_DATA;
break;
diff --git a/sys/contrib/dev/acpica/tbconvrt.c b/sys/contrib/dev/acpica/tbconvrt.c
index bc63b87baef9..f2f247957983 100644
--- a/sys/contrib/dev/acpica/tbconvrt.c
+++ b/sys/contrib/dev/acpica/tbconvrt.c
@@ -1,7 +1,7 @@
/******************************************************************************
*
* Module Name: tbconvrt - ACPI Table conversion utilities
- * $Revision: 41 $
+ * $Revision: 42 $
*
*****************************************************************************/
@@ -183,8 +183,7 @@ AcpiTbGetTableCount (
ACPI_STATUS
AcpiTbConvertToXsdt (
- ACPI_TABLE_DESC *TableInfo,
- UINT32 *NumberOfTables)
+ ACPI_TABLE_DESC *TableInfo)
{
ACPI_SIZE TableSize;
UINT32 i;
@@ -194,13 +193,10 @@ AcpiTbConvertToXsdt (
ACPI_FUNCTION_ENTRY ();
- /* Get the number of tables defined in the RSDT or XSDT */
-
- *NumberOfTables = AcpiTbGetTableCount (AcpiGbl_RSDP, TableInfo->Pointer);
-
/* Compute size of the converted XSDT */
- TableSize = ((ACPI_SIZE) *NumberOfTables * sizeof (UINT64)) + sizeof (ACPI_TABLE_HEADER);
+ TableSize = ((ACPI_SIZE) AcpiGbl_RsdtTableCount * sizeof (UINT64)) +
+ sizeof (ACPI_TABLE_HEADER);
/* Allocate an XSDT */
@@ -217,7 +213,7 @@ AcpiTbConvertToXsdt (
/* Copy the table pointers */
- for (i = 0; i < *NumberOfTables; i++)
+ for (i = 0; i < AcpiGbl_RsdtTableCount; i++)
{
if (AcpiGbl_RSDP->Revision < 2)
{
diff --git a/sys/contrib/dev/acpica/tbget.c b/sys/contrib/dev/acpica/tbget.c
index ba020ce01bc8..3616875874af 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: 77 $
+ * $Revision: 78 $
*
*****************************************************************************/
@@ -126,821 +126,457 @@
/*******************************************************************************
*
- * FUNCTION: AcpiTbTableOverride
+ * FUNCTION: AcpiTbGetTable
*
- * PARAMETERS: *TableInfo - Info for current table
+ * PARAMETERS: Address - Address of table to retrieve. Can be
+ * Logical or Physical
+ * TableInfo - Where table info is returned
*
* RETURN: None
*
- * DESCRIPTION: Attempts override of current table with a new one if provided
- * by the host OS.
- *
- ******************************************************************************/
-
-void
-AcpiTbTableOverride (
- ACPI_TABLE_DESC *TableInfo)
-{
- ACPI_TABLE_HEADER *NewTable;
- ACPI_STATUS Status;
- ACPI_POINTER Address;
- ACPI_TABLE_DESC NewTableInfo;
-
-
- ACPI_FUNCTION_TRACE ("AcpiTbTableOverride");
-
-
- Status = AcpiOsTableOverride (TableInfo->Pointer, &NewTable);
- if (ACPI_FAILURE (Status))
- {
- /* Some severe error from the OSL, but we basically ignore it */
-
- ACPI_REPORT_ERROR (("Could not override ACPI table, %s\n",
- AcpiFormatException (Status)));
- return_VOID;
- }
-
- if (!NewTable)
- {
- /* No table override */
-
- return_VOID;
- }
-
- /*
- * We have a new table to override the old one. Get a copy of
- * the new one. We know that the new table has a logical pointer.
- */
- Address.PointerType = ACPI_LOGICAL_POINTER;
- Address.Pointer.Logical = NewTable;
-
- Status = AcpiTbGetTable (&Address, &NewTableInfo);
- if (ACPI_FAILURE (Status))
- {
- ACPI_REPORT_ERROR (("Could not copy ACPI table override\n"));
- return_VOID;
- }
-
- /*
- * Delete the original table
- */
- AcpiTbDeleteSingleTable (TableInfo);
-
- /* Copy the table info */
-
- ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Successful table override [%4.4s]\n",
- ((ACPI_TABLE_HEADER *) NewTableInfo.Pointer)->Signature));
-
- ACPI_MEMCPY (TableInfo, &NewTableInfo, sizeof (ACPI_TABLE_DESC));
- return_VOID;
-}
-
-
-/*******************************************************************************
- *
- * FUNCTION: AcpiTbGetTableWithOverride
- *
- * PARAMETERS: Address - Physical or logical address of table
- * *TableInfo - Where the table info is returned
- *
- * RETURN: Status
- *
- * DESCRIPTION: Gets and installs the table with possible table override by OS.
+ * DESCRIPTION: Get entire table of unknown size.
*
******************************************************************************/
ACPI_STATUS
-AcpiTbGetTableWithOverride (
+AcpiTbGetTable (
ACPI_POINTER *Address,
ACPI_TABLE_DESC *TableInfo)
{
ACPI_STATUS Status;
+ ACPI_TABLE_HEADER Header;
- ACPI_FUNCTION_TRACE ("AcpiTbGetTableWithOverride");
-
+ ACPI_FUNCTION_TRACE ("TbGetTable");
- Status = AcpiTbGetTable (Address, TableInfo);
- if (ACPI_FAILURE (Status))
- {
- ACPI_REPORT_ERROR (("Could not get ACPI table, %s\n",
- AcpiFormatException (Status)));
- return_ACPI_STATUS (Status);
- }
/*
- * Attempt override. It either happens or it doesn't, no status
+ * Get the header in order to get signature and table size
*/
- AcpiTbTableOverride (TableInfo);
-
- /* Install the table */
-
- Status = AcpiTbInstallTable (TableInfo);
+ Status = AcpiTbGetTableHeader (Address, &Header);
if (ACPI_FAILURE (Status))
{
- ACPI_REPORT_ERROR (("Could not install ACPI table, %s\n",
- AcpiFormatException (Status)));
- }
-
- return_ACPI_STATUS (Status);
-}
-
-
-/*******************************************************************************
- *
- * FUNCTION: AcpiTbGetTablePtr
- *
- * PARAMETERS: TableType - one of the defined table types
- * Instance - Which table of this type
- * TablePtrLoc - pointer to location to place the pointer for
- * return
- *
- * RETURN: Status
- *
- * DESCRIPTION: This function is called to get the pointer to an ACPI table.
- *
- ******************************************************************************/
-
-ACPI_STATUS
-AcpiTbGetTablePtr (
- ACPI_TABLE_TYPE TableType,
- UINT32 Instance,
- ACPI_TABLE_HEADER **TablePtrLoc)
-{
- ACPI_TABLE_DESC *TableDesc;
- UINT32 i;
-
-
- ACPI_FUNCTION_TRACE ("TbGetTablePtr");
-
-
- if (!AcpiGbl_DSDT)
- {
- return_ACPI_STATUS (AE_NO_ACPI_TABLES);
- }
-
- if (TableType > ACPI_TABLE_MAX)
- {
- return_ACPI_STATUS (AE_BAD_PARAMETER);
- }
-
- /*
- * For all table types (Single/Multiple), the first
- * instance is always in the list head.
- */
- if (Instance == 1)
- {
- /*
- * Just pluck the pointer out of the global table!
- * Will be null if no table is present
- */
- *TablePtrLoc = AcpiGbl_AcpiTables[TableType].Pointer;
- return_ACPI_STATUS (AE_OK);
+ return_ACPI_STATUS (Status);
}
- /*
- * Check for instance out of range
- */
- if (Instance > AcpiGbl_AcpiTables[TableType].Count)
- {
- return_ACPI_STATUS (AE_NOT_EXIST);
- }
+ /* Get the entire table */
- /* Walk the list to get the desired table
- * Since the if (Instance == 1) check above checked for the
- * first table, setting TableDesc equal to the .Next member
- * is actually pointing to the second table. Therefore, we
- * need to walk from the 2nd table until we reach the Instance
- * that the user is looking for and return its table pointer.
- */
- TableDesc = AcpiGbl_AcpiTables[TableType].Next;
- for (i = 2; i < Instance; i++)
+ Status = AcpiTbGetTableBody (Address, &Header, TableInfo);
+ if (ACPI_FAILURE (Status))
{
- TableDesc = TableDesc->Next;
+ ACPI_REPORT_ERROR (("Could not get ACPI table (size %X), %s\n",
+ Header.Length, AcpiFormatException (Status)));
+ return_ACPI_STATUS (Status);
}
- /* We are now pointing to the requested table's descriptor */
-
- *TablePtrLoc = TableDesc->Pointer;
-
return_ACPI_STATUS (AE_OK);
}
/*******************************************************************************
*
- * FUNCTION: AcpiTbGetTable
+ * FUNCTION: AcpiTbGetTableHeader
*
- * PARAMETERS: Address - Physical address of table to retrieve
- * *TableInfo - Where the table info is returned
+ * PARAMETERS: Address - Address of table to retrieve. Can be
+ * Logical or Physical
+ * ReturnHeader - Where the table header is returned
*
* RETURN: Status
*
- * DESCRIPTION: Maps the physical address of table into a logical address
+ * DESCRIPTION: Get an ACPI table header. Works in both physical or virtual
+ * addressing mode. Works with both physical or logical pointers.
+ * Table is either copied or mapped, depending on the pointer
+ * type and mode of the processor.
*
******************************************************************************/
ACPI_STATUS
-AcpiTbGetTable (
+AcpiTbGetTableHeader (
ACPI_POINTER *Address,
- ACPI_TABLE_DESC *TableInfo)
+ ACPI_TABLE_HEADER *ReturnHeader)
{
- ACPI_TABLE_HEADER *TableHeader = NULL;
- ACPI_TABLE_HEADER *FullTable = NULL;
- ACPI_SIZE Size;
- UINT8 Allocation;
ACPI_STATUS Status = AE_OK;
+ ACPI_TABLE_HEADER *Header = NULL;
- ACPI_FUNCTION_TRACE ("TbGetTable");
+ ACPI_FUNCTION_TRACE ("TbGetTableHeader");
- if (!TableInfo || !Address)
- {
- return_ACPI_STATUS (AE_BAD_PARAMETER);
- }
-
+ /*
+ * Flags contains the current processor mode (Virtual or Physical addressing)
+ * The PointerType is either Logical or Physical
+ */
switch (Address->PointerType)
{
- case ACPI_LOGICAL_POINTER:
-
- /*
- * Getting data from a buffer, not BIOS tables
- */
- TableHeader = Address->Pointer.Logical;
+ case ACPI_PHYSMODE_PHYSPTR:
+ case ACPI_LOGMODE_LOGPTR:
- /* Allocate buffer for the entire table */
+ /* Pointer matches processor mode, copy the header */
- FullTable = ACPI_MEM_ALLOCATE (TableHeader->Length);
- if (!FullTable)
- {
- return_ACPI_STATUS (AE_NO_MEMORY);
- }
-
- /* Copy the entire table (including header) to the local buffer */
-
- Size = (ACPI_SIZE) TableHeader->Length;
- ACPI_MEMCPY (FullTable, TableHeader, Size);
-
- /* Save allocation type */
-
- Allocation = ACPI_MEM_ALLOCATED;
+ ACPI_MEMCPY (ReturnHeader, Address->Pointer.Logical, sizeof (ACPI_TABLE_HEADER));
break;
- case ACPI_PHYSICAL_POINTER:
+ case ACPI_LOGMODE_PHYSPTR:
- /*
- * Not reading from a buffer, just map the table's physical memory
- * into our address space.
- */
- Size = SIZE_IN_HEADER;
+ /* Create a logical address for the physical pointer*/
- Status = AcpiTbMapAcpiTable (Address->Pointer.Physical, &Size, &FullTable);
+ Status = AcpiOsMapMemory (Address->Pointer.Physical, sizeof (ACPI_TABLE_HEADER),
+ (void **) &Header);
if (ACPI_FAILURE (Status))
{
+ ACPI_REPORT_ERROR (("Could not map memory at %p for length %X\n",
+ Address->Pointer.Physical, sizeof (ACPI_TABLE_HEADER)));
return_ACPI_STATUS (Status);
}
- /* Save allocation type */
+ /* Copy header and delete mapping */
- Allocation = ACPI_MEM_MAPPED;
+ ACPI_MEMCPY (ReturnHeader, Header, sizeof (ACPI_TABLE_HEADER));
+ AcpiOsUnmapMemory (Header, sizeof (ACPI_TABLE_HEADER));
break;
default:
+
+ ACPI_REPORT_ERROR (("Invalid address flags %X\n",
+ Address->PointerType));
return_ACPI_STATUS (AE_BAD_PARAMETER);
}
- /* Return values */
-
- TableInfo->Pointer = FullTable;
- TableInfo->Length = Size;
- 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);
+ return_ACPI_STATUS (AE_OK);
}
/*******************************************************************************
*
- * FUNCTION: AcpiTbGetAllTables
+ * FUNCTION: AcpiTbGetTableBody
*
- * PARAMETERS: NumberOfTables - Number of tables to get
+ * PARAMETERS: Address - Address of table to retrieve. Can be
+ * Logical or Physical
+ * Header - Header of the table to retrieve
+ * TableInfo - Where the table info is returned
*
* RETURN: Status
*
- * 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)
+ * DESCRIPTION: Get an entire ACPI table with support to allow the host OS to
+ * replace the table with a newer version (table override.)
+ * Works in both physical or virtual
+ * addressing mode. Works with both physical or logical pointers.
+ * Table is either copied or mapped, depending on the pointer
+ * type and mode of the processor.
*
******************************************************************************/
ACPI_STATUS
-AcpiTbGetAllTables (
- UINT32 NumberOfTables)
+AcpiTbGetTableBody (
+ ACPI_POINTER *Address,
+ ACPI_TABLE_HEADER *Header,
+ ACPI_TABLE_DESC *TableInfo)
{
- ACPI_STATUS Status = AE_OK;
- UINT32 Index;
- ACPI_TABLE_DESC TableInfo;
- ACPI_POINTER Address;
-
-
- ACPI_FUNCTION_TRACE ("TbGetAllTables");
-
- ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Number of tables: %d\n", NumberOfTables));
-
-
- /*
- * Loop through all table pointers found in RSDT.
- * This will NOT include the FACS and DSDT - we must get
- * them after the loop.
- *
- * The ONLY table we are interested in getting here is the FADT.
- */
- for (Index = 0; Index < NumberOfTables; Index++)
- {
- /* Clear the TableInfo each time */
-
- ACPI_MEMSET (&TableInfo, 0, sizeof (ACPI_TABLE_DESC));
-
- /* Get the table via the XSDT */
-
- 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);
- }
-
- /* Recognize and install the table */
-
- Status = AcpiTbInstallTable (&TableInfo);
- if (ACPI_FAILURE (Status))
- {
- /*
- * Unrecognized or unsupported table, delete it and ignore the
- * error. Just get as many tables as we can, later we will
- * determine if there are enough tables to continue.
- */
- (void) AcpiTbUninstallTable (&TableInfo);
- Status = AE_OK;
- }
- }
+ ACPI_STATUS Status;
- if (!AcpiGbl_FADT)
- {
- ACPI_REPORT_ERROR (("No FADT present in R/XSDT\n"));
- return_ACPI_STATUS (AE_NO_ACPI_TABLES);
- }
- /*
- * Convert the FADT to a common format. This allows earlier revisions of the
- * table to coexist with newer versions, using common access code.
- */
- Status = AcpiTbConvertTableFadt ();
- if (ACPI_FAILURE (Status))
- {
- ACPI_REPORT_ERROR (("Could not convert FADT to internal common format\n"));
- return_ACPI_STATUS (Status);
- }
+ ACPI_FUNCTION_TRACE ("TbGetTableBody");
- /*
- * Get the FACS (must have the FADT first, from loop above)
- * AcpiTbGetTableFacs will fail if FADT pointer is not valid
- */
- 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, %s\n",
- AcpiFormatException (Status)));
- return_ACPI_STATUS (Status);
- }
-
- /* Install the FACS */
-
- Status = AcpiTbInstallTable (&TableInfo);
- if (ACPI_FAILURE (Status))
+ if (!TableInfo || !Address)
{
- ACPI_REPORT_ERROR (("Could not install the FACS, %s\n",
- AcpiFormatException (Status)));
- return_ACPI_STATUS (Status);
+ return_ACPI_STATUS (AE_BAD_PARAMETER);
}
/*
- * Create the common FACS pointer table
- * (Contains pointers to the original table)
+ * Attempt table override.
*/
- Status = AcpiTbBuildCommonFacs (&TableInfo);
- if (ACPI_FAILURE (Status))
+ Status = AcpiTbTableOverride (Header, TableInfo);
+ if (ACPI_SUCCESS (Status))
{
- return_ACPI_STATUS (Status);
- }
-
- /*
- * Get/install the DSDT (We know that the FADT is valid now)
- */
- Address.PointerType = AcpiGbl_TableFlags;
- Address.Pointer.Value = ACPI_GET_ADDRESS (AcpiGbl_FADT->XDsdt);
+ /* Table was overridden by the host OS */
- Status = AcpiTbGetTableWithOverride (&Address, &TableInfo);
- if (ACPI_FAILURE (Status))
- {
- ACPI_REPORT_ERROR (("Could not get the DSDT\n"));
return_ACPI_STATUS (Status);
}
- /* Set Integer Width (32/64) based upon DSDT revision */
-
- AcpiUtSetIntegerWidth (AcpiGbl_DSDT->Revision);
-
- /* Dump the entire DSDT */
-
- ACPI_DEBUG_PRINT ((ACPI_DB_TABLES,
- "Hex dump of entire DSDT, size %d (0x%X), Integer width = %d\n",
- AcpiGbl_DSDT->Length, AcpiGbl_DSDT->Length, AcpiGbl_IntegerBitWidth));
- ACPI_DUMP_BUFFER ((UINT8 *) AcpiGbl_DSDT, AcpiGbl_DSDT->Length);
-
- /* Always delete the RSDP mapping, we are done with it */
+ /* No override, get the original table */
- AcpiTbDeleteAcpiTable (ACPI_TABLE_RSDP);
+ Status = AcpiTbGetThisTable (Address, Header, TableInfo);
return_ACPI_STATUS (Status);
}
/*******************************************************************************
*
- * FUNCTION: AcpiTbVerifyRsdp
+ * FUNCTION: AcpiTbTableOverride
*
- * PARAMETERS: NumberOfTables - Where the table count is placed
+ * PARAMETERS: Header - Pointer to table header
+ * TableInfo - Return info if table is overridden
*
- * RETURN: Status
+ * RETURN: None
*
- * DESCRIPTION: Load and validate the RSDP (ptr) and RSDT (table)
+ * DESCRIPTION: Attempts override of current table with a new one if provided
+ * by the host OS.
*
******************************************************************************/
ACPI_STATUS
-AcpiTbVerifyRsdp (
- ACPI_POINTER *Address)
+AcpiTbTableOverride (
+ ACPI_TABLE_HEADER *Header,
+ ACPI_TABLE_DESC *TableInfo)
{
- ACPI_TABLE_DESC TableInfo;
+ ACPI_TABLE_HEADER *NewTable;
ACPI_STATUS Status;
- RSDP_DESCRIPTOR *Rsdp;
-
-
- ACPI_FUNCTION_TRACE ("TbVerifyRsdp");
+ ACPI_POINTER Address;
- switch (Address->PointerType)
- {
- case ACPI_LOGICAL_POINTER:
+ ACPI_FUNCTION_TRACE ("TbTableOverride");
- 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);
- }
/*
- * The signature and checksum must both be correct
+ * The OSL will examine the header and decide whether to override this
+ * table. If it decides to override, a table will be returned in NewTable,
+ * which we will then copy.
*/
- if (ACPI_STRNCMP ((NATIVE_CHAR *) Rsdp, RSDP_SIG, sizeof (RSDP_SIG)-1) != 0)
+ Status = AcpiOsTableOverride (Header, &NewTable);
+ if (ACPI_FAILURE (Status))
{
- /* Nope, BAD Signature */
+ /* Some severe error from the OSL, but we basically ignore it */
- Status = AE_BAD_SIGNATURE;
- goto Cleanup;
+ ACPI_REPORT_ERROR (("Could not override ACPI table, %s\n",
+ AcpiFormatException (Status)));
+ return_ACPI_STATUS (Status);
}
- /* Check the standard checksum */
-
- if (AcpiTbChecksum (Rsdp, ACPI_RSDP_CHECKSUM_LENGTH) != 0)
+ if (!NewTable)
{
- Status = AE_BAD_CHECKSUM;
- goto Cleanup;
- }
-
- /* Check extended checksum if table version >= 2 */
+ /* No table override */
- if (Rsdp->Revision >= 2)
- {
- if (AcpiTbChecksum (Rsdp, ACPI_RSDP_XCHECKSUM_LENGTH) != 0)
- {
- Status = AE_BAD_CHECKSUM;
- goto Cleanup;
- }
+ return_ACPI_STATUS (AE_NO_ACPI_TABLES);
}
- /* The RSDP supplied is OK */
-
- TableInfo.Pointer = ACPI_CAST_PTR (ACPI_TABLE_HEADER, Rsdp);
- TableInfo.Length = sizeof (RSDP_DESCRIPTOR);
- TableInfo.Allocation = ACPI_MEM_MAPPED;
- TableInfo.BasePointer = Rsdp;
-
- /* Save the table pointers and allocation info */
+ /*
+ * We have a new table to override the old one. Get a copy of
+ * the new one. We know that the new table has a logical pointer.
+ */
+ Address.PointerType = ACPI_LOGICAL_POINTER | ACPI_LOGICAL_ADDRESSING;
+ Address.Pointer.Logical = NewTable;
- Status = AcpiTbInitTableDescriptor (ACPI_TABLE_RSDP, &TableInfo);
+ Status = AcpiTbGetThisTable (&Address, NewTable, TableInfo);
if (ACPI_FAILURE (Status))
{
- goto Cleanup;
- }
-
- /* Save the RSDP in a global for easy access */
-
- AcpiGbl_RSDP = ACPI_CAST_PTR (RSDP_DESCRIPTOR, TableInfo.Pointer);
- return_ACPI_STATUS (Status);
-
-
- /* Error exit */
-Cleanup:
-
- if (AcpiGbl_TableFlags & ACPI_PHYSICAL_POINTER)
- {
- AcpiOsUnmapMemory (Rsdp, sizeof (RSDP_DESCRIPTOR));
+ ACPI_REPORT_ERROR (("Could not copy override ACPI table, %s\n",
+ AcpiFormatException (Status)));
+ return_ACPI_STATUS (Status);
}
- return_ACPI_STATUS (Status);
-}
-
-
-/*******************************************************************************
- *
- * FUNCTION: AcpiTbGetRsdtAddress
- *
- * PARAMETERS: None
- *
- * RETURN: RSDT physical address
- *
- * DESCRIPTION: Extract the address of the RSDT or XSDT, depending on the
- * version of the RSDP
- *
- ******************************************************************************/
-
-void
-AcpiTbGetRsdtAddress (
- ACPI_POINTER *OutAddress)
-{
-
- ACPI_FUNCTION_ENTRY ();
+ /* Copy the table info */
- OutAddress->PointerType = AcpiGbl_TableFlags;
+ ACPI_REPORT_INFO (("Table [%4.4s] replaced by host OS\n",
+ TableInfo->Pointer->Signature));
- /*
- * 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)
- {
- OutAddress->Pointer.Value = AcpiGbl_RSDP->RsdtPhysicalAddress;
- }
- else
- {
- OutAddress->Pointer.Value = ACPI_GET_ADDRESS (AcpiGbl_RSDP->XsdtPhysicalAddress);
- }
+ return_ACPI_STATUS (AE_OK);
}
/*******************************************************************************
*
- * FUNCTION: AcpiTbValidateRsdt
+ * FUNCTION: AcpiTbGetThisTable
*
- * PARAMETERS: TablePtr - Addressable pointer to the RSDT.
+ * PARAMETERS: Address - Address of table to retrieve. Can be
+ * Logical or Physical
+ * Header - Header of the table to retrieve
+ * TableInfo - Where the table info is returned
*
* RETURN: Status
*
- * DESCRIPTION: Validate signature for the RSDT or XSDT
+ * DESCRIPTION: Get an entire ACPI table. Works in both physical or virtual
+ * addressing mode. Works with both physical or logical pointers.
+ * Table is either copied or mapped, depending on the pointer
+ * type and mode of the processor.
*
******************************************************************************/
ACPI_STATUS
-AcpiTbValidateRsdt (
- ACPI_TABLE_HEADER *TablePtr)
+AcpiTbGetThisTable (
+ ACPI_POINTER *Address,
+ ACPI_TABLE_HEADER *Header,
+ ACPI_TABLE_DESC *TableInfo)
{
- int NoMatch;
-
+ ACPI_TABLE_HEADER *FullTable = NULL;
+ UINT8 Allocation;
+ ACPI_STATUS Status = AE_OK;
- ACPI_FUNCTION_NAME ("TbValidateRsdt");
+
+ ACPI_FUNCTION_TRACE ("TbGetThisTable");
/*
- * For RSDP revision 0 or 1, we use the RSDT.
- * For RSDP revision 2 and above, we use the XSDT
+ * Flags contains the current processor mode (Virtual or Physical addressing)
+ * The PointerType is either Logical or Physical
*/
- if (AcpiGbl_RSDP->Revision < 2)
- {
- NoMatch = ACPI_STRNCMP ((char *) TablePtr, RSDT_SIG,
- sizeof (RSDT_SIG) -1);
- }
- else
+ switch (Address->PointerType)
{
- NoMatch = ACPI_STRNCMP ((char *) TablePtr, XSDT_SIG,
- sizeof (XSDT_SIG) -1);
- }
+ case ACPI_PHYSMODE_PHYSPTR:
+ case ACPI_LOGMODE_LOGPTR:
- if (NoMatch)
- {
- /* Invalid RSDT or XSDT signature */
+ /* Pointer matches processor mode, copy the table to a new buffer */
+
+ FullTable = ACPI_MEM_ALLOCATE (Header->Length);
+ if (!FullTable)
+ {
+ ACPI_REPORT_ERROR (("Could not allocate table memory for [%4.4s] length %X\n",
+ Header->Signature, Header->Length));
+ return_ACPI_STATUS (AE_NO_MEMORY);
+ }
- ACPI_REPORT_ERROR (("Invalid signature where RSDP indicates RSDT/XSDT should be located\n"));
+ /* Copy the entire table (including header) to the local buffer */
- ACPI_DUMP_BUFFER (AcpiGbl_RSDP, 20);
+ ACPI_MEMCPY (FullTable, Address->Pointer.Logical, Header->Length);
- ACPI_DEBUG_PRINT_RAW ((ACPI_DB_ERROR,
- "RSDT/XSDT signature at %X (%p) is invalid\n",
- AcpiGbl_RSDP->RsdtPhysicalAddress,
- (void *) (NATIVE_UINT) AcpiGbl_RSDP->RsdtPhysicalAddress));
+ /* Save allocation type */
- return (AE_BAD_SIGNATURE);
- }
+ Allocation = ACPI_MEM_ALLOCATED;
+ break;
- return (AE_OK);
-}
+ case ACPI_LOGMODE_PHYSPTR:
-/*******************************************************************************
- *
- * FUNCTION: AcpiTbGetTablePointer
- *
- * PARAMETERS: PhysicalAddress - Address from RSDT
- * Flags - virtual or physical addressing
- * TablePtr - Addressable address (output)
- *
- * RETURN: Status
- *
- * DESCRIPTION: Create an addressable pointer to an ACPI table
- *
- ******************************************************************************/
+ /*
+ * Just map the table's physical memory
+ * into our address space.
+ */
+ Status = AcpiOsMapMemory (Address->Pointer.Physical, (ACPI_SIZE) Header->Length,
+ (void **) &FullTable);
+ if (ACPI_FAILURE (Status))
+ {
+ ACPI_REPORT_ERROR (("Could not map memory for table [%4.4s] at %p for length %X\n",
+ Header->Signature, Address->Pointer.Physical, Header->Length));
+ return (Status);
+ }
-ACPI_STATUS
-AcpiTbGetTablePointer (
- ACPI_POINTER *Address,
- UINT32 Flags,
- ACPI_SIZE *Size,
- ACPI_TABLE_HEADER **TablePtr)
-{
- ACPI_STATUS Status = AE_OK;
+ /* Save allocation type */
+ Allocation = ACPI_MEM_MAPPED;
+ break;
- ACPI_FUNCTION_ENTRY ();
+ default:
+
+ ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Invalid address flags %X\n",
+ Address->PointerType));
+ return_ACPI_STATUS (AE_BAD_PARAMETER);
+ }
/*
- * What mode is the processor in? (Virtual or Physical addressing)
+ * Validate checksum for _most_ tables,
+ * even the ones whose signature we don't recognize
*/
- if ((Flags & ACPI_MEMORY_MODE) == ACPI_LOGICAL_ADDRESSING)
+ if (TableInfo->Type != ACPI_TABLE_FACS)
{
- /* Incoming pointer can be either logical or physical */
+ Status = AcpiTbVerifyTableChecksum (FullTable);
- switch (Address->PointerType)
+#if (!ACPI_CHECKSUM_ABORT)
+ if (ACPI_FAILURE (Status))
{
- case ACPI_PHYSICAL_POINTER:
+ /* Ignore the error if configuration says so */
- *Size = SIZE_IN_HEADER;
- Status = AcpiTbMapAcpiTable (Address->Pointer.Physical, Size, TablePtr);
- break;
-
- case ACPI_LOGICAL_POINTER:
-
- *TablePtr = Address->Pointer.Logical;
- *Size = 0;
- break;
-
- default:
- return (AE_BAD_PARAMETER);
+ Status = AE_OK;
}
+#endif
}
- else
- {
- /* 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:
+ /* Return values */
- Status = AE_BAD_PARAMETER;
- break;
+ TableInfo->Pointer = FullTable;
+ TableInfo->Length = (ACPI_SIZE) Header->Length;
+ TableInfo->Allocation = Allocation;
+ TableInfo->BasePointer = FullTable;
- default:
- return (AE_BAD_PARAMETER);
- }
- }
+ 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 (Status);
+ return_ACPI_STATUS (Status);
}
/*******************************************************************************
*
- * FUNCTION: AcpiTbGetTableRsdt
+ * FUNCTION: AcpiTbGetTablePtr
*
- * PARAMETERS: NumberOfTables - Where the table count is placed
+ * PARAMETERS: TableType - one of the defined table types
+ * Instance - Which table of this type
+ * TablePtrLoc - pointer to location to place the pointer for
+ * return
*
* RETURN: Status
*
- * DESCRIPTION: Load and validate the RSDP (ptr) and RSDT (table)
+ * DESCRIPTION: This function is called to get the pointer to an ACPI table.
*
******************************************************************************/
ACPI_STATUS
-AcpiTbGetTableRsdt (
- UINT32 *NumberOfTables)
+AcpiTbGetTablePtr (
+ ACPI_TABLE_TYPE TableType,
+ UINT32 Instance,
+ ACPI_TABLE_HEADER **TablePtrLoc)
{
- ACPI_TABLE_DESC TableInfo;
- ACPI_STATUS Status;
- ACPI_POINTER Address;
-
+ ACPI_TABLE_DESC *TableDesc;
+ UINT32 i;
- ACPI_FUNCTION_TRACE ("TbGetTableRsdt");
+ ACPI_FUNCTION_TRACE ("TbGetTablePtr");
- /* Get the RSDT/XSDT from the RSDP */
- AcpiTbGetRsdtAddress (&Address);
- Status = AcpiTbGetTable (&Address, &TableInfo);
- if (ACPI_FAILURE (Status))
+ if (!AcpiGbl_DSDT)
{
- ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Could not get the R/XSDT, %s\n",
- AcpiFormatException (Status)));
- return_ACPI_STATUS (Status);
+ return_ACPI_STATUS (AE_NO_ACPI_TABLES);
}
- ACPI_DEBUG_PRINT ((ACPI_DB_INFO,
- "RSDP located at %p, RSDT physical=%8.8X%8.8X \n",
- AcpiGbl_RSDP,
- ACPI_HIDWORD (Address.Pointer.Value),
- ACPI_LODWORD (Address.Pointer.Value)));
-
- /* Check the RSDT or XSDT signature */
-
- Status = AcpiTbValidateRsdt (TableInfo.Pointer);
- if (ACPI_FAILURE (Status))
+ if (TableType > ACPI_TABLE_MAX)
{
- return_ACPI_STATUS (Status);
+ return_ACPI_STATUS (AE_BAD_PARAMETER);
}
/*
- * Valid RSDT signature, verify the checksum. If it fails, just
- * print a warning and ignore it.
+ * For all table types (Single/Multiple), the first
+ * instance is always in the list head.
*/
- Status = AcpiTbVerifyTableChecksum (TableInfo.Pointer);
-
- /* Convert and/or copy to an XSDT structure */
-
- Status = AcpiTbConvertToXsdt (&TableInfo, NumberOfTables);
- if (ACPI_FAILURE (Status))
+ if (Instance == 1)
{
- return_ACPI_STATUS (Status);
+ /*
+ * Just pluck the pointer out of the global table!
+ * Will be null if no table is present
+ */
+ *TablePtrLoc = AcpiGbl_AcpiTables[TableType].Pointer;
+ return_ACPI_STATUS (AE_OK);
}
- /* Save the table pointers and allocation info */
+ /*
+ * Check for instance out of range
+ */
+ if (Instance > AcpiGbl_AcpiTables[TableType].Count)
+ {
+ return_ACPI_STATUS (AE_NOT_EXIST);
+ }
- Status = AcpiTbInitTableDescriptor (ACPI_TABLE_XSDT, &TableInfo);
- if (ACPI_FAILURE (Status))
+ /* Walk the list to get the desired table
+ * Since the if (Instance == 1) check above checked for the
+ * first table, setting TableDesc equal to the .Next member
+ * is actually pointing to the second table. Therefore, we
+ * need to walk from the 2nd table until we reach the Instance
+ * that the user is looking for and return its table pointer.
+ */
+ TableDesc = AcpiGbl_AcpiTables[TableType].Next;
+ for (i = 2; i < Instance; i++)
{
- return_ACPI_STATUS (Status);
+ TableDesc = TableDesc->Next;
}
- AcpiGbl_XSDT = (XSDT_DESCRIPTOR *) TableInfo.Pointer;
+ /* We are now pointing to the requested table's descriptor */
- ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "XSDT located at %p\n", AcpiGbl_XSDT));
- return_ACPI_STATUS (Status);
-}
+ *TablePtrLoc = TableDesc->Pointer;
+ return_ACPI_STATUS (AE_OK);
+}
diff --git a/sys/contrib/dev/acpica/tbgetall.c b/sys/contrib/dev/acpica/tbgetall.c
new file mode 100644
index 000000000000..dbd41c5ad2b3
--- /dev/null
+++ b/sys/contrib/dev/acpica/tbgetall.c
@@ -0,0 +1,397 @@
+/******************************************************************************
+ *
+ * Module Name: tbgetall - Get all required ACPI tables
+ * $Revision: 1 $
+ *
+ *****************************************************************************/
+
+/******************************************************************************
+ *
+ * 1. Copyright Notice
+ *
+ * Some or all of this work - Copyright (c) 1999 - 2002, Intel Corp.
+ * All rights reserved.
+ *
+ * 2. License
+ *
+ * 2.1. This is your license from Intel Corp. under its intellectual property
+ * rights. You may have additional license terms from the party that provided
+ * you this software, covering your right to use that party's intellectual
+ * property rights.
+ *
+ * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a
+ * copy of the source code appearing in this file ("Covered Code") an
+ * irrevocable, perpetual, worldwide license under Intel's copyrights in the
+ * base code distributed originally by Intel ("Original Intel Code") to copy,
+ * make derivatives, distribute, use and display any portion of the Covered
+ * Code in any form, with the right to sublicense such rights; and
+ *
+ * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent
+ * license (with the right to sublicense), under only those claims of Intel
+ * patents that are infringed by the Original Intel Code, to make, use, sell,
+ * offer to sell, and import the Covered Code and derivative works thereof
+ * solely to the minimum extent necessary to exercise the above copyright
+ * license, and in no event shall the patent license extend to any additions
+ * to or modifications of the Original Intel Code. No other license or right
+ * is granted directly or by implication, estoppel or otherwise;
+ *
+ * The above copyright and patent license is granted only if the following
+ * conditions are met:
+ *
+ * 3. Conditions
+ *
+ * 3.1. Redistribution of Source with Rights to Further Distribute Source.
+ * Redistribution of source code of any substantial portion of the Covered
+ * Code or modification with rights to further distribute source must include
+ * the above Copyright Notice, the above License, this list of Conditions,
+ * and the following Disclaimer and Export Compliance provision. In addition,
+ * Licensee must cause all Covered Code to which Licensee contributes to
+ * contain a file documenting the changes Licensee made to create that Covered
+ * Code and the date of any change. Licensee must include in that file the
+ * documentation of any changes made by any predecessor Licensee. Licensee
+ * must include a prominent statement that the modification is derived,
+ * directly or indirectly, from Original Intel Code.
+ *
+ * 3.2. Redistribution of Source with no Rights to Further Distribute Source.
+ * Redistribution of source code of any substantial portion of the Covered
+ * Code or modification without rights to further distribute source must
+ * include the following Disclaimer and Export Compliance provision in the
+ * documentation and/or other materials provided with distribution. In
+ * addition, Licensee may not authorize further sublicense of source of any
+ * portion of the Covered Code, and must include terms to the effect that the
+ * license from Licensee to its licensee is limited to the intellectual
+ * property embodied in the software Licensee provides to its licensee, and
+ * not to intellectual property embodied in modifications its licensee may
+ * make.
+ *
+ * 3.3. Redistribution of Executable. Redistribution in executable form of any
+ * substantial portion of the Covered Code or modification must reproduce the
+ * above Copyright Notice, and the following Disclaimer and Export Compliance
+ * provision in the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * 3.4. Intel retains all right, title, and interest in and to the Original
+ * Intel Code.
+ *
+ * 3.5. Neither the name Intel nor any other trademark owned or controlled by
+ * Intel shall be used in advertising or otherwise to promote the sale, use or
+ * other dealings in products derived from or relating to the Covered Code
+ * without prior written authorization from Intel.
+ *
+ * 4. Disclaimer and Export Compliance
+ *
+ * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED
+ * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE
+ * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE,
+ * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY
+ * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY
+ * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A
+ * PARTICULAR PURPOSE.
+ *
+ * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES
+ * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR
+ * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT,
+ * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY
+ * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL
+ * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS
+ * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY
+ * LIMITED REMEDY.
+ *
+ * 4.3. Licensee shall not export, either directly or indirectly, any of this
+ * software or system incorporating such software without first obtaining any
+ * required license or other approval from the U. S. Department of Commerce or
+ * any other agency or department of the United States Government. In the
+ * event Licensee exports any such software from the United States or
+ * re-exports any such software from a foreign destination, Licensee shall
+ * ensure that the distribution and export/re-export of the software is in
+ * compliance with all laws, regulations, orders, or other restrictions of the
+ * U.S. Export Administration Regulations. Licensee agrees that neither it nor
+ * any of its subsidiaries will export/re-export any technical data, process,
+ * software, or service, directly or indirectly, to any country for which the
+ * United States government or any agency thereof requires an export license,
+ * other governmental approval, or letter of assurance, without first obtaining
+ * such license, approval or letter.
+ *
+ *****************************************************************************/
+
+#define __TBGETALL_C__
+
+#include "acpi.h"
+#include "actables.h"
+
+
+#define _COMPONENT ACPI_TABLES
+ ACPI_MODULE_NAME ("tbgetall")
+
+
+
+/*******************************************************************************
+ *
+ * FUNCTION: AcpiTbGetPrimaryTable
+ *
+ * PARAMETERS: Address - Physical address of table to retrieve
+ * *TableInfo - Where the table info is returned
+ *
+ * RETURN: Status
+ *
+ * DESCRIPTION: Maps the physical address of table into a logical address
+ *
+ ******************************************************************************/
+
+ACPI_STATUS
+AcpiTbGetPrimaryTable (
+ ACPI_POINTER *Address,
+ ACPI_TABLE_DESC *TableInfo)
+{
+ ACPI_STATUS Status;
+ ACPI_TABLE_HEADER Header;
+
+
+ ACPI_FUNCTION_TRACE ("TbGetPrimaryTable");
+
+
+ /* Ignore a NULL address in the RSDT */
+
+ if (!Address->Pointer.Value)
+ {
+ return_ACPI_STATUS (AE_OK);
+ }
+
+ /*
+ * Get the header in order to get signature and table size
+ */
+ Status = AcpiTbGetTableHeader (Address, &Header);
+ if (ACPI_FAILURE (Status))
+ {
+ return_ACPI_STATUS (Status);
+ }
+
+ /* Clear the TableInfo */
+
+ ACPI_MEMSET (TableInfo, 0, sizeof (ACPI_TABLE_DESC));
+
+ /*
+ * Check the table signature and make sure it is recognized.
+ * Also checks the header checksum
+ */
+ TableInfo->Pointer = &Header;
+ Status = AcpiTbRecognizeTable (TableInfo, ACPI_TABLE_PRIMARY);
+ if (ACPI_FAILURE (Status))
+ {
+ return_ACPI_STATUS (Status);
+ }
+
+ /* Get the entire table */
+
+ Status = AcpiTbGetTableBody (Address, &Header, TableInfo);
+ if (ACPI_FAILURE (Status))
+ {
+ return_ACPI_STATUS (Status);
+ }
+
+ /* Install the table */
+
+ Status = AcpiTbInstallTable (TableInfo);
+ return_ACPI_STATUS (Status);
+}
+
+
+/*******************************************************************************
+ *
+ * FUNCTION: AcpiTbGetSecondaryTable
+ *
+ * PARAMETERS: Address - Physical address of table to retrieve
+ * *TableInfo - Where the table info is returned
+ *
+ * RETURN: Status
+ *
+ * DESCRIPTION: Maps the physical address of table into a logical address
+ *
+ ******************************************************************************/
+
+ACPI_STATUS
+AcpiTbGetSecondaryTable (
+ ACPI_POINTER *Address,
+ ACPI_STRING Signature,
+ ACPI_TABLE_DESC *TableInfo)
+{
+ ACPI_STATUS Status;
+ ACPI_TABLE_HEADER Header;
+
+
+ ACPI_FUNCTION_TRACE_STR ("TbGetSecondaryTable", Signature);
+
+
+ /* Get the header in order to match the signature */
+
+ Status = AcpiTbGetTableHeader (Address, &Header);
+ if (ACPI_FAILURE (Status))
+ {
+ return_ACPI_STATUS (Status);
+ }
+
+ /* Signature must match request */
+
+ if (ACPI_STRNCMP (Header.Signature, Signature, ACPI_NAME_SIZE))
+ {
+ ACPI_REPORT_ERROR (("Incorrect table signature - wanted [%s] found [%4.4s]\n",
+ Signature, Header.Signature));
+ return_ACPI_STATUS (AE_BAD_SIGNATURE);
+ }
+
+ /*
+ * Check the table signature and make sure it is recognized.
+ * Also checks the header checksum
+ */
+ TableInfo->Pointer = &Header;
+ Status = AcpiTbRecognizeTable (TableInfo, ACPI_TABLE_SECONDARY);
+ if (ACPI_FAILURE (Status))
+ {
+ return_ACPI_STATUS (Status);
+ }
+
+ /* Get the entire table */
+
+ Status = AcpiTbGetTableBody (Address, &Header, TableInfo);
+ if (ACPI_FAILURE (Status))
+ {
+ return_ACPI_STATUS (Status);
+ }
+
+ /* Install the table */
+
+ Status = AcpiTbInstallTable (TableInfo);
+ return_ACPI_STATUS (Status);
+}
+
+
+/*******************************************************************************
+ *
+ * FUNCTION: AcpiTbGetRequiredTables
+ *
+ * PARAMETERS: None
+ *
+ * RETURN: Status
+ *
+ * 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
+AcpiTbGetRequiredTables (
+ void)
+{
+ ACPI_STATUS Status = AE_OK;
+ UINT32 i;
+ ACPI_TABLE_DESC TableInfo;
+ ACPI_POINTER Address;
+
+
+ ACPI_FUNCTION_TRACE ("TbGetRequiredTables");
+
+ ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "%d ACPI tables in RSDT\n",
+ AcpiGbl_RsdtTableCount));
+
+
+ Address.PointerType = AcpiGbl_TableFlags | ACPI_LOGICAL_ADDRESSING;
+
+ /*
+ * Loop through all table pointers found in RSDT.
+ * This will NOT include the FACS and DSDT - we must get
+ * them after the loop.
+ *
+ * The only tables we are interested in getting here is the FADT and
+ * any SSDTs.
+ */
+ for (i = 0; i < AcpiGbl_RsdtTableCount; i++)
+ {
+ /* Get the table addresss from the common internal XSDT */
+
+ Address.Pointer.Value = ACPI_GET_ADDRESS (AcpiGbl_XSDT->TableOffsetEntry[i]);
+
+ /*
+ * Get the tables needed by this subsystem (FADT and any SSDTs).
+ * NOTE: All other tables are completely ignored at this time.
+ */
+ AcpiTbGetPrimaryTable (&Address, &TableInfo);
+ }
+
+ /* We must have a FADT to continue */
+
+ if (!AcpiGbl_FADT)
+ {
+ ACPI_REPORT_ERROR (("No FADT present in RSDT/XSDT\n"));
+ return_ACPI_STATUS (AE_NO_ACPI_TABLES);
+ }
+
+ /*
+ * Convert the FADT to a common format. This allows earlier revisions of the
+ * table to coexist with newer versions, using common access code.
+ */
+ Status = AcpiTbConvertTableFadt ();
+ if (ACPI_FAILURE (Status))
+ {
+ ACPI_REPORT_ERROR (("Could not convert FADT to internal common format\n"));
+ return_ACPI_STATUS (Status);
+ }
+
+ /*
+ * Get the FACS (Pointed to by the FADT)
+ */
+ Address.Pointer.Value = ACPI_GET_ADDRESS (AcpiGbl_FADT->XFirmwareCtrl);
+
+ Status = AcpiTbGetSecondaryTable (&Address, FACS_SIG, &TableInfo);
+ if (ACPI_FAILURE (Status))
+ {
+ ACPI_REPORT_ERROR (("Could not get/install the FACS, %s\n",
+ AcpiFormatException (Status)));
+ return_ACPI_STATUS (Status);
+ }
+
+ /*
+ * Create the common FACS pointer table
+ * (Contains pointers to the original table)
+ */
+ Status = AcpiTbBuildCommonFacs (&TableInfo);
+ if (ACPI_FAILURE (Status))
+ {
+ return_ACPI_STATUS (Status);
+ }
+
+ /*
+ * Get/install the DSDT (Pointed to by the FADT)
+ */
+ Address.Pointer.Value = ACPI_GET_ADDRESS (AcpiGbl_FADT->XDsdt);
+
+ Status = AcpiTbGetSecondaryTable (&Address, DSDT_SIG, &TableInfo);
+ if (ACPI_FAILURE (Status))
+ {
+ ACPI_REPORT_ERROR (("Could not get/install the DSDT\n"));
+ return_ACPI_STATUS (Status);
+ }
+
+ /* Set Integer Width (32/64) based upon DSDT revision */
+
+ AcpiUtSetIntegerWidth (AcpiGbl_DSDT->Revision);
+
+ /* Dump the entire DSDT */
+
+ ACPI_DEBUG_PRINT ((ACPI_DB_TABLES,
+ "Hex dump of entire DSDT, size %d (0x%X), Integer width = %d\n",
+ AcpiGbl_DSDT->Length, AcpiGbl_DSDT->Length, AcpiGbl_IntegerBitWidth));
+ ACPI_DUMP_BUFFER ((UINT8 *) AcpiGbl_DSDT, AcpiGbl_DSDT->Length);
+
+ /* Always delete the RSDP mapping, we are done with it */
+
+ AcpiTbDeleteAcpiTable (ACPI_TABLE_RSDP);
+ return_ACPI_STATUS (Status);
+}
+
+
diff --git a/sys/contrib/dev/acpica/tbinstal.c b/sys/contrib/dev/acpica/tbinstal.c
index 24a09151ca3f..7286124a6cfe 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: 61 $
+ * $Revision: 62 $
*
*****************************************************************************/
@@ -142,7 +142,8 @@
ACPI_STATUS
AcpiTbMatchSignature (
NATIVE_CHAR *Signature,
- ACPI_TABLE_DESC *TableInfo)
+ ACPI_TABLE_DESC *TableInfo,
+ UINT8 SearchType)
{
NATIVE_UINT i;
@@ -155,6 +156,11 @@ AcpiTbMatchSignature (
*/
for (i = 0; i < NUM_ACPI_TABLES; i++)
{
+ if ((AcpiGbl_AcpiTableData[i].Flags & ACPI_TABLE_TYPE_MASK) != SearchType)
+ {
+ continue;
+ }
+
if (!ACPI_STRNCMP (Signature, AcpiGbl_AcpiTableData[i].Signature,
AcpiGbl_AcpiTableData[i].SigLength))
{
@@ -165,13 +171,18 @@ AcpiTbMatchSignature (
TableInfo->Type = (UINT8) i;
}
- ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "ACPI Signature match %4.4s\n",
+ ACPI_DEBUG_PRINT ((ACPI_DB_INFO,
+ "Table [%4.4s] matched and is a required ACPI table\n",
(char *) AcpiGbl_AcpiTableData[i].Signature));
return_ACPI_STATUS (AE_OK);
}
}
+ ACPI_DEBUG_PRINT ((ACPI_DB_INFO,
+ "Table [%4.4s] is not a required ACPI table - ignored\n",
+ (char *) Signature));
+
return_ACPI_STATUS (AE_TABLE_NOT_SUPPORTED);
}
@@ -180,7 +191,7 @@ AcpiTbMatchSignature (
*
* FUNCTION: AcpiTbInstallTable
*
- * PARAMETERS: TableInfo - Return value from AcpiTbGetTable
+ * PARAMETERS: TableInfo - Return value from AcpiTbGetTableBody
*
* RETURN: Status
*
@@ -199,27 +210,24 @@ AcpiTbInstallTable (
ACPI_FUNCTION_TRACE ("TbInstallTable");
- /*
- * Check the table signature and make sure it is recognized
- * Also checks the header checksum
- */
- Status = AcpiTbRecognizeTable (TableInfo);
- if (ACPI_FAILURE (Status))
- {
- return_ACPI_STATUS (Status);
- }
-
/* Lock tables while installing */
Status = AcpiUtAcquireMutex (ACPI_MTX_TABLES);
if (ACPI_FAILURE (Status))
{
+ ACPI_REPORT_ERROR (("Could not acquire table mutex for [%4.4s], %s\n",
+ TableInfo->Pointer->Signature, AcpiFormatException (Status)));
return_ACPI_STATUS (Status);
}
/* Install the table into the global data structure */
Status = AcpiTbInitTableDescriptor (TableInfo->Type, TableInfo);
+ if (ACPI_FAILURE (Status))
+ {
+ ACPI_REPORT_ERROR (("Could not install ACPI table [%s], %s\n",
+ TableInfo->Pointer->Signature, AcpiFormatException (Status)));
+ }
ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "%s located at %p\n",
AcpiGbl_AcpiTableData[TableInfo->Type].Name, TableInfo->Pointer));
@@ -233,7 +241,7 @@ AcpiTbInstallTable (
*
* FUNCTION: AcpiTbRecognizeTable
*
- * PARAMETERS: TableInfo - Return value from AcpiTbGetTable
+ * PARAMETERS: TableInfo - Return value from AcpiTbGetTableBody
*
* RETURN: Status
*
@@ -251,7 +259,8 @@ AcpiTbInstallTable (
ACPI_STATUS
AcpiTbRecognizeTable (
- ACPI_TABLE_DESC *TableInfo)
+ ACPI_TABLE_DESC *TableInfo,
+ UINT8 SearchType)
{
ACPI_TABLE_HEADER *TableHeader;
ACPI_STATUS Status;
@@ -276,7 +285,7 @@ AcpiTbRecognizeTable (
* 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);
+ Status = AcpiTbMatchSignature (TableHeader->Signature, TableInfo, SearchType);
if (ACPI_FAILURE (Status))
{
return_ACPI_STATUS (Status);
@@ -292,24 +301,6 @@ AcpiTbRecognizeTable (
TableInfo->Length = (ACPI_SIZE) 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_CHECKSUM_ABORT)
- if (ACPI_FAILURE (Status))
- {
- /* Ignore the error if configuration says so */
-
- Status = AE_OK;
- }
-#endif
- }
-
return_ACPI_STATUS (Status);
}
diff --git a/sys/contrib/dev/acpica/tbrsdt.c b/sys/contrib/dev/acpica/tbrsdt.c
new file mode 100644
index 000000000000..06204f4b90ba
--- /dev/null
+++ b/sys/contrib/dev/acpica/tbrsdt.c
@@ -0,0 +1,407 @@
+/******************************************************************************
+ *
+ * Module Name: tbrsdt - ACPI RSDT table utilities
+ * $Revision: 2 $
+ *
+ *****************************************************************************/
+
+/******************************************************************************
+ *
+ * 1. Copyright Notice
+ *
+ * Some or all of this work - Copyright (c) 1999 - 2002, Intel Corp.
+ * All rights reserved.
+ *
+ * 2. License
+ *
+ * 2.1. This is your license from Intel Corp. under its intellectual property
+ * rights. You may have additional license terms from the party that provided
+ * you this software, covering your right to use that party's intellectual
+ * property rights.
+ *
+ * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a
+ * copy of the source code appearing in this file ("Covered Code") an
+ * irrevocable, perpetual, worldwide license under Intel's copyrights in the
+ * base code distributed originally by Intel ("Original Intel Code") to copy,
+ * make derivatives, distribute, use and display any portion of the Covered
+ * Code in any form, with the right to sublicense such rights; and
+ *
+ * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent
+ * license (with the right to sublicense), under only those claims of Intel
+ * patents that are infringed by the Original Intel Code, to make, use, sell,
+ * offer to sell, and import the Covered Code and derivative works thereof
+ * solely to the minimum extent necessary to exercise the above copyright
+ * license, and in no event shall the patent license extend to any additions
+ * to or modifications of the Original Intel Code. No other license or right
+ * is granted directly or by implication, estoppel or otherwise;
+ *
+ * The above copyright and patent license is granted only if the following
+ * conditions are met:
+ *
+ * 3. Conditions
+ *
+ * 3.1. Redistribution of Source with Rights to Further Distribute Source.
+ * Redistribution of source code of any substantial portion of the Covered
+ * Code or modification with rights to further distribute source must include
+ * the above Copyright Notice, the above License, this list of Conditions,
+ * and the following Disclaimer and Export Compliance provision. In addition,
+ * Licensee must cause all Covered Code to which Licensee contributes to
+ * contain a file documenting the changes Licensee made to create that Covered
+ * Code and the date of any change. Licensee must include in that file the
+ * documentation of any changes made by any predecessor Licensee. Licensee
+ * must include a prominent statement that the modification is derived,
+ * directly or indirectly, from Original Intel Code.
+ *
+ * 3.2. Redistribution of Source with no Rights to Further Distribute Source.
+ * Redistribution of source code of any substantial portion of the Covered
+ * Code or modification without rights to further distribute source must
+ * include the following Disclaimer and Export Compliance provision in the
+ * documentation and/or other materials provided with distribution. In
+ * addition, Licensee may not authorize further sublicense of source of any
+ * portion of the Covered Code, and must include terms to the effect that the
+ * license from Licensee to its licensee is limited to the intellectual
+ * property embodied in the software Licensee provides to its licensee, and
+ * not to intellectual property embodied in modifications its licensee may
+ * make.
+ *
+ * 3.3. Redistribution of Executable. Redistribution in executable form of any
+ * substantial portion of the Covered Code or modification must reproduce the
+ * above Copyright Notice, and the following Disclaimer and Export Compliance
+ * provision in the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * 3.4. Intel retains all right, title, and interest in and to the Original
+ * Intel Code.
+ *
+ * 3.5. Neither the name Intel nor any other trademark owned or controlled by
+ * Intel shall be used in advertising or otherwise to promote the sale, use or
+ * other dealings in products derived from or relating to the Covered Code
+ * without prior written authorization from Intel.
+ *
+ * 4. Disclaimer and Export Compliance
+ *
+ * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED
+ * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE
+ * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE,
+ * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY
+ * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY
+ * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A
+ * PARTICULAR PURPOSE.
+ *
+ * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES
+ * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR
+ * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT,
+ * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY
+ * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL
+ * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS
+ * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY
+ * LIMITED REMEDY.
+ *
+ * 4.3. Licensee shall not export, either directly or indirectly, any of this
+ * software or system incorporating such software without first obtaining any
+ * required license or other approval from the U. S. Department of Commerce or
+ * any other agency or department of the United States Government. In the
+ * event Licensee exports any such software from the United States or
+ * re-exports any such software from a foreign destination, Licensee shall
+ * ensure that the distribution and export/re-export of the software is in
+ * compliance with all laws, regulations, orders, or other restrictions of the
+ * U.S. Export Administration Regulations. Licensee agrees that neither it nor
+ * any of its subsidiaries will export/re-export any technical data, process,
+ * software, or service, directly or indirectly, to any country for which the
+ * United States government or any agency thereof requires an export license,
+ * other governmental approval, or letter of assurance, without first obtaining
+ * such license, approval or letter.
+ *
+ *****************************************************************************/
+
+#define __TBRSDT_C__
+
+#include "acpi.h"
+#include "actables.h"
+
+
+#define _COMPONENT ACPI_TABLES
+ ACPI_MODULE_NAME ("tbrsdt")
+
+
+/*******************************************************************************
+ *
+ * FUNCTION: AcpiTbVerifyRsdp
+ *
+ * PARAMETERS: Address - RSDP (Pointer to RSDT)
+ *
+ * RETURN: Status
+ *
+ * DESCRIPTION: Load and validate the RSDP (ptr) and RSDT (table)
+ *
+ ******************************************************************************/
+
+ACPI_STATUS
+AcpiTbVerifyRsdp (
+ ACPI_POINTER *Address)
+{
+ ACPI_TABLE_DESC TableInfo;
+ ACPI_STATUS Status;
+ RSDP_DESCRIPTOR *Rsdp;
+
+
+ ACPI_FUNCTION_TRACE ("TbVerifyRsdp");
+
+
+ switch (Address->PointerType)
+ {
+ 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);
+ }
+
+ /*
+ * The signature and checksum must both be correct
+ */
+ if (ACPI_STRNCMP ((NATIVE_CHAR *) Rsdp, RSDP_SIG, sizeof (RSDP_SIG)-1) != 0)
+ {
+ /* Nope, BAD Signature */
+
+ Status = AE_BAD_SIGNATURE;
+ goto Cleanup;
+ }
+
+ /* Check the standard checksum */
+
+ if (AcpiTbChecksum (Rsdp, ACPI_RSDP_CHECKSUM_LENGTH) != 0)
+ {
+ Status = AE_BAD_CHECKSUM;
+ goto Cleanup;
+ }
+
+ /* Check extended checksum if table version >= 2 */
+
+ if (Rsdp->Revision >= 2)
+ {
+ if (AcpiTbChecksum (Rsdp, ACPI_RSDP_XCHECKSUM_LENGTH) != 0)
+ {
+ Status = AE_BAD_CHECKSUM;
+ goto Cleanup;
+ }
+ }
+
+ /* The RSDP supplied is OK */
+
+ TableInfo.Pointer = ACPI_CAST_PTR (ACPI_TABLE_HEADER, Rsdp);
+ TableInfo.Length = sizeof (RSDP_DESCRIPTOR);
+ TableInfo.Allocation = ACPI_MEM_MAPPED;
+ TableInfo.BasePointer = Rsdp;
+
+ /* Save the table pointers and allocation info */
+
+ Status = AcpiTbInitTableDescriptor (ACPI_TABLE_RSDP, &TableInfo);
+ if (ACPI_FAILURE (Status))
+ {
+ goto Cleanup;
+ }
+
+ /* Save the RSDP in a global for easy access */
+
+ AcpiGbl_RSDP = ACPI_CAST_PTR (RSDP_DESCRIPTOR, TableInfo.Pointer);
+ return_ACPI_STATUS (Status);
+
+
+ /* Error exit */
+Cleanup:
+
+ if (AcpiGbl_TableFlags & ACPI_PHYSICAL_POINTER)
+ {
+ AcpiOsUnmapMemory (Rsdp, sizeof (RSDP_DESCRIPTOR));
+ }
+ return_ACPI_STATUS (Status);
+}
+
+
+/*******************************************************************************
+ *
+ * FUNCTION: AcpiTbGetRsdtAddress
+ *
+ * PARAMETERS: None
+ *
+ * RETURN: RSDT physical address
+ *
+ * DESCRIPTION: Extract the address of the RSDT or XSDT, depending on the
+ * version of the RSDP
+ *
+ ******************************************************************************/
+
+void
+AcpiTbGetRsdtAddress (
+ ACPI_POINTER *OutAddress)
+{
+
+ ACPI_FUNCTION_ENTRY ();
+
+
+ OutAddress->PointerType = AcpiGbl_TableFlags | ACPI_LOGICAL_ADDRESSING;
+
+ /*
+ * 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)
+ {
+ OutAddress->Pointer.Value = AcpiGbl_RSDP->RsdtPhysicalAddress;
+ }
+ else
+ {
+ OutAddress->Pointer.Value = ACPI_GET_ADDRESS (AcpiGbl_RSDP->XsdtPhysicalAddress);
+ }
+}
+
+
+/*******************************************************************************
+ *
+ * FUNCTION: AcpiTbValidateRsdt
+ *
+ * PARAMETERS: TablePtr - Addressable pointer to the RSDT.
+ *
+ * RETURN: Status
+ *
+ * DESCRIPTION: Validate signature for the RSDT or XSDT
+ *
+ ******************************************************************************/
+
+ACPI_STATUS
+AcpiTbValidateRsdt (
+ ACPI_TABLE_HEADER *TablePtr)
+{
+ int NoMatch;
+
+
+ ACPI_FUNCTION_NAME ("TbValidateRsdt");
+
+
+ /*
+ * 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)
+ {
+ NoMatch = ACPI_STRNCMP ((char *) TablePtr, RSDT_SIG,
+ sizeof (RSDT_SIG) -1);
+ }
+ else
+ {
+ NoMatch = ACPI_STRNCMP ((char *) TablePtr, XSDT_SIG,
+ sizeof (XSDT_SIG) -1);
+ }
+
+ if (NoMatch)
+ {
+ /* Invalid RSDT or XSDT signature */
+
+ ACPI_REPORT_ERROR (("Invalid signature where RSDP indicates RSDT/XSDT should be located\n"));
+
+ ACPI_DUMP_BUFFER (AcpiGbl_RSDP, 20);
+
+ ACPI_DEBUG_PRINT_RAW ((ACPI_DB_ERROR,
+ "RSDT/XSDT signature at %X (%p) is invalid\n",
+ AcpiGbl_RSDP->RsdtPhysicalAddress,
+ (void *) (NATIVE_UINT) AcpiGbl_RSDP->RsdtPhysicalAddress));
+
+ return (AE_BAD_SIGNATURE);
+ }
+
+ return (AE_OK);
+}
+
+
+/*******************************************************************************
+ *
+ * FUNCTION: AcpiTbGetTableRsdt
+ *
+ * PARAMETERS: None
+ *
+ * RETURN: Status
+ *
+ * DESCRIPTION: Load and validate the RSDP (ptr) and RSDT (table)
+ *
+ ******************************************************************************/
+
+ACPI_STATUS
+AcpiTbGetTableRsdt (
+ void)
+{
+ ACPI_TABLE_DESC TableInfo;
+ ACPI_STATUS Status;
+ ACPI_POINTER Address;
+
+
+ ACPI_FUNCTION_TRACE ("TbGetTableRsdt");
+
+
+ /* Get the RSDT/XSDT via the RSDP */
+
+ AcpiTbGetRsdtAddress (&Address);
+
+ Status = AcpiTbGetTable (&Address, &TableInfo);
+ if (ACPI_FAILURE (Status))
+ {
+ ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Could not get the RSDT/XSDT, %s\n",
+ AcpiFormatException (Status)));
+ return_ACPI_STATUS (Status);
+ }
+
+ ACPI_DEBUG_PRINT ((ACPI_DB_INFO,
+ "RSDP located at %p, points to RSDT physical=%8.8X%8.8X \n",
+ AcpiGbl_RSDP,
+ ACPI_HIDWORD (Address.Pointer.Value),
+ ACPI_LODWORD (Address.Pointer.Value)));
+
+ /* Check the RSDT or XSDT signature */
+
+ Status = AcpiTbValidateRsdt (TableInfo.Pointer);
+ if (ACPI_FAILURE (Status))
+ {
+ return_ACPI_STATUS (Status);
+ }
+
+ /* Get the number of tables defined in the RSDT or XSDT */
+
+ AcpiGbl_RsdtTableCount = AcpiTbGetTableCount (AcpiGbl_RSDP, TableInfo.Pointer);
+
+ /* Convert and/or copy to an XSDT structure */
+
+ Status = AcpiTbConvertToXsdt (&TableInfo);
+ if (ACPI_FAILURE (Status))
+ {
+ return_ACPI_STATUS (Status);
+ }
+
+ /* Save the table pointers and allocation info */
+
+ Status = AcpiTbInitTableDescriptor (ACPI_TABLE_XSDT, &TableInfo);
+ if (ACPI_FAILURE (Status))
+ {
+ return_ACPI_STATUS (Status);
+ }
+
+ AcpiGbl_XSDT = (XSDT_DESCRIPTOR *) TableInfo.Pointer;
+
+ ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "XSDT located at %p\n", AcpiGbl_XSDT));
+ return_ACPI_STATUS (Status);
+}
+
+
diff --git a/sys/contrib/dev/acpica/tbutils.c b/sys/contrib/dev/acpica/tbutils.c
index 8ccbd2b3e341..72df10a5dcae 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: 54 $
+ * $Revision: 55 $
*
*****************************************************************************/
@@ -218,7 +218,8 @@ AcpiTbValidateTableHeader (
"Table signature at %p [%p] has invalid characters\n",
TableHeader, &Signature));
- ACPI_REPORT_WARNING (("Invalid table signature found: [%4.4s]\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);
}
@@ -231,7 +232,8 @@ AcpiTbValidateTableHeader (
"Invalid length in table header %p name %4.4s\n",
TableHeader, (char *) &Signature));
- ACPI_REPORT_WARNING (("Invalid table header length (0x%X) found\n", TableHeader->Length));
+ ACPI_REPORT_WARNING (("Invalid table header length (0x%X) found\n",
+ TableHeader->Length));
ACPI_DUMP_BUFFER (TableHeader, sizeof (ACPI_TABLE_HEADER));
return (AE_BAD_HEADER);
}
@@ -242,95 +244,6 @@ AcpiTbValidateTableHeader (
/*******************************************************************************
*
- * FUNCTION: AcpiTbMapAcpiTable
- *
- * PARAMETERS: PhysicalAddress - Physical address of table to map
- * *Size - Size of the table. If zero, the size
- * from the table header is used.
- * Actual size is returned here.
- * **LogicalAddress - Logical address of mapped table
- *
- * RETURN: Logical address of the mapped table.
- *
- * DESCRIPTION: Maps the physical address of table into a logical address
- *
- ******************************************************************************/
-
-ACPI_STATUS
-AcpiTbMapAcpiTable (
- ACPI_PHYSICAL_ADDRESS PhysicalAddress,
- ACPI_SIZE *Size,
- ACPI_TABLE_HEADER **LogicalAddress)
-{
- ACPI_TABLE_HEADER *Table;
- ACPI_SIZE TableSize = *Size;
- ACPI_STATUS Status = AE_OK;
-
-
- ACPI_FUNCTION_NAME ("TbMapAcpiTable");
-
-
- /* If size is zero, look at the table header to get the actual size */
-
- if ((*Size) == 0)
- {
- /* Get the table header so we can extract the table length */
-
- Status = AcpiOsMapMemory (PhysicalAddress, sizeof (ACPI_TABLE_HEADER),
- (void **) &Table);
- if (ACPI_FAILURE (Status))
- {
- return (Status);
- }
-
- /* Extract the full table length before we delete the mapping */
-
- TableSize = (ACPI_SIZE) Table->Length;
-
-#if 0
-/* We don't want to validate the header here. */
- /*
- * Validate the header and delete the mapping.
- * We will create a mapping for the full table below.
- */
- Status = AcpiTbValidateTableHeader (Table);
-#endif
-
- /* Always unmap the memory for the header */
-
- AcpiOsUnmapMemory (Table, sizeof (ACPI_TABLE_HEADER));
-
-#if 0
- /* Exit if header invalid */
-
- if (ACPI_FAILURE (Status))
- {
- return (Status);
- }
-#endif
- }
-
- /* Map the physical memory for the correct length */
-
- Status = AcpiOsMapMemory (PhysicalAddress, TableSize,
- (void **) &Table);
- if (ACPI_FAILURE (Status))
- {
- return (Status);
- }
-
- ACPI_DEBUG_PRINT ((ACPI_DB_INFO,
- "Mapped memory for ACPI table, length=%d(%X) at %p\n",
- TableSize, TableSize, Table));
-
- *Size = TableSize;
- *LogicalAddress = Table;
- return (Status);
-}
-
-
-/*******************************************************************************
- *
* FUNCTION: AcpiTbVerifyTableChecksum
*
* PARAMETERS: *TableHeader - ACPI table to verify
diff --git a/sys/contrib/dev/acpica/tbxface.c b/sys/contrib/dev/acpica/tbxface.c
index d040a9403bf0..374e12c9515b 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: 57 $
+ * $Revision: 58 $
*
*****************************************************************************/
@@ -144,7 +144,6 @@ AcpiLoadTables (void)
{
ACPI_POINTER RsdpAddress;
ACPI_STATUS Status;
- UINT32 NumberOfTables = 0;
ACPI_FUNCTION_TRACE ("AcpiLoadTables");
@@ -175,7 +174,7 @@ AcpiLoadTables (void)
/* Get the RSDT via the RSDP */
- Status = AcpiTbGetTableRsdt (&NumberOfTables);
+ Status = AcpiTbGetTableRsdt ();
if (ACPI_FAILURE (Status))
{
ACPI_REPORT_ERROR (("AcpiLoadTables: Could not load RSDT: %s\n",
@@ -183,9 +182,9 @@ AcpiLoadTables (void)
goto ErrorExit;
}
- /* Now get the rest of the tables */
+ /* Now get the tables needed by this subsystem (FADT, DSDT, etc.) */
- Status = AcpiTbGetAllTables (NumberOfTables);
+ Status = AcpiTbGetRequiredTables ();
if (ACPI_FAILURE (Status))
{
ACPI_REPORT_ERROR (("AcpiLoadTables: Error getting required tables (DSDT/FADT/FACS): %s\n",
@@ -252,10 +251,10 @@ AcpiLoadTable (
/* Copy the table to a local buffer */
- Address.PointerType = ACPI_LOGICAL_POINTER;
+ Address.PointerType = ACPI_LOGICAL_POINTER | ACPI_LOGICAL_ADDRESSING;
Address.Pointer.Logical = TablePtr;
- Status = AcpiTbGetTable (&Address, &TableInfo);
+ Status = AcpiTbGetTableBody (&Address, TablePtr, &TableInfo);
if (ACPI_FAILURE (Status))
{
return_ACPI_STATUS (Status);
@@ -266,7 +265,7 @@ AcpiLoadTable (
Status = AcpiTbInstallTable (&TableInfo);
if (ACPI_FAILURE (Status))
{
- /* Free table allocated by AcpiTbGetTable */
+ /* Free table allocated by AcpiTbGetTableBody */
AcpiTbDeleteSingleTable (&TableInfo);
return_ACPI_STATUS (Status);
diff --git a/sys/contrib/dev/acpica/tbxfroot.c b/sys/contrib/dev/acpica/tbxfroot.c
index 1234c222aecc..aac15037bfeb 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: 63 $
+ * $Revision: 64 $
*
*****************************************************************************/
@@ -155,9 +155,9 @@ AcpiTbFindTable (
/* Validate string lengths */
- if ((ACPI_STRLEN (Signature) > 4) ||
- (ACPI_STRLEN (OemId) > 6) ||
- (ACPI_STRLEN (OemTableId) > 8))
+ if ((ACPI_STRLEN (Signature) > ACPI_NAME_SIZE) ||
+ (ACPI_STRLEN (OemId) > sizeof (Table->OemId)) ||
+ (ACPI_STRLEN (OemTableId) > sizeof (Table->OemTableId)))
{
return_ACPI_STATUS (AE_AML_STRING_LIMIT);
}
@@ -191,7 +191,7 @@ AcpiTbFindTable (
* PARAMETERS: Signature - Any ACPI table signature
* Instance - the non zero instance of the table, allows
* support for multiple tables of the same type
- * Flags - 0: Physical/Virtual support
+ * Flags - Physical/Virtual support
* RetBuffer - pointer to a structure containing a buffer to
* receive the table
*
@@ -215,11 +215,10 @@ AcpiGetFirmwareTable (
{
ACPI_POINTER RsdpAddress;
ACPI_POINTER Address;
- ACPI_TABLE_HEADER *RsdtPtr = NULL;
- ACPI_TABLE_HEADER *TablePtr;
ACPI_STATUS Status;
- ACPI_SIZE RsdtSize = 0;
- ACPI_SIZE TableSize;
+ ACPI_TABLE_HEADER Header;
+ ACPI_TABLE_DESC TableInfo;
+ ACPI_TABLE_DESC RsdtInfo;
UINT32 TableCount;
UINT32 i;
UINT32 j;
@@ -243,6 +242,8 @@ AcpiGetFirmwareTable (
return_ACPI_STATUS (AE_BAD_PARAMETER);
}
+ RsdtInfo.Pointer = NULL;
+
if (!AcpiGbl_RSDP)
{
/* Get the RSDP */
@@ -277,16 +278,14 @@ AcpiGetFirmwareTable (
{
/* Nope, BAD Signature */
- Status = AE_BAD_SIGNATURE;
- goto Cleanup;
+ return_ACPI_STATUS (AE_BAD_SIGNATURE);
}
if (AcpiTbChecksum (AcpiGbl_RSDP, ACPI_RSDP_CHECKSUM_LENGTH) != 0)
{
/* Nope, BAD Checksum */
- Status = AE_BAD_CHECKSUM;
- goto Cleanup;
+ return_ACPI_STATUS (AE_BAD_CHECKSUM);
}
}
@@ -300,13 +299,17 @@ AcpiGetFirmwareTable (
ACPI_HIDWORD (Address.Pointer.Value),
ACPI_LODWORD (Address.Pointer.Value)));
- Status = AcpiTbGetTablePointer (&Address, Flags, &RsdtSize, &RsdtPtr);
+ /* Insert ProcessorMode flags */
+
+ Address.PointerType |= Flags;
+
+ Status = AcpiTbGetTable (&Address, &RsdtInfo);
if (ACPI_FAILURE (Status))
{
return_ACPI_STATUS (Status);
}
- Status = AcpiTbValidateRsdt (RsdtPtr);
+ Status = AcpiTbValidateRsdt (RsdtInfo.Pointer);
if (ACPI_FAILURE (Status))
{
goto Cleanup;
@@ -314,8 +317,9 @@ AcpiGetFirmwareTable (
/* Get the number of table pointers within the RSDT */
- TableCount = AcpiTbGetTableCount (AcpiGbl_RSDP, RsdtPtr);
+ TableCount = AcpiTbGetTableCount (AcpiGbl_RSDP, RsdtInfo.Pointer);
+ Address.PointerType = AcpiGbl_TableFlags | Flags;
/*
* Search the RSDT/XSDT for the correct instance of the
@@ -323,22 +327,21 @@ AcpiGetFirmwareTable (
*/
for (i = 0, j = 0; i < TableCount; i++)
{
- /* Get the next table pointer */
+ /* Get the next table pointer, handle RSDT vs. XSDT */
- Address.PointerType = AcpiGbl_TableFlags;
if (AcpiGbl_RSDP->Revision < 2)
{
- Address.Pointer.Value = ((RSDT_DESCRIPTOR *) RsdtPtr)->TableOffsetEntry[i];
+ Address.Pointer.Value = ((RSDT_DESCRIPTOR *) RsdtInfo.Pointer)->TableOffsetEntry[i];
}
else
{
Address.Pointer.Value = ACPI_GET_ADDRESS (
- ((XSDT_DESCRIPTOR *) RsdtPtr)->TableOffsetEntry[i]);
+ ((XSDT_DESCRIPTOR *) RsdtInfo.Pointer)->TableOffsetEntry[i]);
}
- /* Get addressibility if necessary */
+ /* Get the table header */
- Status = AcpiTbGetTablePointer (&Address, Flags, &TableSize, &TablePtr);
+ Status = AcpiTbGetTableHeader (&Address, &Header);
if (ACPI_FAILURE (Status))
{
goto Cleanup;
@@ -346,27 +349,25 @@ AcpiGetFirmwareTable (
/* Compare table signatures and table instance */
- if (!ACPI_STRNCMP ((char *) TablePtr, Signature, ACPI_STRLEN (Signature)))
+ if (!ACPI_STRNCMP (Header.Signature, Signature, ACPI_NAME_SIZE))
{
/* An instance of the table was found */
j++;
if (j >= Instance)
{
- /* Found the correct instance */
+ /* Found the correct instance, get the entire table */
+
+ Status = AcpiTbGetTableBody (&Address, &Header, &TableInfo);
+ if (ACPI_FAILURE (Status))
+ {
+ goto Cleanup;
+ }
- *TablePointer = TablePtr;
+ *TablePointer = TableInfo.Pointer;
goto Cleanup;
}
}
-
- /* Delete table mapping if using virtual addressing */
-
- if ((TableSize) &&
- ((Flags & ACPI_MEMORY_MODE) == ACPI_LOGICAL_ADDRESSING))
- {
- AcpiOsUnmapMemory (TablePtr, TableSize);
- }
}
/* Did not find the table */
@@ -375,10 +376,7 @@ AcpiGetFirmwareTable (
Cleanup:
- if (RsdtSize)
- {
- AcpiOsUnmapMemory (RsdtPtr, RsdtSize);
- }
+ AcpiOsUnmapMemory (RsdtInfo.Pointer, (ACPI_SIZE) RsdtInfo.Pointer->Length);
return_ACPI_STATUS (Status);
}
diff --git a/sys/contrib/dev/acpica/utcopy.c b/sys/contrib/dev/acpica/utcopy.c
index 3b67bfb2f201..172504e402b1 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: 101 $
+ * $Revision: 103 $
*
*****************************************************************************/
@@ -383,21 +383,23 @@ AcpiUtCopyIpackageToEpackage (
/*
* Free space begins right after the first package
*/
- Info.Length = 0;
+ Info.Length = ACPI_ROUND_UP_TO_NATIVE_WORD (sizeof (ACPI_OBJECT));
+ Info.FreeSpace = Buffer + ACPI_ROUND_UP_TO_NATIVE_WORD (sizeof (ACPI_OBJECT));
Info.ObjectSpace = 0;
Info.NumPackages = 1;
- Info.FreeSpace = Buffer + ACPI_ROUND_UP_TO_NATIVE_WORD (sizeof (ACPI_OBJECT));
- ExternalObject->Type = ACPI_GET_OBJECT_TYPE (InternalObject);
- ExternalObject->Package.Count = InternalObject->Package.Count;
- ExternalObject->Package.Elements = ACPI_CAST_PTR (ACPI_OBJECT, Info.FreeSpace);
+ ExternalObject->Type = ACPI_GET_OBJECT_TYPE (InternalObject);
+ ExternalObject->Package.Count = InternalObject->Package.Count;
+ ExternalObject->Package.Elements = ACPI_CAST_PTR (ACPI_OBJECT, Info.FreeSpace);
/*
- * Build an array of ACPI_OBJECTS in the buffer
+ * Leave room for an array of ACPI_OBJECTS in the buffer
* and move the free space past it
*/
+ Info.Length += (ACPI_SIZE) ExternalObject->Package.Count *
+ ACPI_ROUND_UP_TO_NATIVE_WORD (sizeof (ACPI_OBJECT));
Info.FreeSpace += ExternalObject->Package.Count *
- ACPI_ROUND_UP_TO_NATIVE_WORD (sizeof (ACPI_OBJECT));
+ ACPI_ROUND_UP_TO_NATIVE_WORD (sizeof (ACPI_OBJECT));
Status = AcpiUtWalkPackageTree (InternalObject, ExternalObject,
AcpiUtCopyIelementToEelement, &Info);
@@ -621,7 +623,6 @@ AcpiUtCopyEpackageToIpackage (
ExternalObject->Package.Count = InternalObject->Package.Count;
ExternalObject->Package.Elements = (ACPI_OBJECT *)FreeSpace;
-
/*
* Build an array of ACPI_OBJECTS in the buffer
* and move the free space past it
diff --git a/sys/contrib/dev/acpica/utglobal.c b/sys/contrib/dev/acpica/utglobal.c
index 735469e32f7c..ab72e4b2a8f5 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: 162 $
+ * $Revision: 165 $
*
*****************************************************************************/
@@ -119,6 +119,7 @@
#include "acpi.h"
#include "acnamesp.h"
+#include "amlcode.h"
#define _COMPONENT ACPI_UTILITIES
ACPI_MODULE_NAME ("utglobal")
@@ -386,15 +387,15 @@ ACPI_TABLE_DESC AcpiGbl_AcpiTables[NUM_ACPI_TABLES];
ACPI_TABLE_SUPPORT AcpiGbl_AcpiTableData[NUM_ACPI_TABLES] =
{
- /*********** Name, Signature, Global typed pointer Signature size, How many allowed?, Contains valid AML? */
-
- /* RSDP 0 */ {RSDP_NAME, RSDP_SIG, NULL, sizeof (RSDP_SIG)-1, ACPI_TABLE_SINGLE},
- /* DSDT 1 */ {DSDT_SIG, DSDT_SIG, (void **) &AcpiGbl_DSDT, sizeof (DSDT_SIG)-1, ACPI_TABLE_SINGLE | ACPI_TABLE_EXECUTABLE},
- /* FADT 2 */ {FADT_SIG, FADT_SIG, (void **) &AcpiGbl_FADT, sizeof (FADT_SIG)-1, ACPI_TABLE_SINGLE},
- /* FACS 3 */ {FACS_SIG, FACS_SIG, (void **) &AcpiGbl_FACS, sizeof (FACS_SIG)-1, ACPI_TABLE_SINGLE},
- /* PSDT 4 */ {PSDT_SIG, PSDT_SIG, NULL, sizeof (PSDT_SIG)-1, ACPI_TABLE_MULTIPLE | ACPI_TABLE_EXECUTABLE},
- /* SSDT 5 */ {SSDT_SIG, SSDT_SIG, NULL, sizeof (SSDT_SIG)-1, ACPI_TABLE_MULTIPLE | ACPI_TABLE_EXECUTABLE},
- /* XSDT 6 */ {XSDT_SIG, XSDT_SIG, NULL, sizeof (RSDT_SIG)-1, ACPI_TABLE_SINGLE},
+ /*********** Name, Signature, Global typed pointer Signature size, Type How many allowed?, Contains valid AML? */
+
+ /* RSDP 0 */ {RSDP_NAME, RSDP_SIG, NULL, sizeof (RSDP_SIG)-1, ACPI_TABLE_ROOT | ACPI_TABLE_SINGLE},
+ /* DSDT 1 */ {DSDT_SIG, DSDT_SIG, (void **) &AcpiGbl_DSDT, sizeof (DSDT_SIG)-1, ACPI_TABLE_SECONDARY| ACPI_TABLE_SINGLE | ACPI_TABLE_EXECUTABLE},
+ /* FADT 2 */ {FADT_SIG, FADT_SIG, (void **) &AcpiGbl_FADT, sizeof (FADT_SIG)-1, ACPI_TABLE_PRIMARY | ACPI_TABLE_SINGLE},
+ /* FACS 3 */ {FACS_SIG, FACS_SIG, (void **) &AcpiGbl_FACS, sizeof (FACS_SIG)-1, ACPI_TABLE_SECONDARY| ACPI_TABLE_SINGLE},
+ /* PSDT 4 */ {PSDT_SIG, PSDT_SIG, NULL, sizeof (PSDT_SIG)-1, ACPI_TABLE_PRIMARY | ACPI_TABLE_MULTIPLE | ACPI_TABLE_EXECUTABLE},
+ /* SSDT 5 */ {SSDT_SIG, SSDT_SIG, NULL, sizeof (SSDT_SIG)-1, ACPI_TABLE_PRIMARY | ACPI_TABLE_MULTIPLE | ACPI_TABLE_EXECUTABLE},
+ /* XSDT 6 */ {XSDT_SIG, XSDT_SIG, NULL, sizeof (RSDT_SIG)-1, ACPI_TABLE_ROOT | ACPI_TABLE_SINGLE},
};
@@ -457,15 +458,15 @@ ACPI_FIXED_EVENT_INFO AcpiGbl_FixedEventInfo[ACPI_NUM_FIXED_EVENTS] =
/* Region type decoding */
-static const NATIVE_CHAR *AcpiGbl_RegionTypes[ACPI_NUM_PREDEFINED_REGIONS] =
+const NATIVE_CHAR *AcpiGbl_RegionTypes[ACPI_NUM_PREDEFINED_REGIONS] =
{
"SystemMemory",
"SystemIO",
- "PCIConfig",
+ "PCI_Config",
"EmbeddedControl",
"SMBus",
"CMOS",
- "PCIBarTarget",
+ "PCIBARTarget",
"DataTable",
};
@@ -527,40 +528,6 @@ AcpiUtGetEventName (
}
-#if defined(ACPI_DEBUG) || defined(ENABLE_DEBUGGER)
-
-/*
- * Strings and procedures used for debug only
- *
- */
-
-
-/*****************************************************************************
- *
- * FUNCTION: AcpiUtGetMutexName
- *
- * PARAMETERS: None.
- *
- * RETURN: Status
- *
- * DESCRIPTION: Translate a mutex ID into a name string (Debug only)
- *
- ****************************************************************************/
-
-NATIVE_CHAR *
-AcpiUtGetMutexName (
- UINT32 MutexId)
-{
-
- if (MutexId > MAX_MTX)
- {
- return ("Invalid Mutex ID");
- }
-
- return (AcpiGbl_MutexNames[MutexId]);
-}
-
-
/*****************************************************************************
*
* FUNCTION: AcpiUtGetTypeName
@@ -655,54 +622,39 @@ AcpiUtGetObjectTypeName (
}
-/* Various strings for future use */
-
-#if 0
-#include "amlcode.h"
-
-/* Data used in keeping track of fields */
-
-static const NATIVE_CHAR *AcpiGbl_FENames[NUM_FIELD_NAMES] =
-{
- "skip",
- "?access?"
-}; /* FE = Field Element */
-
+#if defined(ACPI_DEBUG) || defined(ENABLE_DEBUGGER)
-static const NATIVE_CHAR *AcpiGbl_MatchOps[NUM_MATCH_OPS] =
-{
- "Error",
- "MTR",
- "MEQ",
- "MLE",
- "MLT",
- "MGE",
- "MGT"
-};
+/*
+ * Strings and procedures used for debug only
+ *
+ */
-/* Access type decoding */
+/*****************************************************************************
+ *
+ * FUNCTION: AcpiUtGetMutexName
+ *
+ * PARAMETERS: None.
+ *
+ * RETURN: Status
+ *
+ * DESCRIPTION: Translate a mutex ID into a name string (Debug only)
+ *
+ ****************************************************************************/
-static const NATIVE_CHAR *AcpiGbl_AccessTypes[NUM_ACCESS_TYPES] =
+NATIVE_CHAR *
+AcpiUtGetMutexName (
+ UINT32 MutexId)
{
- "AnyAcc",
- "ByteAcc",
- "WordAcc",
- "DWordAcc",
- "QWordAcc",
- "BufferAcc",
-};
+ if (MutexId > MAX_MTX)
+ {
+ return ("Invalid Mutex ID");
+ }
-/* Update rule decoding */
+ return (AcpiGbl_MutexNames[MutexId]);
+}
-static const NATIVE_CHAR *AcpiGbl_UpdateRules[NUM_UPDATE_RULES] =
-{
- "Preserve",
- "WriteAsOnes",
- "WriteAsZeros"
-};
-#endif /* Future use */
#endif
diff --git a/sys/contrib/dev/acpica/utxface.c b/sys/contrib/dev/acpica/utxface.c
index 376fce930d5d..c2f82a790900 100644
--- a/sys/contrib/dev/acpica/utxface.c
+++ b/sys/contrib/dev/acpica/utxface.c
@@ -1,7 +1,7 @@
/******************************************************************************
*
* Module Name: utxface - External interfaces for "global" ACPI functions
- * $Revision: 96 $
+ * $Revision: 97 $
*
*****************************************************************************/
@@ -298,6 +298,31 @@ AcpiEnableSubsystem (
}
}
+ return_ACPI_STATUS (Status);
+}
+
+/*******************************************************************************
+ *
+ * FUNCTION: AcpiInitializeObjects
+ *
+ * PARAMETERS: Flags - Init/enable Options
+ *
+ * RETURN: Status
+ *
+ * DESCRIPTION: Completes namespace initialization by initializing device
+ * objects and executing AML code for Regions, buffers, etc.
+ *
+ ******************************************************************************/
+
+ACPI_STATUS
+AcpiInitializeObjects (
+ UINT32 Flags)
+{
+ ACPI_STATUS Status = AE_OK;
+
+
+ ACPI_FUNCTION_TRACE ("AcpiInitializeObjects");
+
/*
* Initialize all device objects in the namespace
* This runs the _STA and _INI methods.