VirtualBox

source: vbox/trunk/include/iprt/formats/acpi-aml.h@ 108059

Last change on this file since 108059 was 108059, checked in by vboxsync, 3 weeks ago

Runtime/RTAcpi*: Updates to the ACPI ASL -> AML compiler, bugref:10733

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 19.7 KB
Line 
1/* $Id: acpi-aml.h 108059 2025-02-04 13:35:41Z vboxsync $ */
2/** @file
3 * IPRT, ACPI (Advanced Configuration and Power Interface) Machine Language (AML) format.
4 *
5 * Spec taken from: https://uefi.org/sites/default/files/resources/ACPI_Spec_6_5_Aug29.pdf (2024-07-25)
6 */
7
8/*
9 * Copyright (C) 2024 Oracle and/or its affiliates.
10 *
11 * This file is part of VirtualBox base platform packages, as
12 * available from https://www.virtualbox.org.
13 *
14 * This program is free software; you can redistribute it and/or
15 * modify it under the terms of the GNU General Public License
16 * as published by the Free Software Foundation, in version 3 of the
17 * License.
18 *
19 * This program is distributed in the hope that it will be useful, but
20 * WITHOUT ANY WARRANTY; without even the implied warranty of
21 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
22 * General Public License for more details.
23 *
24 * You should have received a copy of the GNU General Public License
25 * along with this program; if not, see <https://www.gnu.org/licenses>.
26 *
27 * The contents of this file may alternatively be used under the terms
28 * of the Common Development and Distribution License Version 1.0
29 * (CDDL), a copy of it is provided in the "COPYING.CDDL" file included
30 * in the VirtualBox distribution, in which case the provisions of the
31 * CDDL are applicable instead of those of the GPL.
32 *
33 * You may elect to license modified versions of this file under the
34 * terms and conditions of either the GPL or the CDDL or both.
35 *
36 * SPDX-License-Identifier: GPL-3.0-only OR CDDL-1.0
37 */
38
39#ifndef IPRT_INCLUDED_formats_acpi_aml_h
40#define IPRT_INCLUDED_formats_acpi_aml_h
41#ifndef RT_WITHOUT_PRAGMA_ONCE
42# pragma once
43#endif
44
45#include <iprt/types.h>
46#include <iprt/cdefs.h>
47#include <iprt/assertcompile.h>
48
49
50/** @defgroup grp_rt_formats_acpi_aml Advanced Configuration and Power Interface (ACPI) Machine Language (AML) structures and definitions
51 * @ingroup grp_rt_formats
52 * @{
53 */
54
55/** @name AML Bytecode values (see https://uefi.org/specs/ACPI/6.5/20_AML_Specification.html#aml-byte-stream-byte-values).
56 * @{ */
57/** Encoding Name: ZeroOp, Encoding Group: Name Object */
58#define ACPI_AML_BYTE_CODE_PREFIX_NULL_NAME 0x00
59/** Encoding Name: ZeroOp, Encoding Group: Data Object */
60#define ACPI_AML_BYTE_CODE_OP_ZERO 0x00
61/** Encoding Name: OneOp, Encoding Group: Data Object */
62#define ACPI_AML_BYTE_CODE_OP_ONE 0x01
63/** Encoding Name: AliasOp, Encoding Group: Term Object */
64#define ACPI_AML_BYTE_CODE_OP_ALIAS 0x06
65/** Encoding Name: NameOp, Encoding Group: Term Object */
66#define ACPI_AML_BYTE_CODE_OP_NAME 0x08
67/** Encoding Name: BytePrefix, Encoding Group: Data Object */
68#define ACPI_AML_BYTE_CODE_PREFIX_BYTE 0x0a
69/** Encoding Name: WordPrefix, Encoding Group: Data Object */
70#define ACPI_AML_BYTE_CODE_PREFIX_WORD 0x0b
71/** Encoding Name: DWordPrefix, Encoding Group: Data Object */
72#define ACPI_AML_BYTE_CODE_PREFIX_DWORD 0x0c
73/** Encoding Name: StringPrefix, Encoding Group: Data Object */
74#define ACPI_AML_BYTE_CODE_PREFIX_STRING 0x0d
75/** Encoding Name: QWordPrefix, Encoding Group: Data Object */
76#define ACPI_AML_BYTE_CODE_PREFIX_QWORD 0x0e
77/** Encoding Name: ScopeOp, Encoding Group: Term Object */
78#define ACPI_AML_BYTE_CODE_OP_SCOPE 0x10
79/** Encoding Name: BufferOp, Encoding Group: Term Object */
80#define ACPI_AML_BYTE_CODE_OP_BUFFER 0x11
81/** Encoding Name: PackageOp, Encoding Group: Term Object */
82#define ACPI_AML_BYTE_CODE_OP_PACKAGE 0x12
83/** Encoding Name: VarPackageOp, Encoding Group: Term Object */
84#define ACPI_AML_BYTE_CODE_OP_VAR_PACKAGE 0x13
85/** Encoding Name: MethodOp, Encoding Group: Term Object */
86#define ACPI_AML_BYTE_CODE_OP_METHOD 0x14
87/** Encoding Name: ExternalOp, Encoding Group: Term Object */
88#define ACPI_AML_BYTE_CODE_OP_EXTERNAL 0x15
89/** Encoding Name: DualNamePrefix, Encoding Group: Name Object */
90#define ACPI_AML_BYTE_CODE_PREFIX_DUAL_NAME 0x2e
91/** Encoding Name: MultiNamePrefix, Encoding Group: Name Object */
92#define ACPI_AML_BYTE_CODE_PREFIX_MULTI_NAME 0x2f
93/** Encoding Name: ExtOpPrefix, Encoding Group: - */
94#define ACPI_AML_BYTE_CODE_PREFIX_EXT_OP 0x5b
95/** Encoding Name: MutexOp, Encoding Group: Term Object */
96#define ACPI_AML_BYTE_CODE_EXT_OP_MUTEX 0x01
97/** Encoding Name: EventOp, Encoding Group: Term Object */
98#define ACPI_AML_BYTE_CODE_EXT_OP_EVENT 0x02
99/** Encoding Name: CondRefOfOp, Encoding Group: Term Object */
100#define ACPI_AML_BYTE_CODE_EXT_OP_COND_REF_OF 0x12
101/** Encoding Name: CreateFieldOp, Encoding Group: Term Object */
102#define ACPI_AML_BYTE_CODE_EXT_OP_CREATE_FIELD 0x13
103/** Encoding Name: LoadTableOp, Encoding Group: Term Object */
104#define ACPI_AML_BYTE_CODE_EXT_OP_LOAD_TABLE 0x1f
105/** Encoding Name: LoadOp, Encoding Group: Term Object */
106#define ACPI_AML_BYTE_CODE_EXT_OP_LOAD 0x20
107/** Encoding Name: StallOp, Encoding Group: Term Object */
108#define ACPI_AML_BYTE_CODE_EXT_OP_STALL 0x21
109/** Encoding Name: SleepOp, Encoding Group: Term Object */
110#define ACPI_AML_BYTE_CODE_EXT_OP_SLEEP 0x22
111/** Encoding Name: AcquireOp, Encoding Group: Term Object */
112#define ACPI_AML_BYTE_CODE_EXT_OP_ACQUIRE 0x23
113/** Encoding Name: SignalOp, Encoding Group: Term Object */
114#define ACPI_AML_BYTE_CODE_EXT_OP_SIGNAL 0x24
115/** Encoding Name: SignalOp, Encoding Group: Term Object */
116#define ACPI_AML_BYTE_CODE_EXT_OP_WAIT 0x25
117/** Encoding Name: ResetOp, Encoding Group: Term Object */
118#define ACPI_AML_BYTE_CODE_EXT_OP_RESET 0x26
119/** Encoding Name: ReleaseOp, Encoding Group: Term Object */
120#define ACPI_AML_BYTE_CODE_EXT_OP_RELEASE 0x27
121/** Encoding Name: FromBCDOp, Encoding Group: Term Object */
122#define ACPI_AML_BYTE_CODE_EXT_OP_FROM_BCD 0x28
123/** Encoding Name: ToBCDOp, Encoding Group: Term Object */
124#define ACPI_AML_BYTE_CODE_EXT_OP_TO_BCD 0x29
125/** Encoding Name: RevisionOp, Encoding Group: Data Object */
126#define ACPI_AML_BYTE_CODE_EXT_OP_REVISION 0x30
127/** Encoding Name: DebugOp, Encoding Group: Debug Object */
128#define ACPI_AML_BYTE_CODE_EXT_OP_DEBUG 0x31
129/** Encoding Name: FatalOp, Encoding Group: Term Object */
130#define ACPI_AML_BYTE_CODE_EXT_OP_FATAL 0x32
131/** Encoding Name: FatalOp, Encoding Group: Term Object */
132#define ACPI_AML_BYTE_CODE_EXT_OP_TIMER 0x33
133/** Encoding Name: OpRegionOp, Encoding Group: Term Object */
134#define ACPI_AML_BYTE_CODE_EXT_OP_OP_REGION 0x80
135/** Encoding Name: FieldOp, Encoding Group: Term Object */
136#define ACPI_AML_BYTE_CODE_EXT_OP_FIELD 0x81
137/** Encoding Name: DeviceOp, Encoding Group: Term Object */
138#define ACPI_AML_BYTE_CODE_EXT_OP_DEVICE 0x82
139/** Encoding Name: ProcessorOp, Encoding Group: Term Object */
140#define ACPI_AML_BYTE_CODE_EXT_OP_PROCESSOR 0x83
141/** Encoding Name: PowerResOp, Encoding Group: Term Object */
142#define ACPI_AML_BYTE_CODE_EXT_OP_POWER_RES 0x84
143/** Encoding Name: ThermalZoneOp, Encoding Group: Term Object */
144#define ACPI_AML_BYTE_CODE_EXT_OP_THERMAL_ZONE 0x85
145/** Encoding Name: IndexFieldOp, Encoding Group: Term Object */
146#define ACPI_AML_BYTE_CODE_EXT_OP_INDEX_FIELD 0x86
147/** Encoding Name: BankFieldOp, Encoding Group: Term Object */
148#define ACPI_AML_BYTE_CODE_EXT_OP_BANK_FIELD 0x87
149/** Encoding Name: DataRegionOp, Encoding Group: Term Object */
150#define ACPI_AML_BYTE_CODE_EXT_OP_DATA_REGION 0x88
151/** Encoding Name: RootChar, Encoding Group: Name Object */
152#define ACPI_AML_BYTE_CODE_ROOT_CHAR 0x5c
153/** Encoding Name: ParentPrefixChar, Encoding Group: Name Object */
154#define ACPI_AML_BYTE_CODE_PREFIX_PARENT_CHAR 0x5e
155/** Encoding Name: NameChar, Encoding Group: Name Object */
156#define ACPI_AML_BYTE_CODE_NAME_CHAR 0x5f
157/** Encoding Name: Local0Op, Encoding Group: Local Object */
158#define ACPI_AML_BYTE_CODE_OP_LOCAL_0 0x60
159/** Encoding Name: Local1Op, Encoding Group: Local Object */
160#define ACPI_AML_BYTE_CODE_OP_LOCAL_1 0x61
161/** Encoding Name: Local2Op, Encoding Group: Local Object */
162#define ACPI_AML_BYTE_CODE_OP_LOCAL_2 0x62
163/** Encoding Name: Local3Op, Encoding Group: Local Object */
164#define ACPI_AML_BYTE_CODE_OP_LOCAL_3 0x63
165/** Encoding Name: Local4Op, Encoding Group: Local Object */
166#define ACPI_AML_BYTE_CODE_OP_LOCAL_4 0x64
167/** Encoding Name: Local5Op, Encoding Group: Local Object */
168#define ACPI_AML_BYTE_CODE_OP_LOCAL_5 0x65
169/** Encoding Name: Local6Op, Encoding Group: Local Object */
170#define ACPI_AML_BYTE_CODE_OP_LOCAL_6 0x66
171/** Encoding Name: Local7Op, Encoding Group: Local Object */
172#define ACPI_AML_BYTE_CODE_OP_LOCAL_7 0x67
173/** Encoding Name: Arg0Op, Encoding Group: Arg Object */
174#define ACPI_AML_BYTE_CODE_OP_ARG_0 0x68
175/** Encoding Name: Arg1Op, Encoding Group: Arg Object */
176#define ACPI_AML_BYTE_CODE_OP_ARG_1 0x69
177/** Encoding Name: Arg2Op, Encoding Group: Arg Object */
178#define ACPI_AML_BYTE_CODE_OP_ARG_2 0x6a
179/** Encoding Name: Arg3Op, Encoding Group: Arg Object */
180#define ACPI_AML_BYTE_CODE_OP_ARG_3 0x6b
181/** Encoding Name: Arg4Op, Encoding Group: Arg Object */
182#define ACPI_AML_BYTE_CODE_OP_ARG_4 0x6c
183/** Encoding Name: Arg5Op, Encoding Group: Arg Object */
184#define ACPI_AML_BYTE_CODE_OP_ARG_5 0x6d
185/** Encoding Name: Arg6Op, Encoding Group: Arg Object */
186#define ACPI_AML_BYTE_CODE_OP_ARG_6 0x6e
187/** Encoding Name: StoreOp, Encoding Group: Term Object */
188#define ACPI_AML_BYTE_CODE_OP_STORE 0x70
189/** Encoding Name: RefOfOp, Encoding Group: Term Object */
190#define ACPI_AML_BYTE_CODE_OP_REF_OF 0x71
191/** Encoding Name: AddOp, Encoding Group: Term Object */
192#define ACPI_AML_BYTE_CODE_OP_ADD 0x72
193/** Encoding Name: ConcatOp, Encoding Group: Term Object */
194#define ACPI_AML_BYTE_CODE_OP_CONCAT 0x73
195/** Encoding Name: SubtractOp, Encoding Group: Term Object */
196#define ACPI_AML_BYTE_CODE_OP_SUBTRACT 0x74
197/** Encoding Name: IncrementOp, Encoding Group: Term Object */
198#define ACPI_AML_BYTE_CODE_OP_INCREMENT 0x75
199/** Encoding Name: DecrementOp, Encoding Group: Term Object */
200#define ACPI_AML_BYTE_CODE_OP_DECREMENT 0x76
201/** Encoding Name: MultiplyOp, Encoding Group: Term Object */
202#define ACPI_AML_BYTE_CODE_OP_MULTIPLY 0x77
203/** Encoding Name: DivideOp, Encoding Group: Term Object */
204#define ACPI_AML_BYTE_CODE_OP_DIVIDE 0x78
205/** Encoding Name: ShiftLeftOp, Encoding Group: Term Object */
206#define ACPI_AML_BYTE_CODE_OP_SHIFT_LEFT 0x79
207/** Encoding Name: ShiftRightOp, Encoding Group: Term Object */
208#define ACPI_AML_BYTE_CODE_OP_SHIFT_RIGHT 0x7a
209/** Encoding Name: AndOp, Encoding Group: Term Object */
210#define ACPI_AML_BYTE_CODE_OP_AND 0x7b
211/** Encoding Name: NandOp, Encoding Group: Term Object */
212#define ACPI_AML_BYTE_CODE_OP_NAND 0x7c
213/** Encoding Name: OrOp, Encoding Group: Term Object */
214#define ACPI_AML_BYTE_CODE_OP_OR 0x7d
215/** Encoding Name: NorOp, Encoding Group: Term Object */
216#define ACPI_AML_BYTE_CODE_OP_NOR 0x7e
217/** Encoding Name: XorOp, Encoding Group: Term Object */
218#define ACPI_AML_BYTE_CODE_OP_XOR 0x7f
219/** Encoding Name: NotOp, Encoding Group: Term Object */
220#define ACPI_AML_BYTE_CODE_OP_NOT 0x80
221/** Encoding Name: FindSetLeftBitOp, Encoding Group: Term Object */
222#define ACPI_AML_BYTE_CODE_OP_FIND_SET_LEFT_BIT 0x81
223/** Encoding Name: FindSetRightBitOp, Encoding Group: Term Object */
224#define ACPI_AML_BYTE_CODE_OP_FIND_SET_RIGHT_BIT 0x82
225/** Encoding Name: DerefOfOp, Encoding Group: Term Object */
226#define ACPI_AML_BYTE_CODE_OP_DEREF_OF 0x83
227/** Encoding Name: ConcatResOp, Encoding Group: Term Object */
228#define ACPI_AML_BYTE_CODE_OP_CONCAT_RES 0x84
229/** Encoding Name: ModOp, Encoding Group: Term Object */
230#define ACPI_AML_BYTE_CODE_OP_MOD 0x85
231/** Encoding Name: NotifyOp, Encoding Group: Term Object */
232#define ACPI_AML_BYTE_CODE_OP_NOTIFY 0x86
233/** Encoding Name: SizeOfOp, Encoding Group: Term Object */
234#define ACPI_AML_BYTE_CODE_OP_SIZE_OF 0x87
235/** Encoding Name: IndexOp, Encoding Group: Term Object */
236#define ACPI_AML_BYTE_CODE_OP_INDEX 0x88
237/** Encoding Name: MatchOp, Encoding Group: Term Object */
238#define ACPI_AML_BYTE_CODE_OP_MATCH 0x89
239/** Encoding Name: CreateDWordFieldOp, Encoding Group: Term Object */
240#define ACPI_AML_BYTE_CODE_OP_CREATE_DWORD_FIELD 0x8a
241/** Encoding Name: CreateWordFieldOp, Encoding Group: Term Object */
242#define ACPI_AML_BYTE_CODE_OP_CREATE_WORD_FIELD 0x8b
243/** Encoding Name: CreateByteFieldOp, Encoding Group: Term Object */
244#define ACPI_AML_BYTE_CODE_OP_CREATE_BYTE_FIELD 0x8c
245/** Encoding Name: CreateBitFieldOp, Encoding Group: Term Object */
246#define ACPI_AML_BYTE_CODE_OP_CREATE_BIT_FIELD 0x8d
247/** Encoding Name: ObjectTypeOp, Encoding Group: Term Object */
248#define ACPI_AML_BYTE_CODE_OP_OBJECT_TYPE 0x8e
249/** Encoding Name: CreateQWordFieldOp, Encoding Group: Term Object */
250#define ACPI_AML_BYTE_CODE_OP_CREATE_QWORD_FIELD 0x8f
251/** Encoding Name: LandOp, Encoding Group: Term Object */
252#define ACPI_AML_BYTE_CODE_OP_LAND 0x90
253/** Encoding Name: LorOp, Encoding Group: Term Object */
254#define ACPI_AML_BYTE_CODE_OP_LOR 0x91
255/** Encoding Name: LnotOp, Encoding Group: Term Object */
256#define ACPI_AML_BYTE_CODE_OP_LNOT 0x92
257/** Encoding Name: LEqualOp, Encoding Group: Term Object */
258#define ACPI_AML_BYTE_CODE_OP_LEQUAL 0x93
259/** Encoding Name: LGreaterOp, Encoding Group: Term Object */
260#define ACPI_AML_BYTE_CODE_OP_LGREATER 0x94
261/** Encoding Name: LLessOp, Encoding Group: Term Object */
262#define ACPI_AML_BYTE_CODE_OP_LLESS 0x95
263/** Encoding Name: ToBufferOp, Encoding Group: Term Object */
264#define ACPI_AML_BYTE_CODE_OP_TO_BUFFER 0x96
265/** Encoding Name: ToDecimalStringOp, Encoding Group: Term Object */
266#define ACPI_AML_BYTE_CODE_OP_TO_DECIMAL_STRING 0x97
267/** Encoding Name: ToHexStringOp, Encoding Group: Term Object */
268#define ACPI_AML_BYTE_CODE_OP_TO_HEX_STRING 0x98
269/** Encoding Name: ToIntegerOp, Encoding Group: Term Object */
270#define ACPI_AML_BYTE_CODE_OP_TO_INTEGER 0x99
271/** Encoding Name: ToStringOp, Encoding Group: Term Object */
272#define ACPI_AML_BYTE_CODE_OP_TO_STRING 0x9c
273/** Encoding Name: CopyObjectOp, Encoding Group: Term Object */
274#define ACPI_AML_BYTE_CODE_OP_COPY_OBJECT 0x9d
275/** Encoding Name: MidOp, Encoding Group: Term Object */
276#define ACPI_AML_BYTE_CODE_OP_MID 0x9e
277/** Encoding Name: ContinueOp, Encoding Group: Term Object */
278#define ACPI_AML_BYTE_CODE_OP_CONTINUE 0x9f
279/** Encoding Name: IfOp, Encoding Group: Term Object */
280#define ACPI_AML_BYTE_CODE_OP_IF 0xa0
281/** Encoding Name: ElseOp, Encoding Group: Term Object */
282#define ACPI_AML_BYTE_CODE_OP_ELSE 0xa1
283/** Encoding Name: WhileOp, Encoding Group: Term Object */
284#define ACPI_AML_BYTE_CODE_OP_WHILE 0xa2
285/** Encoding Name: NoopOp, Encoding Group: Term Object */
286#define ACPI_AML_BYTE_CODE_OP_NOOP 0xa3
287/** Encoding Name: ReturnOp, Encoding Group: Term Object */
288#define ACPI_AML_BYTE_CODE_OP_RETURN 0xa4
289/** Encoding Name: BreakOp, Encoding Group: Term Object */
290#define ACPI_AML_BYTE_CODE_OP_BREAK 0xa5
291/** Encoding Name: BreakPointOp, Encoding Group: Term Object */
292#define ACPI_AML_BYTE_CODE_OP_BREAK_POINT 0xcc
293/** Encoding Name: OnesOp, Encoding Group: Term Object */
294#define ACPI_AML_BYTE_CODE_OP_ONES 0xff
295/** @} */
296
297
298/** @name Object type values found in AML
299 * @{ */
300/** Object type is uninitialized. */
301#define ACPI_AML_OBJECT_TYPE_UNINIT 0
302/** Object is an integer. */
303#define ACPI_AML_OBJECT_TYPE_INTEGER 1
304/** Object is a string. */
305#define ACPI_AML_OBJECT_TYPE_STRING 2
306/** Object is a buffer. */
307#define ACPI_AML_OBJECT_TYPE_BUFFER 3
308/** Object is a package. */
309#define ACPI_AML_OBJECT_TYPE_PACKAGE 4
310/** Object is a field unit. */
311#define ACPI_AML_OBJECT_TYPE_FIELD_UNIT 5
312/** Object is a device. */
313#define ACPI_AML_OBJECT_TYPE_DEVICE 6
314/** Object is an event. */
315#define ACPI_AML_OBJECT_TYPE_EVENT 7
316/** Object is a method. */
317#define ACPI_AML_OBJECT_TYPE_METHOD 8
318/** Object is a mutex. */
319#define ACPI_AML_OBJECT_TYPE_MUTEX 9
320/** Object is an operation region. */
321#define ACPI_AML_OBJECT_TYPE_OPERATION_REGION 10
322/** Object is a power resource. */
323#define ACPI_AML_OBJECT_TYPE_POWER_RESOURCE 11
324/** Object is a processor. */
325#define ACPI_AML_OBJECT_TYPE_PROCESSOR 12
326/** Object is a thermal zone. */
327#define ACPI_AML_OBJECT_TYPE_THERMAL_ZONE 13
328/** Object is a buffer field. */
329#define ACPI_AML_OBJECT_TYPE_BUFFER_FIELD 14
330/** Object is a DDB handle. */
331#define ACPI_AML_OBJECT_TYPE_DDB_HANDLE 15
332/** Object is the debug object. */
333#define ACPI_AML_OBJECT_TYPE_DEBUG 16
334/** @} */
335
336
337/** @name Some helpers for classifying AML bytecode.
338 * @{ */
339DECLINLINE(bool) rtAcpiAmlOpcIsConstObj(uint8_t bOpc)
340{
341 return bOpc == ACPI_AML_BYTE_CODE_OP_ZERO
342 || bOpc == ACPI_AML_BYTE_CODE_OP_ONE
343 || bOpc == ACPI_AML_BYTE_CODE_OP_ONES;
344}
345
346
347DECLINLINE(bool) rtAcpiAmlOpcIsComputationalData(uint8_t bOpc)
348{
349 /** @todo RevisionOp (requires two bytes) */
350 return rtAcpiAmlOpcIsConstObj(bOpc)
351 || bOpc == ACPI_AML_BYTE_CODE_PREFIX_BYTE
352 || bOpc == ACPI_AML_BYTE_CODE_PREFIX_WORD
353 || bOpc == ACPI_AML_BYTE_CODE_PREFIX_DWORD
354 || bOpc == ACPI_AML_BYTE_CODE_PREFIX_QWORD
355 || bOpc == ACPI_AML_BYTE_CODE_PREFIX_STRING
356 || bOpc == ACPI_AML_BYTE_CODE_OP_BUFFER;
357}
358
359
360DECLINLINE(bool) rtAcpiAmlOpcIsDataObject(uint8_t bOpc)
361{
362 return rtAcpiAmlOpcIsComputationalData(bOpc)
363 || bOpc == ACPI_AML_BYTE_CODE_OP_PACKAGE
364 || bOpc == ACPI_AML_BYTE_CODE_OP_VAR_PACKAGE;
365}
366
367
368DECLINLINE(bool) rtAcpiAmlOpcIsDataRefObject(uint8_t bOpc)
369{
370 return rtAcpiAmlOpcIsDataObject(bOpc); /** @todo ObjectReference and DDBHandle. */
371}
372
373
374DECLINLINE(bool) rtAcpiAmlOpcIsArgObj(uint8_t bOpc)
375{
376 return (bOpc >= ACPI_AML_BYTE_CODE_OP_ARG_0)
377 && (bOpc <= ACPI_AML_BYTE_CODE_OP_ARG_6);
378}
379
380
381DECLINLINE(bool) rtAcpiAmlOpcIsLocalObj(uint8_t bOpc)
382{
383 return (bOpc >= ACPI_AML_BYTE_CODE_OP_LOCAL_0)
384 && (bOpc <= ACPI_AML_BYTE_CODE_OP_LOCAL_7);
385}
386
387
388DECLINLINE(bool) rtAcpiAmlOpcIsTermArg(uint8_t bOpc)
389{
390 /** @todo Type2Opcode */
391 return rtAcpiAmlOpcIsDataObject(bOpc)
392 || rtAcpiAmlOpcIsArgObj(bOpc)
393 || rtAcpiAmlOpcIsLocalObj(bOpc);
394}
395/** @} */
396
397/** @} */
398
399#endif /* !IPRT_INCLUDED_formats_acpi_aml_h */
400
Note: See TracBrowser for help on using the repository browser.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette