Palacios Public Git Repository

To checkout Palacios execute

  git clone http://v3vee.org/palacios/palacios.web/palacios.git
This will give you the master branch. You probably want the devel branch or one of the release branches. To switch to the devel branch, simply execute
  cd palacios
  git checkout --track -b devel origin/devel
The other branches are similar.


Added Kitten
[palacios-OLD.git] / kitten / include / acpi / acstruct.h
1 /******************************************************************************
2  *
3  * Name: acstruct.h - Internal structs
4  *
5  *****************************************************************************/
6
7 /*
8  * Copyright (C) 2000 - 2006, R. Byron Moore
9  * All rights reserved.
10  *
11  * Redistribution and use in source and binary forms, with or without
12  * modification, are permitted provided that the following conditions
13  * are met:
14  * 1. Redistributions of source code must retain the above copyright
15  *    notice, this list of conditions, and the following disclaimer,
16  *    without modification.
17  * 2. Redistributions in binary form must reproduce at minimum a disclaimer
18  *    substantially similar to the "NO WARRANTY" disclaimer below
19  *    ("Disclaimer") and any redistribution must be conditioned upon
20  *    including a substantially similar Disclaimer requirement for further
21  *    binary redistribution.
22  * 3. Neither the names of the above-listed copyright holders nor the names
23  *    of any contributors may be used to endorse or promote products derived
24  *    from this software without specific prior written permission.
25  *
26  * Alternatively, this software may be distributed under the terms of the
27  * GNU General Public License ("GPL") version 2 as published by the Free
28  * Software Foundation.
29  *
30  * NO WARRANTY
31  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
32  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
33  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
34  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
35  * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
36  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
37  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
38  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
39  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
40  * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
41  * POSSIBILITY OF SUCH DAMAGES.
42  */
43
44 #ifndef __ACSTRUCT_H__
45 #define __ACSTRUCT_H__
46
47 /* acpisrc:struct_defs -- for acpisrc conversion */
48
49 /*****************************************************************************
50  *
51  * Tree walking typedefs and structs
52  *
53  ****************************************************************************/
54
55 /*
56  * Walk state - current state of a parse tree walk.  Used for both a leisurely
57  * stroll through the tree (for whatever reason), and for control method
58  * execution.
59  */
60 #define ACPI_NEXT_OP_DOWNWARD       1
61 #define ACPI_NEXT_OP_UPWARD         2
62
63 /*
64  * Groups of definitions for walk_type used for different implementations of
65  * walkers (never simultaneously) - flags for interpreter:
66  */
67 #define ACPI_WALK_NON_METHOD        0
68 #define ACPI_WALK_METHOD            0x01
69 #define ACPI_WALK_METHOD_RESTART    0x02
70
71 /* Flags for i_aSL compiler only */
72
73 #define ACPI_WALK_CONST_REQUIRED    0x10
74 #define ACPI_WALK_CONST_OPTIONAL    0x20
75
76 struct acpi_walk_state {
77         struct acpi_walk_state *next;   /* Next walk_state in list */
78         u8 descriptor_type;     /* To differentiate various internal objs */
79         u8 walk_type;
80         u16 opcode;             /* Current AML opcode */
81         u8 next_op_info;        /* Info about next_op */
82         u8 num_operands;        /* Stack pointer for Operands[] array */
83         acpi_owner_id owner_id; /* Owner of objects created during the walk */
84         u8 last_predicate;      /* Result of last predicate */
85         u8 current_result;
86         u8 return_used;
87         u8 scope_depth;
88         u8 pass_number;         /* Parse pass during table load */
89         u32 aml_offset;
90         u32 arg_types;
91         u32 method_breakpoint;  /* For single stepping */
92         u32 user_breakpoint;    /* User AML breakpoint */
93         u32 parse_flags;
94
95         struct acpi_parse_state parser_state;   /* Current state of parser */
96         u32 prev_arg_types;
97         u32 arg_count;          /* push for fixed or var args */
98
99         struct acpi_namespace_node arguments[ACPI_METHOD_NUM_ARGS];     /* Control method arguments */
100         struct acpi_namespace_node local_variables[ACPI_METHOD_NUM_LOCALS];     /* Control method locals */
101         union acpi_operand_object *operands[ACPI_OBJ_NUM_OPERANDS + 1]; /* Operands passed to the interpreter (+1 for NULL terminator) */
102         union acpi_operand_object **params;
103
104         u8 *aml_last_while;
105         union acpi_operand_object **caller_return_desc;
106         union acpi_generic_state *control_state;        /* List of control states (nested IFs) */
107         struct acpi_namespace_node *deferred_node;      /* Used when executing deferred opcodes */
108         struct acpi_gpe_event_info *gpe_event_info;     /* Info for GPE (_Lxx/_Exx methods only */
109         union acpi_operand_object *implicit_return_obj;
110         struct acpi_namespace_node *method_call_node;   /* Called method Node */
111         union acpi_parse_object *method_call_op;        /* method_call Op if running a method */
112         union acpi_operand_object *method_desc; /* Method descriptor if running a method */
113         struct acpi_namespace_node *method_node;        /* Method node if running a method. */
114         union acpi_parse_object *op;    /* Current parser op */
115         const struct acpi_opcode_info *op_info; /* Info on current opcode */
116         union acpi_parse_object *origin;        /* Start of walk [Obsolete] */
117         union acpi_operand_object *result_obj;
118         union acpi_generic_state *results;      /* Stack of accumulated results */
119         union acpi_operand_object *return_desc; /* Return object, if any */
120         union acpi_generic_state *scope_info;   /* Stack of nested scopes */
121         union acpi_parse_object *prev_op;       /* Last op that was processed */
122         union acpi_parse_object *next_op;       /* next op to be processed */
123         struct acpi_thread_state *thread;
124         acpi_parse_downwards descending_callback;
125         acpi_parse_upwards ascending_callback;
126 };
127
128 /* Info used by acpi_ps_init_objects */
129
130 struct acpi_init_walk_info {
131         u16 method_count;
132         u16 device_count;
133         u16 op_region_count;
134         u16 field_count;
135         u16 buffer_count;
136         u16 package_count;
137         u16 op_region_init;
138         u16 field_init;
139         u16 buffer_init;
140         u16 package_init;
141         u16 object_count;
142         struct acpi_table_desc *table_desc;
143 };
144
145 struct acpi_get_devices_info {
146         acpi_walk_callback user_function;
147         void *context;
148         char *hid;
149 };
150
151 union acpi_aml_operands {
152         union acpi_operand_object *operands[7];
153
154         struct {
155                 struct acpi_object_integer *type;
156                 struct acpi_object_integer *code;
157                 struct acpi_object_integer *argument;
158
159         } fatal;
160
161         struct {
162                 union acpi_operand_object *source;
163                 struct acpi_object_integer *index;
164                 union acpi_operand_object *target;
165
166         } index;
167
168         struct {
169                 union acpi_operand_object *source;
170                 struct acpi_object_integer *index;
171                 struct acpi_object_integer *length;
172                 union acpi_operand_object *target;
173
174         } mid;
175 };
176
177 /*
178  * Structure used to pass object evaluation parameters.
179  * Purpose is to reduce CPU stack use.
180  */
181 struct acpi_evaluate_info {
182         struct acpi_namespace_node *prefix_node;
183         char *pathname;
184         union acpi_operand_object *obj_desc;
185         union acpi_operand_object **parameters;
186         struct acpi_namespace_node *resolved_node;
187         union acpi_operand_object *return_object;
188         u8 pass_number;
189         u8 parameter_type;
190         u8 return_object_type;
191         u8 flags;
192 };
193
194 /* Types for parameter_type above */
195
196 #define ACPI_PARAM_ARGS                 0
197 #define ACPI_PARAM_GPE                  1
198
199 /* Values for Flags above */
200
201 #define ACPI_IGNORE_RETURN_VALUE        1
202
203 /* Info used by acpi_ns_initialize_devices */
204
205 struct acpi_device_walk_info {
206         u16 device_count;
207         u16 num_STA;
208         u16 num_INI;
209         struct acpi_table_desc *table_desc;
210         struct acpi_evaluate_info *evaluate_info;
211 };
212
213 /* TBD: [Restructure] Merge with struct above */
214
215 struct acpi_walk_info {
216         u32 debug_level;
217         u32 count;
218         acpi_owner_id owner_id;
219         u8 display_type;
220 };
221
222 /* Display Types */
223
224 #define ACPI_DISPLAY_SUMMARY        (u8) 0
225 #define ACPI_DISPLAY_OBJECTS        (u8) 1
226 #define ACPI_DISPLAY_MASK           (u8) 1
227
228 #define ACPI_DISPLAY_SHORT          (u8) 2
229
230 #endif