17c478bd9Sstevel@tonic-gate /****************************************************************************** 27c478bd9Sstevel@tonic-gate * 37c478bd9Sstevel@tonic-gate * Name: aclocal.h - Internal data types used across the ACPI subsystem 47c478bd9Sstevel@tonic-gate * 57c478bd9Sstevel@tonic-gate *****************************************************************************/ 67c478bd9Sstevel@tonic-gate 77c478bd9Sstevel@tonic-gate /****************************************************************************** 87c478bd9Sstevel@tonic-gate * 97c478bd9Sstevel@tonic-gate * 1. Copyright Notice 107c478bd9Sstevel@tonic-gate * 11aa2aa9a6SDana Myers * Some or all of this work - Copyright (c) 1999 - 2009, Intel Corp. 127c478bd9Sstevel@tonic-gate * All rights reserved. 137c478bd9Sstevel@tonic-gate * 147c478bd9Sstevel@tonic-gate * 2. License 157c478bd9Sstevel@tonic-gate * 167c478bd9Sstevel@tonic-gate * 2.1. This is your license from Intel Corp. under its intellectual property 177c478bd9Sstevel@tonic-gate * rights. You may have additional license terms from the party that provided 187c478bd9Sstevel@tonic-gate * you this software, covering your right to use that party's intellectual 197c478bd9Sstevel@tonic-gate * property rights. 207c478bd9Sstevel@tonic-gate * 217c478bd9Sstevel@tonic-gate * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a 227c478bd9Sstevel@tonic-gate * copy of the source code appearing in this file ("Covered Code") an 237c478bd9Sstevel@tonic-gate * irrevocable, perpetual, worldwide license under Intel's copyrights in the 247c478bd9Sstevel@tonic-gate * base code distributed originally by Intel ("Original Intel Code") to copy, 257c478bd9Sstevel@tonic-gate * make derivatives, distribute, use and display any portion of the Covered 267c478bd9Sstevel@tonic-gate * Code in any form, with the right to sublicense such rights; and 277c478bd9Sstevel@tonic-gate * 287c478bd9Sstevel@tonic-gate * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent 297c478bd9Sstevel@tonic-gate * license (with the right to sublicense), under only those claims of Intel 307c478bd9Sstevel@tonic-gate * patents that are infringed by the Original Intel Code, to make, use, sell, 317c478bd9Sstevel@tonic-gate * offer to sell, and import the Covered Code and derivative works thereof 327c478bd9Sstevel@tonic-gate * solely to the minimum extent necessary to exercise the above copyright 337c478bd9Sstevel@tonic-gate * license, and in no event shall the patent license extend to any additions 347c478bd9Sstevel@tonic-gate * to or modifications of the Original Intel Code. No other license or right 357c478bd9Sstevel@tonic-gate * is granted directly or by implication, estoppel or otherwise; 367c478bd9Sstevel@tonic-gate * 377c478bd9Sstevel@tonic-gate * The above copyright and patent license is granted only if the following 387c478bd9Sstevel@tonic-gate * conditions are met: 397c478bd9Sstevel@tonic-gate * 407c478bd9Sstevel@tonic-gate * 3. Conditions 417c478bd9Sstevel@tonic-gate * 427c478bd9Sstevel@tonic-gate * 3.1. Redistribution of Source with Rights to Further Distribute Source. 437c478bd9Sstevel@tonic-gate * Redistribution of source code of any substantial portion of the Covered 447c478bd9Sstevel@tonic-gate * Code or modification with rights to further distribute source must include 457c478bd9Sstevel@tonic-gate * the above Copyright Notice, the above License, this list of Conditions, 467c478bd9Sstevel@tonic-gate * and the following Disclaimer and Export Compliance provision. In addition, 477c478bd9Sstevel@tonic-gate * Licensee must cause all Covered Code to which Licensee contributes to 487c478bd9Sstevel@tonic-gate * contain a file documenting the changes Licensee made to create that Covered 497c478bd9Sstevel@tonic-gate * Code and the date of any change. Licensee must include in that file the 507c478bd9Sstevel@tonic-gate * documentation of any changes made by any predecessor Licensee. Licensee 517c478bd9Sstevel@tonic-gate * must include a prominent statement that the modification is derived, 527c478bd9Sstevel@tonic-gate * directly or indirectly, from Original Intel Code. 537c478bd9Sstevel@tonic-gate * 547c478bd9Sstevel@tonic-gate * 3.2. Redistribution of Source with no Rights to Further Distribute Source. 557c478bd9Sstevel@tonic-gate * Redistribution of source code of any substantial portion of the Covered 567c478bd9Sstevel@tonic-gate * Code or modification without rights to further distribute source must 577c478bd9Sstevel@tonic-gate * include the following Disclaimer and Export Compliance provision in the 587c478bd9Sstevel@tonic-gate * documentation and/or other materials provided with distribution. In 597c478bd9Sstevel@tonic-gate * addition, Licensee may not authorize further sublicense of source of any 607c478bd9Sstevel@tonic-gate * portion of the Covered Code, and must include terms to the effect that the 617c478bd9Sstevel@tonic-gate * license from Licensee to its licensee is limited to the intellectual 627c478bd9Sstevel@tonic-gate * property embodied in the software Licensee provides to its licensee, and 637c478bd9Sstevel@tonic-gate * not to intellectual property embodied in modifications its licensee may 647c478bd9Sstevel@tonic-gate * make. 657c478bd9Sstevel@tonic-gate * 667c478bd9Sstevel@tonic-gate * 3.3. Redistribution of Executable. Redistribution in executable form of any 677c478bd9Sstevel@tonic-gate * substantial portion of the Covered Code or modification must reproduce the 687c478bd9Sstevel@tonic-gate * above Copyright Notice, and the following Disclaimer and Export Compliance 697c478bd9Sstevel@tonic-gate * provision in the documentation and/or other materials provided with the 707c478bd9Sstevel@tonic-gate * distribution. 717c478bd9Sstevel@tonic-gate * 727c478bd9Sstevel@tonic-gate * 3.4. Intel retains all right, title, and interest in and to the Original 737c478bd9Sstevel@tonic-gate * Intel Code. 747c478bd9Sstevel@tonic-gate * 757c478bd9Sstevel@tonic-gate * 3.5. Neither the name Intel nor any other trademark owned or controlled by 767c478bd9Sstevel@tonic-gate * Intel shall be used in advertising or otherwise to promote the sale, use or 777c478bd9Sstevel@tonic-gate * other dealings in products derived from or relating to the Covered Code 787c478bd9Sstevel@tonic-gate * without prior written authorization from Intel. 797c478bd9Sstevel@tonic-gate * 807c478bd9Sstevel@tonic-gate * 4. Disclaimer and Export Compliance 817c478bd9Sstevel@tonic-gate * 827c478bd9Sstevel@tonic-gate * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED 837c478bd9Sstevel@tonic-gate * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE 847c478bd9Sstevel@tonic-gate * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, 857c478bd9Sstevel@tonic-gate * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY 867c478bd9Sstevel@tonic-gate * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY 877c478bd9Sstevel@tonic-gate * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A 887c478bd9Sstevel@tonic-gate * PARTICULAR PURPOSE. 897c478bd9Sstevel@tonic-gate * 907c478bd9Sstevel@tonic-gate * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES 917c478bd9Sstevel@tonic-gate * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR 927c478bd9Sstevel@tonic-gate * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, 937c478bd9Sstevel@tonic-gate * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY 947c478bd9Sstevel@tonic-gate * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL 957c478bd9Sstevel@tonic-gate * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS 967c478bd9Sstevel@tonic-gate * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY 977c478bd9Sstevel@tonic-gate * LIMITED REMEDY. 987c478bd9Sstevel@tonic-gate * 997c478bd9Sstevel@tonic-gate * 4.3. Licensee shall not export, either directly or indirectly, any of this 1007c478bd9Sstevel@tonic-gate * software or system incorporating such software without first obtaining any 1017c478bd9Sstevel@tonic-gate * required license or other approval from the U. S. Department of Commerce or 1027c478bd9Sstevel@tonic-gate * any other agency or department of the United States Government. In the 1037c478bd9Sstevel@tonic-gate * event Licensee exports any such software from the United States or 1047c478bd9Sstevel@tonic-gate * re-exports any such software from a foreign destination, Licensee shall 1057c478bd9Sstevel@tonic-gate * ensure that the distribution and export/re-export of the software is in 1067c478bd9Sstevel@tonic-gate * compliance with all laws, regulations, orders, or other restrictions of the 1077c478bd9Sstevel@tonic-gate * U.S. Export Administration Regulations. Licensee agrees that neither it nor 1087c478bd9Sstevel@tonic-gate * any of its subsidiaries will export/re-export any technical data, process, 1097c478bd9Sstevel@tonic-gate * software, or service, directly or indirectly, to any country for which the 1107c478bd9Sstevel@tonic-gate * United States government or any agency thereof requires an export license, 1117c478bd9Sstevel@tonic-gate * other governmental approval, or letter of assurance, without first obtaining 1127c478bd9Sstevel@tonic-gate * such license, approval or letter. 1137c478bd9Sstevel@tonic-gate * 1147c478bd9Sstevel@tonic-gate *****************************************************************************/ 1157c478bd9Sstevel@tonic-gate 1167c478bd9Sstevel@tonic-gate #ifndef __ACLOCAL_H__ 1177c478bd9Sstevel@tonic-gate #define __ACLOCAL_H__ 1187c478bd9Sstevel@tonic-gate 119aa2aa9a6SDana Myers 12027f7c583Smyers /* acpisrc:StructDefs -- for acpisrc conversion */ 1217c478bd9Sstevel@tonic-gate 12227f7c583Smyers #define ACPI_SERIALIZED 0xFF 1237c478bd9Sstevel@tonic-gate 1247c478bd9Sstevel@tonic-gate typedef UINT32 ACPI_MUTEX_HANDLE; 125db2bae30SDana Myers #define ACPI_GLOBAL_LOCK (ACPI_SEMAPHORE) (-1) 1267c478bd9Sstevel@tonic-gate 1277c478bd9Sstevel@tonic-gate /* Total number of aml opcodes defined */ 1287c478bd9Sstevel@tonic-gate 1297c478bd9Sstevel@tonic-gate #define AML_NUM_OPCODES 0x7F 1307c478bd9Sstevel@tonic-gate 1317c478bd9Sstevel@tonic-gate 132450d6964Smyers /* Forward declarations */ 133450d6964Smyers 134450d6964Smyers struct acpi_walk_state; 135450d6964Smyers struct acpi_obj_mutex; 136450d6964Smyers union acpi_parse_object; 137450d6964Smyers 138450d6964Smyers 1397c478bd9Sstevel@tonic-gate /***************************************************************************** 1407c478bd9Sstevel@tonic-gate * 1417c478bd9Sstevel@tonic-gate * Mutex typedefs and structs 1427c478bd9Sstevel@tonic-gate * 1437c478bd9Sstevel@tonic-gate ****************************************************************************/ 1447c478bd9Sstevel@tonic-gate 1457c478bd9Sstevel@tonic-gate 1467c478bd9Sstevel@tonic-gate /* 1477c478bd9Sstevel@tonic-gate * Predefined handles for the mutex objects used within the subsystem 1487c478bd9Sstevel@tonic-gate * All mutex objects are automatically created by AcpiUtMutexInitialize. 1497c478bd9Sstevel@tonic-gate * 15027f7c583Smyers * The acquire/release ordering protocol is implied via this list. Mutexes 1517c478bd9Sstevel@tonic-gate * with a lower value must be acquired before mutexes with a higher value. 1527c478bd9Sstevel@tonic-gate * 15327f7c583Smyers * NOTE: any changes here must be reflected in the AcpiGbl_MutexNames 15427f7c583Smyers * table below also! 1557c478bd9Sstevel@tonic-gate */ 15627f7c583Smyers #define ACPI_MTX_INTERPRETER 0 /* AML Interpreter, main lock */ 157db2bae30SDana Myers #define ACPI_MTX_NAMESPACE 1 /* ACPI Namespace */ 158db2bae30SDana Myers #define ACPI_MTX_TABLES 2 /* Data for ACPI tables */ 15927f7c583Smyers #define ACPI_MTX_EVENTS 3 /* Data for ACPI events */ 16027f7c583Smyers #define ACPI_MTX_CACHES 4 /* Internal caches, general purposes */ 16127f7c583Smyers #define ACPI_MTX_MEMORY 5 /* Debug memory tracking lists */ 16227f7c583Smyers #define ACPI_MTX_DEBUG_CMD_COMPLETE 6 /* AML debugger */ 16327f7c583Smyers #define ACPI_MTX_DEBUG_CMD_READY 7 /* AML debugger */ 16427f7c583Smyers 16527f7c583Smyers #define ACPI_MAX_MUTEX 7 16627f7c583Smyers #define ACPI_NUM_MUTEX ACPI_MAX_MUTEX+1 1677c478bd9Sstevel@tonic-gate 1687c478bd9Sstevel@tonic-gate #if defined(ACPI_DEBUG_OUTPUT) || defined(ACPI_DEBUGGER) 1697c478bd9Sstevel@tonic-gate #ifdef DEFINE_ACPI_GLOBALS 1707c478bd9Sstevel@tonic-gate 17127f7c583Smyers /* Debug names for the mutexes above */ 1727c478bd9Sstevel@tonic-gate 17327f7c583Smyers static char *AcpiGbl_MutexNames[ACPI_NUM_MUTEX] = 1747c478bd9Sstevel@tonic-gate { 1757c478bd9Sstevel@tonic-gate "ACPI_MTX_Interpreter", 1767c478bd9Sstevel@tonic-gate "ACPI_MTX_Namespace", 177db2bae30SDana Myers "ACPI_MTX_Tables", 1787c478bd9Sstevel@tonic-gate "ACPI_MTX_Events", 1797c478bd9Sstevel@tonic-gate "ACPI_MTX_Caches", 1807c478bd9Sstevel@tonic-gate "ACPI_MTX_Memory", 18127f7c583Smyers "ACPI_MTX_CommandComplete", 18227f7c583Smyers "ACPI_MTX_CommandReady" 1837c478bd9Sstevel@tonic-gate }; 1847c478bd9Sstevel@tonic-gate 1857c478bd9Sstevel@tonic-gate #endif 1867c478bd9Sstevel@tonic-gate #endif 1877c478bd9Sstevel@tonic-gate 188aa2aa9a6SDana Myers /* Lock structure for reader/writer interfaces */ 189aa2aa9a6SDana Myers 190aa2aa9a6SDana Myers typedef struct acpi_rw_lock 191aa2aa9a6SDana Myers { 192aa2aa9a6SDana Myers ACPI_MUTEX WriterMutex; 193aa2aa9a6SDana Myers ACPI_MUTEX ReaderMutex; 194aa2aa9a6SDana Myers UINT32 NumReaders; 195aa2aa9a6SDana Myers 196aa2aa9a6SDana Myers } ACPI_RW_LOCK; 197aa2aa9a6SDana Myers 1987c478bd9Sstevel@tonic-gate 19927f7c583Smyers /* 20027f7c583Smyers * Predefined handles for spinlocks used within the subsystem. 20127f7c583Smyers * These spinlocks are created by AcpiUtMutexInitialize 20227f7c583Smyers */ 20327f7c583Smyers #define ACPI_LOCK_GPES 0 20427f7c583Smyers #define ACPI_LOCK_HARDWARE 1 20527f7c583Smyers 20627f7c583Smyers #define ACPI_MAX_LOCK 1 20727f7c583Smyers #define ACPI_NUM_LOCK ACPI_MAX_LOCK+1 20827f7c583Smyers 20927f7c583Smyers 210450d6964Smyers /* This Thread ID means that the mutex is not in use (unlocked) */ 211450d6964Smyers 212aa2aa9a6SDana Myers #define ACPI_MUTEX_NOT_ACQUIRED (ACPI_THREAD_ID) -1 213450d6964Smyers 2147c478bd9Sstevel@tonic-gate /* Table for the global mutexes */ 2157c478bd9Sstevel@tonic-gate 2167c478bd9Sstevel@tonic-gate typedef struct acpi_mutex_info 2177c478bd9Sstevel@tonic-gate { 21827f7c583Smyers ACPI_MUTEX Mutex; 21927f7c583Smyers UINT32 UseCount; 22027f7c583Smyers ACPI_THREAD_ID ThreadId; 2217c478bd9Sstevel@tonic-gate 2227c478bd9Sstevel@tonic-gate } ACPI_MUTEX_INFO; 2237c478bd9Sstevel@tonic-gate 2247c478bd9Sstevel@tonic-gate 2257c478bd9Sstevel@tonic-gate /* Lock flag parameter for various interfaces */ 2267c478bd9Sstevel@tonic-gate 2277c478bd9Sstevel@tonic-gate #define ACPI_MTX_DO_NOT_LOCK 0 2287c478bd9Sstevel@tonic-gate #define ACPI_MTX_LOCK 1 2297c478bd9Sstevel@tonic-gate 2307c478bd9Sstevel@tonic-gate 2317c478bd9Sstevel@tonic-gate /* Field access granularities */ 2327c478bd9Sstevel@tonic-gate 2337c478bd9Sstevel@tonic-gate #define ACPI_FIELD_BYTE_GRANULARITY 1 2347c478bd9Sstevel@tonic-gate #define ACPI_FIELD_WORD_GRANULARITY 2 2357c478bd9Sstevel@tonic-gate #define ACPI_FIELD_DWORD_GRANULARITY 4 2367c478bd9Sstevel@tonic-gate #define ACPI_FIELD_QWORD_GRANULARITY 8 2377c478bd9Sstevel@tonic-gate 2387c478bd9Sstevel@tonic-gate 23927f7c583Smyers #define ACPI_ENTRY_NOT_FOUND NULL 24027f7c583Smyers 24127f7c583Smyers 2427c478bd9Sstevel@tonic-gate /***************************************************************************** 2437c478bd9Sstevel@tonic-gate * 2447c478bd9Sstevel@tonic-gate * Namespace typedefs and structs 2457c478bd9Sstevel@tonic-gate * 2467c478bd9Sstevel@tonic-gate ****************************************************************************/ 2477c478bd9Sstevel@tonic-gate 2487c478bd9Sstevel@tonic-gate /* Operational modes of the AML interpreter/scanner */ 2497c478bd9Sstevel@tonic-gate 2507c478bd9Sstevel@tonic-gate typedef enum 2517c478bd9Sstevel@tonic-gate { 25227f7c583Smyers ACPI_IMODE_LOAD_PASS1 = 0x01, 25327f7c583Smyers ACPI_IMODE_LOAD_PASS2 = 0x02, 254db2bae30SDana Myers ACPI_IMODE_EXECUTE = 0x03 2557c478bd9Sstevel@tonic-gate 2567c478bd9Sstevel@tonic-gate } ACPI_INTERPRETER_MODE; 2577c478bd9Sstevel@tonic-gate 25827f7c583Smyers 25927f7c583Smyers /* 26027f7c583Smyers * The Namespace Node describes a named object that appears in the AML. 26127f7c583Smyers * DescriptorType is used to differentiate between internal descriptors. 26227f7c583Smyers * 26327f7c583Smyers * The node is optimized for both 32-bit and 64-bit platforms: 26427f7c583Smyers * 20 bytes for the 32-bit case, 32 bytes for the 64-bit case. 26527f7c583Smyers * 26627f7c583Smyers * Note: The DescriptorType and Type fields must appear in the identical 26727f7c583Smyers * position in both the ACPI_NAMESPACE_NODE and ACPI_OPERAND_OBJECT 26827f7c583Smyers * structures. 26927f7c583Smyers */ 2707c478bd9Sstevel@tonic-gate typedef struct acpi_namespace_node 2717c478bd9Sstevel@tonic-gate { 27227f7c583Smyers union acpi_operand_object *Object; /* Interpreter object */ 27327f7c583Smyers UINT8 DescriptorType; /* Differentiate object descriptor types */ 27427f7c583Smyers UINT8 Type; /* ACPI Type associated with this name */ 27527f7c583Smyers UINT8 Flags; /* Miscellaneous flags */ 27627f7c583Smyers ACPI_OWNER_ID OwnerId; /* Node creator */ 27727f7c583Smyers ACPI_NAME_UNION Name; /* ACPI Name, always 4 chars per ACPI spec */ 27827f7c583Smyers struct acpi_namespace_node *Child; /* First child */ 27927f7c583Smyers struct acpi_namespace_node *Peer; /* Peer. Parent if ANOBJ_END_OF_PEER_LIST set */ 28027f7c583Smyers 28127f7c583Smyers /* 28227f7c583Smyers * The following fields are used by the ASL compiler and disassembler only 28327f7c583Smyers */ 28427f7c583Smyers #ifdef ACPI_LARGE_NAMESPACE_NODE 28527f7c583Smyers union acpi_parse_object *Op; 28627f7c583Smyers UINT32 Value; 28727f7c583Smyers UINT32 Length; 288450d6964Smyers #endif 289450d6964Smyers 2907c478bd9Sstevel@tonic-gate } ACPI_NAMESPACE_NODE; 2917c478bd9Sstevel@tonic-gate 2927c478bd9Sstevel@tonic-gate 29327f7c583Smyers /* Namespace Node flags */ 2947c478bd9Sstevel@tonic-gate 29527f7c583Smyers #define ANOBJ_END_OF_PEER_LIST 0x01 /* End-of-list, Peer field points to parent */ 296db2bae30SDana Myers #define ANOBJ_TEMPORARY 0x02 /* Node is create by a method and is temporary */ 29727f7c583Smyers #define ANOBJ_METHOD_ARG 0x04 /* Node is a method argument */ 29827f7c583Smyers #define ANOBJ_METHOD_LOCAL 0x08 /* Node is a method local */ 29927f7c583Smyers #define ANOBJ_SUBTREE_HAS_INI 0x10 /* Used to optimize device initialization */ 300aa2aa9a6SDana Myers #define ANOBJ_EVALUATED 0x20 /* Set on first evaluation of node */ 301aa2aa9a6SDana Myers #define ANOBJ_ALLOCATED_BUFFER 0x40 /* Method AML buffer is dynamic (InstallMethod) */ 3027c478bd9Sstevel@tonic-gate 30327f7c583Smyers #define ANOBJ_IS_EXTERNAL 0x08 /* iASL only: This object created via External() */ 30427f7c583Smyers #define ANOBJ_METHOD_NO_RETVAL 0x10 /* iASL only: Method has no return value */ 30527f7c583Smyers #define ANOBJ_METHOD_SOME_NO_RETVAL 0x20 /* iASL only: Method has at least one return value */ 30627f7c583Smyers #define ANOBJ_IS_BIT_OFFSET 0x40 /* iASL only: Reference is a bit offset */ 30727f7c583Smyers #define ANOBJ_IS_REFERENCED 0x80 /* iASL only: Object was referenced */ 3087c478bd9Sstevel@tonic-gate 309db2bae30SDana Myers 310db2bae30SDana Myers /* One internal RSDT for table management */ 311db2bae30SDana Myers 312db2bae30SDana Myers typedef struct acpi_internal_rsdt 3137c478bd9Sstevel@tonic-gate { 314db2bae30SDana Myers ACPI_TABLE_DESC *Tables; 31527f7c583Smyers UINT32 Count; 316db2bae30SDana Myers UINT32 Size; 317db2bae30SDana Myers UINT8 Flags; 318db2bae30SDana Myers 319db2bae30SDana Myers } ACPI_INTERNAL_RSDT; 320db2bae30SDana Myers 321db2bae30SDana Myers /* Flags for above */ 322db2bae30SDana Myers 323db2bae30SDana Myers #define ACPI_ROOT_ORIGIN_UNKNOWN (0) /* ~ORIGIN_ALLOCATED */ 324db2bae30SDana Myers #define ACPI_ROOT_ORIGIN_ALLOCATED (1) 325db2bae30SDana Myers #define ACPI_ROOT_ALLOW_RESIZE (2) 3267c478bd9Sstevel@tonic-gate 327db2bae30SDana Myers 328db2bae30SDana Myers /* Predefined (fixed) table indexes */ 329db2bae30SDana Myers 330db2bae30SDana Myers #define ACPI_TABLE_INDEX_DSDT (0) 331db2bae30SDana Myers #define ACPI_TABLE_INDEX_FACS (1) 3327c478bd9Sstevel@tonic-gate 3337c478bd9Sstevel@tonic-gate 3347c478bd9Sstevel@tonic-gate typedef struct acpi_find_context 3357c478bd9Sstevel@tonic-gate { 33627f7c583Smyers char *SearchFor; 33727f7c583Smyers ACPI_HANDLE *List; 33827f7c583Smyers UINT32 *Count; 3397c478bd9Sstevel@tonic-gate 3407c478bd9Sstevel@tonic-gate } ACPI_FIND_CONTEXT; 3417c478bd9Sstevel@tonic-gate 3427c478bd9Sstevel@tonic-gate 3437c478bd9Sstevel@tonic-gate typedef struct acpi_ns_search_data 3447c478bd9Sstevel@tonic-gate { 34527f7c583Smyers ACPI_NAMESPACE_NODE *Node; 3467c478bd9Sstevel@tonic-gate 3477c478bd9Sstevel@tonic-gate } ACPI_NS_SEARCH_DATA; 3487c478bd9Sstevel@tonic-gate 3497c478bd9Sstevel@tonic-gate 3507c478bd9Sstevel@tonic-gate /* Object types used during package copies */ 3517c478bd9Sstevel@tonic-gate 3527c478bd9Sstevel@tonic-gate #define ACPI_COPY_TYPE_SIMPLE 0 3537c478bd9Sstevel@tonic-gate #define ACPI_COPY_TYPE_PACKAGE 1 3547c478bd9Sstevel@tonic-gate 35527f7c583Smyers 3567c478bd9Sstevel@tonic-gate /* Info structure used to convert external<->internal namestrings */ 3577c478bd9Sstevel@tonic-gate 3587c478bd9Sstevel@tonic-gate typedef struct acpi_namestring_info 3597c478bd9Sstevel@tonic-gate { 360db2bae30SDana Myers const char *ExternalName; 361db2bae30SDana Myers const char *NextExternalChar; 36227f7c583Smyers char *InternalName; 36327f7c583Smyers UINT32 Length; 36427f7c583Smyers UINT32 NumSegments; 36527f7c583Smyers UINT32 NumCarats; 36627f7c583Smyers BOOLEAN FullyQualified; 3677c478bd9Sstevel@tonic-gate 3687c478bd9Sstevel@tonic-gate } ACPI_NAMESTRING_INFO; 3697c478bd9Sstevel@tonic-gate 3707c478bd9Sstevel@tonic-gate 3717c478bd9Sstevel@tonic-gate /* Field creation info */ 3727c478bd9Sstevel@tonic-gate 3737c478bd9Sstevel@tonic-gate typedef struct acpi_create_field_info 3747c478bd9Sstevel@tonic-gate { 37527f7c583Smyers ACPI_NAMESPACE_NODE *RegionNode; 37627f7c583Smyers ACPI_NAMESPACE_NODE *FieldNode; 37727f7c583Smyers ACPI_NAMESPACE_NODE *RegisterNode; 37827f7c583Smyers ACPI_NAMESPACE_NODE *DataRegisterNode; 37927f7c583Smyers UINT32 BankValue; 38027f7c583Smyers UINT32 FieldBitPosition; 38127f7c583Smyers UINT32 FieldBitLength; 38227f7c583Smyers UINT8 FieldFlags; 38327f7c583Smyers UINT8 Attribute; 38427f7c583Smyers UINT8 FieldType; 3857c478bd9Sstevel@tonic-gate 3867c478bd9Sstevel@tonic-gate } ACPI_CREATE_FIELD_INFO; 3877c478bd9Sstevel@tonic-gate 3887c478bd9Sstevel@tonic-gate 38927f7c583Smyers typedef 39027f7c583Smyers ACPI_STATUS (*ACPI_INTERNAL_METHOD) ( 39127f7c583Smyers struct acpi_walk_state *WalkState); 39227f7c583Smyers 39327f7c583Smyers 39430082d0cSmyers /* 39530082d0cSmyers * Bitmapped ACPI types. Used internally only 39630082d0cSmyers */ 39730082d0cSmyers #define ACPI_BTYPE_ANY 0x00000000 39830082d0cSmyers #define ACPI_BTYPE_INTEGER 0x00000001 39930082d0cSmyers #define ACPI_BTYPE_STRING 0x00000002 40030082d0cSmyers #define ACPI_BTYPE_BUFFER 0x00000004 40130082d0cSmyers #define ACPI_BTYPE_PACKAGE 0x00000008 40230082d0cSmyers #define ACPI_BTYPE_FIELD_UNIT 0x00000010 40330082d0cSmyers #define ACPI_BTYPE_DEVICE 0x00000020 40430082d0cSmyers #define ACPI_BTYPE_EVENT 0x00000040 40530082d0cSmyers #define ACPI_BTYPE_METHOD 0x00000080 40630082d0cSmyers #define ACPI_BTYPE_MUTEX 0x00000100 40730082d0cSmyers #define ACPI_BTYPE_REGION 0x00000200 40830082d0cSmyers #define ACPI_BTYPE_POWER 0x00000400 40930082d0cSmyers #define ACPI_BTYPE_PROCESSOR 0x00000800 41030082d0cSmyers #define ACPI_BTYPE_THERMAL 0x00001000 41130082d0cSmyers #define ACPI_BTYPE_BUFFER_FIELD 0x00002000 41230082d0cSmyers #define ACPI_BTYPE_DDB_HANDLE 0x00004000 41330082d0cSmyers #define ACPI_BTYPE_DEBUG_OBJECT 0x00008000 41430082d0cSmyers #define ACPI_BTYPE_REFERENCE 0x00010000 41530082d0cSmyers #define ACPI_BTYPE_RESOURCE 0x00020000 41630082d0cSmyers 41730082d0cSmyers #define ACPI_BTYPE_COMPUTE_DATA (ACPI_BTYPE_INTEGER | ACPI_BTYPE_STRING | ACPI_BTYPE_BUFFER) 41830082d0cSmyers 41930082d0cSmyers #define ACPI_BTYPE_DATA (ACPI_BTYPE_COMPUTE_DATA | ACPI_BTYPE_PACKAGE) 42030082d0cSmyers #define ACPI_BTYPE_DATA_REFERENCE (ACPI_BTYPE_DATA | ACPI_BTYPE_REFERENCE | ACPI_BTYPE_DDB_HANDLE) 42130082d0cSmyers #define ACPI_BTYPE_DEVICE_OBJECTS (ACPI_BTYPE_DEVICE | ACPI_BTYPE_THERMAL | ACPI_BTYPE_PROCESSOR) 42230082d0cSmyers #define ACPI_BTYPE_OBJECTS_AND_REFS 0x0001FFFF /* ARG or LOCAL */ 42330082d0cSmyers #define ACPI_BTYPE_ALL_OBJECTS 0x0000FFFF 42430082d0cSmyers 42530082d0cSmyers 426aa2aa9a6SDana Myers /* 427aa2aa9a6SDana Myers * Information structure for ACPI predefined names. 428aa2aa9a6SDana Myers * Each entry in the table contains the following items: 429aa2aa9a6SDana Myers * 430aa2aa9a6SDana Myers * Name - The ACPI reserved name 431aa2aa9a6SDana Myers * ParamCount - Number of arguments to the method 432aa2aa9a6SDana Myers * ExpectedReturnBtypes - Allowed type(s) for the return value 433aa2aa9a6SDana Myers */ 434aa2aa9a6SDana Myers typedef struct acpi_name_info 435aa2aa9a6SDana Myers { 436aa2aa9a6SDana Myers char Name[ACPI_NAME_SIZE]; 437aa2aa9a6SDana Myers UINT8 ParamCount; 438aa2aa9a6SDana Myers UINT8 ExpectedBtypes; 439aa2aa9a6SDana Myers 440aa2aa9a6SDana Myers } ACPI_NAME_INFO; 441aa2aa9a6SDana Myers 442aa2aa9a6SDana Myers /* 443aa2aa9a6SDana Myers * Secondary information structures for ACPI predefined objects that return 444aa2aa9a6SDana Myers * package objects. This structure appears as the next entry in the table 445aa2aa9a6SDana Myers * after the NAME_INFO structure above. 446aa2aa9a6SDana Myers * 447aa2aa9a6SDana Myers * The reason for this is to minimize the size of the predefined name table. 448aa2aa9a6SDana Myers */ 449aa2aa9a6SDana Myers 450aa2aa9a6SDana Myers /* 451aa2aa9a6SDana Myers * Used for ACPI_PTYPE1_FIXED, ACPI_PTYPE1_VAR, ACPI_PTYPE2, 452aa2aa9a6SDana Myers * ACPI_PTYPE2_MIN, ACPI_PTYPE2_PKG_COUNT, ACPI_PTYPE2_COUNT 453aa2aa9a6SDana Myers */ 454aa2aa9a6SDana Myers typedef struct acpi_package_info 455aa2aa9a6SDana Myers { 456aa2aa9a6SDana Myers UINT8 Type; 457aa2aa9a6SDana Myers UINT8 ObjectType1; 458aa2aa9a6SDana Myers UINT8 Count1; 459aa2aa9a6SDana Myers UINT8 ObjectType2; 460aa2aa9a6SDana Myers UINT8 Count2; 461aa2aa9a6SDana Myers UINT8 Reserved; 462aa2aa9a6SDana Myers 463aa2aa9a6SDana Myers } ACPI_PACKAGE_INFO; 464aa2aa9a6SDana Myers 465aa2aa9a6SDana Myers /* Used for ACPI_PTYPE2_FIXED */ 466aa2aa9a6SDana Myers 467aa2aa9a6SDana Myers typedef struct acpi_package_info2 468aa2aa9a6SDana Myers { 469aa2aa9a6SDana Myers UINT8 Type; 470aa2aa9a6SDana Myers UINT8 Count; 471aa2aa9a6SDana Myers UINT8 ObjectType[4]; 472aa2aa9a6SDana Myers 473aa2aa9a6SDana Myers } ACPI_PACKAGE_INFO2; 474aa2aa9a6SDana Myers 475aa2aa9a6SDana Myers /* Used for ACPI_PTYPE1_OPTION */ 476aa2aa9a6SDana Myers 477aa2aa9a6SDana Myers typedef struct acpi_package_info3 478aa2aa9a6SDana Myers { 479aa2aa9a6SDana Myers UINT8 Type; 480aa2aa9a6SDana Myers UINT8 Count; 481aa2aa9a6SDana Myers UINT8 ObjectType[2]; 482aa2aa9a6SDana Myers UINT8 TailObjectType; 483aa2aa9a6SDana Myers UINT8 Reserved; 484aa2aa9a6SDana Myers 485aa2aa9a6SDana Myers } ACPI_PACKAGE_INFO3; 486aa2aa9a6SDana Myers 487aa2aa9a6SDana Myers typedef union acpi_predefined_info 488aa2aa9a6SDana Myers { 489aa2aa9a6SDana Myers ACPI_NAME_INFO Info; 490aa2aa9a6SDana Myers ACPI_PACKAGE_INFO RetInfo; 491aa2aa9a6SDana Myers ACPI_PACKAGE_INFO2 RetInfo2; 492aa2aa9a6SDana Myers ACPI_PACKAGE_INFO3 RetInfo3; 493aa2aa9a6SDana Myers 494aa2aa9a6SDana Myers } ACPI_PREDEFINED_INFO; 495aa2aa9a6SDana Myers 496*57190917SDana Myers 497*57190917SDana Myers /* Data block used during object validation */ 498*57190917SDana Myers 499*57190917SDana Myers typedef struct acpi_predefined_data 500*57190917SDana Myers { 501*57190917SDana Myers char *Pathname; 502*57190917SDana Myers const ACPI_PREDEFINED_INFO *Predefined; 503*57190917SDana Myers UINT32 Flags; 504*57190917SDana Myers UINT8 NodeFlags; 505*57190917SDana Myers 506*57190917SDana Myers } ACPI_PREDEFINED_DATA; 507*57190917SDana Myers 508*57190917SDana Myers /* Defines for Flags field above */ 509*57190917SDana Myers 510*57190917SDana Myers #define ACPI_OBJECT_REPAIRED 1 511*57190917SDana Myers 512*57190917SDana Myers 513aa2aa9a6SDana Myers /* 514aa2aa9a6SDana Myers * Bitmapped return value types 515aa2aa9a6SDana Myers * Note: the actual data types must be contiguous, a loop in nspredef.c 516aa2aa9a6SDana Myers * depends on this. 517aa2aa9a6SDana Myers */ 518aa2aa9a6SDana Myers #define ACPI_RTYPE_ANY 0x00 519aa2aa9a6SDana Myers #define ACPI_RTYPE_NONE 0x01 520aa2aa9a6SDana Myers #define ACPI_RTYPE_INTEGER 0x02 521aa2aa9a6SDana Myers #define ACPI_RTYPE_STRING 0x04 522aa2aa9a6SDana Myers #define ACPI_RTYPE_BUFFER 0x08 523aa2aa9a6SDana Myers #define ACPI_RTYPE_PACKAGE 0x10 524aa2aa9a6SDana Myers #define ACPI_RTYPE_REFERENCE 0x20 525aa2aa9a6SDana Myers #define ACPI_RTYPE_ALL 0x3F 526aa2aa9a6SDana Myers 527aa2aa9a6SDana Myers #define ACPI_NUM_RTYPES 5 /* Number of actual object types */ 528aa2aa9a6SDana Myers 529aa2aa9a6SDana Myers 5307c478bd9Sstevel@tonic-gate /***************************************************************************** 5317c478bd9Sstevel@tonic-gate * 5327c478bd9Sstevel@tonic-gate * Event typedefs and structs 5337c478bd9Sstevel@tonic-gate * 5347c478bd9Sstevel@tonic-gate ****************************************************************************/ 5357c478bd9Sstevel@tonic-gate 5367c478bd9Sstevel@tonic-gate /* Dispatch info for each GPE -- either a method or handler, cannot be both */ 5377c478bd9Sstevel@tonic-gate 5387c478bd9Sstevel@tonic-gate typedef struct acpi_handler_info 5397c478bd9Sstevel@tonic-gate { 5407c478bd9Sstevel@tonic-gate ACPI_EVENT_HANDLER Address; /* Address of handler, if any */ 5417c478bd9Sstevel@tonic-gate void *Context; /* Context to be passed to handler */ 5427c478bd9Sstevel@tonic-gate ACPI_NAMESPACE_NODE *MethodNode; /* Method node for this GPE level (saved) */ 5437c478bd9Sstevel@tonic-gate 5447c478bd9Sstevel@tonic-gate } ACPI_HANDLER_INFO; 5457c478bd9Sstevel@tonic-gate 5467c478bd9Sstevel@tonic-gate typedef union acpi_gpe_dispatch_info 5477c478bd9Sstevel@tonic-gate { 5487c478bd9Sstevel@tonic-gate ACPI_NAMESPACE_NODE *MethodNode; /* Method node for this GPE level */ 5497c478bd9Sstevel@tonic-gate struct acpi_handler_info *Handler; 5507c478bd9Sstevel@tonic-gate 5517c478bd9Sstevel@tonic-gate } ACPI_GPE_DISPATCH_INFO; 5527c478bd9Sstevel@tonic-gate 5537c478bd9Sstevel@tonic-gate /* 5547c478bd9Sstevel@tonic-gate * Information about a GPE, one per each GPE in an array. 5557c478bd9Sstevel@tonic-gate * NOTE: Important to keep this struct as small as possible. 5567c478bd9Sstevel@tonic-gate */ 5577c478bd9Sstevel@tonic-gate typedef struct acpi_gpe_event_info 5587c478bd9Sstevel@tonic-gate { 5597c478bd9Sstevel@tonic-gate union acpi_gpe_dispatch_info Dispatch; /* Either Method or Handler */ 5607c478bd9Sstevel@tonic-gate struct acpi_gpe_register_info *RegisterInfo; /* Backpointer to register info */ 5617c478bd9Sstevel@tonic-gate UINT8 Flags; /* Misc info about this GPE */ 562db2bae30SDana Myers UINT8 GpeNumber; /* This GPE */ 5637c478bd9Sstevel@tonic-gate 5647c478bd9Sstevel@tonic-gate } ACPI_GPE_EVENT_INFO; 5657c478bd9Sstevel@tonic-gate 5667c478bd9Sstevel@tonic-gate /* Information about a GPE register pair, one per each status/enable pair in an array */ 5677c478bd9Sstevel@tonic-gate 5687c478bd9Sstevel@tonic-gate typedef struct acpi_gpe_register_info 5697c478bd9Sstevel@tonic-gate { 5707c478bd9Sstevel@tonic-gate ACPI_GENERIC_ADDRESS StatusAddress; /* Address of status reg */ 5717c478bd9Sstevel@tonic-gate ACPI_GENERIC_ADDRESS EnableAddress; /* Address of enable reg */ 5727c478bd9Sstevel@tonic-gate UINT8 EnableForWake; /* GPEs to keep enabled when sleeping */ 5737c478bd9Sstevel@tonic-gate UINT8 EnableForRun; /* GPEs to keep enabled when running */ 5747c478bd9Sstevel@tonic-gate UINT8 BaseGpeNumber; /* Base GPE number for this register */ 5757c478bd9Sstevel@tonic-gate 5767c478bd9Sstevel@tonic-gate } ACPI_GPE_REGISTER_INFO; 5777c478bd9Sstevel@tonic-gate 5787c478bd9Sstevel@tonic-gate /* 5797c478bd9Sstevel@tonic-gate * Information about a GPE register block, one per each installed block -- 5807c478bd9Sstevel@tonic-gate * GPE0, GPE1, and one per each installed GPE Block Device. 5817c478bd9Sstevel@tonic-gate */ 5827c478bd9Sstevel@tonic-gate typedef struct acpi_gpe_block_info 5837c478bd9Sstevel@tonic-gate { 5847c478bd9Sstevel@tonic-gate ACPI_NAMESPACE_NODE *Node; 5857c478bd9Sstevel@tonic-gate struct acpi_gpe_block_info *Previous; 5867c478bd9Sstevel@tonic-gate struct acpi_gpe_block_info *Next; 5877c478bd9Sstevel@tonic-gate struct acpi_gpe_xrupt_info *XruptBlock; /* Backpointer to interrupt block */ 5887c478bd9Sstevel@tonic-gate ACPI_GPE_REGISTER_INFO *RegisterInfo; /* One per GPE register pair */ 5897c478bd9Sstevel@tonic-gate ACPI_GPE_EVENT_INFO *EventInfo; /* One for each GPE */ 5907c478bd9Sstevel@tonic-gate ACPI_GENERIC_ADDRESS BlockAddress; /* Base address of the block */ 5917c478bd9Sstevel@tonic-gate UINT32 RegisterCount; /* Number of register pairs in block */ 5927c478bd9Sstevel@tonic-gate UINT8 BlockBaseNumber;/* Base GPE number for this block */ 5937c478bd9Sstevel@tonic-gate 5947c478bd9Sstevel@tonic-gate } ACPI_GPE_BLOCK_INFO; 5957c478bd9Sstevel@tonic-gate 5967c478bd9Sstevel@tonic-gate /* Information about GPE interrupt handlers, one per each interrupt level used for GPEs */ 5977c478bd9Sstevel@tonic-gate 5987c478bd9Sstevel@tonic-gate typedef struct acpi_gpe_xrupt_info 5997c478bd9Sstevel@tonic-gate { 6007c478bd9Sstevel@tonic-gate struct acpi_gpe_xrupt_info *Previous; 6017c478bd9Sstevel@tonic-gate struct acpi_gpe_xrupt_info *Next; 6027c478bd9Sstevel@tonic-gate ACPI_GPE_BLOCK_INFO *GpeBlockListHead; /* List of GPE blocks for this xrupt */ 603450d6964Smyers UINT32 InterruptNumber; /* System interrupt number */ 6047c478bd9Sstevel@tonic-gate 6057c478bd9Sstevel@tonic-gate } ACPI_GPE_XRUPT_INFO; 6067c478bd9Sstevel@tonic-gate 6077c478bd9Sstevel@tonic-gate typedef struct acpi_gpe_walk_info 6087c478bd9Sstevel@tonic-gate { 6097c478bd9Sstevel@tonic-gate ACPI_NAMESPACE_NODE *GpeDevice; 6107c478bd9Sstevel@tonic-gate ACPI_GPE_BLOCK_INFO *GpeBlock; 6117c478bd9Sstevel@tonic-gate 6127c478bd9Sstevel@tonic-gate } ACPI_GPE_WALK_INFO; 6137c478bd9Sstevel@tonic-gate 614aa2aa9a6SDana Myers typedef struct acpi_gpe_device_info 615aa2aa9a6SDana Myers { 616aa2aa9a6SDana Myers UINT32 Index; 617aa2aa9a6SDana Myers UINT32 NextBlockBaseIndex; 618aa2aa9a6SDana Myers ACPI_STATUS Status; 619aa2aa9a6SDana Myers ACPI_NAMESPACE_NODE *GpeDevice; 620aa2aa9a6SDana Myers 621aa2aa9a6SDana Myers } ACPI_GPE_DEVICE_INFO; 6227c478bd9Sstevel@tonic-gate 6237c478bd9Sstevel@tonic-gate typedef ACPI_STATUS (*ACPI_GPE_CALLBACK) ( 62427f7c583Smyers ACPI_GPE_XRUPT_INFO *GpeXruptInfo, 625aa2aa9a6SDana Myers ACPI_GPE_BLOCK_INFO *GpeBlock, 626aa2aa9a6SDana Myers void *Context); 6277c478bd9Sstevel@tonic-gate 6287c478bd9Sstevel@tonic-gate 6297c478bd9Sstevel@tonic-gate /* Information about each particular fixed event */ 6307c478bd9Sstevel@tonic-gate 6317c478bd9Sstevel@tonic-gate typedef struct acpi_fixed_event_handler 6327c478bd9Sstevel@tonic-gate { 63327f7c583Smyers ACPI_EVENT_HANDLER Handler; /* Address of handler. */ 63427f7c583Smyers void *Context; /* Context to be passed to handler */ 6357c478bd9Sstevel@tonic-gate 6367c478bd9Sstevel@tonic-gate } ACPI_FIXED_EVENT_HANDLER; 6377c478bd9Sstevel@tonic-gate 6387c478bd9Sstevel@tonic-gate typedef struct acpi_fixed_event_info 6397c478bd9Sstevel@tonic-gate { 64027f7c583Smyers UINT8 StatusRegisterId; 64127f7c583Smyers UINT8 EnableRegisterId; 64227f7c583Smyers UINT16 StatusBitMask; 64327f7c583Smyers UINT16 EnableBitMask; 6447c478bd9Sstevel@tonic-gate 6457c478bd9Sstevel@tonic-gate } ACPI_FIXED_EVENT_INFO; 6467c478bd9Sstevel@tonic-gate 6477c478bd9Sstevel@tonic-gate /* Information used during field processing */ 6487c478bd9Sstevel@tonic-gate 6497c478bd9Sstevel@tonic-gate typedef struct acpi_field_info 6507c478bd9Sstevel@tonic-gate { 65127f7c583Smyers UINT8 SkipField; 65227f7c583Smyers UINT8 FieldFlag; 65327f7c583Smyers UINT32 PkgLength; 6547c478bd9Sstevel@tonic-gate 6557c478bd9Sstevel@tonic-gate } ACPI_FIELD_INFO; 6567c478bd9Sstevel@tonic-gate 6577c478bd9Sstevel@tonic-gate 6587c478bd9Sstevel@tonic-gate /***************************************************************************** 6597c478bd9Sstevel@tonic-gate * 6607c478bd9Sstevel@tonic-gate * Generic "state" object for stacks 6617c478bd9Sstevel@tonic-gate * 6627c478bd9Sstevel@tonic-gate ****************************************************************************/ 6637c478bd9Sstevel@tonic-gate 6647c478bd9Sstevel@tonic-gate #define ACPI_CONTROL_NORMAL 0xC0 6657c478bd9Sstevel@tonic-gate #define ACPI_CONTROL_CONDITIONAL_EXECUTING 0xC1 6667c478bd9Sstevel@tonic-gate #define ACPI_CONTROL_PREDICATE_EXECUTING 0xC2 6677c478bd9Sstevel@tonic-gate #define ACPI_CONTROL_PREDICATE_FALSE 0xC3 6687c478bd9Sstevel@tonic-gate #define ACPI_CONTROL_PREDICATE_TRUE 0xC4 6697c478bd9Sstevel@tonic-gate 6707c478bd9Sstevel@tonic-gate 67127f7c583Smyers #define ACPI_STATE_COMMON \ 67227f7c583Smyers void *Next; \ 67327f7c583Smyers UINT8 DescriptorType; /* To differentiate various internal objs */\ 67427f7c583Smyers UINT8 Flags; \ 67527f7c583Smyers UINT16 Value; \ 67627f7c583Smyers UINT16 State; 67727f7c583Smyers 67827f7c583Smyers /* There are 2 bytes available here until the next natural alignment boundary */ 6797c478bd9Sstevel@tonic-gate 6807c478bd9Sstevel@tonic-gate typedef struct acpi_common_state 6817c478bd9Sstevel@tonic-gate { 6827c478bd9Sstevel@tonic-gate ACPI_STATE_COMMON 6837c478bd9Sstevel@tonic-gate } ACPI_COMMON_STATE; 6847c478bd9Sstevel@tonic-gate 6857c478bd9Sstevel@tonic-gate 6867c478bd9Sstevel@tonic-gate /* 6877c478bd9Sstevel@tonic-gate * Update state - used to traverse complex objects such as packages 6887c478bd9Sstevel@tonic-gate */ 6897c478bd9Sstevel@tonic-gate typedef struct acpi_update_state 6907c478bd9Sstevel@tonic-gate { 6917c478bd9Sstevel@tonic-gate ACPI_STATE_COMMON 69227f7c583Smyers union acpi_operand_object *Object; 6937c478bd9Sstevel@tonic-gate 6947c478bd9Sstevel@tonic-gate } ACPI_UPDATE_STATE; 6957c478bd9Sstevel@tonic-gate 6967c478bd9Sstevel@tonic-gate 6977c478bd9Sstevel@tonic-gate /* 6987c478bd9Sstevel@tonic-gate * Pkg state - used to traverse nested package structures 6997c478bd9Sstevel@tonic-gate */ 7007c478bd9Sstevel@tonic-gate typedef struct acpi_pkg_state 7017c478bd9Sstevel@tonic-gate { 7027c478bd9Sstevel@tonic-gate ACPI_STATE_COMMON 70327f7c583Smyers UINT16 Index; 70427f7c583Smyers union acpi_operand_object *SourceObject; 70527f7c583Smyers union acpi_operand_object *DestObject; 70627f7c583Smyers struct acpi_walk_state *WalkState; 70727f7c583Smyers void *ThisTargetObj; 70827f7c583Smyers UINT32 NumPackages; 7097c478bd9Sstevel@tonic-gate 7107c478bd9Sstevel@tonic-gate } ACPI_PKG_STATE; 7117c478bd9Sstevel@tonic-gate 7127c478bd9Sstevel@tonic-gate 7137c478bd9Sstevel@tonic-gate /* 7147c478bd9Sstevel@tonic-gate * Control state - one per if/else and while constructs. 7157c478bd9Sstevel@tonic-gate * Allows nesting of these constructs 7167c478bd9Sstevel@tonic-gate */ 7177c478bd9Sstevel@tonic-gate typedef struct acpi_control_state 7187c478bd9Sstevel@tonic-gate { 7197c478bd9Sstevel@tonic-gate ACPI_STATE_COMMON 72027f7c583Smyers UINT16 Opcode; 72127f7c583Smyers union acpi_parse_object *PredicateOp; 72227f7c583Smyers UINT8 *AmlPredicateStart; /* Start of if/while predicate */ 72327f7c583Smyers UINT8 *PackageEnd; /* End of if/while block */ 724aa2aa9a6SDana Myers UINT32 LoopCount; /* While() loop counter */ 7257c478bd9Sstevel@tonic-gate 7267c478bd9Sstevel@tonic-gate } ACPI_CONTROL_STATE; 7277c478bd9Sstevel@tonic-gate 7287c478bd9Sstevel@tonic-gate 7297c478bd9Sstevel@tonic-gate /* 7307c478bd9Sstevel@tonic-gate * Scope state - current scope during namespace lookups 7317c478bd9Sstevel@tonic-gate */ 7327c478bd9Sstevel@tonic-gate typedef struct acpi_scope_state 7337c478bd9Sstevel@tonic-gate { 7347c478bd9Sstevel@tonic-gate ACPI_STATE_COMMON 73527f7c583Smyers ACPI_NAMESPACE_NODE *Node; 7367c478bd9Sstevel@tonic-gate 7377c478bd9Sstevel@tonic-gate } ACPI_SCOPE_STATE; 7387c478bd9Sstevel@tonic-gate 7397c478bd9Sstevel@tonic-gate 7407c478bd9Sstevel@tonic-gate typedef struct acpi_pscope_state 7417c478bd9Sstevel@tonic-gate { 7427c478bd9Sstevel@tonic-gate ACPI_STATE_COMMON 74327f7c583Smyers UINT32 ArgCount; /* Number of fixed arguments */ 74427f7c583Smyers union acpi_parse_object *Op; /* Current op being parsed */ 74527f7c583Smyers UINT8 *ArgEnd; /* Current argument end */ 74627f7c583Smyers UINT8 *PkgEnd; /* Current package end */ 74727f7c583Smyers UINT32 ArgList; /* Next argument to parse */ 7487c478bd9Sstevel@tonic-gate 7497c478bd9Sstevel@tonic-gate } ACPI_PSCOPE_STATE; 7507c478bd9Sstevel@tonic-gate 7517c478bd9Sstevel@tonic-gate 7527c478bd9Sstevel@tonic-gate /* 7537c478bd9Sstevel@tonic-gate * Thread state - one per thread across multiple walk states. Multiple walk 7547c478bd9Sstevel@tonic-gate * states are created when there are nested control methods executing. 7557c478bd9Sstevel@tonic-gate */ 7567c478bd9Sstevel@tonic-gate typedef struct acpi_thread_state 7577c478bd9Sstevel@tonic-gate { 7587c478bd9Sstevel@tonic-gate ACPI_STATE_COMMON 75927f7c583Smyers UINT8 CurrentSyncLevel; /* Mutex Sync (nested acquire) level */ 76027f7c583Smyers struct acpi_walk_state *WalkStateList; /* Head of list of WalkStates for this thread */ 76127f7c583Smyers union acpi_operand_object *AcquiredMutexList; /* List of all currently acquired mutexes */ 76227f7c583Smyers ACPI_THREAD_ID ThreadId; /* Running thread ID */ 7637c478bd9Sstevel@tonic-gate 7647c478bd9Sstevel@tonic-gate } ACPI_THREAD_STATE; 7657c478bd9Sstevel@tonic-gate 7667c478bd9Sstevel@tonic-gate 7677c478bd9Sstevel@tonic-gate /* 7687c478bd9Sstevel@tonic-gate * Result values - used to accumulate the results of nested 7697c478bd9Sstevel@tonic-gate * AML arguments 7707c478bd9Sstevel@tonic-gate */ 7717c478bd9Sstevel@tonic-gate typedef struct acpi_result_values 7727c478bd9Sstevel@tonic-gate { 7737c478bd9Sstevel@tonic-gate ACPI_STATE_COMMON 774db2bae30SDana Myers union acpi_operand_object *ObjDesc [ACPI_RESULTS_FRAME_OBJ_NUM]; 7757c478bd9Sstevel@tonic-gate 7767c478bd9Sstevel@tonic-gate } ACPI_RESULT_VALUES; 7777c478bd9Sstevel@tonic-gate 7787c478bd9Sstevel@tonic-gate 7797c478bd9Sstevel@tonic-gate typedef 7807c478bd9Sstevel@tonic-gate ACPI_STATUS (*ACPI_PARSE_DOWNWARDS) ( 78127f7c583Smyers struct acpi_walk_state *WalkState, 78227f7c583Smyers union acpi_parse_object **OutOp); 7837c478bd9Sstevel@tonic-gate 7847c478bd9Sstevel@tonic-gate typedef 7857c478bd9Sstevel@tonic-gate ACPI_STATUS (*ACPI_PARSE_UPWARDS) ( 78627f7c583Smyers struct acpi_walk_state *WalkState); 7877c478bd9Sstevel@tonic-gate 7887c478bd9Sstevel@tonic-gate 7897c478bd9Sstevel@tonic-gate /* 7907c478bd9Sstevel@tonic-gate * Notify info - used to pass info to the deferred notify 7917c478bd9Sstevel@tonic-gate * handler/dispatcher. 7927c478bd9Sstevel@tonic-gate */ 7937c478bd9Sstevel@tonic-gate typedef struct acpi_notify_info 7947c478bd9Sstevel@tonic-gate { 7957c478bd9Sstevel@tonic-gate ACPI_STATE_COMMON 79627f7c583Smyers ACPI_NAMESPACE_NODE *Node; 79727f7c583Smyers union acpi_operand_object *HandlerObj; 7987c478bd9Sstevel@tonic-gate 7997c478bd9Sstevel@tonic-gate } ACPI_NOTIFY_INFO; 8007c478bd9Sstevel@tonic-gate 8017c478bd9Sstevel@tonic-gate 8027c478bd9Sstevel@tonic-gate /* Generic state is union of structs above */ 8037c478bd9Sstevel@tonic-gate 8047c478bd9Sstevel@tonic-gate typedef union acpi_generic_state 8057c478bd9Sstevel@tonic-gate { 80627f7c583Smyers ACPI_COMMON_STATE Common; 80727f7c583Smyers ACPI_CONTROL_STATE Control; 80827f7c583Smyers ACPI_UPDATE_STATE Update; 80927f7c583Smyers ACPI_SCOPE_STATE Scope; 81027f7c583Smyers ACPI_PSCOPE_STATE ParseScope; 81127f7c583Smyers ACPI_PKG_STATE Pkg; 81227f7c583Smyers ACPI_THREAD_STATE Thread; 81327f7c583Smyers ACPI_RESULT_VALUES Results; 81427f7c583Smyers ACPI_NOTIFY_INFO Notify; 8157c478bd9Sstevel@tonic-gate 8167c478bd9Sstevel@tonic-gate } ACPI_GENERIC_STATE; 8177c478bd9Sstevel@tonic-gate 8187c478bd9Sstevel@tonic-gate 8197c478bd9Sstevel@tonic-gate /***************************************************************************** 8207c478bd9Sstevel@tonic-gate * 8217c478bd9Sstevel@tonic-gate * Interpreter typedefs and structs 8227c478bd9Sstevel@tonic-gate * 8237c478bd9Sstevel@tonic-gate ****************************************************************************/ 8247c478bd9Sstevel@tonic-gate 8257c478bd9Sstevel@tonic-gate typedef 8267c478bd9Sstevel@tonic-gate ACPI_STATUS (*ACPI_EXECUTE_OP) ( 82727f7c583Smyers struct acpi_walk_state *WalkState); 8287c478bd9Sstevel@tonic-gate 8297c478bd9Sstevel@tonic-gate 8307c478bd9Sstevel@tonic-gate /***************************************************************************** 8317c478bd9Sstevel@tonic-gate * 8327c478bd9Sstevel@tonic-gate * Parser typedefs and structs 8337c478bd9Sstevel@tonic-gate * 8347c478bd9Sstevel@tonic-gate ****************************************************************************/ 8357c478bd9Sstevel@tonic-gate 8367c478bd9Sstevel@tonic-gate /* 8377c478bd9Sstevel@tonic-gate * AML opcode, name, and argument layout 8387c478bd9Sstevel@tonic-gate */ 8397c478bd9Sstevel@tonic-gate typedef struct acpi_opcode_info 8407c478bd9Sstevel@tonic-gate { 8417c478bd9Sstevel@tonic-gate #if defined(ACPI_DISASSEMBLER) || defined(ACPI_DEBUG_OUTPUT) 84227f7c583Smyers char *Name; /* Opcode name (disassembler/debug only) */ 8437c478bd9Sstevel@tonic-gate #endif 84427f7c583Smyers UINT32 ParseArgs; /* Grammar/Parse time arguments */ 84527f7c583Smyers UINT32 RuntimeArgs; /* Interpret time arguments */ 84627f7c583Smyers UINT16 Flags; /* Misc flags */ 84727f7c583Smyers UINT8 ObjectType; /* Corresponding internal object type */ 84827f7c583Smyers UINT8 Class; /* Opcode class */ 84927f7c583Smyers UINT8 Type; /* Opcode type */ 8507c478bd9Sstevel@tonic-gate 8517c478bd9Sstevel@tonic-gate } ACPI_OPCODE_INFO; 8527c478bd9Sstevel@tonic-gate 8537c478bd9Sstevel@tonic-gate typedef union acpi_parse_value 8547c478bd9Sstevel@tonic-gate { 85527f7c583Smyers ACPI_INTEGER Integer; /* Integer constant (Up to 64 bits) */ 85627f7c583Smyers UINT64_STRUCT Integer64; /* Structure overlay for 2 32-bit Dwords */ 85727f7c583Smyers UINT32 Size; /* bytelist or field size */ 85827f7c583Smyers char *String; /* NULL terminated string */ 85927f7c583Smyers UINT8 *Buffer; /* buffer or string */ 86027f7c583Smyers char *Name; /* NULL terminated string */ 86127f7c583Smyers union acpi_parse_object *Arg; /* arguments and contained ops */ 8627c478bd9Sstevel@tonic-gate 8637c478bd9Sstevel@tonic-gate } ACPI_PARSE_VALUE; 8647c478bd9Sstevel@tonic-gate 865aa2aa9a6SDana Myers 866aa2aa9a6SDana Myers #ifdef ACPI_DISASSEMBLER 867aa2aa9a6SDana Myers #define ACPI_DISASM_ONLY_MEMBERS(a) a; 868aa2aa9a6SDana Myers #else 869aa2aa9a6SDana Myers #define ACPI_DISASM_ONLY_MEMBERS(a) 870aa2aa9a6SDana Myers #endif 871aa2aa9a6SDana Myers 8727c478bd9Sstevel@tonic-gate #define ACPI_PARSE_COMMON \ 87327f7c583Smyers union acpi_parse_object *Parent; /* Parent op */\ 87427f7c583Smyers UINT8 DescriptorType; /* To differentiate various internal objs */\ 87527f7c583Smyers UINT8 Flags; /* Type of Op */\ 87627f7c583Smyers UINT16 AmlOpcode; /* AML opcode */\ 87727f7c583Smyers UINT32 AmlOffset; /* Offset of declaration in AML */\ 87827f7c583Smyers union acpi_parse_object *Next; /* Next op */\ 87927f7c583Smyers ACPI_NAMESPACE_NODE *Node; /* For use by interpreter */\ 88027f7c583Smyers ACPI_PARSE_VALUE Value; /* Value or args associated with the opcode */\ 881db2bae30SDana Myers UINT8 ArgListLength; /* Number of elements in the arg list */\ 8827c478bd9Sstevel@tonic-gate ACPI_DISASM_ONLY_MEMBERS (\ 88327f7c583Smyers UINT8 DisasmFlags; /* Used during AML disassembly */\ 88427f7c583Smyers UINT8 DisasmOpcode; /* Subtype used for disassembly */\ 88527f7c583Smyers char AmlOpName[16]) /* Op name (debug only) */ 8867c478bd9Sstevel@tonic-gate 8877c478bd9Sstevel@tonic-gate 88827f7c583Smyers #define ACPI_DASM_BUFFER 0x00 88927f7c583Smyers #define ACPI_DASM_RESOURCE 0x01 89027f7c583Smyers #define ACPI_DASM_STRING 0x02 89127f7c583Smyers #define ACPI_DASM_UNICODE 0x03 89227f7c583Smyers #define ACPI_DASM_EISAID 0x04 89327f7c583Smyers #define ACPI_DASM_MATCHOP 0x05 89427f7c583Smyers #define ACPI_DASM_LNOT_PREFIX 0x06 89527f7c583Smyers #define ACPI_DASM_LNOT_SUFFIX 0x07 89627f7c583Smyers #define ACPI_DASM_IGNORE 0x08 8977c478bd9Sstevel@tonic-gate 8987c478bd9Sstevel@tonic-gate /* 89927f7c583Smyers * Generic operation (for example: If, While, Store) 9007c478bd9Sstevel@tonic-gate */ 9017c478bd9Sstevel@tonic-gate typedef struct acpi_parse_obj_common 9027c478bd9Sstevel@tonic-gate { 9037c478bd9Sstevel@tonic-gate ACPI_PARSE_COMMON 9047c478bd9Sstevel@tonic-gate } ACPI_PARSE_OBJ_COMMON; 9057c478bd9Sstevel@tonic-gate 9067c478bd9Sstevel@tonic-gate 9077c478bd9Sstevel@tonic-gate /* 9087c478bd9Sstevel@tonic-gate * Extended Op for named ops (Scope, Method, etc.), deferred ops (Methods and OpRegions), 9097c478bd9Sstevel@tonic-gate * and bytelists. 9107c478bd9Sstevel@tonic-gate */ 9117c478bd9Sstevel@tonic-gate typedef struct acpi_parse_obj_named 9127c478bd9Sstevel@tonic-gate { 9137c478bd9Sstevel@tonic-gate ACPI_PARSE_COMMON 91427f7c583Smyers UINT8 *Path; 91527f7c583Smyers UINT8 *Data; /* AML body or bytelist data */ 91627f7c583Smyers UINT32 Length; /* AML length */ 91727f7c583Smyers UINT32 Name; /* 4-byte name or zero if no name */ 9187c478bd9Sstevel@tonic-gate 9197c478bd9Sstevel@tonic-gate } ACPI_PARSE_OBJ_NAMED; 9207c478bd9Sstevel@tonic-gate 9217c478bd9Sstevel@tonic-gate 92227f7c583Smyers /* This version is used by the iASL compiler only */ 9237c478bd9Sstevel@tonic-gate 92430082d0cSmyers #define ACPI_MAX_PARSEOP_NAME 20 92530082d0cSmyers 9267c478bd9Sstevel@tonic-gate typedef struct acpi_parse_obj_asl 9277c478bd9Sstevel@tonic-gate { 9287c478bd9Sstevel@tonic-gate ACPI_PARSE_COMMON 92927f7c583Smyers union acpi_parse_object *Child; 93027f7c583Smyers union acpi_parse_object *ParentMethod; 93127f7c583Smyers char *Filename; 93227f7c583Smyers char *ExternalName; 93327f7c583Smyers char *Namepath; 93427f7c583Smyers char NameSeg[4]; 93527f7c583Smyers UINT32 ExtraValue; 93627f7c583Smyers UINT32 Column; 93727f7c583Smyers UINT32 LineNumber; 93827f7c583Smyers UINT32 LogicalLineNumber; 93927f7c583Smyers UINT32 LogicalByteOffset; 94027f7c583Smyers UINT32 EndLine; 94127f7c583Smyers UINT32 EndLogicalLine; 94227f7c583Smyers UINT32 AcpiBtype; 94327f7c583Smyers UINT32 AmlLength; 94427f7c583Smyers UINT32 AmlSubtreeLength; 94527f7c583Smyers UINT32 FinalAmlLength; 94627f7c583Smyers UINT32 FinalAmlOffset; 94727f7c583Smyers UINT32 CompileFlags; 94827f7c583Smyers UINT16 ParseOpcode; 94927f7c583Smyers UINT8 AmlOpcodeLength; 95027f7c583Smyers UINT8 AmlPkgLenBytes; 95127f7c583Smyers UINT8 Extra; 95227f7c583Smyers char ParseOpName[ACPI_MAX_PARSEOP_NAME]; 9537c478bd9Sstevel@tonic-gate 9547c478bd9Sstevel@tonic-gate } ACPI_PARSE_OBJ_ASL; 9557c478bd9Sstevel@tonic-gate 9567c478bd9Sstevel@tonic-gate typedef union acpi_parse_object 9577c478bd9Sstevel@tonic-gate { 95827f7c583Smyers ACPI_PARSE_OBJ_COMMON Common; 95927f7c583Smyers ACPI_PARSE_OBJ_NAMED Named; 96027f7c583Smyers ACPI_PARSE_OBJ_ASL Asl; 9617c478bd9Sstevel@tonic-gate 9627c478bd9Sstevel@tonic-gate } ACPI_PARSE_OBJECT; 9637c478bd9Sstevel@tonic-gate 9647c478bd9Sstevel@tonic-gate 9657c478bd9Sstevel@tonic-gate /* 9667c478bd9Sstevel@tonic-gate * Parse state - one state per parser invocation and each control 9677c478bd9Sstevel@tonic-gate * method. 9687c478bd9Sstevel@tonic-gate */ 9697c478bd9Sstevel@tonic-gate typedef struct acpi_parse_state 9707c478bd9Sstevel@tonic-gate { 97127f7c583Smyers UINT8 *AmlStart; /* First AML byte */ 97227f7c583Smyers UINT8 *Aml; /* Next AML byte */ 97327f7c583Smyers UINT8 *AmlEnd; /* (last + 1) AML byte */ 97427f7c583Smyers UINT8 *PkgStart; /* Current package begin */ 97527f7c583Smyers UINT8 *PkgEnd; /* Current package end */ 97627f7c583Smyers union acpi_parse_object *StartOp; /* Root of parse tree */ 97727f7c583Smyers struct acpi_namespace_node *StartNode; 97827f7c583Smyers union acpi_generic_state *Scope; /* Current scope */ 97927f7c583Smyers union acpi_parse_object *StartScope; 98027f7c583Smyers UINT32 AmlSize; 9817c478bd9Sstevel@tonic-gate 9827c478bd9Sstevel@tonic-gate } ACPI_PARSE_STATE; 9837c478bd9Sstevel@tonic-gate 9847c478bd9Sstevel@tonic-gate 9857c478bd9Sstevel@tonic-gate /* Parse object flags */ 9867c478bd9Sstevel@tonic-gate 98727f7c583Smyers #define ACPI_PARSEOP_GENERIC 0x01 98827f7c583Smyers #define ACPI_PARSEOP_NAMED 0x02 98927f7c583Smyers #define ACPI_PARSEOP_DEFERRED 0x04 99027f7c583Smyers #define ACPI_PARSEOP_BYTELIST 0x08 991db2bae30SDana Myers #define ACPI_PARSEOP_IN_STACK 0x10 992db2bae30SDana Myers #define ACPI_PARSEOP_TARGET 0x20 99327f7c583Smyers #define ACPI_PARSEOP_IN_CACHE 0x80 9947c478bd9Sstevel@tonic-gate 9957c478bd9Sstevel@tonic-gate /* Parse object DisasmFlags */ 9967c478bd9Sstevel@tonic-gate 99727f7c583Smyers #define ACPI_PARSEOP_IGNORE 0x01 99827f7c583Smyers #define ACPI_PARSEOP_PARAMLIST 0x02 99927f7c583Smyers #define ACPI_PARSEOP_EMPTY_TERMLIST 0x04 100027f7c583Smyers #define ACPI_PARSEOP_SPECIAL 0x10 10017c478bd9Sstevel@tonic-gate 10027c478bd9Sstevel@tonic-gate 10037c478bd9Sstevel@tonic-gate /***************************************************************************** 10047c478bd9Sstevel@tonic-gate * 10057c478bd9Sstevel@tonic-gate * Hardware (ACPI registers) and PNP 10067c478bd9Sstevel@tonic-gate * 10077c478bd9Sstevel@tonic-gate ****************************************************************************/ 10087c478bd9Sstevel@tonic-gate 10097c478bd9Sstevel@tonic-gate typedef struct acpi_bit_register_info 10107c478bd9Sstevel@tonic-gate { 101127f7c583Smyers UINT8 ParentRegister; 101227f7c583Smyers UINT8 BitPosition; 101327f7c583Smyers UINT16 AccessBitMask; 10147c478bd9Sstevel@tonic-gate 10157c478bd9Sstevel@tonic-gate } ACPI_BIT_REGISTER_INFO; 10167c478bd9Sstevel@tonic-gate 10177c478bd9Sstevel@tonic-gate 101827f7c583Smyers /* 101927f7c583Smyers * Some ACPI registers have bits that must be ignored -- meaning that they 102027f7c583Smyers * must be preserved. 102127f7c583Smyers */ 102227f7c583Smyers #define ACPI_PM1_STATUS_PRESERVED_BITS 0x0800 /* Bit 11 */ 102327f7c583Smyers 1024aa2aa9a6SDana Myers /* Write-only bits must be zeroed by software */ 1025aa2aa9a6SDana Myers 1026aa2aa9a6SDana Myers #define ACPI_PM1_CONTROL_WRITEONLY_BITS 0x2004 /* Bits 13, 2 */ 1027aa2aa9a6SDana Myers 1028aa2aa9a6SDana Myers /* For control registers, both ignored and reserved bits must be preserved */ 1029aa2aa9a6SDana Myers 1030aa2aa9a6SDana Myers /* 1031aa2aa9a6SDana Myers * For PM1 control, the SCI enable bit (bit 0, SCI_EN) is defined by the 1032aa2aa9a6SDana Myers * ACPI specification to be a "preserved" bit - "OSPM always preserves this 1033aa2aa9a6SDana Myers * bit position", section 4.7.3.2.1. However, on some machines the OS must 1034aa2aa9a6SDana Myers * write a one to this bit after resume for the machine to work properly. 1035aa2aa9a6SDana Myers * To enable this, we no longer attempt to preserve this bit. No machines 1036aa2aa9a6SDana Myers * are known to fail if the bit is not preserved. (May 2009) 1037aa2aa9a6SDana Myers */ 1038aa2aa9a6SDana Myers #define ACPI_PM1_CONTROL_IGNORED_BITS 0x0200 /* Bit 9 */ 1039aa2aa9a6SDana Myers #define ACPI_PM1_CONTROL_RESERVED_BITS 0xC1F8 /* Bits 14-15, 3-8 */ 1040aa2aa9a6SDana Myers #define ACPI_PM1_CONTROL_PRESERVED_BITS \ 1041aa2aa9a6SDana Myers (ACPI_PM1_CONTROL_IGNORED_BITS | ACPI_PM1_CONTROL_RESERVED_BITS) 1042aa2aa9a6SDana Myers 1043aa2aa9a6SDana Myers #define ACPI_PM2_CONTROL_PRESERVED_BITS 0xFFFFFFFE /* All except bit 0 */ 104427f7c583Smyers 10457c478bd9Sstevel@tonic-gate /* 10467c478bd9Sstevel@tonic-gate * Register IDs 10477c478bd9Sstevel@tonic-gate * These are the full ACPI registers 10487c478bd9Sstevel@tonic-gate */ 10497c478bd9Sstevel@tonic-gate #define ACPI_REGISTER_PM1_STATUS 0x01 10507c478bd9Sstevel@tonic-gate #define ACPI_REGISTER_PM1_ENABLE 0x02 10517c478bd9Sstevel@tonic-gate #define ACPI_REGISTER_PM1_CONTROL 0x03 1052aa2aa9a6SDana Myers #define ACPI_REGISTER_PM2_CONTROL 0x04 1053aa2aa9a6SDana Myers #define ACPI_REGISTER_PM_TIMER 0x05 1054aa2aa9a6SDana Myers #define ACPI_REGISTER_PROCESSOR_BLOCK 0x06 1055aa2aa9a6SDana Myers #define ACPI_REGISTER_SMI_COMMAND_BLOCK 0x07 10567c478bd9Sstevel@tonic-gate 10577c478bd9Sstevel@tonic-gate 10587c478bd9Sstevel@tonic-gate /* Masks used to access the BitRegisters */ 10597c478bd9Sstevel@tonic-gate 10607c478bd9Sstevel@tonic-gate #define ACPI_BITMASK_TIMER_STATUS 0x0001 10617c478bd9Sstevel@tonic-gate #define ACPI_BITMASK_BUS_MASTER_STATUS 0x0010 10627c478bd9Sstevel@tonic-gate #define ACPI_BITMASK_GLOBAL_LOCK_STATUS 0x0020 10637c478bd9Sstevel@tonic-gate #define ACPI_BITMASK_POWER_BUTTON_STATUS 0x0100 10647c478bd9Sstevel@tonic-gate #define ACPI_BITMASK_SLEEP_BUTTON_STATUS 0x0200 10657c478bd9Sstevel@tonic-gate #define ACPI_BITMASK_RT_CLOCK_STATUS 0x0400 10667c478bd9Sstevel@tonic-gate #define ACPI_BITMASK_PCIEXP_WAKE_STATUS 0x4000 /* ACPI 3.0 */ 10677c478bd9Sstevel@tonic-gate #define ACPI_BITMASK_WAKE_STATUS 0x8000 10687c478bd9Sstevel@tonic-gate 106927f7c583Smyers #define ACPI_BITMASK_ALL_FIXED_STATUS (\ 107027f7c583Smyers ACPI_BITMASK_TIMER_STATUS | \ 107127f7c583Smyers ACPI_BITMASK_BUS_MASTER_STATUS | \ 107227f7c583Smyers ACPI_BITMASK_GLOBAL_LOCK_STATUS | \ 107327f7c583Smyers ACPI_BITMASK_POWER_BUTTON_STATUS | \ 107427f7c583Smyers ACPI_BITMASK_SLEEP_BUTTON_STATUS | \ 107527f7c583Smyers ACPI_BITMASK_RT_CLOCK_STATUS | \ 107627f7c583Smyers ACPI_BITMASK_WAKE_STATUS) 10777c478bd9Sstevel@tonic-gate 10787c478bd9Sstevel@tonic-gate #define ACPI_BITMASK_TIMER_ENABLE 0x0001 10797c478bd9Sstevel@tonic-gate #define ACPI_BITMASK_GLOBAL_LOCK_ENABLE 0x0020 10807c478bd9Sstevel@tonic-gate #define ACPI_BITMASK_POWER_BUTTON_ENABLE 0x0100 10817c478bd9Sstevel@tonic-gate #define ACPI_BITMASK_SLEEP_BUTTON_ENABLE 0x0200 10827c478bd9Sstevel@tonic-gate #define ACPI_BITMASK_RT_CLOCK_ENABLE 0x0400 10837c478bd9Sstevel@tonic-gate #define ACPI_BITMASK_PCIEXP_WAKE_DISABLE 0x4000 /* ACPI 3.0 */ 10847c478bd9Sstevel@tonic-gate 10857c478bd9Sstevel@tonic-gate #define ACPI_BITMASK_SCI_ENABLE 0x0001 10867c478bd9Sstevel@tonic-gate #define ACPI_BITMASK_BUS_MASTER_RLD 0x0002 10877c478bd9Sstevel@tonic-gate #define ACPI_BITMASK_GLOBAL_LOCK_RELEASE 0x0004 1088aa2aa9a6SDana Myers #define ACPI_BITMASK_SLEEP_TYPE 0x1C00 10897c478bd9Sstevel@tonic-gate #define ACPI_BITMASK_SLEEP_ENABLE 0x2000 10907c478bd9Sstevel@tonic-gate 10917c478bd9Sstevel@tonic-gate #define ACPI_BITMASK_ARB_DISABLE 0x0001 10927c478bd9Sstevel@tonic-gate 10937c478bd9Sstevel@tonic-gate 10947c478bd9Sstevel@tonic-gate /* Raw bit position of each BitRegister */ 10957c478bd9Sstevel@tonic-gate 10967c478bd9Sstevel@tonic-gate #define ACPI_BITPOSITION_TIMER_STATUS 0x00 10977c478bd9Sstevel@tonic-gate #define ACPI_BITPOSITION_BUS_MASTER_STATUS 0x04 10987c478bd9Sstevel@tonic-gate #define ACPI_BITPOSITION_GLOBAL_LOCK_STATUS 0x05 10997c478bd9Sstevel@tonic-gate #define ACPI_BITPOSITION_POWER_BUTTON_STATUS 0x08 11007c478bd9Sstevel@tonic-gate #define ACPI_BITPOSITION_SLEEP_BUTTON_STATUS 0x09 11017c478bd9Sstevel@tonic-gate #define ACPI_BITPOSITION_RT_CLOCK_STATUS 0x0A 11027c478bd9Sstevel@tonic-gate #define ACPI_BITPOSITION_PCIEXP_WAKE_STATUS 0x0E /* ACPI 3.0 */ 11037c478bd9Sstevel@tonic-gate #define ACPI_BITPOSITION_WAKE_STATUS 0x0F 11047c478bd9Sstevel@tonic-gate 11057c478bd9Sstevel@tonic-gate #define ACPI_BITPOSITION_TIMER_ENABLE 0x00 11067c478bd9Sstevel@tonic-gate #define ACPI_BITPOSITION_GLOBAL_LOCK_ENABLE 0x05 11077c478bd9Sstevel@tonic-gate #define ACPI_BITPOSITION_POWER_BUTTON_ENABLE 0x08 11087c478bd9Sstevel@tonic-gate #define ACPI_BITPOSITION_SLEEP_BUTTON_ENABLE 0x09 11097c478bd9Sstevel@tonic-gate #define ACPI_BITPOSITION_RT_CLOCK_ENABLE 0x0A 11107c478bd9Sstevel@tonic-gate #define ACPI_BITPOSITION_PCIEXP_WAKE_DISABLE 0x0E /* ACPI 3.0 */ 11117c478bd9Sstevel@tonic-gate 11127c478bd9Sstevel@tonic-gate #define ACPI_BITPOSITION_SCI_ENABLE 0x00 11137c478bd9Sstevel@tonic-gate #define ACPI_BITPOSITION_BUS_MASTER_RLD 0x01 11147c478bd9Sstevel@tonic-gate #define ACPI_BITPOSITION_GLOBAL_LOCK_RELEASE 0x02 1115aa2aa9a6SDana Myers #define ACPI_BITPOSITION_SLEEP_TYPE 0x0A 11167c478bd9Sstevel@tonic-gate #define ACPI_BITPOSITION_SLEEP_ENABLE 0x0D 11177c478bd9Sstevel@tonic-gate 11187c478bd9Sstevel@tonic-gate #define ACPI_BITPOSITION_ARB_DISABLE 0x00 11197c478bd9Sstevel@tonic-gate 11207c478bd9Sstevel@tonic-gate 1121aa2aa9a6SDana Myers /* Structs and definitions for _OSI support and I/O port validation */ 1122aa2aa9a6SDana Myers 1123aa2aa9a6SDana Myers #define ACPI_OSI_WIN_2000 0x01 1124aa2aa9a6SDana Myers #define ACPI_OSI_WIN_XP 0x02 1125aa2aa9a6SDana Myers #define ACPI_OSI_WIN_XP_SP1 0x03 1126aa2aa9a6SDana Myers #define ACPI_OSI_WINSRV_2003 0x04 1127aa2aa9a6SDana Myers #define ACPI_OSI_WIN_XP_SP2 0x05 1128aa2aa9a6SDana Myers #define ACPI_OSI_WINSRV_2003_SP1 0x06 1129aa2aa9a6SDana Myers #define ACPI_OSI_WIN_VISTA 0x07 1130*57190917SDana Myers #define ACPI_OSI_WINSRV_2008 0x08 1131*57190917SDana Myers #define ACPI_OSI_WIN_VISTA_SP1 0x09 1132*57190917SDana Myers #define ACPI_OSI_WIN_7 0x0A 1133aa2aa9a6SDana Myers 1134aa2aa9a6SDana Myers #define ACPI_ALWAYS_ILLEGAL 0x00 1135aa2aa9a6SDana Myers 1136aa2aa9a6SDana Myers typedef struct acpi_interface_info 1137aa2aa9a6SDana Myers { 1138aa2aa9a6SDana Myers char *Name; 1139aa2aa9a6SDana Myers UINT8 Value; 1140aa2aa9a6SDana Myers 1141aa2aa9a6SDana Myers } ACPI_INTERFACE_INFO; 1142aa2aa9a6SDana Myers 1143aa2aa9a6SDana Myers typedef struct acpi_port_info 1144aa2aa9a6SDana Myers { 1145aa2aa9a6SDana Myers char *Name; 1146aa2aa9a6SDana Myers UINT16 Start; 1147aa2aa9a6SDana Myers UINT16 End; 1148aa2aa9a6SDana Myers UINT8 OsiDependency; 1149aa2aa9a6SDana Myers 1150aa2aa9a6SDana Myers } ACPI_PORT_INFO; 1151aa2aa9a6SDana Myers 1152aa2aa9a6SDana Myers 11537c478bd9Sstevel@tonic-gate /***************************************************************************** 11547c478bd9Sstevel@tonic-gate * 11557c478bd9Sstevel@tonic-gate * Resource descriptors 11567c478bd9Sstevel@tonic-gate * 11577c478bd9Sstevel@tonic-gate ****************************************************************************/ 11587c478bd9Sstevel@tonic-gate 11597c478bd9Sstevel@tonic-gate /* ResourceType values */ 11607c478bd9Sstevel@tonic-gate 1161186507a7Smyers #define ACPI_ADDRESS_TYPE_MEMORY_RANGE 0 1162186507a7Smyers #define ACPI_ADDRESS_TYPE_IO_RANGE 1 1163186507a7Smyers #define ACPI_ADDRESS_TYPE_BUS_NUMBER_RANGE 2 11647c478bd9Sstevel@tonic-gate 11657c478bd9Sstevel@tonic-gate /* Resource descriptor types and masks */ 11667c478bd9Sstevel@tonic-gate 1167186507a7Smyers #define ACPI_RESOURCE_NAME_LARGE 0x80 1168186507a7Smyers #define ACPI_RESOURCE_NAME_SMALL 0x00 11697c478bd9Sstevel@tonic-gate 1170186507a7Smyers #define ACPI_RESOURCE_NAME_SMALL_MASK 0x78 /* Bits 6:3 contain the type */ 1171186507a7Smyers #define ACPI_RESOURCE_NAME_SMALL_LENGTH_MASK 0x07 /* Bits 2:0 contain the length */ 1172186507a7Smyers #define ACPI_RESOURCE_NAME_LARGE_MASK 0x7F /* Bits 6:0 contain the type */ 11737c478bd9Sstevel@tonic-gate 11747c478bd9Sstevel@tonic-gate 11757c478bd9Sstevel@tonic-gate /* 1176186507a7Smyers * Small resource descriptor "names" as defined by the ACPI specification. 1177186507a7Smyers * Note: Bits 2:0 are used for the descriptor length 11787c478bd9Sstevel@tonic-gate */ 1179186507a7Smyers #define ACPI_RESOURCE_NAME_IRQ 0x20 1180186507a7Smyers #define ACPI_RESOURCE_NAME_DMA 0x28 1181186507a7Smyers #define ACPI_RESOURCE_NAME_START_DEPENDENT 0x30 1182186507a7Smyers #define ACPI_RESOURCE_NAME_END_DEPENDENT 0x38 1183186507a7Smyers #define ACPI_RESOURCE_NAME_IO 0x40 1184186507a7Smyers #define ACPI_RESOURCE_NAME_FIXED_IO 0x48 1185186507a7Smyers #define ACPI_RESOURCE_NAME_RESERVED_S1 0x50 1186186507a7Smyers #define ACPI_RESOURCE_NAME_RESERVED_S2 0x58 1187186507a7Smyers #define ACPI_RESOURCE_NAME_RESERVED_S3 0x60 1188186507a7Smyers #define ACPI_RESOURCE_NAME_RESERVED_S4 0x68 1189186507a7Smyers #define ACPI_RESOURCE_NAME_VENDOR_SMALL 0x70 1190186507a7Smyers #define ACPI_RESOURCE_NAME_END_TAG 0x78 11917c478bd9Sstevel@tonic-gate 11927c478bd9Sstevel@tonic-gate /* 1193186507a7Smyers * Large resource descriptor "names" as defined by the ACPI specification. 1194186507a7Smyers * Note: includes the Large Descriptor bit in bit[7] 11957c478bd9Sstevel@tonic-gate */ 1196186507a7Smyers #define ACPI_RESOURCE_NAME_MEMORY24 0x81 1197186507a7Smyers #define ACPI_RESOURCE_NAME_GENERIC_REGISTER 0x82 1198186507a7Smyers #define ACPI_RESOURCE_NAME_RESERVED_L1 0x83 1199186507a7Smyers #define ACPI_RESOURCE_NAME_VENDOR_LARGE 0x84 1200186507a7Smyers #define ACPI_RESOURCE_NAME_MEMORY32 0x85 1201186507a7Smyers #define ACPI_RESOURCE_NAME_FIXED_MEMORY32 0x86 1202186507a7Smyers #define ACPI_RESOURCE_NAME_ADDRESS32 0x87 1203186507a7Smyers #define ACPI_RESOURCE_NAME_ADDRESS16 0x88 1204186507a7Smyers #define ACPI_RESOURCE_NAME_EXTENDED_IRQ 0x89 1205186507a7Smyers #define ACPI_RESOURCE_NAME_ADDRESS64 0x8A 1206186507a7Smyers #define ACPI_RESOURCE_NAME_EXTENDED_ADDRESS64 0x8B 1207186507a7Smyers #define ACPI_RESOURCE_NAME_LARGE_MAX 0x8B 12087c478bd9Sstevel@tonic-gate 12097c478bd9Sstevel@tonic-gate 12107c478bd9Sstevel@tonic-gate /***************************************************************************** 12117c478bd9Sstevel@tonic-gate * 12127c478bd9Sstevel@tonic-gate * Miscellaneous 12137c478bd9Sstevel@tonic-gate * 12147c478bd9Sstevel@tonic-gate ****************************************************************************/ 12157c478bd9Sstevel@tonic-gate 121627f7c583Smyers #define ACPI_ASCII_ZERO 0x30 12177c478bd9Sstevel@tonic-gate 12187c478bd9Sstevel@tonic-gate 1219*57190917SDana Myers /***************************************************************************** 1220*57190917SDana Myers * 1221*57190917SDana Myers * Disassembler 1222*57190917SDana Myers * 1223*57190917SDana Myers ****************************************************************************/ 1224*57190917SDana Myers 1225*57190917SDana Myers typedef struct acpi_external_list 1226*57190917SDana Myers { 1227*57190917SDana Myers char *Path; 1228*57190917SDana Myers char *InternalPath; 1229*57190917SDana Myers struct acpi_external_list *Next; 1230*57190917SDana Myers UINT32 Value; 1231*57190917SDana Myers UINT16 Length; 1232*57190917SDana Myers UINT8 Type; 1233*57190917SDana Myers UINT8 Flags; 1234*57190917SDana Myers 1235*57190917SDana Myers } ACPI_EXTERNAL_LIST; 1236*57190917SDana Myers 1237*57190917SDana Myers /* Values for Flags field above */ 1238*57190917SDana Myers 1239*57190917SDana Myers #define ACPI_IPATH_ALLOCATED 0x01 1240*57190917SDana Myers 1241*57190917SDana Myers 12427c478bd9Sstevel@tonic-gate /***************************************************************************** 12437c478bd9Sstevel@tonic-gate * 12447c478bd9Sstevel@tonic-gate * Debugger 12457c478bd9Sstevel@tonic-gate * 12467c478bd9Sstevel@tonic-gate ****************************************************************************/ 12477c478bd9Sstevel@tonic-gate 12487c478bd9Sstevel@tonic-gate typedef struct acpi_db_method_info 12497c478bd9Sstevel@tonic-gate { 1250db2bae30SDana Myers ACPI_HANDLE MainThreadGate; 1251db2bae30SDana Myers ACPI_HANDLE ThreadCompleteGate; 1252aa2aa9a6SDana Myers ACPI_HANDLE InfoGate; 1253db2bae30SDana Myers UINT32 *Threads; 1254db2bae30SDana Myers UINT32 NumThreads; 1255db2bae30SDana Myers UINT32 NumCreated; 1256db2bae30SDana Myers UINT32 NumCompleted; 1257db2bae30SDana Myers 125827f7c583Smyers char *Name; 125927f7c583Smyers UINT32 Flags; 126027f7c583Smyers UINT32 NumLoops; 126127f7c583Smyers char Pathname[128]; 1262db2bae30SDana Myers char **Args; 1263db2bae30SDana Myers 1264db2bae30SDana Myers /* 1265db2bae30SDana Myers * Arguments to be passed to method for the command 1266db2bae30SDana Myers * Threads - 1267db2bae30SDana Myers * the Number of threads, ID of current thread and 1268db2bae30SDana Myers * Index of current thread inside all them created. 1269db2bae30SDana Myers */ 1270db2bae30SDana Myers char InitArgs; 1271db2bae30SDana Myers char *Arguments[4]; 1272db2bae30SDana Myers char NumThreadsStr[11]; 1273db2bae30SDana Myers char IdOfThreadStr[11]; 1274db2bae30SDana Myers char IndexOfThreadStr[11]; 12757c478bd9Sstevel@tonic-gate 12767c478bd9Sstevel@tonic-gate } ACPI_DB_METHOD_INFO; 12777c478bd9Sstevel@tonic-gate 12787c478bd9Sstevel@tonic-gate typedef struct acpi_integrity_info 12797c478bd9Sstevel@tonic-gate { 128027f7c583Smyers UINT32 Nodes; 128127f7c583Smyers UINT32 Objects; 12827c478bd9Sstevel@tonic-gate 12837c478bd9Sstevel@tonic-gate } ACPI_INTEGRITY_INFO; 12847c478bd9Sstevel@tonic-gate 12857c478bd9Sstevel@tonic-gate 128627f7c583Smyers #define ACPI_DB_REDIRECTABLE_OUTPUT 0x01 128727f7c583Smyers #define ACPI_DB_CONSOLE_OUTPUT 0x02 128827f7c583Smyers #define ACPI_DB_DUPLICATE_OUTPUT 0x03 12897c478bd9Sstevel@tonic-gate 12907c478bd9Sstevel@tonic-gate 12917c478bd9Sstevel@tonic-gate /***************************************************************************** 12927c478bd9Sstevel@tonic-gate * 12937c478bd9Sstevel@tonic-gate * Debug 12947c478bd9Sstevel@tonic-gate * 12957c478bd9Sstevel@tonic-gate ****************************************************************************/ 12967c478bd9Sstevel@tonic-gate 12977c478bd9Sstevel@tonic-gate /* Entry for a memory allocation (debug only) */ 12987c478bd9Sstevel@tonic-gate 129927f7c583Smyers #define ACPI_MEM_MALLOC 0 130027f7c583Smyers #define ACPI_MEM_CALLOC 1 130127f7c583Smyers #define ACPI_MAX_MODULE_NAME 16 13027c478bd9Sstevel@tonic-gate 13037c478bd9Sstevel@tonic-gate #define ACPI_COMMON_DEBUG_MEM_HEADER \ 130427f7c583Smyers struct acpi_debug_mem_block *Previous; \ 130527f7c583Smyers struct acpi_debug_mem_block *Next; \ 130627f7c583Smyers UINT32 Size; \ 130727f7c583Smyers UINT32 Component; \ 130827f7c583Smyers UINT32 Line; \ 130927f7c583Smyers char Module[ACPI_MAX_MODULE_NAME]; \ 131027f7c583Smyers UINT8 AllocType; 13117c478bd9Sstevel@tonic-gate 13127c478bd9Sstevel@tonic-gate typedef struct acpi_debug_mem_header 13137c478bd9Sstevel@tonic-gate { 13147c478bd9Sstevel@tonic-gate ACPI_COMMON_DEBUG_MEM_HEADER 13157c478bd9Sstevel@tonic-gate 13167c478bd9Sstevel@tonic-gate } ACPI_DEBUG_MEM_HEADER; 13177c478bd9Sstevel@tonic-gate 13187c478bd9Sstevel@tonic-gate typedef struct acpi_debug_mem_block 13197c478bd9Sstevel@tonic-gate { 13207c478bd9Sstevel@tonic-gate ACPI_COMMON_DEBUG_MEM_HEADER 132127f7c583Smyers UINT64 UserSpace; 13227c478bd9Sstevel@tonic-gate 13237c478bd9Sstevel@tonic-gate } ACPI_DEBUG_MEM_BLOCK; 13247c478bd9Sstevel@tonic-gate 13257c478bd9Sstevel@tonic-gate 13267c478bd9Sstevel@tonic-gate #define ACPI_MEM_LIST_GLOBAL 0 13277c478bd9Sstevel@tonic-gate #define ACPI_MEM_LIST_NSNODE 1 1328450d6964Smyers #define ACPI_MEM_LIST_MAX 1 1329450d6964Smyers #define ACPI_NUM_MEM_LISTS 2 13307c478bd9Sstevel@tonic-gate 13317c478bd9Sstevel@tonic-gate 13327c478bd9Sstevel@tonic-gate #endif /* __ACLOCAL_H__ */ 1333