ReactOS Fundraising Campaign 2012
 
€ 4,410 / € 30,000

Information | Donate

Home | Info | Community | Development | myReactOS | Contact Us

  1. Home
  2. Community
  3. Development
  4. myReactOS
  5. Fundraiser 2012

  1. Main Page
  2. Alphabetical List
  3. Data Structures
  4. Directories
  5. File List
  6. Data Fields
  7. Globals
  8. Related Pages

ReactOS Development > Doxygen

amlcode.h
Go to the documentation of this file.
00001 /******************************************************************************
00002  *
00003  * Name: amlcode.h - Definitions for AML, as included in "definition blocks"
00004  *                   Declarations and definitions contained herein are derived
00005  *                   directly from the ACPI specification.
00006  *
00007  *****************************************************************************/
00008 
00009 /******************************************************************************
00010  *
00011  * 1. Copyright Notice
00012  *
00013  * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
00014  * All rights reserved.
00015  *
00016  * 2. License
00017  *
00018  * 2.1. This is your license from Intel Corp. under its intellectual property
00019  * rights.  You may have additional license terms from the party that provided
00020  * you this software, covering your right to use that party's intellectual
00021  * property rights.
00022  *
00023  * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a
00024  * copy of the source code appearing in this file ("Covered Code") an
00025  * irrevocable, perpetual, worldwide license under Intel's copyrights in the
00026  * base code distributed originally by Intel ("Original Intel Code") to copy,
00027  * make derivatives, distribute, use and display any portion of the Covered
00028  * Code in any form, with the right to sublicense such rights; and
00029  *
00030  * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent
00031  * license (with the right to sublicense), under only those claims of Intel
00032  * patents that are infringed by the Original Intel Code, to make, use, sell,
00033  * offer to sell, and import the Covered Code and derivative works thereof
00034  * solely to the minimum extent necessary to exercise the above copyright
00035  * license, and in no event shall the patent license extend to any additions
00036  * to or modifications of the Original Intel Code.  No other license or right
00037  * is granted directly or by implication, estoppel or otherwise;
00038  *
00039  * The above copyright and patent license is granted only if the following
00040  * conditions are met:
00041  *
00042  * 3. Conditions
00043  *
00044  * 3.1. Redistribution of Source with Rights to Further Distribute Source.
00045  * Redistribution of source code of any substantial portion of the Covered
00046  * Code or modification with rights to further distribute source must include
00047  * the above Copyright Notice, the above License, this list of Conditions,
00048  * and the following Disclaimer and Export Compliance provision.  In addition,
00049  * Licensee must cause all Covered Code to which Licensee contributes to
00050  * contain a file documenting the changes Licensee made to create that Covered
00051  * Code and the date of any change.  Licensee must include in that file the
00052  * documentation of any changes made by any predecessor Licensee.  Licensee
00053  * must include a prominent statement that the modification is derived,
00054  * directly or indirectly, from Original Intel Code.
00055  *
00056  * 3.2. Redistribution of Source with no Rights to Further Distribute Source.
00057  * Redistribution of source code of any substantial portion of the Covered
00058  * Code or modification without rights to further distribute source must
00059  * include the following Disclaimer and Export Compliance provision in the
00060  * documentation and/or other materials provided with distribution.  In
00061  * addition, Licensee may not authorize further sublicense of source of any
00062  * portion of the Covered Code, and must include terms to the effect that the
00063  * license from Licensee to its licensee is limited to the intellectual
00064  * property embodied in the software Licensee provides to its licensee, and
00065  * not to intellectual property embodied in modifications its licensee may
00066  * make.
00067  *
00068  * 3.3. Redistribution of Executable. Redistribution in executable form of any
00069  * substantial portion of the Covered Code or modification must reproduce the
00070  * above Copyright Notice, and the following Disclaimer and Export Compliance
00071  * provision in the documentation and/or other materials provided with the
00072  * distribution.
00073  *
00074  * 3.4. Intel retains all right, title, and interest in and to the Original
00075  * Intel Code.
00076  *
00077  * 3.5. Neither the name Intel nor any other trademark owned or controlled by
00078  * Intel shall be used in advertising or otherwise to promote the sale, use or
00079  * other dealings in products derived from or relating to the Covered Code
00080  * without prior written authorization from Intel.
00081  *
00082  * 4. Disclaimer and Export Compliance
00083  *
00084  * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED
00085  * HERE.  ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE
00086  * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT,  ASSISTANCE,
00087  * INSTALLATION, TRAINING OR OTHER SERVICES.  INTEL WILL NOT PROVIDE ANY
00088  * UPDATES, ENHANCEMENTS OR EXTENSIONS.  INTEL SPECIFICALLY DISCLAIMS ANY
00089  * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A
00090  * PARTICULAR PURPOSE.
00091  *
00092  * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES
00093  * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR
00094  * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT,
00095  * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY
00096  * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL
00097  * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.  THESE LIMITATIONS
00098  * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY
00099  * LIMITED REMEDY.
00100  *
00101  * 4.3. Licensee shall not export, either directly or indirectly, any of this
00102  * software or system incorporating such software without first obtaining any
00103  * required license or other approval from the U. S. Department of Commerce or
00104  * any other agency or department of the United States Government.  In the
00105  * event Licensee exports any such software from the United States or
00106  * re-exports any such software from a foreign destination, Licensee shall
00107  * ensure that the distribution and export/re-export of the software is in
00108  * compliance with all laws, regulations, orders, or other restrictions of the
00109  * U.S. Export Administration Regulations. Licensee agrees that neither it nor
00110  * any of its subsidiaries will export/re-export any technical data, process,
00111  * software, or service, directly or indirectly, to any country for which the
00112  * United States government or any agency thereof requires an export license,
00113  * other governmental approval, or letter of assurance, without first obtaining
00114  * such license, approval or letter.
00115  *
00116  *****************************************************************************/
00117 
00118 #ifndef __AMLCODE_H__
00119 #define __AMLCODE_H__
00120 
00121 /* primary opcodes */
00122 
00123 #define AML_NULL_CHAR               (UINT16) 0x00
00124 
00125 #define AML_ZERO_OP                 (UINT16) 0x00
00126 #define AML_ONE_OP                  (UINT16) 0x01
00127 #define AML_UNASSIGNED              (UINT16) 0x02
00128 #define AML_ALIAS_OP                (UINT16) 0x06
00129 #define AML_NAME_OP                 (UINT16) 0x08
00130 #define AML_BYTE_OP                 (UINT16) 0x0a
00131 #define AML_WORD_OP                 (UINT16) 0x0b
00132 #define AML_DWORD_OP                (UINT16) 0x0c
00133 #define AML_STRING_OP               (UINT16) 0x0d
00134 #define AML_QWORD_OP                (UINT16) 0x0e     /* ACPI 2.0 */
00135 #define AML_SCOPE_OP                (UINT16) 0x10
00136 #define AML_BUFFER_OP               (UINT16) 0x11
00137 #define AML_PACKAGE_OP              (UINT16) 0x12
00138 #define AML_VAR_PACKAGE_OP          (UINT16) 0x13     /* ACPI 2.0 */
00139 #define AML_METHOD_OP               (UINT16) 0x14
00140 #define AML_DUAL_NAME_PREFIX        (UINT16) 0x2e
00141 #define AML_MULTI_NAME_PREFIX_OP    (UINT16) 0x2f
00142 #define AML_NAME_CHAR_SUBSEQ        (UINT16) 0x30
00143 #define AML_NAME_CHAR_FIRST         (UINT16) 0x41
00144 #define AML_EXTENDED_OP_PREFIX      (UINT16) 0x5b
00145 #define AML_ROOT_PREFIX             (UINT16) 0x5c
00146 #define AML_PARENT_PREFIX           (UINT16) 0x5e
00147 #define AML_LOCAL_OP                (UINT16) 0x60
00148 #define AML_LOCAL0                  (UINT16) 0x60
00149 #define AML_LOCAL1                  (UINT16) 0x61
00150 #define AML_LOCAL2                  (UINT16) 0x62
00151 #define AML_LOCAL3                  (UINT16) 0x63
00152 #define AML_LOCAL4                  (UINT16) 0x64
00153 #define AML_LOCAL5                  (UINT16) 0x65
00154 #define AML_LOCAL6                  (UINT16) 0x66
00155 #define AML_LOCAL7                  (UINT16) 0x67
00156 #define AML_ARG_OP                  (UINT16) 0x68
00157 #define AML_ARG0                    (UINT16) 0x68
00158 #define AML_ARG1                    (UINT16) 0x69
00159 #define AML_ARG2                    (UINT16) 0x6a
00160 #define AML_ARG3                    (UINT16) 0x6b
00161 #define AML_ARG4                    (UINT16) 0x6c
00162 #define AML_ARG5                    (UINT16) 0x6d
00163 #define AML_ARG6                    (UINT16) 0x6e
00164 #define AML_STORE_OP                (UINT16) 0x70
00165 #define AML_REF_OF_OP               (UINT16) 0x71
00166 #define AML_ADD_OP                  (UINT16) 0x72
00167 #define AML_CONCAT_OP               (UINT16) 0x73
00168 #define AML_SUBTRACT_OP             (UINT16) 0x74
00169 #define AML_INCREMENT_OP            (UINT16) 0x75
00170 #define AML_DECREMENT_OP            (UINT16) 0x76
00171 #define AML_MULTIPLY_OP             (UINT16) 0x77
00172 #define AML_DIVIDE_OP               (UINT16) 0x78
00173 #define AML_SHIFT_LEFT_OP           (UINT16) 0x79
00174 #define AML_SHIFT_RIGHT_OP          (UINT16) 0x7a
00175 #define AML_BIT_AND_OP              (UINT16) 0x7b
00176 #define AML_BIT_NAND_OP             (UINT16) 0x7c
00177 #define AML_BIT_OR_OP               (UINT16) 0x7d
00178 #define AML_BIT_NOR_OP              (UINT16) 0x7e
00179 #define AML_BIT_XOR_OP              (UINT16) 0x7f
00180 #define AML_BIT_NOT_OP              (UINT16) 0x80
00181 #define AML_FIND_SET_LEFT_BIT_OP    (UINT16) 0x81
00182 #define AML_FIND_SET_RIGHT_BIT_OP   (UINT16) 0x82
00183 #define AML_DEREF_OF_OP             (UINT16) 0x83
00184 #define AML_CONCAT_RES_OP           (UINT16) 0x84     /* ACPI 2.0 */
00185 #define AML_MOD_OP                  (UINT16) 0x85     /* ACPI 2.0 */
00186 #define AML_NOTIFY_OP               (UINT16) 0x86
00187 #define AML_SIZE_OF_OP              (UINT16) 0x87
00188 #define AML_INDEX_OP                (UINT16) 0x88
00189 #define AML_MATCH_OP                (UINT16) 0x89
00190 #define AML_CREATE_DWORD_FIELD_OP   (UINT16) 0x8a
00191 #define AML_CREATE_WORD_FIELD_OP    (UINT16) 0x8b
00192 #define AML_CREATE_BYTE_FIELD_OP    (UINT16) 0x8c
00193 #define AML_CREATE_BIT_FIELD_OP     (UINT16) 0x8d
00194 #define AML_TYPE_OP                 (UINT16) 0x8e
00195 #define AML_CREATE_QWORD_FIELD_OP   (UINT16) 0x8f     /* ACPI 2.0 */
00196 #define AML_LAND_OP                 (UINT16) 0x90
00197 #define AML_LOR_OP                  (UINT16) 0x91
00198 #define AML_LNOT_OP                 (UINT16) 0x92
00199 #define AML_LEQUAL_OP               (UINT16) 0x93
00200 #define AML_LGREATER_OP             (UINT16) 0x94
00201 #define AML_LLESS_OP                (UINT16) 0x95
00202 #define AML_TO_BUFFER_OP            (UINT16) 0x96     /* ACPI 2.0 */
00203 #define AML_TO_DECSTRING_OP         (UINT16) 0x97     /* ACPI 2.0 */
00204 #define AML_TO_HEXSTRING_OP         (UINT16) 0x98     /* ACPI 2.0 */
00205 #define AML_TO_INTEGER_OP           (UINT16) 0x99     /* ACPI 2.0 */
00206 #define AML_TO_STRING_OP            (UINT16) 0x9c     /* ACPI 2.0 */
00207 #define AML_COPY_OP                 (UINT16) 0x9d     /* ACPI 2.0 */
00208 #define AML_MID_OP                  (UINT16) 0x9e     /* ACPI 2.0 */
00209 #define AML_CONTINUE_OP             (UINT16) 0x9f     /* ACPI 2.0 */
00210 #define AML_IF_OP                   (UINT16) 0xa0
00211 #define AML_ELSE_OP                 (UINT16) 0xa1
00212 #define AML_WHILE_OP                (UINT16) 0xa2
00213 #define AML_NOOP_OP                 (UINT16) 0xa3
00214 #define AML_RETURN_OP               (UINT16) 0xa4
00215 #define AML_BREAK_OP                (UINT16) 0xa5
00216 #define AML_BREAK_POINT_OP          (UINT16) 0xcc
00217 #define AML_ONES_OP                 (UINT16) 0xff
00218 
00219 /* prefixed opcodes */
00220 
00221 #define AML_EXTENDED_OPCODE         (UINT16) 0x5b00     /* prefix for 2-byte opcodes */
00222 
00223 #define AML_MUTEX_OP                (UINT16) 0x5b01
00224 #define AML_EVENT_OP                (UINT16) 0x5b02
00225 #define AML_SHIFT_RIGHT_BIT_OP      (UINT16) 0x5b10
00226 #define AML_SHIFT_LEFT_BIT_OP       (UINT16) 0x5b11
00227 #define AML_COND_REF_OF_OP          (UINT16) 0x5b12
00228 #define AML_CREATE_FIELD_OP         (UINT16) 0x5b13
00229 #define AML_LOAD_TABLE_OP           (UINT16) 0x5b1f     /* ACPI 2.0 */
00230 #define AML_LOAD_OP                 (UINT16) 0x5b20
00231 #define AML_STALL_OP                (UINT16) 0x5b21
00232 #define AML_SLEEP_OP                (UINT16) 0x5b22
00233 #define AML_ACQUIRE_OP              (UINT16) 0x5b23
00234 #define AML_SIGNAL_OP               (UINT16) 0x5b24
00235 #define AML_WAIT_OP                 (UINT16) 0x5b25
00236 #define AML_RESET_OP                (UINT16) 0x5b26
00237 #define AML_RELEASE_OP              (UINT16) 0x5b27
00238 #define AML_FROM_BCD_OP             (UINT16) 0x5b28
00239 #define AML_TO_BCD_OP               (UINT16) 0x5b29
00240 #define AML_UNLOAD_OP               (UINT16) 0x5b2a
00241 #define AML_REVISION_OP             (UINT16) 0x5b30
00242 #define AML_DEBUG_OP                (UINT16) 0x5b31
00243 #define AML_FATAL_OP                (UINT16) 0x5b32
00244 #define AML_TIMER_OP                (UINT16) 0x5b33     /* ACPI 3.0 */
00245 #define AML_REGION_OP               (UINT16) 0x5b80
00246 #define AML_FIELD_OP                (UINT16) 0x5b81
00247 #define AML_DEVICE_OP               (UINT16) 0x5b82
00248 #define AML_PROCESSOR_OP            (UINT16) 0x5b83
00249 #define AML_POWER_RES_OP            (UINT16) 0x5b84
00250 #define AML_THERMAL_ZONE_OP         (UINT16) 0x5b85
00251 #define AML_INDEX_FIELD_OP          (UINT16) 0x5b86
00252 #define AML_BANK_FIELD_OP           (UINT16) 0x5b87
00253 #define AML_DATA_REGION_OP          (UINT16) 0x5b88     /* ACPI 2.0 */
00254 
00255 
00256 /*
00257  * Combination opcodes (actually two one-byte opcodes)
00258  * Used by the disassembler and iASL compiler
00259  */
00260 #define AML_LGREATEREQUAL_OP        (UINT16) 0x9295
00261 #define AML_LLESSEQUAL_OP           (UINT16) 0x9294
00262 #define AML_LNOTEQUAL_OP            (UINT16) 0x9293
00263 
00264 
00265 /*
00266  * Internal opcodes
00267  * Use only "Unknown" AML opcodes, don't attempt to use
00268  * any valid ACPI ASCII values (A-Z, 0-9, '-')
00269  */
00270 #define AML_INT_NAMEPATH_OP         (UINT16) 0x002d
00271 #define AML_INT_NAMEDFIELD_OP       (UINT16) 0x0030
00272 #define AML_INT_RESERVEDFIELD_OP    (UINT16) 0x0031
00273 #define AML_INT_ACCESSFIELD_OP      (UINT16) 0x0032
00274 #define AML_INT_BYTELIST_OP         (UINT16) 0x0033
00275 #define AML_INT_STATICSTRING_OP     (UINT16) 0x0034
00276 #define AML_INT_METHODCALL_OP       (UINT16) 0x0035
00277 #define AML_INT_RETURN_VALUE_OP     (UINT16) 0x0036
00278 #define AML_INT_EVAL_SUBTREE_OP     (UINT16) 0x0037
00279 
00280 
00281 #define ARG_NONE                    0x0
00282 
00283 /*
00284  * Argument types for the AML Parser
00285  * Each field in the ArgTypes UINT32 is 5 bits, allowing for a maximum of 6 arguments.
00286  * There can be up to 31 unique argument types
00287  * Zero is reserved as end-of-list indicator
00288  */
00289 #define ARGP_BYTEDATA               0x01
00290 #define ARGP_BYTELIST               0x02
00291 #define ARGP_CHARLIST               0x03
00292 #define ARGP_DATAOBJ                0x04
00293 #define ARGP_DATAOBJLIST            0x05
00294 #define ARGP_DWORDDATA              0x06
00295 #define ARGP_FIELDLIST              0x07
00296 #define ARGP_NAME                   0x08
00297 #define ARGP_NAMESTRING             0x09
00298 #define ARGP_OBJLIST                0x0A
00299 #define ARGP_PKGLENGTH              0x0B
00300 #define ARGP_SUPERNAME              0x0C
00301 #define ARGP_TARGET                 0x0D
00302 #define ARGP_TERMARG                0x0E
00303 #define ARGP_TERMLIST               0x0F
00304 #define ARGP_WORDDATA               0x10
00305 #define ARGP_QWORDDATA              0x11
00306 #define ARGP_SIMPLENAME             0x12
00307 
00308 /*
00309  * Resolved argument types for the AML Interpreter
00310  * Each field in the ArgTypes UINT32 is 5 bits, allowing for a maximum of 6 arguments.
00311  * There can be up to 31 unique argument types (0 is end-of-arg-list indicator)
00312  *
00313  * Note1: These values are completely independent from the ACPI_TYPEs
00314  *        i.e., ARGI_INTEGER != ACPI_TYPE_INTEGER
00315  *
00316  * Note2: If and when 5 bits becomes insufficient, it would probably be best
00317  * to convert to a 6-byte array of argument types, allowing 8 bits per argument.
00318  */
00319 
00320 /* Single, simple types */
00321 
00322 #define ARGI_ANYTYPE                0x01    /* Don't care */
00323 #define ARGI_PACKAGE                0x02
00324 #define ARGI_EVENT                  0x03
00325 #define ARGI_MUTEX                  0x04
00326 #define ARGI_DDBHANDLE              0x05
00327 
00328 /* Interchangeable types (via implicit conversion) */
00329 
00330 #define ARGI_INTEGER                0x06
00331 #define ARGI_STRING                 0x07
00332 #define ARGI_BUFFER                 0x08
00333 #define ARGI_BUFFER_OR_STRING       0x09    /* Used by MID op only */
00334 #define ARGI_COMPUTEDATA            0x0A    /* Buffer, String, or Integer */
00335 
00336 /* Reference objects */
00337 
00338 #define ARGI_INTEGER_REF            0x0B
00339 #define ARGI_OBJECT_REF             0x0C
00340 #define ARGI_DEVICE_REF             0x0D
00341 #define ARGI_REFERENCE              0x0E
00342 #define ARGI_TARGETREF              0x0F    /* Target, subject to implicit conversion */
00343 #define ARGI_FIXED_TARGET           0x10    /* Target, no implicit conversion */
00344 #define ARGI_SIMPLE_TARGET          0x11    /* Name, Local, Arg -- no implicit conversion */
00345 
00346 /* Multiple/complex types */
00347 
00348 #define ARGI_DATAOBJECT             0x12    /* Buffer, String, package or reference to a Node - Used only by SizeOf operator*/
00349 #define ARGI_COMPLEXOBJ             0x13    /* Buffer, String, or package (Used by INDEX op only) */
00350 #define ARGI_REF_OR_STRING          0x14    /* Reference or String (Used by DEREFOF op only) */
00351 #define ARGI_REGION_OR_BUFFER       0x15    /* Used by LOAD op only */
00352 #define ARGI_DATAREFOBJ             0x16
00353 
00354 /* Note: types above can expand to 0x1F maximum */
00355 
00356 #define ARGI_INVALID_OPCODE         0xFFFFFFFF
00357 
00358 
00359 /*
00360  * hash offsets
00361  */
00362 #define AML_EXTOP_HASH_OFFSET       22
00363 #define AML_LNOT_HASH_OFFSET        19
00364 
00365 
00366 /*
00367  * opcode groups and types
00368  */
00369 #define OPGRP_NAMED                 0x01
00370 #define OPGRP_FIELD                 0x02
00371 #define OPGRP_BYTELIST              0x04
00372 
00373 
00374 /*
00375  * Opcode information
00376  */
00377 
00378 /* Opcode flags */
00379 
00380 #define AML_LOGICAL                 0x0001
00381 #define AML_LOGICAL_NUMERIC         0x0002
00382 #define AML_MATH                    0x0004
00383 #define AML_CREATE                  0x0008
00384 #define AML_FIELD                   0x0010
00385 #define AML_DEFER                   0x0020
00386 #define AML_NAMED                   0x0040
00387 #define AML_NSNODE                  0x0080
00388 #define AML_NSOPCODE                0x0100
00389 #define AML_NSOBJECT                0x0200
00390 #define AML_HAS_RETVAL              0x0400
00391 #define AML_HAS_TARGET              0x0800
00392 #define AML_HAS_ARGS                0x1000
00393 #define AML_CONSTANT                0x2000
00394 #define AML_NO_OPERAND_RESOLVE      0x4000
00395 
00396 /* Convenient flag groupings */
00397 
00398 #define AML_FLAGS_EXEC_0A_0T_1R                                     AML_HAS_RETVAL
00399 #define AML_FLAGS_EXEC_1A_0T_0R     AML_HAS_ARGS                                   /* Monadic1  */
00400 #define AML_FLAGS_EXEC_1A_0T_1R     AML_HAS_ARGS |                  AML_HAS_RETVAL /* Monadic2  */
00401 #define AML_FLAGS_EXEC_1A_1T_0R     AML_HAS_ARGS | AML_HAS_TARGET
00402 #define AML_FLAGS_EXEC_1A_1T_1R     AML_HAS_ARGS | AML_HAS_TARGET | AML_HAS_RETVAL /* Monadic2R */
00403 #define AML_FLAGS_EXEC_2A_0T_0R     AML_HAS_ARGS                                   /* Dyadic1   */
00404 #define AML_FLAGS_EXEC_2A_0T_1R     AML_HAS_ARGS |                  AML_HAS_RETVAL /* Dyadic2   */
00405 #define AML_FLAGS_EXEC_2A_1T_1R     AML_HAS_ARGS | AML_HAS_TARGET | AML_HAS_RETVAL /* Dyadic2R  */
00406 #define AML_FLAGS_EXEC_2A_2T_1R     AML_HAS_ARGS | AML_HAS_TARGET | AML_HAS_RETVAL
00407 #define AML_FLAGS_EXEC_3A_0T_0R     AML_HAS_ARGS
00408 #define AML_FLAGS_EXEC_3A_1T_1R     AML_HAS_ARGS | AML_HAS_TARGET | AML_HAS_RETVAL
00409 #define AML_FLAGS_EXEC_6A_0T_1R     AML_HAS_ARGS |                  AML_HAS_RETVAL
00410 
00411 
00412 /*
00413  * The opcode Type is used in a dispatch table, do not change
00414  * without updating the table.
00415  */
00416 #define AML_TYPE_EXEC_0A_0T_1R      0x00
00417 #define AML_TYPE_EXEC_1A_0T_0R      0x01 /* Monadic1  */
00418 #define AML_TYPE_EXEC_1A_0T_1R      0x02 /* Monadic2  */
00419 #define AML_TYPE_EXEC_1A_1T_0R      0x03
00420 #define AML_TYPE_EXEC_1A_1T_1R      0x04 /* Monadic2R */
00421 #define AML_TYPE_EXEC_2A_0T_0R      0x05 /* Dyadic1   */
00422 #define AML_TYPE_EXEC_2A_0T_1R      0x06 /* Dyadic2   */
00423 #define AML_TYPE_EXEC_2A_1T_1R      0x07 /* Dyadic2R  */
00424 #define AML_TYPE_EXEC_2A_2T_1R      0x08
00425 #define AML_TYPE_EXEC_3A_0T_0R      0x09
00426 #define AML_TYPE_EXEC_3A_1T_1R      0x0A
00427 #define AML_TYPE_EXEC_6A_0T_1R      0x0B
00428 /* End of types used in dispatch table */
00429 
00430 #define AML_TYPE_LITERAL            0x0B
00431 #define AML_TYPE_CONSTANT           0x0C
00432 #define AML_TYPE_METHOD_ARGUMENT    0x0D
00433 #define AML_TYPE_LOCAL_VARIABLE     0x0E
00434 #define AML_TYPE_DATA_TERM          0x0F
00435 
00436 /* Generic for an op that returns a value */
00437 
00438 #define AML_TYPE_METHOD_CALL        0x10
00439 
00440 /* Misc */
00441 
00442 #define AML_TYPE_CREATE_FIELD       0x11
00443 #define AML_TYPE_CREATE_OBJECT      0x12
00444 #define AML_TYPE_CONTROL            0x13
00445 #define AML_TYPE_NAMED_NO_OBJ       0x14
00446 #define AML_TYPE_NAMED_FIELD        0x15
00447 #define AML_TYPE_NAMED_SIMPLE       0x16
00448 #define AML_TYPE_NAMED_COMPLEX      0x17
00449 #define AML_TYPE_RETURN             0x18
00450 
00451 #define AML_TYPE_UNDEFINED          0x19
00452 #define AML_TYPE_BOGUS              0x1A
00453 
00454 /* AML Package Length encodings */
00455 
00456 #define ACPI_AML_PACKAGE_TYPE1      0x40
00457 #define ACPI_AML_PACKAGE_TYPE2      0x4000
00458 #define ACPI_AML_PACKAGE_TYPE3      0x400000
00459 #define ACPI_AML_PACKAGE_TYPE4      0x40000000
00460 
00461 /*
00462  * Opcode classes
00463  */
00464 #define AML_CLASS_EXECUTE           0x00
00465 #define AML_CLASS_CREATE            0x01
00466 #define AML_CLASS_ARGUMENT          0x02
00467 #define AML_CLASS_NAMED_OBJECT      0x03
00468 #define AML_CLASS_CONTROL           0x04
00469 #define AML_CLASS_ASCII             0x05
00470 #define AML_CLASS_PREFIX            0x06
00471 #define AML_CLASS_INTERNAL          0x07
00472 #define AML_CLASS_RETURN_VALUE      0x08
00473 #define AML_CLASS_METHOD_CALL       0x09
00474 #define AML_CLASS_UNKNOWN           0x0A
00475 
00476 
00477 /* Comparison operation codes for MatchOp operator */
00478 
00479 typedef enum
00480 {
00481     MATCH_MTR                       = 0,
00482     MATCH_MEQ                       = 1,
00483     MATCH_MLE                       = 2,
00484     MATCH_MLT                       = 3,
00485     MATCH_MGE                       = 4,
00486     MATCH_MGT                       = 5
00487 
00488 } AML_MATCH_OPERATOR;
00489 
00490 #define MAX_MATCH_OPERATOR          5
00491 
00492 
00493 /*
00494  * FieldFlags
00495  *
00496  * This byte is extracted from the AML and includes three separate
00497  * pieces of information about the field:
00498  * 1) The field access type
00499  * 2) The field update rule
00500  * 3) The lock rule for the field
00501  *
00502  * Bits 00 - 03 : AccessType (AnyAcc, ByteAcc, etc.)
00503  *      04      : LockRule (1 == Lock)
00504  *      05 - 06 : UpdateRule
00505  */
00506 #define AML_FIELD_ACCESS_TYPE_MASK  0x0F
00507 #define AML_FIELD_LOCK_RULE_MASK    0x10
00508 #define AML_FIELD_UPDATE_RULE_MASK  0x60
00509 
00510 
00511 /* 1) Field Access Types */
00512 
00513 typedef enum
00514 {
00515     AML_FIELD_ACCESS_ANY            = 0x00,
00516     AML_FIELD_ACCESS_BYTE           = 0x01,
00517     AML_FIELD_ACCESS_WORD           = 0x02,
00518     AML_FIELD_ACCESS_DWORD          = 0x03,
00519     AML_FIELD_ACCESS_QWORD          = 0x04,    /* ACPI 2.0 */
00520     AML_FIELD_ACCESS_BUFFER         = 0x05     /* ACPI 2.0 */
00521 
00522 } AML_ACCESS_TYPE;
00523 
00524 
00525 /* 2) Field Lock Rules */
00526 
00527 typedef enum
00528 {
00529     AML_FIELD_LOCK_NEVER            = 0x00,
00530     AML_FIELD_LOCK_ALWAYS           = 0x10
00531 
00532 } AML_LOCK_RULE;
00533 
00534 
00535 /* 3) Field Update Rules */
00536 
00537 typedef enum
00538 {
00539     AML_FIELD_UPDATE_PRESERVE       = 0x00,
00540     AML_FIELD_UPDATE_WRITE_AS_ONES  = 0x20,
00541     AML_FIELD_UPDATE_WRITE_AS_ZEROS = 0x40
00542 
00543 } AML_UPDATE_RULE;
00544 
00545 
00546 /*
00547  * Field Access Attributes.
00548  * This byte is extracted from the AML via the
00549  * AccessAs keyword
00550  */
00551 typedef enum
00552 {
00553     AML_FIELD_ATTRIB_SMB_QUICK      = 0x02,
00554     AML_FIELD_ATTRIB_SMB_SEND_RCV   = 0x04,
00555     AML_FIELD_ATTRIB_SMB_BYTE       = 0x06,
00556     AML_FIELD_ATTRIB_SMB_WORD       = 0x08,
00557     AML_FIELD_ATTRIB_SMB_BLOCK      = 0x0A,
00558     AML_FIELD_ATTRIB_SMB_WORD_CALL  = 0x0C,
00559     AML_FIELD_ATTRIB_SMB_BLOCK_CALL = 0x0D
00560 
00561 } AML_ACCESS_ATTRIBUTE;
00562 
00563 
00564 /* Bit fields in the AML MethodFlags byte */
00565 
00566 #define AML_METHOD_ARG_COUNT        0x07
00567 #define AML_METHOD_SERIALIZED       0x08
00568 #define AML_METHOD_SYNC_LEVEL       0xF0
00569 
00570 
00571 #endif /* __AMLCODE_H__ */

Generated on Mon May 28 2012 04:27:07 for ReactOS by doxygen 1.7.6.1

ReactOS is a registered trademark or a trademark of ReactOS Foundation in the United States and other countries.