Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-src
Path: blob/main/sys/contrib/dev/acpica/include/aclocal.h
48286 views
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 of the 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
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
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
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
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
char *Name;
1645
char *Description;
1646
1647
} AH_DEVICE_ID;
1648
1649
typedef struct ah_uuid
1650
{
1651
char *Description;
1652
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
1665