acresrc.h revision 1.3 1 /******************************************************************************
2 *
3 * Name: acresrc.h - Resource Manager function prototypes
4 *
5 *****************************************************************************/
6
7 /*
8 * Copyright (C) 2000 - 2011, Intel Corp.
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 /*
53 * If possible, pack the following structures to byte alignment, since we
54 * don't care about performance for debug output. Two cases where we cannot
55 * pack the structures:
56 *
57 * 1) Hardware does not support misaligned memory transfers
58 * 2) Compiler does not support pointers within packed structures
59 */
60 #if (!defined(ACPI_MISALIGNMENT_NOT_SUPPORTED) && !defined(ACPI_PACKED_POINTERS_NOT_SUPPORTED))
61 #pragma pack(1)
62 #endif
63
64 /*
65 * Individual entry for the resource conversion tables
66 */
67 typedef const struct acpi_rsconvert_info
68 {
69 UINT8 Opcode;
70 UINT8 ResourceOffset;
71 UINT8 AmlOffset;
72 UINT8 Value;
73
74 } ACPI_RSCONVERT_INFO;
75
76 /* Resource conversion opcodes */
77
78 #define ACPI_RSC_INITGET 0
79 #define ACPI_RSC_INITSET 1
80 #define ACPI_RSC_FLAGINIT 2
81 #define ACPI_RSC_1BITFLAG 3
82 #define ACPI_RSC_2BITFLAG 4
83 #define ACPI_RSC_COUNT 5
84 #define ACPI_RSC_COUNT16 6
85 #define ACPI_RSC_LENGTH 7
86 #define ACPI_RSC_MOVE8 8
87 #define ACPI_RSC_MOVE16 9
88 #define ACPI_RSC_MOVE32 10
89 #define ACPI_RSC_MOVE64 11
90 #define ACPI_RSC_SET8 12
91 #define ACPI_RSC_DATA8 13
92 #define ACPI_RSC_ADDRESS 14
93 #define ACPI_RSC_SOURCE 15
94 #define ACPI_RSC_SOURCEX 16
95 #define ACPI_RSC_BITMASK 17
96 #define ACPI_RSC_BITMASK16 18
97 #define ACPI_RSC_EXIT_NE 19
98 #define ACPI_RSC_EXIT_LE 20
99 #define ACPI_RSC_EXIT_EQ 21
100
101 /* Resource Conversion sub-opcodes */
102
103 #define ACPI_RSC_COMPARE_AML_LENGTH 0
104 #define ACPI_RSC_COMPARE_VALUE 1
105
106 #define ACPI_RSC_TABLE_SIZE(d) (sizeof (d) / sizeof (ACPI_RSCONVERT_INFO))
107
108 #define ACPI_RS_OFFSET(f) (UINT8) ACPI_OFFSET (ACPI_RESOURCE,f)
109 #define AML_OFFSET(f) (UINT8) ACPI_OFFSET (AML_RESOURCE,f)
110
111
112 typedef const struct acpi_rsdump_info
113 {
114 UINT8 Opcode;
115 UINT8 Offset;
116 const char *Name;
117 const char * const *Pointer;
118
119 } ACPI_RSDUMP_INFO;
120
121 /* Values for the Opcode field above */
122
123 #define ACPI_RSD_TITLE 0
124 #define ACPI_RSD_LITERAL 1
125 #define ACPI_RSD_STRING 2
126 #define ACPI_RSD_UINT8 3
127 #define ACPI_RSD_UINT16 4
128 #define ACPI_RSD_UINT32 5
129 #define ACPI_RSD_UINT64 6
130 #define ACPI_RSD_1BITFLAG 7
131 #define ACPI_RSD_2BITFLAG 8
132 #define ACPI_RSD_SHORTLIST 9
133 #define ACPI_RSD_LONGLIST 10
134 #define ACPI_RSD_DWORDLIST 11
135 #define ACPI_RSD_ADDRESS 12
136 #define ACPI_RSD_SOURCE 13
137
138 /* restore default alignment */
139
140 #pragma pack()
141
142
143 /* Resource tables indexed by internal resource type */
144
145 extern const UINT8 AcpiGbl_AmlResourceSizes[];
146 extern ACPI_RSCONVERT_INFO *AcpiGbl_SetResourceDispatch[];
147
148 /* Resource tables indexed by raw AML resource descriptor type */
149
150 extern const UINT8 AcpiGbl_ResourceStructSizes[];
151 extern ACPI_RSCONVERT_INFO *AcpiGbl_GetResourceDispatch[];
152
153
154 typedef struct acpi_vendor_walk_info
155 {
156 ACPI_VENDOR_UUID *Uuid;
157 ACPI_BUFFER *Buffer;
158 ACPI_STATUS Status;
159
160 } ACPI_VENDOR_WALK_INFO;
161
162
163 /*
164 * rscreate
165 */
166 ACPI_STATUS
167 AcpiRsCreateResourceList (
168 ACPI_OPERAND_OBJECT *AmlBuffer,
169 ACPI_BUFFER *OutputBuffer);
170
171 ACPI_STATUS
172 AcpiRsCreateAmlResources (
173 ACPI_RESOURCE *LinkedListBuffer,
174 ACPI_BUFFER *OutputBuffer);
175
176 ACPI_STATUS
177 AcpiRsCreatePciRoutingTable (
178 ACPI_OPERAND_OBJECT *PackageObject,
179 ACPI_BUFFER *OutputBuffer);
180
181
182 /*
183 * rsutils
184 */
185 ACPI_STATUS
186 AcpiRsGetPrtMethodData (
187 ACPI_NAMESPACE_NODE *Node,
188 ACPI_BUFFER *RetBuffer);
189
190 ACPI_STATUS
191 AcpiRsGetCrsMethodData (
192 ACPI_NAMESPACE_NODE *Node,
193 ACPI_BUFFER *RetBuffer);
194
195 ACPI_STATUS
196 AcpiRsGetPrsMethodData (
197 ACPI_NAMESPACE_NODE *Node,
198 ACPI_BUFFER *RetBuffer);
199
200 ACPI_STATUS
201 AcpiRsGetMethodData (
202 ACPI_HANDLE Handle,
203 char *Path,
204 ACPI_BUFFER *RetBuffer);
205
206 ACPI_STATUS
207 AcpiRsSetSrsMethodData (
208 ACPI_NAMESPACE_NODE *Node,
209 ACPI_BUFFER *RetBuffer);
210
211
212 /*
213 * rscalc
214 */
215 ACPI_STATUS
216 AcpiRsGetListLength (
217 UINT8 *AmlBuffer,
218 UINT32 AmlBufferLength,
219 ACPI_SIZE *SizeNeeded);
220
221 ACPI_STATUS
222 AcpiRsGetAmlLength (
223 ACPI_RESOURCE *LinkedListBuffer,
224 ACPI_SIZE *SizeNeeded);
225
226 ACPI_STATUS
227 AcpiRsGetPciRoutingTableLength (
228 ACPI_OPERAND_OBJECT *PackageObject,
229 ACPI_SIZE *BufferSizeNeeded);
230
231 ACPI_STATUS
232 AcpiRsConvertAmlToResources (
233 UINT8 *Aml,
234 UINT32 Length,
235 UINT32 Offset,
236 UINT8 ResourceIndex,
237 void *Context);
238
239 ACPI_STATUS
240 AcpiRsConvertResourcesToAml (
241 ACPI_RESOURCE *Resource,
242 ACPI_SIZE AmlSizeNeeded,
243 UINT8 *OutputBuffer);
244
245
246 /*
247 * rsaddr
248 */
249 void
250 AcpiRsSetAddressCommon (
251 AML_RESOURCE *Aml,
252 ACPI_RESOURCE *Resource);
253
254 BOOLEAN
255 AcpiRsGetAddressCommon (
256 ACPI_RESOURCE *Resource,
257 AML_RESOURCE *Aml);
258
259
260 /*
261 * rsmisc
262 */
263 ACPI_STATUS
264 AcpiRsConvertAmlToResource (
265 ACPI_RESOURCE *Resource,
266 AML_RESOURCE *Aml,
267 ACPI_RSCONVERT_INFO *Info);
268
269 ACPI_STATUS
270 AcpiRsConvertResourceToAml (
271 ACPI_RESOURCE *Resource,
272 AML_RESOURCE *Aml,
273 ACPI_RSCONVERT_INFO *Info);
274
275
276 /*
277 * rsutils
278 */
279 void
280 AcpiRsMoveData (
281 void *Destination,
282 void *Source,
283 UINT16 ItemCount,
284 UINT8 MoveType);
285
286 UINT8
287 AcpiRsDecodeBitmask (
288 UINT16 Mask,
289 UINT8 *List);
290
291 UINT16
292 AcpiRsEncodeBitmask (
293 UINT8 *List,
294 UINT8 Count);
295
296 ACPI_RS_LENGTH
297 AcpiRsGetResourceSource (
298 ACPI_RS_LENGTH ResourceLength,
299 ACPI_RS_LENGTH MinimumLength,
300 ACPI_RESOURCE_SOURCE *ResourceSource,
301 AML_RESOURCE *Aml,
302 char *StringPtr);
303
304 ACPI_RSDESC_SIZE
305 AcpiRsSetResourceSource (
306 AML_RESOURCE *Aml,
307 ACPI_RS_LENGTH MinimumLength,
308 ACPI_RESOURCE_SOURCE *ResourceSource);
309
310 void
311 AcpiRsSetResourceHeader (
312 UINT8 DescriptorType,
313 ACPI_RSDESC_SIZE TotalLength,
314 AML_RESOURCE *Aml);
315
316 void
317 AcpiRsSetResourceLength (
318 ACPI_RSDESC_SIZE TotalLength,
319 AML_RESOURCE *Aml);
320
321
322 /*
323 * rsdump
324 */
325 void
326 AcpiRsDumpResourceList (
327 ACPI_RESOURCE *Resource);
328
329 void
330 AcpiRsDumpIrqList (
331 UINT8 *RouteTable);
332
333
334 /*
335 * Resource conversion tables
336 */
337 extern ACPI_RSCONVERT_INFO AcpiRsConvertDma[];
338 extern ACPI_RSCONVERT_INFO AcpiRsConvertEndDpf[];
339 extern ACPI_RSCONVERT_INFO AcpiRsConvertIo[];
340 extern ACPI_RSCONVERT_INFO AcpiRsConvertFixedIo[];
341 extern ACPI_RSCONVERT_INFO AcpiRsConvertEndTag[];
342 extern ACPI_RSCONVERT_INFO AcpiRsConvertMemory24[];
343 extern ACPI_RSCONVERT_INFO AcpiRsConvertGenericReg[];
344 extern ACPI_RSCONVERT_INFO AcpiRsConvertMemory32[];
345 extern ACPI_RSCONVERT_INFO AcpiRsConvertFixedMemory32[];
346 extern ACPI_RSCONVERT_INFO AcpiRsConvertAddress32[];
347 extern ACPI_RSCONVERT_INFO AcpiRsConvertAddress16[];
348 extern ACPI_RSCONVERT_INFO AcpiRsConvertExtIrq[];
349 extern ACPI_RSCONVERT_INFO AcpiRsConvertAddress64[];
350 extern ACPI_RSCONVERT_INFO AcpiRsConvertExtAddress64[];
351
352 /* These resources require separate get/set tables */
353
354 extern ACPI_RSCONVERT_INFO AcpiRsGetIrq[];
355 extern ACPI_RSCONVERT_INFO AcpiRsGetStartDpf[];
356 extern ACPI_RSCONVERT_INFO AcpiRsGetVendorSmall[];
357 extern ACPI_RSCONVERT_INFO AcpiRsGetVendorLarge[];
358
359 extern ACPI_RSCONVERT_INFO AcpiRsSetIrq[];
360 extern ACPI_RSCONVERT_INFO AcpiRsSetStartDpf[];
361 extern ACPI_RSCONVERT_INFO AcpiRsSetVendor[];
362
363
364 #if defined(ACPI_DEBUG_OUTPUT) || defined(ACPI_DEBUGGER)
365 /*
366 * rsinfo
367 */
368 extern ACPI_RSDUMP_INFO *AcpiGbl_DumpResourceDispatch[];
369
370 /*
371 * rsdump
372 */
373 extern ACPI_RSDUMP_INFO AcpiRsDumpIrq[];
374 extern ACPI_RSDUMP_INFO AcpiRsDumpDma[];
375 extern ACPI_RSDUMP_INFO AcpiRsDumpStartDpf[];
376 extern ACPI_RSDUMP_INFO AcpiRsDumpEndDpf[];
377 extern ACPI_RSDUMP_INFO AcpiRsDumpIo[];
378 extern ACPI_RSDUMP_INFO AcpiRsDumpFixedIo[];
379 extern ACPI_RSDUMP_INFO AcpiRsDumpVendor[];
380 extern ACPI_RSDUMP_INFO AcpiRsDumpEndTag[];
381 extern ACPI_RSDUMP_INFO AcpiRsDumpMemory24[];
382 extern ACPI_RSDUMP_INFO AcpiRsDumpMemory32[];
383 extern ACPI_RSDUMP_INFO AcpiRsDumpFixedMemory32[];
384 extern ACPI_RSDUMP_INFO AcpiRsDumpAddress16[];
385 extern ACPI_RSDUMP_INFO AcpiRsDumpAddress32[];
386 extern ACPI_RSDUMP_INFO AcpiRsDumpAddress64[];
387 extern ACPI_RSDUMP_INFO AcpiRsDumpExtAddress64[];
388 extern ACPI_RSDUMP_INFO AcpiRsDumpExtIrq[];
389 extern ACPI_RSDUMP_INFO AcpiRsDumpGenericReg[];
390 #endif
391
392 #endif /* __ACRESRC_H__ */
393