1*4882a593Smuzhiyun /* SPDX-License-Identifier: BSD-3-Clause OR GPL-2.0 */ 2*4882a593Smuzhiyun /****************************************************************************** 3*4882a593Smuzhiyun * 4*4882a593Smuzhiyun * Name: amlcode.h - Definitions for AML, as included in "definition blocks" 5*4882a593Smuzhiyun * Declarations and definitions contained herein are derived 6*4882a593Smuzhiyun * directly from the ACPI specification. 7*4882a593Smuzhiyun * 8*4882a593Smuzhiyun * Copyright (C) 2000 - 2020, Intel Corp. 9*4882a593Smuzhiyun * 10*4882a593Smuzhiyun *****************************************************************************/ 11*4882a593Smuzhiyun 12*4882a593Smuzhiyun #ifndef __AMLCODE_H__ 13*4882a593Smuzhiyun #define __AMLCODE_H__ 14*4882a593Smuzhiyun 15*4882a593Smuzhiyun /* primary opcodes */ 16*4882a593Smuzhiyun 17*4882a593Smuzhiyun #define AML_ZERO_OP (u16) 0x00 18*4882a593Smuzhiyun #define AML_ONE_OP (u16) 0x01 19*4882a593Smuzhiyun #define AML_ALIAS_OP (u16) 0x06 20*4882a593Smuzhiyun #define AML_NAME_OP (u16) 0x08 21*4882a593Smuzhiyun #define AML_BYTE_OP (u16) 0x0a 22*4882a593Smuzhiyun #define AML_WORD_OP (u16) 0x0b 23*4882a593Smuzhiyun #define AML_DWORD_OP (u16) 0x0c 24*4882a593Smuzhiyun #define AML_STRING_OP (u16) 0x0d 25*4882a593Smuzhiyun #define AML_QWORD_OP (u16) 0x0e /* ACPI 2.0 */ 26*4882a593Smuzhiyun #define AML_SCOPE_OP (u16) 0x10 27*4882a593Smuzhiyun #define AML_BUFFER_OP (u16) 0x11 28*4882a593Smuzhiyun #define AML_PACKAGE_OP (u16) 0x12 29*4882a593Smuzhiyun #define AML_VARIABLE_PACKAGE_OP (u16) 0x13 /* ACPI 2.0 */ 30*4882a593Smuzhiyun #define AML_METHOD_OP (u16) 0x14 31*4882a593Smuzhiyun #define AML_EXTERNAL_OP (u16) 0x15 /* ACPI 6.0 */ 32*4882a593Smuzhiyun #define AML_DUAL_NAME_PREFIX (u16) 0x2e 33*4882a593Smuzhiyun #define AML_MULTI_NAME_PREFIX (u16) 0x2f 34*4882a593Smuzhiyun #define AML_EXTENDED_PREFIX (u16) 0x5b 35*4882a593Smuzhiyun #define AML_ROOT_PREFIX (u16) 0x5c 36*4882a593Smuzhiyun #define AML_PARENT_PREFIX (u16) 0x5e 37*4882a593Smuzhiyun #define AML_FIRST_LOCAL_OP (u16) 0x60 /* Used for Local op # calculations */ 38*4882a593Smuzhiyun #define AML_LOCAL0 (u16) 0x60 39*4882a593Smuzhiyun #define AML_LOCAL1 (u16) 0x61 40*4882a593Smuzhiyun #define AML_LOCAL2 (u16) 0x62 41*4882a593Smuzhiyun #define AML_LOCAL3 (u16) 0x63 42*4882a593Smuzhiyun #define AML_LOCAL4 (u16) 0x64 43*4882a593Smuzhiyun #define AML_LOCAL5 (u16) 0x65 44*4882a593Smuzhiyun #define AML_LOCAL6 (u16) 0x66 45*4882a593Smuzhiyun #define AML_LOCAL7 (u16) 0x67 46*4882a593Smuzhiyun #define AML_FIRST_ARG_OP (u16) 0x68 /* Used for Arg op # calculations */ 47*4882a593Smuzhiyun #define AML_ARG0 (u16) 0x68 48*4882a593Smuzhiyun #define AML_ARG1 (u16) 0x69 49*4882a593Smuzhiyun #define AML_ARG2 (u16) 0x6a 50*4882a593Smuzhiyun #define AML_ARG3 (u16) 0x6b 51*4882a593Smuzhiyun #define AML_ARG4 (u16) 0x6c 52*4882a593Smuzhiyun #define AML_ARG5 (u16) 0x6d 53*4882a593Smuzhiyun #define AML_ARG6 (u16) 0x6e 54*4882a593Smuzhiyun #define AML_STORE_OP (u16) 0x70 55*4882a593Smuzhiyun #define AML_REF_OF_OP (u16) 0x71 56*4882a593Smuzhiyun #define AML_ADD_OP (u16) 0x72 57*4882a593Smuzhiyun #define AML_CONCATENATE_OP (u16) 0x73 58*4882a593Smuzhiyun #define AML_SUBTRACT_OP (u16) 0x74 59*4882a593Smuzhiyun #define AML_INCREMENT_OP (u16) 0x75 60*4882a593Smuzhiyun #define AML_DECREMENT_OP (u16) 0x76 61*4882a593Smuzhiyun #define AML_MULTIPLY_OP (u16) 0x77 62*4882a593Smuzhiyun #define AML_DIVIDE_OP (u16) 0x78 63*4882a593Smuzhiyun #define AML_SHIFT_LEFT_OP (u16) 0x79 64*4882a593Smuzhiyun #define AML_SHIFT_RIGHT_OP (u16) 0x7a 65*4882a593Smuzhiyun #define AML_BIT_AND_OP (u16) 0x7b 66*4882a593Smuzhiyun #define AML_BIT_NAND_OP (u16) 0x7c 67*4882a593Smuzhiyun #define AML_BIT_OR_OP (u16) 0x7d 68*4882a593Smuzhiyun #define AML_BIT_NOR_OP (u16) 0x7e 69*4882a593Smuzhiyun #define AML_BIT_XOR_OP (u16) 0x7f 70*4882a593Smuzhiyun #define AML_BIT_NOT_OP (u16) 0x80 71*4882a593Smuzhiyun #define AML_FIND_SET_LEFT_BIT_OP (u16) 0x81 72*4882a593Smuzhiyun #define AML_FIND_SET_RIGHT_BIT_OP (u16) 0x82 73*4882a593Smuzhiyun #define AML_DEREF_OF_OP (u16) 0x83 74*4882a593Smuzhiyun #define AML_CONCATENATE_TEMPLATE_OP (u16) 0x84 /* ACPI 2.0 */ 75*4882a593Smuzhiyun #define AML_MOD_OP (u16) 0x85 /* ACPI 2.0 */ 76*4882a593Smuzhiyun #define AML_NOTIFY_OP (u16) 0x86 77*4882a593Smuzhiyun #define AML_SIZE_OF_OP (u16) 0x87 78*4882a593Smuzhiyun #define AML_INDEX_OP (u16) 0x88 79*4882a593Smuzhiyun #define AML_MATCH_OP (u16) 0x89 80*4882a593Smuzhiyun #define AML_CREATE_DWORD_FIELD_OP (u16) 0x8a 81*4882a593Smuzhiyun #define AML_CREATE_WORD_FIELD_OP (u16) 0x8b 82*4882a593Smuzhiyun #define AML_CREATE_BYTE_FIELD_OP (u16) 0x8c 83*4882a593Smuzhiyun #define AML_CREATE_BIT_FIELD_OP (u16) 0x8d 84*4882a593Smuzhiyun #define AML_OBJECT_TYPE_OP (u16) 0x8e 85*4882a593Smuzhiyun #define AML_CREATE_QWORD_FIELD_OP (u16) 0x8f /* ACPI 2.0 */ 86*4882a593Smuzhiyun #define AML_LOGICAL_AND_OP (u16) 0x90 87*4882a593Smuzhiyun #define AML_LOGICAL_OR_OP (u16) 0x91 88*4882a593Smuzhiyun #define AML_LOGICAL_NOT_OP (u16) 0x92 89*4882a593Smuzhiyun #define AML_LOGICAL_EQUAL_OP (u16) 0x93 90*4882a593Smuzhiyun #define AML_LOGICAL_GREATER_OP (u16) 0x94 91*4882a593Smuzhiyun #define AML_LOGICAL_LESS_OP (u16) 0x95 92*4882a593Smuzhiyun #define AML_TO_BUFFER_OP (u16) 0x96 /* ACPI 2.0 */ 93*4882a593Smuzhiyun #define AML_TO_DECIMAL_STRING_OP (u16) 0x97 /* ACPI 2.0 */ 94*4882a593Smuzhiyun #define AML_TO_HEX_STRING_OP (u16) 0x98 /* ACPI 2.0 */ 95*4882a593Smuzhiyun #define AML_TO_INTEGER_OP (u16) 0x99 /* ACPI 2.0 */ 96*4882a593Smuzhiyun #define AML_TO_STRING_OP (u16) 0x9c /* ACPI 2.0 */ 97*4882a593Smuzhiyun #define AML_COPY_OBJECT_OP (u16) 0x9d /* ACPI 2.0 */ 98*4882a593Smuzhiyun #define AML_MID_OP (u16) 0x9e /* ACPI 2.0 */ 99*4882a593Smuzhiyun #define AML_CONTINUE_OP (u16) 0x9f /* ACPI 2.0 */ 100*4882a593Smuzhiyun #define AML_IF_OP (u16) 0xa0 101*4882a593Smuzhiyun #define AML_ELSE_OP (u16) 0xa1 102*4882a593Smuzhiyun #define AML_WHILE_OP (u16) 0xa2 103*4882a593Smuzhiyun #define AML_NOOP_OP (u16) 0xa3 104*4882a593Smuzhiyun #define AML_RETURN_OP (u16) 0xa4 105*4882a593Smuzhiyun #define AML_BREAK_OP (u16) 0xa5 106*4882a593Smuzhiyun #define AML_COMMENT_OP (u16) 0xa9 107*4882a593Smuzhiyun #define AML_BREAKPOINT_OP (u16) 0xcc 108*4882a593Smuzhiyun #define AML_ONES_OP (u16) 0xff 109*4882a593Smuzhiyun 110*4882a593Smuzhiyun /* 111*4882a593Smuzhiyun * Combination opcodes (actually two one-byte opcodes) 112*4882a593Smuzhiyun * Used by the disassembler and iASL compiler 113*4882a593Smuzhiyun */ 114*4882a593Smuzhiyun #define AML_LOGICAL_GREATER_EQUAL_OP (u16) 0x9295 /* LNot (LLess) */ 115*4882a593Smuzhiyun #define AML_LOGICAL_LESS_EQUAL_OP (u16) 0x9294 /* LNot (LGreater) */ 116*4882a593Smuzhiyun #define AML_LOGICAL_NOT_EQUAL_OP (u16) 0x9293 /* LNot (LEqual) */ 117*4882a593Smuzhiyun 118*4882a593Smuzhiyun /* Prefixed (2-byte) opcodes (with AML_EXTENDED_PREFIX) */ 119*4882a593Smuzhiyun 120*4882a593Smuzhiyun #define AML_EXTENDED_OPCODE (u16) 0x5b00 /* Prefix for 2-byte opcodes */ 121*4882a593Smuzhiyun 122*4882a593Smuzhiyun #define AML_MUTEX_OP (u16) 0x5b01 123*4882a593Smuzhiyun #define AML_EVENT_OP (u16) 0x5b02 124*4882a593Smuzhiyun #define AML_SHIFT_RIGHT_BIT_OP (u16) 0x5b10 /* Obsolete, not in ACPI spec */ 125*4882a593Smuzhiyun #define AML_SHIFT_LEFT_BIT_OP (u16) 0x5b11 /* Obsolete, not in ACPI spec */ 126*4882a593Smuzhiyun #define AML_CONDITIONAL_REF_OF_OP (u16) 0x5b12 127*4882a593Smuzhiyun #define AML_CREATE_FIELD_OP (u16) 0x5b13 128*4882a593Smuzhiyun #define AML_LOAD_TABLE_OP (u16) 0x5b1f /* ACPI 2.0 */ 129*4882a593Smuzhiyun #define AML_LOAD_OP (u16) 0x5b20 130*4882a593Smuzhiyun #define AML_STALL_OP (u16) 0x5b21 131*4882a593Smuzhiyun #define AML_SLEEP_OP (u16) 0x5b22 132*4882a593Smuzhiyun #define AML_ACQUIRE_OP (u16) 0x5b23 133*4882a593Smuzhiyun #define AML_SIGNAL_OP (u16) 0x5b24 134*4882a593Smuzhiyun #define AML_WAIT_OP (u16) 0x5b25 135*4882a593Smuzhiyun #define AML_RESET_OP (u16) 0x5b26 136*4882a593Smuzhiyun #define AML_RELEASE_OP (u16) 0x5b27 137*4882a593Smuzhiyun #define AML_FROM_BCD_OP (u16) 0x5b28 138*4882a593Smuzhiyun #define AML_TO_BCD_OP (u16) 0x5b29 139*4882a593Smuzhiyun #define AML_UNLOAD_OP (u16) 0x5b2a 140*4882a593Smuzhiyun #define AML_REVISION_OP (u16) 0x5b30 141*4882a593Smuzhiyun #define AML_DEBUG_OP (u16) 0x5b31 142*4882a593Smuzhiyun #define AML_FATAL_OP (u16) 0x5b32 143*4882a593Smuzhiyun #define AML_TIMER_OP (u16) 0x5b33 /* ACPI 3.0 */ 144*4882a593Smuzhiyun #define AML_REGION_OP (u16) 0x5b80 145*4882a593Smuzhiyun #define AML_FIELD_OP (u16) 0x5b81 146*4882a593Smuzhiyun #define AML_DEVICE_OP (u16) 0x5b82 147*4882a593Smuzhiyun #define AML_PROCESSOR_OP (u16) 0x5b83 148*4882a593Smuzhiyun #define AML_POWER_RESOURCE_OP (u16) 0x5b84 149*4882a593Smuzhiyun #define AML_THERMAL_ZONE_OP (u16) 0x5b85 150*4882a593Smuzhiyun #define AML_INDEX_FIELD_OP (u16) 0x5b86 151*4882a593Smuzhiyun #define AML_BANK_FIELD_OP (u16) 0x5b87 152*4882a593Smuzhiyun #define AML_DATA_REGION_OP (u16) 0x5b88 /* ACPI 2.0 */ 153*4882a593Smuzhiyun 154*4882a593Smuzhiyun /* 155*4882a593Smuzhiyun * Opcodes for "Field" operators 156*4882a593Smuzhiyun */ 157*4882a593Smuzhiyun #define AML_FIELD_OFFSET_OP (u8) 0x00 158*4882a593Smuzhiyun #define AML_FIELD_ACCESS_OP (u8) 0x01 159*4882a593Smuzhiyun #define AML_FIELD_CONNECTION_OP (u8) 0x02 /* ACPI 5.0 */ 160*4882a593Smuzhiyun #define AML_FIELD_EXT_ACCESS_OP (u8) 0x03 /* ACPI 5.0 */ 161*4882a593Smuzhiyun 162*4882a593Smuzhiyun /* 163*4882a593Smuzhiyun * Internal opcodes 164*4882a593Smuzhiyun * Use only "Unknown" AML opcodes, don't attempt to use 165*4882a593Smuzhiyun * any valid ACPI ASCII values (A-Z, 0-9, '-') 166*4882a593Smuzhiyun */ 167*4882a593Smuzhiyun #define AML_INT_NAMEPATH_OP (u16) 0x002d 168*4882a593Smuzhiyun #define AML_INT_NAMEDFIELD_OP (u16) 0x0030 169*4882a593Smuzhiyun #define AML_INT_RESERVEDFIELD_OP (u16) 0x0031 170*4882a593Smuzhiyun #define AML_INT_ACCESSFIELD_OP (u16) 0x0032 171*4882a593Smuzhiyun #define AML_INT_BYTELIST_OP (u16) 0x0033 172*4882a593Smuzhiyun #define AML_INT_METHODCALL_OP (u16) 0x0035 173*4882a593Smuzhiyun #define AML_INT_RETURN_VALUE_OP (u16) 0x0036 174*4882a593Smuzhiyun #define AML_INT_EVAL_SUBTREE_OP (u16) 0x0037 175*4882a593Smuzhiyun #define AML_INT_CONNECTION_OP (u16) 0x0038 176*4882a593Smuzhiyun #define AML_INT_EXTACCESSFIELD_OP (u16) 0x0039 177*4882a593Smuzhiyun 178*4882a593Smuzhiyun #define ARG_NONE 0x0 179*4882a593Smuzhiyun 180*4882a593Smuzhiyun /* 181*4882a593Smuzhiyun * Argument types for the AML Parser 182*4882a593Smuzhiyun * Each field in the arg_types u32 is 5 bits, allowing for a maximum of 6 arguments. 183*4882a593Smuzhiyun * There can be up to 31 unique argument types 184*4882a593Smuzhiyun * Zero is reserved as end-of-list indicator 185*4882a593Smuzhiyun */ 186*4882a593Smuzhiyun #define ARGP_BYTEDATA 0x01 187*4882a593Smuzhiyun #define ARGP_BYTELIST 0x02 188*4882a593Smuzhiyun #define ARGP_CHARLIST 0x03 189*4882a593Smuzhiyun #define ARGP_DATAOBJ 0x04 190*4882a593Smuzhiyun #define ARGP_DATAOBJLIST 0x05 191*4882a593Smuzhiyun #define ARGP_DWORDDATA 0x06 192*4882a593Smuzhiyun #define ARGP_FIELDLIST 0x07 193*4882a593Smuzhiyun #define ARGP_NAME 0x08 194*4882a593Smuzhiyun #define ARGP_NAMESTRING 0x09 195*4882a593Smuzhiyun #define ARGP_OBJLIST 0x0A 196*4882a593Smuzhiyun #define ARGP_PKGLENGTH 0x0B 197*4882a593Smuzhiyun #define ARGP_SUPERNAME 0x0C 198*4882a593Smuzhiyun #define ARGP_TARGET 0x0D 199*4882a593Smuzhiyun #define ARGP_TERMARG 0x0E 200*4882a593Smuzhiyun #define ARGP_TERMLIST 0x0F 201*4882a593Smuzhiyun #define ARGP_WORDDATA 0x10 202*4882a593Smuzhiyun #define ARGP_QWORDDATA 0x11 203*4882a593Smuzhiyun #define ARGP_SIMPLENAME 0x12 /* name_string | local_term | arg_term */ 204*4882a593Smuzhiyun #define ARGP_NAME_OR_REF 0x13 /* For object_type only */ 205*4882a593Smuzhiyun #define ARGP_MAX 0x13 206*4882a593Smuzhiyun #define ARGP_COMMENT 0x14 207*4882a593Smuzhiyun 208*4882a593Smuzhiyun /* 209*4882a593Smuzhiyun * Resolved argument types for the AML Interpreter 210*4882a593Smuzhiyun * Each field in the arg_types u32 is 5 bits, allowing for a maximum of 6 arguments. 211*4882a593Smuzhiyun * There can be up to 31 unique argument types (0 is end-of-arg-list indicator) 212*4882a593Smuzhiyun * 213*4882a593Smuzhiyun * Note1: These values are completely independent from the ACPI_TYPEs 214*4882a593Smuzhiyun * i.e., ARGI_INTEGER != ACPI_TYPE_INTEGER 215*4882a593Smuzhiyun * 216*4882a593Smuzhiyun * Note2: If and when 5 bits becomes insufficient, it would probably be best 217*4882a593Smuzhiyun * to convert to a 6-byte array of argument types, allowing 8 bits per argument. 218*4882a593Smuzhiyun */ 219*4882a593Smuzhiyun 220*4882a593Smuzhiyun /* Single, simple types */ 221*4882a593Smuzhiyun 222*4882a593Smuzhiyun #define ARGI_ANYTYPE 0x01 /* Don't care */ 223*4882a593Smuzhiyun #define ARGI_PACKAGE 0x02 224*4882a593Smuzhiyun #define ARGI_EVENT 0x03 225*4882a593Smuzhiyun #define ARGI_MUTEX 0x04 226*4882a593Smuzhiyun #define ARGI_DDBHANDLE 0x05 227*4882a593Smuzhiyun 228*4882a593Smuzhiyun /* Interchangeable types (via implicit conversion) */ 229*4882a593Smuzhiyun 230*4882a593Smuzhiyun #define ARGI_INTEGER 0x06 231*4882a593Smuzhiyun #define ARGI_STRING 0x07 232*4882a593Smuzhiyun #define ARGI_BUFFER 0x08 233*4882a593Smuzhiyun #define ARGI_BUFFER_OR_STRING 0x09 /* Used by MID op only */ 234*4882a593Smuzhiyun #define ARGI_COMPUTEDATA 0x0A /* Buffer, String, or Integer */ 235*4882a593Smuzhiyun 236*4882a593Smuzhiyun /* Reference objects */ 237*4882a593Smuzhiyun 238*4882a593Smuzhiyun #define ARGI_INTEGER_REF 0x0B 239*4882a593Smuzhiyun #define ARGI_OBJECT_REF 0x0C 240*4882a593Smuzhiyun #define ARGI_DEVICE_REF 0x0D 241*4882a593Smuzhiyun #define ARGI_REFERENCE 0x0E 242*4882a593Smuzhiyun #define ARGI_TARGETREF 0x0F /* Target, subject to implicit conversion */ 243*4882a593Smuzhiyun #define ARGI_FIXED_TARGET 0x10 /* Target, no implicit conversion */ 244*4882a593Smuzhiyun #define ARGI_SIMPLE_TARGET 0x11 /* Name, Local, Arg -- no implicit conversion */ 245*4882a593Smuzhiyun #define ARGI_STORE_TARGET 0x12 /* Target for store is TARGETREF + package objects */ 246*4882a593Smuzhiyun 247*4882a593Smuzhiyun /* Multiple/complex types */ 248*4882a593Smuzhiyun 249*4882a593Smuzhiyun #define ARGI_DATAOBJECT 0x13 /* Buffer, String, package or reference to a node - Used only by size_of operator */ 250*4882a593Smuzhiyun #define ARGI_COMPLEXOBJ 0x14 /* Buffer, String, or package (Used by INDEX op only) */ 251*4882a593Smuzhiyun #define ARGI_REF_OR_STRING 0x15 /* Reference or String (Used by DEREFOF op only) */ 252*4882a593Smuzhiyun #define ARGI_REGION_OR_BUFFER 0x16 /* Used by LOAD op only */ 253*4882a593Smuzhiyun #define ARGI_DATAREFOBJ 0x17 254*4882a593Smuzhiyun 255*4882a593Smuzhiyun /* Note: types above can expand to 0x1F maximum */ 256*4882a593Smuzhiyun 257*4882a593Smuzhiyun #define ARGI_INVALID_OPCODE 0xFFFFFFFF 258*4882a593Smuzhiyun 259*4882a593Smuzhiyun /* 260*4882a593Smuzhiyun * Some of the flags and types below are of the form: 261*4882a593Smuzhiyun * 262*4882a593Smuzhiyun * AML_FLAGS_EXEC_#A_#T,#R, or 263*4882a593Smuzhiyun * AML_TYPE_EXEC_#A_#T,#R where: 264*4882a593Smuzhiyun * 265*4882a593Smuzhiyun * #A is the number of required arguments 266*4882a593Smuzhiyun * #T is the number of target operands 267*4882a593Smuzhiyun * #R indicates whether there is a return value 268*4882a593Smuzhiyun * 269*4882a593Smuzhiyun * These types are used for the top-level dispatch of the AML 270*4882a593Smuzhiyun * opcode. They group similar operators that can share common 271*4882a593Smuzhiyun * front-end code before dispatch to the final code that implements 272*4882a593Smuzhiyun * the operator. 273*4882a593Smuzhiyun */ 274*4882a593Smuzhiyun 275*4882a593Smuzhiyun /* 276*4882a593Smuzhiyun * Opcode information flags 277*4882a593Smuzhiyun */ 278*4882a593Smuzhiyun #define AML_LOGICAL 0x0001 279*4882a593Smuzhiyun #define AML_LOGICAL_NUMERIC 0x0002 280*4882a593Smuzhiyun #define AML_MATH 0x0004 281*4882a593Smuzhiyun #define AML_CREATE 0x0008 282*4882a593Smuzhiyun #define AML_FIELD 0x0010 283*4882a593Smuzhiyun #define AML_DEFER 0x0020 284*4882a593Smuzhiyun #define AML_NAMED 0x0040 285*4882a593Smuzhiyun #define AML_NSNODE 0x0080 286*4882a593Smuzhiyun #define AML_NSOPCODE 0x0100 287*4882a593Smuzhiyun #define AML_NSOBJECT 0x0200 288*4882a593Smuzhiyun #define AML_HAS_RETVAL 0x0400 289*4882a593Smuzhiyun #define AML_HAS_TARGET 0x0800 290*4882a593Smuzhiyun #define AML_HAS_ARGS 0x1000 291*4882a593Smuzhiyun #define AML_CONSTANT 0x2000 292*4882a593Smuzhiyun #define AML_NO_OPERAND_RESOLVE 0x4000 293*4882a593Smuzhiyun 294*4882a593Smuzhiyun /* Convenient flag groupings of the flags above */ 295*4882a593Smuzhiyun 296*4882a593Smuzhiyun #define AML_FLAGS_EXEC_0A_0T_1R AML_HAS_RETVAL 297*4882a593Smuzhiyun #define AML_FLAGS_EXEC_1A_0T_0R AML_HAS_ARGS /* Monadic1 */ 298*4882a593Smuzhiyun #define AML_FLAGS_EXEC_1A_0T_1R AML_HAS_ARGS | AML_HAS_RETVAL /* Monadic2 */ 299*4882a593Smuzhiyun #define AML_FLAGS_EXEC_1A_1T_0R AML_HAS_ARGS | AML_HAS_TARGET 300*4882a593Smuzhiyun #define AML_FLAGS_EXEC_1A_1T_1R AML_HAS_ARGS | AML_HAS_TARGET | AML_HAS_RETVAL /* monadic2_r */ 301*4882a593Smuzhiyun #define AML_FLAGS_EXEC_2A_0T_0R AML_HAS_ARGS /* Dyadic1 */ 302*4882a593Smuzhiyun #define AML_FLAGS_EXEC_2A_0T_1R AML_HAS_ARGS | AML_HAS_RETVAL /* Dyadic2 */ 303*4882a593Smuzhiyun #define AML_FLAGS_EXEC_2A_1T_1R AML_HAS_ARGS | AML_HAS_TARGET | AML_HAS_RETVAL /* dyadic2_r */ 304*4882a593Smuzhiyun #define AML_FLAGS_EXEC_2A_2T_1R AML_HAS_ARGS | AML_HAS_TARGET | AML_HAS_RETVAL 305*4882a593Smuzhiyun #define AML_FLAGS_EXEC_3A_0T_0R AML_HAS_ARGS 306*4882a593Smuzhiyun #define AML_FLAGS_EXEC_3A_1T_1R AML_HAS_ARGS | AML_HAS_TARGET | AML_HAS_RETVAL 307*4882a593Smuzhiyun #define AML_FLAGS_EXEC_6A_0T_1R AML_HAS_ARGS | AML_HAS_RETVAL 308*4882a593Smuzhiyun 309*4882a593Smuzhiyun /* 310*4882a593Smuzhiyun * The opcode Type is used in a dispatch table, do not change 311*4882a593Smuzhiyun * or add anything new without updating the table. 312*4882a593Smuzhiyun */ 313*4882a593Smuzhiyun #define AML_TYPE_EXEC_0A_0T_1R 0x00 /* 0 Args, 0 Target, 1 ret_val */ 314*4882a593Smuzhiyun #define AML_TYPE_EXEC_1A_0T_0R 0x01 /* 1 Args, 0 Target, 0 ret_val */ 315*4882a593Smuzhiyun #define AML_TYPE_EXEC_1A_0T_1R 0x02 /* 1 Args, 0 Target, 1 ret_val */ 316*4882a593Smuzhiyun #define AML_TYPE_EXEC_1A_1T_0R 0x03 /* 1 Args, 1 Target, 0 ret_val */ 317*4882a593Smuzhiyun #define AML_TYPE_EXEC_1A_1T_1R 0x04 /* 1 Args, 1 Target, 1 ret_val */ 318*4882a593Smuzhiyun #define AML_TYPE_EXEC_2A_0T_0R 0x05 /* 2 Args, 0 Target, 0 ret_val */ 319*4882a593Smuzhiyun #define AML_TYPE_EXEC_2A_0T_1R 0x06 /* 2 Args, 0 Target, 1 ret_val */ 320*4882a593Smuzhiyun #define AML_TYPE_EXEC_2A_1T_1R 0x07 /* 2 Args, 1 Target, 1 ret_val */ 321*4882a593Smuzhiyun #define AML_TYPE_EXEC_2A_2T_1R 0x08 /* 2 Args, 2 Target, 1 ret_val */ 322*4882a593Smuzhiyun #define AML_TYPE_EXEC_3A_0T_0R 0x09 /* 3 Args, 0 Target, 0 ret_val */ 323*4882a593Smuzhiyun #define AML_TYPE_EXEC_3A_1T_1R 0x0A /* 3 Args, 1 Target, 1 ret_val */ 324*4882a593Smuzhiyun #define AML_TYPE_EXEC_6A_0T_1R 0x0B /* 6 Args, 0 Target, 1 ret_val */ 325*4882a593Smuzhiyun /* End of types used in dispatch table */ 326*4882a593Smuzhiyun 327*4882a593Smuzhiyun #define AML_TYPE_LITERAL 0x0C 328*4882a593Smuzhiyun #define AML_TYPE_CONSTANT 0x0D 329*4882a593Smuzhiyun #define AML_TYPE_METHOD_ARGUMENT 0x0E 330*4882a593Smuzhiyun #define AML_TYPE_LOCAL_VARIABLE 0x0F 331*4882a593Smuzhiyun #define AML_TYPE_DATA_TERM 0x10 332*4882a593Smuzhiyun 333*4882a593Smuzhiyun /* Generic for an op that returns a value */ 334*4882a593Smuzhiyun 335*4882a593Smuzhiyun #define AML_TYPE_METHOD_CALL 0x11 336*4882a593Smuzhiyun 337*4882a593Smuzhiyun /* Miscellaneous types */ 338*4882a593Smuzhiyun 339*4882a593Smuzhiyun #define AML_TYPE_CREATE_FIELD 0x12 340*4882a593Smuzhiyun #define AML_TYPE_CREATE_OBJECT 0x13 341*4882a593Smuzhiyun #define AML_TYPE_CONTROL 0x14 342*4882a593Smuzhiyun #define AML_TYPE_NAMED_NO_OBJ 0x15 343*4882a593Smuzhiyun #define AML_TYPE_NAMED_FIELD 0x16 344*4882a593Smuzhiyun #define AML_TYPE_NAMED_SIMPLE 0x17 345*4882a593Smuzhiyun #define AML_TYPE_NAMED_COMPLEX 0x18 346*4882a593Smuzhiyun #define AML_TYPE_RETURN 0x19 347*4882a593Smuzhiyun #define AML_TYPE_UNDEFINED 0x1A 348*4882a593Smuzhiyun #define AML_TYPE_BOGUS 0x1B 349*4882a593Smuzhiyun 350*4882a593Smuzhiyun /* AML Package Length encodings */ 351*4882a593Smuzhiyun 352*4882a593Smuzhiyun #define ACPI_AML_PACKAGE_TYPE1 0x40 353*4882a593Smuzhiyun #define ACPI_AML_PACKAGE_TYPE2 0x4000 354*4882a593Smuzhiyun #define ACPI_AML_PACKAGE_TYPE3 0x400000 355*4882a593Smuzhiyun #define ACPI_AML_PACKAGE_TYPE4 0x40000000 356*4882a593Smuzhiyun 357*4882a593Smuzhiyun /* 358*4882a593Smuzhiyun * Opcode classes 359*4882a593Smuzhiyun */ 360*4882a593Smuzhiyun #define AML_CLASS_EXECUTE 0x00 361*4882a593Smuzhiyun #define AML_CLASS_CREATE 0x01 362*4882a593Smuzhiyun #define AML_CLASS_ARGUMENT 0x02 363*4882a593Smuzhiyun #define AML_CLASS_NAMED_OBJECT 0x03 364*4882a593Smuzhiyun #define AML_CLASS_CONTROL 0x04 365*4882a593Smuzhiyun #define AML_CLASS_ASCII 0x05 366*4882a593Smuzhiyun #define AML_CLASS_PREFIX 0x06 367*4882a593Smuzhiyun #define AML_CLASS_INTERNAL 0x07 368*4882a593Smuzhiyun #define AML_CLASS_RETURN_VALUE 0x08 369*4882a593Smuzhiyun #define AML_CLASS_METHOD_CALL 0x09 370*4882a593Smuzhiyun #define AML_CLASS_UNKNOWN 0x0A 371*4882a593Smuzhiyun 372*4882a593Smuzhiyun /* Comparison operation codes for match_op operator */ 373*4882a593Smuzhiyun 374*4882a593Smuzhiyun typedef enum { 375*4882a593Smuzhiyun MATCH_MTR = 0, 376*4882a593Smuzhiyun MATCH_MEQ = 1, 377*4882a593Smuzhiyun MATCH_MLE = 2, 378*4882a593Smuzhiyun MATCH_MLT = 3, 379*4882a593Smuzhiyun MATCH_MGE = 4, 380*4882a593Smuzhiyun MATCH_MGT = 5 381*4882a593Smuzhiyun } AML_MATCH_OPERATOR; 382*4882a593Smuzhiyun 383*4882a593Smuzhiyun #define MAX_MATCH_OPERATOR 5 384*4882a593Smuzhiyun 385*4882a593Smuzhiyun /* 386*4882a593Smuzhiyun * field_flags 387*4882a593Smuzhiyun * 388*4882a593Smuzhiyun * This byte is extracted from the AML and includes three separate 389*4882a593Smuzhiyun * pieces of information about the field: 390*4882a593Smuzhiyun * 1) The field access type 391*4882a593Smuzhiyun * 2) The field update rule 392*4882a593Smuzhiyun * 3) The lock rule for the field 393*4882a593Smuzhiyun * 394*4882a593Smuzhiyun * Bits 00 - 03 : access_type (any_acc, byte_acc, etc.) 395*4882a593Smuzhiyun * 04 : lock_rule (1 == Lock) 396*4882a593Smuzhiyun * 05 - 06 : update_rule 397*4882a593Smuzhiyun */ 398*4882a593Smuzhiyun #define AML_FIELD_ACCESS_TYPE_MASK 0x0F 399*4882a593Smuzhiyun #define AML_FIELD_LOCK_RULE_MASK 0x10 400*4882a593Smuzhiyun #define AML_FIELD_UPDATE_RULE_MASK 0x60 401*4882a593Smuzhiyun 402*4882a593Smuzhiyun /* 1) Field Access Types */ 403*4882a593Smuzhiyun 404*4882a593Smuzhiyun typedef enum { 405*4882a593Smuzhiyun AML_FIELD_ACCESS_ANY = 0x00, 406*4882a593Smuzhiyun AML_FIELD_ACCESS_BYTE = 0x01, 407*4882a593Smuzhiyun AML_FIELD_ACCESS_WORD = 0x02, 408*4882a593Smuzhiyun AML_FIELD_ACCESS_DWORD = 0x03, 409*4882a593Smuzhiyun AML_FIELD_ACCESS_QWORD = 0x04, /* ACPI 2.0 */ 410*4882a593Smuzhiyun AML_FIELD_ACCESS_BUFFER = 0x05 /* ACPI 2.0 */ 411*4882a593Smuzhiyun } AML_ACCESS_TYPE; 412*4882a593Smuzhiyun 413*4882a593Smuzhiyun /* 2) Field Lock Rules */ 414*4882a593Smuzhiyun 415*4882a593Smuzhiyun typedef enum { 416*4882a593Smuzhiyun AML_FIELD_LOCK_NEVER = 0x00, 417*4882a593Smuzhiyun AML_FIELD_LOCK_ALWAYS = 0x10 418*4882a593Smuzhiyun } AML_LOCK_RULE; 419*4882a593Smuzhiyun 420*4882a593Smuzhiyun /* 3) Field Update Rules */ 421*4882a593Smuzhiyun 422*4882a593Smuzhiyun typedef enum { 423*4882a593Smuzhiyun AML_FIELD_UPDATE_PRESERVE = 0x00, 424*4882a593Smuzhiyun AML_FIELD_UPDATE_WRITE_AS_ONES = 0x20, 425*4882a593Smuzhiyun AML_FIELD_UPDATE_WRITE_AS_ZEROS = 0x40 426*4882a593Smuzhiyun } AML_UPDATE_RULE; 427*4882a593Smuzhiyun 428*4882a593Smuzhiyun /* 429*4882a593Smuzhiyun * Field Access Attributes. 430*4882a593Smuzhiyun * This byte is extracted from the AML via the 431*4882a593Smuzhiyun * access_as keyword 432*4882a593Smuzhiyun */ 433*4882a593Smuzhiyun typedef enum { 434*4882a593Smuzhiyun AML_FIELD_ATTRIB_QUICK = 0x02, 435*4882a593Smuzhiyun AML_FIELD_ATTRIB_SEND_RECEIVE = 0x04, 436*4882a593Smuzhiyun AML_FIELD_ATTRIB_BYTE = 0x06, 437*4882a593Smuzhiyun AML_FIELD_ATTRIB_WORD = 0x08, 438*4882a593Smuzhiyun AML_FIELD_ATTRIB_BLOCK = 0x0A, 439*4882a593Smuzhiyun AML_FIELD_ATTRIB_BYTES = 0x0B, 440*4882a593Smuzhiyun AML_FIELD_ATTRIB_PROCESS_CALL = 0x0C, 441*4882a593Smuzhiyun AML_FIELD_ATTRIB_BLOCK_PROCESS_CALL = 0x0D, 442*4882a593Smuzhiyun AML_FIELD_ATTRIB_RAW_BYTES = 0x0E, 443*4882a593Smuzhiyun AML_FIELD_ATTRIB_RAW_PROCESS_BYTES = 0x0F 444*4882a593Smuzhiyun } AML_ACCESS_ATTRIBUTE; 445*4882a593Smuzhiyun 446*4882a593Smuzhiyun /* Bit fields in the AML method_flags byte */ 447*4882a593Smuzhiyun 448*4882a593Smuzhiyun #define AML_METHOD_ARG_COUNT 0x07 449*4882a593Smuzhiyun #define AML_METHOD_SERIALIZED 0x08 450*4882a593Smuzhiyun #define AML_METHOD_SYNC_LEVEL 0xF0 451*4882a593Smuzhiyun 452*4882a593Smuzhiyun #endif /* __AMLCODE_H__ */ 453