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