PatchworkOS
Loading...
Searching...
No Matches
token.h
Go to the documentation of this file.
1#pragma once
2
5
6#include <errno.h>
7#include <stdbool.h>
8#include <stdint.h>
9#include <sys/math.h>
10
34typedef enum
35{
36 // Normal (0x00-0xFF)
39 AML_ONE_OP = 0x01,
123 AML_OR_OP = 0x7D,
156 AML_IF_OP = 0xA0,
164
165 // Extended tokens prefixed with 0x5B (0x100-0x1FF range)
196
197 // Extended tokens prefixed with 0x92 (0x200-0x2FF range)
202
203 // Special values
207
218
236
241typedef struct aml_token_props
242{
243 const char* name;
247
258
263
271
279{
280 const aml_token_props_t* props = NULL;
281 if (num <= AML_MAX_TOKEN)
282 {
283 props = &amlTokenProps[num];
284 }
285
286 if (props->name == NULL)
287 {
289 }
290
291 return props;
292}
293
301static inline void aml_token_peek(aml_term_list_ctx_t* ctx, aml_token_t* out)
302{
303 uint64_t byteAmount = MIN(ctx->end - ctx->current, 2);
304 if (byteAmount == 0)
305 {
306 out->num = AML_UNKNOWN_TOKEN;
307 out->length = 0;
309 return;
310 }
311
312 aml_token_num_t num = ctx->current[0];
313 uint8_t length = 1;
314
315 if (byteAmount == 2)
316 {
317 if (ctx->current[0] == AML_EXT_OP_PREFIX)
318 {
319 num = AML_EXT_OP_PREFIX_BASE + ctx->current[1];
320 length = 2;
321 }
322 else if (ctx->current[0] == AML_LNOT_OP && ctx->current[1] >= (AML_LNOT_EQUAL_OP - AML_LNOT_OP_BASE) &&
324 {
325 num = AML_LNOT_OP_BASE + ctx->current[1];
326 length = 2;
327 }
328 }
329
330 out->num = num;
331 out->length = length;
332 out->props = &amlTokenProps[num];
333}
340static inline void aml_token_read(aml_term_list_ctx_t* ctx, aml_token_t* out)
341{
342 aml_token_peek(ctx, out);
343 ctx->current += out->length;
344}
345
354{
355 aml_token_t token;
356 aml_token_read(ctx, &token);
357
358 if (token.num != expected)
359 {
360 errno = EILSEQ;
361 return ERR;
362 }
363
364 return 0;
365}
366
const char * aml_token_type_to_string(aml_token_type_t type)
Convert a token type to a string.
Definition token.c:139
aml_token_num_t
Token numbers.
Definition token.h:35
const aml_token_props_t amlTokenProps[AML_MAX_TOKEN]
Token properties array indexed by aml_token_num_t.
Definition token.c:5
static uint64_t aml_token_expect(aml_term_list_ctx_t *ctx, aml_token_num_t expected)
Reads a token from the AML stream and verifies it matches the expected token.
Definition token.h:353
aml_encoding_group_t
Definition token.h:209
aml_token_type_t
Token Type.
Definition token.h:224
static const aml_token_props_t * aml_token_lookup(aml_token_num_t num)
Lookup token properties.
Definition token.h:278
static void aml_token_read(aml_term_list_ctx_t *ctx, aml_token_t *out)
Attempt to read a token from the AML stream.
Definition token.h:340
static void aml_token_peek(aml_term_list_ctx_t *ctx, aml_token_t *out)
Attempt to read a token from the AML stream, without advancing the instruction pointer.
Definition token.h:301
@ AML_RESET_OP
Definition token.h:178
@ AML_ROOT_CHAR
Definition token.h:92
@ AML_NAME_CHAR_I
Definition token.h:73
@ AML_XOR_OP
Definition token.h:125
@ AML_DEBUG_OP
Definition token.h:184
@ AML_BREAK_OP
Definition token.h:161
@ AML_DIGIT_CHAR_2
Definition token.h:57
@ AML_IF_OP
Definition token.h:156
@ AML_WAIT_OP
Definition token.h:177
@ AML_EXTERNAL_OP
Definition token.h:52
@ AML_DIVIDE_OP
Definition token.h:118
@ AML_OR_OP
Definition token.h:123
@ AML_DEVICE_OP
Definition token.h:189
@ AML_SLEEP_OP
Definition token.h:174
@ AML_ARG1_OP
Definition token.h:104
@ AML_DIGIT_CHAR_0
Definition token.h:55
@ AML_MAX_TOKEN
Definition token.h:205
@ AML_NAME_CHAR_T
Definition token.h:84
@ AML_DIGIT_CHAR_8
Definition token.h:63
@ AML_SIGNAL_OP
Definition token.h:176
@ AML_FATAL_OP
Definition token.h:185
@ AML_NAME_OP
Definition token.h:41
@ AML_NULL_NAME
Definition token.h:37
@ AML_NOOP_OP
Definition token.h:159
@ AML_STORE_OP
Definition token.h:110
@ AML_LOCAL0_OP
Definition token.h:95
@ AML_INCREMENT_OP
Definition token.h:115
@ AML_NAME_CHAR_D
Definition token.h:68
@ AML_ONES_OP
Definition token.h:163
@ AML_CREATE_BIT_FIELD_OP
Definition token.h:139
@ AML_SHIFT_LEFT_OP
Definition token.h:119
@ AML_WORD_PREFIX
Definition token.h:43
@ AML_NAME_CHAR_S
Definition token.h:83
@ AML_FROM_BCD_OP
Definition token.h:180
@ AML_STRING_PREFIX
Definition token.h:45
@ AML_LOAD_OP
Definition token.h:172
@ AML_NAND_OP
Definition token.h:122
@ AML_CONCAT_OP
Definition token.h:113
@ AML_CONCAT_RES_OP
Definition token.h:130
@ AML_UNKNOWN_TOKEN
Definition token.h:204
@ AML_NAME_CHAR_F
Definition token.h:70
@ AML_EVENT_OP
Definition token.h:168
@ AML_FIND_SET_RIGHT_BIT_OP
Definition token.h:128
@ AML_ZERO_OP
Definition token.h:38
@ AML_EXT_OP_PREFIX_BASE
Definition token.h:166
@ AML_SIZE_OF_OP
Definition token.h:133
@ AML_NAME_CHAR_W
Definition token.h:87
@ AML_DATA_REGION_OP
Definition token.h:195
@ AML_NAME_CHAR_Y
Definition token.h:89
@ AML_RESERVED_OP
Definition token.h:182
@ AML_NAME_CHAR
Definition token.h:94
@ AML_BYTE_PREFIX
Definition token.h:42
@ AML_NAME_CHAR_R
Definition token.h:82
@ AML_OPREGION_OP
Definition token.h:187
@ AML_AND_OP
Definition token.h:121
@ AML_MATCH_OP
Definition token.h:135
@ AML_CREATE_QWORD_FIELD_OP
Definition token.h:141
@ AML_TO_BUFFER_OP
Definition token.h:148
@ AML_TO_INTEGER_OP
Definition token.h:151
@ AML_DIGIT_CHAR_3
Definition token.h:58
@ AML_ONE_OP
Definition token.h:39
@ AML_NAME_CHAR_J
Definition token.h:74
@ AML_FIELD_OP
Definition token.h:188
@ AML_ACQUIRE_OP
Definition token.h:175
@ AML_NAME_CHAR_G
Definition token.h:71
@ AML_LNOT_OP_BASE
Definition token.h:198
@ AML_EXT_OP_PREFIX
Definition token.h:91
@ AML_LOR_OP
Definition token.h:143
@ AML_DIGIT_CHAR_7
Definition token.h:62
@ AML_DECREMENT_OP
Definition token.h:116
@ AML_DIGIT_CHAR_6
Definition token.h:61
@ AML_NAME_CHAR_O
Definition token.h:79
@ AML_INDEX_OP
Definition token.h:134
@ AML_ADD_OP
Definition token.h:112
@ AML_LOCAL7_OP
Definition token.h:102
@ AML_NAME_CHAR_N
Definition token.h:78
@ AML_NOT_OP
Definition token.h:126
@ AML_LNOT_OP
Definition token.h:144
@ AML_TO_DECIMAL_STRING_OP
Definition token.h:149
@ AML_NAME_CHAR_Q
Definition token.h:81
@ AML_DEPRECATED_PROCESSOR_OP
Definition token.h:190
@ AML_TO_BCD_OP
Definition token.h:181
@ AML_BREAK_POINT_OP
Definition token.h:162
@ AML_METHOD_OP
Definition token.h:51
@ AML_NAME_CHAR_E
Definition token.h:69
@ AML_PACKAGE_OP
Definition token.h:49
@ AML_LEQUAL_OP
Definition token.h:145
@ AML_RETURN_OP
Definition token.h:160
@ AML_ARG0_OP
Definition token.h:103
@ AML_BUFFER_OP
Definition token.h:48
@ AML_QWORD_PREFIX
Definition token.h:46
@ AML_DIGIT_CHAR_5
Definition token.h:60
@ AML_MOD_OP
Definition token.h:131
@ AML_THERMAL_ZONE_OP
Definition token.h:192
@ AML_OBJECT_TYPE_OP
Definition token.h:140
@ AML_LOAD_TABLE_OP
Definition token.h:171
@ AML_ARG6_OP
Definition token.h:109
@ AML_NAME_CHAR_U
Definition token.h:85
@ AML_LAND_OP
Definition token.h:142
@ AML_DIGIT_CHAR_9
Definition token.h:64
@ AML_NAME_CHAR_H
Definition token.h:72
@ AML_NAME_CHAR_Z
Definition token.h:90
@ AML_TO_HEX_STRING_OP
Definition token.h:150
@ AML_DWORD_PREFIX
Definition token.h:44
@ AML_DEREF_OF_OP
Definition token.h:129
@ AML_LOCAL5_OP
Definition token.h:100
@ AML_ARG3_OP
Definition token.h:106
@ AML_NAME_CHAR_C
Definition token.h:67
@ AML_LGREATER_OP
Definition token.h:146
@ AML_NAME_CHAR_P
Definition token.h:80
@ AML_MUTEX_OP
Definition token.h:167
@ AML_POWER_RES_OP
Definition token.h:191
@ AML_INDEX_FIELD_OP
Definition token.h:193
@ AML_NAME_CHAR_V
Definition token.h:86
@ AML_NAME_CHAR_A
Definition token.h:65
@ AML_TO_STRING_OP
Definition token.h:152
@ AML_NAME_CHAR_B
Definition token.h:66
@ AML_ARG2_OP
Definition token.h:105
@ AML_REVISION_OP
Definition token.h:183
@ AML_ELSE_OP
Definition token.h:157
@ AML_SUBTRACT_OP
Definition token.h:114
@ AML_NAME_CHAR_K
Definition token.h:75
@ AML_LNOT_EQUAL_OP
Definition token.h:199
@ AML_VAR_PACKAGE_OP
Definition token.h:50
@ AML_NAME_CHAR_L
Definition token.h:76
@ AML_LOCAL3_OP
Definition token.h:98
@ AML_ALIAS_OP
Definition token.h:40
@ AML_LLESS_EQUAL_OP
Definition token.h:200
@ AML_PARENT_PREFIX_CHAR
Definition token.h:93
@ AML_NOTIFY_OP
Definition token.h:132
@ AML_LOCAL1_OP
Definition token.h:96
@ AML_STALL_OP
Definition token.h:173
@ AML_NAME_CHAR_X
Definition token.h:88
@ AML_SHIFT_RIGHT_OP
Definition token.h:120
@ AML_TIMER_OP
Definition token.h:186
@ AML_LGREATER_EQUAL_OP
Definition token.h:201
@ AML_WHILE_OP
Definition token.h:158
@ AML_CREATE_BYTE_FIELD_OP
Definition token.h:138
@ AML_BANK_FIELD_OP
Definition token.h:194
@ AML_MULTI_NAME_PREFIX
Definition token.h:54
@ AML_NAME_CHAR_M
Definition token.h:77
@ AML_ARG4_OP
Definition token.h:107
@ AML_LLESS_OP
Definition token.h:147
@ AML_CREATE_WORD_FIELD_OP
Definition token.h:137
@ AML_MID_OP
Definition token.h:154
@ AML_DIGIT_CHAR_4
Definition token.h:59
@ AML_ARG5_OP
Definition token.h:108
@ AML_COPY_OBJECT_OP
Definition token.h:153
@ AML_MULTIPLY_OP
Definition token.h:117
@ AML_RELEASE_OP
Definition token.h:179
@ AML_LOCAL6_OP
Definition token.h:101
@ AML_SCOPE_OP
Definition token.h:47
@ AML_LOCAL4_OP
Definition token.h:99
@ AML_DIGIT_CHAR_1
Definition token.h:56
@ AML_DUAL_NAME_PREFIX
Definition token.h:53
@ AML_REF_OF_OP
Definition token.h:111
@ AML_NOR_OP
Definition token.h:124
@ AML_CREATE_FIELD_OP
Definition token.h:170
@ AML_FIND_SET_LEFT_BIT_OP
Definition token.h:127
@ AML_CONTINUE_OP
Definition token.h:155
@ AML_COND_REF_OF_OP
Definition token.h:169
@ AML_LOCAL2_OP
Definition token.h:97
@ AML_CREATE_DWORD_FIELD_OP
Definition token.h:136
@ AML_ENCODING_GROUP_TERM
Definition token.h:212
@ AML_ENCODING_GROUP_DATA
Definition token.h:211
@ AML_ENCODING_GROUP_DEBUG
Definition token.h:216
@ AML_ENCODING_GROUP_LOCAL
Definition token.h:214
@ AML_ENCODING_GROUP_NAME
Definition token.h:213
@ AML_ENCODING_GROUP_NONE
Definition token.h:210
@ AML_ENCODING_GROUP_ARG
Definition token.h:215
@ AML_TOKEN_TYPE_NAMED
Is a NamedObj (section 20.2.5.2).
Definition token.h:228
@ AML_TOKEN_TYPE_NAMESPACE_MODIFIER
Is a Namespace Modifier Object (section 20.2.5.1).
Definition token.h:227
@ AML_TOKEN_TYPE_NONE
Definition token.h:225
@ AML_TOKEN_TYPE_DEBUG
Is a Debug Object (section 20.2.6.3).
Definition token.h:234
@ AML_TOKEN_TYPE_COMPUTATIONAL
Is part of a ComputationalData Object (section 20.2.3).
Definition token.h:233
@ AML_TOKEN_TYPE_EXPRESSION
Is an Expression Opcode (section 20.2.5.4).
Definition token.h:230
@ AML_TOKEN_TYPE_NAME
Is a Name Object (section 20.2.2).
Definition token.h:226
@ AML_TOKEN_TYPE_STATEMENT
Is a Statement Opcode (section 20.2.5.3).
Definition token.h:229
@ AML_TOKEN_TYPE_ARG
Is an Arg Object (section 20.2.6.1).
Definition token.h:231
@ AML_TOKEN_TYPE_LOCAL
Is a Local Object (section 20.2.6.2).
Definition token.h:232
#define errno
Error number variable.
Definition errno.h:27
#define EILSEQ
Illegal byte sequence.
Definition errno.h:447
#define MIN(x, y)
Definition math.h:16
#define NULL
Pointer error value.
Definition NULL.h:23
#define ERR
Integer error value.
Definition ERR.h:17
__UINT64_TYPE__ uint64_t
Definition stdint.h:17
__UINT8_TYPE__ uint8_t
Definition stdint.h:11
Context for reading a TermList.
Definition term.h:37
const uint8_t * end
Definition term.h:41
const uint8_t * current
Definition term.h:42
Token Properties.
Definition token.h:242
const char * name
Definition token.h:243
aml_token_type_t type
Definition token.h:245
aml_encoding_group_t group
Definition token.h:244
Token.
Definition token.h:253
const aml_token_props_t * props
Definition token.h:256
uint8_t length
Definition token.h:255
aml_token_num_t num
Definition token.h:254