1 | /****************************************************************************** |
2 | * |
3 | * Name: acresrc.h - Resource Manager function prototypes |
4 | * |
5 | *****************************************************************************/ |
6 | |
7 | /* |
8 | * Copyright (C) 2000 - 2016, 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 | typedef enum |
79 | { |
80 | ACPI_RSC_INITGET = 0, |
81 | ACPI_RSC_INITSET, |
82 | ACPI_RSC_FLAGINIT, |
83 | ACPI_RSC_1BITFLAG, |
84 | ACPI_RSC_2BITFLAG, |
85 | ACPI_RSC_3BITFLAG, |
86 | ACPI_RSC_ADDRESS, |
87 | ACPI_RSC_BITMASK, |
88 | ACPI_RSC_BITMASK16, |
89 | ACPI_RSC_COUNT, |
90 | ACPI_RSC_COUNT16, |
91 | ACPI_RSC_COUNT_GPIO_PIN, |
92 | ACPI_RSC_COUNT_GPIO_RES, |
93 | ACPI_RSC_COUNT_GPIO_VEN, |
94 | ACPI_RSC_COUNT_SERIAL_RES, |
95 | ACPI_RSC_COUNT_SERIAL_VEN, |
96 | ACPI_RSC_DATA8, |
97 | ACPI_RSC_EXIT_EQ, |
98 | ACPI_RSC_EXIT_LE, |
99 | ACPI_RSC_EXIT_NE, |
100 | ACPI_RSC_LENGTH, |
101 | ACPI_RSC_MOVE_GPIO_PIN, |
102 | ACPI_RSC_MOVE_GPIO_RES, |
103 | ACPI_RSC_MOVE_SERIAL_RES, |
104 | ACPI_RSC_MOVE_SERIAL_VEN, |
105 | ACPI_RSC_MOVE8, |
106 | ACPI_RSC_MOVE16, |
107 | ACPI_RSC_MOVE32, |
108 | ACPI_RSC_MOVE64, |
109 | ACPI_RSC_SET8, |
110 | ACPI_RSC_SOURCE, |
111 | ACPI_RSC_SOURCEX |
112 | |
113 | } ACPI_RSCONVERT_OPCODES; |
114 | |
115 | /* Resource Conversion sub-opcodes */ |
116 | |
117 | #define ACPI_RSC_COMPARE_AML_LENGTH 0 |
118 | #define ACPI_RSC_COMPARE_VALUE 1 |
119 | |
120 | #define ACPI_RSC_TABLE_SIZE(d) (sizeof (d) / sizeof (ACPI_RSCONVERT_INFO)) |
121 | |
122 | #define ACPI_RS_OFFSET(f) (UINT8) ACPI_OFFSET (ACPI_RESOURCE,f) |
123 | #define AML_OFFSET(f) (UINT8) ACPI_OFFSET (AML_RESOURCE,f) |
124 | |
125 | |
126 | /* |
127 | * Individual entry for the resource dump tables |
128 | */ |
129 | typedef const struct acpi_rsdump_info |
130 | { |
131 | UINT8 Opcode; |
132 | UINT8 Offset; |
133 | const char *Name; |
134 | const char **Pointer; |
135 | |
136 | } ACPI_RSDUMP_INFO; |
137 | |
138 | /* Values for the Opcode field above */ |
139 | |
140 | typedef enum |
141 | { |
142 | ACPI_RSD_TITLE = 0, |
143 | ACPI_RSD_1BITFLAG, |
144 | ACPI_RSD_2BITFLAG, |
145 | ACPI_RSD_3BITFLAG, |
146 | ACPI_RSD_ADDRESS, |
147 | ACPI_RSD_DWORDLIST, |
148 | ACPI_RSD_LITERAL, |
149 | ACPI_RSD_LONGLIST, |
150 | ACPI_RSD_SHORTLIST, |
151 | ACPI_RSD_SHORTLISTX, |
152 | ACPI_RSD_SOURCE, |
153 | ACPI_RSD_STRING, |
154 | ACPI_RSD_UINT8, |
155 | ACPI_RSD_UINT16, |
156 | ACPI_RSD_UINT32, |
157 | ACPI_RSD_UINT64, |
158 | ACPI_RSD_WORDLIST |
159 | |
160 | } ACPI_RSDUMP_OPCODES; |
161 | |
162 | /* restore default alignment */ |
163 | |
164 | #pragma pack() |
165 | |
166 | |
167 | /* Resource tables indexed by internal resource type */ |
168 | |
169 | extern const UINT8 AcpiGbl_AmlResourceSizes[]; |
170 | extern const UINT8 AcpiGbl_AmlResourceSerialBusSizes[]; |
171 | extern ACPI_RSCONVERT_INFO *AcpiGbl_SetResourceDispatch[]; |
172 | |
173 | /* Resource tables indexed by raw AML resource descriptor type */ |
174 | |
175 | extern const UINT8 AcpiGbl_ResourceStructSizes[]; |
176 | extern const UINT8 AcpiGbl_ResourceStructSerialBusSizes[]; |
177 | extern ACPI_RSCONVERT_INFO *AcpiGbl_GetResourceDispatch[]; |
178 | |
179 | extern ACPI_RSCONVERT_INFO *AcpiGbl_ConvertResourceSerialBusDispatch[]; |
180 | |
181 | typedef struct acpi_vendor_walk_info |
182 | { |
183 | ACPI_VENDOR_UUID *Uuid; |
184 | ACPI_BUFFER *Buffer; |
185 | ACPI_STATUS Status; |
186 | |
187 | } ACPI_VENDOR_WALK_INFO; |
188 | |
189 | |
190 | /* |
191 | * rscreate |
192 | */ |
193 | ACPI_STATUS |
194 | AcpiRsCreateResourceList ( |
195 | ACPI_OPERAND_OBJECT *AmlBuffer, |
196 | ACPI_BUFFER *OutputBuffer); |
197 | |
198 | ACPI_STATUS |
199 | AcpiRsCreateAmlResources ( |
200 | ACPI_BUFFER *ResourceList, |
201 | ACPI_BUFFER *OutputBuffer); |
202 | |
203 | ACPI_STATUS |
204 | AcpiRsCreatePciRoutingTable ( |
205 | ACPI_OPERAND_OBJECT *PackageObject, |
206 | ACPI_BUFFER *OutputBuffer); |
207 | |
208 | |
209 | /* |
210 | * rsutils |
211 | */ |
212 | ACPI_STATUS |
213 | AcpiRsGetPrtMethodData ( |
214 | ACPI_NAMESPACE_NODE *Node, |
215 | ACPI_BUFFER *RetBuffer); |
216 | |
217 | ACPI_STATUS |
218 | AcpiRsGetCrsMethodData ( |
219 | ACPI_NAMESPACE_NODE *Node, |
220 | ACPI_BUFFER *RetBuffer); |
221 | |
222 | ACPI_STATUS |
223 | AcpiRsGetPrsMethodData ( |
224 | ACPI_NAMESPACE_NODE *Node, |
225 | ACPI_BUFFER *RetBuffer); |
226 | |
227 | ACPI_STATUS |
228 | AcpiRsGetMethodData ( |
229 | ACPI_HANDLE Handle, |
230 | const char *Path, |
231 | ACPI_BUFFER *RetBuffer); |
232 | |
233 | ACPI_STATUS |
234 | ( |
235 | ACPI_NAMESPACE_NODE *Node, |
236 | ACPI_BUFFER *RetBuffer); |
237 | |
238 | ACPI_STATUS |
239 | AcpiRsGetAeiMethodData ( |
240 | ACPI_NAMESPACE_NODE *Node, |
241 | ACPI_BUFFER *RetBuffer); |
242 | |
243 | /* |
244 | * rscalc |
245 | */ |
246 | ACPI_STATUS |
247 | AcpiRsGetListLength ( |
248 | UINT8 *AmlBuffer, |
249 | UINT32 AmlBufferLength, |
250 | ACPI_SIZE *SizeNeeded); |
251 | |
252 | ACPI_STATUS |
253 | AcpiRsGetAmlLength ( |
254 | ACPI_RESOURCE *ResourceList, |
255 | ACPI_SIZE ResourceListSize, |
256 | ACPI_SIZE *SizeNeeded); |
257 | |
258 | ACPI_STATUS |
259 | AcpiRsGetPciRoutingTableLength ( |
260 | ACPI_OPERAND_OBJECT *PackageObject, |
261 | ACPI_SIZE *BufferSizeNeeded); |
262 | |
263 | ACPI_STATUS |
264 | AcpiRsConvertAmlToResources ( |
265 | UINT8 *Aml, |
266 | UINT32 Length, |
267 | UINT32 Offset, |
268 | UINT8 ResourceIndex, |
269 | void **Context); |
270 | |
271 | ACPI_STATUS |
272 | AcpiRsConvertResourcesToAml ( |
273 | ACPI_RESOURCE *Resource, |
274 | ACPI_SIZE AmlSizeNeeded, |
275 | UINT8 *OutputBuffer); |
276 | |
277 | |
278 | /* |
279 | * rsaddr |
280 | */ |
281 | void |
282 | ( |
283 | AML_RESOURCE *Aml, |
284 | ACPI_RESOURCE *Resource); |
285 | |
286 | BOOLEAN |
287 | AcpiRsGetAddressCommon ( |
288 | ACPI_RESOURCE *Resource, |
289 | AML_RESOURCE *Aml); |
290 | |
291 | |
292 | /* |
293 | * rsmisc |
294 | */ |
295 | ACPI_STATUS |
296 | AcpiRsConvertAmlToResource ( |
297 | ACPI_RESOURCE *Resource, |
298 | AML_RESOURCE *Aml, |
299 | ACPI_RSCONVERT_INFO *Info); |
300 | |
301 | ACPI_STATUS |
302 | AcpiRsConvertResourceToAml ( |
303 | ACPI_RESOURCE *Resource, |
304 | AML_RESOURCE *Aml, |
305 | ACPI_RSCONVERT_INFO *Info); |
306 | |
307 | |
308 | /* |
309 | * rsutils |
310 | */ |
311 | void |
312 | AcpiRsMoveData ( |
313 | void *Destination, |
314 | void *Source, |
315 | UINT16 ItemCount, |
316 | UINT8 MoveType); |
317 | |
318 | UINT8 |
319 | AcpiRsDecodeBitmask ( |
320 | UINT16 Mask, |
321 | UINT8 *List); |
322 | |
323 | UINT16 |
324 | AcpiRsEncodeBitmask ( |
325 | UINT8 *List, |
326 | UINT8 Count); |
327 | |
328 | ACPI_RS_LENGTH |
329 | AcpiRsGetResourceSource ( |
330 | ACPI_RS_LENGTH ResourceLength, |
331 | ACPI_RS_LENGTH MinimumLength, |
332 | ACPI_RESOURCE_SOURCE *ResourceSource, |
333 | AML_RESOURCE *Aml, |
334 | char *StringPtr); |
335 | |
336 | ACPI_RSDESC_SIZE |
337 | ( |
338 | AML_RESOURCE *Aml, |
339 | ACPI_RS_LENGTH MinimumLength, |
340 | ACPI_RESOURCE_SOURCE *ResourceSource); |
341 | |
342 | void |
343 | ( |
344 | UINT8 DescriptorType, |
345 | ACPI_RSDESC_SIZE TotalLength, |
346 | AML_RESOURCE *Aml); |
347 | |
348 | void |
349 | ( |
350 | ACPI_RSDESC_SIZE TotalLength, |
351 | AML_RESOURCE *Aml); |
352 | |
353 | |
354 | /* |
355 | * rsdump - Debugger support |
356 | */ |
357 | #ifdef ACPI_DEBUGGER |
358 | void |
359 | AcpiRsDumpResourceList ( |
360 | ACPI_RESOURCE *Resource); |
361 | |
362 | void |
363 | AcpiRsDumpIrqList ( |
364 | UINT8 *RouteTable); |
365 | #endif |
366 | |
367 | |
368 | /* |
369 | * Resource conversion tables |
370 | */ |
371 | extern ACPI_RSCONVERT_INFO AcpiRsConvertDma[]; |
372 | extern ACPI_RSCONVERT_INFO AcpiRsConvertEndDpf[]; |
373 | extern ACPI_RSCONVERT_INFO AcpiRsConvertIo[]; |
374 | extern ACPI_RSCONVERT_INFO AcpiRsConvertFixedIo[]; |
375 | extern ACPI_RSCONVERT_INFO AcpiRsConvertEndTag[]; |
376 | extern ACPI_RSCONVERT_INFO AcpiRsConvertMemory24[]; |
377 | extern ACPI_RSCONVERT_INFO AcpiRsConvertGenericReg[]; |
378 | extern ACPI_RSCONVERT_INFO AcpiRsConvertMemory32[]; |
379 | extern ACPI_RSCONVERT_INFO AcpiRsConvertFixedMemory32[]; |
380 | extern ACPI_RSCONVERT_INFO AcpiRsConvertAddress32[]; |
381 | extern ACPI_RSCONVERT_INFO AcpiRsConvertAddress16[]; |
382 | extern ACPI_RSCONVERT_INFO AcpiRsConvertExtIrq[]; |
383 | extern ACPI_RSCONVERT_INFO AcpiRsConvertAddress64[]; |
384 | extern ACPI_RSCONVERT_INFO AcpiRsConvertExtAddress64[]; |
385 | extern ACPI_RSCONVERT_INFO AcpiRsConvertGpio[]; |
386 | extern ACPI_RSCONVERT_INFO AcpiRsConvertFixedDma[]; |
387 | extern ACPI_RSCONVERT_INFO AcpiRsConvertI2cSerialBus[]; |
388 | extern ACPI_RSCONVERT_INFO AcpiRsConvertSpiSerialBus[]; |
389 | extern ACPI_RSCONVERT_INFO AcpiRsConvertUartSerialBus[]; |
390 | |
391 | /* These resources require separate get/set tables */ |
392 | |
393 | extern ACPI_RSCONVERT_INFO AcpiRsGetIrq[]; |
394 | extern ACPI_RSCONVERT_INFO AcpiRsGetStartDpf[]; |
395 | extern ACPI_RSCONVERT_INFO AcpiRsGetVendorSmall[]; |
396 | extern ACPI_RSCONVERT_INFO AcpiRsGetVendorLarge[]; |
397 | |
398 | extern ACPI_RSCONVERT_INFO []; |
399 | extern ACPI_RSCONVERT_INFO []; |
400 | extern ACPI_RSCONVERT_INFO []; |
401 | |
402 | |
403 | #if defined(ACPI_DEBUG_OUTPUT) || defined(ACPI_DEBUGGER) |
404 | /* |
405 | * rsinfo |
406 | */ |
407 | extern ACPI_RSDUMP_INFO *AcpiGbl_DumpResourceDispatch[]; |
408 | extern ACPI_RSDUMP_INFO *AcpiGbl_DumpSerialBusDispatch[]; |
409 | |
410 | /* |
411 | * rsdumpinfo |
412 | */ |
413 | extern ACPI_RSDUMP_INFO AcpiRsDumpIrq[]; |
414 | extern ACPI_RSDUMP_INFO AcpiRsDumpPrt[]; |
415 | extern ACPI_RSDUMP_INFO AcpiRsDumpDma[]; |
416 | extern ACPI_RSDUMP_INFO AcpiRsDumpStartDpf[]; |
417 | extern ACPI_RSDUMP_INFO AcpiRsDumpEndDpf[]; |
418 | extern ACPI_RSDUMP_INFO AcpiRsDumpIo[]; |
419 | extern ACPI_RSDUMP_INFO AcpiRsDumpIoFlags[]; |
420 | extern ACPI_RSDUMP_INFO AcpiRsDumpFixedIo[]; |
421 | extern ACPI_RSDUMP_INFO AcpiRsDumpVendor[]; |
422 | extern ACPI_RSDUMP_INFO AcpiRsDumpEndTag[]; |
423 | extern ACPI_RSDUMP_INFO AcpiRsDumpMemory24[]; |
424 | extern ACPI_RSDUMP_INFO AcpiRsDumpMemory32[]; |
425 | extern ACPI_RSDUMP_INFO AcpiRsDumpMemoryFlags[]; |
426 | extern ACPI_RSDUMP_INFO AcpiRsDumpFixedMemory32[]; |
427 | extern ACPI_RSDUMP_INFO AcpiRsDumpAddress16[]; |
428 | extern ACPI_RSDUMP_INFO AcpiRsDumpAddress32[]; |
429 | extern ACPI_RSDUMP_INFO AcpiRsDumpAddress64[]; |
430 | extern ACPI_RSDUMP_INFO AcpiRsDumpExtAddress64[]; |
431 | extern ACPI_RSDUMP_INFO AcpiRsDumpExtIrq[]; |
432 | extern ACPI_RSDUMP_INFO AcpiRsDumpGenericReg[]; |
433 | extern ACPI_RSDUMP_INFO AcpiRsDumpGpio[]; |
434 | extern ACPI_RSDUMP_INFO AcpiRsDumpFixedDma[]; |
435 | extern ACPI_RSDUMP_INFO AcpiRsDumpCommonSerialBus[]; |
436 | extern ACPI_RSDUMP_INFO AcpiRsDumpI2cSerialBus[]; |
437 | extern ACPI_RSDUMP_INFO AcpiRsDumpSpiSerialBus[]; |
438 | extern ACPI_RSDUMP_INFO AcpiRsDumpUartSerialBus[]; |
439 | extern ACPI_RSDUMP_INFO AcpiRsDumpGeneralFlags[]; |
440 | #endif |
441 | |
442 | #endif /* __ACRESRC_H__ */ |
443 | |