Home | History | Annotate | Line # | Download | only in include
      1 /******************************************************************************
      2  *
      3  * Name: aclocal.h - Internal data types used across the ACPI subsystem
      4  *
      5  *****************************************************************************/
      6 
      7 /******************************************************************************
      8  *
      9  * 1. Copyright Notice
     10  *
     11  * Some or all of this work - Copyright (c) 1999 - 2025, Intel Corp.
     12  * All rights reserved.
     13  *
     14  * 2. License
     15  *
     16  * 2.1. This is your license from Intel Corp. under its intellectual property
     17  * rights. You may have additional license terms from the party that provided
     18  * you this software, covering your right to use that party's intellectual
     19  * property rights.
     20  *
     21  * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a
     22  * copy of the source code appearing in this file ("Covered Code") an
     23  * irrevocable, perpetual, worldwide license under Intel's copyrights in the
     24  * base code distributed originally by Intel ("Original Intel Code") to copy,
     25  * make derivatives, distribute, use and display any portion of the Covered
     26  * Code in any form, with the right to sublicense such rights; and
     27  *
     28  * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent
     29  * license (with the right to sublicense), under only those claims of Intel
     30  * patents that are infringed by the Original Intel Code, to make, use, sell,
     31  * offer to sell, and import the Covered Code and derivative works thereof
     32  * solely to the minimum extent necessary to exercise the above copyright
     33  * license, and in no event shall the patent license extend to any additions
     34  * to or modifications of the Original Intel Code. No other license or right
     35  * is granted directly or by implication, estoppel or otherwise;
     36  *
     37  * The above copyright and patent license is granted only if the following
     38  * conditions are met:
     39  *
     40  * 3. Conditions
     41  *
     42  * 3.1. Redistribution of Source with Rights to Further Distribute Source.
     43  * Redistribution of source code of any substantial portion of the Covered
     44  * Code or modification with rights to further distribute source must include
     45  * the above Copyright Notice, the above License, this list of Conditions,
     46  * and the following Disclaimer and Export Compliance provision. In addition,
     47  * Licensee must cause all Covered Code to which Licensee contributes to
     48  * contain a file documenting the changes Licensee made to create that Covered
     49  * Code and the date of any change. Licensee must include in that file the
     50  * documentation of any changes made by any predecessor Licensee. Licensee
     51  * must include a prominent statement that the modification is derived,
     52  * directly or indirectly, from Original Intel Code.
     53  *
     54  * 3.2. Redistribution of Source with no Rights to Further Distribute Source.
     55  * Redistribution of source code of any substantial portion of the Covered
     56  * Code or modification without rights to further distribute source must
     57  * include the following Disclaimer and Export Compliance provision in the
     58  * documentation and/or other materials provided with distribution. In
     59  * addition, Licensee may not authorize further sublicense of source of any
     60  * portion of the Covered Code, and must include terms to the effect that the
     61  * license from Licensee to its licensee is limited to the intellectual
     62  * property embodied in the software Licensee provides to its licensee, and
     63  * not to intellectual property embodied in modifications its licensee may
     64  * make.
     65  *
     66  * 3.3. Redistribution of Executable. Redistribution in executable form of any
     67  * substantial portion of the Covered Code or modification must reproduce the
     68  * above Copyright Notice, and the following Disclaimer and Export Compliance
     69  * provision in the documentation and/or other materials provided with the
     70  * distribution.
     71  *
     72  * 3.4. Intel retains all right, title, and interest in and to the Original
     73  * Intel Code.
     74  *
     75  * 3.5. Neither the name Intel nor any other trademark owned or controlled by
     76  * Intel shall be used in advertising or otherwise to promote the sale, use or
     77  * other dealings in products derived from or relating to the Covered Code
     78  * without prior written authorization from Intel.
     79  *
     80  * 4. Disclaimer and Export Compliance
     81  *
     82  * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED
     83  * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE
     84  * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE,
     85  * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY
     86  * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY
     87  * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A
     88  * PARTICULAR PURPOSE.
     89  *
     90  * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES
     91  * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR
     92  * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT,
     93  * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY
     94  * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL
     95  * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS
     96  * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY
     97  * LIMITED REMEDY.
     98  *
     99  * 4.3. Licensee shall not export, either directly or indirectly, any of this
    100  * software or system incorporating such software without first obtaining any
    101  * required license or other approval from the U. S. Department of Commerce or
    102  * any other agency or department of the United States Government. In the
    103  * event Licensee exports any such software from the United States or
    104  * re-exports any such software from a foreign destination, Licensee shall
    105  * ensure that the distribution and export/re-export of the software is in
    106  * compliance with all laws, regulations, orders, or other restrictions of the
    107  * U.S. Export Administration Regulations. Licensee agrees that neither it nor
    108  * any of its subsidiaries will export/re-export any technical data, process,
    109  * software, or service, directly or indirectly, to any country for which the
    110  * United States government or any agency thereof requires an export license,
    111  * other governmental approval, or letter of assurance, without first obtaining
    112  * such license, approval or letter.
    113  *
    114  *****************************************************************************
    115  *
    116  * Alternatively, you may choose to be licensed under the terms of the
    117  * following license:
    118  *
    119  * Redistribution and use in source and binary forms, with or without
    120  * modification, are permitted provided that the following conditions
    121  * are met:
    122  * 1. Redistributions of source code must retain the above copyright
    123  *    notice, this list of conditions, and the following disclaimer,
    124  *    without modification.
    125  * 2. Redistributions in binary form must reproduce at minimum a disclaimer
    126  *    substantially similar to the "NO WARRANTY" disclaimer below
    127  *    ("Disclaimer") and any redistribution must be conditioned upon
    128  *    including a substantially similar Disclaimer requirement for further
    129  *    binary redistribution.
    130  * 3. Neither the names of the above-listed copyright holders nor the names
    131  *    of any contributors may be used to endorse or promote products derived
    132  *    from this software without specific prior written permission.
    133  *
    134  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    135  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    136  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    137  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    138  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    139  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    140  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    141  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    142  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    143  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    144  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    145  *
    146  * Alternatively, you may choose to be licensed under the terms of the
    147  * GNU General Public License ("GPL") version 2 as published by the Free
    148  * Software Foundation.
    149  *
    150  *****************************************************************************/
    151 
    152 #ifndef __ACLOCAL_H__
    153 #define __ACLOCAL_H__
    154 
    155 
    156 /* acpisrc:StructDefs -- for acpisrc conversion */
    157 
    158 #define ACPI_SERIALIZED                 0xFF
    159 
    160 typedef UINT32                          ACPI_MUTEX_HANDLE;
    161 #define ACPI_GLOBAL_LOCK                (ACPI_SEMAPHORE) (-1)
    162 
    163 /* Total number of aml opcodes defined */
    164 
    165 #define AML_NUM_OPCODES                 0x83
    166 
    167 
    168 /* Forward declarations */
    169 
    170 struct acpi_walk_state;
    171 struct acpi_obj_mutex;
    172 union acpi_parse_object;
    173 
    174 
    175 /*****************************************************************************
    176  *
    177  * Mutex typedefs and structs
    178  *
    179  ****************************************************************************/
    180 
    181 
    182 /*
    183  * Predefined handles for the mutex objects used within the subsystem
    184  * All mutex objects are automatically created by AcpiUtMutexInitialize.
    185  *
    186  * The acquire/release ordering protocol is implied via this list. Mutexes
    187  * with a lower value must be acquired before mutexes with a higher value.
    188  *
    189  * NOTE: any changes here must be reflected in the AcpiGbl_MutexNames
    190  * table below also!
    191  */
    192 #define ACPI_MTX_INTERPRETER            0   /* AML Interpreter, main lock */
    193 #define ACPI_MTX_NAMESPACE              1   /* ACPI Namespace */
    194 #define ACPI_MTX_TABLES                 2   /* Data for ACPI tables */
    195 #define ACPI_MTX_EVENTS                 3   /* Data for ACPI events */
    196 #define ACPI_MTX_CACHES                 4   /* Internal caches, general purposes */
    197 #define ACPI_MTX_MEMORY                 5   /* Debug memory tracking lists */
    198 
    199 #define ACPI_MAX_MUTEX                  5
    200 #define ACPI_NUM_MUTEX                  (ACPI_MAX_MUTEX+1)
    201 
    202 
    203 /* Lock structure for reader/writer interfaces */
    204 
    205 typedef struct acpi_rw_lock
    206 {
    207     ACPI_MUTEX              WriterMutex;
    208     ACPI_MUTEX              ReaderMutex;
    209     UINT32                  NumReaders;
    210 
    211 } ACPI_RW_LOCK;
    212 
    213 
    214 /*
    215  * Predefined handles for spinlocks used within the subsystem.
    216  * These spinlocks are created by AcpiUtMutexInitialize
    217  */
    218 #define ACPI_LOCK_GPES                  0
    219 #define ACPI_LOCK_HARDWARE              1
    220 
    221 #define ACPI_MAX_LOCK                   1
    222 #define ACPI_NUM_LOCK                   (ACPI_MAX_LOCK+1)
    223 
    224 
    225 /* This Thread ID means that the mutex is not in use (unlocked) */
    226 
    227 #define ACPI_MUTEX_NOT_ACQUIRED         ((ACPI_THREAD_ID) -1)
    228 
    229 /* This Thread ID means an invalid thread ID */
    230 
    231 #ifdef ACPI_OS_INVALID_THREAD_ID
    232 #define ACPI_INVALID_THREAD_ID          ACPI_OS_INVALID_THREAD_ID
    233 #else
    234 #define ACPI_INVALID_THREAD_ID          ((ACPI_THREAD_ID) 0xFFFFFFFF)
    235 #endif
    236 
    237 /* Table for the global mutexes */
    238 
    239 typedef struct acpi_mutex_info
    240 {
    241     ACPI_MUTEX                      Mutex;
    242     UINT32                          UseCount;
    243     ACPI_THREAD_ID                  ThreadId;
    244 
    245 } ACPI_MUTEX_INFO;
    246 
    247 
    248 /* Lock flag parameter for various interfaces */
    249 
    250 #define ACPI_MTX_DO_NOT_LOCK            0
    251 #define ACPI_MTX_LOCK                   1
    252 
    253 
    254 /* Field access granularities */
    255 
    256 #define ACPI_FIELD_BYTE_GRANULARITY     1
    257 #define ACPI_FIELD_WORD_GRANULARITY     2
    258 #define ACPI_FIELD_DWORD_GRANULARITY    4
    259 #define ACPI_FIELD_QWORD_GRANULARITY    8
    260 
    261 
    262 #define ACPI_ENTRY_NOT_FOUND            NULL
    263 
    264 
    265 /*****************************************************************************
    266  *
    267  * Namespace typedefs and structs
    268  *
    269  ****************************************************************************/
    270 
    271 /* Operational modes of the AML interpreter/scanner */
    272 
    273 typedef enum
    274 {
    275     ACPI_IMODE_LOAD_PASS1           = 0x01,
    276     ACPI_IMODE_LOAD_PASS2           = 0x02,
    277     ACPI_IMODE_EXECUTE              = 0x03
    278 
    279 } ACPI_INTERPRETER_MODE;
    280 
    281 
    282 /*
    283  * The Namespace Node describes a named object that appears in the AML.
    284  * DescriptorType is used to differentiate between internal descriptors.
    285  *
    286  * The node is optimized for both 32-bit and 64-bit platforms:
    287  * 20 bytes for the 32-bit case, 32 bytes for the 64-bit case.
    288  *
    289  * Note: The DescriptorType and Type fields must appear in the identical
    290  * position in both the ACPI_NAMESPACE_NODE and ACPI_OPERAND_OBJECT
    291  * structures.
    292  */
    293 typedef struct acpi_namespace_node
    294 {
    295     union acpi_operand_object       *Object;        /* Interpreter object */
    296     UINT8                           DescriptorType; /* Differentiate object descriptor types */
    297     UINT8                           Type;           /* ACPI Type associated with this name */
    298     UINT16                          Flags;          /* Miscellaneous flags */
    299     ACPI_NAME_UNION                 Name;           /* ACPI Name, always 4 chars per ACPI spec */
    300     struct acpi_namespace_node      *Parent;        /* Parent node */
    301     struct acpi_namespace_node      *Child;         /* First child */
    302     struct acpi_namespace_node      *Peer;          /* First peer */
    303     ACPI_OWNER_ID                   OwnerId;        /* Node creator */
    304 
    305     /*
    306      * The following fields are used by the ASL compiler and disassembler only
    307      */
    308 #ifdef ACPI_LARGE_NAMESPACE_NODE
    309     union acpi_parse_object         *Op;
    310     void                            *MethodLocals;
    311     void                            *MethodArgs;
    312     UINT32                          Value;
    313     UINT32                          Length;
    314     UINT8                           ArgCount;
    315 
    316 #endif
    317 
    318 } ACPI_NAMESPACE_NODE;
    319 
    320 
    321 /* Namespace Node flags */
    322 
    323 #define ANOBJ_RESERVED                  0x01    /* Available for use */
    324 #define ANOBJ_TEMPORARY                 0x02    /* Node is create by a method and is temporary */
    325 #define ANOBJ_METHOD_ARG                0x04    /* Node is a method argument */
    326 #define ANOBJ_METHOD_LOCAL              0x08    /* Node is a method local */
    327 #define ANOBJ_SUBTREE_HAS_INI           0x10    /* Used to optimize device initialization */
    328 #define ANOBJ_EVALUATED                 0x20    /* Set on first evaluation of node */
    329 #define ANOBJ_ALLOCATED_BUFFER          0x40    /* Method AML buffer is dynamic (InstallMethod) */
    330 #define ANOBJ_NODE_EARLY_INIT           0x80    /* AcpiExec only: Node was create via init file (-fi) */
    331 
    332 #define ANOBJ_IS_EXTERNAL               0x08    /* iASL only: This object created via External() */
    333 #define ANOBJ_METHOD_NO_RETVAL          0x10    /* iASL only: Method has no return value */
    334 #define ANOBJ_METHOD_SOME_NO_RETVAL     0x20    /* iASL only: Method has at least one return value */
    335 #define ANOBJ_IS_REFERENCED             0x80    /* iASL only: Object was referenced */
    336 
    337 
    338 /* Internal ACPI table management - master table list */
    339 
    340 typedef struct acpi_table_list
    341 {
    342     ACPI_TABLE_DESC                 *Tables;            /* Table descriptor array */
    343     UINT32                          CurrentTableCount;  /* Tables currently in the array */
    344     UINT32                          MaxTableCount;      /* Max tables array will hold */
    345     UINT8                           Flags;
    346 
    347 } ACPI_TABLE_LIST;
    348 
    349 /* Flags for above */
    350 
    351 #define ACPI_ROOT_ORIGIN_UNKNOWN        (0)     /* ~ORIGIN_ALLOCATED */
    352 #define ACPI_ROOT_ORIGIN_ALLOCATED      (1)
    353 #define ACPI_ROOT_ALLOW_RESIZE          (2)
    354 
    355 
    356 /* List to manage incoming ACPI tables */
    357 
    358 typedef struct acpi_new_table_desc
    359 {
    360     ACPI_TABLE_HEADER               *Table;
    361     struct acpi_new_table_desc      *Next;
    362 
    363 } ACPI_NEW_TABLE_DESC;
    364 
    365 
    366 /* Predefined table indexes */
    367 
    368 #define ACPI_INVALID_TABLE_INDEX        (0xFFFFFFFF)
    369 
    370 
    371 typedef struct acpi_find_context
    372 {
    373     char                            *SearchFor;
    374     ACPI_HANDLE                     *List;
    375     UINT32                          *Count;
    376 
    377 } ACPI_FIND_CONTEXT;
    378 
    379 
    380 typedef struct acpi_ns_search_data
    381 {
    382     ACPI_NAMESPACE_NODE             *Node;
    383 
    384 } ACPI_NS_SEARCH_DATA;
    385 
    386 
    387 /* Object types used during package copies */
    388 
    389 #define ACPI_COPY_TYPE_SIMPLE           0
    390 #define ACPI_COPY_TYPE_PACKAGE          1
    391 
    392 
    393 /* Info structure used to convert external<->internal namestrings */
    394 
    395 typedef struct acpi_namestring_info
    396 {
    397     const char                      *ExternalName;
    398     const char                      *NextExternalChar;
    399     char                            *InternalName;
    400     UINT32                          Length;
    401     UINT32                          NumSegments;
    402     UINT32                          NumCarats;
    403     BOOLEAN                         FullyQualified;
    404 
    405 } ACPI_NAMESTRING_INFO;
    406 
    407 
    408 /* Field creation info */
    409 
    410 typedef struct acpi_create_field_info
    411 {
    412     ACPI_NAMESPACE_NODE             *RegionNode;
    413     ACPI_NAMESPACE_NODE             *FieldNode;
    414     ACPI_NAMESPACE_NODE             *RegisterNode;
    415     ACPI_NAMESPACE_NODE             *DataRegisterNode;
    416     ACPI_NAMESPACE_NODE             *ConnectionNode;
    417     UINT8                           *ResourceBuffer;
    418     UINT32                          BankValue;
    419     UINT32                          FieldBitPosition;
    420     UINT32                          FieldBitLength;
    421     UINT16                          ResourceLength;
    422     UINT16                          PinNumberIndex;
    423     UINT8                           FieldFlags;
    424     UINT8                           Attribute;
    425     UINT8                           FieldType;
    426     UINT8                           AccessLength;
    427 
    428 } ACPI_CREATE_FIELD_INFO;
    429 
    430 
    431 typedef
    432 ACPI_STATUS (*ACPI_INTERNAL_METHOD) (
    433     struct acpi_walk_state          *WalkState);
    434 
    435 
    436 /*
    437  * Bitmapped ACPI types. Used internally only
    438  */
    439 #define ACPI_BTYPE_ANY                  0x00000000
    440 #define ACPI_BTYPE_INTEGER              0x00000001
    441 #define ACPI_BTYPE_STRING               0x00000002
    442 #define ACPI_BTYPE_BUFFER               0x00000004
    443 #define ACPI_BTYPE_PACKAGE              0x00000008
    444 #define ACPI_BTYPE_FIELD_UNIT           0x00000010
    445 #define ACPI_BTYPE_DEVICE               0x00000020
    446 #define ACPI_BTYPE_EVENT                0x00000040
    447 #define ACPI_BTYPE_METHOD               0x00000080
    448 #define ACPI_BTYPE_MUTEX                0x00000100
    449 #define ACPI_BTYPE_REGION               0x00000200
    450 #define ACPI_BTYPE_POWER                0x00000400
    451 #define ACPI_BTYPE_PROCESSOR            0x00000800
    452 #define ACPI_BTYPE_THERMAL              0x00001000
    453 #define ACPI_BTYPE_BUFFER_FIELD         0x00002000
    454 #define ACPI_BTYPE_DDB_HANDLE           0x00004000
    455 #define ACPI_BTYPE_DEBUG_OBJECT         0x00008000
    456 #define ACPI_BTYPE_REFERENCE_OBJECT     0x00010000 /* From Index(), RefOf(), etc (Type6Opcodes) */
    457 #define ACPI_BTYPE_RESOURCE             0x00020000
    458 #define ACPI_BTYPE_NAMED_REFERENCE      0x00040000 /* Generic unresolved Name or Namepath */
    459 
    460 #define ACPI_BTYPE_COMPUTE_DATA         (ACPI_BTYPE_INTEGER | ACPI_BTYPE_STRING | ACPI_BTYPE_BUFFER)
    461 
    462 #define ACPI_BTYPE_DATA                 (ACPI_BTYPE_COMPUTE_DATA  | ACPI_BTYPE_PACKAGE)
    463 
    464     /* Used by Copy, DeRefOf, Store, Printf, Fprintf */
    465 
    466 #define ACPI_BTYPE_DATA_REFERENCE       (ACPI_BTYPE_DATA | ACPI_BTYPE_REFERENCE_OBJECT | ACPI_BTYPE_DDB_HANDLE)
    467 #define ACPI_BTYPE_DEVICE_OBJECTS       (ACPI_BTYPE_DEVICE | ACPI_BTYPE_THERMAL | ACPI_BTYPE_PROCESSOR)
    468 #define ACPI_BTYPE_OBJECTS_AND_REFS     0x0001FFFF  /* ARG or LOCAL */
    469 #define ACPI_BTYPE_ALL_OBJECTS          0x0000FFFF
    470 
    471 #pragma pack(1)
    472 
    473 /*
    474  * Information structure for ACPI predefined names.
    475  * Each entry in the table contains the following items:
    476  *
    477  * Name                 - The ACPI reserved name
    478  * ParamCount           - Number of arguments to the method
    479  * ExpectedReturnBtypes - Allowed type(s) for the return value
    480  */
    481 typedef struct acpi_name_info
    482 {
    483     char                        Name[ACPI_NAMESEG_SIZE] ACPI_NONSTRING;
    484     UINT16                      ArgumentList;
    485     UINT8                       ExpectedBtypes;
    486 
    487 } ACPI_NAME_INFO;
    488 
    489 /*
    490  * Secondary information structures for ACPI predefined objects that return
    491  * package objects. This structure appears as the next entry in the table
    492  * after the NAME_INFO structure above.
    493  *
    494  * The reason for this is to minimize the size of the predefined name table.
    495  */
    496 
    497 /*
    498  * Used for ACPI_PTYPE1_FIXED, ACPI_PTYPE1_VAR, ACPI_PTYPE2,
    499  * ACPI_PTYPE2_MIN, ACPI_PTYPE2_PKG_COUNT, ACPI_PTYPE2_COUNT,
    500  * ACPI_PTYPE2_FIX_VAR
    501  */
    502 typedef struct acpi_package_info
    503 {
    504     UINT8                       Type;
    505     UINT8                       ObjectType1;
    506     UINT8                       Count1;
    507     UINT8                       ObjectType2;
    508     UINT8                       Count2;
    509     UINT16                      Reserved;
    510 
    511 } ACPI_PACKAGE_INFO;
    512 
    513 /* Used for ACPI_PTYPE2_FIXED */
    514 
    515 typedef struct acpi_package_info2
    516 {
    517     UINT8                       Type;
    518     UINT8                       Count;
    519     UINT8                       ObjectType[4];
    520     UINT8                       Reserved;
    521 
    522 } ACPI_PACKAGE_INFO2;
    523 
    524 /* Used for ACPI_PTYPE1_OPTION */
    525 
    526 typedef struct acpi_package_info3
    527 {
    528     UINT8                       Type;
    529     UINT8                       Count;
    530     UINT8                       ObjectType[2];
    531     UINT8                       TailObjectType;
    532     UINT16                      Reserved;
    533 
    534 } ACPI_PACKAGE_INFO3;
    535 
    536 typedef struct acpi_package_info4
    537 {
    538     UINT8                       Type;
    539     UINT8                       ObjectType1;
    540     UINT8                       Count1;
    541     UINT8                       SubObjectTypes;
    542     UINT8                       PkgCount;
    543     UINT16                      Reserved;
    544 
    545 } ACPI_PACKAGE_INFO4;
    546 
    547 typedef union acpi_predefined_info
    548 {
    549     ACPI_NAME_INFO              Info;
    550     ACPI_PACKAGE_INFO           RetInfo;
    551     ACPI_PACKAGE_INFO2          RetInfo2;
    552     ACPI_PACKAGE_INFO3          RetInfo3;
    553     ACPI_PACKAGE_INFO4          RetInfo4;
    554 
    555 } ACPI_PREDEFINED_INFO;
    556 
    557 /* Reset to default packing */
    558 
    559 #pragma pack()
    560 
    561 
    562 /* Return object auto-repair info */
    563 
    564 typedef ACPI_STATUS (*ACPI_OBJECT_CONVERTER) (
    565     struct acpi_namespace_node  *Scope,
    566     union acpi_operand_object   *OriginalObject,
    567     union acpi_operand_object   **ConvertedObject);
    568 
    569 typedef struct acpi_simple_repair_info
    570 {
    571     char                        Name[ACPI_NAMESEG_SIZE] ACPI_NONSTRING;
    572     UINT32                      UnexpectedBtypes;
    573     UINT32                      PackageIndex;
    574     ACPI_OBJECT_CONVERTER       ObjectConverter;
    575 
    576 } ACPI_SIMPLE_REPAIR_INFO;
    577 
    578 
    579 /*
    580  * Bitmapped return value types
    581  * Note: the actual data types must be contiguous, a loop in nspredef.c
    582  * depends on this.
    583  */
    584 #define ACPI_RTYPE_ANY                  0x00
    585 #define ACPI_RTYPE_NONE                 0x01
    586 #define ACPI_RTYPE_INTEGER              0x02
    587 #define ACPI_RTYPE_STRING               0x04
    588 #define ACPI_RTYPE_BUFFER               0x08
    589 #define ACPI_RTYPE_PACKAGE              0x10
    590 #define ACPI_RTYPE_REFERENCE            0x20
    591 #define ACPI_RTYPE_ALL                  0x3F
    592 
    593 #define ACPI_NUM_RTYPES                 5   /* Number of actual object types */
    594 
    595 
    596 /* Info for running the _REG methods */
    597 
    598 typedef struct acpi_reg_walk_info
    599 {
    600     UINT32                  Function;
    601     UINT32                  RegRunCount;
    602     ACPI_ADR_SPACE_TYPE     SpaceId;
    603 
    604 } ACPI_REG_WALK_INFO;
    605 
    606 
    607 /*****************************************************************************
    608  *
    609  * Event typedefs and structs
    610  *
    611  ****************************************************************************/
    612 
    613 /* Dispatch info for each host-installed SCI handler */
    614 
    615 typedef struct acpi_sci_handler_info
    616 {
    617     struct acpi_sci_handler_info    *Next;
    618     ACPI_SCI_HANDLER                Address;        /* Address of handler */
    619     void                            *Context;       /* Context to be passed to handler */
    620 
    621 } ACPI_SCI_HANDLER_INFO;
    622 
    623 /* Dispatch info for each GPE -- either a method or handler, cannot be both */
    624 
    625 typedef struct acpi_gpe_handler_info
    626 {
    627     ACPI_GPE_HANDLER                Address;        /* Address of handler, if any */
    628     void                            *Context;       /* Context to be passed to handler */
    629     ACPI_NAMESPACE_NODE             *MethodNode;    /* Method node for this GPE level (saved) */
    630     UINT8                           OriginalFlags;  /* Original (pre-handler) GPE info */
    631     BOOLEAN                         OriginallyEnabled; /* True if GPE was originally enabled */
    632 
    633 } ACPI_GPE_HANDLER_INFO;
    634 
    635 /* Notify info for implicit notify, multiple device objects */
    636 
    637 typedef struct acpi_gpe_notify_info
    638 {
    639     ACPI_NAMESPACE_NODE             *DeviceNode;    /* Device to be notified */
    640     struct acpi_gpe_notify_info     *Next;
    641 
    642 } ACPI_GPE_NOTIFY_INFO;
    643 
    644 /*
    645  * GPE dispatch info. At any time, the GPE can have at most one type
    646  * of dispatch - Method, Handler, or Implicit Notify.
    647  */
    648 typedef union acpi_gpe_dispatch_info
    649 {
    650     ACPI_NAMESPACE_NODE             *MethodNode;    /* Method node for this GPE level */
    651     ACPI_GPE_HANDLER_INFO           *Handler;       /* Installed GPE handler */
    652     ACPI_GPE_NOTIFY_INFO            *NotifyList;    /* List of _PRW devices for implicit notifies */
    653 
    654 } ACPI_GPE_DISPATCH_INFO;
    655 
    656 /*
    657  * Information about a GPE, one per each GPE in an array.
    658  * NOTE: Important to keep this struct as small as possible.
    659  */
    660 typedef struct acpi_gpe_event_info
    661 {
    662     union acpi_gpe_dispatch_info    Dispatch;           /* Either Method, Handler, or NotifyList */
    663     struct acpi_gpe_register_info   *RegisterInfo;      /* Backpointer to register info */
    664     UINT8                           Flags;              /* Misc info about this GPE */
    665     UINT8                           GpeNumber;          /* This GPE */
    666     UINT8                           RuntimeCount;       /* References to a run GPE */
    667     BOOLEAN                         DisableForDispatch; /* Masked during dispatching */
    668 
    669 } ACPI_GPE_EVENT_INFO;
    670 
    671 /* Information about a GPE register pair, one per each status/enable pair in an array */
    672 
    673 typedef struct acpi_gpe_register_info
    674 {
    675     ACPI_GENERIC_ADDRESS            StatusAddress;  /* Address of status reg */
    676     ACPI_GENERIC_ADDRESS            EnableAddress;  /* Address of enable reg */
    677     UINT16                          BaseGpeNumber;  /* Base GPE number for this register */
    678     UINT8                           EnableForWake;  /* GPEs to keep enabled when sleeping */
    679     UINT8                           EnableForRun;   /* GPEs to keep enabled when running */
    680     UINT8                           MaskForRun;     /* GPEs to keep masked when running */
    681     UINT8                           EnableMask;     /* Current mask of enabled GPEs */
    682 
    683 } ACPI_GPE_REGISTER_INFO;
    684 
    685 /*
    686  * Information about a GPE register block, one per each installed block --
    687  * GPE0, GPE1, and one per each installed GPE Block Device.
    688  */
    689 typedef struct acpi_gpe_block_info
    690 {
    691     ACPI_NAMESPACE_NODE             *Node;
    692     struct acpi_gpe_block_info      *Previous;
    693     struct acpi_gpe_block_info      *Next;
    694     struct acpi_gpe_xrupt_info      *XruptBlock;    /* Backpointer to interrupt block */
    695     ACPI_GPE_REGISTER_INFO          *RegisterInfo;  /* One per GPE register pair */
    696     ACPI_GPE_EVENT_INFO             *EventInfo;     /* One for each GPE */
    697     UINT64                          Address;        /* Base address of the block */
    698     UINT32                          RegisterCount;  /* Number of register pairs in block */
    699     UINT16                          GpeCount;       /* Number of individual GPEs in block */
    700     UINT16                          BlockBaseNumber;/* Base GPE number for this block */
    701     UINT8                           SpaceId;
    702     BOOLEAN                         Initialized;    /* TRUE if this block is initialized */
    703 
    704 } ACPI_GPE_BLOCK_INFO;
    705 
    706 /* Information about GPE interrupt handlers, one per each interrupt level used for GPEs */
    707 
    708 typedef struct acpi_gpe_xrupt_info
    709 {
    710     struct acpi_gpe_xrupt_info      *Previous;
    711     struct acpi_gpe_xrupt_info      *Next;
    712     ACPI_GPE_BLOCK_INFO             *GpeBlockListHead;  /* List of GPE blocks for this xrupt */
    713     UINT32                          InterruptNumber;    /* System interrupt number */
    714 
    715 } ACPI_GPE_XRUPT_INFO;
    716 
    717 typedef struct acpi_gpe_walk_info
    718 {
    719     ACPI_NAMESPACE_NODE             *GpeDevice;
    720     ACPI_GPE_BLOCK_INFO             *GpeBlock;
    721     UINT16                          Count;
    722     ACPI_OWNER_ID                   OwnerId;
    723     BOOLEAN                         ExecuteByOwnerId;
    724 
    725 } ACPI_GPE_WALK_INFO;
    726 
    727 typedef struct acpi_gpe_device_info
    728 {
    729     UINT32                          Index;
    730     UINT32                          NextBlockBaseIndex;
    731     ACPI_STATUS                     Status;
    732     ACPI_NAMESPACE_NODE             *GpeDevice;
    733 
    734 } ACPI_GPE_DEVICE_INFO;
    735 
    736 typedef ACPI_STATUS (*ACPI_GPE_CALLBACK) (
    737     ACPI_GPE_XRUPT_INFO             *GpeXruptInfo,
    738     ACPI_GPE_BLOCK_INFO             *GpeBlock,
    739     void                            *Context);
    740 
    741 
    742 /* Information about each particular fixed event */
    743 
    744 typedef struct acpi_fixed_event_handler
    745 {
    746     ACPI_EVENT_HANDLER              Handler;        /* Address of handler. */
    747     void                            *Context;       /* Context to be passed to handler */
    748 
    749 } ACPI_FIXED_EVENT_HANDLER;
    750 
    751 typedef struct acpi_fixed_event_info
    752 {
    753     UINT8                           StatusRegisterId;
    754     UINT8                           EnableRegisterId;
    755     UINT16                          StatusBitMask;
    756     UINT16                          EnableBitMask;
    757 
    758 } ACPI_FIXED_EVENT_INFO;
    759 
    760 /* Information used during field processing */
    761 
    762 typedef struct acpi_field_info
    763 {
    764     UINT8                           SkipField;
    765     UINT8                           FieldFlag;
    766     UINT32                          PkgLength;
    767 
    768 } ACPI_FIELD_INFO;
    769 
    770 /* Information about the interrupt ID and _EVT of a GED device */
    771 
    772 typedef struct acpi_ged_handler_info
    773 {
    774     struct acpi_ged_handler_info    *Next;
    775     UINT32                          IntId;      /* The interrupt ID that triggers the execution ofthe EvtMethod. */
    776     ACPI_NAMESPACE_NODE             *EvtMethod; /* The _EVT method to be executed when an interrupt with ID = IntID is received */
    777 
    778 } ACPI_GED_HANDLER_INFO;
    779 
    780 /*****************************************************************************
    781  *
    782  * Generic "state" object for stacks
    783  *
    784  ****************************************************************************/
    785 
    786 #define ACPI_CONTROL_NORMAL                  0xC0
    787 #define ACPI_CONTROL_CONDITIONAL_EXECUTING   0xC1
    788 #define ACPI_CONTROL_PREDICATE_EXECUTING     0xC2
    789 #define ACPI_CONTROL_PREDICATE_FALSE         0xC3
    790 #define ACPI_CONTROL_PREDICATE_TRUE          0xC4
    791 
    792 
    793 #define ACPI_STATE_COMMON \
    794     void                            *Next; \
    795     UINT8                           DescriptorType; /* To differentiate various internal objs */\
    796     UINT8                           Flags; \
    797     UINT16                          Value; \
    798     UINT16                          State
    799 
    800     /* There are 2 bytes available here until the next natural alignment boundary */
    801 
    802 typedef struct acpi_common_state
    803 {
    804     ACPI_STATE_COMMON;
    805 } ACPI_COMMON_STATE;
    806 
    807 
    808 /*
    809  * Update state - used to traverse complex objects such as packages
    810  */
    811 typedef struct acpi_update_state
    812 {
    813     ACPI_STATE_COMMON;
    814     union acpi_operand_object       *Object;
    815 
    816 } ACPI_UPDATE_STATE;
    817 
    818 
    819 /*
    820  * Pkg state - used to traverse nested package structures
    821  */
    822 typedef struct acpi_pkg_state
    823 {
    824     ACPI_STATE_COMMON;
    825     UINT32                          Index;
    826     union acpi_operand_object       *SourceObject;
    827     union acpi_operand_object       *DestObject;
    828     struct acpi_walk_state          *WalkState;
    829     void                            *ThisTargetObj;
    830     UINT32                          NumPackages;
    831 
    832 } ACPI_PKG_STATE;
    833 
    834 
    835 /*
    836  * Control state - one per if/else and while constructs.
    837  * Allows nesting of these constructs
    838  */
    839 typedef struct acpi_control_state
    840 {
    841     ACPI_STATE_COMMON;
    842     UINT16                          Opcode;
    843     union acpi_parse_object         *PredicateOp;
    844     UINT8                           *AmlPredicateStart;     /* Start of if/while predicate */
    845     UINT8                           *PackageEnd;            /* End of if/while block */
    846     UINT64                          LoopTimeout;            /* While() loop timeout */
    847 
    848 } ACPI_CONTROL_STATE;
    849 
    850 
    851 /*
    852  * Scope state - current scope during namespace lookups
    853  */
    854 typedef struct acpi_scope_state
    855 {
    856     ACPI_STATE_COMMON;
    857     ACPI_NAMESPACE_NODE             *Node;
    858 
    859 } ACPI_SCOPE_STATE;
    860 
    861 
    862 typedef struct acpi_pscope_state
    863 {
    864     ACPI_STATE_COMMON;
    865     UINT32                          ArgCount;               /* Number of fixed arguments */
    866     union acpi_parse_object         *Op;                    /* Current op being parsed */
    867     UINT8                           *ArgEnd;                /* Current argument end */
    868     UINT8                           *PkgEnd;                /* Current package end */
    869     UINT32                          ArgList;                /* Next argument to parse */
    870 
    871 } ACPI_PSCOPE_STATE;
    872 
    873 
    874 /*
    875  * Thread state - one per thread across multiple walk states. Multiple walk
    876  * states are created when there are nested control methods executing.
    877  */
    878 typedef struct acpi_thread_state
    879 {
    880     ACPI_STATE_COMMON;
    881     UINT8                           CurrentSyncLevel;       /* Mutex Sync (nested acquire) level */
    882     struct acpi_walk_state          *WalkStateList;         /* Head of list of WalkStates for this thread */
    883     union acpi_operand_object       *AcquiredMutexList;     /* List of all currently acquired mutexes */
    884     ACPI_THREAD_ID                  ThreadId;               /* Running thread ID */
    885 
    886 } ACPI_THREAD_STATE;
    887 
    888 
    889 /*
    890  * Result values - used to accumulate the results of nested
    891  * AML arguments
    892  */
    893 typedef struct acpi_result_values
    894 {
    895     ACPI_STATE_COMMON;
    896     union acpi_operand_object       *ObjDesc [ACPI_RESULTS_FRAME_OBJ_NUM];
    897 
    898 } ACPI_RESULT_VALUES;
    899 
    900 
    901 typedef
    902 ACPI_STATUS (*ACPI_PARSE_DOWNWARDS) (
    903     struct acpi_walk_state          *WalkState,
    904     union acpi_parse_object         **OutOp);
    905 
    906 typedef
    907 ACPI_STATUS (*ACPI_PARSE_UPWARDS) (
    908     struct acpi_walk_state          *WalkState);
    909 
    910 
    911 /* Global handlers for AML Notifies */
    912 
    913 typedef struct acpi_global_notify_handler
    914 {
    915     ACPI_NOTIFY_HANDLER             Handler;
    916     void                            *Context;
    917 
    918 } ACPI_GLOBAL_NOTIFY_HANDLER;
    919 
    920 /*
    921  * Notify info - used to pass info to the deferred notify
    922  * handler/dispatcher.
    923  */
    924 typedef struct acpi_notify_info
    925 {
    926     ACPI_STATE_COMMON;
    927     UINT8                           HandlerListId;
    928     ACPI_NAMESPACE_NODE             *Node;
    929     union acpi_operand_object       *HandlerListHead;
    930     ACPI_GLOBAL_NOTIFY_HANDLER      *Global;
    931 
    932 } ACPI_NOTIFY_INFO;
    933 
    934 
    935 /* Generic state is union of structs above */
    936 
    937 typedef union acpi_generic_state
    938 {
    939     ACPI_COMMON_STATE               Common;
    940     ACPI_CONTROL_STATE              Control;
    941     ACPI_UPDATE_STATE               Update;
    942     ACPI_SCOPE_STATE                Scope;
    943     ACPI_PSCOPE_STATE               ParseScope;
    944     ACPI_PKG_STATE                  Pkg;
    945     ACPI_THREAD_STATE               Thread;
    946     ACPI_RESULT_VALUES              Results;
    947     ACPI_NOTIFY_INFO                Notify;
    948 
    949 } ACPI_GENERIC_STATE;
    950 
    951 
    952 /*****************************************************************************
    953  *
    954  * Interpreter typedefs and structs
    955  *
    956  ****************************************************************************/
    957 
    958 typedef
    959 ACPI_STATUS (*ACPI_EXECUTE_OP) (
    960     struct acpi_walk_state          *WalkState);
    961 
    962 /* Address Range info block */
    963 
    964 typedef struct acpi_address_range
    965 {
    966     struct acpi_address_range   *Next;
    967     ACPI_NAMESPACE_NODE         *RegionNode;
    968     ACPI_PHYSICAL_ADDRESS       StartAddress;
    969     ACPI_PHYSICAL_ADDRESS       EndAddress;
    970 
    971 } ACPI_ADDRESS_RANGE;
    972 
    973 
    974 /*****************************************************************************
    975  *
    976  * Parser typedefs and structs
    977  *
    978  ****************************************************************************/
    979 
    980 /*
    981  * AML opcode, name, and argument layout
    982  */
    983 typedef struct acpi_opcode_info
    984 {
    985 #if defined(ACPI_DISASSEMBLER) || defined(ACPI_DEBUG_OUTPUT)
    986     const char                      *Name;          /* Opcode name (disassembler/debug only) */
    987 #endif
    988     UINT32                          ParseArgs;      /* Grammar/Parse time arguments */
    989     UINT32                          RuntimeArgs;    /* Interpret time arguments */
    990     UINT16                          Flags;          /* Misc flags */
    991     UINT8                           ObjectType;     /* Corresponding internal object type */
    992     UINT8                           Class;          /* Opcode class */
    993     UINT8                           Type;           /* Opcode type */
    994 
    995 } ACPI_OPCODE_INFO;
    996 
    997 /* Structure for Resource Tag information */
    998 
    999 typedef struct acpi_tag_info
   1000 {
   1001     UINT32                          BitOffset;
   1002     UINT32                          BitLength;
   1003 
   1004 } ACPI_TAG_INFO;
   1005 
   1006 /* Value associated with the parse object */
   1007 
   1008 typedef union acpi_parse_value
   1009 {
   1010     UINT64                          Integer;        /* Integer constant (Up to 64 bits) */
   1011     UINT32                          Size;           /* bytelist or field size */
   1012     char                            *String;        /* NULL terminated string */
   1013     UINT8                           *Buffer;        /* buffer or string */
   1014     char                            *Name;          /* NULL terminated string */
   1015     union acpi_parse_object         *Arg;           /* arguments and contained ops */
   1016     ACPI_TAG_INFO                   Tag;            /* Resource descriptor tag info  */
   1017 
   1018 } ACPI_PARSE_VALUE;
   1019 
   1020 
   1021 #if defined(ACPI_DISASSEMBLER) || defined(ACPI_DEBUG_OUTPUT)
   1022 #define ACPI_DISASM_ONLY_MEMBERS(a)     a;
   1023 #else
   1024 #define ACPI_DISASM_ONLY_MEMBERS(a)
   1025 #endif
   1026 
   1027 #if defined(ACPI_ASL_COMPILER)
   1028 #define ACPI_CONVERTER_ONLY_MEMBERS(a)  a;
   1029 #else
   1030 #define ACPI_CONVERTER_ONLY_MEMBERS(a)
   1031 #endif
   1032 
   1033 #define ACPI_PARSE_COMMON \
   1034     union acpi_parse_object         *Parent;            /* Parent op */\
   1035     UINT8                           DescriptorType;     /* To differentiate various internal objs */\
   1036     UINT8                           Flags;              /* Type of Op */\
   1037     UINT16                          AmlOpcode;          /* AML opcode */\
   1038     UINT8                           *Aml;               /* Address of declaration in AML */\
   1039     union acpi_parse_object         *Next;              /* Next op */\
   1040     ACPI_NAMESPACE_NODE             *Node;              /* For use by interpreter */\
   1041     ACPI_PARSE_VALUE                Value;              /* Value or args associated with the opcode */\
   1042     UINT8                           ArgListLength;      /* Number of elements in the arg list */\
   1043      ACPI_DISASM_ONLY_MEMBERS (\
   1044     UINT16                          DisasmFlags;        /* Used during AML disassembly */\
   1045     UINT8                           DisasmOpcode;       /* Subtype used for disassembly */\
   1046     const char                      *OperatorSymbol;    /* Used for C-style operator name strings */\
   1047     char                            AmlOpName[16])      /* Op name (debug only) */\
   1048      ACPI_CONVERTER_ONLY_MEMBERS (\
   1049     char                            *InlineComment;     /* Inline comment */\
   1050     char                            *EndNodeComment;    /* End of node comment */\
   1051     char                            *NameComment;       /* Comment associated with the first parameter of the name node */\
   1052     char                            *CloseBraceComment; /* Comments that come after } on the same as } */\
   1053     ACPI_COMMENT_NODE               *CommentList;       /* comments that appears before this node */\
   1054     ACPI_COMMENT_NODE               *EndBlkComment;     /* comments that at the end of a block but before ) or } */\
   1055     char                            *CvFilename;        /* Filename associated with this node. Used for ASL/ASL+ converter */\
   1056     char                            *CvParentFilename)  /* Parent filename associated with this node. Used for ASL/ASL+ converter */
   1057 
   1058 
   1059 /* categories of comments */
   1060 
   1061 typedef enum
   1062 {
   1063     STANDARD_COMMENT = 1,
   1064     INLINE_COMMENT,
   1065     ENDNODE_COMMENT,
   1066     OPENBRACE_COMMENT,
   1067     CLOSE_BRACE_COMMENT,
   1068     STD_DEFBLK_COMMENT,
   1069     END_DEFBLK_COMMENT,
   1070     FILENAME_COMMENT,
   1071     PARENTFILENAME_COMMENT,
   1072     ENDBLK_COMMENT,
   1073     INCLUDE_COMMENT
   1074 
   1075 } ASL_COMMENT_TYPES;
   1076 
   1077 
   1078 /* Internal opcodes for DisasmOpcode field above */
   1079 
   1080 #define ACPI_DASM_BUFFER                0x00        /* Buffer is a simple data buffer */
   1081 #define ACPI_DASM_RESOURCE              0x01        /* Buffer is a Resource Descriptor */
   1082 #define ACPI_DASM_STRING                0x02        /* Buffer is a ASCII string */
   1083 #define ACPI_DASM_UNICODE               0x03        /* Buffer is a Unicode string */
   1084 #define ACPI_DASM_PLD_METHOD            0x04        /* Buffer is a _PLD method bit-packed buffer */
   1085 #define ACPI_DASM_UUID                  0x05        /* Buffer is a UUID/GUID */
   1086 #define ACPI_DASM_EISAID                0x06        /* Integer is an EISAID */
   1087 #define ACPI_DASM_MATCHOP               0x07        /* Parent opcode is a Match() operator */
   1088 #define ACPI_DASM_LNOT_PREFIX           0x08        /* Start of a LNotEqual (etc.) pair of opcodes */
   1089 #define ACPI_DASM_LNOT_SUFFIX           0x09        /* End  of a LNotEqual (etc.) pair of opcodes */
   1090 #define ACPI_DASM_HID_STRING            0x0A        /* String is a _HID or _CID */
   1091 #define ACPI_DASM_IGNORE_SINGLE         0x0B        /* Ignore the opcode but not it's children */
   1092 #define ACPI_DASM_SWITCH                0x0C        /* While is a Switch */
   1093 #define ACPI_DASM_SWITCH_PREDICATE      0x0D        /* Object is a predicate for a Switch or Case block */
   1094 #define ACPI_DASM_CASE                  0x0E        /* If/Else is a Case in a Switch/Case block */
   1095 #define ACPI_DASM_DEFAULT               0x0F        /* Else is a Default in a Switch/Case block */
   1096 
   1097 
   1098 /*
   1099  * List struct used in the -ca option
   1100  */
   1101 typedef struct acpi_comment_node
   1102 {
   1103   char                      *Comment;
   1104   struct acpi_comment_node  *Next;
   1105 
   1106 } ACPI_COMMENT_NODE;
   1107 
   1108 
   1109 typedef struct acpi_comment_addr_node
   1110 {
   1111   UINT8                                    *Addr;
   1112   struct acpi_comment_addr_node            *Next;
   1113 } ACPI_COMMENT_ADDR_NODE;
   1114 
   1115 /*
   1116  * File node - used for "Include" operator file stack and
   1117  * dependency tree for the -ca option
   1118  */
   1119 typedef struct acpi_file_node
   1120 {
   1121     void                    *File;
   1122     char                    *Filename;
   1123     char                    *FileStart;  /* Points to AML and indicates when the AML for this particular file starts. */
   1124     char                    *FileEnd;    /* Points to AML and indicates when the AML for this particular file ends. */
   1125     struct acpi_file_node   *Next;
   1126     struct acpi_file_node   *Parent;
   1127     BOOLEAN                 IncludeWritten;
   1128     ACPI_COMMENT_NODE       *IncludeComment;
   1129 
   1130 } ACPI_FILE_NODE;
   1131 
   1132 
   1133 /*
   1134  * Generic operation (for example:  If, While, Store)
   1135  */
   1136 typedef struct acpi_parse_obj_common
   1137 {
   1138     ACPI_PARSE_COMMON
   1139 } ACPI_PARSE_OBJ_COMMON;
   1140 
   1141 
   1142 /*
   1143  * Extended Op for named ops (Scope, Method, etc.), deferred ops (Methods and OpRegions),
   1144  * and bytelists.
   1145  */
   1146 typedef struct acpi_parse_obj_named
   1147 {
   1148     ACPI_PARSE_COMMON
   1149     char                            *Path;
   1150     UINT8                           *Data;          /* AML body or bytelist data */
   1151     UINT32                          Length;         /* AML length */
   1152     UINT32                          Name;           /* 4-byte name or zero if no name */
   1153 
   1154 } ACPI_PARSE_OBJ_NAMED;
   1155 
   1156 
   1157 /* This version is used by the iASL compiler only */
   1158 
   1159 #define ACPI_MAX_PARSEOP_NAME       20
   1160 
   1161 typedef struct acpi_parse_obj_asl
   1162 {
   1163     ACPI_PARSE_COMMON
   1164     union acpi_parse_object         *Child;
   1165     union acpi_parse_object         *ParentMethod;
   1166     char                            *Filename;
   1167     BOOLEAN                         FileChanged;
   1168     char                            *ParentFilename;
   1169     char                            *ExternalName;
   1170     char                            *Namepath;
   1171     char                            NameSeg[4];
   1172     UINT32                          ExtraValue;
   1173     UINT32                          Column;
   1174     UINT32                          LineNumber;
   1175     UINT32                          LogicalLineNumber;
   1176     UINT32                          LogicalByteOffset;
   1177     UINT32                          EndLine;
   1178     UINT32                          EndLogicalLine;
   1179     UINT32                          AcpiBtype;
   1180     UINT32                          AmlLength;
   1181     UINT32                          AmlSubtreeLength;
   1182     UINT32                          FinalAmlLength;
   1183     UINT32                          FinalAmlOffset;
   1184     UINT32                          CompileFlags;
   1185     UINT16                          ParseOpcode;
   1186     UINT8                           AmlOpcodeLength;
   1187     UINT8                           AmlPkgLenBytes;
   1188     UINT8                           Extra;
   1189     char                            ParseOpName[ACPI_MAX_PARSEOP_NAME];
   1190 
   1191 } ACPI_PARSE_OBJ_ASL;
   1192 
   1193 typedef union acpi_parse_object
   1194 {
   1195     ACPI_PARSE_OBJ_COMMON           Common;
   1196     ACPI_PARSE_OBJ_NAMED            Named;
   1197     ACPI_PARSE_OBJ_ASL              Asl;
   1198 
   1199 } ACPI_PARSE_OBJECT;
   1200 
   1201 typedef struct asl_comment_state
   1202 {
   1203     UINT8                           CommentType;
   1204     UINT32                          SpacesBefore;
   1205     ACPI_PARSE_OBJECT               *LatestParseOp;
   1206     ACPI_PARSE_OBJECT               *ParsingParenBraceNode;
   1207     BOOLEAN                         CaptureComments;
   1208 
   1209 } ASL_COMMENT_STATE;
   1210 
   1211 
   1212 /*
   1213  * Parse state - one state per parser invocation and each control
   1214  * method.
   1215  */
   1216 typedef struct acpi_parse_state
   1217 {
   1218     UINT8                           *AmlStart;      /* First AML byte */
   1219     UINT8                           *Aml;           /* Next AML byte */
   1220     UINT8                           *AmlEnd;        /* (last + 1) AML byte */
   1221     UINT8                           *PkgStart;      /* Current package begin */
   1222     UINT8                           *PkgEnd;        /* Current package end */
   1223     union acpi_parse_object         *StartOp;       /* Root of parse tree */
   1224     struct acpi_namespace_node      *StartNode;
   1225     union acpi_generic_state        *Scope;         /* Current scope */
   1226     union acpi_parse_object         *StartScope;
   1227     UINT32                          AmlSize;
   1228 
   1229 } ACPI_PARSE_STATE;
   1230 
   1231 
   1232 /* Parse object flags */
   1233 
   1234 #define ACPI_PARSEOP_GENERIC                0x01
   1235 #define ACPI_PARSEOP_NAMED_OBJECT           0x02
   1236 #define ACPI_PARSEOP_DEFERRED               0x04
   1237 #define ACPI_PARSEOP_BYTELIST               0x08
   1238 #define ACPI_PARSEOP_IN_STACK               0x10
   1239 #define ACPI_PARSEOP_TARGET                 0x20
   1240 #define ACPI_PARSEOP_IN_CACHE               0x80
   1241 
   1242 /* Parse object DisasmFlags */
   1243 
   1244 #define ACPI_PARSEOP_IGNORE                 0x0001
   1245 #define ACPI_PARSEOP_PARAMETER_LIST         0x0002
   1246 #define ACPI_PARSEOP_EMPTY_TERMLIST         0x0004
   1247 #define ACPI_PARSEOP_PREDEFINED_CHECKED     0x0008
   1248 #define ACPI_PARSEOP_CLOSING_PAREN          0x0010
   1249 #define ACPI_PARSEOP_COMPOUND_ASSIGNMENT    0x0020
   1250 #define ACPI_PARSEOP_ASSIGNMENT             0x0040
   1251 #define ACPI_PARSEOP_ELSEIF                 0x0080
   1252 #define ACPI_PARSEOP_LEGACY_ASL_ONLY        0x0100
   1253 
   1254 
   1255 /*****************************************************************************
   1256  *
   1257  * Hardware (ACPI registers) and PNP
   1258  *
   1259  ****************************************************************************/
   1260 
   1261 typedef struct acpi_bit_register_info
   1262 {
   1263     UINT8                           ParentRegister;
   1264     UINT8                           BitPosition;
   1265     UINT16                          AccessBitMask;
   1266 
   1267 } ACPI_BIT_REGISTER_INFO;
   1268 
   1269 
   1270 /*
   1271  * Some ACPI registers have bits that must be ignored -- meaning that they
   1272  * must be preserved.
   1273  */
   1274 #define ACPI_PM1_STATUS_PRESERVED_BITS          0x0800  /* Bit 11 */
   1275 
   1276 /* Write-only bits must be zeroed by software */
   1277 
   1278 #define ACPI_PM1_CONTROL_WRITEONLY_BITS         0x2004  /* Bits 13, 2 */
   1279 
   1280 /* For control registers, both ignored and reserved bits must be preserved */
   1281 
   1282 /*
   1283  * For PM1 control, the SCI enable bit (bit 0, SCI_EN) is defined by the
   1284  * ACPI specification to be a "preserved" bit - "OSPM always preserves this
   1285  * bit position", section 4.7.3.2.1. However, on some machines the OS must
   1286  * write a one to this bit after resume for the machine to work properly.
   1287  * To enable this, we no longer attempt to preserve this bit. No machines
   1288  * are known to fail if the bit is not preserved. (May 2009)
   1289  */
   1290 #define ACPI_PM1_CONTROL_IGNORED_BITS           0x0200  /* Bit 9 */
   1291 #define ACPI_PM1_CONTROL_RESERVED_BITS          0xC1F8  /* Bits 14-15, 3-8 */
   1292 #define ACPI_PM1_CONTROL_PRESERVED_BITS \
   1293          (ACPI_PM1_CONTROL_IGNORED_BITS | ACPI_PM1_CONTROL_RESERVED_BITS)
   1294 
   1295 #define ACPI_PM2_CONTROL_PRESERVED_BITS         0xFFFFFFFE /* All except bit 0 */
   1296 
   1297 /*
   1298  * Register IDs
   1299  * These are the full ACPI registers
   1300  */
   1301 #define ACPI_REGISTER_PM1_STATUS                0x01
   1302 #define ACPI_REGISTER_PM1_ENABLE                0x02
   1303 #define ACPI_REGISTER_PM1_CONTROL               0x03
   1304 #define ACPI_REGISTER_PM2_CONTROL               0x04
   1305 #define ACPI_REGISTER_PM_TIMER                  0x05
   1306 #define ACPI_REGISTER_PROCESSOR_BLOCK           0x06
   1307 #define ACPI_REGISTER_SMI_COMMAND_BLOCK         0x07
   1308 
   1309 
   1310 /* Masks used to access the BitRegisters */
   1311 
   1312 #define ACPI_BITMASK_TIMER_STATUS               0x0001
   1313 #define ACPI_BITMASK_BUS_MASTER_STATUS          0x0010
   1314 #define ACPI_BITMASK_GLOBAL_LOCK_STATUS         0x0020
   1315 #define ACPI_BITMASK_POWER_BUTTON_STATUS        0x0100
   1316 #define ACPI_BITMASK_SLEEP_BUTTON_STATUS        0x0200
   1317 #define ACPI_BITMASK_RT_CLOCK_STATUS            0x0400
   1318 #define ACPI_BITMASK_PCIEXP_WAKE_STATUS         0x4000    /* ACPI 3.0 */
   1319 #define ACPI_BITMASK_WAKE_STATUS                0x8000
   1320 
   1321 #define ACPI_BITMASK_ALL_FIXED_STATUS           (\
   1322     ACPI_BITMASK_TIMER_STATUS          | \
   1323     ACPI_BITMASK_BUS_MASTER_STATUS     | \
   1324     ACPI_BITMASK_GLOBAL_LOCK_STATUS    | \
   1325     ACPI_BITMASK_POWER_BUTTON_STATUS   | \
   1326     ACPI_BITMASK_SLEEP_BUTTON_STATUS   | \
   1327     ACPI_BITMASK_RT_CLOCK_STATUS       | \
   1328     ACPI_BITMASK_PCIEXP_WAKE_STATUS    | \
   1329     ACPI_BITMASK_WAKE_STATUS)
   1330 
   1331 #define ACPI_BITMASK_TIMER_ENABLE               0x0001
   1332 #define ACPI_BITMASK_GLOBAL_LOCK_ENABLE         0x0020
   1333 #define ACPI_BITMASK_POWER_BUTTON_ENABLE        0x0100
   1334 #define ACPI_BITMASK_SLEEP_BUTTON_ENABLE        0x0200
   1335 #define ACPI_BITMASK_RT_CLOCK_ENABLE            0x0400
   1336 #define ACPI_BITMASK_PCIEXP_WAKE_DISABLE        0x4000    /* ACPI 3.0 */
   1337 
   1338 #define ACPI_BITMASK_SCI_ENABLE                 0x0001
   1339 #define ACPI_BITMASK_BUS_MASTER_RLD             0x0002
   1340 #define ACPI_BITMASK_GLOBAL_LOCK_RELEASE        0x0004
   1341 #define ACPI_BITMASK_SLEEP_TYPE                 0x1C00
   1342 #define ACPI_BITMASK_SLEEP_ENABLE               0x2000
   1343 
   1344 #define ACPI_BITMASK_ARB_DISABLE                0x0001
   1345 
   1346 
   1347 /* Raw bit position of each BitRegister */
   1348 
   1349 #define ACPI_BITPOSITION_TIMER_STATUS           0x00
   1350 #define ACPI_BITPOSITION_BUS_MASTER_STATUS      0x04
   1351 #define ACPI_BITPOSITION_GLOBAL_LOCK_STATUS     0x05
   1352 #define ACPI_BITPOSITION_POWER_BUTTON_STATUS    0x08
   1353 #define ACPI_BITPOSITION_SLEEP_BUTTON_STATUS    0x09
   1354 #define ACPI_BITPOSITION_RT_CLOCK_STATUS        0x0A
   1355 #define ACPI_BITPOSITION_PCIEXP_WAKE_STATUS     0x0E    /* ACPI 3.0 */
   1356 #define ACPI_BITPOSITION_WAKE_STATUS            0x0F
   1357 
   1358 #define ACPI_BITPOSITION_TIMER_ENABLE           0x00
   1359 #define ACPI_BITPOSITION_GLOBAL_LOCK_ENABLE     0x05
   1360 #define ACPI_BITPOSITION_POWER_BUTTON_ENABLE    0x08
   1361 #define ACPI_BITPOSITION_SLEEP_BUTTON_ENABLE    0x09
   1362 #define ACPI_BITPOSITION_RT_CLOCK_ENABLE        0x0A
   1363 #define ACPI_BITPOSITION_PCIEXP_WAKE_DISABLE    0x0E    /* ACPI 3.0 */
   1364 
   1365 #define ACPI_BITPOSITION_SCI_ENABLE             0x00
   1366 #define ACPI_BITPOSITION_BUS_MASTER_RLD         0x01
   1367 #define ACPI_BITPOSITION_GLOBAL_LOCK_RELEASE    0x02
   1368 #define ACPI_BITPOSITION_SLEEP_TYPE             0x0A
   1369 #define ACPI_BITPOSITION_SLEEP_ENABLE           0x0D
   1370 
   1371 #define ACPI_BITPOSITION_ARB_DISABLE            0x00
   1372 
   1373 
   1374 /* Structs and definitions for _OSI support and I/O port validation */
   1375 
   1376 #define ACPI_ALWAYS_ILLEGAL             0x00
   1377 
   1378 typedef struct acpi_interface_info
   1379 {
   1380     const char                  *Name;
   1381     struct acpi_interface_info  *Next;
   1382     UINT8                       Flags;
   1383     UINT8                       Value;
   1384 
   1385 } ACPI_INTERFACE_INFO;
   1386 
   1387 #define ACPI_OSI_INVALID                0x01
   1388 #define ACPI_OSI_DYNAMIC                0x02
   1389 #define ACPI_OSI_FEATURE                0x04
   1390 #define ACPI_OSI_DEFAULT_INVALID        0x08
   1391 #define ACPI_OSI_OPTIONAL_FEATURE       (ACPI_OSI_FEATURE | ACPI_OSI_DEFAULT_INVALID | ACPI_OSI_INVALID)
   1392 
   1393 typedef struct acpi_port_info
   1394 {
   1395     const char              *Name;
   1396     UINT16                  Start;
   1397     UINT16                  End;
   1398     UINT8                   OsiDependency;
   1399 
   1400 } ACPI_PORT_INFO;
   1401 
   1402 
   1403 /*****************************************************************************
   1404  *
   1405  * Resource descriptors
   1406  *
   1407  ****************************************************************************/
   1408 
   1409 /* ResourceType values */
   1410 
   1411 #define ACPI_ADDRESS_TYPE_MEMORY_RANGE          0
   1412 #define ACPI_ADDRESS_TYPE_IO_RANGE              1
   1413 #define ACPI_ADDRESS_TYPE_BUS_NUMBER_RANGE      2
   1414 
   1415 #define ACPI_ADDRESS_TYPE_PCC_NUMBER            0xA
   1416 
   1417 /* Resource descriptor types and masks */
   1418 
   1419 #define ACPI_RESOURCE_NAME_LARGE                0x80
   1420 #define ACPI_RESOURCE_NAME_SMALL                0x00
   1421 
   1422 #define ACPI_RESOURCE_NAME_SMALL_MASK           0x78 /* Bits 6:3 contain the type */
   1423 #define ACPI_RESOURCE_NAME_SMALL_LENGTH_MASK    0x07 /* Bits 2:0 contain the length */
   1424 #define ACPI_RESOURCE_NAME_LARGE_MASK           0x7F /* Bits 6:0 contain the type */
   1425 
   1426 
   1427 /*
   1428  * Small resource descriptor "names" as defined by the ACPI specification.
   1429  * Note: Bits 2:0 are used for the descriptor length
   1430  */
   1431 #define ACPI_RESOURCE_NAME_IRQ                  0x20
   1432 #define ACPI_RESOURCE_NAME_DMA                  0x28
   1433 #define ACPI_RESOURCE_NAME_START_DEPENDENT      0x30
   1434 #define ACPI_RESOURCE_NAME_END_DEPENDENT        0x38
   1435 #define ACPI_RESOURCE_NAME_IO                   0x40
   1436 #define ACPI_RESOURCE_NAME_FIXED_IO             0x48
   1437 #define ACPI_RESOURCE_NAME_FIXED_DMA            0x50
   1438 #define ACPI_RESOURCE_NAME_RESERVED_S2          0x58
   1439 #define ACPI_RESOURCE_NAME_RESERVED_S3          0x60
   1440 #define ACPI_RESOURCE_NAME_RESERVED_S4          0x68
   1441 #define ACPI_RESOURCE_NAME_VENDOR_SMALL         0x70
   1442 #define ACPI_RESOURCE_NAME_END_TAG              0x78
   1443 
   1444 /*
   1445  * Large resource descriptor "names" as defined by the ACPI specification.
   1446  * Note: includes the Large Descriptor bit in bit[7]
   1447  */
   1448 #define ACPI_RESOURCE_NAME_MEMORY24             0x81
   1449 #define ACPI_RESOURCE_NAME_GENERIC_REGISTER     0x82
   1450 #define ACPI_RESOURCE_NAME_RESERVED_L1          0x83
   1451 #define ACPI_RESOURCE_NAME_VENDOR_LARGE         0x84
   1452 #define ACPI_RESOURCE_NAME_MEMORY32             0x85
   1453 #define ACPI_RESOURCE_NAME_FIXED_MEMORY32       0x86
   1454 #define ACPI_RESOURCE_NAME_ADDRESS32            0x87
   1455 #define ACPI_RESOURCE_NAME_ADDRESS16            0x88
   1456 #define ACPI_RESOURCE_NAME_EXTENDED_IRQ         0x89
   1457 #define ACPI_RESOURCE_NAME_ADDRESS64            0x8A
   1458 #define ACPI_RESOURCE_NAME_EXTENDED_ADDRESS64   0x8B
   1459 #define ACPI_RESOURCE_NAME_GPIO                 0x8C
   1460 #define ACPI_RESOURCE_NAME_PIN_FUNCTION         0x8D
   1461 #define ACPI_RESOURCE_NAME_SERIAL_BUS           0x8E
   1462 #define ACPI_RESOURCE_NAME_PIN_CONFIG           0x8F
   1463 #define ACPI_RESOURCE_NAME_PIN_GROUP            0x90
   1464 #define ACPI_RESOURCE_NAME_PIN_GROUP_FUNCTION   0x91
   1465 #define ACPI_RESOURCE_NAME_PIN_GROUP_CONFIG     0x92
   1466 #define ACPI_RESOURCE_NAME_CLOCK_INPUT          0x93
   1467 #define ACPI_RESOURCE_NAME_LARGE_MAX            0x94
   1468 
   1469 
   1470 /*****************************************************************************
   1471  *
   1472  * Miscellaneous
   1473  *
   1474  ****************************************************************************/
   1475 
   1476 #define ACPI_ASCII_ZERO                 0x30
   1477 
   1478 
   1479 /*****************************************************************************
   1480  *
   1481  * Disassembler
   1482  *
   1483  ****************************************************************************/
   1484 
   1485 typedef struct acpi_external_list
   1486 {
   1487     char                        *Path;
   1488     char                        *InternalPath;
   1489     struct acpi_external_list   *Next;
   1490     UINT32                      Value;
   1491     UINT16                      Length;
   1492     UINT16                      Flags;
   1493     UINT8                       Type;
   1494 
   1495 } ACPI_EXTERNAL_LIST;
   1496 
   1497 /* Values for Flags field above */
   1498 
   1499 #define ACPI_EXT_RESOLVED_REFERENCE         0x01    /* Object was resolved during cross ref */
   1500 #define ACPI_EXT_ORIGIN_FROM_FILE           0x02    /* External came from a file */
   1501 #define ACPI_EXT_INTERNAL_PATH_ALLOCATED    0x04    /* Deallocate internal path on completion */
   1502 #define ACPI_EXT_EXTERNAL_EMITTED           0x08    /* External() statement has been emitted */
   1503 #define ACPI_EXT_ORIGIN_FROM_OPCODE         0x10    /* External came from a External() opcode */
   1504 #define ACPI_EXT_CONFLICTING_DECLARATION    0x20    /* External has a conflicting declaration within AML */
   1505 
   1506 
   1507 typedef struct acpi_external_file
   1508 {
   1509     char                        *Path;
   1510     struct acpi_external_file   *Next;
   1511 
   1512 } ACPI_EXTERNAL_FILE;
   1513 
   1514 
   1515 typedef struct acpi_parse_object_list
   1516 {
   1517     ACPI_PARSE_OBJECT               *Op;
   1518     struct acpi_parse_object_list   *Next;
   1519 
   1520 } ACPI_PARSE_OBJECT_LIST;
   1521 
   1522 /*****************************************************************************
   1523  *
   1524  * Debugger
   1525  *
   1526  ****************************************************************************/
   1527 
   1528 typedef struct acpi_db_method_info
   1529 {
   1530     ACPI_HANDLE                     Method;
   1531     ACPI_HANDLE                     MainThreadGate;
   1532     ACPI_HANDLE                     ThreadCompleteGate;
   1533     ACPI_HANDLE                     InfoGate;
   1534     ACPI_THREAD_ID                  *Threads;
   1535     UINT32                          NumThreads;
   1536     UINT32                          NumCreated;
   1537     UINT32                          NumCompleted;
   1538 
   1539     char                            *Name;
   1540     UINT32                          Flags;
   1541     UINT32                          NumLoops;
   1542     char                            Pathname[ACPI_DB_LINE_BUFFER_SIZE];
   1543     char                            **Args;
   1544     ACPI_OBJECT_TYPE                *Types;
   1545 
   1546     /*
   1547      * Arguments to be passed to method for the commands Threads and
   1548      * Background. Note, ACPI specifies a maximum of 7 arguments (0 - 6).
   1549      *
   1550      * For the Threads command, the Number of threads, ID of current
   1551      * thread and Index of current thread inside all them created.
   1552      */
   1553     char                            InitArgs;
   1554 #ifdef ACPI_DEBUGGER
   1555     ACPI_OBJECT_TYPE                ArgTypes[ACPI_METHOD_NUM_ARGS];
   1556 #endif
   1557     char                            *Arguments[ACPI_METHOD_NUM_ARGS];
   1558     char                            NumThreadsStr[11];
   1559     char                            IdOfThreadStr[11];
   1560     char                            IndexOfThreadStr[11];
   1561 
   1562 } ACPI_DB_METHOD_INFO;
   1563 
   1564 typedef struct acpi_integrity_info
   1565 {
   1566     UINT32                          Nodes;
   1567     UINT32                          Objects;
   1568 
   1569 } ACPI_INTEGRITY_INFO;
   1570 
   1571 
   1572 #define ACPI_DB_DISABLE_OUTPUT          0x00
   1573 #define ACPI_DB_REDIRECTABLE_OUTPUT     0x01
   1574 #define ACPI_DB_CONSOLE_OUTPUT          0x02
   1575 #define ACPI_DB_DUPLICATE_OUTPUT        0x03
   1576 
   1577 
   1578 typedef struct acpi_object_info
   1579 {
   1580     UINT32                  Types[ACPI_TOTAL_TYPES];
   1581 
   1582 } ACPI_OBJECT_INFO;
   1583 
   1584 
   1585 /*****************************************************************************
   1586  *
   1587  * Debug
   1588  *
   1589  ****************************************************************************/
   1590 
   1591 /* Entry for a memory allocation (debug only) */
   1592 
   1593 #define ACPI_MEM_MALLOC                 0
   1594 #define ACPI_MEM_CALLOC                 1
   1595 #define ACPI_MAX_MODULE_NAME            16
   1596 
   1597 #define ACPI_COMMON_DEBUG_MEM_HEADER \
   1598     struct acpi_debug_mem_block     *Previous; \
   1599     struct acpi_debug_mem_block     *Next; \
   1600     UINT32                          Size; \
   1601     UINT32                          Component; \
   1602     UINT32                          Line; \
   1603     char                            Module[ACPI_MAX_MODULE_NAME]; \
   1604     UINT8                           AllocType;
   1605 
   1606 typedef struct acpi_debug_mem_header
   1607 {
   1608     ACPI_COMMON_DEBUG_MEM_HEADER
   1609 
   1610 } ACPI_DEBUG_MEM_HEADER;
   1611 
   1612 typedef struct acpi_debug_mem_block
   1613 {
   1614     ACPI_COMMON_DEBUG_MEM_HEADER
   1615     UINT64                          UserSpace;
   1616 
   1617 } ACPI_DEBUG_MEM_BLOCK;
   1618 
   1619 
   1620 #define ACPI_MEM_LIST_GLOBAL            0
   1621 #define ACPI_MEM_LIST_NSNODE            1
   1622 #define ACPI_MEM_LIST_MAX               1
   1623 #define ACPI_NUM_MEM_LISTS              2
   1624 
   1625 
   1626 /*****************************************************************************
   1627  *
   1628  * Info/help support
   1629  *
   1630  ****************************************************************************/
   1631 
   1632 typedef struct ah_predefined_name
   1633 {
   1634     char            *Name;
   1635     char            *Description;
   1636 #ifndef ACPI_ASL_COMPILER
   1637     char            *Action;
   1638 #endif
   1639 
   1640 } AH_PREDEFINED_NAME;
   1641 
   1642 typedef struct ah_device_id
   1643 {
   1644     const char      *Name;
   1645     const char      *Description;
   1646 
   1647 } AH_DEVICE_ID;
   1648 
   1649 typedef struct ah_uuid
   1650 {
   1651     const char      *Description;
   1652     const char      *String;
   1653 
   1654 } AH_UUID;
   1655 
   1656 typedef struct ah_table
   1657 {
   1658     char                    *Signature;
   1659     char                    *Description;
   1660 
   1661 } AH_TABLE;
   1662 
   1663 #endif /* __ACLOCAL_H__ */
   1664