Annotation of sys/dev/acpi/dsdt.h, Revision 1.1.1.1
1.1 nbrk 1: /* $OpenBSD: dsdt.h,v 1.28 2007/04/11 02:51:11 jordan Exp $ */
2: /*
3: * Copyright (c) 2005 Marco Peereboom <marco@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_DSDT_H__
19: #define __DEV_ACPI_DSDT_H__
20:
21: struct aml_vallist {
22: struct aml_value *obj;
23: int nobj;
24: struct aml_vallist *next;
25: };
26:
27: struct aml_scope {
28: struct acpi_softc *sc;
29: uint8_t *pos;
30: uint8_t *end;
31: struct aml_node *node;
32: struct aml_vallist *tmpvals;
33: struct aml_scope *parent;
34: struct aml_value *locals;
35: struct aml_value *args;
36: int nargs;
37: };
38:
39:
40: struct aml_opcode {
41: u_int32_t opcode;
42: const char *mnem;
43: const char *args;
44: struct aml_value *(*handler)(struct aml_scope *, int,
45: struct aml_value*);
46: };
47:
48: const char *aml_eisaid(u_int32_t);
49: const char *aml_args(int);
50: const char *aml_mnem(int, uint8_t *);
51: int64_t aml_val2int(struct aml_value *);
52: struct aml_node *aml_searchname(struct aml_node *, const void *);
53: struct aml_node *aml_createname(struct aml_node *, const void *,
54: struct aml_value *);
55:
56: struct aml_value *aml_allocint(uint64_t);
57: struct aml_value *aml_allocstr(const char *);
58: struct aml_value *aml_allocvalue(int, int64_t, const void *);
59: void aml_freevalue(struct aml_value *);
60: void aml_notify(struct aml_node *, int);
61: void aml_notify_dev(const char *, int);
62: void aml_showvalue(struct aml_value *, int);
63: void aml_walkroot(void);
64: void aml_walktree(struct aml_node *);
65:
66: int aml_find_node(struct aml_node *, const char *,
67: void (*)(struct aml_node *, void *), void *);
68: int acpi_parse_aml(struct acpi_softc *, u_int8_t *,
69: u_int32_t);
70: int aml_eval_object(struct acpi_softc *, struct aml_node *,
71: struct aml_value *, int, struct aml_value *);
72: void aml_register_notify(struct aml_node *, const char *,
73: int (*)(struct aml_node *, int, void *), void *,
74: int);
75:
76: u_int64_t aml_getpciaddr(struct acpi_softc *, struct aml_node *);
77:
78: int aml_evalnode(struct acpi_softc *, struct aml_node *,
79: int , struct aml_value *, struct aml_value *);
80: int aml_evalname(struct acpi_softc *, struct aml_node *,
81: const char *, int, struct aml_value *,
82: struct aml_value *);
83:
84: void aml_fixup_dsdt(u_int8_t *, u_int8_t *, int);
85: void aml_create_defaultobjects(void);
86:
87: int acpi_mutex_acquire(struct aml_value *, int);
88: void acpi_mutex_release(struct aml_value *);
89:
90: const char *aml_nodename(struct aml_node *);
91:
92: #define SR_IRQ 0x04
93: #define SR_DMA 0x05
94: #define SR_STARTDEP 0x06
95: #define SR_ENDDEP 0x07
96: #define SR_IOPORT 0x08
97: #define SR_FIXEDPORT 0x09
98: #define SR_ENDTAG 0x0F
99:
100: #define LR_24BIT 0x81
101: #define LR_GENREGISTER 0x82
102: #define LR_32BIT 0x85
103: #define LR_32BITFIXED 0x86
104: #define LR_DWORD 0x87
105: #define LR_WORD 0x88
106: #define LR_EXTIRQ 0x89
107: #define LR_QWORD 0x8A
108:
109: #define __amlflagbit(v,s,l)
110: union acpi_resource {
111: struct {
112: uint8_t typecode;
113: uint16_t length;
114: } __packed hdr;
115:
116: /* Small resource structures
117: * format of typecode is: tttttlll, t = type, l = length
118: */
119: struct {
120: uint8_t typecode;
121: uint16_t irq_mask;
122: uint8_t irq_flags;
123: } __packed sr_irq;
124: struct {
125: uint8_t typecode;
126: uint8_t channel;
127: uint8_t flags;
128: } __packed sr_dma;
129: struct {
130: uint8_t typecode;
131: uint8_t flags;
132: uint16_t _min;
133: uint16_t _max;
134: uint8_t _aln;
135: uint8_t _len;
136: } __packed sr_ioport;
137: struct {
138: uint8_t typecode;
139: uint16_t _bas;
140: uint8_t _len;
141: } __packed sr_fioport;
142:
143: /* Large resource structures */
144: struct {
145: uint8_t typecode;
146: uint16_t length;
147: uint8_t _info;
148: uint16_t _min;
149: uint16_t _max;
150: uint16_t _aln;
151: uint16_t _len;
152: } __packed lr_m24;
153: struct {
154: uint8_t typecode;
155: uint16_t length;
156: uint8_t _info;
157: uint32_t _min;
158: uint32_t _max;
159: uint32_t _aln;
160: uint32_t _len;
161: } __packed lr_m32;
162: struct {
163: uint8_t typecode;
164: uint16_t length;
165: uint8_t flags;
166: uint8_t irq_count;
167: uint32_t irq[1];
168: } __packed lr_extirq;
169: struct {
170: uint8_t typecode;
171: uint16_t length;
172: uint8_t type;
173: uint8_t flags;
174: uint8_t tflags;
175: uint16_t _gra;
176: uint16_t _min;
177: uint16_t _max;
178: uint16_t _tra;
179: uint16_t _len;
180: uint8_t src_index;
181: char src[1];
182: } __packed lr_word;
183: struct {
184: uint8_t typecode;
185: uint16_t length;
186: uint8_t type;
187: uint8_t flags;
188: uint8_t tflags;
189: uint32_t _gra;
190: uint32_t _min;
191: uint32_t _max;
192: uint32_t _tra;
193: uint32_t _len;
194: uint8_t src_index;
195: char src[1];
196: } __packed lr_dword;
197: struct {
198: uint8_t typecode;
199: uint16_t length;
200: uint8_t type;
201: uint8_t flags;
202: uint8_t tflags;
203: uint64_t _gra;
204: uint64_t _min;
205: uint64_t _max;
206: uint64_t _tra;
207: uint64_t _len;
208: uint8_t src_index;
209: char src[1];
210: } __packed lr_qword;
211: uint8_t pad[64];
212: } __packed;
213:
214: #define AML_CRSTYPE(x) ((x)->hdr.typecode & 0x80 ? \
215: (x)->hdr.typecode : (x)->hdr.typecode >> 3)
216: #define AML_CRSLEN(x) ((x)->hdr.typecode & 0x80 ? \
217: 3+(x)->hdr.length : 1+((x)->hdr.typecode & 0x7))
218:
219: int aml_print_resource(union acpi_resource *, void *);
220: int aml_parse_resource(int, uint8_t *,
221: int (*)(union acpi_resource *, void *), void *);
222:
223: #define ACPI_E_NOERROR 0x00
224: #define ACPI_E_BADVALUE 0x01
225:
226: #define AML_MAX_ARG 7
227: #define AML_MAX_LOCAL 8
228:
229: /* XXX: endian macros */
230: #define aml_letohost16(x) letoh16(x)
231: #define aml_letohost32(x) letoh32(x)
232: #define aml_letohost64(x) letoh64(x)
233:
234: #define AML_WALK_PRE 0x00
235: #define AML_WALK_POST 0x01
236:
237: void aml_walknodes(struct aml_node *, int,
238: int (*)(struct aml_node *, void *), void *);
239:
240: void aml_postparse(void);
241: void acpi_poll_notify(void);
242:
243: void aml_hashopcodes(void);
244:
245: void aml_foreachpkg(struct aml_value *, int,
246: void (*fn)(struct aml_value *, void *), void *);
247:
248: #endif /* __DEV_ACPI_DSDT_H__ */
CVSweb