xref: /netbsd-src/usr.sbin/acpitools/aml/aml_obj.h (revision 53e202c131d0a3f9c7bc2bad453b5dbd42e86fba)
1 /*	$NetBSD: aml_obj.h,v 1.1 2007/01/14 04:36:13 christos Exp $	*/
2 
3 /*-
4  * Copyright (c) 1999 Takanori Watanabe
5  * Copyright (c) 1999, 2000 Mitsuru IWASAKI <iwasaki@FreeBSD.org>
6  * All rights reserved.
7  *
8  * Redistribution and use in source and binary forms, with or without
9  * modification, are permitted provided that the following conditions
10  * are met:
11  * 1. Redistributions of source code must retain the above copyright
12  *    notice, this list of conditions and the following disclaimer.
13  * 2. Redistributions in binary form must reproduce the above copyright
14  *    notice, this list of conditions and the following disclaimer in the
15  *    documentation and/or other materials provided with the distribution.
16  *
17  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
18  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
21  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
22  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
23  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
24  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
26  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
27  * SUCH DAMAGE.
28  *
29  *	Id: aml_obj.h,v 1.15 2000/08/09 14:47:43 iwasaki Exp
30  *	$FreeBSD: src/usr.sbin/acpi/amldb/aml/aml_obj.h,v 1.1 2000/08/24 09:33:08 takawata Exp $
31  */
32 
33 #ifndef _AML_OBJ_H_
34 #define _AML_OBJ_H_
35 
36 #include <sys/queue.h>
37 
38 struct aml_environ;
39 enum aml_objtype {
40 	aml_t_namestr = -3,
41 	aml_t_regfield,
42 	aml_t_objref,
43 	aml_t_null = 0,
44 	aml_t_num,
45 	aml_t_string,
46 	aml_t_buffer,
47 	aml_t_package,
48 	aml_t_device,
49 	aml_t_field,
50 	aml_t_event,
51 	aml_t_method,
52 	aml_t_mutex,
53 	aml_t_opregion,
54 	aml_t_powerres,
55 	aml_t_processor,
56 	aml_t_therm,
57 	aml_t_bufferfield,
58 	aml_t_ddbhandle,
59 	aml_t_debug
60 };
61 
62 struct	aml_namestr {
63 	enum	aml_objtype type;	/* =aml_t_namestr */
64 	u_int8_t	*dp;
65 };
66 
67 struct	aml_opregion {
68 	enum	aml_objtype type;
69 	int	space;
70 	int	offset;
71 	int	length;
72 };
73 
74 struct	aml_num {
75 	enum	aml_objtype type;	/* =aml_t_num */
76 	int	number;
77 	int	constant;
78 };
79 
80 struct	aml_package {
81 	enum	aml_objtype type;
82 	int	elements;
83 	union	aml_object **objects;
84 };
85 
86 struct	aml_string {
87 	enum	aml_objtype type;	/* =aml_t_string */
88 	int	needfree;
89 	u_int8_t	*string;
90 };
91 
92 struct	aml_buffer {
93 	enum	aml_objtype type;	/* =aml_t_buffer */
94 	int	size;
95 	u_int8_t	*data;		/* This should be free when
96 					 * this object is free.
97 					 */
98 };
99 
100 enum	fieldtype {
101 	f_t_field,
102 	f_t_index,
103 	f_t_bank
104 };
105 
106 struct	nfieldd {
107 	enum	fieldtype ftype;	/* f_t_field */
108 	u_int8_t	*regname;	/* Namestring */
109 };
110 
111 struct	ifieldd {
112 	enum	fieldtype ftype;	/* f_t_index */
113 	u_int8_t	*indexname;
114 	u_int8_t	*dataname;
115 };
116 
117 struct	bfieldd {
118 	enum	fieldtype ftype;	/* f_t_bank */
119 	u_int8_t	*regname;
120 	u_int8_t	*bankname;
121 	u_int32_t	bankvalue;
122 };
123 
124 struct	aml_field {
125 	enum	aml_objtype type;
126 	u_int32_t	flags;
127 	int	bitoffset;		/* Not Byte offset but bitoffset */
128 	int	bitlen;
129 	union {
130 		enum	fieldtype ftype;
131 		struct	nfieldd fld;
132 		struct	ifieldd ifld;
133 		struct	bfieldd bfld;
134 	}     f;
135 };
136 
137 struct	aml_bufferfield {
138 	enum	aml_objtype type;	/* aml_t_bufferfield */
139 	int	bitoffset;
140 	int	bitlen;
141 	u_int8_t	*origin;	/* This should not be free
142 					 * when this object is free
143 					 * (Within Buffer object)
144 					 */
145 };
146 
147 struct	aml_method {
148 	enum	aml_objtype type;
149 	int	argnum;		/* Not argnum but argnum|frag */
150 	u_int8_t	*from;
151 	u_int8_t	*to;
152 };
153 
154 struct aml_powerres {
155 	enum	aml_objtype type;
156 	int	level;
157 	int	order;
158 };
159 
160 struct	aml_processor {
161 	enum	aml_objtype type;
162 	int	id;
163 	int	addr;
164 	int	len;
165 };
166 
167 struct	aml_mutex_queue {
168 	STAILQ_ENTRY(aml_mutex_queue) entry;
169 };
170 
171 struct	aml_mutex {
172 	enum	aml_objtype type;
173 	int	level;
174 	volatile	void *cookie;	/* In kernel, struct proc? */
175 	STAILQ_HEAD(, aml_mutex_queue) queue;
176 };
177 
178 struct	aml_objref {
179 	enum	aml_objtype type;
180 	struct	aml_name *nameref;
181 	union	aml_object *ref;
182 	int	offset;		/* of aml_buffer.data or aml_package.objects. */
183 	/* if negative value, not ready to dereference for element access. */
184 	unsigned	deref;	/* indicates whether dereffenced or not */
185 	unsigned	alias;	/* true if this is an alias object reference */
186 };
187 
188 struct	aml_regfield {
189 	enum	aml_objtype type;
190 	int	space;
191 	u_int32_t	flags;
192 	int	offset;
193 	int	bitoffset;
194 	int	bitlen;
195 };
196 
197 struct	aml_event {
198 	enum	aml_objtype type;	/* aml_t_event */
199 	int	inuse;
200 };
201 
202 union	aml_object {
203 	enum	aml_objtype type;
204 	struct	aml_num num;
205 	struct	aml_processor proc;
206 	struct	aml_powerres pres;
207 	struct	aml_opregion opregion;
208 	struct	aml_method meth;
209 	struct	aml_field field;
210 	struct	aml_mutex mutex;
211 	struct	aml_namestr nstr;
212 	struct	aml_buffer buffer;
213 	struct	aml_bufferfield bfld;
214 	struct	aml_package package;
215 	struct	aml_string str;
216 	struct	aml_objref objref;
217 	struct	aml_event event;
218 	struct	aml_regfield regfield;
219 };
220 
221 union aml_object	*aml_copy_object(struct aml_environ *,
222 					  union aml_object *);
223 union aml_object	*aml_alloc_object(enum aml_objtype,
224 					   union aml_object *);
225 void			 aml_free_objectcontent(union aml_object *);
226 void			 aml_free_object(union aml_object **);
227 void			 aml_realloc_object(union aml_object *, int);
228 
229 #endif /* !_AML_OBJ_H_ */
230