Annotation of sys/dev/acpi/amltypes.h, Revision 1.1.1.1
1.1 nbrk 1: /* $OpenBSD: amltypes.h,v 1.25 2007/02/06 18:56:31 jordan Exp $ */
2: /*
3: * Copyright (c) 2005 Jordan Hargrave <jordan@openbsd.org>
4: *
5: * Permission to use, copy, modify, and distribute this software for any
6: * purpose with or without fee is hereby granted, provided that the above
7: * copyright notice and this permission notice appear in all copies.
8: *
9: * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
10: * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
11: * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
12: * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
13: * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
14: * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
15: * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
16: */
17:
18: #ifndef __DEV_ACPI_AMLTYPES_H__
19: #define __DEV_ACPI_AMLTYPES_H__
20:
21: /* AML Opcodes */
22: #define AMLOP_ZERO 0x00
23: #define AMLOP_ONE 0x01
24: #define AMLOP_ALIAS 0x06
25: #define AMLOP_NAME 0x08
26: #define AMLOP_BYTEPREFIX 0x0A
27: #define AMLOP_WORDPREFIX 0x0B
28: #define AMLOP_DWORDPREFIX 0x0C
29: #define AMLOP_STRINGPREFIX 0x0D
30: #define AMLOP_QWORDPREFIX 0x0E
31: #define AMLOP_SCOPE 0x10
32: #define AMLOP_BUFFER 0x11
33: #define AMLOP_PACKAGE 0x12
34: #define AMLOP_VARPACKAGE 0x13
35: #define AMLOP_METHOD 0x14
36: #define AMLOP_DUALNAMEPREFIX 0x2E
37: #define AMLOP_MULTINAMEPREFIX 0x2F
38: #define AMLOP_EXTPREFIX 0x5B
39: #define AMLOP_MUTEX 0x5B01
40: #define AMLOP_EVENT 0x5B02
41: #define AMLOP_CONDREFOF 0x5B12
42: #define AMLOP_CREATEFIELD 0x5B13
43: #define AMLOP_LOADTABLE 0x5B1F
44: #define AMLOP_LOAD 0x5B20
45: #define AMLOP_STALL 0x5B21
46: #define AMLOP_SLEEP 0x5B22
47: #define AMLOP_ACQUIRE 0x5B23
48: #define AMLOP_SIGNAL 0x5B24
49: #define AMLOP_WAIT 0x5B25
50: #define AMLOP_RESET 0x5B26
51: #define AMLOP_RELEASE 0x5B27
52: #define AMLOP_FROMBCD 0x5B28
53: #define AMLOP_TOBCD 0x5B29
54: #define AMLOP_UNLOAD 0x5B2A
55: #define AMLOP_REVISION 0x5B30
56: #define AMLOP_DEBUG 0x5B31
57: #define AMLOP_FATAL 0x5B32
58: #define AMLOP_TIMER 0x5B33
59: #define AMLOP_OPREGION 0x5B80
60: #define AMLOP_FIELD 0x5B81
61: #define AMLOP_DEVICE 0x5B82
62: #define AMLOP_PROCESSOR 0x5B83
63: #define AMLOP_POWERRSRC 0x5B84
64: #define AMLOP_THERMALZONE 0x5B85
65: #define AMLOP_INDEXFIELD 0x5B86
66: #define AMLOP_BANKFIELD 0x5B87
67: #define AMLOP_DATAREGION 0x5B88
68: #define AMLOP_ROOTCHAR 0x5C
69: #define AMLOP_PARENTPREFIX 0x5E
70: #define AMLOP_NAMECHAR 0x5F
71: #define AMLOP_LOCAL0 0x60
72: #define AMLOP_LOCAL1 0x61
73: #define AMLOP_LOCAL2 0x62
74: #define AMLOP_LOCAL3 0x63
75: #define AMLOP_LOCAL4 0x64
76: #define AMLOP_LOCAL5 0x65
77: #define AMLOP_LOCAL6 0x66
78: #define AMLOP_LOCAL7 0x67
79: #define AMLOP_ARG0 0x68
80: #define AMLOP_ARG1 0x69
81: #define AMLOP_ARG2 0x6A
82: #define AMLOP_ARG3 0x6B
83: #define AMLOP_ARG4 0x6C
84: #define AMLOP_ARG5 0x6D
85: #define AMLOP_ARG6 0x6E
86: #define AMLOP_STORE 0x70
87: #define AMLOP_REFOF 0x71
88: #define AMLOP_ADD 0x72
89: #define AMLOP_CONCAT 0x73
90: #define AMLOP_SUBTRACT 0x74
91: #define AMLOP_INCREMENT 0x75
92: #define AMLOP_DECREMENT 0x76
93: #define AMLOP_MULTIPLY 0x77
94: #define AMLOP_DIVIDE 0x78
95: #define AMLOP_SHL 0x79
96: #define AMLOP_SHR 0x7A
97: #define AMLOP_AND 0x7B
98: #define AMLOP_NAND 0x7C
99: #define AMLOP_OR 0x7D
100: #define AMLOP_NOR 0x7E
101: #define AMLOP_XOR 0x7F
102: #define AMLOP_NOT 0x80
103: #define AMLOP_FINDSETLEFTBIT 0x81
104: #define AMLOP_FINDSETRIGHTBIT 0x82
105: #define AMLOP_DEREFOF 0x83
106: #define AMLOP_CONCATRES 0x84
107: #define AMLOP_MOD 0x85
108: #define AMLOP_NOTIFY 0x86
109: #define AMLOP_SIZEOF 0x87
110: #define AMLOP_INDEX 0x88
111: #define AMLOP_DEREFOF 0x83
112: #define AMLOP_MATCH 0x89
113: #define AMLOP_CREATEDWORDFIELD 0x8A
114: #define AMLOP_CREATEWORDFIELD 0x8B
115: #define AMLOP_CREATEBYTEFIELD 0x8C
116: #define AMLOP_CREATEBITFIELD 0x8D
117: #define AMLOP_OBJECTTYPE 0x8E
118: #define AMLOP_CREATEQWORDFIELD 0x8F
119: #define AMLOP_LAND 0x90
120: #define AMLOP_LOR 0x91
121: #define AMLOP_LNOT 0x92
122: #define AMLOP_LNOTEQUAL 0x9293
123: #define AMLOP_LLESSEQUAL 0x9294
124: #define AMLOP_LGREATEREQUAL 0x9295
125: #define AMLOP_LEQUAL 0x93
126: #define AMLOP_LGREATER 0x94
127: #define AMLOP_LLESS 0x95
128: #define AMLOP_TOBUFFER 0x96
129: #define AMLOP_TODECSTRING 0x97
130: #define AMLOP_TOHEXSTRING 0x98
131: #define AMLOP_TOINTEGER 0x99
132: #define AMLOP_TOSTRING 0x9C
133: #define AMLOP_COPYOBJECT 0x9D
134: #define AMLOP_MID 0x9E
135: #define AMLOP_CONTINUE 0x9F
136: #define AMLOP_IF 0xA0
137: #define AMLOP_ELSE 0xA1
138: #define AMLOP_WHILE 0xA2
139: #define AMLOP_NOP 0xA3
140: #define AMLOP_RETURN 0xA4
141: #define AMLOP_BREAK 0xA5
142: #define AMLOP_BREAKPOINT 0xCC
143: #define AMLOP_ONES 0xFF
144:
145: #define AMLOP_FIELDUNIT 0xFE00
146: #define AML_ANYINT 0xFF00
147:
148: /*
149: * Comparison types for Match()
150: *
151: * true,==,<=,<,>=,>
152: */
153: #define AML_MATCH_TR 0
154: #define AML_MATCH_EQ 1
155: #define AML_MATCH_LE 2
156: #define AML_MATCH_LT 3
157: #define AML_MATCH_GE 4
158: #define AML_MATCH_GT 5
159:
160: #define AML_STATIC 0x8000
161:
162: /* Defined types for ObjectType() */
163: enum aml_objecttype {
164: AML_OBJTYPE_UNINITIALIZED = 0,
165: AML_OBJTYPE_INTEGER,
166: AML_OBJTYPE_STRING,
167: AML_OBJTYPE_BUFFER,
168: AML_OBJTYPE_PACKAGE,
169: AML_OBJTYPE_FIELDUNIT,
170: AML_OBJTYPE_DEVICE,
171: AML_OBJTYPE_EVENT,
172: AML_OBJTYPE_METHOD,
173: AML_OBJTYPE_MUTEX,
174: AML_OBJTYPE_OPREGION,
175: AML_OBJTYPE_POWERRSRC,
176: AML_OBJTYPE_PROCESSOR,
177: AML_OBJTYPE_THERMZONE,
178: AML_OBJTYPE_BUFFERFIELD,
179: AML_OBJTYPE_DDBHANDLE,
180: AML_OBJTYPE_DEBUGOBJ,
181:
182: AML_OBJTYPE_NAMEREF = 0x100,
183: AML_OBJTYPE_OBJREF,
184: AML_OBJTYPE_STATICINT=AML_OBJTYPE_INTEGER|AML_STATIC,
185: };
186:
187: /* AML Opcode Arguments */
188: #define AML_ARG_INTEGER 'i'
189: #define AML_ARG_BYTE 'b'
190: #define AML_ARG_WORD 'w'
191: #define AML_ARG_DWORD 'd'
192: #define AML_ARG_QWORD 'q'
193: #define AML_ARG_IMPBYTE '!'
194: #define AML_ARG_OBJLEN 'p'
195: #define AML_ARG_STRING 'a'
196: #define AML_ARG_BYTELIST 'B'
197: #define AML_ARG_REVISION 'R'
198:
199: #define AML_ARG_METHOD 'M'
200: #define AML_ARG_NAMESTRING 'N'
201: #define AML_ARG_NAMEREF 'n'
202: #define AML_ARG_FIELDLIST 'F'
203: #define AML_ARG_FLAG 'f'
204:
205: #define AML_ARG_DATAOBJLIST 'O'
206: #define AML_ARG_DATAOBJ 'o'
207:
208: #define AML_ARG_SIMPLENAME 's'
209: #define AML_ARG_SUPERNAME 'S'
210:
211: #define AML_ARG_TERMOBJLIST 'T'
212: #define AML_ARG_TERMOBJ 't'
213:
214: #define AML_METHOD_ARGCOUNT(v) (((v) >> 0) & 0x7)
215: #define AML_METHOD_SERIALIZED(v) (((v) >> 3) & 0x1)
216: #define AML_METHOD_SYNCLEVEL(v) (((v) >> 4) & 0xF)
217:
218: #define AML_FIELD_ACCESSMASK 0x0F
219: #define AML_FIELD_SETATTR(f,t,a) (((f) & 0xF0) | ((t) & 0xF) | ((a)<<8))
220: #define AML_FIELD_ACCESS(v) (((v) >> 0) & 0xF)
221: # define AML_FIELD_ANYACC 0x0
222: # define AML_FIELD_BYTEACC 0x1
223: # define AML_FIELD_WORDACC 0x2
224: # define AML_FIELD_DWORDACC 0x3
225: # define AML_FIELD_QWORDACC 0x4
226: # define AML_FIELD_BUFFERACC 0x5
227: #define AML_FIELD_LOCK(v) (((v) >> 4) & 0x1)
228: # define AML_FIELD_LOCK_OFF 0x0
229: # define AML_FIELD_LOCK_ON 0x1
230: #define AML_FIELD_UPDATE(v) (((v) >> 5) & 0x3)
231: # define AML_FIELD_PRESERVE 0x0
232: # define AML_FIELD_WRITEASONES 0x1
233: # define AML_FIELD_WRITEASZEROES 0x2
234: #define AML_FIELD_ATTR(v) ((v) >> 8)
235: #define AML_FIELD_RESERVED 0x00
236: /* XXX fix this name */
237: #define AML_FIELD_ATTR__ 0x01
238:
239: struct aml_scope;
240: struct aml_node;
241:
242: /* AML Object Value */
243: struct aml_value {
244: int type;
245: int length;
246: int refcnt;
247: int stack;
248: struct aml_node *node;
249: union {
250: int64_t vinteger;
251: char *vstring;
252: u_int8_t *vbuffer;
253: struct aml_value **vpackage;
254: struct {
255: u_int8_t iospace;
256: u_int64_t iobase;
257: u_int32_t iolen;
258: } vopregion;
259: struct {
260: int flags;
261: u_int8_t *start;
262: u_int8_t *end;
263: struct aml_value *(*fneval)(struct aml_scope *, struct aml_value *);
264: } vmethod;
265: struct {
266: u_int16_t type;
267: u_int16_t flags;
268: u_int32_t bitpos;
269: u_int32_t bitlen;
270: struct aml_value *ref1;
271: struct aml_value *ref2;
272: int ref3;
273: } vfield;
274: struct {
275: u_int8_t proc_id;
276: u_int32_t proc_addr;
277: u_int8_t proc_len;
278: } vprocessor;
279: struct {
280: int index;
281: struct aml_value *ref;
282: } vobjref;
283: struct {
284: u_int8_t pwr_level;
285: u_int16_t pwr_order;
286: } vpowerrsrc;
287: struct acpi_mutex *vmutex;
288: } _;
289: };
290:
291: #define v_nameref _.vbuffer
292: #define v_objref _.vobjref
293: #define v_integer _.vinteger
294: #define v_string _.vstring
295: #define v_buffer _.vbuffer
296: #define v_package _.vpackage
297: #define v_field _.vfield
298: #define v_opregion _.vopregion
299: #define v_method _.vmethod
300: #define v_processor _.vprocessor
301: #define v_powerrsrc _.vpowerrsrc
302: #define v_mutex _.vmutex
303:
304: #define xaml_intval(v) ((v)->v_integer)
305: #define aml_strlen(v) ((v)->length)
306: #define aml_strval(v) ((v)->v_string ? (v)->v_string : "bad string")
307: #define aml_buflen(v) ((v)->length)
308: #define aml_bufval(v) ((v)->v_buffer)
309: #define aml_pkglen(v) ((v)->length)
310: #define aml_pkgval(v,i) (&(v)->v_package[(i)])
311:
312: struct aml_node {
313: struct aml_node *parent;
314: struct aml_node *child;
315: struct aml_node *sibling;
316:
317: char name[5];
318: u_int16_t opcode;
319: u_int8_t *start;
320: u_int8_t *end;
321: // const char *name;
322: // const char *mnem;
323:
324: struct aml_value *value;
325:
326: int depth;
327: };
328:
329: #define AML_FALSE (0)
330: #define AML_TRUE (1)
331:
332: #define aml_bitmask(n) (1L << ((n) & 0x7))
333: #define aml_bitpos(n) ((n)&0x7)
334: #define aml_bytepos(n) ((n)>>3)
335: #define aml_bytelen(n) (((n)+7)>>3)
336: #define aml_bytealigned(x) !((x)&0x7)
337:
338: #endif /* __DEV_ACPI_AMLTYPES_H__ */
CVSweb