acresrc.h revision 306536
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 <contrib/dev/acpica/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 */ 67typedef 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 78typedef 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 */ 129typedef 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 140typedef 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 169extern const UINT8 AcpiGbl_AmlResourceSizes[]; 170extern const UINT8 AcpiGbl_AmlResourceSerialBusSizes[]; 171extern ACPI_RSCONVERT_INFO *AcpiGbl_SetResourceDispatch[]; 172 173/* Resource tables indexed by raw AML resource descriptor type */ 174 175extern const UINT8 AcpiGbl_ResourceStructSizes[]; 176extern const UINT8 AcpiGbl_ResourceStructSerialBusSizes[]; 177extern ACPI_RSCONVERT_INFO *AcpiGbl_GetResourceDispatch[]; 178 179extern ACPI_RSCONVERT_INFO *AcpiGbl_ConvertResourceSerialBusDispatch[]; 180 181typedef 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 */ 193ACPI_STATUS 194AcpiRsCreateResourceList ( 195 ACPI_OPERAND_OBJECT *AmlBuffer, 196 ACPI_BUFFER *OutputBuffer); 197 198ACPI_STATUS 199AcpiRsCreateAmlResources ( 200 ACPI_BUFFER *ResourceList, 201 ACPI_BUFFER *OutputBuffer); 202 203ACPI_STATUS 204AcpiRsCreatePciRoutingTable ( 205 ACPI_OPERAND_OBJECT *PackageObject, 206 ACPI_BUFFER *OutputBuffer); 207 208 209/* 210 * rsutils 211 */ 212ACPI_STATUS 213AcpiRsGetPrtMethodData ( 214 ACPI_NAMESPACE_NODE *Node, 215 ACPI_BUFFER *RetBuffer); 216 217ACPI_STATUS 218AcpiRsGetCrsMethodData ( 219 ACPI_NAMESPACE_NODE *Node, 220 ACPI_BUFFER *RetBuffer); 221 222ACPI_STATUS 223AcpiRsGetPrsMethodData ( 224 ACPI_NAMESPACE_NODE *Node, 225 ACPI_BUFFER *RetBuffer); 226 227ACPI_STATUS 228AcpiRsGetMethodData ( 229 ACPI_HANDLE Handle, 230 const char *Path, 231 ACPI_BUFFER *RetBuffer); 232 233ACPI_STATUS 234AcpiRsSetSrsMethodData ( 235 ACPI_NAMESPACE_NODE *Node, 236 ACPI_BUFFER *RetBuffer); 237 238ACPI_STATUS 239AcpiRsGetAeiMethodData ( 240 ACPI_NAMESPACE_NODE *Node, 241 ACPI_BUFFER *RetBuffer); 242 243/* 244 * rscalc 245 */ 246ACPI_STATUS 247AcpiRsGetListLength ( 248 UINT8 *AmlBuffer, 249 UINT32 AmlBufferLength, 250 ACPI_SIZE *SizeNeeded); 251 252ACPI_STATUS 253AcpiRsGetAmlLength ( 254 ACPI_RESOURCE *ResourceList, 255 ACPI_SIZE ResourceListSize, 256 ACPI_SIZE *SizeNeeded); 257 258ACPI_STATUS 259AcpiRsGetPciRoutingTableLength ( 260 ACPI_OPERAND_OBJECT *PackageObject, 261 ACPI_SIZE *BufferSizeNeeded); 262 263ACPI_STATUS 264AcpiRsConvertAmlToResources ( 265 UINT8 *Aml, 266 UINT32 Length, 267 UINT32 Offset, 268 UINT8 ResourceIndex, 269 void **Context); 270 271ACPI_STATUS 272AcpiRsConvertResourcesToAml ( 273 ACPI_RESOURCE *Resource, 274 ACPI_SIZE AmlSizeNeeded, 275 UINT8 *OutputBuffer); 276 277 278/* 279 * rsaddr 280 */ 281void 282AcpiRsSetAddressCommon ( 283 AML_RESOURCE *Aml, 284 ACPI_RESOURCE *Resource); 285 286BOOLEAN 287AcpiRsGetAddressCommon ( 288 ACPI_RESOURCE *Resource, 289 AML_RESOURCE *Aml); 290 291 292/* 293 * rsmisc 294 */ 295ACPI_STATUS 296AcpiRsConvertAmlToResource ( 297 ACPI_RESOURCE *Resource, 298 AML_RESOURCE *Aml, 299 ACPI_RSCONVERT_INFO *Info); 300 301ACPI_STATUS 302AcpiRsConvertResourceToAml ( 303 ACPI_RESOURCE *Resource, 304 AML_RESOURCE *Aml, 305 ACPI_RSCONVERT_INFO *Info); 306 307 308/* 309 * rsutils 310 */ 311void 312AcpiRsMoveData ( 313 void *Destination, 314 void *Source, 315 UINT16 ItemCount, 316 UINT8 MoveType); 317 318UINT8 319AcpiRsDecodeBitmask ( 320 UINT16 Mask, 321 UINT8 *List); 322 323UINT16 324AcpiRsEncodeBitmask ( 325 UINT8 *List, 326 UINT8 Count); 327 328ACPI_RS_LENGTH 329AcpiRsGetResourceSource ( 330 ACPI_RS_LENGTH ResourceLength, 331 ACPI_RS_LENGTH MinimumLength, 332 ACPI_RESOURCE_SOURCE *ResourceSource, 333 AML_RESOURCE *Aml, 334 char *StringPtr); 335 336ACPI_RSDESC_SIZE 337AcpiRsSetResourceSource ( 338 AML_RESOURCE *Aml, 339 ACPI_RS_LENGTH MinimumLength, 340 ACPI_RESOURCE_SOURCE *ResourceSource); 341 342void 343AcpiRsSetResourceHeader ( 344 UINT8 DescriptorType, 345 ACPI_RSDESC_SIZE TotalLength, 346 AML_RESOURCE *Aml); 347 348void 349AcpiRsSetResourceLength ( 350 ACPI_RSDESC_SIZE TotalLength, 351 AML_RESOURCE *Aml); 352 353 354/* 355 * rsdump - Debugger support 356 */ 357#ifdef ACPI_DEBUGGER 358void 359AcpiRsDumpResourceList ( 360 ACPI_RESOURCE *Resource); 361 362void 363AcpiRsDumpIrqList ( 364 UINT8 *RouteTable); 365#endif 366 367 368/* 369 * Resource conversion tables 370 */ 371extern ACPI_RSCONVERT_INFO AcpiRsConvertDma[]; 372extern ACPI_RSCONVERT_INFO AcpiRsConvertEndDpf[]; 373extern ACPI_RSCONVERT_INFO AcpiRsConvertIo[]; 374extern ACPI_RSCONVERT_INFO AcpiRsConvertFixedIo[]; 375extern ACPI_RSCONVERT_INFO AcpiRsConvertEndTag[]; 376extern ACPI_RSCONVERT_INFO AcpiRsConvertMemory24[]; 377extern ACPI_RSCONVERT_INFO AcpiRsConvertGenericReg[]; 378extern ACPI_RSCONVERT_INFO AcpiRsConvertMemory32[]; 379extern ACPI_RSCONVERT_INFO AcpiRsConvertFixedMemory32[]; 380extern ACPI_RSCONVERT_INFO AcpiRsConvertAddress32[]; 381extern ACPI_RSCONVERT_INFO AcpiRsConvertAddress16[]; 382extern ACPI_RSCONVERT_INFO AcpiRsConvertExtIrq[]; 383extern ACPI_RSCONVERT_INFO AcpiRsConvertAddress64[]; 384extern ACPI_RSCONVERT_INFO AcpiRsConvertExtAddress64[]; 385extern ACPI_RSCONVERT_INFO AcpiRsConvertGpio[]; 386extern ACPI_RSCONVERT_INFO AcpiRsConvertFixedDma[]; 387extern ACPI_RSCONVERT_INFO AcpiRsConvertI2cSerialBus[]; 388extern ACPI_RSCONVERT_INFO AcpiRsConvertSpiSerialBus[]; 389extern ACPI_RSCONVERT_INFO AcpiRsConvertUartSerialBus[]; 390 391/* These resources require separate get/set tables */ 392 393extern ACPI_RSCONVERT_INFO AcpiRsGetIrq[]; 394extern ACPI_RSCONVERT_INFO AcpiRsGetStartDpf[]; 395extern ACPI_RSCONVERT_INFO AcpiRsGetVendorSmall[]; 396extern ACPI_RSCONVERT_INFO AcpiRsGetVendorLarge[]; 397 398extern ACPI_RSCONVERT_INFO AcpiRsSetIrq[]; 399extern ACPI_RSCONVERT_INFO AcpiRsSetStartDpf[]; 400extern ACPI_RSCONVERT_INFO AcpiRsSetVendor[]; 401 402 403#if defined(ACPI_DEBUG_OUTPUT) || defined(ACPI_DEBUGGER) 404/* 405 * rsinfo 406 */ 407extern ACPI_RSDUMP_INFO *AcpiGbl_DumpResourceDispatch[]; 408extern ACPI_RSDUMP_INFO *AcpiGbl_DumpSerialBusDispatch[]; 409 410/* 411 * rsdumpinfo 412 */ 413extern ACPI_RSDUMP_INFO AcpiRsDumpIrq[]; 414extern ACPI_RSDUMP_INFO AcpiRsDumpPrt[]; 415extern ACPI_RSDUMP_INFO AcpiRsDumpDma[]; 416extern ACPI_RSDUMP_INFO AcpiRsDumpStartDpf[]; 417extern ACPI_RSDUMP_INFO AcpiRsDumpEndDpf[]; 418extern ACPI_RSDUMP_INFO AcpiRsDumpIo[]; 419extern ACPI_RSDUMP_INFO AcpiRsDumpIoFlags[]; 420extern ACPI_RSDUMP_INFO AcpiRsDumpFixedIo[]; 421extern ACPI_RSDUMP_INFO AcpiRsDumpVendor[]; 422extern ACPI_RSDUMP_INFO AcpiRsDumpEndTag[]; 423extern ACPI_RSDUMP_INFO AcpiRsDumpMemory24[]; 424extern ACPI_RSDUMP_INFO AcpiRsDumpMemory32[]; 425extern ACPI_RSDUMP_INFO AcpiRsDumpMemoryFlags[]; 426extern ACPI_RSDUMP_INFO AcpiRsDumpFixedMemory32[]; 427extern ACPI_RSDUMP_INFO AcpiRsDumpAddress16[]; 428extern ACPI_RSDUMP_INFO AcpiRsDumpAddress32[]; 429extern ACPI_RSDUMP_INFO AcpiRsDumpAddress64[]; 430extern ACPI_RSDUMP_INFO AcpiRsDumpExtAddress64[]; 431extern ACPI_RSDUMP_INFO AcpiRsDumpExtIrq[]; 432extern ACPI_RSDUMP_INFO AcpiRsDumpGenericReg[]; 433extern ACPI_RSDUMP_INFO AcpiRsDumpGpio[]; 434extern ACPI_RSDUMP_INFO AcpiRsDumpFixedDma[]; 435extern ACPI_RSDUMP_INFO AcpiRsDumpCommonSerialBus[]; 436extern ACPI_RSDUMP_INFO AcpiRsDumpI2cSerialBus[]; 437extern ACPI_RSDUMP_INFO AcpiRsDumpSpiSerialBus[]; 438extern ACPI_RSDUMP_INFO AcpiRsDumpUartSerialBus[]; 439extern ACPI_RSDUMP_INFO AcpiRsDumpGeneralFlags[]; 440#endif 441 442#endif /* __ACRESRC_H__ */ 443