xref: /dflybsd-src/sys/contrib/dev/acpica/source/include/aclocal.h (revision 383048aca08c2de51d27aa8638a36982a0d74550)
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 - 2021, 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];
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];
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  
771  /*****************************************************************************
772   *
773   * Generic "state" object for stacks
774   *
775   ****************************************************************************/
776  
777  #define ACPI_CONTROL_NORMAL                  0xC0
778  #define ACPI_CONTROL_CONDITIONAL_EXECUTING   0xC1
779  #define ACPI_CONTROL_PREDICATE_EXECUTING     0xC2
780  #define ACPI_CONTROL_PREDICATE_FALSE         0xC3
781  #define ACPI_CONTROL_PREDICATE_TRUE          0xC4
782  
783  
784  #define ACPI_STATE_COMMON \
785      void                            *Next; \
786      UINT8                           DescriptorType; /* To differentiate various internal objs */\
787      UINT8                           Flags; \
788      UINT16                          Value; \
789      UINT16                          State;
790  
791      /* There are 2 bytes available here until the next natural alignment boundary */
792  
793  typedef struct acpi_common_state
794  {
795      ACPI_STATE_COMMON
796  } ACPI_COMMON_STATE;
797  
798  
799  /*
800   * Update state - used to traverse complex objects such as packages
801   */
802  typedef struct acpi_update_state
803  {
804      ACPI_STATE_COMMON
805      union acpi_operand_object       *Object;
806  
807  } ACPI_UPDATE_STATE;
808  
809  
810  /*
811   * Pkg state - used to traverse nested package structures
812   */
813  typedef struct acpi_pkg_state
814  {
815      ACPI_STATE_COMMON
816      UINT32                          Index;
817      union acpi_operand_object       *SourceObject;
818      union acpi_operand_object       *DestObject;
819      struct acpi_walk_state          *WalkState;
820      void                            *ThisTargetObj;
821      UINT32                          NumPackages;
822  
823  } ACPI_PKG_STATE;
824  
825  
826  /*
827   * Control state - one per if/else and while constructs.
828   * Allows nesting of these constructs
829   */
830  typedef struct acpi_control_state
831  {
832      ACPI_STATE_COMMON
833      UINT16                          Opcode;
834      union acpi_parse_object         *PredicateOp;
835      UINT8                           *AmlPredicateStart;     /* Start of if/while predicate */
836      UINT8                           *PackageEnd;            /* End of if/while block */
837      UINT64                          LoopTimeout;            /* While() loop timeout */
838  
839  } ACPI_CONTROL_STATE;
840  
841  
842  /*
843   * Scope state - current scope during namespace lookups
844   */
845  typedef struct acpi_scope_state
846  {
847      ACPI_STATE_COMMON
848      ACPI_NAMESPACE_NODE             *Node;
849  
850  } ACPI_SCOPE_STATE;
851  
852  
853  typedef struct acpi_pscope_state
854  {
855      ACPI_STATE_COMMON
856      UINT32                          ArgCount;               /* Number of fixed arguments */
857      union acpi_parse_object         *Op;                    /* Current op being parsed */
858      UINT8                           *ArgEnd;                /* Current argument end */
859      UINT8                           *PkgEnd;                /* Current package end */
860      UINT32                          ArgList;                /* Next argument to parse */
861  
862  } ACPI_PSCOPE_STATE;
863  
864  
865  /*
866   * Thread state - one per thread across multiple walk states. Multiple walk
867   * states are created when there are nested control methods executing.
868   */
869  typedef struct acpi_thread_state
870  {
871      ACPI_STATE_COMMON
872      UINT8                           CurrentSyncLevel;       /* Mutex Sync (nested acquire) level */
873      struct acpi_walk_state          *WalkStateList;         /* Head of list of WalkStates for this thread */
874      union acpi_operand_object       *AcquiredMutexList;     /* List of all currently acquired mutexes */
875      ACPI_THREAD_ID                  ThreadId;               /* Running thread ID */
876  
877  } ACPI_THREAD_STATE;
878  
879  
880  /*
881   * Result values - used to accumulate the results of nested
882   * AML arguments
883   */
884  typedef struct acpi_result_values
885  {
886      ACPI_STATE_COMMON
887      union acpi_operand_object       *ObjDesc [ACPI_RESULTS_FRAME_OBJ_NUM];
888  
889  } ACPI_RESULT_VALUES;
890  
891  
892  typedef
893  ACPI_STATUS (*ACPI_PARSE_DOWNWARDS) (
894      struct acpi_walk_state          *WalkState,
895      union acpi_parse_object         **OutOp);
896  
897  typedef
898  ACPI_STATUS (*ACPI_PARSE_UPWARDS) (
899      struct acpi_walk_state          *WalkState);
900  
901  
902  /* Global handlers for AML Notifies */
903  
904  typedef struct acpi_global_notify_handler
905  {
906      ACPI_NOTIFY_HANDLER             Handler;
907      void                            *Context;
908  
909  } ACPI_GLOBAL_NOTIFY_HANDLER;
910  
911  /*
912   * Notify info - used to pass info to the deferred notify
913   * handler/dispatcher.
914   */
915  typedef struct acpi_notify_info
916  {
917      ACPI_STATE_COMMON
918      UINT8                           HandlerListId;
919      ACPI_NAMESPACE_NODE             *Node;
920      union acpi_operand_object       *HandlerListHead;
921      ACPI_GLOBAL_NOTIFY_HANDLER      *Global;
922  
923  } ACPI_NOTIFY_INFO;
924  
925  
926  /* Generic state is union of structs above */
927  
928  typedef union acpi_generic_state
929  {
930      ACPI_COMMON_STATE               Common;
931      ACPI_CONTROL_STATE              Control;
932      ACPI_UPDATE_STATE               Update;
933      ACPI_SCOPE_STATE                Scope;
934      ACPI_PSCOPE_STATE               ParseScope;
935      ACPI_PKG_STATE                  Pkg;
936      ACPI_THREAD_STATE               Thread;
937      ACPI_RESULT_VALUES              Results;
938      ACPI_NOTIFY_INFO                Notify;
939  
940  } ACPI_GENERIC_STATE;
941  
942  
943  /*****************************************************************************
944   *
945   * Interpreter typedefs and structs
946   *
947   ****************************************************************************/
948  
949  typedef
950  ACPI_STATUS (*ACPI_EXECUTE_OP) (
951      struct acpi_walk_state          *WalkState);
952  
953  /* Address Range info block */
954  
955  typedef struct acpi_address_range
956  {
957      struct acpi_address_range   *Next;
958      ACPI_NAMESPACE_NODE         *RegionNode;
959      ACPI_PHYSICAL_ADDRESS       StartAddress;
960      ACPI_PHYSICAL_ADDRESS       EndAddress;
961  
962  } ACPI_ADDRESS_RANGE;
963  
964  
965  /*****************************************************************************
966   *
967   * Parser typedefs and structs
968   *
969   ****************************************************************************/
970  
971  /*
972   * AML opcode, name, and argument layout
973   */
974  typedef struct acpi_opcode_info
975  {
976  #if defined(ACPI_DISASSEMBLER) || defined(ACPI_DEBUG_OUTPUT)
977      char                            *Name;          /* Opcode name (disassembler/debug only) */
978  #endif
979      UINT32                          ParseArgs;      /* Grammar/Parse time arguments */
980      UINT32                          RuntimeArgs;    /* Interpret time arguments */
981      UINT16                          Flags;          /* Misc flags */
982      UINT8                           ObjectType;     /* Corresponding internal object type */
983      UINT8                           Class;          /* Opcode class */
984      UINT8                           Type;           /* Opcode type */
985  
986  } ACPI_OPCODE_INFO;
987  
988  /* Structure for Resource Tag information */
989  
990  typedef struct acpi_tag_info
991  {
992      UINT32                          BitOffset;
993      UINT32                          BitLength;
994  
995  } ACPI_TAG_INFO;
996  
997  /* Value associated with the parse object */
998  
999  typedef union acpi_parse_value
1000  {
1001      UINT64                          Integer;        /* Integer constant (Up to 64 bits) */
1002      UINT32                          Size;           /* bytelist or field size */
1003      char                            *String;        /* NULL terminated string */
1004      UINT8                           *Buffer;        /* buffer or string */
1005      char                            *Name;          /* NULL terminated string */
1006      union acpi_parse_object         *Arg;           /* arguments and contained ops */
1007      ACPI_TAG_INFO                   Tag;            /* Resource descriptor tag info  */
1008  
1009  } ACPI_PARSE_VALUE;
1010  
1011  
1012  #if defined(ACPI_DISASSEMBLER) || defined(ACPI_DEBUG_OUTPUT)
1013  #define ACPI_DISASM_ONLY_MEMBERS(a)     a;
1014  #else
1015  #define ACPI_DISASM_ONLY_MEMBERS(a)
1016  #endif
1017  
1018  #if defined(ACPI_ASL_COMPILER)
1019  #define ACPI_CONVERTER_ONLY_MEMBERS(a)  a;
1020  #else
1021  #define ACPI_CONVERTER_ONLY_MEMBERS(a)
1022  #endif
1023  
1024  #define ACPI_PARSE_COMMON \
1025      union acpi_parse_object         *Parent;            /* Parent op */\
1026      UINT8                           DescriptorType;     /* To differentiate various internal objs */\
1027      UINT8                           Flags;              /* Type of Op */\
1028      UINT16                          AmlOpcode;          /* AML opcode */\
1029      UINT8                           *Aml;               /* Address of declaration in AML */\
1030      union acpi_parse_object         *Next;              /* Next op */\
1031      ACPI_NAMESPACE_NODE             *Node;              /* For use by interpreter */\
1032      ACPI_PARSE_VALUE                Value;              /* Value or args associated with the opcode */\
1033      UINT8                           ArgListLength;      /* Number of elements in the arg list */\
1034       ACPI_DISASM_ONLY_MEMBERS (\
1035      UINT16                          DisasmFlags;        /* Used during AML disassembly */\
1036      UINT8                           DisasmOpcode;       /* Subtype used for disassembly */\
1037      char                            *OperatorSymbol;    /* Used for C-style operator name strings */\
1038      char                            AmlOpName[16])      /* Op name (debug only) */\
1039       ACPI_CONVERTER_ONLY_MEMBERS (\
1040      char                            *InlineComment;     /* Inline comment */\
1041      char                            *EndNodeComment;    /* End of node comment */\
1042      char                            *NameComment;       /* Comment associated with the first parameter of the name node */\
1043      char                            *CloseBraceComment; /* Comments that come after } on the same as } */\
1044      ACPI_COMMENT_NODE               *CommentList;       /* comments that appears before this node */\
1045      ACPI_COMMENT_NODE               *EndBlkComment;     /* comments that at the end of a block but before ) or } */\
1046      char                            *CvFilename;        /* Filename associated with this node. Used for ASL/ASL+ converter */\
1047      char                            *CvParentFilename)  /* Parent filename associated with this node. Used for ASL/ASL+ converter */
1048  
1049  
1050  /* categories of comments */
1051  
1052  typedef enum
1053  {
1054      STANDARD_COMMENT = 1,
1055      INLINE_COMMENT,
1056      ENDNODE_COMMENT,
1057      OPENBRACE_COMMENT,
1058      CLOSE_BRACE_COMMENT,
1059      STD_DEFBLK_COMMENT,
1060      END_DEFBLK_COMMENT,
1061      FILENAME_COMMENT,
1062      PARENTFILENAME_COMMENT,
1063      ENDBLK_COMMENT,
1064      INCLUDE_COMMENT
1065  
1066  } ASL_COMMENT_TYPES;
1067  
1068  
1069  /* Internal opcodes for DisasmOpcode field above */
1070  
1071  #define ACPI_DASM_BUFFER                0x00        /* Buffer is a simple data buffer */
1072  #define ACPI_DASM_RESOURCE              0x01        /* Buffer is a Resource Descriptor */
1073  #define ACPI_DASM_STRING                0x02        /* Buffer is a ASCII string */
1074  #define ACPI_DASM_UNICODE               0x03        /* Buffer is a Unicode string */
1075  #define ACPI_DASM_PLD_METHOD            0x04        /* Buffer is a _PLD method bit-packed buffer */
1076  #define ACPI_DASM_UUID                  0x05        /* Buffer is a UUID/GUID */
1077  #define ACPI_DASM_EISAID                0x06        /* Integer is an EISAID */
1078  #define ACPI_DASM_MATCHOP               0x07        /* Parent opcode is a Match() operator */
1079  #define ACPI_DASM_LNOT_PREFIX           0x08        /* Start of a LNotEqual (etc.) pair of opcodes */
1080  #define ACPI_DASM_LNOT_SUFFIX           0x09        /* End  of a LNotEqual (etc.) pair of opcodes */
1081  #define ACPI_DASM_HID_STRING            0x0A        /* String is a _HID or _CID */
1082  #define ACPI_DASM_IGNORE_SINGLE         0x0B        /* Ignore the opcode but not it's children */
1083  #define ACPI_DASM_SWITCH                0x0C        /* While is a Switch */
1084  #define ACPI_DASM_SWITCH_PREDICATE      0x0D        /* Object is a predicate for a Switch or Case block */
1085  #define ACPI_DASM_CASE                  0x0E        /* If/Else is a Case in a Switch/Case block */
1086  #define ACPI_DASM_DEFAULT               0x0F        /* Else is a Default in a Switch/Case block */
1087  
1088  
1089  /*
1090   * List struct used in the -ca option
1091   */
1092  typedef struct acpi_comment_node
1093  {
1094    char                      *Comment;
1095    struct acpi_comment_node  *Next;
1096  
1097  } ACPI_COMMENT_NODE;
1098  
1099  
1100  typedef struct acpi_comment_addr_node
1101  {
1102    UINT8                                    *Addr;
1103    struct acpi_comment_addr_node            *Next;
1104  } ACPI_COMMENT_ADDR_NODE;
1105  
1106  #ifdef ACPI_APPLICATION
1107  /*
1108   * File node - used for "Include" operator file stack and
1109   * dependency tree for the -ca option
1110   */
1111  typedef struct acpi_file_node
1112  {
1113      void                    *File;
1114      char                    *Filename;
1115      char                    *FileStart;  /* Points to AML and indicates when the AML for this particular file starts. */
1116      char                    *FileEnd;    /* Points to AML and indicates when the AML for this particular file ends. */
1117      struct acpi_file_node   *Next;
1118      struct acpi_file_node   *Parent;
1119      BOOLEAN                 IncludeWritten;
1120      ACPI_COMMENT_NODE       *IncludeComment;
1121  
1122  } ACPI_FILE_NODE;
1123  #endif
1124  
1125  /*
1126   * Generic operation (for example:  If, While, Store)
1127   */
1128  typedef struct acpi_parse_obj_common
1129  {
1130      ACPI_PARSE_COMMON
1131  } ACPI_PARSE_OBJ_COMMON;
1132  
1133  
1134  /*
1135   * Extended Op for named ops (Scope, Method, etc.), deferred ops (Methods and OpRegions),
1136   * and bytelists.
1137   */
1138  typedef struct acpi_parse_obj_named
1139  {
1140      ACPI_PARSE_COMMON
1141      char                            *Path;
1142      UINT8                           *Data;          /* AML body or bytelist data */
1143      UINT32                          Length;         /* AML length */
1144      UINT32                          Name;           /* 4-byte name or zero if no name */
1145  
1146  } ACPI_PARSE_OBJ_NAMED;
1147  
1148  
1149  /* This version is used by the iASL compiler only */
1150  
1151  #define ACPI_MAX_PARSEOP_NAME       20
1152  
1153  typedef struct acpi_parse_obj_asl
1154  {
1155      ACPI_PARSE_COMMON
1156      union acpi_parse_object         *Child;
1157      union acpi_parse_object         *ParentMethod;
1158      char                            *Filename;
1159      BOOLEAN                         FileChanged;
1160      char                            *ParentFilename;
1161      char                            *ExternalName;
1162      char                            *Namepath;
1163      char                            NameSeg[4];
1164      UINT32                          ExtraValue;
1165      UINT32                          Column;
1166      UINT32                          LineNumber;
1167      UINT32                          LogicalLineNumber;
1168      UINT32                          LogicalByteOffset;
1169      UINT32                          EndLine;
1170      UINT32                          EndLogicalLine;
1171      UINT32                          AcpiBtype;
1172      UINT32                          AmlLength;
1173      UINT32                          AmlSubtreeLength;
1174      UINT32                          FinalAmlLength;
1175      UINT32                          FinalAmlOffset;
1176      UINT32                          CompileFlags;
1177      UINT16                          ParseOpcode;
1178      UINT8                           AmlOpcodeLength;
1179      UINT8                           AmlPkgLenBytes;
1180      UINT8                           Extra;
1181      char                            ParseOpName[ACPI_MAX_PARSEOP_NAME];
1182  
1183  } ACPI_PARSE_OBJ_ASL;
1184  
1185  typedef union acpi_parse_object
1186  {
1187      ACPI_PARSE_OBJ_COMMON           Common;
1188      ACPI_PARSE_OBJ_NAMED            Named;
1189      ACPI_PARSE_OBJ_ASL              Asl;
1190  
1191  } ACPI_PARSE_OBJECT;
1192  
1193  typedef struct asl_comment_state
1194  {
1195      UINT8                           CommentType;
1196      UINT32                          SpacesBefore;
1197      ACPI_PARSE_OBJECT               *LatestParseOp;
1198      ACPI_PARSE_OBJECT               *ParsingParenBraceNode;
1199      BOOLEAN                         CaptureComments;
1200  
1201  } ASL_COMMENT_STATE;
1202  
1203  
1204  /*
1205   * Parse state - one state per parser invocation and each control
1206   * method.
1207   */
1208  typedef struct acpi_parse_state
1209  {
1210      UINT8                           *AmlStart;      /* First AML byte */
1211      UINT8                           *Aml;           /* Next AML byte */
1212      UINT8                           *AmlEnd;        /* (last + 1) AML byte */
1213      UINT8                           *PkgStart;      /* Current package begin */
1214      UINT8                           *PkgEnd;        /* Current package end */
1215      union acpi_parse_object         *StartOp;       /* Root of parse tree */
1216      struct acpi_namespace_node      *StartNode;
1217      union acpi_generic_state        *Scope;         /* Current scope */
1218      union acpi_parse_object         *StartScope;
1219      UINT32                          AmlSize;
1220  
1221  } ACPI_PARSE_STATE;
1222  
1223  
1224  /* Parse object flags */
1225  
1226  #define ACPI_PARSEOP_GENERIC                0x01
1227  #define ACPI_PARSEOP_NAMED_OBJECT           0x02
1228  #define ACPI_PARSEOP_DEFERRED               0x04
1229  #define ACPI_PARSEOP_BYTELIST               0x08
1230  #define ACPI_PARSEOP_IN_STACK               0x10
1231  #define ACPI_PARSEOP_TARGET                 0x20
1232  #define ACPI_PARSEOP_IN_CACHE               0x80
1233  
1234  /* Parse object DisasmFlags */
1235  
1236  #define ACPI_PARSEOP_IGNORE                 0x0001
1237  #define ACPI_PARSEOP_PARAMETER_LIST         0x0002
1238  #define ACPI_PARSEOP_EMPTY_TERMLIST         0x0004
1239  #define ACPI_PARSEOP_PREDEFINED_CHECKED     0x0008
1240  #define ACPI_PARSEOP_CLOSING_PAREN          0x0010
1241  #define ACPI_PARSEOP_COMPOUND_ASSIGNMENT    0x0020
1242  #define ACPI_PARSEOP_ASSIGNMENT             0x0040
1243  #define ACPI_PARSEOP_ELSEIF                 0x0080
1244  #define ACPI_PARSEOP_LEGACY_ASL_ONLY        0x0100
1245  
1246  
1247  /*****************************************************************************
1248   *
1249   * Hardware (ACPI registers) and PNP
1250   *
1251   ****************************************************************************/
1252  
1253  typedef struct acpi_bit_register_info
1254  {
1255      UINT8                           ParentRegister;
1256      UINT8                           BitPosition;
1257      UINT16                          AccessBitMask;
1258  
1259  } ACPI_BIT_REGISTER_INFO;
1260  
1261  
1262  /*
1263   * Some ACPI registers have bits that must be ignored -- meaning that they
1264   * must be preserved.
1265   */
1266  #define ACPI_PM1_STATUS_PRESERVED_BITS          0x0800  /* Bit 11 */
1267  
1268  /* Write-only bits must be zeroed by software */
1269  
1270  #define ACPI_PM1_CONTROL_WRITEONLY_BITS         0x2004  /* Bits 13, 2 */
1271  
1272  /* For control registers, both ignored and reserved bits must be preserved */
1273  
1274  /*
1275   * For PM1 control, the SCI enable bit (bit 0, SCI_EN) is defined by the
1276   * ACPI specification to be a "preserved" bit - "OSPM always preserves this
1277   * bit position", section 4.7.3.2.1. However, on some machines the OS must
1278   * write a one to this bit after resume for the machine to work properly.
1279   * To enable this, we no longer attempt to preserve this bit. No machines
1280   * are known to fail if the bit is not preserved. (May 2009)
1281   */
1282  #define ACPI_PM1_CONTROL_IGNORED_BITS           0x0200  /* Bit 9 */
1283  #define ACPI_PM1_CONTROL_RESERVED_BITS          0xC1F8  /* Bits 14-15, 3-8 */
1284  #define ACPI_PM1_CONTROL_PRESERVED_BITS \
1285           (ACPI_PM1_CONTROL_IGNORED_BITS | ACPI_PM1_CONTROL_RESERVED_BITS)
1286  
1287  #define ACPI_PM2_CONTROL_PRESERVED_BITS         0xFFFFFFFE /* All except bit 0 */
1288  
1289  /*
1290   * Register IDs
1291   * These are the full ACPI registers
1292   */
1293  #define ACPI_REGISTER_PM1_STATUS                0x01
1294  #define ACPI_REGISTER_PM1_ENABLE                0x02
1295  #define ACPI_REGISTER_PM1_CONTROL               0x03
1296  #define ACPI_REGISTER_PM2_CONTROL               0x04
1297  #define ACPI_REGISTER_PM_TIMER                  0x05
1298  #define ACPI_REGISTER_PROCESSOR_BLOCK           0x06
1299  #define ACPI_REGISTER_SMI_COMMAND_BLOCK         0x07
1300  
1301  
1302  /* Masks used to access the BitRegisters */
1303  
1304  #define ACPI_BITMASK_TIMER_STATUS               0x0001
1305  #define ACPI_BITMASK_BUS_MASTER_STATUS          0x0010
1306  #define ACPI_BITMASK_GLOBAL_LOCK_STATUS         0x0020
1307  #define ACPI_BITMASK_POWER_BUTTON_STATUS        0x0100
1308  #define ACPI_BITMASK_SLEEP_BUTTON_STATUS        0x0200
1309  #define ACPI_BITMASK_RT_CLOCK_STATUS            0x0400
1310  #define ACPI_BITMASK_PCIEXP_WAKE_STATUS         0x4000    /* ACPI 3.0 */
1311  #define ACPI_BITMASK_WAKE_STATUS                0x8000
1312  
1313  #define ACPI_BITMASK_ALL_FIXED_STATUS           (\
1314      ACPI_BITMASK_TIMER_STATUS          | \
1315      ACPI_BITMASK_BUS_MASTER_STATUS     | \
1316      ACPI_BITMASK_GLOBAL_LOCK_STATUS    | \
1317      ACPI_BITMASK_POWER_BUTTON_STATUS   | \
1318      ACPI_BITMASK_SLEEP_BUTTON_STATUS   | \
1319      ACPI_BITMASK_RT_CLOCK_STATUS       | \
1320      ACPI_BITMASK_PCIEXP_WAKE_STATUS    | \
1321      ACPI_BITMASK_WAKE_STATUS)
1322  
1323  #define ACPI_BITMASK_TIMER_ENABLE               0x0001
1324  #define ACPI_BITMASK_GLOBAL_LOCK_ENABLE         0x0020
1325  #define ACPI_BITMASK_POWER_BUTTON_ENABLE        0x0100
1326  #define ACPI_BITMASK_SLEEP_BUTTON_ENABLE        0x0200
1327  #define ACPI_BITMASK_RT_CLOCK_ENABLE            0x0400
1328  #define ACPI_BITMASK_PCIEXP_WAKE_DISABLE        0x4000    /* ACPI 3.0 */
1329  
1330  #define ACPI_BITMASK_SCI_ENABLE                 0x0001
1331  #define ACPI_BITMASK_BUS_MASTER_RLD             0x0002
1332  #define ACPI_BITMASK_GLOBAL_LOCK_RELEASE        0x0004
1333  #define ACPI_BITMASK_SLEEP_TYPE                 0x1C00
1334  #define ACPI_BITMASK_SLEEP_ENABLE               0x2000
1335  
1336  #define ACPI_BITMASK_ARB_DISABLE                0x0001
1337  
1338  
1339  /* Raw bit position of each BitRegister */
1340  
1341  #define ACPI_BITPOSITION_TIMER_STATUS           0x00
1342  #define ACPI_BITPOSITION_BUS_MASTER_STATUS      0x04
1343  #define ACPI_BITPOSITION_GLOBAL_LOCK_STATUS     0x05
1344  #define ACPI_BITPOSITION_POWER_BUTTON_STATUS    0x08
1345  #define ACPI_BITPOSITION_SLEEP_BUTTON_STATUS    0x09
1346  #define ACPI_BITPOSITION_RT_CLOCK_STATUS        0x0A
1347  #define ACPI_BITPOSITION_PCIEXP_WAKE_STATUS     0x0E    /* ACPI 3.0 */
1348  #define ACPI_BITPOSITION_WAKE_STATUS            0x0F
1349  
1350  #define ACPI_BITPOSITION_TIMER_ENABLE           0x00
1351  #define ACPI_BITPOSITION_GLOBAL_LOCK_ENABLE     0x05
1352  #define ACPI_BITPOSITION_POWER_BUTTON_ENABLE    0x08
1353  #define ACPI_BITPOSITION_SLEEP_BUTTON_ENABLE    0x09
1354  #define ACPI_BITPOSITION_RT_CLOCK_ENABLE        0x0A
1355  #define ACPI_BITPOSITION_PCIEXP_WAKE_DISABLE    0x0E    /* ACPI 3.0 */
1356  
1357  #define ACPI_BITPOSITION_SCI_ENABLE             0x00
1358  #define ACPI_BITPOSITION_BUS_MASTER_RLD         0x01
1359  #define ACPI_BITPOSITION_GLOBAL_LOCK_RELEASE    0x02
1360  #define ACPI_BITPOSITION_SLEEP_TYPE             0x0A
1361  #define ACPI_BITPOSITION_SLEEP_ENABLE           0x0D
1362  
1363  #define ACPI_BITPOSITION_ARB_DISABLE            0x00
1364  
1365  
1366  /* Structs and definitions for _OSI support and I/O port validation */
1367  
1368  #define ACPI_ALWAYS_ILLEGAL             0x00
1369  
1370  typedef struct acpi_interface_info
1371  {
1372      char                        *Name;
1373      struct acpi_interface_info  *Next;
1374      UINT8                       Flags;
1375      UINT8                       Value;
1376  
1377  } ACPI_INTERFACE_INFO;
1378  
1379  #define ACPI_OSI_INVALID                0x01
1380  #define ACPI_OSI_DYNAMIC                0x02
1381  #define ACPI_OSI_FEATURE                0x04
1382  #define ACPI_OSI_DEFAULT_INVALID        0x08
1383  #define ACPI_OSI_OPTIONAL_FEATURE       (ACPI_OSI_FEATURE | ACPI_OSI_DEFAULT_INVALID | ACPI_OSI_INVALID)
1384  
1385  typedef struct acpi_port_info
1386  {
1387      char                    *Name;
1388      UINT16                  Start;
1389      UINT16                  End;
1390      UINT8                   OsiDependency;
1391  
1392  } ACPI_PORT_INFO;
1393  
1394  
1395  /*****************************************************************************
1396   *
1397   * Resource descriptors
1398   *
1399   ****************************************************************************/
1400  
1401  /* ResourceType values */
1402  
1403  #define ACPI_ADDRESS_TYPE_MEMORY_RANGE          0
1404  #define ACPI_ADDRESS_TYPE_IO_RANGE              1
1405  #define ACPI_ADDRESS_TYPE_BUS_NUMBER_RANGE      2
1406  
1407  /* Resource descriptor types and masks */
1408  
1409  #define ACPI_RESOURCE_NAME_LARGE                0x80
1410  #define ACPI_RESOURCE_NAME_SMALL                0x00
1411  
1412  #define ACPI_RESOURCE_NAME_SMALL_MASK           0x78 /* Bits 6:3 contain the type */
1413  #define ACPI_RESOURCE_NAME_SMALL_LENGTH_MASK    0x07 /* Bits 2:0 contain the length */
1414  #define ACPI_RESOURCE_NAME_LARGE_MASK           0x7F /* Bits 6:0 contain the type */
1415  
1416  
1417  /*
1418   * Small resource descriptor "names" as defined by the ACPI specification.
1419   * Note: Bits 2:0 are used for the descriptor length
1420   */
1421  #define ACPI_RESOURCE_NAME_IRQ                  0x20
1422  #define ACPI_RESOURCE_NAME_DMA                  0x28
1423  #define ACPI_RESOURCE_NAME_START_DEPENDENT      0x30
1424  #define ACPI_RESOURCE_NAME_END_DEPENDENT        0x38
1425  #define ACPI_RESOURCE_NAME_IO                   0x40
1426  #define ACPI_RESOURCE_NAME_FIXED_IO             0x48
1427  #define ACPI_RESOURCE_NAME_FIXED_DMA            0x50
1428  #define ACPI_RESOURCE_NAME_RESERVED_S2          0x58
1429  #define ACPI_RESOURCE_NAME_RESERVED_S3          0x60
1430  #define ACPI_RESOURCE_NAME_RESERVED_S4          0x68
1431  #define ACPI_RESOURCE_NAME_VENDOR_SMALL         0x70
1432  #define ACPI_RESOURCE_NAME_END_TAG              0x78
1433  
1434  /*
1435   * Large resource descriptor "names" as defined by the ACPI specification.
1436   * Note: includes the Large Descriptor bit in bit[7]
1437   */
1438  #define ACPI_RESOURCE_NAME_MEMORY24             0x81
1439  #define ACPI_RESOURCE_NAME_GENERIC_REGISTER     0x82
1440  #define ACPI_RESOURCE_NAME_RESERVED_L1          0x83
1441  #define ACPI_RESOURCE_NAME_VENDOR_LARGE         0x84
1442  #define ACPI_RESOURCE_NAME_MEMORY32             0x85
1443  #define ACPI_RESOURCE_NAME_FIXED_MEMORY32       0x86
1444  #define ACPI_RESOURCE_NAME_ADDRESS32            0x87
1445  #define ACPI_RESOURCE_NAME_ADDRESS16            0x88
1446  #define ACPI_RESOURCE_NAME_EXTENDED_IRQ         0x89
1447  #define ACPI_RESOURCE_NAME_ADDRESS64            0x8A
1448  #define ACPI_RESOURCE_NAME_EXTENDED_ADDRESS64   0x8B
1449  #define ACPI_RESOURCE_NAME_GPIO                 0x8C
1450  #define ACPI_RESOURCE_NAME_PIN_FUNCTION         0x8D
1451  #define ACPI_RESOURCE_NAME_SERIAL_BUS           0x8E
1452  #define ACPI_RESOURCE_NAME_PIN_CONFIG           0x8F
1453  #define ACPI_RESOURCE_NAME_PIN_GROUP            0x90
1454  #define ACPI_RESOURCE_NAME_PIN_GROUP_FUNCTION   0x91
1455  #define ACPI_RESOURCE_NAME_PIN_GROUP_CONFIG     0x92
1456  #define ACPI_RESOURCE_NAME_LARGE_MAX            0x92
1457  
1458  
1459  /*****************************************************************************
1460   *
1461   * Miscellaneous
1462   *
1463   ****************************************************************************/
1464  
1465  #define ACPI_ASCII_ZERO                 0x30
1466  
1467  
1468  /*****************************************************************************
1469   *
1470   * Disassembler
1471   *
1472   ****************************************************************************/
1473  
1474  typedef struct acpi_external_list
1475  {
1476      char                        *Path;
1477      char                        *InternalPath;
1478      struct acpi_external_list   *Next;
1479      UINT32                      Value;
1480      UINT16                      Length;
1481      UINT16                      Flags;
1482      UINT8                       Type;
1483  
1484  } ACPI_EXTERNAL_LIST;
1485  
1486  /* Values for Flags field above */
1487  
1488  #define ACPI_EXT_RESOLVED_REFERENCE         0x01    /* Object was resolved during cross ref */
1489  #define ACPI_EXT_ORIGIN_FROM_FILE           0x02    /* External came from a file */
1490  #define ACPI_EXT_INTERNAL_PATH_ALLOCATED    0x04    /* Deallocate internal path on completion */
1491  #define ACPI_EXT_EXTERNAL_EMITTED           0x08    /* External() statement has been emitted */
1492  #define ACPI_EXT_ORIGIN_FROM_OPCODE         0x10    /* External came from a External() opcode */
1493  #define ACPI_EXT_CONFLICTING_DECLARATION    0x20    /* External has a conflicting declaration within AML */
1494  
1495  
1496  typedef struct acpi_external_file
1497  {
1498      char                        *Path;
1499      struct acpi_external_file   *Next;
1500  
1501  } ACPI_EXTERNAL_FILE;
1502  
1503  
1504  typedef struct acpi_parse_object_list
1505  {
1506      ACPI_PARSE_OBJECT               *Op;
1507      struct acpi_parse_object_list   *Next;
1508  
1509  } ACPI_PARSE_OBJECT_LIST;
1510  
1511  /*****************************************************************************
1512   *
1513   * Debugger
1514   *
1515   ****************************************************************************/
1516  
1517  typedef struct acpi_db_method_info
1518  {
1519      ACPI_HANDLE                     Method;
1520      ACPI_HANDLE                     MainThreadGate;
1521      ACPI_HANDLE                     ThreadCompleteGate;
1522      ACPI_HANDLE                     InfoGate;
1523      ACPI_THREAD_ID                  *Threads;
1524      UINT32                          NumThreads;
1525      UINT32                          NumCreated;
1526      UINT32                          NumCompleted;
1527  
1528      char                            *Name;
1529      UINT32                          Flags;
1530      UINT32                          NumLoops;
1531      char                            Pathname[ACPI_DB_LINE_BUFFER_SIZE];
1532      char                            **Args;
1533      ACPI_OBJECT_TYPE                *Types;
1534  
1535      /*
1536       * Arguments to be passed to method for the commands Threads and
1537       * Background. Note, ACPI specifies a maximum of 7 arguments (0 - 6).
1538       *
1539       * For the Threads command, the Number of threads, ID of current
1540       * thread and Index of current thread inside all them created.
1541       */
1542      char                            InitArgs;
1543  #ifdef ACPI_DEBUGGER
1544      ACPI_OBJECT_TYPE                ArgTypes[ACPI_METHOD_NUM_ARGS];
1545  #endif
1546      char                            *Arguments[ACPI_METHOD_NUM_ARGS];
1547      char                            NumThreadsStr[11];
1548      char                            IdOfThreadStr[11];
1549      char                            IndexOfThreadStr[11];
1550  
1551  } ACPI_DB_METHOD_INFO;
1552  
1553  typedef struct acpi_integrity_info
1554  {
1555      UINT32                          Nodes;
1556      UINT32                          Objects;
1557  
1558  } ACPI_INTEGRITY_INFO;
1559  
1560  
1561  #define ACPI_DB_DISABLE_OUTPUT          0x00
1562  #define ACPI_DB_REDIRECTABLE_OUTPUT     0x01
1563  #define ACPI_DB_CONSOLE_OUTPUT          0x02
1564  #define ACPI_DB_DUPLICATE_OUTPUT        0x03
1565  
1566  
1567  typedef struct acpi_object_info
1568  {
1569      UINT32                  Types[ACPI_TOTAL_TYPES];
1570  
1571  } ACPI_OBJECT_INFO;
1572  
1573  
1574  /*****************************************************************************
1575   *
1576   * Debug
1577   *
1578   ****************************************************************************/
1579  
1580  /* Entry for a memory allocation (debug only) */
1581  
1582  #define ACPI_MEM_MALLOC                 0
1583  #define ACPI_MEM_CALLOC                 1
1584  #define ACPI_MAX_MODULE_NAME            16
1585  
1586  #define ACPI_COMMON_DEBUG_MEM_HEADER \
1587      struct acpi_debug_mem_block     *Previous; \
1588      struct acpi_debug_mem_block     *Next; \
1589      UINT32                          Size; \
1590      UINT32                          Component; \
1591      UINT32                          Line; \
1592      char                            Module[ACPI_MAX_MODULE_NAME]; \
1593      UINT8                           AllocType;
1594  
1595  typedef struct acpi_debug_mem_header
1596  {
1597      ACPI_COMMON_DEBUG_MEM_HEADER
1598  
1599  } ACPI_DEBUG_MEM_HEADER;
1600  
1601  typedef struct acpi_debug_mem_block
1602  {
1603      ACPI_COMMON_DEBUG_MEM_HEADER
1604      UINT64                          UserSpace;
1605  
1606  } ACPI_DEBUG_MEM_BLOCK;
1607  
1608  
1609  #define ACPI_MEM_LIST_GLOBAL            0
1610  #define ACPI_MEM_LIST_NSNODE            1
1611  #define ACPI_MEM_LIST_MAX               1
1612  #define ACPI_NUM_MEM_LISTS              2
1613  
1614  
1615  /*****************************************************************************
1616   *
1617   * Info/help support
1618   *
1619   ****************************************************************************/
1620  
1621  typedef struct ah_predefined_name
1622  {
1623      char            *Name;
1624      char            *Description;
1625  #ifndef ACPI_ASL_COMPILER
1626      char            *Action;
1627  #endif
1628  
1629  } AH_PREDEFINED_NAME;
1630  
1631  typedef struct ah_device_id
1632  {
1633      char            *Name;
1634      char            *Description;
1635  
1636  } AH_DEVICE_ID;
1637  
1638  typedef struct ah_uuid
1639  {
1640      char            *Description;
1641      char            *String;
1642  
1643  } AH_UUID;
1644  
1645  typedef struct ah_table
1646  {
1647      char                    *Signature;
1648      char                    *Description;
1649  
1650  } AH_TABLE;
1651  
1652  #endif /* __ACLOCAL_H__ */
1653