xref: /openbsd-src/sys/dev/acpi/amltypes.h (revision 50b7f1f524ca1e3b2e94cb06dbb10dad88e3a0f8)
1*50b7f1f5Skettenis /* $OpenBSD: amltypes.h,v 1.50 2024/06/02 11:08:41 kettenis Exp $ */
2f76b0469Sjordan /*
3f76b0469Sjordan  * Copyright (c) 2005 Jordan Hargrave <jordan@openbsd.org>
4f76b0469Sjordan  *
5f76b0469Sjordan  * Permission to use, copy, modify, and distribute this software for any
6f76b0469Sjordan  * purpose with or without fee is hereby granted, provided that the above
7f76b0469Sjordan  * copyright notice and this permission notice appear in all copies.
8f76b0469Sjordan  *
9f76b0469Sjordan  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
10f76b0469Sjordan  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
11f76b0469Sjordan  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
12f76b0469Sjordan  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
13f76b0469Sjordan  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
14f76b0469Sjordan  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
15f76b0469Sjordan  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
16f76b0469Sjordan  */
17f76b0469Sjordan 
183f15b72bSmarco #ifndef __DEV_ACPI_AMLTYPES_H__
193f15b72bSmarco #define __DEV_ACPI_AMLTYPES_H__
20f76b0469Sjordan 
21f76b0469Sjordan /* AML Opcodes */
22f76b0469Sjordan #define AMLOP_ZERO		0x00
23f76b0469Sjordan #define AMLOP_ONE		0x01
24f76b0469Sjordan #define AMLOP_ALIAS		0x06
25f76b0469Sjordan #define AMLOP_NAME		0x08
26f76b0469Sjordan #define AMLOP_BYTEPREFIX	0x0A
27f76b0469Sjordan #define AMLOP_WORDPREFIX	0x0B
28f76b0469Sjordan #define AMLOP_DWORDPREFIX	0x0C
29f76b0469Sjordan #define AMLOP_STRINGPREFIX	0x0D
30f76b0469Sjordan #define AMLOP_QWORDPREFIX	0x0E
31f76b0469Sjordan #define AMLOP_SCOPE		0x10
32f76b0469Sjordan #define AMLOP_BUFFER		0x11
33f76b0469Sjordan #define AMLOP_PACKAGE		0x12
34f76b0469Sjordan #define AMLOP_VARPACKAGE	0x13
35f76b0469Sjordan #define AMLOP_METHOD		0x14
36f76b0469Sjordan #define AMLOP_DUALNAMEPREFIX	0x2E
37f76b0469Sjordan #define AMLOP_MULTINAMEPREFIX	0x2F
38ebfe42f9Sjordan #define AMLOP_EXTPREFIX		0x5B
39f76b0469Sjordan #define AMLOP_MUTEX		0x5B01
40f76b0469Sjordan #define AMLOP_EVENT		0x5B02
41f76b0469Sjordan #define AMLOP_CONDREFOF		0x5B12
42f76b0469Sjordan #define AMLOP_CREATEFIELD	0x5B13
43f76b0469Sjordan #define AMLOP_LOADTABLE		0x5B1F
44f76b0469Sjordan #define AMLOP_LOAD		0x5B20
45f76b0469Sjordan #define AMLOP_STALL		0x5B21
46f76b0469Sjordan #define AMLOP_SLEEP		0x5B22
47f76b0469Sjordan #define AMLOP_ACQUIRE		0x5B23
48f76b0469Sjordan #define AMLOP_SIGNAL		0x5B24
49f76b0469Sjordan #define AMLOP_WAIT		0x5B25
50f76b0469Sjordan #define AMLOP_RESET		0x5B26
51f76b0469Sjordan #define AMLOP_RELEASE		0x5B27
52f76b0469Sjordan #define AMLOP_FROMBCD		0x5B28
53f76b0469Sjordan #define AMLOP_TOBCD		0x5B29
54f76b0469Sjordan #define AMLOP_UNLOAD		0x5B2A
55f76b0469Sjordan #define AMLOP_REVISION		0x5B30
56f76b0469Sjordan #define AMLOP_DEBUG		0x5B31
57f76b0469Sjordan #define AMLOP_FATAL		0x5B32
58ab5008fbSjordan #define AMLOP_TIMER		0x5B33
59f76b0469Sjordan #define AMLOP_OPREGION		0x5B80
60f76b0469Sjordan #define AMLOP_FIELD		0x5B81
61f76b0469Sjordan #define AMLOP_DEVICE		0x5B82
62f76b0469Sjordan #define AMLOP_PROCESSOR		0x5B83
63f76b0469Sjordan #define AMLOP_POWERRSRC		0x5B84
64f76b0469Sjordan #define AMLOP_THERMALZONE	0x5B85
65f76b0469Sjordan #define AMLOP_INDEXFIELD	0x5B86
66f76b0469Sjordan #define AMLOP_BANKFIELD		0x5B87
67f76b0469Sjordan #define AMLOP_DATAREGION	0x5B88
68f76b0469Sjordan #define AMLOP_ROOTCHAR		0x5C
69f76b0469Sjordan #define AMLOP_PARENTPREFIX	0x5E
70f76b0469Sjordan #define AMLOP_NAMECHAR		0x5F
71f76b0469Sjordan #define AMLOP_LOCAL0		0x60
72f76b0469Sjordan #define AMLOP_LOCAL1		0x61
73f76b0469Sjordan #define AMLOP_LOCAL2		0x62
74f76b0469Sjordan #define AMLOP_LOCAL3		0x63
75f76b0469Sjordan #define AMLOP_LOCAL4		0x64
76f76b0469Sjordan #define AMLOP_LOCAL5		0x65
77f76b0469Sjordan #define AMLOP_LOCAL6		0x66
78f76b0469Sjordan #define AMLOP_LOCAL7		0x67
79f76b0469Sjordan #define AMLOP_ARG0		0x68
80f76b0469Sjordan #define AMLOP_ARG1		0x69
81f76b0469Sjordan #define AMLOP_ARG2		0x6A
82f76b0469Sjordan #define AMLOP_ARG3		0x6B
83f76b0469Sjordan #define AMLOP_ARG4		0x6C
84f76b0469Sjordan #define AMLOP_ARG5		0x6D
85f76b0469Sjordan #define AMLOP_ARG6		0x6E
86f76b0469Sjordan #define AMLOP_STORE		0x70
87f76b0469Sjordan #define AMLOP_REFOF		0x71
88f76b0469Sjordan #define AMLOP_ADD		0x72
89f76b0469Sjordan #define AMLOP_CONCAT		0x73
90f76b0469Sjordan #define AMLOP_SUBTRACT		0x74
91f76b0469Sjordan #define AMLOP_INCREMENT		0x75
92f76b0469Sjordan #define AMLOP_DECREMENT		0x76
93f76b0469Sjordan #define AMLOP_MULTIPLY		0x77
94f76b0469Sjordan #define AMLOP_DIVIDE		0x78
95f76b0469Sjordan #define AMLOP_SHL		0x79
96f76b0469Sjordan #define AMLOP_SHR		0x7A
97f76b0469Sjordan #define AMLOP_AND		0x7B
98f76b0469Sjordan #define AMLOP_NAND		0x7C
99f76b0469Sjordan #define AMLOP_OR		0x7D
100f76b0469Sjordan #define AMLOP_NOR		0x7E
101f76b0469Sjordan #define AMLOP_XOR		0x7F
102f76b0469Sjordan #define AMLOP_NOT		0x80
103f76b0469Sjordan #define AMLOP_FINDSETLEFTBIT	0x81
104f76b0469Sjordan #define AMLOP_FINDSETRIGHTBIT	0x82
105f76b0469Sjordan #define AMLOP_DEREFOF		0x83
106f76b0469Sjordan #define AMLOP_CONCATRES		0x84
107f76b0469Sjordan #define AMLOP_MOD		0x85
108f76b0469Sjordan #define AMLOP_NOTIFY		0x86
109f76b0469Sjordan #define AMLOP_SIZEOF		0x87
110f76b0469Sjordan #define AMLOP_INDEX		0x88
111f76b0469Sjordan #define AMLOP_MATCH		0x89
112f76b0469Sjordan #define AMLOP_CREATEDWORDFIELD	0x8A
113f76b0469Sjordan #define AMLOP_CREATEWORDFIELD	0x8B
114f76b0469Sjordan #define AMLOP_CREATEBYTEFIELD	0x8C
115f76b0469Sjordan #define AMLOP_CREATEBITFIELD	0x8D
116f76b0469Sjordan #define AMLOP_OBJECTTYPE	0x8E
117f76b0469Sjordan #define AMLOP_CREATEQWORDFIELD	0x8F
118f76b0469Sjordan #define AMLOP_LAND		0x90
119f76b0469Sjordan #define AMLOP_LOR		0x91
120f76b0469Sjordan #define AMLOP_LNOT		0x92
121f76b0469Sjordan #define AMLOP_LNOTEQUAL		0x9293
122f76b0469Sjordan #define AMLOP_LLESSEQUAL	0x9294
123f76b0469Sjordan #define AMLOP_LGREATEREQUAL	0x9295
124f76b0469Sjordan #define AMLOP_LEQUAL		0x93
125f76b0469Sjordan #define AMLOP_LGREATER		0x94
126f76b0469Sjordan #define AMLOP_LLESS		0x95
127f76b0469Sjordan #define AMLOP_TOBUFFER		0x96
128f76b0469Sjordan #define AMLOP_TODECSTRING	0x97
129f76b0469Sjordan #define AMLOP_TOHEXSTRING	0x98
130f76b0469Sjordan #define AMLOP_TOINTEGER		0x99
131f76b0469Sjordan #define AMLOP_TOSTRING		0x9C
132f76b0469Sjordan #define AMLOP_COPYOBJECT	0x9D
133f76b0469Sjordan #define AMLOP_MID		0x9E
134f76b0469Sjordan #define AMLOP_CONTINUE		0x9F
135f76b0469Sjordan #define AMLOP_IF		0xA0
136f76b0469Sjordan #define AMLOP_ELSE		0xA1
137f76b0469Sjordan #define AMLOP_WHILE		0xA2
138f76b0469Sjordan #define AMLOP_NOP		0xA3
139f76b0469Sjordan #define AMLOP_RETURN		0xA4
140f76b0469Sjordan #define AMLOP_BREAK		0xA5
141f76b0469Sjordan #define AMLOP_BREAKPOINT	0xCC
142f76b0469Sjordan #define AMLOP_ONES		0xFF
143f76b0469Sjordan 
144ac86860cSjordan #define AMLOP_FIELDUNIT		0xFE00
14530a01ff4Sjordan #define AML_ANYINT		0xFF00
146ac86860cSjordan 
147f76b0469Sjordan /*
148f76b0469Sjordan  * Comparison types for Match()
149f76b0469Sjordan  *
150f76b0469Sjordan  *  true,==,<=,<,>=,>
151f76b0469Sjordan  */
152f76b0469Sjordan #define AML_MATCH_TR		0
153f76b0469Sjordan #define AML_MATCH_EQ		1
154f76b0469Sjordan #define AML_MATCH_LE		2
155f76b0469Sjordan #define AML_MATCH_LT		3
156f76b0469Sjordan #define AML_MATCH_GE		4
157f76b0469Sjordan #define AML_MATCH_GT		5
158f76b0469Sjordan 
159f76b0469Sjordan /* Defined types for ObjectType() */
160f76b0469Sjordan enum aml_objecttype {
161f76b0469Sjordan 	AML_OBJTYPE_UNINITIALIZED = 0,
162f76b0469Sjordan 	AML_OBJTYPE_INTEGER,
163f76b0469Sjordan 	AML_OBJTYPE_STRING,
164f76b0469Sjordan 	AML_OBJTYPE_BUFFER,
165f76b0469Sjordan 	AML_OBJTYPE_PACKAGE,
166f76b0469Sjordan 	AML_OBJTYPE_FIELDUNIT,
167f76b0469Sjordan 	AML_OBJTYPE_DEVICE,
168f76b0469Sjordan 	AML_OBJTYPE_EVENT,
169f76b0469Sjordan 	AML_OBJTYPE_METHOD,
170f76b0469Sjordan 	AML_OBJTYPE_MUTEX,
171f76b0469Sjordan 	AML_OBJTYPE_OPREGION,
172f76b0469Sjordan 	AML_OBJTYPE_POWERRSRC,
173f76b0469Sjordan 	AML_OBJTYPE_PROCESSOR,
174f76b0469Sjordan 	AML_OBJTYPE_THERMZONE,
175f76b0469Sjordan 	AML_OBJTYPE_BUFFERFIELD,
176f76b0469Sjordan 	AML_OBJTYPE_DDBHANDLE,
177033bb254Sjordan 	AML_OBJTYPE_DEBUGOBJ,
178033bb254Sjordan 
179a1664966Sjordan 	AML_OBJTYPE_NAMEREF = 0x100,
18024e2239eSjordan 	AML_OBJTYPE_OBJREF,
18141b774f7Sjordan 	AML_OBJTYPE_SCOPE,
18241b774f7Sjordan 	AML_OBJTYPE_NOTARGET,
1832a12a229Sjordan 	AML_OBJTYPE_HEXSTRING,
1842a12a229Sjordan 	AML_OBJTYPE_DECSTRING,
185f76b0469Sjordan };
186f76b0469Sjordan 
187ebfe42f9Sjordan /* AML Opcode Arguments */
188ebfe42f9Sjordan #define AML_ARG_INTEGER		'i'
189ebfe42f9Sjordan #define AML_ARG_BYTE		'b'
190ebfe42f9Sjordan #define AML_ARG_WORD		'w'
191ebfe42f9Sjordan #define AML_ARG_DWORD		'd'
192ebfe42f9Sjordan #define AML_ARG_QWORD		'q'
193c602d92cSjordan #define AML_ARG_IMPBYTE		'!'
194ebfe42f9Sjordan #define AML_ARG_OBJLEN		'p'
195cda98319Smarco #define AML_ARG_STRING		'a'
196ebfe42f9Sjordan #define AML_ARG_BYTELIST	'B'
197ebfe42f9Sjordan #define AML_ARG_REVISION	'R'
198ebfe42f9Sjordan 
199033bb254Sjordan #define AML_ARG_METHOD		'M'
200ebfe42f9Sjordan #define AML_ARG_NAMESTRING	'N'
201ebfe42f9Sjordan #define AML_ARG_NAMEREF		'n'
202ebfe42f9Sjordan #define AML_ARG_FIELDLIST	'F'
203a0179416Sjordan #define AML_ARG_FLAG		'f'
204ebfe42f9Sjordan 
205cda98319Smarco #define AML_ARG_DATAOBJLIST	'O'
206cda98319Smarco #define AML_ARG_DATAOBJ		'o'
207cda98319Smarco 
208cda98319Smarco #define AML_ARG_SIMPLENAME	's'
209cda98319Smarco #define AML_ARG_SUPERNAME	'S'
210cda98319Smarco 
211ebfe42f9Sjordan #define AML_ARG_TERMOBJLIST	'T'
212ebfe42f9Sjordan #define AML_ARG_TERMOBJ		't'
213ebfe42f9Sjordan 
21441b774f7Sjordan #define AML_ARG_IFELSE          'I'
21541b774f7Sjordan #define AML_ARG_BUFFER          'B'
21641b774f7Sjordan #define AML_ARG_SEARCHNAME      'n'
21741b774f7Sjordan #define AML_ARG_CREATENAME      'N'
21841b774f7Sjordan #define AML_ARG_STKARG          'A'
21941b774f7Sjordan #define AML_ARG_STKLOCAL        'L'
22041b774f7Sjordan #define AML_ARG_DEBUG           'D'
22141b774f7Sjordan #define AML_ARG_CONST           'c'
22241b774f7Sjordan #define AML_ARG_TARGET          'r'
22341b774f7Sjordan 
224c602d92cSjordan #define AML_METHOD_ARGCOUNT(v)	 (((v) >> 0) & 0x7)
225c602d92cSjordan #define AML_METHOD_SERIALIZED(v) (((v) >> 3) & 0x1)
226c602d92cSjordan #define AML_METHOD_SYNCLEVEL(v)	 (((v) >> 4) & 0xF)
227c602d92cSjordan 
228fbea8eebSjordan #define AML_FIELD_ACCESSMASK	0x0F
229a1664966Sjordan #define AML_FIELD_SETATTR(f,t,a) (((f) & 0xF0) | ((t) & 0xF) | ((a)<<8))
230c602d92cSjordan #define AML_FIELD_ACCESS(v)	(((v) >> 0) & 0xF)
231ab5008fbSjordan # define AML_FIELD_ANYACC	0x0
232ab5008fbSjordan # define AML_FIELD_BYTEACC	0x1
233ab5008fbSjordan # define AML_FIELD_WORDACC	0x2
234ab5008fbSjordan # define AML_FIELD_DWORDACC	0x3
235ab5008fbSjordan # define AML_FIELD_QWORDACC	0x4
236ab5008fbSjordan # define AML_FIELD_BUFFERACC	0x5
237c602d92cSjordan #define AML_FIELD_LOCK(v)	(((v) >> 4) & 0x1)
238ab5008fbSjordan # define AML_FIELD_LOCK_OFF	0x0
239ab5008fbSjordan # define AML_FIELD_LOCK_ON	0x1
240c602d92cSjordan #define AML_FIELD_UPDATE(v)	(((v) >> 5) & 0x3)
241ab5008fbSjordan # define AML_FIELD_PRESERVE	0x0
242ab5008fbSjordan # define AML_FIELD_WRITEASONES	0x1
243ab5008fbSjordan # define AML_FIELD_WRITEASZEROES 0x2
244a1664966Sjordan #define AML_FIELD_ATTR(v)	((v) >> 8)
245cda98319Smarco #define AML_FIELD_RESERVED	0x00
246cda98319Smarco /* XXX fix this name */
247cda98319Smarco #define AML_FIELD_ATTR__		0x01
248c602d92cSjordan 
249048d6e7cSjordan struct aml_scope;
250c602d92cSjordan struct aml_node;
251c602d92cSjordan 
2527302bb8fSderaadt struct aml_waitq {
25341b774f7Sjordan 	struct aml_scope          *scope;
25441b774f7Sjordan 	SIMPLEQ_ENTRY(aml_waitq)   link;
25541b774f7Sjordan };
25641b774f7Sjordan SIMPLEQ_HEAD(aml_waitq_head, aml_waitq);
25741b774f7Sjordan 
258c602d92cSjordan /* AML Object Value */
2598c9695e2Sderaadt struct aml_value {
260c602d92cSjordan 	int	type;
261c602d92cSjordan 	int	length;
262a1664966Sjordan 	int	refcnt;
26366304cccSjordan 	int	stack;
26424e2239eSjordan 	struct aml_node *node;
265c602d92cSjordan 	union {
266c602d92cSjordan 		int64_t		vinteger;
2672fed1ad9Sjordan 		char		*vstring;
268d2eaebe9Skettenis 		uint8_t		*vbuffer;
2692fed1ad9Sjordan 		struct aml_value **vpackage;
2702fed1ad9Sjordan 		struct {
271d2eaebe9Skettenis 			uint8_t		iospace;
272d2eaebe9Skettenis 			uint64_t	iobase;
273d2eaebe9Skettenis 			uint32_t	iolen;
2743b455a03Smarco 			int		flag;
2752fed1ad9Sjordan 		} vopregion;
276c602d92cSjordan 		struct {
277fbea8eebSjordan 			int		flags;
278d2eaebe9Skettenis 			uint8_t		*start;
279d2eaebe9Skettenis 			uint8_t		*end;
280048d6e7cSjordan 			struct aml_value *(*fneval)(struct aml_scope *, struct aml_value *);
281d2eaebe9Skettenis 			uint8_t	        *base;
282c602d92cSjordan 		} vmethod;
283c602d92cSjordan 		struct {
284d2eaebe9Skettenis 			uint16_t	 type;
285d2eaebe9Skettenis 			uint16_t	 flags;
286d2eaebe9Skettenis 			uint32_t	 bitpos;
287d2eaebe9Skettenis 			uint32_t	 bitlen;
288fbea8eebSjordan 			struct aml_value *ref1;
289fbea8eebSjordan 			struct aml_value *ref2;
290fbea8eebSjordan 			int		 ref3;
291c602d92cSjordan 		} vfield;
292ab5008fbSjordan 		struct {
293d2eaebe9Skettenis 			uint8_t		proc_id;
294d2eaebe9Skettenis 			uint32_t	proc_addr;
295d2eaebe9Skettenis 			uint8_t		proc_len;
296ab5008fbSjordan 		} vprocessor;
297ab5008fbSjordan 		struct {
29841b774f7Sjordan 			int		type;
2992fed1ad9Sjordan 			int		index;
300fbea8eebSjordan 			struct aml_value *ref;
301a1664966Sjordan 		} vobjref;
3022fed1ad9Sjordan 		struct {
303d2eaebe9Skettenis 			uint8_t		pwr_level;
304d2eaebe9Skettenis 			uint16_t	pwr_order;
305ab5008fbSjordan 		} vpowerrsrc;
306ad714237Smarco 		struct acpi_mutex	*vmutex;
30741b774f7Sjordan 		struct {
308d2eaebe9Skettenis 			uint8_t	         *name;
30941b774f7Sjordan 			struct aml_node  *node;
31041b774f7Sjordan 		} vnameref;
31141b774f7Sjordan 		struct {
31241b774f7Sjordan 			int               synclvl;
31341b774f7Sjordan 			int               savelvl;
31441b774f7Sjordan 			int               count;
31541b774f7Sjordan 			char              ownername[5];
31641b774f7Sjordan 			struct aml_scope *owner;
31741b774f7Sjordan 			struct aml_waitq_head    waiters;
31841b774f7Sjordan 		} Vmutex;
31941b774f7Sjordan 		struct {
32041b774f7Sjordan 			int               state;
32141b774f7Sjordan 			struct aml_waitq_head    waiters;
32241b774f7Sjordan 		} Vevent;
323c602d92cSjordan 	} _;
324c602d92cSjordan };
3252fed1ad9Sjordan 
3266ab98c39Sjordan #define v_nameref		_.vbuffer
327a1664966Sjordan #define v_objref		_.vobjref
328c602d92cSjordan #define v_integer		_.vinteger
329c602d92cSjordan #define v_string		_.vstring
330c602d92cSjordan #define v_buffer		_.vbuffer
331c602d92cSjordan #define v_package		_.vpackage
332c602d92cSjordan #define v_field			_.vfield
333ab5008fbSjordan #define v_opregion		_.vopregion
334c602d92cSjordan #define v_method		_.vmethod
335ab5008fbSjordan #define v_processor		_.vprocessor
336ab5008fbSjordan #define v_powerrsrc		_.vpowerrsrc
337ad714237Smarco #define v_mutex			_.vmutex
33841b774f7Sjordan #define v_mtx                   _.Vmutex
33941b774f7Sjordan #define v_evt                   _.Vevent
340c602d92cSjordan 
34124e2239eSjordan #define xaml_intval(v)		((v)->v_integer)
3422fed1ad9Sjordan #define aml_strlen(v)		((v)->length)
343746a1e0eSmarco #define aml_strval(v)		((v)->v_string ? (v)->v_string : "bad string")
3442fed1ad9Sjordan #define aml_buflen(v)		((v)->length)
345033bb254Sjordan #define aml_bufval(v)		((v)->v_buffer)
3462fed1ad9Sjordan #define aml_pkglen(v)		((v)->length)
3472fed1ad9Sjordan #define aml_pkgval(v,i)		(&(v)->v_package[(i)])
348033bb254Sjordan 
349311c37bcSjordan struct acpi_pci {
350311c37bcSjordan 	TAILQ_ENTRY(acpi_pci)		next;
351311c37bcSjordan 
352311c37bcSjordan 	struct aml_node			*node;
353311c37bcSjordan 	struct device			*device;
354311c37bcSjordan 
355311c37bcSjordan 	int				sub;
356311c37bcSjordan 	int				seg;
357311c37bcSjordan 	int				bus;
358311c37bcSjordan 	int				dev;
359311c37bcSjordan 	int				fun;
3600562dac2Skettenis 
361*50b7f1f5Skettenis 	int				_s0w;
3620562dac2Skettenis 	int				_s3d;
3630562dac2Skettenis 	int				_s3w;
3640562dac2Skettenis 	int				_s4d;
3650562dac2Skettenis 	int				_s4w;
366311c37bcSjordan };
367311c37bcSjordan 
368219e90e1Skettenis struct acpi_gpio {
369219e90e1Skettenis 	void	*cookie;
370219e90e1Skettenis 	int	(*read_pin)(void *, int);
3711b922435Skettenis 	void	(*write_pin)(void *, int, int);
3725c79a181Sjsg 	void	(*intr_establish)(void *, int, int, int (*)(void *), void *);
37315328e98Skettenis 	void	(*intr_enable)(void *, int);
37415328e98Skettenis 	void	(*intr_disable)(void *, int);
375219e90e1Skettenis };
376219e90e1Skettenis 
37711d486e4Skettenis struct i2c_controller;
37811d486e4Skettenis 
3798c9695e2Sderaadt struct aml_node {
380c602d92cSjordan 	struct aml_node *parent;
381311c37bcSjordan 
382311c37bcSjordan 	SIMPLEQ_HEAD(,aml_node)	son;
383311c37bcSjordan 	SIMPLEQ_ENTRY(aml_node)	sib;
384c602d92cSjordan 
3854aaaf332Skettenis 	int		attached;
3864aaaf332Skettenis 
3876ab98c39Sjordan 	char		name[5];
388d2eaebe9Skettenis 	uint16_t	opcode;
389d2eaebe9Skettenis 	uint8_t		*start;
390d2eaebe9Skettenis 	uint8_t		*end;
391c602d92cSjordan 
3922fed1ad9Sjordan 	struct aml_value *value;
393311c37bcSjordan 	struct acpi_pci *pci;
394219e90e1Skettenis 	struct acpi_gpio *gpio;
39511d486e4Skettenis 	struct i2c_controller *i2c;
396c602d92cSjordan };
397ebfe42f9Sjordan 
398a1664966Sjordan #define aml_bitmask(n)		(1L << ((n) & 0x7))
399a1664966Sjordan #define aml_bitpos(n)		((n)&0x7)
400a1664966Sjordan #define aml_bytepos(n)		((n)>>3)
401a1664966Sjordan #define aml_bytelen(n)		(((n)+7)>>3)
402a1664966Sjordan #define aml_bytealigned(x)	!((x)&0x7)
403a1664966Sjordan 
40467fadc30Skettenis #define AML_NO_TIMEOUT		0xffff
40567fadc30Skettenis 
4063f15b72bSmarco #endif /* __DEV_ACPI_AMLTYPES_H__ */
407