1 |
62 |
marcus.erl |
/******************************************************************************
|
2 |
|
|
*
|
3 |
|
|
* Name: acresrc.h - Resource Manager function prototypes
|
4 |
|
|
*
|
5 |
|
|
*****************************************************************************/
|
6 |
|
|
|
7 |
|
|
/*
|
8 |
|
|
* Copyright (C) 2000 - 2007, 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__ */
|