ACPI AML decompiler w/ CFG recovery and structured pseudocode
29

Configure Feed

Select the types of activity you want to include in your feed.

tobi / src / op.c
9.5 kB 256 lines
1#include "op.h" 2 3#include <stddef.h> 4 5static const tobi_op ops[] = { 6 {0x00, "ZeroOp", TOBI_OP_SIMPLE, 0}, 7 {0x01, "OneOp", TOBI_OP_SIMPLE, 0}, 8 {0x06, "AliasOp", TOBI_OP_NAMED, 0}, 9 {0x08, "NameOp", TOBI_OP_NAMED, 0}, 10 {0x0a, "ByteConst", TOBI_OP_SIMPLE, 0}, 11 {0x0b, "WordConst", TOBI_OP_SIMPLE, 0}, 12 {0x0c, "DWordConst", TOBI_OP_SIMPLE, 0}, 13 {0x0d, "StringConst", TOBI_OP_SIMPLE, 0}, 14 {0x0e, "QWordConst", TOBI_OP_SIMPLE, 0}, 15 {0x10, "ScopeOp", TOBI_OP_PKG, 1}, 16 {0x11, "BufferOp", TOBI_OP_PKG, 1}, 17 {0x12, "PackageOp", TOBI_OP_PKG, 1}, 18 {0x13, "VarPackageOp", TOBI_OP_PKG, 1}, 19 {0x14, "MethodOp", TOBI_OP_PKG, 1}, 20 {0x15, "ExternalOp", TOBI_OP_NAMED, 0}, 21 {0x2e, "DualNamePrefix", TOBI_OP_NAMED, 0}, 22 {0x2f, "MultiNamePrefix", TOBI_OP_NAMED, 0}, 23 {0x5b, "ExtOpPrefix", TOBI_OP_EXT, 0}, 24 {0x60, "Local0", TOBI_OP_SIMPLE, 0}, 25 {0x61, "Local1", TOBI_OP_SIMPLE, 0}, 26 {0x62, "Local2", TOBI_OP_SIMPLE, 0}, 27 {0x63, "Local3", TOBI_OP_SIMPLE, 0}, 28 {0x64, "Local4", TOBI_OP_SIMPLE, 0}, 29 {0x65, "Local5", TOBI_OP_SIMPLE, 0}, 30 {0x66, "Local6", TOBI_OP_SIMPLE, 0}, 31 {0x67, "Local7", TOBI_OP_SIMPLE, 0}, 32 {0x68, "Arg0", TOBI_OP_SIMPLE, 0}, 33 {0x69, "Arg1", TOBI_OP_SIMPLE, 0}, 34 {0x6a, "Arg2", TOBI_OP_SIMPLE, 0}, 35 {0x6b, "Arg3", TOBI_OP_SIMPLE, 0}, 36 {0x6c, "Arg4", TOBI_OP_SIMPLE, 0}, 37 {0x6d, "Arg5", TOBI_OP_SIMPLE, 0}, 38 {0x6e, "Arg6", TOBI_OP_SIMPLE, 0}, 39 {0x70, "StoreOp", TOBI_OP_EXPR, 0}, 40 {0x71, "RefOfOp", TOBI_OP_EXPR, 0}, 41 {0x72, "AddOp", TOBI_OP_EXPR, 0}, 42 {0x73, "ConcatOp", TOBI_OP_EXPR, 0}, 43 {0x74, "SubtractOp", TOBI_OP_EXPR, 0}, 44 {0x75, "IncrementOp", TOBI_OP_EXPR, 0}, 45 {0x76, "DecrementOp", TOBI_OP_EXPR, 0}, 46 {0x77, "MultiplyOp", TOBI_OP_EXPR, 0}, 47 {0x78, "DivideOp", TOBI_OP_EXPR, 0}, 48 {0x79, "ShiftLeftOp", TOBI_OP_EXPR, 0}, 49 {0x7a, "ShiftRightOp", TOBI_OP_EXPR, 0}, 50 {0x7b, "AndOp", TOBI_OP_EXPR, 0}, 51 {0x7c, "NAndOp", TOBI_OP_EXPR, 0}, 52 {0x7d, "OrOp", TOBI_OP_EXPR, 0}, 53 {0x7e, "NOrOp", TOBI_OP_EXPR, 0}, 54 {0x7f, "XorOp", TOBI_OP_EXPR, 0}, 55 {0x80, "NotOp", TOBI_OP_EXPR, 0}, 56 {0x81, "FindSetLeftBitOp", TOBI_OP_EXPR, 0}, 57 {0x82, "FindSetRightBitOp", TOBI_OP_EXPR, 0}, 58 {0x83, "DerefOfOp", TOBI_OP_EXPR, 0}, 59 {0x84, "ConcatResOp", TOBI_OP_EXPR, 0}, 60 {0x85, "ModOp", TOBI_OP_EXPR, 0}, 61 {0x86, "NotifyOp", TOBI_OP_EXPR, 0}, 62 {0x87, "SizeOfOp", TOBI_OP_EXPR, 0}, 63 {0x88, "IndexOp", TOBI_OP_EXPR, 0}, 64 {0x89, "MatchOp", TOBI_OP_EXPR, 0}, 65 {0x8a, "CreateDWordFieldOp", TOBI_OP_EXPR, 0}, 66 {0x8b, "CreateWordFieldOp", TOBI_OP_EXPR, 0}, 67 {0x8c, "CreateByteFieldOp", TOBI_OP_EXPR, 0}, 68 {0x8d, "CreateBitFieldOp", TOBI_OP_EXPR, 0}, 69 {0x8e, "ObjectTypeOp", TOBI_OP_EXPR, 0}, 70 {0x8f, "CreateQWordFieldOp", TOBI_OP_EXPR, 0}, 71 {0x90, "LAndOp", TOBI_OP_EXPR, 0}, 72 {0x91, "LOrOp", TOBI_OP_EXPR, 0}, 73 {0x92, "LNotOp", TOBI_OP_EXPR, 0}, 74 {0x93, "LEqualOp", TOBI_OP_EXPR, 0}, 75 {0x94, "LGreaterOp", TOBI_OP_EXPR, 0}, 76 {0x95, "LLessOp", TOBI_OP_EXPR, 0}, 77 {0x96, "ToBufferOp", TOBI_OP_EXPR, 0}, 78 {0x97, "ToDecimalStringOp", TOBI_OP_EXPR, 0}, 79 {0x98, "ToHexStringOp", TOBI_OP_EXPR, 0}, 80 {0x99, "ToIntegerOp", TOBI_OP_EXPR, 0}, 81 {0x9c, "ToStringOp", TOBI_OP_EXPR, 0}, 82 {0x9d, "CopyObjectOp", TOBI_OP_EXPR, 0}, 83 {0x9e, "MidOp", TOBI_OP_EXPR, 0}, 84 {0x9f, "ContinueOp", TOBI_OP_CONTROL, 0}, 85 {0xa0, "IfOp", TOBI_OP_CONTROL, 1}, 86 {0xa1, "ElseOp", TOBI_OP_CONTROL, 1}, 87 {0xa2, "WhileOp", TOBI_OP_CONTROL, 1}, 88 {0xa3, "NoopOp", TOBI_OP_CONTROL, 0}, 89 {0xa4, "ReturnOp", TOBI_OP_CONTROL, 0}, 90 {0xa5, "BreakOp", TOBI_OP_CONTROL, 0}, 91 {0xcc, "BreakPointOp", TOBI_OP_CONTROL, 0}, 92 {0xff, "OnesOp", TOBI_OP_SIMPLE, 0}, 93}; 94 95static const tobi_op ext_ops[] = { 96 {0x5b01, "MutexOp", TOBI_OP_EXT, 0}, 97 {0x5b02, "EventOp", TOBI_OP_EXT, 0}, 98 {0x5b12, "CondRefOfOp", TOBI_OP_EXT, 0}, 99 {0x5b13, "CreateFieldOp", TOBI_OP_EXT, 0}, 100 {0x5b1f, "LoadTableOp", TOBI_OP_EXT, 0}, 101 {0x5b20, "LoadOp", TOBI_OP_EXT, 0}, 102 {0x5b21, "StallOp", TOBI_OP_EXT, 0}, 103 {0x5b22, "SleepOp", TOBI_OP_EXT, 0}, 104 {0x5b23, "AcquireOp", TOBI_OP_EXT, 0}, 105 {0x5b24, "SignalOp", TOBI_OP_EXT, 0}, 106 {0x5b25, "WaitOp", TOBI_OP_EXT, 0}, 107 {0x5b26, "ResetOp", TOBI_OP_EXT, 0}, 108 {0x5b27, "ReleaseOp", TOBI_OP_EXT, 0}, 109 {0x5b28, "FromBCDOp", TOBI_OP_EXT, 0}, 110 {0x5b29, "ToBCDOp", TOBI_OP_EXT, 0}, 111 {0x5b2a, "UnloadOp", TOBI_OP_EXT, 0}, 112 {0x5b30, "RevisionOp", TOBI_OP_EXT, 0}, 113 {0x5b31, "DebugOp", TOBI_OP_EXT, 0}, 114 {0x5b32, "FatalOp", TOBI_OP_EXT, 0}, 115 {0x5b33, "TimerOp", TOBI_OP_EXT, 0}, 116 {0x5b80, "OpRegionOp", TOBI_OP_EXT, 0}, 117 {0x5b81, "FieldOp", TOBI_OP_EXT, 1}, 118 {0x5b82, "DeviceOp", TOBI_OP_EXT, 1}, 119 {0x5b83, "ProcessorOp", TOBI_OP_EXT, 1}, 120 {0x5b84, "PowerResOp", TOBI_OP_EXT, 1}, 121 {0x5b85, "ThermalZoneOp", TOBI_OP_EXT, 1}, 122 {0x5b86, "IndexFieldOp", TOBI_OP_EXT, 1}, 123 {0x5b87, "BankFieldOp", TOBI_OP_EXT, 1}, 124 {0x5b88, "DataRegionOp", TOBI_OP_EXT, 0}, 125}; 126 127static const tobi_op_desc descs[] = { 128 {0x06, "NameString NameString"}, 129 {0x08, "NameString DataRef"}, 130 {0x0a, "ByteData"}, 131 {0x0b, "WordData"}, 132 {0x0c, "DWordData"}, 133 {0x0d, "StringData"}, 134 {0x0e, "QWordData"}, 135 {0x10, "PkgLength NameString TermList"}, 136 {0x11, "PkgLength BufferSize ByteList"}, 137 {0x12, "PkgLength NumElements PackageElements"}, 138 {0x13, "PkgLength VarNumElements PackageElements"}, 139 {0x14, "PkgLength NameString MethodFlags TermList"}, 140 {0x15, "NameString ObjectType ArgumentCount"}, 141 {0x70, "TermArg SuperName"}, 142 {0x71, "SuperName"}, 143 {0x72, "TermArg TermArg Target"}, 144 {0x73, "Data TermArg Target"}, 145 {0x74, "TermArg TermArg Target"}, 146 {0x75, "SuperName"}, 147 {0x76, "SuperName"}, 148 {0x77, "TermArg TermArg Target"}, 149 {0x78, "TermArg TermArg Target RemainderTarget"}, 150 {0x79, "TermArg TermArg Target"}, 151 {0x7a, "TermArg TermArg Target"}, 152 {0x7b, "TermArg TermArg Target"}, 153 {0x7c, "TermArg TermArg Target"}, 154 {0x7d, "TermArg TermArg Target"}, 155 {0x7e, "TermArg TermArg Target"}, 156 {0x7f, "TermArg TermArg Target"}, 157 {0x80, "TermArg Target"}, 158 {0x81, "TermArg Target"}, 159 {0x82, "TermArg Target"}, 160 {0x83, "TermArg"}, 161 {0x84, "Data Buffer Target"}, 162 {0x85, "TermArg TermArg Target"}, 163 {0x86, "SuperName TermArg"}, 164 {0x87, "SuperName"}, 165 {0x88, "SuperName TermArg Target"}, 166 {0x89, "SearchPkg MatchOp1 MatchObj1 MatchOp2 MatchObj2 StartIndex"}, 167 {0x8a, "SourceBuff BitIndex NameString"}, 168 {0x8b, "SourceBuff BitIndex NameString"}, 169 {0x8c, "SourceBuff ByteIndex NameString"}, 170 {0x8d, "SourceBuff BitIndex NameString"}, 171 {0x8e, "SuperName"}, 172 {0x8f, "SourceBuff BitIndex NameString"}, 173 {0x90, "TermArg TermArg"}, 174 {0x91, "TermArg TermArg"}, 175 {0x92, "TermArg"}, 176 {0x93, "TermArg TermArg"}, 177 {0x94, "TermArg TermArg"}, 178 {0x95, "TermArg TermArg"}, 179 {0x96, "TermArg Target"}, 180 {0x97, "TermArg Target"}, 181 {0x98, "TermArg Target"}, 182 {0x99, "TermArg Target"}, 183 {0x9c, "TermArg LengthArg Target"}, 184 {0x9d, "SimpleName Target"}, 185 {0x9e, "TermArg TermArg TermArg Target"}, 186 {0x9f, ""}, 187 {0xa0, "PkgLength Predicate TermList"}, 188 {0xa1, "PkgLength TermList"}, 189 {0xa2, "PkgLength Predicate TermList"}, 190 {0xa4, "TermArg"}, 191 {0xa5, ""}, 192 {0x5b01, "NameString SyncFlags"}, 193 {0x5b02, "NameString"}, 194 {0x5b12, "SuperName Target"}, 195 {0x5b13, "SourceBuff BitIndex NumBits NameString"}, 196 {0x5b1f, "Signature OemId OemTableId RootPath ParameterPath Target"}, 197 {0x5b20, "NameString Target"}, 198 {0x5b21, "TermArg"}, 199 {0x5b22, "TermArg"}, 200 {0x5b23, "MutexObject Timeout"}, 201 {0x5b24, "EventObject"}, 202 {0x5b25, "EventObject Timeout"}, 203 {0x5b26, "EventObject"}, 204 {0x5b27, "MutexObject"}, 205 {0x5b28, "TermArg Target"}, 206 {0x5b29, "TermArg Target"}, 207 {0x5b2a, "Handle"}, 208 {0x5b30, ""}, 209 {0x5b31, ""}, 210 {0x5b32, "FatalType FatalCode FatalArg"}, 211 {0x5b33, ""}, 212 {0x5b80, "NameString RegionSpace RegionOffset RegionLen"}, 213 {0x5b81, "PkgLength NameString FieldFlags FieldList"}, 214 {0x5b82, "PkgLength NameString TermList"}, 215 {0x5b83, "PkgLength NameString ProcId PblkAddr PblkLen TermList"}, 216 {0x5b84, "PkgLength NameString SystemLevel ResourceOrder TermList"}, 217 {0x5b85, "PkgLength NameString TermList"}, 218 {0x5b86, "PkgLength IndexName DataName FieldFlags FieldList"}, 219 {0x5b87, "PkgLength RegionName BankName BankValue FieldFlags FieldList"}, 220 {0x5b88, "NameString SignatureString OemIdString OemTableIdString"}, 221}; 222 223const tobi_op *tobi_op_find(uint8_t op) { 224 for (size_t i = 0; i < sizeof(ops) / sizeof(ops[0]); i++) { 225 if (ops[i].code == op) { 226 return &ops[i]; 227 } 228 } 229 return NULL; 230} 231 232const tobi_op *tobi_op_find_ext(uint8_t ext) { 233 uint16_t code = (uint16_t)(0x5b00u | ext); 234 return tobi_op_find_code(code); 235} 236 237const tobi_op *tobi_op_find_code(uint16_t code) { 238 if ((code & 0xff00u) == 0x5b00u) { 239 for (size_t i = 0; i < sizeof(ext_ops) / sizeof(ext_ops[0]); i++) { 240 if (ext_ops[i].code == code) { 241 return &ext_ops[i]; 242 } 243 } 244 return NULL; 245 } 246 return tobi_op_find((uint8_t)code); 247} 248 249const char *tobi_op_operands(uint16_t code) { 250 for (size_t i = 0; i < sizeof(descs) / sizeof(descs[0]); i++) { 251 if (descs[i].code == code) { 252 return descs[i].operands; 253 } 254 } 255 return NULL; 256}