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.git] / kitten / include / acpi / acresrc.h
1 /******************************************************************************
2  *
3  * Name: acresrc.h - Resource Manager function prototypes
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 __ACRESRC_H__
45 #define __ACRESRC_H__
46
47 /* Need the AML resource descriptor structs */
48
49 #include "amlresrc.h"
50
51 /*
52  * If possible, pack the following structures to byte alignment, since we
53  * don't care about performance for debug output. Two cases where we cannot
54  * pack the structures:
55  *
56  * 1) Hardware does not support misaligned memory transfers
57  * 2) Compiler does not support pointers within packed structures
58  */
59 #if (!defined(ACPI_MISALIGNMENT_NOT_SUPPORTED) && !defined(ACPI_PACKED_POINTERS_NOT_SUPPORTED))
60 #pragma pack(1)
61 #endif
62
63 /*
64  * Individual entry for the resource conversion tables
65  */
66 typedef const struct acpi_rsconvert_info {
67         u8 opcode;
68         u8 resource_offset;
69         u8 aml_offset;
70         u8 value;
71
72 } acpi_rsconvert_info;
73
74 /* Resource conversion opcodes */
75
76 #define ACPI_RSC_INITGET                0
77 #define ACPI_RSC_INITSET                1
78 #define ACPI_RSC_FLAGINIT               2
79 #define ACPI_RSC_1BITFLAG               3
80 #define ACPI_RSC_2BITFLAG               4
81 #define ACPI_RSC_COUNT                  5
82 #define ACPI_RSC_COUNT16                6
83 #define ACPI_RSC_LENGTH                 7
84 #define ACPI_RSC_MOVE8                  8
85 #define ACPI_RSC_MOVE16                 9
86 #define ACPI_RSC_MOVE32                 10
87 #define ACPI_RSC_MOVE64                 11
88 #define ACPI_RSC_SET8                   12
89 #define ACPI_RSC_DATA8                  13
90 #define ACPI_RSC_ADDRESS                14
91 #define ACPI_RSC_SOURCE                 15
92 #define ACPI_RSC_SOURCEX                16
93 #define ACPI_RSC_BITMASK                17
94 #define ACPI_RSC_BITMASK16              18
95 #define ACPI_RSC_EXIT_NE                19
96 #define ACPI_RSC_EXIT_LE                20
97
98 /* Resource Conversion sub-opcodes */
99
100 #define ACPI_RSC_COMPARE_AML_LENGTH     0
101 #define ACPI_RSC_COMPARE_VALUE          1
102
103 #define ACPI_RSC_TABLE_SIZE(d)          (sizeof (d) / sizeof (struct acpi_rsconvert_info))
104
105 #define ACPI_RS_OFFSET(f)               (u8) ACPI_OFFSET (struct acpi_resource,f)
106 #define AML_OFFSET(f)                   (u8) ACPI_OFFSET (union aml_resource,f)
107
108 typedef const struct acpi_rsdump_info {
109         u8 opcode;
110         u8 offset;
111         char *name;
112         const char **pointer;
113
114 } acpi_rsdump_info;
115
116 /* Values for the Opcode field above */
117
118 #define ACPI_RSD_TITLE                  0
119 #define ACPI_RSD_LITERAL                1
120 #define ACPI_RSD_STRING                 2
121 #define ACPI_RSD_UINT8                  3
122 #define ACPI_RSD_UINT16                 4
123 #define ACPI_RSD_UINT32                 5
124 #define ACPI_RSD_UINT64                 6
125 #define ACPI_RSD_1BITFLAG               7
126 #define ACPI_RSD_2BITFLAG               8
127 #define ACPI_RSD_SHORTLIST              9
128 #define ACPI_RSD_LONGLIST               10
129 #define ACPI_RSD_DWORDLIST              11
130 #define ACPI_RSD_ADDRESS                12
131 #define ACPI_RSD_SOURCE                 13
132
133 /* restore default alignment */
134
135 #pragma pack()
136
137 /* Resource tables indexed by internal resource type */
138
139 extern const u8 acpi_gbl_aml_resource_sizes[];
140 extern struct acpi_rsconvert_info *acpi_gbl_set_resource_dispatch[];
141
142 /* Resource tables indexed by raw AML resource descriptor type */
143
144 extern const u8 acpi_gbl_resource_struct_sizes[];
145 extern struct acpi_rsconvert_info *acpi_gbl_get_resource_dispatch[];
146
147 struct acpi_vendor_walk_info {
148         struct acpi_vendor_uuid *uuid;
149         struct acpi_buffer *buffer;
150         acpi_status status;
151 };
152
153 /*
154  * rscreate
155  */
156 acpi_status
157 acpi_rs_create_resource_list(union acpi_operand_object *aml_buffer,
158                              struct acpi_buffer *output_buffer);
159
160 acpi_status
161 acpi_rs_create_aml_resources(struct acpi_resource *linked_list_buffer,
162                              struct acpi_buffer *output_buffer);
163
164 acpi_status
165 acpi_rs_create_pci_routing_table(union acpi_operand_object *package_object,
166                                  struct acpi_buffer *output_buffer);
167
168 /*
169  * rsutils
170  */
171
172 acpi_status
173 acpi_rs_get_prt_method_data(struct acpi_namespace_node *node,
174                             struct acpi_buffer *ret_buffer);
175
176 acpi_status
177 acpi_rs_get_crs_method_data(struct acpi_namespace_node *node,
178                             struct acpi_buffer *ret_buffer);
179
180 acpi_status
181 acpi_rs_get_prs_method_data(struct acpi_namespace_node *node,
182                             struct acpi_buffer *ret_buffer);
183
184 acpi_status
185 acpi_rs_get_method_data(acpi_handle handle,
186                         char *path, struct acpi_buffer *ret_buffer);
187
188 acpi_status
189 acpi_rs_set_srs_method_data(struct acpi_namespace_node *node,
190                             struct acpi_buffer *ret_buffer);
191
192 /*
193  * rscalc
194  */
195 acpi_status
196 acpi_rs_get_list_length(u8 * aml_buffer,
197                         u32 aml_buffer_length, acpi_size * size_needed);
198
199 acpi_status
200 acpi_rs_get_aml_length(struct acpi_resource *linked_list_buffer,
201                        acpi_size * size_needed);
202
203 acpi_status
204 acpi_rs_get_pci_routing_table_length(union acpi_operand_object *package_object,
205                                      acpi_size * buffer_size_needed);
206
207 acpi_status
208 acpi_rs_convert_aml_to_resources(u8 * aml,
209                                  u32 length,
210                                  u32 offset, u8 resource_index, void **context);
211
212 acpi_status
213 acpi_rs_convert_resources_to_aml(struct acpi_resource *resource,
214                                  acpi_size aml_size_needed, u8 * output_buffer);
215
216 /*
217  * rsaddr
218  */
219 void
220 acpi_rs_set_address_common(union aml_resource *aml,
221                            struct acpi_resource *resource);
222
223 u8
224 acpi_rs_get_address_common(struct acpi_resource *resource,
225                            union aml_resource *aml);
226
227 /*
228  * rsmisc
229  */
230 acpi_status
231 acpi_rs_convert_aml_to_resource(struct acpi_resource *resource,
232                                 union aml_resource *aml,
233                                 struct acpi_rsconvert_info *info);
234
235 acpi_status
236 acpi_rs_convert_resource_to_aml(struct acpi_resource *resource,
237                                 union aml_resource *aml,
238                                 struct acpi_rsconvert_info *info);
239
240 /*
241  * rsutils
242  */
243 void
244 acpi_rs_move_data(void *destination,
245                   void *source, u16 item_count, u8 move_type);
246
247 u8 acpi_rs_decode_bitmask(u16 mask, u8 * list);
248
249 u16 acpi_rs_encode_bitmask(u8 * list, u8 count);
250
251 acpi_rs_length
252 acpi_rs_get_resource_source(acpi_rs_length resource_length,
253                             acpi_rs_length minimum_length,
254                             struct acpi_resource_source *resource_source,
255                             union aml_resource *aml, char *string_ptr);
256
257 acpi_rsdesc_size
258 acpi_rs_set_resource_source(union aml_resource *aml,
259                             acpi_rs_length minimum_length,
260                             struct acpi_resource_source *resource_source);
261
262 void
263 acpi_rs_set_resource_header(u8 descriptor_type,
264                             acpi_rsdesc_size total_length,
265                             union aml_resource *aml);
266
267 void
268 acpi_rs_set_resource_length(acpi_rsdesc_size total_length,
269                             union aml_resource *aml);
270
271 /*
272  * rsdump
273  */
274 void acpi_rs_dump_resource_list(struct acpi_resource *resource);
275
276 void acpi_rs_dump_irq_list(u8 * route_table);
277
278 /*
279  * Resource conversion tables
280  */
281 extern struct acpi_rsconvert_info acpi_rs_convert_dma[];
282 extern struct acpi_rsconvert_info acpi_rs_convert_end_dpf[];
283 extern struct acpi_rsconvert_info acpi_rs_convert_io[];
284 extern struct acpi_rsconvert_info acpi_rs_convert_fixed_io[];
285 extern struct acpi_rsconvert_info acpi_rs_convert_end_tag[];
286 extern struct acpi_rsconvert_info acpi_rs_convert_memory24[];
287 extern struct acpi_rsconvert_info acpi_rs_convert_generic_reg[];
288 extern struct acpi_rsconvert_info acpi_rs_convert_memory32[];
289 extern struct acpi_rsconvert_info acpi_rs_convert_fixed_memory32[];
290 extern struct acpi_rsconvert_info acpi_rs_convert_address32[];
291 extern struct acpi_rsconvert_info acpi_rs_convert_address16[];
292 extern struct acpi_rsconvert_info acpi_rs_convert_ext_irq[];
293 extern struct acpi_rsconvert_info acpi_rs_convert_address64[];
294 extern struct acpi_rsconvert_info acpi_rs_convert_ext_address64[];
295
296 /* These resources require separate get/set tables */
297
298 extern struct acpi_rsconvert_info acpi_rs_get_irq[];
299 extern struct acpi_rsconvert_info acpi_rs_get_start_dpf[];
300 extern struct acpi_rsconvert_info acpi_rs_get_vendor_small[];
301 extern struct acpi_rsconvert_info acpi_rs_get_vendor_large[];
302
303 extern struct acpi_rsconvert_info acpi_rs_set_irq[];
304 extern struct acpi_rsconvert_info acpi_rs_set_start_dpf[];
305 extern struct acpi_rsconvert_info acpi_rs_set_vendor[];
306
307 #if defined(ACPI_DEBUG_OUTPUT) || defined(ACPI_DEBUGGER)
308 /*
309  * rsinfo
310  */
311 extern struct acpi_rsdump_info *acpi_gbl_dump_resource_dispatch[];
312
313 /*
314  * rsdump
315  */
316 extern struct acpi_rsdump_info acpi_rs_dump_irq[];
317 extern struct acpi_rsdump_info acpi_rs_dump_dma[];
318 extern struct acpi_rsdump_info acpi_rs_dump_start_dpf[];
319 extern struct acpi_rsdump_info acpi_rs_dump_end_dpf[];
320 extern struct acpi_rsdump_info acpi_rs_dump_io[];
321 extern struct acpi_rsdump_info acpi_rs_dump_fixed_io[];
322 extern struct acpi_rsdump_info acpi_rs_dump_vendor[];
323 extern struct acpi_rsdump_info acpi_rs_dump_end_tag[];
324 extern struct acpi_rsdump_info acpi_rs_dump_memory24[];
325 extern struct acpi_rsdump_info acpi_rs_dump_memory32[];
326 extern struct acpi_rsdump_info acpi_rs_dump_fixed_memory32[];
327 extern struct acpi_rsdump_info acpi_rs_dump_address16[];
328 extern struct acpi_rsdump_info acpi_rs_dump_address32[];
329 extern struct acpi_rsdump_info acpi_rs_dump_address64[];
330 extern struct acpi_rsdump_info acpi_rs_dump_ext_address64[];
331 extern struct acpi_rsdump_info acpi_rs_dump_ext_irq[];
332 extern struct acpi_rsdump_info acpi_rs_dump_generic_reg[];
333 #endif
334
335 #endif                          /* __ACRESRC_H__ */