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 7*26f3cdf0SGordon Ross /* 8*26f3cdf0SGordon Ross * Copyright (C) 2000 - 2011, Intel Corp. 97c478bd9Sstevel@tonic-gate * All rights reserved. 107c478bd9Sstevel@tonic-gate * 11*26f3cdf0SGordon Ross * Redistribution and use in source and binary forms, with or without 12*26f3cdf0SGordon Ross * modification, are permitted provided that the following conditions 13*26f3cdf0SGordon Ross * are met: 14*26f3cdf0SGordon Ross * 1. Redistributions of source code must retain the above copyright 15*26f3cdf0SGordon Ross * notice, this list of conditions, and the following disclaimer, 16*26f3cdf0SGordon Ross * without modification. 17*26f3cdf0SGordon Ross * 2. Redistributions in binary form must reproduce at minimum a disclaimer 18*26f3cdf0SGordon Ross * substantially similar to the "NO WARRANTY" disclaimer below 19*26f3cdf0SGordon Ross * ("Disclaimer") and any redistribution must be conditioned upon 20*26f3cdf0SGordon Ross * including a substantially similar Disclaimer requirement for further 21*26f3cdf0SGordon Ross * binary redistribution. 22*26f3cdf0SGordon Ross * 3. Neither the names of the above-listed copyright holders nor the names 23*26f3cdf0SGordon Ross * of any contributors may be used to endorse or promote products derived 24*26f3cdf0SGordon Ross * from this software without specific prior written permission. 257c478bd9Sstevel@tonic-gate * 26*26f3cdf0SGordon Ross * Alternatively, this software may be distributed under the terms of the 27*26f3cdf0SGordon Ross * GNU General Public License ("GPL") version 2 as published by the Free 28*26f3cdf0SGordon Ross * Software Foundation. 297c478bd9Sstevel@tonic-gate * 30*26f3cdf0SGordon Ross * NO WARRANTY 31*26f3cdf0SGordon Ross * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 32*26f3cdf0SGordon Ross * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 33*26f3cdf0SGordon Ross * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR 34*26f3cdf0SGordon Ross * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 35*26f3cdf0SGordon Ross * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 36*26f3cdf0SGordon Ross * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 37*26f3cdf0SGordon Ross * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 38*26f3cdf0SGordon Ross * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 39*26f3cdf0SGordon Ross * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING 40*26f3cdf0SGordon Ross * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 41*26f3cdf0SGordon Ross * POSSIBILITY OF SUCH DAMAGES. 42*26f3cdf0SGordon Ross */ 437c478bd9Sstevel@tonic-gate 447c478bd9Sstevel@tonic-gate #ifndef __ACLOCAL_H__ 457c478bd9Sstevel@tonic-gate #define __ACLOCAL_H__ 467c478bd9Sstevel@tonic-gate 47aa2aa9a6SDana Myers 4827f7c583Smyers /* acpisrc:StructDefs -- for acpisrc conversion */ 497c478bd9Sstevel@tonic-gate 5027f7c583Smyers #define ACPI_SERIALIZED 0xFF 517c478bd9Sstevel@tonic-gate 527c478bd9Sstevel@tonic-gate typedef UINT32 ACPI_MUTEX_HANDLE; 53db2bae30SDana Myers #define ACPI_GLOBAL_LOCK (ACPI_SEMAPHORE) (-1) 547c478bd9Sstevel@tonic-gate 557c478bd9Sstevel@tonic-gate /* Total number of aml opcodes defined */ 567c478bd9Sstevel@tonic-gate 577c478bd9Sstevel@tonic-gate #define AML_NUM_OPCODES 0x7F 587c478bd9Sstevel@tonic-gate 597c478bd9Sstevel@tonic-gate 60450d6964Smyers /* Forward declarations */ 61450d6964Smyers 62450d6964Smyers struct acpi_walk_state; 63450d6964Smyers struct acpi_obj_mutex; 64450d6964Smyers union acpi_parse_object; 65450d6964Smyers 66450d6964Smyers 677c478bd9Sstevel@tonic-gate /***************************************************************************** 687c478bd9Sstevel@tonic-gate * 697c478bd9Sstevel@tonic-gate * Mutex typedefs and structs 707c478bd9Sstevel@tonic-gate * 717c478bd9Sstevel@tonic-gate ****************************************************************************/ 727c478bd9Sstevel@tonic-gate 737c478bd9Sstevel@tonic-gate 747c478bd9Sstevel@tonic-gate /* 757c478bd9Sstevel@tonic-gate * Predefined handles for the mutex objects used within the subsystem 767c478bd9Sstevel@tonic-gate * All mutex objects are automatically created by AcpiUtMutexInitialize. 777c478bd9Sstevel@tonic-gate * 7827f7c583Smyers * The acquire/release ordering protocol is implied via this list. Mutexes 797c478bd9Sstevel@tonic-gate * with a lower value must be acquired before mutexes with a higher value. 807c478bd9Sstevel@tonic-gate * 8127f7c583Smyers * NOTE: any changes here must be reflected in the AcpiGbl_MutexNames 8227f7c583Smyers * table below also! 837c478bd9Sstevel@tonic-gate */ 8427f7c583Smyers #define ACPI_MTX_INTERPRETER 0 /* AML Interpreter, main lock */ 85db2bae30SDana Myers #define ACPI_MTX_NAMESPACE 1 /* ACPI Namespace */ 86db2bae30SDana Myers #define ACPI_MTX_TABLES 2 /* Data for ACPI tables */ 8727f7c583Smyers #define ACPI_MTX_EVENTS 3 /* Data for ACPI events */ 8827f7c583Smyers #define ACPI_MTX_CACHES 4 /* Internal caches, general purposes */ 8927f7c583Smyers #define ACPI_MTX_MEMORY 5 /* Debug memory tracking lists */ 9027f7c583Smyers #define ACPI_MTX_DEBUG_CMD_COMPLETE 6 /* AML debugger */ 9127f7c583Smyers #define ACPI_MTX_DEBUG_CMD_READY 7 /* AML debugger */ 9227f7c583Smyers 9327f7c583Smyers #define ACPI_MAX_MUTEX 7 9427f7c583Smyers #define ACPI_NUM_MUTEX ACPI_MAX_MUTEX+1 957c478bd9Sstevel@tonic-gate 967c478bd9Sstevel@tonic-gate 97aa2aa9a6SDana Myers /* Lock structure for reader/writer interfaces */ 98aa2aa9a6SDana Myers 99aa2aa9a6SDana Myers typedef struct acpi_rw_lock 100aa2aa9a6SDana Myers { 101aa2aa9a6SDana Myers ACPI_MUTEX WriterMutex; 102aa2aa9a6SDana Myers ACPI_MUTEX ReaderMutex; 103aa2aa9a6SDana Myers UINT32 NumReaders; 104aa2aa9a6SDana Myers 105aa2aa9a6SDana Myers } ACPI_RW_LOCK; 106aa2aa9a6SDana Myers 1077c478bd9Sstevel@tonic-gate 10827f7c583Smyers /* 10927f7c583Smyers * Predefined handles for spinlocks used within the subsystem. 11027f7c583Smyers * These spinlocks are created by AcpiUtMutexInitialize 11127f7c583Smyers */ 11227f7c583Smyers #define ACPI_LOCK_GPES 0 11327f7c583Smyers #define ACPI_LOCK_HARDWARE 1 11427f7c583Smyers 11527f7c583Smyers #define ACPI_MAX_LOCK 1 11627f7c583Smyers #define ACPI_NUM_LOCK ACPI_MAX_LOCK+1 11727f7c583Smyers 11827f7c583Smyers 119450d6964Smyers /* This Thread ID means that the mutex is not in use (unlocked) */ 120450d6964Smyers 121aa2aa9a6SDana Myers #define ACPI_MUTEX_NOT_ACQUIRED (ACPI_THREAD_ID) -1 122450d6964Smyers 1237c478bd9Sstevel@tonic-gate /* Table for the global mutexes */ 1247c478bd9Sstevel@tonic-gate 1257c478bd9Sstevel@tonic-gate typedef struct acpi_mutex_info 1267c478bd9Sstevel@tonic-gate { 12727f7c583Smyers ACPI_MUTEX Mutex; 12827f7c583Smyers UINT32 UseCount; 12927f7c583Smyers ACPI_THREAD_ID ThreadId; 1307c478bd9Sstevel@tonic-gate 1317c478bd9Sstevel@tonic-gate } ACPI_MUTEX_INFO; 1327c478bd9Sstevel@tonic-gate 1337c478bd9Sstevel@tonic-gate 1347c478bd9Sstevel@tonic-gate /* Lock flag parameter for various interfaces */ 1357c478bd9Sstevel@tonic-gate 1367c478bd9Sstevel@tonic-gate #define ACPI_MTX_DO_NOT_LOCK 0 1377c478bd9Sstevel@tonic-gate #define ACPI_MTX_LOCK 1 1387c478bd9Sstevel@tonic-gate 1397c478bd9Sstevel@tonic-gate 1407c478bd9Sstevel@tonic-gate /* Field access granularities */ 1417c478bd9Sstevel@tonic-gate 1427c478bd9Sstevel@tonic-gate #define ACPI_FIELD_BYTE_GRANULARITY 1 1437c478bd9Sstevel@tonic-gate #define ACPI_FIELD_WORD_GRANULARITY 2 1447c478bd9Sstevel@tonic-gate #define ACPI_FIELD_DWORD_GRANULARITY 4 1457c478bd9Sstevel@tonic-gate #define ACPI_FIELD_QWORD_GRANULARITY 8 1467c478bd9Sstevel@tonic-gate 1477c478bd9Sstevel@tonic-gate 14827f7c583Smyers #define ACPI_ENTRY_NOT_FOUND NULL 14927f7c583Smyers 15027f7c583Smyers 1517c478bd9Sstevel@tonic-gate /***************************************************************************** 1527c478bd9Sstevel@tonic-gate * 1537c478bd9Sstevel@tonic-gate * Namespace typedefs and structs 1547c478bd9Sstevel@tonic-gate * 1557c478bd9Sstevel@tonic-gate ****************************************************************************/ 1567c478bd9Sstevel@tonic-gate 1577c478bd9Sstevel@tonic-gate /* Operational modes of the AML interpreter/scanner */ 1587c478bd9Sstevel@tonic-gate 1597c478bd9Sstevel@tonic-gate typedef enum 1607c478bd9Sstevel@tonic-gate { 16127f7c583Smyers ACPI_IMODE_LOAD_PASS1 = 0x01, 16227f7c583Smyers ACPI_IMODE_LOAD_PASS2 = 0x02, 163db2bae30SDana Myers ACPI_IMODE_EXECUTE = 0x03 1647c478bd9Sstevel@tonic-gate 1657c478bd9Sstevel@tonic-gate } ACPI_INTERPRETER_MODE; 1667c478bd9Sstevel@tonic-gate 16727f7c583Smyers 16827f7c583Smyers /* 16927f7c583Smyers * The Namespace Node describes a named object that appears in the AML. 17027f7c583Smyers * DescriptorType is used to differentiate between internal descriptors. 17127f7c583Smyers * 17227f7c583Smyers * The node is optimized for both 32-bit and 64-bit platforms: 17327f7c583Smyers * 20 bytes for the 32-bit case, 32 bytes for the 64-bit case. 17427f7c583Smyers * 17527f7c583Smyers * Note: The DescriptorType and Type fields must appear in the identical 17627f7c583Smyers * position in both the ACPI_NAMESPACE_NODE and ACPI_OPERAND_OBJECT 17727f7c583Smyers * structures. 17827f7c583Smyers */ 1797c478bd9Sstevel@tonic-gate typedef struct acpi_namespace_node 1807c478bd9Sstevel@tonic-gate { 18127f7c583Smyers union acpi_operand_object *Object; /* Interpreter object */ 18227f7c583Smyers UINT8 DescriptorType; /* Differentiate object descriptor types */ 18327f7c583Smyers UINT8 Type; /* ACPI Type associated with this name */ 18427f7c583Smyers UINT8 Flags; /* Miscellaneous flags */ 18527f7c583Smyers ACPI_OWNER_ID OwnerId; /* Node creator */ 18627f7c583Smyers ACPI_NAME_UNION Name; /* ACPI Name, always 4 chars per ACPI spec */ 187*26f3cdf0SGordon Ross struct acpi_namespace_node *Parent; /* Parent node */ 18827f7c583Smyers struct acpi_namespace_node *Child; /* First child */ 189*26f3cdf0SGordon Ross struct acpi_namespace_node *Peer; /* First peer */ 19027f7c583Smyers 19127f7c583Smyers /* 19227f7c583Smyers * The following fields are used by the ASL compiler and disassembler only 19327f7c583Smyers */ 19427f7c583Smyers #ifdef ACPI_LARGE_NAMESPACE_NODE 19527f7c583Smyers union acpi_parse_object *Op; 19627f7c583Smyers UINT32 Value; 19727f7c583Smyers UINT32 Length; 198450d6964Smyers #endif 199450d6964Smyers 2007c478bd9Sstevel@tonic-gate } ACPI_NAMESPACE_NODE; 2017c478bd9Sstevel@tonic-gate 2027c478bd9Sstevel@tonic-gate 20327f7c583Smyers /* Namespace Node flags */ 2047c478bd9Sstevel@tonic-gate 205*26f3cdf0SGordon Ross #define ANOBJ_RESERVED 0x01 /* Available for use */ 206db2bae30SDana Myers #define ANOBJ_TEMPORARY 0x02 /* Node is create by a method and is temporary */ 20727f7c583Smyers #define ANOBJ_METHOD_ARG 0x04 /* Node is a method argument */ 20827f7c583Smyers #define ANOBJ_METHOD_LOCAL 0x08 /* Node is a method local */ 20927f7c583Smyers #define ANOBJ_SUBTREE_HAS_INI 0x10 /* Used to optimize device initialization */ 210aa2aa9a6SDana Myers #define ANOBJ_EVALUATED 0x20 /* Set on first evaluation of node */ 211aa2aa9a6SDana Myers #define ANOBJ_ALLOCATED_BUFFER 0x40 /* Method AML buffer is dynamic (InstallMethod) */ 2127c478bd9Sstevel@tonic-gate 21327f7c583Smyers #define ANOBJ_IS_EXTERNAL 0x08 /* iASL only: This object created via External() */ 21427f7c583Smyers #define ANOBJ_METHOD_NO_RETVAL 0x10 /* iASL only: Method has no return value */ 21527f7c583Smyers #define ANOBJ_METHOD_SOME_NO_RETVAL 0x20 /* iASL only: Method has at least one return value */ 21627f7c583Smyers #define ANOBJ_IS_BIT_OFFSET 0x40 /* iASL only: Reference is a bit offset */ 21727f7c583Smyers #define ANOBJ_IS_REFERENCED 0x80 /* iASL only: Object was referenced */ 2187c478bd9Sstevel@tonic-gate 219db2bae30SDana Myers 220*26f3cdf0SGordon Ross /* Internal ACPI table management - master table list */ 221db2bae30SDana Myers 222*26f3cdf0SGordon Ross typedef struct acpi_table_list 2237c478bd9Sstevel@tonic-gate { 224*26f3cdf0SGordon Ross ACPI_TABLE_DESC *Tables; /* Table descriptor array */ 225*26f3cdf0SGordon Ross UINT32 CurrentTableCount; /* Tables currently in the array */ 226*26f3cdf0SGordon Ross UINT32 MaxTableCount; /* Max tables array will hold */ 227db2bae30SDana Myers UINT8 Flags; 228db2bae30SDana Myers 229*26f3cdf0SGordon Ross } ACPI_TABLE_LIST; 230db2bae30SDana Myers 231db2bae30SDana Myers /* Flags for above */ 232db2bae30SDana Myers 233db2bae30SDana Myers #define ACPI_ROOT_ORIGIN_UNKNOWN (0) /* ~ORIGIN_ALLOCATED */ 234db2bae30SDana Myers #define ACPI_ROOT_ORIGIN_ALLOCATED (1) 235db2bae30SDana Myers #define ACPI_ROOT_ALLOW_RESIZE (2) 2367c478bd9Sstevel@tonic-gate 237db2bae30SDana Myers 238db2bae30SDana Myers /* Predefined (fixed) table indexes */ 239db2bae30SDana Myers 240db2bae30SDana Myers #define ACPI_TABLE_INDEX_DSDT (0) 241db2bae30SDana Myers #define ACPI_TABLE_INDEX_FACS (1) 2427c478bd9Sstevel@tonic-gate 2437c478bd9Sstevel@tonic-gate 2447c478bd9Sstevel@tonic-gate typedef struct acpi_find_context 2457c478bd9Sstevel@tonic-gate { 24627f7c583Smyers char *SearchFor; 24727f7c583Smyers ACPI_HANDLE *List; 24827f7c583Smyers UINT32 *Count; 2497c478bd9Sstevel@tonic-gate 2507c478bd9Sstevel@tonic-gate } ACPI_FIND_CONTEXT; 2517c478bd9Sstevel@tonic-gate 2527c478bd9Sstevel@tonic-gate 2537c478bd9Sstevel@tonic-gate typedef struct acpi_ns_search_data 2547c478bd9Sstevel@tonic-gate { 25527f7c583Smyers ACPI_NAMESPACE_NODE *Node; 2567c478bd9Sstevel@tonic-gate 2577c478bd9Sstevel@tonic-gate } ACPI_NS_SEARCH_DATA; 2587c478bd9Sstevel@tonic-gate 2597c478bd9Sstevel@tonic-gate 2607c478bd9Sstevel@tonic-gate /* Object types used during package copies */ 2617c478bd9Sstevel@tonic-gate 2627c478bd9Sstevel@tonic-gate #define ACPI_COPY_TYPE_SIMPLE 0 2637c478bd9Sstevel@tonic-gate #define ACPI_COPY_TYPE_PACKAGE 1 2647c478bd9Sstevel@tonic-gate 26527f7c583Smyers 2667c478bd9Sstevel@tonic-gate /* Info structure used to convert external<->internal namestrings */ 2677c478bd9Sstevel@tonic-gate 2687c478bd9Sstevel@tonic-gate typedef struct acpi_namestring_info 2697c478bd9Sstevel@tonic-gate { 270db2bae30SDana Myers const char *ExternalName; 271db2bae30SDana Myers const char *NextExternalChar; 27227f7c583Smyers char *InternalName; 27327f7c583Smyers UINT32 Length; 27427f7c583Smyers UINT32 NumSegments; 27527f7c583Smyers UINT32 NumCarats; 27627f7c583Smyers BOOLEAN FullyQualified; 2777c478bd9Sstevel@tonic-gate 2787c478bd9Sstevel@tonic-gate } ACPI_NAMESTRING_INFO; 2797c478bd9Sstevel@tonic-gate 2807c478bd9Sstevel@tonic-gate 2817c478bd9Sstevel@tonic-gate /* Field creation info */ 2827c478bd9Sstevel@tonic-gate 2837c478bd9Sstevel@tonic-gate typedef struct acpi_create_field_info 2847c478bd9Sstevel@tonic-gate { 28527f7c583Smyers ACPI_NAMESPACE_NODE *RegionNode; 28627f7c583Smyers ACPI_NAMESPACE_NODE *FieldNode; 28727f7c583Smyers ACPI_NAMESPACE_NODE *RegisterNode; 28827f7c583Smyers ACPI_NAMESPACE_NODE *DataRegisterNode; 28927f7c583Smyers UINT32 BankValue; 29027f7c583Smyers UINT32 FieldBitPosition; 29127f7c583Smyers UINT32 FieldBitLength; 29227f7c583Smyers UINT8 FieldFlags; 29327f7c583Smyers UINT8 Attribute; 29427f7c583Smyers UINT8 FieldType; 2957c478bd9Sstevel@tonic-gate 2967c478bd9Sstevel@tonic-gate } ACPI_CREATE_FIELD_INFO; 2977c478bd9Sstevel@tonic-gate 2987c478bd9Sstevel@tonic-gate 29927f7c583Smyers typedef 30027f7c583Smyers ACPI_STATUS (*ACPI_INTERNAL_METHOD) ( 30127f7c583Smyers struct acpi_walk_state *WalkState); 30227f7c583Smyers 30327f7c583Smyers 30430082d0cSmyers /* 30530082d0cSmyers * Bitmapped ACPI types. Used internally only 30630082d0cSmyers */ 30730082d0cSmyers #define ACPI_BTYPE_ANY 0x00000000 30830082d0cSmyers #define ACPI_BTYPE_INTEGER 0x00000001 30930082d0cSmyers #define ACPI_BTYPE_STRING 0x00000002 31030082d0cSmyers #define ACPI_BTYPE_BUFFER 0x00000004 31130082d0cSmyers #define ACPI_BTYPE_PACKAGE 0x00000008 31230082d0cSmyers #define ACPI_BTYPE_FIELD_UNIT 0x00000010 31330082d0cSmyers #define ACPI_BTYPE_DEVICE 0x00000020 31430082d0cSmyers #define ACPI_BTYPE_EVENT 0x00000040 31530082d0cSmyers #define ACPI_BTYPE_METHOD 0x00000080 31630082d0cSmyers #define ACPI_BTYPE_MUTEX 0x00000100 31730082d0cSmyers #define ACPI_BTYPE_REGION 0x00000200 31830082d0cSmyers #define ACPI_BTYPE_POWER 0x00000400 31930082d0cSmyers #define ACPI_BTYPE_PROCESSOR 0x00000800 32030082d0cSmyers #define ACPI_BTYPE_THERMAL 0x00001000 32130082d0cSmyers #define ACPI_BTYPE_BUFFER_FIELD 0x00002000 32230082d0cSmyers #define ACPI_BTYPE_DDB_HANDLE 0x00004000 32330082d0cSmyers #define ACPI_BTYPE_DEBUG_OBJECT 0x00008000 32430082d0cSmyers #define ACPI_BTYPE_REFERENCE 0x00010000 32530082d0cSmyers #define ACPI_BTYPE_RESOURCE 0x00020000 32630082d0cSmyers 32730082d0cSmyers #define ACPI_BTYPE_COMPUTE_DATA (ACPI_BTYPE_INTEGER | ACPI_BTYPE_STRING | ACPI_BTYPE_BUFFER) 32830082d0cSmyers 32930082d0cSmyers #define ACPI_BTYPE_DATA (ACPI_BTYPE_COMPUTE_DATA | ACPI_BTYPE_PACKAGE) 33030082d0cSmyers #define ACPI_BTYPE_DATA_REFERENCE (ACPI_BTYPE_DATA | ACPI_BTYPE_REFERENCE | ACPI_BTYPE_DDB_HANDLE) 33130082d0cSmyers #define ACPI_BTYPE_DEVICE_OBJECTS (ACPI_BTYPE_DEVICE | ACPI_BTYPE_THERMAL | ACPI_BTYPE_PROCESSOR) 33230082d0cSmyers #define ACPI_BTYPE_OBJECTS_AND_REFS 0x0001FFFF /* ARG or LOCAL */ 33330082d0cSmyers #define ACPI_BTYPE_ALL_OBJECTS 0x0000FFFF 33430082d0cSmyers 33530082d0cSmyers 336aa2aa9a6SDana Myers /* 337aa2aa9a6SDana Myers * Information structure for ACPI predefined names. 338aa2aa9a6SDana Myers * Each entry in the table contains the following items: 339aa2aa9a6SDana Myers * 340aa2aa9a6SDana Myers * Name - The ACPI reserved name 341aa2aa9a6SDana Myers * ParamCount - Number of arguments to the method 342aa2aa9a6SDana Myers * ExpectedReturnBtypes - Allowed type(s) for the return value 343aa2aa9a6SDana Myers */ 344aa2aa9a6SDana Myers typedef struct acpi_name_info 345aa2aa9a6SDana Myers { 346aa2aa9a6SDana Myers char Name[ACPI_NAME_SIZE]; 347aa2aa9a6SDana Myers UINT8 ParamCount; 348aa2aa9a6SDana Myers UINT8 ExpectedBtypes; 349aa2aa9a6SDana Myers 350aa2aa9a6SDana Myers } ACPI_NAME_INFO; 351aa2aa9a6SDana Myers 352aa2aa9a6SDana Myers /* 353aa2aa9a6SDana Myers * Secondary information structures for ACPI predefined objects that return 354aa2aa9a6SDana Myers * package objects. This structure appears as the next entry in the table 355aa2aa9a6SDana Myers * after the NAME_INFO structure above. 356aa2aa9a6SDana Myers * 357aa2aa9a6SDana Myers * The reason for this is to minimize the size of the predefined name table. 358aa2aa9a6SDana Myers */ 359aa2aa9a6SDana Myers 360aa2aa9a6SDana Myers /* 361aa2aa9a6SDana Myers * Used for ACPI_PTYPE1_FIXED, ACPI_PTYPE1_VAR, ACPI_PTYPE2, 362aa2aa9a6SDana Myers * ACPI_PTYPE2_MIN, ACPI_PTYPE2_PKG_COUNT, ACPI_PTYPE2_COUNT 363aa2aa9a6SDana Myers */ 364aa2aa9a6SDana Myers typedef struct acpi_package_info 365aa2aa9a6SDana Myers { 366aa2aa9a6SDana Myers UINT8 Type; 367aa2aa9a6SDana Myers UINT8 ObjectType1; 368aa2aa9a6SDana Myers UINT8 Count1; 369aa2aa9a6SDana Myers UINT8 ObjectType2; 370aa2aa9a6SDana Myers UINT8 Count2; 371aa2aa9a6SDana Myers UINT8 Reserved; 372aa2aa9a6SDana Myers 373aa2aa9a6SDana Myers } ACPI_PACKAGE_INFO; 374aa2aa9a6SDana Myers 375aa2aa9a6SDana Myers /* Used for ACPI_PTYPE2_FIXED */ 376aa2aa9a6SDana Myers 377aa2aa9a6SDana Myers typedef struct acpi_package_info2 378aa2aa9a6SDana Myers { 379aa2aa9a6SDana Myers UINT8 Type; 380aa2aa9a6SDana Myers UINT8 Count; 381aa2aa9a6SDana Myers UINT8 ObjectType[4]; 382aa2aa9a6SDana Myers 383aa2aa9a6SDana Myers } ACPI_PACKAGE_INFO2; 384aa2aa9a6SDana Myers 385aa2aa9a6SDana Myers /* Used for ACPI_PTYPE1_OPTION */ 386aa2aa9a6SDana Myers 387aa2aa9a6SDana Myers typedef struct acpi_package_info3 388aa2aa9a6SDana Myers { 389aa2aa9a6SDana Myers UINT8 Type; 390aa2aa9a6SDana Myers UINT8 Count; 391aa2aa9a6SDana Myers UINT8 ObjectType[2]; 392aa2aa9a6SDana Myers UINT8 TailObjectType; 393aa2aa9a6SDana Myers UINT8 Reserved; 394aa2aa9a6SDana Myers 395aa2aa9a6SDana Myers } ACPI_PACKAGE_INFO3; 396aa2aa9a6SDana Myers 397aa2aa9a6SDana Myers typedef union acpi_predefined_info 398aa2aa9a6SDana Myers { 399aa2aa9a6SDana Myers ACPI_NAME_INFO Info; 400aa2aa9a6SDana Myers ACPI_PACKAGE_INFO RetInfo; 401aa2aa9a6SDana Myers ACPI_PACKAGE_INFO2 RetInfo2; 402aa2aa9a6SDana Myers ACPI_PACKAGE_INFO3 RetInfo3; 403aa2aa9a6SDana Myers 404aa2aa9a6SDana Myers } ACPI_PREDEFINED_INFO; 405aa2aa9a6SDana Myers 40657190917SDana Myers 40757190917SDana Myers /* Data block used during object validation */ 40857190917SDana Myers 40957190917SDana Myers typedef struct acpi_predefined_data 41057190917SDana Myers { 41157190917SDana Myers char *Pathname; 41257190917SDana Myers const ACPI_PREDEFINED_INFO *Predefined; 413*26f3cdf0SGordon Ross union acpi_operand_object *ParentPackage; 41457190917SDana Myers UINT32 Flags; 41557190917SDana Myers UINT8 NodeFlags; 41657190917SDana Myers 41757190917SDana Myers } ACPI_PREDEFINED_DATA; 41857190917SDana Myers 41957190917SDana Myers /* Defines for Flags field above */ 42057190917SDana Myers 42157190917SDana Myers #define ACPI_OBJECT_REPAIRED 1 42257190917SDana Myers 42357190917SDana Myers 424aa2aa9a6SDana Myers /* 425aa2aa9a6SDana Myers * Bitmapped return value types 426aa2aa9a6SDana Myers * Note: the actual data types must be contiguous, a loop in nspredef.c 427aa2aa9a6SDana Myers * depends on this. 428aa2aa9a6SDana Myers */ 429aa2aa9a6SDana Myers #define ACPI_RTYPE_ANY 0x00 430aa2aa9a6SDana Myers #define ACPI_RTYPE_NONE 0x01 431aa2aa9a6SDana Myers #define ACPI_RTYPE_INTEGER 0x02 432aa2aa9a6SDana Myers #define ACPI_RTYPE_STRING 0x04 433aa2aa9a6SDana Myers #define ACPI_RTYPE_BUFFER 0x08 434aa2aa9a6SDana Myers #define ACPI_RTYPE_PACKAGE 0x10 435aa2aa9a6SDana Myers #define ACPI_RTYPE_REFERENCE 0x20 436aa2aa9a6SDana Myers #define ACPI_RTYPE_ALL 0x3F 437aa2aa9a6SDana Myers 438aa2aa9a6SDana Myers #define ACPI_NUM_RTYPES 5 /* Number of actual object types */ 439aa2aa9a6SDana Myers 440aa2aa9a6SDana Myers 4417c478bd9Sstevel@tonic-gate /***************************************************************************** 4427c478bd9Sstevel@tonic-gate * 4437c478bd9Sstevel@tonic-gate * Event typedefs and structs 4447c478bd9Sstevel@tonic-gate * 4457c478bd9Sstevel@tonic-gate ****************************************************************************/ 4467c478bd9Sstevel@tonic-gate 4477c478bd9Sstevel@tonic-gate /* Dispatch info for each GPE -- either a method or handler, cannot be both */ 4487c478bd9Sstevel@tonic-gate 449*26f3cdf0SGordon Ross typedef struct acpi_gpe_handler_info 4507c478bd9Sstevel@tonic-gate { 451*26f3cdf0SGordon Ross ACPI_GPE_HANDLER Address; /* Address of handler, if any */ 4527c478bd9Sstevel@tonic-gate void *Context; /* Context to be passed to handler */ 4537c478bd9Sstevel@tonic-gate ACPI_NAMESPACE_NODE *MethodNode; /* Method node for this GPE level (saved) */ 454*26f3cdf0SGordon Ross UINT8 OriginalFlags; /* Original (pre-handler) GPE info */ 455*26f3cdf0SGordon Ross BOOLEAN OriginallyEnabled; /* True if GPE was originally enabled */ 4567c478bd9Sstevel@tonic-gate 457*26f3cdf0SGordon Ross } ACPI_GPE_HANDLER_INFO; 4587c478bd9Sstevel@tonic-gate 459*26f3cdf0SGordon Ross /* 460*26f3cdf0SGordon Ross * GPE dispatch info. At any time, the GPE can have at most one type 461*26f3cdf0SGordon Ross * of dispatch - Method, Handler, or Implicit Notify. 462*26f3cdf0SGordon Ross */ 4637c478bd9Sstevel@tonic-gate typedef union acpi_gpe_dispatch_info 4647c478bd9Sstevel@tonic-gate { 4657c478bd9Sstevel@tonic-gate ACPI_NAMESPACE_NODE *MethodNode; /* Method node for this GPE level */ 466*26f3cdf0SGordon Ross struct acpi_gpe_handler_info *Handler; /* Installed GPE handler */ 467*26f3cdf0SGordon Ross ACPI_NAMESPACE_NODE *DeviceNode; /* Parent _PRW device for implicit notify */ 4687c478bd9Sstevel@tonic-gate 4697c478bd9Sstevel@tonic-gate } ACPI_GPE_DISPATCH_INFO; 4707c478bd9Sstevel@tonic-gate 4717c478bd9Sstevel@tonic-gate /* 4727c478bd9Sstevel@tonic-gate * Information about a GPE, one per each GPE in an array. 4737c478bd9Sstevel@tonic-gate * NOTE: Important to keep this struct as small as possible. 4747c478bd9Sstevel@tonic-gate */ 4757c478bd9Sstevel@tonic-gate typedef struct acpi_gpe_event_info 4767c478bd9Sstevel@tonic-gate { 4777c478bd9Sstevel@tonic-gate union acpi_gpe_dispatch_info Dispatch; /* Either Method or Handler */ 4787c478bd9Sstevel@tonic-gate struct acpi_gpe_register_info *RegisterInfo; /* Backpointer to register info */ 4797c478bd9Sstevel@tonic-gate UINT8 Flags; /* Misc info about this GPE */ 480db2bae30SDana Myers UINT8 GpeNumber; /* This GPE */ 481*26f3cdf0SGordon Ross UINT8 RuntimeCount; /* References to a run GPE */ 4827c478bd9Sstevel@tonic-gate 4837c478bd9Sstevel@tonic-gate } ACPI_GPE_EVENT_INFO; 4847c478bd9Sstevel@tonic-gate 4857c478bd9Sstevel@tonic-gate /* Information about a GPE register pair, one per each status/enable pair in an array */ 4867c478bd9Sstevel@tonic-gate 4877c478bd9Sstevel@tonic-gate typedef struct acpi_gpe_register_info 4887c478bd9Sstevel@tonic-gate { 4897c478bd9Sstevel@tonic-gate ACPI_GENERIC_ADDRESS StatusAddress; /* Address of status reg */ 4907c478bd9Sstevel@tonic-gate ACPI_GENERIC_ADDRESS EnableAddress; /* Address of enable reg */ 4917c478bd9Sstevel@tonic-gate UINT8 EnableForWake; /* GPEs to keep enabled when sleeping */ 4927c478bd9Sstevel@tonic-gate UINT8 EnableForRun; /* GPEs to keep enabled when running */ 4937c478bd9Sstevel@tonic-gate UINT8 BaseGpeNumber; /* Base GPE number for this register */ 4947c478bd9Sstevel@tonic-gate 4957c478bd9Sstevel@tonic-gate } ACPI_GPE_REGISTER_INFO; 4967c478bd9Sstevel@tonic-gate 4977c478bd9Sstevel@tonic-gate /* 4987c478bd9Sstevel@tonic-gate * Information about a GPE register block, one per each installed block -- 4997c478bd9Sstevel@tonic-gate * GPE0, GPE1, and one per each installed GPE Block Device. 5007c478bd9Sstevel@tonic-gate */ 5017c478bd9Sstevel@tonic-gate typedef struct acpi_gpe_block_info 5027c478bd9Sstevel@tonic-gate { 5037c478bd9Sstevel@tonic-gate ACPI_NAMESPACE_NODE *Node; 5047c478bd9Sstevel@tonic-gate struct acpi_gpe_block_info *Previous; 5057c478bd9Sstevel@tonic-gate struct acpi_gpe_block_info *Next; 5067c478bd9Sstevel@tonic-gate struct acpi_gpe_xrupt_info *XruptBlock; /* Backpointer to interrupt block */ 5077c478bd9Sstevel@tonic-gate ACPI_GPE_REGISTER_INFO *RegisterInfo; /* One per GPE register pair */ 5087c478bd9Sstevel@tonic-gate ACPI_GPE_EVENT_INFO *EventInfo; /* One for each GPE */ 5097c478bd9Sstevel@tonic-gate ACPI_GENERIC_ADDRESS BlockAddress; /* Base address of the block */ 5107c478bd9Sstevel@tonic-gate UINT32 RegisterCount; /* Number of register pairs in block */ 511*26f3cdf0SGordon Ross UINT16 GpeCount; /* Number of individual GPEs in block */ 5127c478bd9Sstevel@tonic-gate UINT8 BlockBaseNumber;/* Base GPE number for this block */ 513*26f3cdf0SGordon Ross BOOLEAN Initialized; /* TRUE if this block is initialized */ 5147c478bd9Sstevel@tonic-gate 5157c478bd9Sstevel@tonic-gate } ACPI_GPE_BLOCK_INFO; 5167c478bd9Sstevel@tonic-gate 5177c478bd9Sstevel@tonic-gate /* Information about GPE interrupt handlers, one per each interrupt level used for GPEs */ 5187c478bd9Sstevel@tonic-gate 5197c478bd9Sstevel@tonic-gate typedef struct acpi_gpe_xrupt_info 5207c478bd9Sstevel@tonic-gate { 5217c478bd9Sstevel@tonic-gate struct acpi_gpe_xrupt_info *Previous; 5227c478bd9Sstevel@tonic-gate struct acpi_gpe_xrupt_info *Next; 5237c478bd9Sstevel@tonic-gate ACPI_GPE_BLOCK_INFO *GpeBlockListHead; /* List of GPE blocks for this xrupt */ 524450d6964Smyers UINT32 InterruptNumber; /* System interrupt number */ 5257c478bd9Sstevel@tonic-gate 5267c478bd9Sstevel@tonic-gate } ACPI_GPE_XRUPT_INFO; 5277c478bd9Sstevel@tonic-gate 5287c478bd9Sstevel@tonic-gate typedef struct acpi_gpe_walk_info 5297c478bd9Sstevel@tonic-gate { 5307c478bd9Sstevel@tonic-gate ACPI_NAMESPACE_NODE *GpeDevice; 5317c478bd9Sstevel@tonic-gate ACPI_GPE_BLOCK_INFO *GpeBlock; 532*26f3cdf0SGordon Ross UINT16 Count; 533*26f3cdf0SGordon Ross ACPI_OWNER_ID OwnerId; 534*26f3cdf0SGordon Ross BOOLEAN ExecuteByOwnerId; 5357c478bd9Sstevel@tonic-gate 5367c478bd9Sstevel@tonic-gate } ACPI_GPE_WALK_INFO; 5377c478bd9Sstevel@tonic-gate 538aa2aa9a6SDana Myers typedef struct acpi_gpe_device_info 539aa2aa9a6SDana Myers { 540aa2aa9a6SDana Myers UINT32 Index; 541aa2aa9a6SDana Myers UINT32 NextBlockBaseIndex; 542aa2aa9a6SDana Myers ACPI_STATUS Status; 543aa2aa9a6SDana Myers ACPI_NAMESPACE_NODE *GpeDevice; 544aa2aa9a6SDana Myers 545aa2aa9a6SDana Myers } ACPI_GPE_DEVICE_INFO; 5467c478bd9Sstevel@tonic-gate 5477c478bd9Sstevel@tonic-gate typedef ACPI_STATUS (*ACPI_GPE_CALLBACK) ( 54827f7c583Smyers ACPI_GPE_XRUPT_INFO *GpeXruptInfo, 549aa2aa9a6SDana Myers ACPI_GPE_BLOCK_INFO *GpeBlock, 550aa2aa9a6SDana Myers void *Context); 5517c478bd9Sstevel@tonic-gate 5527c478bd9Sstevel@tonic-gate 5537c478bd9Sstevel@tonic-gate /* Information about each particular fixed event */ 5547c478bd9Sstevel@tonic-gate 5557c478bd9Sstevel@tonic-gate typedef struct acpi_fixed_event_handler 5567c478bd9Sstevel@tonic-gate { 55727f7c583Smyers ACPI_EVENT_HANDLER Handler; /* Address of handler. */ 55827f7c583Smyers void *Context; /* Context to be passed to handler */ 5597c478bd9Sstevel@tonic-gate 5607c478bd9Sstevel@tonic-gate } ACPI_FIXED_EVENT_HANDLER; 5617c478bd9Sstevel@tonic-gate 5627c478bd9Sstevel@tonic-gate typedef struct acpi_fixed_event_info 5637c478bd9Sstevel@tonic-gate { 56427f7c583Smyers UINT8 StatusRegisterId; 56527f7c583Smyers UINT8 EnableRegisterId; 56627f7c583Smyers UINT16 StatusBitMask; 56727f7c583Smyers UINT16 EnableBitMask; 5687c478bd9Sstevel@tonic-gate 5697c478bd9Sstevel@tonic-gate } ACPI_FIXED_EVENT_INFO; 5707c478bd9Sstevel@tonic-gate 5717c478bd9Sstevel@tonic-gate /* Information used during field processing */ 5727c478bd9Sstevel@tonic-gate 5737c478bd9Sstevel@tonic-gate typedef struct acpi_field_info 5747c478bd9Sstevel@tonic-gate { 57527f7c583Smyers UINT8 SkipField; 57627f7c583Smyers UINT8 FieldFlag; 57727f7c583Smyers UINT32 PkgLength; 5787c478bd9Sstevel@tonic-gate 5797c478bd9Sstevel@tonic-gate } ACPI_FIELD_INFO; 5807c478bd9Sstevel@tonic-gate 5817c478bd9Sstevel@tonic-gate 5827c478bd9Sstevel@tonic-gate /***************************************************************************** 5837c478bd9Sstevel@tonic-gate * 5847c478bd9Sstevel@tonic-gate * Generic "state" object for stacks 5857c478bd9Sstevel@tonic-gate * 5867c478bd9Sstevel@tonic-gate ****************************************************************************/ 5877c478bd9Sstevel@tonic-gate 5887c478bd9Sstevel@tonic-gate #define ACPI_CONTROL_NORMAL 0xC0 5897c478bd9Sstevel@tonic-gate #define ACPI_CONTROL_CONDITIONAL_EXECUTING 0xC1 5907c478bd9Sstevel@tonic-gate #define ACPI_CONTROL_PREDICATE_EXECUTING 0xC2 5917c478bd9Sstevel@tonic-gate #define ACPI_CONTROL_PREDICATE_FALSE 0xC3 5927c478bd9Sstevel@tonic-gate #define ACPI_CONTROL_PREDICATE_TRUE 0xC4 5937c478bd9Sstevel@tonic-gate 5947c478bd9Sstevel@tonic-gate 59527f7c583Smyers #define ACPI_STATE_COMMON \ 59627f7c583Smyers void *Next; \ 59727f7c583Smyers UINT8 DescriptorType; /* To differentiate various internal objs */\ 59827f7c583Smyers UINT8 Flags; \ 59927f7c583Smyers UINT16 Value; \ 60027f7c583Smyers UINT16 State; 60127f7c583Smyers 60227f7c583Smyers /* There are 2 bytes available here until the next natural alignment boundary */ 6037c478bd9Sstevel@tonic-gate 6047c478bd9Sstevel@tonic-gate typedef struct acpi_common_state 6057c478bd9Sstevel@tonic-gate { 6067c478bd9Sstevel@tonic-gate ACPI_STATE_COMMON 6077c478bd9Sstevel@tonic-gate } ACPI_COMMON_STATE; 6087c478bd9Sstevel@tonic-gate 6097c478bd9Sstevel@tonic-gate 6107c478bd9Sstevel@tonic-gate /* 6117c478bd9Sstevel@tonic-gate * Update state - used to traverse complex objects such as packages 6127c478bd9Sstevel@tonic-gate */ 6137c478bd9Sstevel@tonic-gate typedef struct acpi_update_state 6147c478bd9Sstevel@tonic-gate { 6157c478bd9Sstevel@tonic-gate ACPI_STATE_COMMON 61627f7c583Smyers union acpi_operand_object *Object; 6177c478bd9Sstevel@tonic-gate 6187c478bd9Sstevel@tonic-gate } ACPI_UPDATE_STATE; 6197c478bd9Sstevel@tonic-gate 6207c478bd9Sstevel@tonic-gate 6217c478bd9Sstevel@tonic-gate /* 6227c478bd9Sstevel@tonic-gate * Pkg state - used to traverse nested package structures 6237c478bd9Sstevel@tonic-gate */ 6247c478bd9Sstevel@tonic-gate typedef struct acpi_pkg_state 6257c478bd9Sstevel@tonic-gate { 6267c478bd9Sstevel@tonic-gate ACPI_STATE_COMMON 62727f7c583Smyers UINT16 Index; 62827f7c583Smyers union acpi_operand_object *SourceObject; 62927f7c583Smyers union acpi_operand_object *DestObject; 63027f7c583Smyers struct acpi_walk_state *WalkState; 63127f7c583Smyers void *ThisTargetObj; 63227f7c583Smyers UINT32 NumPackages; 6337c478bd9Sstevel@tonic-gate 6347c478bd9Sstevel@tonic-gate } ACPI_PKG_STATE; 6357c478bd9Sstevel@tonic-gate 6367c478bd9Sstevel@tonic-gate 6377c478bd9Sstevel@tonic-gate /* 6387c478bd9Sstevel@tonic-gate * Control state - one per if/else and while constructs. 6397c478bd9Sstevel@tonic-gate * Allows nesting of these constructs 6407c478bd9Sstevel@tonic-gate */ 6417c478bd9Sstevel@tonic-gate typedef struct acpi_control_state 6427c478bd9Sstevel@tonic-gate { 6437c478bd9Sstevel@tonic-gate ACPI_STATE_COMMON 64427f7c583Smyers UINT16 Opcode; 64527f7c583Smyers union acpi_parse_object *PredicateOp; 64627f7c583Smyers UINT8 *AmlPredicateStart; /* Start of if/while predicate */ 64727f7c583Smyers UINT8 *PackageEnd; /* End of if/while block */ 648aa2aa9a6SDana Myers UINT32 LoopCount; /* While() loop counter */ 6497c478bd9Sstevel@tonic-gate 6507c478bd9Sstevel@tonic-gate } ACPI_CONTROL_STATE; 6517c478bd9Sstevel@tonic-gate 6527c478bd9Sstevel@tonic-gate 6537c478bd9Sstevel@tonic-gate /* 6547c478bd9Sstevel@tonic-gate * Scope state - current scope during namespace lookups 6557c478bd9Sstevel@tonic-gate */ 6567c478bd9Sstevel@tonic-gate typedef struct acpi_scope_state 6577c478bd9Sstevel@tonic-gate { 6587c478bd9Sstevel@tonic-gate ACPI_STATE_COMMON 65927f7c583Smyers ACPI_NAMESPACE_NODE *Node; 6607c478bd9Sstevel@tonic-gate 6617c478bd9Sstevel@tonic-gate } ACPI_SCOPE_STATE; 6627c478bd9Sstevel@tonic-gate 6637c478bd9Sstevel@tonic-gate 6647c478bd9Sstevel@tonic-gate typedef struct acpi_pscope_state 6657c478bd9Sstevel@tonic-gate { 6667c478bd9Sstevel@tonic-gate ACPI_STATE_COMMON 66727f7c583Smyers UINT32 ArgCount; /* Number of fixed arguments */ 66827f7c583Smyers union acpi_parse_object *Op; /* Current op being parsed */ 66927f7c583Smyers UINT8 *ArgEnd; /* Current argument end */ 67027f7c583Smyers UINT8 *PkgEnd; /* Current package end */ 67127f7c583Smyers UINT32 ArgList; /* Next argument to parse */ 6727c478bd9Sstevel@tonic-gate 6737c478bd9Sstevel@tonic-gate } ACPI_PSCOPE_STATE; 6747c478bd9Sstevel@tonic-gate 6757c478bd9Sstevel@tonic-gate 6767c478bd9Sstevel@tonic-gate /* 6777c478bd9Sstevel@tonic-gate * Thread state - one per thread across multiple walk states. Multiple walk 6787c478bd9Sstevel@tonic-gate * states are created when there are nested control methods executing. 6797c478bd9Sstevel@tonic-gate */ 6807c478bd9Sstevel@tonic-gate typedef struct acpi_thread_state 6817c478bd9Sstevel@tonic-gate { 6827c478bd9Sstevel@tonic-gate ACPI_STATE_COMMON 68327f7c583Smyers UINT8 CurrentSyncLevel; /* Mutex Sync (nested acquire) level */ 68427f7c583Smyers struct acpi_walk_state *WalkStateList; /* Head of list of WalkStates for this thread */ 68527f7c583Smyers union acpi_operand_object *AcquiredMutexList; /* List of all currently acquired mutexes */ 68627f7c583Smyers ACPI_THREAD_ID ThreadId; /* Running thread ID */ 6877c478bd9Sstevel@tonic-gate 6887c478bd9Sstevel@tonic-gate } ACPI_THREAD_STATE; 6897c478bd9Sstevel@tonic-gate 6907c478bd9Sstevel@tonic-gate 6917c478bd9Sstevel@tonic-gate /* 6927c478bd9Sstevel@tonic-gate * Result values - used to accumulate the results of nested 6937c478bd9Sstevel@tonic-gate * AML arguments 6947c478bd9Sstevel@tonic-gate */ 6957c478bd9Sstevel@tonic-gate typedef struct acpi_result_values 6967c478bd9Sstevel@tonic-gate { 6977c478bd9Sstevel@tonic-gate ACPI_STATE_COMMON 698db2bae30SDana Myers union acpi_operand_object *ObjDesc [ACPI_RESULTS_FRAME_OBJ_NUM]; 6997c478bd9Sstevel@tonic-gate 7007c478bd9Sstevel@tonic-gate } ACPI_RESULT_VALUES; 7017c478bd9Sstevel@tonic-gate 7027c478bd9Sstevel@tonic-gate 7037c478bd9Sstevel@tonic-gate typedef 7047c478bd9Sstevel@tonic-gate ACPI_STATUS (*ACPI_PARSE_DOWNWARDS) ( 70527f7c583Smyers struct acpi_walk_state *WalkState, 70627f7c583Smyers union acpi_parse_object **OutOp); 7077c478bd9Sstevel@tonic-gate 7087c478bd9Sstevel@tonic-gate typedef 7097c478bd9Sstevel@tonic-gate ACPI_STATUS (*ACPI_PARSE_UPWARDS) ( 71027f7c583Smyers struct acpi_walk_state *WalkState); 7117c478bd9Sstevel@tonic-gate 7127c478bd9Sstevel@tonic-gate 7137c478bd9Sstevel@tonic-gate /* 7147c478bd9Sstevel@tonic-gate * Notify info - used to pass info to the deferred notify 7157c478bd9Sstevel@tonic-gate * handler/dispatcher. 7167c478bd9Sstevel@tonic-gate */ 7177c478bd9Sstevel@tonic-gate typedef struct acpi_notify_info 7187c478bd9Sstevel@tonic-gate { 7197c478bd9Sstevel@tonic-gate ACPI_STATE_COMMON 72027f7c583Smyers ACPI_NAMESPACE_NODE *Node; 72127f7c583Smyers union acpi_operand_object *HandlerObj; 7227c478bd9Sstevel@tonic-gate 7237c478bd9Sstevel@tonic-gate } ACPI_NOTIFY_INFO; 7247c478bd9Sstevel@tonic-gate 7257c478bd9Sstevel@tonic-gate 7267c478bd9Sstevel@tonic-gate /* Generic state is union of structs above */ 7277c478bd9Sstevel@tonic-gate 7287c478bd9Sstevel@tonic-gate typedef union acpi_generic_state 7297c478bd9Sstevel@tonic-gate { 73027f7c583Smyers ACPI_COMMON_STATE Common; 73127f7c583Smyers ACPI_CONTROL_STATE Control; 73227f7c583Smyers ACPI_UPDATE_STATE Update; 73327f7c583Smyers ACPI_SCOPE_STATE Scope; 73427f7c583Smyers ACPI_PSCOPE_STATE ParseScope; 73527f7c583Smyers ACPI_PKG_STATE Pkg; 73627f7c583Smyers ACPI_THREAD_STATE Thread; 73727f7c583Smyers ACPI_RESULT_VALUES Results; 73827f7c583Smyers ACPI_NOTIFY_INFO Notify; 7397c478bd9Sstevel@tonic-gate 7407c478bd9Sstevel@tonic-gate } ACPI_GENERIC_STATE; 7417c478bd9Sstevel@tonic-gate 7427c478bd9Sstevel@tonic-gate 7437c478bd9Sstevel@tonic-gate /***************************************************************************** 7447c478bd9Sstevel@tonic-gate * 7457c478bd9Sstevel@tonic-gate * Interpreter typedefs and structs 7467c478bd9Sstevel@tonic-gate * 7477c478bd9Sstevel@tonic-gate ****************************************************************************/ 7487c478bd9Sstevel@tonic-gate 7497c478bd9Sstevel@tonic-gate typedef 7507c478bd9Sstevel@tonic-gate ACPI_STATUS (*ACPI_EXECUTE_OP) ( 75127f7c583Smyers struct acpi_walk_state *WalkState); 7527c478bd9Sstevel@tonic-gate 7537c478bd9Sstevel@tonic-gate 7547c478bd9Sstevel@tonic-gate /***************************************************************************** 7557c478bd9Sstevel@tonic-gate * 7567c478bd9Sstevel@tonic-gate * Parser typedefs and structs 7577c478bd9Sstevel@tonic-gate * 7587c478bd9Sstevel@tonic-gate ****************************************************************************/ 7597c478bd9Sstevel@tonic-gate 7607c478bd9Sstevel@tonic-gate /* 7617c478bd9Sstevel@tonic-gate * AML opcode, name, and argument layout 7627c478bd9Sstevel@tonic-gate */ 7637c478bd9Sstevel@tonic-gate typedef struct acpi_opcode_info 7647c478bd9Sstevel@tonic-gate { 7657c478bd9Sstevel@tonic-gate #if defined(ACPI_DISASSEMBLER) || defined(ACPI_DEBUG_OUTPUT) 76627f7c583Smyers char *Name; /* Opcode name (disassembler/debug only) */ 7677c478bd9Sstevel@tonic-gate #endif 76827f7c583Smyers UINT32 ParseArgs; /* Grammar/Parse time arguments */ 76927f7c583Smyers UINT32 RuntimeArgs; /* Interpret time arguments */ 77027f7c583Smyers UINT16 Flags; /* Misc flags */ 77127f7c583Smyers UINT8 ObjectType; /* Corresponding internal object type */ 77227f7c583Smyers UINT8 Class; /* Opcode class */ 77327f7c583Smyers UINT8 Type; /* Opcode type */ 7747c478bd9Sstevel@tonic-gate 7757c478bd9Sstevel@tonic-gate } ACPI_OPCODE_INFO; 7767c478bd9Sstevel@tonic-gate 7777c478bd9Sstevel@tonic-gate typedef union acpi_parse_value 7787c478bd9Sstevel@tonic-gate { 779*26f3cdf0SGordon Ross UINT64 Integer; /* Integer constant (Up to 64 bits) */ 78027f7c583Smyers UINT32 Size; /* bytelist or field size */ 78127f7c583Smyers char *String; /* NULL terminated string */ 78227f7c583Smyers UINT8 *Buffer; /* buffer or string */ 78327f7c583Smyers char *Name; /* NULL terminated string */ 78427f7c583Smyers union acpi_parse_object *Arg; /* arguments and contained ops */ 7857c478bd9Sstevel@tonic-gate 7867c478bd9Sstevel@tonic-gate } ACPI_PARSE_VALUE; 7877c478bd9Sstevel@tonic-gate 788aa2aa9a6SDana Myers 789aa2aa9a6SDana Myers #ifdef ACPI_DISASSEMBLER 790aa2aa9a6SDana Myers #define ACPI_DISASM_ONLY_MEMBERS(a) a; 791aa2aa9a6SDana Myers #else 792aa2aa9a6SDana Myers #define ACPI_DISASM_ONLY_MEMBERS(a) 793aa2aa9a6SDana Myers #endif 794aa2aa9a6SDana Myers 7957c478bd9Sstevel@tonic-gate #define ACPI_PARSE_COMMON \ 79627f7c583Smyers union acpi_parse_object *Parent; /* Parent op */\ 79727f7c583Smyers UINT8 DescriptorType; /* To differentiate various internal objs */\ 79827f7c583Smyers UINT8 Flags; /* Type of Op */\ 79927f7c583Smyers UINT16 AmlOpcode; /* AML opcode */\ 80027f7c583Smyers UINT32 AmlOffset; /* Offset of declaration in AML */\ 80127f7c583Smyers union acpi_parse_object *Next; /* Next op */\ 80227f7c583Smyers ACPI_NAMESPACE_NODE *Node; /* For use by interpreter */\ 80327f7c583Smyers ACPI_PARSE_VALUE Value; /* Value or args associated with the opcode */\ 804db2bae30SDana Myers UINT8 ArgListLength; /* Number of elements in the arg list */\ 8057c478bd9Sstevel@tonic-gate ACPI_DISASM_ONLY_MEMBERS (\ 80627f7c583Smyers UINT8 DisasmFlags; /* Used during AML disassembly */\ 80727f7c583Smyers UINT8 DisasmOpcode; /* Subtype used for disassembly */\ 80827f7c583Smyers char AmlOpName[16]) /* Op name (debug only) */ 8097c478bd9Sstevel@tonic-gate 8107c478bd9Sstevel@tonic-gate 81127f7c583Smyers #define ACPI_DASM_BUFFER 0x00 81227f7c583Smyers #define ACPI_DASM_RESOURCE 0x01 81327f7c583Smyers #define ACPI_DASM_STRING 0x02 81427f7c583Smyers #define ACPI_DASM_UNICODE 0x03 81527f7c583Smyers #define ACPI_DASM_EISAID 0x04 81627f7c583Smyers #define ACPI_DASM_MATCHOP 0x05 81727f7c583Smyers #define ACPI_DASM_LNOT_PREFIX 0x06 81827f7c583Smyers #define ACPI_DASM_LNOT_SUFFIX 0x07 81927f7c583Smyers #define ACPI_DASM_IGNORE 0x08 8207c478bd9Sstevel@tonic-gate 8217c478bd9Sstevel@tonic-gate /* 82227f7c583Smyers * Generic operation (for example: If, While, Store) 8237c478bd9Sstevel@tonic-gate */ 8247c478bd9Sstevel@tonic-gate typedef struct acpi_parse_obj_common 8257c478bd9Sstevel@tonic-gate { 8267c478bd9Sstevel@tonic-gate ACPI_PARSE_COMMON 8277c478bd9Sstevel@tonic-gate } ACPI_PARSE_OBJ_COMMON; 8287c478bd9Sstevel@tonic-gate 8297c478bd9Sstevel@tonic-gate 8307c478bd9Sstevel@tonic-gate /* 8317c478bd9Sstevel@tonic-gate * Extended Op for named ops (Scope, Method, etc.), deferred ops (Methods and OpRegions), 8327c478bd9Sstevel@tonic-gate * and bytelists. 8337c478bd9Sstevel@tonic-gate */ 8347c478bd9Sstevel@tonic-gate typedef struct acpi_parse_obj_named 8357c478bd9Sstevel@tonic-gate { 8367c478bd9Sstevel@tonic-gate ACPI_PARSE_COMMON 83727f7c583Smyers UINT8 *Path; 83827f7c583Smyers UINT8 *Data; /* AML body or bytelist data */ 83927f7c583Smyers UINT32 Length; /* AML length */ 84027f7c583Smyers UINT32 Name; /* 4-byte name or zero if no name */ 8417c478bd9Sstevel@tonic-gate 8427c478bd9Sstevel@tonic-gate } ACPI_PARSE_OBJ_NAMED; 8437c478bd9Sstevel@tonic-gate 8447c478bd9Sstevel@tonic-gate 84527f7c583Smyers /* This version is used by the iASL compiler only */ 8467c478bd9Sstevel@tonic-gate 84730082d0cSmyers #define ACPI_MAX_PARSEOP_NAME 20 84830082d0cSmyers 8497c478bd9Sstevel@tonic-gate typedef struct acpi_parse_obj_asl 8507c478bd9Sstevel@tonic-gate { 8517c478bd9Sstevel@tonic-gate ACPI_PARSE_COMMON 85227f7c583Smyers union acpi_parse_object *Child; 85327f7c583Smyers union acpi_parse_object *ParentMethod; 85427f7c583Smyers char *Filename; 85527f7c583Smyers char *ExternalName; 85627f7c583Smyers char *Namepath; 85727f7c583Smyers char NameSeg[4]; 85827f7c583Smyers UINT32 ExtraValue; 85927f7c583Smyers UINT32 Column; 86027f7c583Smyers UINT32 LineNumber; 86127f7c583Smyers UINT32 LogicalLineNumber; 86227f7c583Smyers UINT32 LogicalByteOffset; 86327f7c583Smyers UINT32 EndLine; 86427f7c583Smyers UINT32 EndLogicalLine; 86527f7c583Smyers UINT32 AcpiBtype; 86627f7c583Smyers UINT32 AmlLength; 86727f7c583Smyers UINT32 AmlSubtreeLength; 86827f7c583Smyers UINT32 FinalAmlLength; 86927f7c583Smyers UINT32 FinalAmlOffset; 87027f7c583Smyers UINT32 CompileFlags; 87127f7c583Smyers UINT16 ParseOpcode; 87227f7c583Smyers UINT8 AmlOpcodeLength; 87327f7c583Smyers UINT8 AmlPkgLenBytes; 87427f7c583Smyers UINT8 Extra; 87527f7c583Smyers char ParseOpName[ACPI_MAX_PARSEOP_NAME]; 8767c478bd9Sstevel@tonic-gate 8777c478bd9Sstevel@tonic-gate } ACPI_PARSE_OBJ_ASL; 8787c478bd9Sstevel@tonic-gate 8797c478bd9Sstevel@tonic-gate typedef union acpi_parse_object 8807c478bd9Sstevel@tonic-gate { 88127f7c583Smyers ACPI_PARSE_OBJ_COMMON Common; 88227f7c583Smyers ACPI_PARSE_OBJ_NAMED Named; 88327f7c583Smyers ACPI_PARSE_OBJ_ASL Asl; 8847c478bd9Sstevel@tonic-gate 8857c478bd9Sstevel@tonic-gate } ACPI_PARSE_OBJECT; 8867c478bd9Sstevel@tonic-gate 8877c478bd9Sstevel@tonic-gate 8887c478bd9Sstevel@tonic-gate /* 8897c478bd9Sstevel@tonic-gate * Parse state - one state per parser invocation and each control 8907c478bd9Sstevel@tonic-gate * method. 8917c478bd9Sstevel@tonic-gate */ 8927c478bd9Sstevel@tonic-gate typedef struct acpi_parse_state 8937c478bd9Sstevel@tonic-gate { 89427f7c583Smyers UINT8 *AmlStart; /* First AML byte */ 89527f7c583Smyers UINT8 *Aml; /* Next AML byte */ 89627f7c583Smyers UINT8 *AmlEnd; /* (last + 1) AML byte */ 89727f7c583Smyers UINT8 *PkgStart; /* Current package begin */ 89827f7c583Smyers UINT8 *PkgEnd; /* Current package end */ 89927f7c583Smyers union acpi_parse_object *StartOp; /* Root of parse tree */ 90027f7c583Smyers struct acpi_namespace_node *StartNode; 90127f7c583Smyers union acpi_generic_state *Scope; /* Current scope */ 90227f7c583Smyers union acpi_parse_object *StartScope; 90327f7c583Smyers UINT32 AmlSize; 9047c478bd9Sstevel@tonic-gate 9057c478bd9Sstevel@tonic-gate } ACPI_PARSE_STATE; 9067c478bd9Sstevel@tonic-gate 9077c478bd9Sstevel@tonic-gate 9087c478bd9Sstevel@tonic-gate /* Parse object flags */ 9097c478bd9Sstevel@tonic-gate 91027f7c583Smyers #define ACPI_PARSEOP_GENERIC 0x01 91127f7c583Smyers #define ACPI_PARSEOP_NAMED 0x02 91227f7c583Smyers #define ACPI_PARSEOP_DEFERRED 0x04 91327f7c583Smyers #define ACPI_PARSEOP_BYTELIST 0x08 914db2bae30SDana Myers #define ACPI_PARSEOP_IN_STACK 0x10 915db2bae30SDana Myers #define ACPI_PARSEOP_TARGET 0x20 91627f7c583Smyers #define ACPI_PARSEOP_IN_CACHE 0x80 9177c478bd9Sstevel@tonic-gate 9187c478bd9Sstevel@tonic-gate /* Parse object DisasmFlags */ 9197c478bd9Sstevel@tonic-gate 92027f7c583Smyers #define ACPI_PARSEOP_IGNORE 0x01 92127f7c583Smyers #define ACPI_PARSEOP_PARAMLIST 0x02 92227f7c583Smyers #define ACPI_PARSEOP_EMPTY_TERMLIST 0x04 92327f7c583Smyers #define ACPI_PARSEOP_SPECIAL 0x10 9247c478bd9Sstevel@tonic-gate 9257c478bd9Sstevel@tonic-gate 9267c478bd9Sstevel@tonic-gate /***************************************************************************** 9277c478bd9Sstevel@tonic-gate * 9287c478bd9Sstevel@tonic-gate * Hardware (ACPI registers) and PNP 9297c478bd9Sstevel@tonic-gate * 9307c478bd9Sstevel@tonic-gate ****************************************************************************/ 9317c478bd9Sstevel@tonic-gate 9327c478bd9Sstevel@tonic-gate typedef struct acpi_bit_register_info 9337c478bd9Sstevel@tonic-gate { 93427f7c583Smyers UINT8 ParentRegister; 93527f7c583Smyers UINT8 BitPosition; 93627f7c583Smyers UINT16 AccessBitMask; 9377c478bd9Sstevel@tonic-gate 9387c478bd9Sstevel@tonic-gate } ACPI_BIT_REGISTER_INFO; 9397c478bd9Sstevel@tonic-gate 9407c478bd9Sstevel@tonic-gate 94127f7c583Smyers /* 94227f7c583Smyers * Some ACPI registers have bits that must be ignored -- meaning that they 94327f7c583Smyers * must be preserved. 94427f7c583Smyers */ 94527f7c583Smyers #define ACPI_PM1_STATUS_PRESERVED_BITS 0x0800 /* Bit 11 */ 94627f7c583Smyers 947aa2aa9a6SDana Myers /* Write-only bits must be zeroed by software */ 948aa2aa9a6SDana Myers 949aa2aa9a6SDana Myers #define ACPI_PM1_CONTROL_WRITEONLY_BITS 0x2004 /* Bits 13, 2 */ 950aa2aa9a6SDana Myers 951aa2aa9a6SDana Myers /* For control registers, both ignored and reserved bits must be preserved */ 952aa2aa9a6SDana Myers 953aa2aa9a6SDana Myers /* 954aa2aa9a6SDana Myers * For PM1 control, the SCI enable bit (bit 0, SCI_EN) is defined by the 955aa2aa9a6SDana Myers * ACPI specification to be a "preserved" bit - "OSPM always preserves this 956aa2aa9a6SDana Myers * bit position", section 4.7.3.2.1. However, on some machines the OS must 957aa2aa9a6SDana Myers * write a one to this bit after resume for the machine to work properly. 958aa2aa9a6SDana Myers * To enable this, we no longer attempt to preserve this bit. No machines 959aa2aa9a6SDana Myers * are known to fail if the bit is not preserved. (May 2009) 960aa2aa9a6SDana Myers */ 961aa2aa9a6SDana Myers #define ACPI_PM1_CONTROL_IGNORED_BITS 0x0200 /* Bit 9 */ 962aa2aa9a6SDana Myers #define ACPI_PM1_CONTROL_RESERVED_BITS 0xC1F8 /* Bits 14-15, 3-8 */ 963aa2aa9a6SDana Myers #define ACPI_PM1_CONTROL_PRESERVED_BITS \ 964aa2aa9a6SDana Myers (ACPI_PM1_CONTROL_IGNORED_BITS | ACPI_PM1_CONTROL_RESERVED_BITS) 965aa2aa9a6SDana Myers 966aa2aa9a6SDana Myers #define ACPI_PM2_CONTROL_PRESERVED_BITS 0xFFFFFFFE /* All except bit 0 */ 96727f7c583Smyers 9687c478bd9Sstevel@tonic-gate /* 9697c478bd9Sstevel@tonic-gate * Register IDs 9707c478bd9Sstevel@tonic-gate * These are the full ACPI registers 9717c478bd9Sstevel@tonic-gate */ 9727c478bd9Sstevel@tonic-gate #define ACPI_REGISTER_PM1_STATUS 0x01 9737c478bd9Sstevel@tonic-gate #define ACPI_REGISTER_PM1_ENABLE 0x02 9747c478bd9Sstevel@tonic-gate #define ACPI_REGISTER_PM1_CONTROL 0x03 975aa2aa9a6SDana Myers #define ACPI_REGISTER_PM2_CONTROL 0x04 976aa2aa9a6SDana Myers #define ACPI_REGISTER_PM_TIMER 0x05 977aa2aa9a6SDana Myers #define ACPI_REGISTER_PROCESSOR_BLOCK 0x06 978aa2aa9a6SDana Myers #define ACPI_REGISTER_SMI_COMMAND_BLOCK 0x07 9797c478bd9Sstevel@tonic-gate 9807c478bd9Sstevel@tonic-gate 9817c478bd9Sstevel@tonic-gate /* Masks used to access the BitRegisters */ 9827c478bd9Sstevel@tonic-gate 9837c478bd9Sstevel@tonic-gate #define ACPI_BITMASK_TIMER_STATUS 0x0001 9847c478bd9Sstevel@tonic-gate #define ACPI_BITMASK_BUS_MASTER_STATUS 0x0010 9857c478bd9Sstevel@tonic-gate #define ACPI_BITMASK_GLOBAL_LOCK_STATUS 0x0020 9867c478bd9Sstevel@tonic-gate #define ACPI_BITMASK_POWER_BUTTON_STATUS 0x0100 9877c478bd9Sstevel@tonic-gate #define ACPI_BITMASK_SLEEP_BUTTON_STATUS 0x0200 9887c478bd9Sstevel@tonic-gate #define ACPI_BITMASK_RT_CLOCK_STATUS 0x0400 9897c478bd9Sstevel@tonic-gate #define ACPI_BITMASK_PCIEXP_WAKE_STATUS 0x4000 /* ACPI 3.0 */ 9907c478bd9Sstevel@tonic-gate #define ACPI_BITMASK_WAKE_STATUS 0x8000 9917c478bd9Sstevel@tonic-gate 99227f7c583Smyers #define ACPI_BITMASK_ALL_FIXED_STATUS (\ 99327f7c583Smyers ACPI_BITMASK_TIMER_STATUS | \ 99427f7c583Smyers ACPI_BITMASK_BUS_MASTER_STATUS | \ 99527f7c583Smyers ACPI_BITMASK_GLOBAL_LOCK_STATUS | \ 99627f7c583Smyers ACPI_BITMASK_POWER_BUTTON_STATUS | \ 99727f7c583Smyers ACPI_BITMASK_SLEEP_BUTTON_STATUS | \ 99827f7c583Smyers ACPI_BITMASK_RT_CLOCK_STATUS | \ 999*26f3cdf0SGordon Ross ACPI_BITMASK_PCIEXP_WAKE_STATUS | \ 100027f7c583Smyers ACPI_BITMASK_WAKE_STATUS) 10017c478bd9Sstevel@tonic-gate 10027c478bd9Sstevel@tonic-gate #define ACPI_BITMASK_TIMER_ENABLE 0x0001 10037c478bd9Sstevel@tonic-gate #define ACPI_BITMASK_GLOBAL_LOCK_ENABLE 0x0020 10047c478bd9Sstevel@tonic-gate #define ACPI_BITMASK_POWER_BUTTON_ENABLE 0x0100 10057c478bd9Sstevel@tonic-gate #define ACPI_BITMASK_SLEEP_BUTTON_ENABLE 0x0200 10067c478bd9Sstevel@tonic-gate #define ACPI_BITMASK_RT_CLOCK_ENABLE 0x0400 10077c478bd9Sstevel@tonic-gate #define ACPI_BITMASK_PCIEXP_WAKE_DISABLE 0x4000 /* ACPI 3.0 */ 10087c478bd9Sstevel@tonic-gate 10097c478bd9Sstevel@tonic-gate #define ACPI_BITMASK_SCI_ENABLE 0x0001 10107c478bd9Sstevel@tonic-gate #define ACPI_BITMASK_BUS_MASTER_RLD 0x0002 10117c478bd9Sstevel@tonic-gate #define ACPI_BITMASK_GLOBAL_LOCK_RELEASE 0x0004 1012aa2aa9a6SDana Myers #define ACPI_BITMASK_SLEEP_TYPE 0x1C00 10137c478bd9Sstevel@tonic-gate #define ACPI_BITMASK_SLEEP_ENABLE 0x2000 10147c478bd9Sstevel@tonic-gate 10157c478bd9Sstevel@tonic-gate #define ACPI_BITMASK_ARB_DISABLE 0x0001 10167c478bd9Sstevel@tonic-gate 10177c478bd9Sstevel@tonic-gate 10187c478bd9Sstevel@tonic-gate /* Raw bit position of each BitRegister */ 10197c478bd9Sstevel@tonic-gate 10207c478bd9Sstevel@tonic-gate #define ACPI_BITPOSITION_TIMER_STATUS 0x00 10217c478bd9Sstevel@tonic-gate #define ACPI_BITPOSITION_BUS_MASTER_STATUS 0x04 10227c478bd9Sstevel@tonic-gate #define ACPI_BITPOSITION_GLOBAL_LOCK_STATUS 0x05 10237c478bd9Sstevel@tonic-gate #define ACPI_BITPOSITION_POWER_BUTTON_STATUS 0x08 10247c478bd9Sstevel@tonic-gate #define ACPI_BITPOSITION_SLEEP_BUTTON_STATUS 0x09 10257c478bd9Sstevel@tonic-gate #define ACPI_BITPOSITION_RT_CLOCK_STATUS 0x0A 10267c478bd9Sstevel@tonic-gate #define ACPI_BITPOSITION_PCIEXP_WAKE_STATUS 0x0E /* ACPI 3.0 */ 10277c478bd9Sstevel@tonic-gate #define ACPI_BITPOSITION_WAKE_STATUS 0x0F 10287c478bd9Sstevel@tonic-gate 10297c478bd9Sstevel@tonic-gate #define ACPI_BITPOSITION_TIMER_ENABLE 0x00 10307c478bd9Sstevel@tonic-gate #define ACPI_BITPOSITION_GLOBAL_LOCK_ENABLE 0x05 10317c478bd9Sstevel@tonic-gate #define ACPI_BITPOSITION_POWER_BUTTON_ENABLE 0x08 10327c478bd9Sstevel@tonic-gate #define ACPI_BITPOSITION_SLEEP_BUTTON_ENABLE 0x09 10337c478bd9Sstevel@tonic-gate #define ACPI_BITPOSITION_RT_CLOCK_ENABLE 0x0A 10347c478bd9Sstevel@tonic-gate #define ACPI_BITPOSITION_PCIEXP_WAKE_DISABLE 0x0E /* ACPI 3.0 */ 10357c478bd9Sstevel@tonic-gate 10367c478bd9Sstevel@tonic-gate #define ACPI_BITPOSITION_SCI_ENABLE 0x00 10377c478bd9Sstevel@tonic-gate #define ACPI_BITPOSITION_BUS_MASTER_RLD 0x01 10387c478bd9Sstevel@tonic-gate #define ACPI_BITPOSITION_GLOBAL_LOCK_RELEASE 0x02 1039aa2aa9a6SDana Myers #define ACPI_BITPOSITION_SLEEP_TYPE 0x0A 10407c478bd9Sstevel@tonic-gate #define ACPI_BITPOSITION_SLEEP_ENABLE 0x0D 10417c478bd9Sstevel@tonic-gate 10427c478bd9Sstevel@tonic-gate #define ACPI_BITPOSITION_ARB_DISABLE 0x00 10437c478bd9Sstevel@tonic-gate 10447c478bd9Sstevel@tonic-gate 1045aa2aa9a6SDana Myers /* Structs and definitions for _OSI support and I/O port validation */ 1046aa2aa9a6SDana Myers 1047aa2aa9a6SDana Myers #define ACPI_OSI_WIN_2000 0x01 1048aa2aa9a6SDana Myers #define ACPI_OSI_WIN_XP 0x02 1049aa2aa9a6SDana Myers #define ACPI_OSI_WIN_XP_SP1 0x03 1050aa2aa9a6SDana Myers #define ACPI_OSI_WINSRV_2003 0x04 1051aa2aa9a6SDana Myers #define ACPI_OSI_WIN_XP_SP2 0x05 1052aa2aa9a6SDana Myers #define ACPI_OSI_WINSRV_2003_SP1 0x06 1053aa2aa9a6SDana Myers #define ACPI_OSI_WIN_VISTA 0x07 105457190917SDana Myers #define ACPI_OSI_WINSRV_2008 0x08 105557190917SDana Myers #define ACPI_OSI_WIN_VISTA_SP1 0x09 1056*26f3cdf0SGordon Ross #define ACPI_OSI_WIN_VISTA_SP2 0x0A 1057*26f3cdf0SGordon Ross #define ACPI_OSI_WIN_7 0x0B 1058aa2aa9a6SDana Myers 1059aa2aa9a6SDana Myers #define ACPI_ALWAYS_ILLEGAL 0x00 1060aa2aa9a6SDana Myers 1061aa2aa9a6SDana Myers typedef struct acpi_interface_info 1062aa2aa9a6SDana Myers { 1063*26f3cdf0SGordon Ross char *Name; 1064*26f3cdf0SGordon Ross struct acpi_interface_info *Next; 1065*26f3cdf0SGordon Ross UINT8 Flags; 1066*26f3cdf0SGordon Ross UINT8 Value; 1067aa2aa9a6SDana Myers 1068aa2aa9a6SDana Myers } ACPI_INTERFACE_INFO; 1069aa2aa9a6SDana Myers 1070*26f3cdf0SGordon Ross #define ACPI_OSI_INVALID 0x01 1071*26f3cdf0SGordon Ross #define ACPI_OSI_DYNAMIC 0x02 1072*26f3cdf0SGordon Ross 1073aa2aa9a6SDana Myers typedef struct acpi_port_info 1074aa2aa9a6SDana Myers { 1075aa2aa9a6SDana Myers char *Name; 1076aa2aa9a6SDana Myers UINT16 Start; 1077aa2aa9a6SDana Myers UINT16 End; 1078aa2aa9a6SDana Myers UINT8 OsiDependency; 1079aa2aa9a6SDana Myers 1080aa2aa9a6SDana Myers } ACPI_PORT_INFO; 1081aa2aa9a6SDana Myers 1082aa2aa9a6SDana Myers 10837c478bd9Sstevel@tonic-gate /***************************************************************************** 10847c478bd9Sstevel@tonic-gate * 10857c478bd9Sstevel@tonic-gate * Resource descriptors 10867c478bd9Sstevel@tonic-gate * 10877c478bd9Sstevel@tonic-gate ****************************************************************************/ 10887c478bd9Sstevel@tonic-gate 10897c478bd9Sstevel@tonic-gate /* ResourceType values */ 10907c478bd9Sstevel@tonic-gate 1091186507a7Smyers #define ACPI_ADDRESS_TYPE_MEMORY_RANGE 0 1092186507a7Smyers #define ACPI_ADDRESS_TYPE_IO_RANGE 1 1093186507a7Smyers #define ACPI_ADDRESS_TYPE_BUS_NUMBER_RANGE 2 10947c478bd9Sstevel@tonic-gate 10957c478bd9Sstevel@tonic-gate /* Resource descriptor types and masks */ 10967c478bd9Sstevel@tonic-gate 1097186507a7Smyers #define ACPI_RESOURCE_NAME_LARGE 0x80 1098186507a7Smyers #define ACPI_RESOURCE_NAME_SMALL 0x00 10997c478bd9Sstevel@tonic-gate 1100186507a7Smyers #define ACPI_RESOURCE_NAME_SMALL_MASK 0x78 /* Bits 6:3 contain the type */ 1101186507a7Smyers #define ACPI_RESOURCE_NAME_SMALL_LENGTH_MASK 0x07 /* Bits 2:0 contain the length */ 1102186507a7Smyers #define ACPI_RESOURCE_NAME_LARGE_MASK 0x7F /* Bits 6:0 contain the type */ 11037c478bd9Sstevel@tonic-gate 11047c478bd9Sstevel@tonic-gate 11057c478bd9Sstevel@tonic-gate /* 1106186507a7Smyers * Small resource descriptor "names" as defined by the ACPI specification. 1107186507a7Smyers * Note: Bits 2:0 are used for the descriptor length 11087c478bd9Sstevel@tonic-gate */ 1109186507a7Smyers #define ACPI_RESOURCE_NAME_IRQ 0x20 1110186507a7Smyers #define ACPI_RESOURCE_NAME_DMA 0x28 1111186507a7Smyers #define ACPI_RESOURCE_NAME_START_DEPENDENT 0x30 1112186507a7Smyers #define ACPI_RESOURCE_NAME_END_DEPENDENT 0x38 1113186507a7Smyers #define ACPI_RESOURCE_NAME_IO 0x40 1114186507a7Smyers #define ACPI_RESOURCE_NAME_FIXED_IO 0x48 1115186507a7Smyers #define ACPI_RESOURCE_NAME_RESERVED_S1 0x50 1116186507a7Smyers #define ACPI_RESOURCE_NAME_RESERVED_S2 0x58 1117186507a7Smyers #define ACPI_RESOURCE_NAME_RESERVED_S3 0x60 1118186507a7Smyers #define ACPI_RESOURCE_NAME_RESERVED_S4 0x68 1119186507a7Smyers #define ACPI_RESOURCE_NAME_VENDOR_SMALL 0x70 1120186507a7Smyers #define ACPI_RESOURCE_NAME_END_TAG 0x78 11217c478bd9Sstevel@tonic-gate 11227c478bd9Sstevel@tonic-gate /* 1123186507a7Smyers * Large resource descriptor "names" as defined by the ACPI specification. 1124186507a7Smyers * Note: includes the Large Descriptor bit in bit[7] 11257c478bd9Sstevel@tonic-gate */ 1126186507a7Smyers #define ACPI_RESOURCE_NAME_MEMORY24 0x81 1127186507a7Smyers #define ACPI_RESOURCE_NAME_GENERIC_REGISTER 0x82 1128186507a7Smyers #define ACPI_RESOURCE_NAME_RESERVED_L1 0x83 1129186507a7Smyers #define ACPI_RESOURCE_NAME_VENDOR_LARGE 0x84 1130186507a7Smyers #define ACPI_RESOURCE_NAME_MEMORY32 0x85 1131186507a7Smyers #define ACPI_RESOURCE_NAME_FIXED_MEMORY32 0x86 1132186507a7Smyers #define ACPI_RESOURCE_NAME_ADDRESS32 0x87 1133186507a7Smyers #define ACPI_RESOURCE_NAME_ADDRESS16 0x88 1134186507a7Smyers #define ACPI_RESOURCE_NAME_EXTENDED_IRQ 0x89 1135186507a7Smyers #define ACPI_RESOURCE_NAME_ADDRESS64 0x8A 1136186507a7Smyers #define ACPI_RESOURCE_NAME_EXTENDED_ADDRESS64 0x8B 1137186507a7Smyers #define ACPI_RESOURCE_NAME_LARGE_MAX 0x8B 11387c478bd9Sstevel@tonic-gate 11397c478bd9Sstevel@tonic-gate 11407c478bd9Sstevel@tonic-gate /***************************************************************************** 11417c478bd9Sstevel@tonic-gate * 11427c478bd9Sstevel@tonic-gate * Miscellaneous 11437c478bd9Sstevel@tonic-gate * 11447c478bd9Sstevel@tonic-gate ****************************************************************************/ 11457c478bd9Sstevel@tonic-gate 114627f7c583Smyers #define ACPI_ASCII_ZERO 0x30 11477c478bd9Sstevel@tonic-gate 11487c478bd9Sstevel@tonic-gate 114957190917SDana Myers /***************************************************************************** 115057190917SDana Myers * 115157190917SDana Myers * Disassembler 115257190917SDana Myers * 115357190917SDana Myers ****************************************************************************/ 115457190917SDana Myers 115557190917SDana Myers typedef struct acpi_external_list 115657190917SDana Myers { 115757190917SDana Myers char *Path; 115857190917SDana Myers char *InternalPath; 115957190917SDana Myers struct acpi_external_list *Next; 116057190917SDana Myers UINT32 Value; 116157190917SDana Myers UINT16 Length; 116257190917SDana Myers UINT8 Type; 116357190917SDana Myers UINT8 Flags; 116457190917SDana Myers 116557190917SDana Myers } ACPI_EXTERNAL_LIST; 116657190917SDana Myers 116757190917SDana Myers /* Values for Flags field above */ 116857190917SDana Myers 116957190917SDana Myers #define ACPI_IPATH_ALLOCATED 0x01 117057190917SDana Myers 117157190917SDana Myers 1172*26f3cdf0SGordon Ross typedef struct acpi_external_file 1173*26f3cdf0SGordon Ross { 1174*26f3cdf0SGordon Ross char *Path; 1175*26f3cdf0SGordon Ross struct acpi_external_file *Next; 1176*26f3cdf0SGordon Ross 1177*26f3cdf0SGordon Ross } ACPI_EXTERNAL_FILE; 1178*26f3cdf0SGordon Ross 1179*26f3cdf0SGordon Ross 11807c478bd9Sstevel@tonic-gate /***************************************************************************** 11817c478bd9Sstevel@tonic-gate * 11827c478bd9Sstevel@tonic-gate * Debugger 11837c478bd9Sstevel@tonic-gate * 11847c478bd9Sstevel@tonic-gate ****************************************************************************/ 11857c478bd9Sstevel@tonic-gate 11867c478bd9Sstevel@tonic-gate typedef struct acpi_db_method_info 11877c478bd9Sstevel@tonic-gate { 1188db2bae30SDana Myers ACPI_HANDLE MainThreadGate; 1189db2bae30SDana Myers ACPI_HANDLE ThreadCompleteGate; 1190aa2aa9a6SDana Myers ACPI_HANDLE InfoGate; 1191*26f3cdf0SGordon Ross ACPI_THREAD_ID *Threads; 1192db2bae30SDana Myers UINT32 NumThreads; 1193db2bae30SDana Myers UINT32 NumCreated; 1194db2bae30SDana Myers UINT32 NumCompleted; 1195db2bae30SDana Myers 119627f7c583Smyers char *Name; 119727f7c583Smyers UINT32 Flags; 119827f7c583Smyers UINT32 NumLoops; 119927f7c583Smyers char Pathname[128]; 1200db2bae30SDana Myers char **Args; 1201*26f3cdf0SGordon Ross ACPI_OBJECT_TYPE *Types; 1202db2bae30SDana Myers 1203db2bae30SDana Myers /* 1204db2bae30SDana Myers * Arguments to be passed to method for the command 1205db2bae30SDana Myers * Threads - 1206db2bae30SDana Myers * the Number of threads, ID of current thread and 1207db2bae30SDana Myers * Index of current thread inside all them created. 1208db2bae30SDana Myers */ 1209db2bae30SDana Myers char InitArgs; 1210*26f3cdf0SGordon Ross ACPI_OBJECT_TYPE ArgTypes[4]; 1211db2bae30SDana Myers char *Arguments[4]; 1212db2bae30SDana Myers char NumThreadsStr[11]; 1213db2bae30SDana Myers char IdOfThreadStr[11]; 1214db2bae30SDana Myers char IndexOfThreadStr[11]; 12157c478bd9Sstevel@tonic-gate 12167c478bd9Sstevel@tonic-gate } ACPI_DB_METHOD_INFO; 12177c478bd9Sstevel@tonic-gate 12187c478bd9Sstevel@tonic-gate typedef struct acpi_integrity_info 12197c478bd9Sstevel@tonic-gate { 122027f7c583Smyers UINT32 Nodes; 122127f7c583Smyers UINT32 Objects; 12227c478bd9Sstevel@tonic-gate 12237c478bd9Sstevel@tonic-gate } ACPI_INTEGRITY_INFO; 12247c478bd9Sstevel@tonic-gate 12257c478bd9Sstevel@tonic-gate 122627f7c583Smyers #define ACPI_DB_REDIRECTABLE_OUTPUT 0x01 122727f7c583Smyers #define ACPI_DB_CONSOLE_OUTPUT 0x02 122827f7c583Smyers #define ACPI_DB_DUPLICATE_OUTPUT 0x03 12297c478bd9Sstevel@tonic-gate 12307c478bd9Sstevel@tonic-gate 12317c478bd9Sstevel@tonic-gate /***************************************************************************** 12327c478bd9Sstevel@tonic-gate * 12337c478bd9Sstevel@tonic-gate * Debug 12347c478bd9Sstevel@tonic-gate * 12357c478bd9Sstevel@tonic-gate ****************************************************************************/ 12367c478bd9Sstevel@tonic-gate 12377c478bd9Sstevel@tonic-gate /* Entry for a memory allocation (debug only) */ 12387c478bd9Sstevel@tonic-gate 123927f7c583Smyers #define ACPI_MEM_MALLOC 0 124027f7c583Smyers #define ACPI_MEM_CALLOC 1 124127f7c583Smyers #define ACPI_MAX_MODULE_NAME 16 12427c478bd9Sstevel@tonic-gate 12437c478bd9Sstevel@tonic-gate #define ACPI_COMMON_DEBUG_MEM_HEADER \ 124427f7c583Smyers struct acpi_debug_mem_block *Previous; \ 124527f7c583Smyers struct acpi_debug_mem_block *Next; \ 124627f7c583Smyers UINT32 Size; \ 124727f7c583Smyers UINT32 Component; \ 124827f7c583Smyers UINT32 Line; \ 124927f7c583Smyers char Module[ACPI_MAX_MODULE_NAME]; \ 125027f7c583Smyers UINT8 AllocType; 12517c478bd9Sstevel@tonic-gate 12527c478bd9Sstevel@tonic-gate typedef struct acpi_debug_mem_header 12537c478bd9Sstevel@tonic-gate { 12547c478bd9Sstevel@tonic-gate ACPI_COMMON_DEBUG_MEM_HEADER 12557c478bd9Sstevel@tonic-gate 12567c478bd9Sstevel@tonic-gate } ACPI_DEBUG_MEM_HEADER; 12577c478bd9Sstevel@tonic-gate 12587c478bd9Sstevel@tonic-gate typedef struct acpi_debug_mem_block 12597c478bd9Sstevel@tonic-gate { 12607c478bd9Sstevel@tonic-gate ACPI_COMMON_DEBUG_MEM_HEADER 126127f7c583Smyers UINT64 UserSpace; 12627c478bd9Sstevel@tonic-gate 12637c478bd9Sstevel@tonic-gate } ACPI_DEBUG_MEM_BLOCK; 12647c478bd9Sstevel@tonic-gate 12657c478bd9Sstevel@tonic-gate 12667c478bd9Sstevel@tonic-gate #define ACPI_MEM_LIST_GLOBAL 0 12677c478bd9Sstevel@tonic-gate #define ACPI_MEM_LIST_NSNODE 1 1268450d6964Smyers #define ACPI_MEM_LIST_MAX 1 1269450d6964Smyers #define ACPI_NUM_MEM_LISTS 2 12707c478bd9Sstevel@tonic-gate 12717c478bd9Sstevel@tonic-gate 12727c478bd9Sstevel@tonic-gate #endif /* __ACLOCAL_H__ */ 1273