Chameleon

Chameleon Svn Source Tree

Root/branches/ErmaC/Enoch/i386/libsaio/aml_generator.h

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#defineAML_ZERO_OP 0x00
19#defineAML_ONE_OP 0x01
20#defineAML_ALIAS_OP 0x06
21#defineAML_NAME_OP 0x08
22#defineAML_BYTE_PREFIX 0x0A
23#defineAML_WORD_PREFIX 0x0B
24#defineAML_DWORD_PREFIX 0x0C
25#defineAML_STRING_PREFIX 0x0D
26#defineAML_QWORD_PREFIX 0x0E
27#defineAML_SCOPE_OP 0x10
28#define AML_BUFFER_OP 0x11
29#defineAML_PACKAGE_OP 0x12
30#define AML_VAR_PACKAGE_OP 0x13
31#defineAML_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#defineAML_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
169struct aml_chunk {
170uint8_tType;
171uint16_tLength;
172char*Buffer;
173uint16_tSize;
174struct aml_chunk*Next;
175struct aml_chunk*First;
176struct aml_chunk*Last;
177};
178
179typedef struct aml_chunk AML_CHUNK;
180
181static inline bool aml_isvalidchar(char c)
182{
183return isupper(c) || isdigit(c) || c == '_';
184};
185
186bool aml_add_to_parent(AML_CHUNK* parent, AML_CHUNK* node);
187AML_CHUNK* aml_create_node(AML_CHUNK* parent);
188void aml_destroy_node(AML_CHUNK* node);
189AML_CHUNK* aml_add_buffer(AML_CHUNK* parent, const char* buffer, uint32_t size);
190AML_CHUNK* aml_add_byte(AML_CHUNK* parent, uint8_t value);
191AML_CHUNK* aml_add_word(AML_CHUNK* parent, uint16_t value);
192AML_CHUNK* aml_add_dword(AML_CHUNK* parent, uint32_t value);
193AML_CHUNK* aml_add_qword(AML_CHUNK* parent, uint64_t value);
194AML_CHUNK* aml_add_scope(AML_CHUNK* parent, char* name);
195AML_CHUNK* aml_add_name(AML_CHUNK* parent, char* name);
196AML_CHUNK* aml_add_method(AML_CHUNK* parent, char* name, uint8_t args);
197AML_CHUNK* aml_add_return_name(AML_CHUNK* parent, char* name);
198AML_CHUNK* aml_add_return_byte(AML_CHUNK* parent, uint8_t value);
199AML_CHUNK* aml_add_package(AML_CHUNK* parent);
200AML_CHUNK* aml_add_alias(AML_CHUNK* parent, char* name1, char* name2);
201uint32_t aml_calculate_size(AML_CHUNK* node);
202uint32_t aml_write_node(AML_CHUNK* node, char* buffer, uint32_t offset);
203uint32_t aml_write_size(uint32_t size, char* buffer, uint32_t offset);
204
205AML_CHUNK* aml_add_string(AML_CHUNK* parent, char* string);
206AML_CHUNK* aml_add_byte_buffer(AML_CHUNK* parent, char* data, uint32_t size);
207AML_CHUNK* aml_add_string_buffer(AML_CHUNK* parent, char* string);
208AML_CHUNK* aml_add_device(AML_CHUNK* parent, char* name);
209AML_CHUNK* aml_add_local0(AML_CHUNK* parent);
210AML_CHUNK* aml_add_store(AML_CHUNK* parent);
211AML_CHUNK* aml_add_return(AML_CHUNK* parent);
212
213int32_t FindBin (uint8_t *dsdt, uint32_t len, uint8_t *bin, unsigned int N);
214uint32_t get_size(uint8_t* Buffer, uint32_t adr);
215
216#endif /* !__LIBSAIO_AML_GENERATOR_H */
217

Archive Download this file

Revision: 2706