/* $NetBSD: aml_obj.h,v 1.1 2007/01/14 04:36:13 christos Exp $ */ /*- * Copyright (c) 1999 Takanori Watanabe * Copyright (c) 1999, 2000 Mitsuru IWASAKI * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * * Id: aml_obj.h,v 1.15 2000/08/09 14:47:43 iwasaki Exp * $FreeBSD: src/usr.sbin/acpi/amldb/aml/aml_obj.h,v 1.1 2000/08/24 09:33:08 takawata Exp $ */ #ifndef _AML_OBJ_H_ #define _AML_OBJ_H_ #include struct aml_environ; enum aml_objtype { aml_t_namestr = -3, aml_t_regfield, aml_t_objref, aml_t_null = 0, aml_t_num, aml_t_string, aml_t_buffer, aml_t_package, aml_t_device, aml_t_field, aml_t_event, aml_t_method, aml_t_mutex, aml_t_opregion, aml_t_powerres, aml_t_processor, aml_t_therm, aml_t_bufferfield, aml_t_ddbhandle, aml_t_debug }; struct aml_namestr { enum aml_objtype type; /* =aml_t_namestr */ u_int8_t *dp; }; struct aml_opregion { enum aml_objtype type; int space; int offset; int length; }; struct aml_num { enum aml_objtype type; /* =aml_t_num */ int number; int constant; }; struct aml_package { enum aml_objtype type; int elements; union aml_object **objects; }; struct aml_string { enum aml_objtype type; /* =aml_t_string */ int needfree; u_int8_t *string; }; struct aml_buffer { enum aml_objtype type; /* =aml_t_buffer */ int size; u_int8_t *data; /* This should be free when * this object is free. */ }; enum fieldtype { f_t_field, f_t_index, f_t_bank }; struct nfieldd { enum fieldtype ftype; /* f_t_field */ u_int8_t *regname; /* Namestring */ }; struct ifieldd { enum fieldtype ftype; /* f_t_index */ u_int8_t *indexname; u_int8_t *dataname; }; struct bfieldd { enum fieldtype ftype; /* f_t_bank */ u_int8_t *regname; u_int8_t *bankname; u_int32_t bankvalue; }; struct aml_field { enum aml_objtype type; u_int32_t flags; int bitoffset; /* Not Byte offset but bitoffset */ int bitlen; union { enum fieldtype ftype; struct nfieldd fld; struct ifieldd ifld; struct bfieldd bfld; } f; }; struct aml_bufferfield { enum aml_objtype type; /* aml_t_bufferfield */ int bitoffset; int bitlen; u_int8_t *origin; /* This should not be free * when this object is free * (Within Buffer object) */ }; struct aml_method { enum aml_objtype type; int argnum; /* Not argnum but argnum|frag */ u_int8_t *from; u_int8_t *to; }; struct aml_powerres { enum aml_objtype type; int level; int order; }; struct aml_processor { enum aml_objtype type; int id; int addr; int len; }; struct aml_mutex_queue { STAILQ_ENTRY(aml_mutex_queue) entry; }; struct aml_mutex { enum aml_objtype type; int level; volatile void *cookie; /* In kernel, struct proc? */ STAILQ_HEAD(, aml_mutex_queue) queue; }; struct aml_objref { enum aml_objtype type; struct aml_name *nameref; union aml_object *ref; int offset; /* of aml_buffer.data or aml_package.objects. */ /* if negative value, not ready to dereference for element access. */ unsigned deref; /* indicates whether dereffenced or not */ unsigned alias; /* true if this is an alias object reference */ }; struct aml_regfield { enum aml_objtype type; int space; u_int32_t flags; int offset; int bitoffset; int bitlen; }; struct aml_event { enum aml_objtype type; /* aml_t_event */ int inuse; }; union aml_object { enum aml_objtype type; struct aml_num num; struct aml_processor proc; struct aml_powerres pres; struct aml_opregion opregion; struct aml_method meth; struct aml_field field; struct aml_mutex mutex; struct aml_namestr nstr; struct aml_buffer buffer; struct aml_bufferfield bfld; struct aml_package package; struct aml_string str; struct aml_objref objref; struct aml_event event; struct aml_regfield regfield; }; union aml_object *aml_copy_object(struct aml_environ *, union aml_object *); union aml_object *aml_alloc_object(enum aml_objtype, union aml_object *); void aml_free_objectcontent(union aml_object *); void aml_free_object(union aml_object **); void aml_realloc_object(union aml_object *, int); #endif /* !_AML_OBJ_H_ */