1 | /*␊ |
2 | * aml_generator.h␊ |
3 | * Chameleon␊ |
4 | *␊ |
5 | * Created by Mozodojo on 20/07/10.␊ |
6 | * Copyright 2010 mozo. All rights reserved.␊ |
7 | *␊ |
8 | */␊ |
9 | ␊ |
10 | #ifndef __LIBSAIO_AML_GENERATOR_H␊ |
11 | #define __LIBSAIO_AML_GENERATOR_H␊ |
12 | ␊ |
13 | #include "libsaio.h"␊ |
14 | ␊ |
15 | //␊ |
16 | // Primary OpCode␊ |
17 | //␊ |
18 | #define␉AML_ZERO_OP 0x00␊ |
19 | #define␉AML_ONE_OP 0x01␊ |
20 | #define␉AML_ALIAS_OP 0x06␊ |
21 | #define␉AML_NAME_OP 0x08␊ |
22 | #define␉AML_BYTE_PREFIX 0x0A␊ |
23 | #define␉AML_WORD_PREFIX 0x0B␊ |
24 | #define␉AML_DWORD_PREFIX 0x0C␊ |
25 | #define␉AML_STRING_PREFIX 0x0D␊ |
26 | #define␉AML_QWORD_PREFIX 0x0E␊ |
27 | #define␉AML_SCOPE_OP 0x10␊ |
28 | #define AML_BUFFER_OP 0x11␊ |
29 | #define␉AML_PACKAGE_OP 0x12␊ |
30 | #define AML_VAR_PACKAGE_OP 0x13␊ |
31 | #define␉AML_METHOD_OP 0x14␊ |
32 | #define AML_STRING_BUFFER 0x15␊ |
33 | #define AML_DUAL_NAME_PREFIX 0x2e␊ |
34 | #define AML_MULTI_NAME_PREFIX 0x2f␊ |
35 | #define AML_NAME_CHAR_A 0x41␊ |
36 | #define AML_NAME_CHAR_B 0x42␊ |
37 | #define AML_NAME_CHAR_C 0x43␊ |
38 | #define AML_NAME_CHAR_D 0x44␊ |
39 | #define AML_NAME_CHAR_E 0x45␊ |
40 | #define AML_NAME_CHAR_F 0x46␊ |
41 | #define AML_NAME_CHAR_G 0x47␊ |
42 | #define AML_NAME_CHAR_H 0x48␊ |
43 | #define AML_NAME_CHAR_I 0x49␊ |
44 | #define AML_NAME_CHAR_J 0x4a␊ |
45 | #define AML_NAME_CHAR_K 0x4b␊ |
46 | #define AML_NAME_CHAR_L 0x4c␊ |
47 | #define AML_NAME_CHAR_M 0x4d␊ |
48 | #define AML_NAME_CHAR_N 0x4e␊ |
49 | #define AML_NAME_CHAR_O 0x4f␊ |
50 | #define AML_NAME_CHAR_P 0x50␊ |
51 | #define AML_NAME_CHAR_Q 0x51␊ |
52 | #define AML_NAME_CHAR_R 0x52␊ |
53 | #define AML_NAME_CHAR_S 0x53␊ |
54 | #define AML_NAME_CHAR_T 0x54␊ |
55 | #define AML_NAME_CHAR_U 0x55␊ |
56 | #define AML_NAME_CHAR_V 0x56␊ |
57 | #define AML_NAME_CHAR_W 0x57␊ |
58 | #define AML_NAME_CHAR_X 0x58␊ |
59 | #define AML_NAME_CHAR_Y 0x59␊ |
60 | #define AML_NAME_CHAR_Z 0x5a␊ |
61 | #define AML_ROOT_CHAR 0x5c␊ |
62 | #define AML_PARENT_PREFIX_CHAR 0x5e␊ |
63 | #define AML_NAME_CHAR__ 0x5f␊ |
64 | #define AML_LOCAL0 0x60␊ |
65 | #define AML_LOCAL1 0x61␊ |
66 | #define AML_LOCAL2 0x62␊ |
67 | #define AML_LOCAL3 0x63␊ |
68 | #define AML_LOCAL4 0x64␊ |
69 | #define AML_LOCAL5 0x65␊ |
70 | #define AML_LOCAL6 0x66␊ |
71 | #define AML_LOCAL7 0x67␊ |
72 | #define AML_ARG0 0x68␊ |
73 | #define AML_ARG1 0x69␊ |
74 | #define AML_ARG2 0x6A␊ |
75 | #define AML_ARG3 0x6B␊ |
76 | #define AML_ARG4 0x6C␊ |
77 | #define AML_ARG5 0x6D␊ |
78 | #define AML_ARG6 0x6E␊ |
79 | #define AML_STORE_OP 0x70␊ |
80 | #define AML_REF_OF_OP 0x71␊ |
81 | #define AML_ADD_OP 0x72␊ |
82 | #define AML_CONCAT_OP 0x73␊ |
83 | #define AML_SUBTRACT_OP 0x74␊ |
84 | #define AML_INCREMENT_OP 0x75␊ |
85 | #define AML_DECREMENT_OP 0x76␊ |
86 | #define AML_MULTIPLY_OP 0x77␊ |
87 | #define AML_DIVIDE_OP 0x78␊ |
88 | #define AML_SHIFT_LEFT_OP 0x79␊ |
89 | #define AML_SHIFT_RIGHT_OP 0x7a␊ |
90 | #define AML_AND_OP 0x7b␊ |
91 | #define AML_NAND_OP 0x7c␊ |
92 | #define AML_OR_OP 0x7d␊ |
93 | #define AML_NOR_OP 0x7e␊ |
94 | #define AML_XOR_OP 0x7f␊ |
95 | #define AML_NOT_OP 0x80␊ |
96 | #define AML_FIND_SET_LEFT_BIT_OP 0x81␊ |
97 | #define AML_FIND_SET_RIGHT_BIT_OP 0x82␊ |
98 | #define AML_DEREF_OF_OP 0x83␊ |
99 | #define AML_CONCAT_RES_OP 0x84␊ |
100 | #define AML_MOD_OP 0x85␊ |
101 | #define AML_NOTIFY_OP 0x86␊ |
102 | #define AML_SIZE_OF_OP 0x87␊ |
103 | #define AML_INDEX_OP 0x88␊ |
104 | #define AML_MATCH_OP 0x89␊ |
105 | #define AML_CREATE_DWORD_FIELD_OP 0x8a␊ |
106 | #define AML_CREATE_WORD_FIELD_OP 0x8b␊ |
107 | #define AML_CREATE_BYTE_FIELD_OP 0x8c␊ |
108 | #define AML_CREATE_BIT_FIELD_OP 0x8d␊ |
109 | #define AML_OBJECT_TYPE_OP 0x8e␊ |
110 | #define AML_CREATE_QWORD_FIELD_OP 0x8f␊ |
111 | #define AML_LAND_OP 0x90␊ |
112 | #define AML_LOR_OP 0x91␊ |
113 | #define AML_LNOT_OP 0x92␊ |
114 | #define AML_LEQUAL_OP 0x93␊ |
115 | #define AML_LGREATER_OP 0x94␊ |
116 | #define AML_LLESS_OP 0x95␊ |
117 | #define AML_TO_BUFFER_OP 0x96␊ |
118 | #define AML_TO_DEC_STRING_OP 0x97␊ |
119 | #define AML_TO_HEX_STRING_OP 0x98␊ |
120 | #define AML_TO_INTEGER_OP 0x99␊ |
121 | #define AML_TO_STRING_OP 0x9c␊ |
122 | #define AML_COPY_OBJECT_OP 0x9d␊ |
123 | #define AML_MID_OP 0x9e␊ |
124 | #define AML_CONTINUE_OP 0x9f␊ |
125 | #define AML_IF_OP 0xa0␊ |
126 | #define AML_ELSE_OP 0xa1␊ |
127 | #define AML_WHILE_OP 0xa2␊ |
128 | #define AML_NOOP_OP 0xa3␊ |
129 | #define AML_RETURN_OP 0xA4␊ |
130 | #define AML_BREAK_OP 0xA5␊ |
131 | #define AML_BREAK_POINT_OP 0xcc␊ |
132 | #define␉AML_ONES_OP 0xff␊ |
133 | ␊ |
134 | //␊ |
135 | // Extended OpCode␊ |
136 | //␊ |
137 | #define AML_EXT_OP 0x5B␊ |
138 | ␊ |
139 | #define AML_EXT_MUTEX_OP 0x01␊ |
140 | #define AML_EXT_EVENT_OP 0x02␊ |
141 | #define AML_EXT_COND_REF_OF_OP 0x12␊ |
142 | #define AML_EXT_CREATE_FIELD_OP 0x13␊ |
143 | #define AML_EXT_LOAD_TABLE_OP 0x1f␊ |
144 | #define AML_EXT_LOAD_OP 0x20␊ |
145 | #define AML_EXT_STALL_OP 0x21␊ |
146 | #define AML_EXT_SLEEP_OP 0x22␊ |
147 | #define AML_EXT_ACQUIRE_OP 0x23␊ |
148 | #define AML_EXT_SIGNAL_OP 0x24␊ |
149 | #define AML_EXT_WAIT_OP 0x25␊ |
150 | #define AML_EXT_RESET_OP 0x26␊ |
151 | #define AML_EXT_RELEASE_OP 0x27␊ |
152 | #define AML_EXT_FROM_BCD_OP 0x28␊ |
153 | #define AML_EXT_TO_BCD_OP 0x29␊ |
154 | #define AML_EXT_UNLOAD_OP 0x2a␊ |
155 | #define AML_EXT_REVISION_OP 0x30␊ |
156 | #define AML_EXT_DEBUG_OP 0x31␊ |
157 | #define AML_EXT_FATAL_OP 0x32␊ |
158 | #define AML_EXT_TIMER_OP 0x33␊ |
159 | #define AML_EXT_REGION_OP 0x80␊ |
160 | #define AML_EXT_FIELD_OP 0x81␊ |
161 | #define AML_EXT_DEVICE_OP 0x82␊ |
162 | #define AML_EXT_PROCESSOR_OP 0x83␊ |
163 | #define AML_EXT_POWER_RES_OP 0x84␊ |
164 | #define AML_EXT_THERMAL_ZONE_OP 0x85␊ |
165 | #define AML_EXT_INDEX_FIELD_OP 0x86␊ |
166 | #define AML_EXT_BANK_FIELD_OP 0x87␊ |
167 | #define AML_EXT_DATA_REGION_OP 0x88␊ |
168 | ␊ |
169 | struct aml_chunk {␊ |
170 | ␉uint8_t␉␉␉Type;␊ |
171 | ␉uint16_t␉␉Length;␊ |
172 | ␉char*␉␉␉Buffer;␊ |
173 | ␉uint16_t␉␉Size;␊ |
174 | ␉struct aml_chunk*␉Next;␊ |
175 | ␉struct aml_chunk*␉First;␊ |
176 | ␉struct aml_chunk*␉Last;␊ |
177 | };␊ |
178 | ␊ |
179 | typedef struct aml_chunk AML_CHUNK;␊ |
180 | ␊ |
181 | static inline bool aml_isvalidchar(char c)␊ |
182 | {␊ |
183 | ␉return isupper(c) || isdigit(c) || c == '_';␊ |
184 | };␊ |
185 | ␊ |
186 | bool aml_add_to_parent(AML_CHUNK* parent, AML_CHUNK* node);␊ |
187 | AML_CHUNK* aml_create_node(AML_CHUNK* parent);␊ |
188 | void aml_destroy_node(AML_CHUNK* node);␊ |
189 | AML_CHUNK* aml_add_buffer(AML_CHUNK* parent, const char* buffer, uint32_t size);␊ |
190 | AML_CHUNK* aml_add_byte(AML_CHUNK* parent, uint8_t value);␊ |
191 | AML_CHUNK* aml_add_word(AML_CHUNK* parent, uint16_t value);␊ |
192 | AML_CHUNK* aml_add_dword(AML_CHUNK* parent, uint32_t value);␊ |
193 | AML_CHUNK* aml_add_qword(AML_CHUNK* parent, uint64_t value);␊ |
194 | AML_CHUNK* aml_add_scope(AML_CHUNK* parent, char* name);␊ |
195 | AML_CHUNK* aml_add_name(AML_CHUNK* parent, char* name);␊ |
196 | AML_CHUNK* aml_add_method(AML_CHUNK* parent, char* name, uint8_t args);␊ |
197 | AML_CHUNK* aml_add_return_name(AML_CHUNK* parent, char* name);␊ |
198 | AML_CHUNK* aml_add_return_byte(AML_CHUNK* parent, uint8_t value);␊ |
199 | AML_CHUNK* aml_add_package(AML_CHUNK* parent);␊ |
200 | AML_CHUNK* aml_add_alias(AML_CHUNK* parent, char* name1, char* name2);␊ |
201 | uint32_t aml_calculate_size(AML_CHUNK* node);␊ |
202 | uint32_t aml_write_node(AML_CHUNK* node, char* buffer, uint32_t offset);␊ |
203 | uint32_t aml_write_size(uint32_t size, char* buffer, uint32_t offset);␊ |
204 | ␊ |
205 | AML_CHUNK* aml_add_string(AML_CHUNK* parent, char* string);␊ |
206 | AML_CHUNK* aml_add_byte_buffer(AML_CHUNK* parent, char* data, uint32_t size);␊ |
207 | AML_CHUNK* aml_add_string_buffer(AML_CHUNK* parent, char* string);␊ |
208 | AML_CHUNK* aml_add_device(AML_CHUNK* parent, char* name);␊ |
209 | AML_CHUNK* aml_add_local0(AML_CHUNK* parent);␊ |
210 | AML_CHUNK* aml_add_store(AML_CHUNK* parent);␊ |
211 | AML_CHUNK* aml_add_return(AML_CHUNK* parent);␊ |
212 | ␊ |
213 | int32_t FindBin (uint8_t *dsdt, uint32_t len, uint8_t *bin, unsigned int N);␊ |
214 | uint32_t get_size(uint8_t* Buffer, uint32_t adr);␊ |
215 | ␊ |
216 | #endif /* !__LIBSAIO_AML_GENERATOR_H */␊ |
217 | |