TianoCore EDK2 master
Loading...
Searching...
No Matches
Aml.c
Go to the documentation of this file.
1
10#include <AmlEncoding/Aml.h>
11
85 // Comment Str OpCode SubOpCode MaxIndex NameIndex 0 1 2 3 4 5 Attribute
86 /* 0x00 */ { AML_OPCODE_DEF ("ZeroOp", AML_ZERO_OP), 0, 0, 0, { EAmlNone, EAmlNone, EAmlNone, EAmlNone, EAmlNone, EAmlNone }, 0 },
87 /* 0x01 */ { AML_OPCODE_DEF ("OneOp", AML_ONE_OP), 0, 0, 0, { EAmlNone, EAmlNone, EAmlNone, EAmlNone, EAmlNone, EAmlNone }, 0 },
88 /* 0x06 */ { AML_OPCODE_DEF ("AliasOp", AML_ALIAS_OP), 0, 2, 1, { EAmlName, EAmlName, EAmlNone, EAmlNone, EAmlNone, EAmlNone }, AML_IN_NAMESPACE },
89 /* 0x08 */ { AML_OPCODE_DEF ("NameOp", AML_NAME_OP), 0, 2, 0, { EAmlName, EAmlObject, EAmlNone, EAmlNone, EAmlNone, EAmlNone }, AML_IN_NAMESPACE },
90 /* 0x0A */ { AML_OPCODE_DEF ("BytePrefix", AML_BYTE_PREFIX), 0, 1, 0, { EAmlUInt8, EAmlNone, EAmlNone, EAmlNone, EAmlNone, EAmlNone }, 0 },
91 /* 0x0B */ { AML_OPCODE_DEF ("WordPrefix", AML_WORD_PREFIX), 0, 1, 0, { EAmlUInt16, EAmlNone, EAmlNone, EAmlNone, EAmlNone, EAmlNone }, 0 },
92 /* 0x0C */ { AML_OPCODE_DEF ("DWordPrefix", AML_DWORD_PREFIX), 0, 1, 0, { EAmlUInt32, EAmlNone, EAmlNone, EAmlNone, EAmlNone, EAmlNone }, 0 },
93 /* 0x0D */ { AML_OPCODE_DEF ("StringPrefix", AML_STRING_PREFIX), 0, 1, 0, { EAmlString, EAmlNone, EAmlNone, EAmlNone, EAmlNone, EAmlNone }, 0 },
94 /* 0x0E */ { AML_OPCODE_DEF ("QWordPrefix", AML_QWORD_PREFIX), 0, 1, 0, { EAmlUInt64, EAmlNone, EAmlNone, EAmlNone, EAmlNone, EAmlNone }, 0 },
95 /* 0x10 */ { AML_OPCODE_DEF ("ScopeOp", AML_SCOPE_OP), 0, 1, 0, { EAmlName, EAmlNone, EAmlNone, EAmlNone, EAmlNone, EAmlNone }, AML_HAS_PKG_LENGTH | AML_HAS_CHILD_OBJ | AML_IN_NAMESPACE },
96 /* 0x11 */ { AML_OPCODE_DEF ("BufferOp", AML_BUFFER_OP), 0, 1, 0, { EAmlObject, EAmlNone, EAmlNone, EAmlNone, EAmlNone, EAmlNone }, AML_HAS_PKG_LENGTH | AML_HAS_BYTE_LIST },
97 /* 0x12 */ { AML_OPCODE_DEF ("PackageOp", AML_PACKAGE_OP), 0, 1, 0, { EAmlUInt8, EAmlNone, EAmlNone, EAmlNone, EAmlNone, EAmlNone }, AML_HAS_PKG_LENGTH | AML_HAS_CHILD_OBJ },
98 /* 0x13 */ { AML_OPCODE_DEF ("VarPackageOp", AML_VAR_PACKAGE_OP), 0, 1, 0, { EAmlObject, EAmlNone, EAmlNone, EAmlNone, EAmlNone, EAmlNone }, AML_HAS_PKG_LENGTH | AML_HAS_CHILD_OBJ },
99 /* 0x14 */ { AML_OPCODE_DEF ("MethodOp", AML_METHOD_OP), 0, 2, 0, { EAmlName, EAmlUInt8, EAmlNone, EAmlNone, EAmlNone, EAmlNone }, AML_HAS_PKG_LENGTH | AML_HAS_CHILD_OBJ | AML_IN_NAMESPACE },
100 /* 0x15 */ { AML_OPCODE_DEF ("ExternalOp", AML_EXTERNAL_OP), 0, 3, 0, { EAmlName, EAmlUInt8, EAmlUInt8, EAmlNone, EAmlNone, EAmlNone }, AML_IN_NAMESPACE },
101 /* 0x2E */ { AML_OPCODE_DEF ("DualNamePrefix", AML_DUAL_NAME_PREFIX), 0, 0, 0, { EAmlNone, EAmlNone, EAmlNone, EAmlNone, EAmlNone, EAmlNone }, AML_IS_NAME_CHAR },
102 /* 0x2F */ { AML_OPCODE_DEF ("MultiNamePrefix", AML_MULTI_NAME_PREFIX), 0, 0, 0, { EAmlNone, EAmlNone, EAmlNone, EAmlNone, EAmlNone, EAmlNone }, AML_IS_NAME_CHAR },
103 /* 0x41 */ { AML_OPCODE_DEF ("NameChar_A", 'A'), 0, 0, 0, { EAmlNone, EAmlNone, EAmlNone, EAmlNone, EAmlNone, EAmlNone }, AML_IS_NAME_CHAR },
104 /* 0x42 */ { AML_OPCODE_DEF ("NameChar_B", 'B'), 0, 0, 0, { EAmlNone, EAmlNone, EAmlNone, EAmlNone, EAmlNone, EAmlNone }, AML_IS_NAME_CHAR },
105 /* 0x43 */ { AML_OPCODE_DEF ("NameChar_C", 'C'), 0, 0, 0, { EAmlNone, EAmlNone, EAmlNone, EAmlNone, EAmlNone, EAmlNone }, AML_IS_NAME_CHAR },
106 /* 0x44 */ { AML_OPCODE_DEF ("NameChar_D", 'D'), 0, 0, 0, { EAmlNone, EAmlNone, EAmlNone, EAmlNone, EAmlNone, EAmlNone }, AML_IS_NAME_CHAR },
107 /* 0x45 */ { AML_OPCODE_DEF ("NameChar_E", 'E'), 0, 0, 0, { EAmlNone, EAmlNone, EAmlNone, EAmlNone, EAmlNone, EAmlNone }, AML_IS_NAME_CHAR },
108 /* 0x46 */ { AML_OPCODE_DEF ("NameChar_F", 'F'), 0, 0, 0, { EAmlNone, EAmlNone, EAmlNone, EAmlNone, EAmlNone, EAmlNone }, AML_IS_NAME_CHAR },
109 /* 0x47 */ { AML_OPCODE_DEF ("NameChar_G", 'G'), 0, 0, 0, { EAmlNone, EAmlNone, EAmlNone, EAmlNone, EAmlNone, EAmlNone }, AML_IS_NAME_CHAR },
110 /* 0x48 */ { AML_OPCODE_DEF ("NameChar_H", 'H'), 0, 0, 0, { EAmlNone, EAmlNone, EAmlNone, EAmlNone, EAmlNone, EAmlNone }, AML_IS_NAME_CHAR },
111 /* 0x49 */ { AML_OPCODE_DEF ("NameChar_I", 'I'), 0, 0, 0, { EAmlNone, EAmlNone, EAmlNone, EAmlNone, EAmlNone, EAmlNone }, AML_IS_NAME_CHAR },
112 /* 0x4A */ { AML_OPCODE_DEF ("NameChar_J", 'J'), 0, 0, 0, { EAmlNone, EAmlNone, EAmlNone, EAmlNone, EAmlNone, EAmlNone }, AML_IS_NAME_CHAR },
113 /* 0x4B */ { AML_OPCODE_DEF ("NameChar_K", 'K'), 0, 0, 0, { EAmlNone, EAmlNone, EAmlNone, EAmlNone, EAmlNone, EAmlNone }, AML_IS_NAME_CHAR },
114 /* 0x4C */ { AML_OPCODE_DEF ("NameChar_L", 'L'), 0, 0, 0, { EAmlNone, EAmlNone, EAmlNone, EAmlNone, EAmlNone, EAmlNone }, AML_IS_NAME_CHAR },
115 /* 0x4D */ { AML_OPCODE_DEF ("NameChar_M", 'M'), 0, 0, 0, { EAmlNone, EAmlNone, EAmlNone, EAmlNone, EAmlNone, EAmlNone }, AML_IS_NAME_CHAR },
116 /* 0x4E */ { AML_OPCODE_DEF ("NameChar_N", 'N'), 0, 0, 0, { EAmlNone, EAmlNone, EAmlNone, EAmlNone, EAmlNone, EAmlNone }, AML_IS_NAME_CHAR },
117 /* 0x4F */ { AML_OPCODE_DEF ("NameChar_O", 'O'), 0, 0, 0, { EAmlNone, EAmlNone, EAmlNone, EAmlNone, EAmlNone, EAmlNone }, AML_IS_NAME_CHAR },
118 /* 0x50 */ { AML_OPCODE_DEF ("NameChar_P", 'P'), 0, 0, 0, { EAmlNone, EAmlNone, EAmlNone, EAmlNone, EAmlNone, EAmlNone }, AML_IS_NAME_CHAR },
119 /* 0x51 */ { AML_OPCODE_DEF ("NameChar_Q", 'Q'), 0, 0, 0, { EAmlNone, EAmlNone, EAmlNone, EAmlNone, EAmlNone, EAmlNone }, AML_IS_NAME_CHAR },
120 /* 0x52 */ { AML_OPCODE_DEF ("NameChar_R", 'R'), 0, 0, 0, { EAmlNone, EAmlNone, EAmlNone, EAmlNone, EAmlNone, EAmlNone }, AML_IS_NAME_CHAR },
121 /* 0x53 */ { AML_OPCODE_DEF ("NameChar_S", 'S'), 0, 0, 0, { EAmlNone, EAmlNone, EAmlNone, EAmlNone, EAmlNone, EAmlNone }, AML_IS_NAME_CHAR },
122 /* 0x54 */ { AML_OPCODE_DEF ("NameChar_T", 'T'), 0, 0, 0, { EAmlNone, EAmlNone, EAmlNone, EAmlNone, EAmlNone, EAmlNone }, AML_IS_NAME_CHAR },
123 /* 0x55 */ { AML_OPCODE_DEF ("NameChar_U", 'U'), 0, 0, 0, { EAmlNone, EAmlNone, EAmlNone, EAmlNone, EAmlNone, EAmlNone }, AML_IS_NAME_CHAR },
124 /* 0x56 */ { AML_OPCODE_DEF ("NameChar_V", 'V'), 0, 0, 0, { EAmlNone, EAmlNone, EAmlNone, EAmlNone, EAmlNone, EAmlNone }, AML_IS_NAME_CHAR },
125 /* 0x57 */ { AML_OPCODE_DEF ("NameChar_W", 'W'), 0, 0, 0, { EAmlNone, EAmlNone, EAmlNone, EAmlNone, EAmlNone, EAmlNone }, AML_IS_NAME_CHAR },
126 /* 0x58 */ { AML_OPCODE_DEF ("NameChar_X", 'X'), 0, 0, 0, { EAmlNone, EAmlNone, EAmlNone, EAmlNone, EAmlNone, EAmlNone }, AML_IS_NAME_CHAR },
127 /* 0x59 */ { AML_OPCODE_DEF ("NameChar_Y", 'Y'), 0, 0, 0, { EAmlNone, EAmlNone, EAmlNone, EAmlNone, EAmlNone, EAmlNone }, AML_IS_NAME_CHAR },
128 /* 0x5A */ { AML_OPCODE_DEF ("NameChar_Z", 'Z'), 0, 0, 0, { EAmlNone, EAmlNone, EAmlNone, EAmlNone, EAmlNone, EAmlNone }, AML_IS_NAME_CHAR },
129 /* 0x5B 0x01 */ { AML_OPCODE_DEF ("MutexOp", AML_EXT_OP), AML_EXT_MUTEX_OP, 2, 0, { EAmlName, EAmlUInt8, EAmlNone, EAmlNone, EAmlNone, EAmlNone }, AML_IN_NAMESPACE },
130 /* 0x5B 0x02 */ { AML_OPCODE_DEF ("EventOp", AML_EXT_OP), AML_EXT_EVENT_OP, 1, 0, { EAmlName, EAmlNone, EAmlNone, EAmlNone, EAmlNone, EAmlNone }, AML_IN_NAMESPACE },
131 /* 0x5B 0x12 */ { AML_OPCODE_DEF ("CondRefOfOp", AML_EXT_OP), AML_EXT_COND_REF_OF_OP, 2, 0, { EAmlObject, EAmlObject, EAmlNone, EAmlNone, EAmlNone, EAmlNone }, 0 },
132 /* 0x5B 0x13 */ { AML_OPCODE_DEF ("CreateFieldOp", AML_EXT_OP), AML_EXT_CREATE_FIELD_OP, 4, 3, { EAmlObject, EAmlObject, EAmlObject, EAmlName, EAmlNone, EAmlNone }, AML_IN_NAMESPACE },
133 /* 0x5B 0x1F */ { AML_OPCODE_DEF ("LoadTableOp", AML_EXT_OP), AML_EXT_LOAD_TABLE_OP, 6, 0, { EAmlObject, EAmlObject, EAmlObject, EAmlObject, EAmlObject, EAmlObject }, 0 },
134 /* 0x5B 0x20 */ { AML_OPCODE_DEF ("LoadOp", AML_EXT_OP), AML_EXT_LOAD_OP, 2, 0, { EAmlName, EAmlObject, EAmlNone, EAmlNone, EAmlNone, EAmlNone }, 0 },
135 /* 0x5B 0x21 */ { AML_OPCODE_DEF ("StallOp", AML_EXT_OP), AML_EXT_STALL_OP, 1, 0, { EAmlObject, EAmlNone, EAmlNone, EAmlNone, EAmlNone, EAmlNone }, 0 },
136 /* 0x5B 0x22 */ { AML_OPCODE_DEF ("SleepOp", AML_EXT_OP), AML_EXT_SLEEP_OP, 1, 0, { EAmlObject, EAmlNone, EAmlNone, EAmlNone, EAmlNone, EAmlNone }, 0 },
137 /* 0x5B 0x23 */ { AML_OPCODE_DEF ("AcquireOp", AML_EXT_OP), AML_EXT_ACQUIRE_OP, 2, 0, { EAmlObject, EAmlUInt16, EAmlNone, EAmlNone, EAmlNone, EAmlNone }, 0 },
138 /* 0x5B 0x24 */ { AML_OPCODE_DEF ("SignalOp", AML_EXT_OP), AML_EXT_SIGNAL_OP, 1, 0, { EAmlObject, EAmlNone, EAmlNone, EAmlNone, EAmlNone, EAmlNone }, 0 },
139 /* 0x5B 0x25 */ { AML_OPCODE_DEF ("WaitOp", AML_EXT_OP), AML_EXT_WAIT_OP, 2, 0, { EAmlObject, EAmlObject, EAmlNone, EAmlNone, EAmlNone, EAmlNone }, 0 },
140 /* 0x5B 0x26 */ { AML_OPCODE_DEF ("ResetOp", AML_EXT_OP), AML_EXT_RESET_OP, 1, 0, { EAmlObject, EAmlNone, EAmlNone, EAmlNone, EAmlNone, EAmlNone }, 0 },
141 /* 0x5B 0x27 */ { AML_OPCODE_DEF ("ReleaseOp", AML_EXT_OP), AML_EXT_RELEASE_OP, 1, 0, { EAmlObject, EAmlNone, EAmlNone, EAmlNone, EAmlNone, EAmlNone }, 0 },
142 /* 0x5B 0x28 */ { AML_OPCODE_DEF ("FromBCDOp", AML_EXT_OP), AML_EXT_FROM_BCD_OP, 2, 0, { EAmlObject, EAmlObject, EAmlNone, EAmlNone, EAmlNone, EAmlNone }, 0 },
143 /* 0x5B 0x29 */ { AML_OPCODE_DEF ("ToBCDOp", AML_EXT_OP), AML_EXT_TO_BCD_OP, 2, 0, { EAmlObject, EAmlObject, EAmlNone, EAmlNone, EAmlNone, EAmlNone }, 0 },
144 /* 0x5B 0x2A */ { AML_OPCODE_DEF ("UnloadOp", AML_EXT_OP), AML_EXT_UNLOAD_OP, 1, 0, { EAmlObject, EAmlNone, EAmlNone, EAmlNone, EAmlNone, EAmlNone }, 0 },
145 /* 0x5B 0x30 */ { AML_OPCODE_DEF ("RevisionOp", AML_EXT_OP), AML_EXT_REVISION_OP, 0, 0, { EAmlNone, EAmlNone, EAmlNone, EAmlNone, EAmlNone, EAmlNone }, 0 },
146 /* 0x5B 0x31 */ { AML_OPCODE_DEF ("DebugOp", AML_EXT_OP), AML_EXT_DEBUG_OP, 0, 0, { EAmlNone, EAmlNone, EAmlNone, EAmlNone, EAmlNone, EAmlNone }, 0 },
147 /* 0x5B 0x32 */ { AML_OPCODE_DEF ("FatalOp", AML_EXT_OP), AML_EXT_FATAL_OP, 3, 0, { EAmlUInt8, EAmlUInt32, EAmlObject, EAmlNone, EAmlNone, EAmlNone }, 0 },
148 /* 0x5B 0x33 */ { AML_OPCODE_DEF ("TimerOp", AML_EXT_OP), AML_EXT_TIMER_OP, 0, 0, { EAmlNone, EAmlNone, EAmlNone, EAmlNone, EAmlNone, EAmlNone }, 0 },
149 /* 0x5B 0x80 */ { AML_OPCODE_DEF ("OpRegionOp", AML_EXT_OP), AML_EXT_REGION_OP, 4, 0, { EAmlName, EAmlUInt8, EAmlObject, EAmlObject, EAmlNone, EAmlNone }, AML_IN_NAMESPACE },
150 /* 0x5B 0x81 */ { AML_OPCODE_DEF ("FieldOp", AML_EXT_OP), AML_EXT_FIELD_OP, 2, 0, { EAmlName, EAmlUInt8, EAmlNone, EAmlNone, EAmlNone, EAmlNone }, AML_HAS_PKG_LENGTH | AML_HAS_FIELD_LIST },
151 /* 0x5B 0x82 */ { AML_OPCODE_DEF ("DeviceOp", AML_EXT_OP), AML_EXT_DEVICE_OP, 1, 0, { EAmlName, EAmlNone, EAmlNone, EAmlNone, EAmlNone, EAmlNone }, AML_HAS_PKG_LENGTH | AML_HAS_CHILD_OBJ | AML_IN_NAMESPACE },
152 /* 0x5B 0x83 */ { AML_OPCODE_DEF ("ProcessorOp", AML_EXT_OP), AML_EXT_PROCESSOR_OP, 4, 0, { EAmlName, EAmlUInt8, EAmlUInt32, EAmlUInt8, EAmlNone, EAmlNone }, AML_HAS_PKG_LENGTH | AML_HAS_CHILD_OBJ | AML_IN_NAMESPACE },
153 /* 0x5B 0x84 */ { AML_OPCODE_DEF ("PowerResOp", AML_EXT_OP), AML_EXT_POWER_RES_OP, 3, 0, { EAmlName, EAmlUInt8, EAmlUInt16, EAmlNone, EAmlNone, EAmlNone }, AML_HAS_PKG_LENGTH | AML_HAS_CHILD_OBJ | AML_IN_NAMESPACE },
154 /* 0x5B 0x85 */ { AML_OPCODE_DEF ("ThermalZoneOp", AML_EXT_OP), AML_EXT_THERMAL_ZONE_OP, 1, 0, { EAmlName, EAmlNone, EAmlNone, EAmlNone, EAmlNone, EAmlNone }, AML_HAS_PKG_LENGTH | AML_HAS_CHILD_OBJ | AML_IN_NAMESPACE },
155 /* 0x5B 0x86 */ { AML_OPCODE_DEF ("IndexFieldOp", AML_EXT_OP), AML_EXT_INDEX_FIELD_OP, 3, 0, { EAmlName, EAmlName, EAmlUInt8, EAmlNone, EAmlNone, EAmlNone }, AML_HAS_PKG_LENGTH | AML_HAS_FIELD_LIST },
156 /* 0x5B 0x87 */ { AML_OPCODE_DEF ("BankFieldOp", AML_EXT_OP), AML_EXT_BANK_FIELD_OP, 4, 0, { EAmlName, EAmlName, EAmlObject, EAmlUInt8, EAmlNone, EAmlNone }, AML_HAS_PKG_LENGTH | AML_HAS_FIELD_LIST },
157 /* 0x5B 0x88 */ { AML_OPCODE_DEF ("DataRegionOp", AML_EXT_OP), AML_EXT_DATA_REGION_OP, 4, 0, { EAmlName, EAmlObject, EAmlObject, EAmlObject, EAmlNone, EAmlNone }, AML_IN_NAMESPACE },
158 /* 0x5C */ { AML_OPCODE_DEF ("RootChar", AML_ROOT_CHAR), 0, 0, 0, { EAmlNone, EAmlNone, EAmlNone, EAmlNone, EAmlNone, EAmlNone }, AML_IS_NAME_CHAR },
159 /* 0x5E */ { AML_OPCODE_DEF ("ParentPrefixChar", AML_PARENT_PREFIX_CHAR), 0, 0, 0, { EAmlNone, EAmlNone, EAmlNone, EAmlNone, EAmlNone, EAmlNone }, AML_IS_NAME_CHAR },
160 /* 0x5F */ { AML_OPCODE_DEF ("NameChar", '_'), 0, 0, 0, { EAmlNone, EAmlNone, EAmlNone, EAmlNone, EAmlNone, EAmlNone }, AML_IS_NAME_CHAR },
161 /* 0x60 */ { AML_OPCODE_DEF ("Local0Op", AML_LOCAL0), 0, 0, 0, { EAmlNone, EAmlNone, EAmlNone, EAmlNone, EAmlNone, EAmlNone }, 0 },
162 /* 0x61 */ { AML_OPCODE_DEF ("Local1Op", AML_LOCAL1), 0, 0, 0, { EAmlNone, EAmlNone, EAmlNone, EAmlNone, EAmlNone, EAmlNone }, 0 },
163 /* 0x62 */ { AML_OPCODE_DEF ("Local2Op", AML_LOCAL2), 0, 0, 0, { EAmlNone, EAmlNone, EAmlNone, EAmlNone, EAmlNone, EAmlNone }, 0 },
164 /* 0x63 */ { AML_OPCODE_DEF ("Local3Op", AML_LOCAL3), 0, 0, 0, { EAmlNone, EAmlNone, EAmlNone, EAmlNone, EAmlNone, EAmlNone }, 0 },
165 /* 0x64 */ { AML_OPCODE_DEF ("Local4Op", AML_LOCAL4), 0, 0, 0, { EAmlNone, EAmlNone, EAmlNone, EAmlNone, EAmlNone, EAmlNone }, 0 },
166 /* 0x65 */ { AML_OPCODE_DEF ("Local5Op", AML_LOCAL5), 0, 0, 0, { EAmlNone, EAmlNone, EAmlNone, EAmlNone, EAmlNone, EAmlNone }, 0 },
167 /* 0x66 */ { AML_OPCODE_DEF ("Local6Op", AML_LOCAL6), 0, 0, 0, { EAmlNone, EAmlNone, EAmlNone, EAmlNone, EAmlNone, EAmlNone }, 0 },
168 /* 0x67 */ { AML_OPCODE_DEF ("Local7Op", AML_LOCAL7), 0, 0, 0, { EAmlNone, EAmlNone, EAmlNone, EAmlNone, EAmlNone, EAmlNone }, 0 },
169 /* 0x68 */ { AML_OPCODE_DEF ("Arg0Op", AML_ARG0), 0, 0, 0, { EAmlNone, EAmlNone, EAmlNone, EAmlNone, EAmlNone, EAmlNone }, 0 },
170 /* 0x69 */ { AML_OPCODE_DEF ("Arg1Op", AML_ARG1), 0, 0, 0, { EAmlNone, EAmlNone, EAmlNone, EAmlNone, EAmlNone, EAmlNone }, 0 },
171 /* 0x6A */ { AML_OPCODE_DEF ("Arg2Op", AML_ARG2), 0, 0, 0, { EAmlNone, EAmlNone, EAmlNone, EAmlNone, EAmlNone, EAmlNone }, 0 },
172 /* 0x6B */ { AML_OPCODE_DEF ("Arg3Op", AML_ARG3), 0, 0, 0, { EAmlNone, EAmlNone, EAmlNone, EAmlNone, EAmlNone, EAmlNone }, 0 },
173 /* 0x6C */ { AML_OPCODE_DEF ("Arg4Op", AML_ARG4), 0, 0, 0, { EAmlNone, EAmlNone, EAmlNone, EAmlNone, EAmlNone, EAmlNone }, 0 },
174 /* 0x6D */ { AML_OPCODE_DEF ("Arg5Op", AML_ARG5), 0, 0, 0, { EAmlNone, EAmlNone, EAmlNone, EAmlNone, EAmlNone, EAmlNone }, 0 },
175 /* 0x6E */ { AML_OPCODE_DEF ("Arg6Op", AML_ARG6), 0, 0, 0, { EAmlNone, EAmlNone, EAmlNone, EAmlNone, EAmlNone, EAmlNone }, 0 },
176 /* 0x70 */ { AML_OPCODE_DEF ("StoreOp", AML_STORE_OP), 0, 2, 0, { EAmlObject, EAmlObject, EAmlNone, EAmlNone, EAmlNone, EAmlNone }, 0 },
177 /* 0x71 */ { AML_OPCODE_DEF ("RefOfOp", AML_REF_OF_OP), 0, 1, 0, { EAmlObject, EAmlNone, EAmlNone, EAmlNone, EAmlNone, EAmlNone }, 0 },
178 /* 0x72 */ { AML_OPCODE_DEF ("AddOp", AML_ADD_OP), 0, 3, 0, { EAmlObject, EAmlObject, EAmlObject, EAmlNone, EAmlNone, EAmlNone }, 0 },
179 /* 0x73 */ { AML_OPCODE_DEF ("ConcatOp", AML_CONCAT_OP), 0, 3, 0, { EAmlObject, EAmlObject, EAmlObject, EAmlNone, EAmlNone, EAmlNone }, 0 },
180 /* 0x74 */ { AML_OPCODE_DEF ("SubtractOp", AML_SUBTRACT_OP), 0, 3, 0, { EAmlObject, EAmlObject, EAmlObject, EAmlNone, EAmlNone, EAmlNone }, 0 },
181 /* 0x75 */ { AML_OPCODE_DEF ("IncrementOp", AML_INCREMENT_OP), 0, 1, 0, { EAmlObject, EAmlNone, EAmlNone, EAmlNone, EAmlNone, EAmlNone }, 0 },
182 /* 0x76 */ { AML_OPCODE_DEF ("DecrementOp", AML_DECREMENT_OP), 0, 1, 0, { EAmlObject, EAmlNone, EAmlNone, EAmlNone, EAmlNone, EAmlNone }, 0 },
183 /* 0x77 */ { AML_OPCODE_DEF ("MultiplyOp", AML_MULTIPLY_OP), 0, 3, 0, { EAmlObject, EAmlObject, EAmlObject, EAmlNone, EAmlNone, EAmlNone }, 0 },
184 /* 0x78 */ { AML_OPCODE_DEF ("DivideOp", AML_DIVIDE_OP), 0, 4, 0, { EAmlObject, EAmlObject, EAmlObject, EAmlObject, EAmlNone, EAmlNone }, 0 },
185 /* 0x79 */ { AML_OPCODE_DEF ("ShiftLeftOp", AML_SHIFT_LEFT_OP), 0, 3, 0, { EAmlObject, EAmlObject, EAmlObject, EAmlNone, EAmlNone, EAmlNone }, 0 },
186 /* 0x7A */ { AML_OPCODE_DEF ("ShiftRightOp", AML_SHIFT_RIGHT_OP), 0, 3, 0, { EAmlObject, EAmlObject, EAmlObject, EAmlNone, EAmlNone, EAmlNone }, 0 },
187 /* 0x7B */ { AML_OPCODE_DEF ("AndOp", AML_AND_OP), 0, 3, 0, { EAmlObject, EAmlObject, EAmlObject, EAmlNone, EAmlNone, EAmlNone }, 0 },
188 /* 0x7C */ { AML_OPCODE_DEF ("NAndOp", AML_NAND_OP), 0, 3, 0, { EAmlObject, EAmlObject, EAmlObject, EAmlNone, EAmlNone, EAmlNone }, 0 },
189 /* 0x7D */ { AML_OPCODE_DEF ("OrOp", AML_OR_OP), 0, 3, 0, { EAmlObject, EAmlObject, EAmlObject, EAmlNone, EAmlNone, EAmlNone }, 0 },
190 /* 0x7E */ { AML_OPCODE_DEF ("NorOp", AML_NOR_OP), 0, 3, 0, { EAmlObject, EAmlObject, EAmlObject, EAmlNone, EAmlNone, EAmlNone }, 0 },
191 /* 0x7F */ { AML_OPCODE_DEF ("XOrOp", AML_XOR_OP), 0, 3, 0, { EAmlObject, EAmlObject, EAmlObject, EAmlNone, EAmlNone, EAmlNone }, 0 },
192 /* 0x80 */ { AML_OPCODE_DEF ("NotOp", AML_NOT_OP), 0, 2, 0, { EAmlObject, EAmlObject, EAmlNone, EAmlNone, EAmlNone, EAmlNone }, 0 },
193 /* 0x81 */ { AML_OPCODE_DEF ("FindSetLeftBitOp", AML_FIND_SET_LEFT_BIT_OP), 0, 2, 0, { EAmlObject, EAmlObject, EAmlNone, EAmlNone, EAmlNone, EAmlNone }, 0 },
194 /* 0x82 */ { AML_OPCODE_DEF ("FindSetRightBitOp", AML_FIND_SET_RIGHT_BIT_OP), 0, 2, 0, { EAmlObject, EAmlObject, EAmlNone, EAmlNone, EAmlNone, EAmlNone }, 0 },
195 /* 0x83 */ { AML_OPCODE_DEF ("DerefOfOp", AML_DEREF_OF_OP), 0, 1, 0, { EAmlObject, EAmlNone, EAmlNone, EAmlNone, EAmlNone, EAmlNone }, 0 },
196 /* 0x84 */ { AML_OPCODE_DEF ("ConcatResOp", AML_CONCAT_RES_OP), 0, 3, 0, { EAmlObject, EAmlObject, EAmlObject, EAmlNone, EAmlNone, EAmlNone }, 0 },
197 /* 0x85 */ { AML_OPCODE_DEF ("ModOp", AML_MOD_OP), 0, 3, 0, { EAmlObject, EAmlObject, EAmlObject, EAmlNone, EAmlNone, EAmlNone }, 0 },
198 /* 0x86 */ { AML_OPCODE_DEF ("NotifyOp", AML_NOTIFY_OP), 0, 2, 0, { EAmlObject, EAmlObject, EAmlNone, EAmlNone, EAmlNone, EAmlNone }, 0 },
199 /* 0x87 */ { AML_OPCODE_DEF ("SizeOfOp", AML_SIZE_OF_OP), 0, 1, 0, { EAmlObject, EAmlNone, EAmlNone, EAmlNone, EAmlNone, EAmlNone }, 0 },
200 /* 0x88 */ { AML_OPCODE_DEF ("IndexOp", AML_INDEX_OP), 0, 3, 0, { EAmlObject, EAmlObject, EAmlObject, EAmlNone, EAmlNone, EAmlNone }, 0 },
201 /* 0x89 */ { AML_OPCODE_DEF ("MatchOp", AML_MATCH_OP), 0, 6, 0, { EAmlObject, EAmlUInt8, EAmlObject, EAmlUInt8, EAmlObject, EAmlObject }, 0 },
202 /* 0x8A */ { AML_OPCODE_DEF ("CreateDWordFieldOp", AML_CREATE_DWORD_FIELD_OP), 0, 3, 2, { EAmlObject, EAmlObject, EAmlName, EAmlNone, EAmlNone, EAmlNone }, AML_IN_NAMESPACE },
203 /* 0x8B */ { AML_OPCODE_DEF ("CreateWordFieldOp", AML_CREATE_WORD_FIELD_OP), 0, 3, 2, { EAmlObject, EAmlObject, EAmlName, EAmlNone, EAmlNone, EAmlNone }, AML_IN_NAMESPACE },
204 /* 0x8C */ { AML_OPCODE_DEF ("CreateByteFieldOp", AML_CREATE_BYTE_FIELD_OP), 0, 3, 2, { EAmlObject, EAmlObject, EAmlName, EAmlNone, EAmlNone, EAmlNone }, AML_IN_NAMESPACE },
205 /* 0x8D */ { AML_OPCODE_DEF ("CreateBitFieldOp", AML_CREATE_BIT_FIELD_OP), 0, 3, 2, { EAmlObject, EAmlObject, EAmlName, EAmlNone, EAmlNone, EAmlNone }, AML_IN_NAMESPACE },
206 /* 0x8E */ { AML_OPCODE_DEF ("ObjectTypeOp", AML_OBJECT_TYPE_OP), 0, 1, 0, { EAmlObject, EAmlNone, EAmlNone, EAmlNone, EAmlNone, EAmlNone }, 0 },
207 /* 0x8F */ { AML_OPCODE_DEF ("CreateQWordFieldOp", AML_CREATE_QWORD_FIELD_OP), 0, 3, 2, { EAmlObject, EAmlObject, EAmlName, EAmlNone, EAmlNone, EAmlNone }, AML_IN_NAMESPACE },
208 /* 0x90 */ { AML_OPCODE_DEF ("LAndOp", AML_LAND_OP), 0, 2, 0, { EAmlObject, EAmlObject, EAmlNone, EAmlNone, EAmlNone, EAmlNone }, 0 },
209 /* 0x91 */ { AML_OPCODE_DEF ("LOrOp", AML_LOR_OP), 0, 2, 0, { EAmlObject, EAmlObject, EAmlNone, EAmlNone, EAmlNone, EAmlNone }, 0 },
210 /* 0x92 */ { AML_OPCODE_DEF ("LNotOp", AML_LNOT_OP), 0, 1, 0, { EAmlObject, EAmlNone, EAmlNone, EAmlNone, EAmlNone, EAmlNone }, 0 },
211 /* 0x93 */ { AML_OPCODE_DEF ("LEqualOp", AML_LEQUAL_OP), 0, 2, 0, { EAmlObject, EAmlObject, EAmlNone, EAmlNone, EAmlNone, EAmlNone }, 0 },
212 /* 0x94 */ { AML_OPCODE_DEF ("LGreaterOp", AML_LGREATER_OP), 0, 2, 0, { EAmlObject, EAmlObject, EAmlNone, EAmlNone, EAmlNone, EAmlNone }, 0 },
213 /* 0x95 */ { AML_OPCODE_DEF ("LLessOp", AML_LLESS_OP), 0, 2, 0, { EAmlObject, EAmlObject, EAmlNone, EAmlNone, EAmlNone, EAmlNone }, 0 },
214 /* 0x96 */ { AML_OPCODE_DEF ("ToBufferOp", AML_TO_BUFFER_OP), 0, 2, 0, { EAmlObject, EAmlObject, EAmlNone, EAmlNone, EAmlNone, EAmlNone }, 0 },
215 /* 0x97 */ { AML_OPCODE_DEF ("ToDecimalStringOp", AML_TO_DEC_STRING_OP), 0, 2, 0, { EAmlObject, EAmlObject, EAmlNone, EAmlNone, EAmlNone, EAmlNone }, 0 },
216 /* 0x98 */ { AML_OPCODE_DEF ("ToHexStringOp", AML_TO_HEX_STRING_OP), 0, 2, 0, { EAmlObject, EAmlObject, EAmlNone, EAmlNone, EAmlNone, EAmlNone }, 0 },
217 /* 0x99 */ { AML_OPCODE_DEF ("ToIntegerOp", AML_TO_INTEGER_OP), 0, 2, 0, { EAmlObject, EAmlObject, EAmlNone, EAmlNone, EAmlNone, EAmlNone }, 0 },
218 /* 0x9C */ { AML_OPCODE_DEF ("ToStringOp", AML_TO_STRING_OP), 0, 3, 0, { EAmlObject, EAmlObject, EAmlObject, EAmlNone, EAmlNone, EAmlNone }, 0 },
219 /* 0x9D */ { AML_OPCODE_DEF ("CopyObjectOp", AML_COPY_OBJECT_OP), 0, 2, 0, { EAmlObject, EAmlObject, EAmlNone, EAmlNone, EAmlNone, EAmlNone }, 0 },
220 /* 0x9E */ { AML_OPCODE_DEF ("MidOp", AML_MID_OP), 0, 3, 0, { EAmlObject, EAmlObject, EAmlObject, EAmlNone, EAmlNone, EAmlNone }, 0 },
221 /* 0x9F */ { AML_OPCODE_DEF ("ContinueOp", AML_CONTINUE_OP), 0, 0, 0, { EAmlNone, EAmlNone, EAmlNone, EAmlNone, EAmlNone, EAmlNone }, 0 },
222 /* 0xA0 */ { AML_OPCODE_DEF ("IfOp", AML_IF_OP), 0, 1, 0, { EAmlObject, EAmlNone, EAmlNone, EAmlNone, EAmlNone, EAmlNone }, AML_HAS_PKG_LENGTH | AML_HAS_CHILD_OBJ },
223 /* 0xA1 */ { AML_OPCODE_DEF ("ElseOp", AML_ELSE_OP), 0, 0, 0, { EAmlNone, EAmlNone, EAmlNone, EAmlNone, EAmlNone, EAmlNone }, AML_HAS_PKG_LENGTH | AML_HAS_CHILD_OBJ },
224 /* 0xA2 */ { AML_OPCODE_DEF ("WhileOp", AML_WHILE_OP), 0, 1, 0, { EAmlObject, EAmlNone, EAmlNone, EAmlNone, EAmlNone, EAmlNone }, AML_HAS_PKG_LENGTH | AML_HAS_CHILD_OBJ },
225 /* 0xA3 */ { AML_OPCODE_DEF ("NoopOp", AML_NOOP_OP), 0, 0, 0, { EAmlNone, EAmlNone, EAmlNone, EAmlNone, EAmlNone, EAmlNone }, 0 },
226 /* 0xA4 */ { AML_OPCODE_DEF ("ReturnOp", AML_RETURN_OP), 0, 1, 0, { EAmlObject, EAmlNone, EAmlNone, EAmlNone, EAmlNone, EAmlNone }, 0 },
227 /* 0xA5 */ { AML_OPCODE_DEF ("BreakOp", AML_BREAK_OP), 0, 0, 0, { EAmlNone, EAmlNone, EAmlNone, EAmlNone, EAmlNone, EAmlNone }, 0 },
228 /* 0xCC */ { AML_OPCODE_DEF ("BreakPointOp", AML_BREAK_POINT_OP), 0, 0, 0, { EAmlNone, EAmlNone, EAmlNone, EAmlNone, EAmlNone, EAmlNone }, 0 },
229 /* 0xD0 */ { AML_OPCODE_DEF ("MethodInvocOp", AML_METHOD_INVOC_OP), 0, 2, 0, { EAmlName, EAmlUInt8, EAmlNone, EAmlNone, EAmlNone, EAmlNone }, AML_IS_PSEUDO_OPCODE | AML_HAS_CHILD_OBJ },
230 /* 0xFF */ { AML_OPCODE_DEF ("OnesOp", AML_ONES_OP), 0, 0, 0, { EAmlNone, EAmlNone, EAmlNone, EAmlNone, EAmlNone, EAmlNone }, 0 },
231};
232
265STATIC
266CONST
268 // Comment Str OpCode SubOpCode MaxIndex NameIndex 0 1 2 3 4 5 Attribute
269 /* 0x00 */ { AML_OPCODE_DEF ("FieldReservedOp", AML_FIELD_RESERVED_OP), 0, 0, 0, { EAmlNone, EAmlNone, EAmlNone, EAmlNone, EAmlNone, EAmlNone }, AML_IS_FIELD_ELEMENT | AML_HAS_PKG_LENGTH },
270 /* 0x01 */ { AML_OPCODE_DEF ("FieldAccessOp", AML_FIELD_ACCESS_OP), 0, 2, 0, { EAmlUInt8, EAmlUInt8, EAmlNone, EAmlNone, EAmlNone, EAmlNone }, AML_IS_FIELD_ELEMENT },
271 /* 0x02 */ { AML_OPCODE_DEF ("FieldConnectionOp", AML_FIELD_CONNECTION_OP), 0, 1, 0, { EAmlObject, EAmlNone, EAmlNone, EAmlNone, EAmlNone, EAmlNone }, AML_IS_FIELD_ELEMENT },
272 /* 0x03 */ { AML_OPCODE_DEF ("FieldExtAccessOp", AML_FIELD_EXT_ACCESS_OP), 0, 3, 0, { EAmlUInt8, EAmlUInt8, EAmlUInt8, EAmlNone, EAmlNone, EAmlNone }, AML_IS_FIELD_ELEMENT },
274};
275
287CONST
289EFIAPI
291 IN CONST UINT8 *Buffer
292 )
293{
294 UINT8 OpCode;
295 UINT8 SubOpCode;
296 UINT32 Index;
297
298 if (Buffer == NULL) {
299 ASSERT (0);
300 return NULL;
301 }
302
303 // Get OpCode and SubOpCode.
304 OpCode = Buffer[0];
305 if (OpCode == AML_EXT_OP) {
306 SubOpCode = Buffer[1];
307 } else {
308 SubOpCode = 0;
309 }
310
311 // Search the table.
312 for (Index = 0;
313 Index < (sizeof (mAmlByteEncoding) / sizeof (mAmlByteEncoding[0]));
314 Index++)
315 {
316 if ((mAmlByteEncoding[Index].OpCode == OpCode) &&
317 (mAmlByteEncoding[Index].SubOpCode == SubOpCode))
318 {
319 if ((mAmlByteEncoding[Index].Attribute & AML_IS_PSEUDO_OPCODE) ==
321 {
322 // A pseudo OpCode cannot be parsed as it is internal to this library.
323 // The MethodInvocation encoding can be detected by NameSpace lookup.
324 ASSERT (0);
325 return NULL;
326 }
327
328 return &mAmlByteEncoding[Index];
329 }
330 }
331
332 return NULL;
333}
334
344CONST
346EFIAPI
348 IN UINT8 OpCode,
349 IN UINT8 SubOpCode
350 )
351{
352 UINT32 Index;
353
354 // Search the table.
355 for (Index = 0;
356 Index < (sizeof (mAmlByteEncoding) / sizeof (mAmlByteEncoding[0]));
357 Index++)
358 {
359 if ((mAmlByteEncoding[Index].OpCode == OpCode) &&
360 (mAmlByteEncoding[Index].SubOpCode == SubOpCode))
361 {
362 return &mAmlByteEncoding[Index];
363 }
364 }
365
366 return NULL;
367}
368
380CONST
382EFIAPI
384 IN CONST UINT8 *Buffer
385 )
386{
387 UINT8 OpCode;
388 UINT32 Index;
389
390 if (Buffer == NULL) {
391 ASSERT (0);
392 return NULL;
393 }
394
395 // Get OpCode.
396 OpCode = *Buffer;
397
398 // Search in the table.
399 for (Index = 0;
400 Index < (sizeof (mAmlFieldEncoding) / sizeof (mAmlFieldEncoding[0]));
401 Index++)
402 {
403 if (mAmlFieldEncoding[Index].OpCode == OpCode) {
404 if ((mAmlFieldEncoding[Index].Attribute & AML_IS_PSEUDO_OPCODE) ==
406 {
407 // A pseudo OpCode cannot be parsed as it is internal to this library.
408 // The NamedField encoding can be detected because it begins with a
409 // char.
410 ASSERT (0);
411 return NULL;
412 }
413
414 return &mAmlFieldEncoding[Index];
415 }
416 }
417
418 return NULL;
419}
420
431CONST
433EFIAPI
435 IN UINT8 OpCode,
436 IN UINT8 SubOpCode
437 )
438{
439 UINT32 Index;
440
441 // Search the table.
442 for (Index = 0;
443 Index < (sizeof (mAmlFieldEncoding) / sizeof (mAmlFieldEncoding[0]));
444 Index++)
445 {
446 if ((mAmlFieldEncoding[Index].OpCode == OpCode) &&
447 (mAmlFieldEncoding[Index].SubOpCode == SubOpCode))
448 {
449 return &mAmlFieldEncoding[Index];
450 }
451 }
452
453 return NULL;
454}
455
456// Enable this function for debug.
457#if !defined (MDEPKG_NDEBUG)
458
468CONST
469CHAR8 *
471 IN UINT8 OpCode,
472 IN UINT8 SubOpCode
473 )
474{
475 EAML_PARSE_INDEX Index;
476
477 // Search the table.
478 for (Index = 0;
479 Index < (sizeof (mAmlByteEncoding) / sizeof (mAmlByteEncoding[0]));
480 Index++)
481 {
482 if ((mAmlByteEncoding[Index].OpCode == OpCode) &&
483 (mAmlByteEncoding[Index].SubOpCode == SubOpCode))
484 {
485 return mAmlByteEncoding[Index].Str;
486 }
487 }
488
489 ASSERT (0);
490 return NULL;
491}
492
502CONST
503CHAR8 *
505 IN UINT8 OpCode,
506 IN UINT8 SubOpCode
507 )
508{
509 EAML_PARSE_INDEX Index;
510
511 if (SubOpCode != 0) {
512 ASSERT (0);
513 return NULL;
514 }
515
516 // Search the table.
517 for (Index = 0;
518 Index < (sizeof (mAmlFieldEncoding) / sizeof (mAmlFieldEncoding[0]));
519 Index++)
520 {
521 if ((mAmlFieldEncoding[Index].OpCode == OpCode)) {
522 return mAmlFieldEncoding[Index].Str;
523 }
524 }
525
526 ASSERT (0);
527 return NULL;
528}
529
530#endif // MDEPKG_NDEBUG
531
541BOOLEAN
542EFIAPI
544 IN UINT8 OpCode,
545 IN UINT8 SubOpCode
546 )
547{
548 EAML_PARSE_INDEX Index;
549
550 // Search the table.
551 for (Index = 0;
552 Index < (sizeof (mAmlByteEncoding) / sizeof (mAmlByteEncoding[0]));
553 Index++)
554 {
555 if ((mAmlByteEncoding[Index].OpCode == OpCode) &&
556 (mAmlByteEncoding[Index].SubOpCode == SubOpCode))
557 {
558 return TRUE;
559 }
560 }
561
562 return FALSE;
563}
564
573STATIC
574CONST
576 EAmlNodeDataTypeNone, // EAmlNone
577 EAmlNodeDataTypeUInt, // EAmlUInt8
578 EAmlNodeDataTypeUInt, // EAmlUInt16
579 EAmlNodeDataTypeUInt, // EAmlUInt32
580 EAmlNodeDataTypeUInt, // EAmlUInt64
581 EAmlNodeDataTypeReserved5, // EAmlObject
582 EAmlNodeDataTypeNameString, // EAmlName
583 EAmlNodeDataTypeString, // EAmlString
584 EAmlNodeDataTypeFieldPkgLen // EAmlFieldPkgLen
585};
586
595EFIAPI
597 IN AML_PARSE_FORMAT AmlType
598 )
599{
600 if (AmlType >=
601 (sizeof (mAmlTypeToNodeDataType) / sizeof (mAmlTypeToNodeDataType[0])))
602 {
603 ASSERT (0);
605 }
606
607 return mAmlTypeToNodeDataType[AmlType];
608}
609
619UINT32
620EFIAPI
622 IN CONST UINT8 *Buffer,
623 OUT UINT32 *PkgLength
624 )
625{
626 UINT8 LeadByte;
627 UINT8 ByteCount;
628 UINT32 RealLength;
629 UINT32 Offset;
630
631 if ((Buffer == NULL) ||
632 (PkgLength == NULL))
633 {
634 ASSERT (0);
635 return 0;
636 }
637
638 /* From ACPI 6.3 specification, s20.2.4 "Package Length Encoding":
639
640 PkgLength := PkgLeadByte |
641 <PkgLeadByte ByteData> |
642 <PkgLeadByte ByteData ByteData> |
643 <PkgLeadByte ByteData ByteData ByteData>
644
645 PkgLeadByte := <bit 7-6: ByteData count that follows (0-3)>
646 <bit 5-4: Only used if PkgLength < 63>
647 <bit 3-0: Least significant package length nibble>
648
649 Note:
650 The high 2 bits of the first byte reveal how many
651 follow bytes are in the PkgLength. If the
652 PkgLength has only one byte, bit 0 through 5 are
653 used to encode the package length (in other
654 words, values 0-63). If the package length value
655 is more than 63, more than one byte must be
656 used for the encoding in which case bit 4 and 5 of
657 the PkgLeadByte are reserved and must be zero.
658 If the multiple bytes encoding is used, bits 0-3 of
659 the PkgLeadByte become the least significant 4
660 bits of the resulting package length value. The next
661 ByteData will become the next least
662 significant 8 bits of the resulting value and so on,
663 up to 3 ByteData bytes. Thus, the maximum
664 package length is 2**28.
665 */
666
667 LeadByte = *Buffer;
668 ByteCount = (LeadByte >> 6) & 0x03U;
669 Offset = ByteCount + 1U;
670 RealLength = 0;
671
672 // Switch on the number of bytes used to store the PkgLen.
673 switch (ByteCount) {
674 case 0:
675 {
676 RealLength = LeadByte;
677 break;
678 }
679 case 1:
680 {
681 RealLength = *(Buffer + 1);
682 RealLength = (RealLength << 4) | (LeadByte & 0xF);
683 break;
684 }
685 case 2:
686 {
687 RealLength = *(Buffer + 1);
688 RealLength |= ((UINT32)(*(Buffer + 2))) << 8;
689 RealLength = (RealLength << 4) | (LeadByte & 0xF);
690 break;
691 }
692 case 3:
693 {
694 RealLength = *(Buffer + 1);
695 RealLength |= ((UINT32)(*(Buffer + 2))) << 8;
696 RealLength |= ((UINT32)(*(Buffer + 3))) << 16;
697 RealLength = (RealLength << 4) | (LeadByte & 0xF);
698 break;
699 }
700 default:
701 {
702 ASSERT (0);
703 Offset = 0;
704 break;
705 }
706 } // switch
707
708 *PkgLength = RealLength;
709
710 return Offset;
711}
712
722UINT8
723EFIAPI
725 IN UINT32 Length,
726 OUT UINT8 *Buffer
727 )
728{
729 UINT8 LeadByte;
730 UINT8 Offset;
731 UINT8 CurrentOffset;
732 UINT8 CurrentShift;
733 UINT32 ComputedLength;
734
735 if (Buffer == NULL) {
736 ASSERT (0);
737 return 0;
738 }
739
740 LeadByte = 0;
741 Offset = 0;
742
743 if ((Length < (1 << 6))) {
744 // Length < 2^6, only need one byte to encode it.
745 LeadByte = (UINT8)Length;
746 } else {
747 // Need more than one byte to encode it.
748 // Test Length to find how many bytes are needed.
749
750 if (Length >= (1 << 28)) {
751 // Length >= 2^28, should not be possible.
752 ASSERT (0);
753 return 0;
754 } else if (Length >= (1 << 20)) {
755 // Length >= 2^20
756 Offset = 3;
757 } else if (Length >= (1 << 12)) {
758 // Length >= 2^12
759 Offset = 2;
760 } else if (Length >= (1 << 6)) {
761 // Length >= 2^6
762 Offset = 1;
763 } else {
764 // Should not be possible.
765 ASSERT (0);
766 return 0;
767 }
768
769 // Set the LeadByte.
770 LeadByte = (UINT8)(Offset << 6);
771 LeadByte = (UINT8)(LeadByte | (Length & 0xF));
772 }
773
774 // Write to the Buffer.
775 *Buffer = LeadByte;
776 CurrentOffset = 1;
777 while (CurrentOffset < (Offset + (UINT8)1)) {
778 CurrentShift = (UINT8)((CurrentOffset - 1) * 8);
779 ComputedLength = Length & (UINT32)(0x00000FF0 << CurrentShift);
780 ComputedLength = (ComputedLength) >> (4 + CurrentShift);
781 LeadByte = (UINT8)(ComputedLength & 0xFF);
782 *(Buffer + CurrentOffset) = LeadByte;
783 CurrentOffset++;
784 }
785
786 return ++Offset;
787}
788
797UINT8
798EFIAPI
800 IN UINT32 Length
801 )
802{
803 // Length >= 2^28, should not be possible.
804 if (Length >= (1 << 28)) {
805 ASSERT (0);
806 return 0;
807 } else if (Length >= (1 << 20)) {
808 // Length >= 2^20
809 return 4;
810 } else if (Length >= (1 << 12)) {
811 // Length >= 2^12
812 return 3;
813 } else if (Length >= (1 << 6)) {
814 // Length >= 2^6
815 return 2;
816 }
817
818 // Length < 2^6
819 return 1;
820}
821
861EFIAPI
863 IN UINT32 Length,
864 OUT UINT32 *PkgLen
865 )
866{
867 UINT32 PkgLenWidth;
868 UINT32 ReComputedPkgLenWidth;
869
870 if (PkgLen == NULL) {
871 ASSERT (0);
872 return EFI_INVALID_PARAMETER;
873 }
874
875 // Compute the PkgLenWidth.
876 PkgLenWidth = AmlComputePkgLengthWidth (Length);
877 if (PkgLenWidth == 0) {
878 ASSERT (0);
879 return EFI_INVALID_PARAMETER;
880 }
881
882 // Add it to the Length.
883 Length += PkgLenWidth;
884
885 // Check that adding the PkgLenWidth didn't trigger a domino effect,
886 // increasing the encoding width of the PkgLen again.
887 // The PkgLen is encoded in at most 4 bytes. It is possible to increase
888 // the PkgLen width if its encoding is less than 3 bytes.
889 ReComputedPkgLenWidth = AmlComputePkgLengthWidth (Length);
890 if (ReComputedPkgLenWidth != PkgLenWidth) {
891 if ((ReComputedPkgLenWidth != 0) &&
892 (ReComputedPkgLenWidth < 4))
893 {
894 // No need to recompute the PkgLen since a new threshold cannot
895 // be reached by incrementing the value by one.
896 Length += 1;
897 } else {
898 ASSERT (0);
899 return EFI_INVALID_PARAMETER;
900 }
901 }
902
903 *PkgLen = Length;
904
905 return EFI_SUCCESS;
906}
#define AML_IS_NAME_CHAR
Definition: Aml.h:70
#define AML_IS_FIELD_ELEMENT
Definition: Aml.h:93
enum EAmlParseFormat AML_PARSE_FORMAT
#define AML_HAS_CHILD_OBJ
Definition: Aml.h:75
#define AML_HAS_PKG_LENGTH
Definition: Aml.h:64
#define AML_IN_NAMESPACE
Definition: Aml.h:98
#define AML_HAS_BYTE_LIST
Definition: Aml.h:82
#define AML_HAS_FIELD_LIST
Definition: Aml.h:88
@ EAmlUInt64
Eight byte value evaluated as a UINT64.
Definition: Aml.h:38
@ EAmlName
Definition: Aml.h:44
@ EAmlObject
Definition: Aml.h:39
@ EAmlUInt8
One byte value evaluated as a UINT8.
Definition: Aml.h:35
@ EAmlFieldPkgLen
Definition: Aml.h:47
@ EAmlString
NULL terminated string.
Definition: Aml.h:46
@ EAmlNone
No data expected.
Definition: Aml.h:34
@ EAmlUInt16
Two byte value evaluated as a UINT16.
Definition: Aml.h:36
@ EAmlUInt32
Four byte value evaluated as a UINT32.
Definition: Aml.h:37
#define AML_IS_PSEUDO_OPCODE
Definition: Aml.h:103
EAML_NODE_DATA_TYPE EFIAPI AmlTypeToNodeDataType(IN AML_PARSE_FORMAT AmlType)
Definition: Aml.c:596
GLOBAL_REMOVE_IF_UNREFERENCED STATIC CONST AML_BYTE_ENCODING mAmlFieldEncoding[]
Definition: Aml.c:267
CONST AML_BYTE_ENCODING *EFIAPI AmlGetByteEncodingByOpCode(IN UINT8 OpCode, IN UINT8 SubOpCode)
Definition: Aml.c:347
CONST CHAR8 * AmlGetOpCodeStr(IN UINT8 OpCode, IN UINT8 SubOpCode)
Definition: Aml.c:470
UINT8 EFIAPI AmlComputePkgLengthWidth(IN UINT32 Length)
Definition: Aml.c:799
CONST CHAR8 * AmlGetFieldOpCodeStr(IN UINT8 OpCode, IN UINT8 SubOpCode)
Definition: Aml.c:504
UINT32 EFIAPI AmlGetPkgLength(IN CONST UINT8 *Buffer, OUT UINT32 *PkgLength)
Definition: Aml.c:621
GLOBAL_REMOVE_IF_UNREFERENCED STATIC CONST EAML_NODE_DATA_TYPE mAmlTypeToNodeDataType[]
Definition: Aml.c:575
EFI_STATUS EFIAPI AmlComputePkgLength(IN UINT32 Length, OUT UINT32 *PkgLen)
Definition: Aml.c:862
UINT8 EFIAPI AmlSetPkgLength(IN UINT32 Length, OUT UINT8 *Buffer)
Definition: Aml.c:724
CONST AML_BYTE_ENCODING *EFIAPI AmlGetFieldEncodingByOpCode(IN UINT8 OpCode, IN UINT8 SubOpCode)
Definition: Aml.c:434
CONST AML_BYTE_ENCODING *EFIAPI AmlGetByteEncoding(IN CONST UINT8 *Buffer)
Definition: Aml.c:290
BOOLEAN EFIAPI AmlIsOpCodeValid(IN UINT8 OpCode, IN UINT8 SubOpCode)
Definition: Aml.c:543
GLOBAL_REMOVE_IF_UNREFERENCED STATIC CONST AML_BYTE_ENCODING mAmlByteEncoding[]
Definition: Aml.c:84
CONST AML_BYTE_ENCODING *EFIAPI AmlGetFieldEncoding(IN CONST UINT8 *Buffer)
Definition: Aml.c:383
#define NULL
Definition: Base.h:319
#define CONST
Definition: Base.h:259
#define STATIC
Definition: Base.h:264
#define TRUE
Definition: Base.h:301
#define FALSE
Definition: Base.h:307
#define IN
Definition: Base.h:279
#define OUT
Definition: Base.h:284
#define GLOBAL_REMOVE_IF_UNREFERENCED
Definition: Base.h:48
RETURN_STATUS EFI_STATUS
Definition: UefiBaseType.h:29
#define EFI_SUCCESS
Definition: UefiBaseType.h:112
#define AML_METHOD_INVOC_OP
Definition: AmlDefines.h:120
enum EAmlParseIndex EAML_PARSE_INDEX
#define AML_FIELD_NAMED_OP
Definition: AmlDefines.h:139
enum EAmlNodeDataType EAML_NODE_DATA_TYPE
@ EAmlNodeDataTypeNone
EAmlNone, not accessible.
Definition: AmlDefines.h:31
@ EAmlNodeDataTypeReserved5
EAmlObject, not accessible.
Definition: AmlDefines.h:36
@ EAmlNodeDataTypeString
EAmlString, NULL terminated string.
Definition: AmlDefines.h:40
@ EAmlNodeDataTypeUInt
Definition: AmlDefines.h:41
@ EAmlNodeDataTypeFieldPkgLen
Definition: AmlDefines.h:45
@ EAmlNodeDataTypeNameString
Definition: AmlDefines.h:37
UINT8 SubOpCode
Definition: Aml.h:128
CONST CHAR8 * Str
String field allowing to print the AML object.
Definition: Aml.h:118