acresrc.h revision 281396
1190207Srpaulo/****************************************************************************** 2190207Srpaulo * 375115Sfenner * Name: acresrc.h - Resource Manager function prototypes 475115Sfenner * 575115Sfenner *****************************************************************************/ 675115Sfenner 775115Sfenner/* 875115Sfenner * Copyright (C) 2000 - 2015, Intel Corp. 975115Sfenner * All rights reserved. 1075115Sfenner * 1175115Sfenner * Redistribution and use in source and binary forms, with or without 1275115Sfenner * modification, are permitted provided that the following conditions 1375115Sfenner * are met: 1475115Sfenner * 1. Redistributions of source code must retain the above copyright 1575115Sfenner * notice, this list of conditions, and the following disclaimer, 1675115Sfenner * without modification. 1775115Sfenner * 2. Redistributions in binary form must reproduce at minimum a disclaimer 1875115Sfenner * substantially similar to the "NO WARRANTY" disclaimer below 1975115Sfenner * ("Disclaimer") and any redistribution must be conditioned upon 2075115Sfenner * including a substantially similar Disclaimer requirement for further 2175115Sfenner * binary redistribution. 2275115Sfenner * 3. Neither the names of the above-listed copyright holders nor the names 2375115Sfenner * of any contributors may be used to endorse or promote products derived 2475115Sfenner * from this software without specific prior written permission. 2575115Sfenner * 2675115Sfenner * Alternatively, this software may be distributed under the terms of the 2775115Sfenner * GNU General Public License ("GPL") version 2 as published by the Free 2875115Sfenner * Software Foundation. 2975115Sfenner * 3075115Sfenner * NO WARRANTY 3175115Sfenner * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 3275115Sfenner * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 3375115Sfenner * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR 3475115Sfenner * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 3575115Sfenner * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 3675115Sfenner * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 3775115Sfenner * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 3875115Sfenner * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 3975115Sfenner * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING 4075115Sfenner * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 4175115Sfenner * POSSIBILITY OF SUCH DAMAGES. 4275115Sfenner */ 4375115Sfenner 4475115Sfenner#ifndef __ACRESRC_H__ 4575115Sfenner#define __ACRESRC_H__ 4675115Sfenner 4775115Sfenner/* Need the AML resource descriptor structs */ 4875115Sfenner 4975115Sfenner#include <contrib/dev/acpica/include/amlresrc.h> 5075115Sfenner 5175115Sfenner 5275115Sfenner/* 5375115Sfenner * If possible, pack the following structures to byte alignment, since we 5475115Sfenner * don't care about performance for debug output. Two cases where we cannot 5575115Sfenner * pack the structures: 5675115Sfenner * 5775115Sfenner * 1) Hardware does not support misaligned memory transfers 5875115Sfenner * 2) Compiler does not support pointers within packed structures 5975115Sfenner */ 6075115Sfenner#if (!defined(ACPI_MISALIGNMENT_NOT_SUPPORTED) && !defined(ACPI_PACKED_POINTERS_NOT_SUPPORTED)) 6175115Sfenner#pragma pack(1) 6275115Sfenner#endif 6375115Sfenner 6475115Sfenner/* 6575115Sfenner * Individual entry for the resource conversion tables 6675115Sfenner */ 6775115Sfennertypedef const struct acpi_rsconvert_info 6875115Sfenner{ 6975115Sfenner UINT8 Opcode; 7075115Sfenner UINT8 ResourceOffset; 7175115Sfenner UINT8 AmlOffset; 7275115Sfenner UINT8 Value; 7375115Sfenner 7475115Sfenner} ACPI_RSCONVERT_INFO; 7575115Sfenner 7675115Sfenner/* Resource conversion opcodes */ 7775115Sfenner 7875115Sfennertypedef enum 7975115Sfenner{ 8075115Sfenner ACPI_RSC_INITGET = 0, 8175115Sfenner ACPI_RSC_INITSET, 8275115Sfenner ACPI_RSC_FLAGINIT, 8375115Sfenner ACPI_RSC_1BITFLAG, 8475115Sfenner ACPI_RSC_2BITFLAG, 8575115Sfenner ACPI_RSC_3BITFLAG, 8675115Sfenner ACPI_RSC_ADDRESS, 8775115Sfenner ACPI_RSC_BITMASK, 8875115Sfenner ACPI_RSC_BITMASK16, 8975115Sfenner ACPI_RSC_COUNT, 9075115Sfenner ACPI_RSC_COUNT16, 9175115Sfenner ACPI_RSC_COUNT_GPIO_PIN, 9275115Sfenner ACPI_RSC_COUNT_GPIO_RES, 9375115Sfenner ACPI_RSC_COUNT_GPIO_VEN, 9475115Sfenner ACPI_RSC_COUNT_SERIAL_RES, 9575115Sfenner ACPI_RSC_COUNT_SERIAL_VEN, 9675115Sfenner ACPI_RSC_DATA8, 9775115Sfenner ACPI_RSC_EXIT_EQ, 9875115Sfenner ACPI_RSC_EXIT_LE, 9975115Sfenner ACPI_RSC_EXIT_NE, 10075115Sfenner ACPI_RSC_LENGTH, 10175115Sfenner ACPI_RSC_MOVE_GPIO_PIN, 10275115Sfenner ACPI_RSC_MOVE_GPIO_RES, 10375115Sfenner ACPI_RSC_MOVE_SERIAL_RES, 10475115Sfenner ACPI_RSC_MOVE_SERIAL_VEN, 10575115Sfenner ACPI_RSC_MOVE8, 10675115Sfenner ACPI_RSC_MOVE16, 10775115Sfenner ACPI_RSC_MOVE32, 10875115Sfenner ACPI_RSC_MOVE64, 10975115Sfenner ACPI_RSC_SET8, 11075115Sfenner ACPI_RSC_SOURCE, 11175115Sfenner ACPI_RSC_SOURCEX 11275115Sfenner 11375115Sfenner} ACPI_RSCONVERT_OPCODES; 11475115Sfenner 11575115Sfenner/* Resource Conversion sub-opcodes */ 11675115Sfenner 11775115Sfenner#define ACPI_RSC_COMPARE_AML_LENGTH 0 11875115Sfenner#define ACPI_RSC_COMPARE_VALUE 1 11975115Sfenner 12075115Sfenner#define ACPI_RSC_TABLE_SIZE(d) (sizeof (d) / sizeof (ACPI_RSCONVERT_INFO)) 12175115Sfenner 12275115Sfenner#define ACPI_RS_OFFSET(f) (UINT8) ACPI_OFFSET (ACPI_RESOURCE,f) 12375115Sfenner#define AML_OFFSET(f) (UINT8) ACPI_OFFSET (AML_RESOURCE,f) 12475115Sfenner 12575115Sfenner 12675115Sfenner/* 12775115Sfenner * Individual entry for the resource dump tables 12875115Sfenner */ 12975115Sfennertypedef const struct acpi_rsdump_info 13075115Sfenner{ 13175115Sfenner UINT8 Opcode; 13275115Sfenner UINT8 Offset; 13375115Sfenner char *Name; 13475115Sfenner const char **Pointer; 13575115Sfenner 13675115Sfenner} ACPI_RSDUMP_INFO; 13775115Sfenner 13875115Sfenner/* Values for the Opcode field above */ 13975115Sfenner 14075115Sfennertypedef enum 14175115Sfenner{ 14275115Sfenner ACPI_RSD_TITLE = 0, 14375115Sfenner ACPI_RSD_1BITFLAG, 14475115Sfenner ACPI_RSD_2BITFLAG, 14575115Sfenner ACPI_RSD_3BITFLAG, 14675115Sfenner ACPI_RSD_ADDRESS, 14775115Sfenner ACPI_RSD_DWORDLIST, 14875115Sfenner ACPI_RSD_LITERAL, 14975115Sfenner ACPI_RSD_LONGLIST, 15075115Sfenner ACPI_RSD_SHORTLIST, 15175115Sfenner ACPI_RSD_SHORTLISTX, 15275115Sfenner ACPI_RSD_SOURCE, 15375115Sfenner ACPI_RSD_STRING, 15475115Sfenner ACPI_RSD_UINT8, 15575115Sfenner ACPI_RSD_UINT16, 15675115Sfenner ACPI_RSD_UINT32, 15775115Sfenner ACPI_RSD_UINT64, 15875115Sfenner ACPI_RSD_WORDLIST 15975115Sfenner 16075115Sfenner} ACPI_RSDUMP_OPCODES; 16175115Sfenner 16275115Sfenner/* restore default alignment */ 16375115Sfenner 16475115Sfenner#pragma pack() 16575115Sfenner 16675115Sfenner 16775115Sfenner/* Resource tables indexed by internal resource type */ 16875115Sfenner 16975115Sfennerextern const UINT8 AcpiGbl_AmlResourceSizes[]; 17075115Sfennerextern const UINT8 AcpiGbl_AmlResourceSerialBusSizes[]; 17175115Sfennerextern ACPI_RSCONVERT_INFO *AcpiGbl_SetResourceDispatch[]; 17275115Sfenner 17375115Sfenner/* Resource tables indexed by raw AML resource descriptor type */ 17475115Sfenner 17575115Sfennerextern const UINT8 AcpiGbl_ResourceStructSizes[]; 17675115Sfennerextern const UINT8 AcpiGbl_ResourceStructSerialBusSizes[]; 17775115Sfennerextern ACPI_RSCONVERT_INFO *AcpiGbl_GetResourceDispatch[]; 17875115Sfenner 17975115Sfennerextern ACPI_RSCONVERT_INFO *AcpiGbl_ConvertResourceSerialBusDispatch[]; 18075115Sfenner 18175115Sfennertypedef struct acpi_vendor_walk_info 18275115Sfenner{ 18375115Sfenner ACPI_VENDOR_UUID *Uuid; 18475115Sfenner ACPI_BUFFER *Buffer; 18575115Sfenner ACPI_STATUS Status; 18675115Sfenner 187127668Sbms} ACPI_VENDOR_WALK_INFO; 188127668Sbms 189127668Sbms 19075115Sfenner/* 19175115Sfenner * 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 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