1100966Siwasaki/****************************************************************************** 2100966Siwasaki * 3100966Siwasaki * Module Name: amlresrc.h - AML resource descriptors 4100966Siwasaki * 5100966Siwasaki *****************************************************************************/ 6100966Siwasaki 7217365Sjkim/* 8306536Sjkim * Copyright (C) 2000 - 2016, Intel Corp. 9100966Siwasaki * All rights reserved. 10100966Siwasaki * 11217365Sjkim * Redistribution and use in source and binary forms, with or without 12217365Sjkim * modification, are permitted provided that the following conditions 13217365Sjkim * are met: 14217365Sjkim * 1. Redistributions of source code must retain the above copyright 15217365Sjkim * notice, this list of conditions, and the following disclaimer, 16217365Sjkim * without modification. 17217365Sjkim * 2. Redistributions in binary form must reproduce at minimum a disclaimer 18217365Sjkim * substantially similar to the "NO WARRANTY" disclaimer below 19217365Sjkim * ("Disclaimer") and any redistribution must be conditioned upon 20217365Sjkim * including a substantially similar Disclaimer requirement for further 21217365Sjkim * binary redistribution. 22217365Sjkim * 3. Neither the names of the above-listed copyright holders nor the names 23217365Sjkim * of any contributors may be used to endorse or promote products derived 24217365Sjkim * from this software without specific prior written permission. 25100966Siwasaki * 26217365Sjkim * Alternatively, this software may be distributed under the terms of the 27217365Sjkim * GNU General Public License ("GPL") version 2 as published by the Free 28217365Sjkim * Software Foundation. 29100966Siwasaki * 30217365Sjkim * NO WARRANTY 31217365Sjkim * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 32217365Sjkim * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 33217365Sjkim * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR 34217365Sjkim * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 35217365Sjkim * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 36217365Sjkim * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 37217365Sjkim * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 38217365Sjkim * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 39217365Sjkim * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING 40217365Sjkim * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 41217365Sjkim * POSSIBILITY OF SUCH DAMAGES. 42217365Sjkim */ 43100966Siwasaki 44167802Sjkim/* acpisrc:StructDefs -- for acpisrc conversion */ 45100966Siwasaki 46100966Siwasaki#ifndef __AMLRESRC_H 47100966Siwasaki#define __AMLRESRC_H 48100966Siwasaki 49100966Siwasaki 50167802Sjkim/* 51167802Sjkim * Resource descriptor tags, as defined in the ACPI specification. 52167802Sjkim * Used to symbolically reference fields within a descriptor. 53167802Sjkim */ 54167802Sjkim#define ACPI_RESTAG_ADDRESS "_ADR" 55167802Sjkim#define ACPI_RESTAG_ALIGNMENT "_ALN" 56167802Sjkim#define ACPI_RESTAG_ADDRESSSPACE "_ASI" 57167802Sjkim#define ACPI_RESTAG_ACCESSSIZE "_ASZ" 58167802Sjkim#define ACPI_RESTAG_TYPESPECIFICATTRIBUTES "_ATT" 59167802Sjkim#define ACPI_RESTAG_BASEADDRESS "_BAS" 60167802Sjkim#define ACPI_RESTAG_BUSMASTER "_BM_" /* Master(1), Slave(0) */ 61228110Sjkim#define ACPI_RESTAG_DEBOUNCETIME "_DBT" 62167802Sjkim#define ACPI_RESTAG_DECODE "_DEC" 63228110Sjkim#define ACPI_RESTAG_DEVICEPOLARITY "_DPL" 64167802Sjkim#define ACPI_RESTAG_DMA "_DMA" 65167802Sjkim#define ACPI_RESTAG_DMATYPE "_TYP" /* Compatible(0), A(1), B(2), F(3) */ 66228110Sjkim#define ACPI_RESTAG_DRIVESTRENGTH "_DRS" 67228110Sjkim#define ACPI_RESTAG_ENDIANNESS "_END" 68228110Sjkim#define ACPI_RESTAG_FLOWCONTROL "_FLC" 69167802Sjkim#define ACPI_RESTAG_GRANULARITY "_GRA" 70167802Sjkim#define ACPI_RESTAG_INTERRUPT "_INT" 71167802Sjkim#define ACPI_RESTAG_INTERRUPTLEVEL "_LL_" /* ActiveLo(1), ActiveHi(0) */ 72167802Sjkim#define ACPI_RESTAG_INTERRUPTSHARE "_SHR" /* Shareable(1), NoShare(0) */ 73167802Sjkim#define ACPI_RESTAG_INTERRUPTTYPE "_HE_" /* Edge(1), Level(0) */ 74228110Sjkim#define ACPI_RESTAG_IORESTRICTION "_IOR" 75167802Sjkim#define ACPI_RESTAG_LENGTH "_LEN" 76228110Sjkim#define ACPI_RESTAG_LINE "_LIN" 77167802Sjkim#define ACPI_RESTAG_MEMATTRIBUTES "_MTP" /* Memory(0), Reserved(1), ACPI(2), NVS(3) */ 78167802Sjkim#define ACPI_RESTAG_MEMTYPE "_MEM" /* NonCache(0), Cacheable(1) Cache+combine(2), Cache+prefetch(3) */ 79167802Sjkim#define ACPI_RESTAG_MAXADDR "_MAX" 80167802Sjkim#define ACPI_RESTAG_MINADDR "_MIN" 81167802Sjkim#define ACPI_RESTAG_MAXTYPE "_MAF" 82167802Sjkim#define ACPI_RESTAG_MINTYPE "_MIF" 83228110Sjkim#define ACPI_RESTAG_MODE "_MOD" 84228110Sjkim#define ACPI_RESTAG_PARITY "_PAR" 85228110Sjkim#define ACPI_RESTAG_PHASE "_PHA" 86228110Sjkim#define ACPI_RESTAG_PIN "_PIN" 87228110Sjkim#define ACPI_RESTAG_PINCONFIG "_PPI" 88228110Sjkim#define ACPI_RESTAG_POLARITY "_POL" 89167802Sjkim#define ACPI_RESTAG_REGISTERBITOFFSET "_RBO" 90167802Sjkim#define ACPI_RESTAG_REGISTERBITWIDTH "_RBW" 91167802Sjkim#define ACPI_RESTAG_RANGETYPE "_RNG" 92167802Sjkim#define ACPI_RESTAG_READWRITETYPE "_RW_" /* ReadOnly(0), Writeable (1) */ 93228110Sjkim#define ACPI_RESTAG_LENGTH_RX "_RXL" 94228110Sjkim#define ACPI_RESTAG_LENGTH_TX "_TXL" 95228110Sjkim#define ACPI_RESTAG_SLAVEMODE "_SLV" 96228110Sjkim#define ACPI_RESTAG_SPEED "_SPE" 97228110Sjkim#define ACPI_RESTAG_STOPBITS "_STB" 98167802Sjkim#define ACPI_RESTAG_TRANSLATION "_TRA" 99167802Sjkim#define ACPI_RESTAG_TRANSTYPE "_TRS" /* Sparse(1), Dense(0) */ 100167802Sjkim#define ACPI_RESTAG_TYPE "_TTP" /* Translation(1), Static (0) */ 101167802Sjkim#define ACPI_RESTAG_XFERTYPE "_SIZ" /* 8(0), 8And16(1), 16(2) */ 102228110Sjkim#define ACPI_RESTAG_VENDORDATA "_VEN" 103100966Siwasaki 104100966Siwasaki 105100966Siwasaki/* Default sizes for "small" resource descriptors */ 106100966Siwasaki 107100966Siwasaki#define ASL_RDESC_IRQ_SIZE 0x02 108100966Siwasaki#define ASL_RDESC_DMA_SIZE 0x02 109100966Siwasaki#define ASL_RDESC_ST_DEPEND_SIZE 0x00 110100966Siwasaki#define ASL_RDESC_END_DEPEND_SIZE 0x00 111100966Siwasaki#define ASL_RDESC_IO_SIZE 0x07 112100966Siwasaki#define ASL_RDESC_FIXED_IO_SIZE 0x03 113228110Sjkim#define ASL_RDESC_FIXED_DMA_SIZE 0x05 114100966Siwasaki#define ASL_RDESC_END_TAG_SIZE 0x01 115100966Siwasaki 116100966Siwasaki 117100966Siwasakitypedef struct asl_resource_node 118100966Siwasaki{ 119167802Sjkim UINT32 BufferLength; 120167802Sjkim void *Buffer; 121167802Sjkim struct asl_resource_node *Next; 122100966Siwasaki 123100966Siwasaki} ASL_RESOURCE_NODE; 124100966Siwasaki 125281075Sdimtypedef struct asl_resource_info 126281075Sdim{ 127281075Sdim ACPI_PARSE_OBJECT *DescriptorTypeOp; /* Resource descriptor parse node */ 128281075Sdim ACPI_PARSE_OBJECT *MappingOp; /* Used for mapfile support */ 129281075Sdim UINT32 CurrentByteOffset; /* Offset in resource template */ 130100966Siwasaki 131281075Sdim} ASL_RESOURCE_INFO; 132281075Sdim 133281075Sdim 134167802Sjkim/* Macros used to generate AML resource length fields */ 135167802Sjkim 136167802Sjkim#define ACPI_AML_SIZE_LARGE(r) (sizeof (r) - sizeof (AML_RESOURCE_LARGE_HEADER)) 137167802Sjkim#define ACPI_AML_SIZE_SMALL(r) (sizeof (r) - sizeof (AML_RESOURCE_SMALL_HEADER)) 138167802Sjkim 139100966Siwasaki/* 140100966Siwasaki * Resource descriptors defined in the ACPI specification. 141100966Siwasaki * 142138287Smarks * Packing/alignment must be BYTE because these descriptors 143151937Sjkim * are used to overlay the raw AML byte stream. 144100966Siwasaki */ 145100966Siwasaki#pragma pack(1) 146100966Siwasaki 147151937Sjkim/* 148151937Sjkim * SMALL descriptors 149151937Sjkim */ 150151937Sjkim#define AML_RESOURCE_SMALL_HEADER_COMMON \ 151167802Sjkim UINT8 DescriptorType; 152151937Sjkim 153151937Sjkimtypedef struct aml_resource_small_header 154100966Siwasaki{ 155151937Sjkim AML_RESOURCE_SMALL_HEADER_COMMON 156151937Sjkim 157151937Sjkim} AML_RESOURCE_SMALL_HEADER; 158151937Sjkim 159151937Sjkim 160151937Sjkimtypedef struct aml_resource_irq 161151937Sjkim{ 162151937Sjkim AML_RESOURCE_SMALL_HEADER_COMMON 163167802Sjkim UINT16 IrqMask; 164167802Sjkim UINT8 Flags; 165100966Siwasaki 166151937Sjkim} AML_RESOURCE_IRQ; 167100966Siwasaki 168100966Siwasaki 169151937Sjkimtypedef struct aml_resource_irq_noflags 170100966Siwasaki{ 171151937Sjkim AML_RESOURCE_SMALL_HEADER_COMMON 172167802Sjkim UINT16 IrqMask; 173100966Siwasaki 174151937Sjkim} AML_RESOURCE_IRQ_NOFLAGS; 175100966Siwasaki 176100966Siwasaki 177151937Sjkimtypedef struct aml_resource_dma 178100966Siwasaki{ 179151937Sjkim AML_RESOURCE_SMALL_HEADER_COMMON 180167802Sjkim UINT8 DmaChannelMask; 181167802Sjkim UINT8 Flags; 182100966Siwasaki 183151937Sjkim} AML_RESOURCE_DMA; 184100966Siwasaki 185100966Siwasaki 186151937Sjkimtypedef struct aml_resource_start_dependent 187100966Siwasaki{ 188151937Sjkim AML_RESOURCE_SMALL_HEADER_COMMON 189167802Sjkim UINT8 Flags; 190100966Siwasaki 191151937Sjkim} AML_RESOURCE_START_DEPENDENT; 192100966Siwasaki 193100966Siwasaki 194151937Sjkimtypedef struct aml_resource_start_dependent_noprio 195100966Siwasaki{ 196151937Sjkim AML_RESOURCE_SMALL_HEADER_COMMON 197100966Siwasaki 198151937Sjkim} AML_RESOURCE_START_DEPENDENT_NOPRIO; 199100966Siwasaki 200100966Siwasaki 201151937Sjkimtypedef struct aml_resource_end_dependent 202100966Siwasaki{ 203151937Sjkim AML_RESOURCE_SMALL_HEADER_COMMON 204100966Siwasaki 205151937Sjkim} AML_RESOURCE_END_DEPENDENT; 206100966Siwasaki 207100966Siwasaki 208151937Sjkimtypedef struct aml_resource_io 209100966Siwasaki{ 210151937Sjkim AML_RESOURCE_SMALL_HEADER_COMMON 211167802Sjkim UINT8 Flags; 212167802Sjkim UINT16 Minimum; 213167802Sjkim UINT16 Maximum; 214167802Sjkim UINT8 Alignment; 215167802Sjkim UINT8 AddressLength; 216100966Siwasaki 217151937Sjkim} AML_RESOURCE_IO; 218100966Siwasaki 219100966Siwasaki 220151937Sjkimtypedef struct aml_resource_fixed_io 221100966Siwasaki{ 222151937Sjkim AML_RESOURCE_SMALL_HEADER_COMMON 223167802Sjkim UINT16 Address; 224167802Sjkim UINT8 AddressLength; 225100966Siwasaki 226151937Sjkim} AML_RESOURCE_FIXED_IO; 227100966Siwasaki 228100966Siwasaki 229151937Sjkimtypedef struct aml_resource_vendor_small 230100966Siwasaki{ 231151937Sjkim AML_RESOURCE_SMALL_HEADER_COMMON 232100966Siwasaki 233151937Sjkim} AML_RESOURCE_VENDOR_SMALL; 234100966Siwasaki 235100966Siwasaki 236151937Sjkimtypedef struct aml_resource_end_tag 237100966Siwasaki{ 238151937Sjkim AML_RESOURCE_SMALL_HEADER_COMMON 239167802Sjkim UINT8 Checksum; 240100966Siwasaki 241151937Sjkim} AML_RESOURCE_END_TAG; 242100966Siwasaki 243100966Siwasaki 244228110Sjkimtypedef struct aml_resource_fixed_dma 245228110Sjkim{ 246228110Sjkim AML_RESOURCE_SMALL_HEADER_COMMON 247228110Sjkim UINT16 RequestLines; 248228110Sjkim UINT16 Channels; 249228110Sjkim UINT8 Width; 250228110Sjkim 251228110Sjkim} AML_RESOURCE_FIXED_DMA; 252228110Sjkim 253228110Sjkim 254151937Sjkim/* 255151937Sjkim * LARGE descriptors 256151937Sjkim */ 257151937Sjkim#define AML_RESOURCE_LARGE_HEADER_COMMON \ 258167802Sjkim UINT8 DescriptorType;\ 259167802Sjkim UINT16 ResourceLength; 260100966Siwasaki 261151937Sjkimtypedef struct aml_resource_large_header 262100966Siwasaki{ 263151937Sjkim AML_RESOURCE_LARGE_HEADER_COMMON 264151937Sjkim 265151937Sjkim} AML_RESOURCE_LARGE_HEADER; 266151937Sjkim 267151937Sjkim 268207344Sjkim/* General Flags for address space resource descriptors */ 269207344Sjkim 270207344Sjkim#define ACPI_RESOURCE_FLAG_DEC 2 271207344Sjkim#define ACPI_RESOURCE_FLAG_MIF 4 272207344Sjkim#define ACPI_RESOURCE_FLAG_MAF 8 273207344Sjkim 274151937Sjkimtypedef struct aml_resource_memory24 275151937Sjkim{ 276151937Sjkim AML_RESOURCE_LARGE_HEADER_COMMON 277167802Sjkim UINT8 Flags; 278167802Sjkim UINT16 Minimum; 279167802Sjkim UINT16 Maximum; 280167802Sjkim UINT16 Alignment; 281167802Sjkim UINT16 AddressLength; 282100966Siwasaki 283151937Sjkim} AML_RESOURCE_MEMORY24; 284100966Siwasaki 285100966Siwasaki 286151937Sjkimtypedef struct aml_resource_vendor_large 287100966Siwasaki{ 288151937Sjkim AML_RESOURCE_LARGE_HEADER_COMMON 289100966Siwasaki 290151937Sjkim} AML_RESOURCE_VENDOR_LARGE; 291100966Siwasaki 292100966Siwasaki 293151937Sjkimtypedef struct aml_resource_memory32 294100966Siwasaki{ 295151937Sjkim AML_RESOURCE_LARGE_HEADER_COMMON 296167802Sjkim UINT8 Flags; 297167802Sjkim UINT32 Minimum; 298167802Sjkim UINT32 Maximum; 299167802Sjkim UINT32 Alignment; 300167802Sjkim UINT32 AddressLength; 301100966Siwasaki 302151937Sjkim} AML_RESOURCE_MEMORY32; 303100966Siwasaki 304100966Siwasaki 305151937Sjkimtypedef struct aml_resource_fixed_memory32 306100966Siwasaki{ 307151937Sjkim AML_RESOURCE_LARGE_HEADER_COMMON 308167802Sjkim UINT8 Flags; 309167802Sjkim UINT32 Address; 310167802Sjkim UINT32 AddressLength; 311100966Siwasaki 312151937Sjkim} AML_RESOURCE_FIXED_MEMORY32; 313100966Siwasaki 314100966Siwasaki 315151937Sjkim#define AML_RESOURCE_ADDRESS_COMMON \ 316167802Sjkim UINT8 ResourceType; \ 317167802Sjkim UINT8 Flags; \ 318167802Sjkim UINT8 SpecificFlags; 319151937Sjkim 320151937Sjkim 321151937Sjkimtypedef struct aml_resource_address 322100966Siwasaki{ 323151937Sjkim AML_RESOURCE_LARGE_HEADER_COMMON 324151937Sjkim AML_RESOURCE_ADDRESS_COMMON 325151937Sjkim 326151937Sjkim} AML_RESOURCE_ADDRESS; 327151937Sjkim 328151937Sjkim 329151937Sjkimtypedef struct aml_resource_extended_address64 330151937Sjkim{ 331151937Sjkim AML_RESOURCE_LARGE_HEADER_COMMON 332151937Sjkim AML_RESOURCE_ADDRESS_COMMON 333167802Sjkim UINT8 RevisionID; 334167802Sjkim UINT8 Reserved; 335167802Sjkim UINT64 Granularity; 336167802Sjkim UINT64 Minimum; 337167802Sjkim UINT64 Maximum; 338167802Sjkim UINT64 TranslationOffset; 339167802Sjkim UINT64 AddressLength; 340167802Sjkim UINT64 TypeSpecific; 341100966Siwasaki 342151937Sjkim} AML_RESOURCE_EXTENDED_ADDRESS64; 343100966Siwasaki 344151937Sjkim#define AML_RESOURCE_EXTENDED_ADDRESS_REVISION 1 /* ACPI 3.0 */ 345100966Siwasaki 346151937Sjkim 347151937Sjkimtypedef struct aml_resource_address64 348100966Siwasaki{ 349151937Sjkim AML_RESOURCE_LARGE_HEADER_COMMON 350151937Sjkim AML_RESOURCE_ADDRESS_COMMON 351167802Sjkim UINT64 Granularity; 352167802Sjkim UINT64 Minimum; 353167802Sjkim UINT64 Maximum; 354167802Sjkim UINT64 TranslationOffset; 355167802Sjkim UINT64 AddressLength; 356151937Sjkim 357151937Sjkim} AML_RESOURCE_ADDRESS64; 358151937Sjkim 359151937Sjkim 360151937Sjkimtypedef struct aml_resource_address32 361151937Sjkim{ 362151937Sjkim AML_RESOURCE_LARGE_HEADER_COMMON 363151937Sjkim AML_RESOURCE_ADDRESS_COMMON 364167802Sjkim UINT32 Granularity; 365167802Sjkim UINT32 Minimum; 366167802Sjkim UINT32 Maximum; 367167802Sjkim UINT32 TranslationOffset; 368167802Sjkim UINT32 AddressLength; 369100966Siwasaki 370151937Sjkim} AML_RESOURCE_ADDRESS32; 371100966Siwasaki 372100966Siwasaki 373151937Sjkimtypedef struct aml_resource_address16 374100966Siwasaki{ 375151937Sjkim AML_RESOURCE_LARGE_HEADER_COMMON 376151937Sjkim AML_RESOURCE_ADDRESS_COMMON 377167802Sjkim UINT16 Granularity; 378167802Sjkim UINT16 Minimum; 379167802Sjkim UINT16 Maximum; 380167802Sjkim UINT16 TranslationOffset; 381167802Sjkim UINT16 AddressLength; 382100966Siwasaki 383151937Sjkim} AML_RESOURCE_ADDRESS16; 384100966Siwasaki 385100966Siwasaki 386151937Sjkimtypedef struct aml_resource_extended_irq 387100966Siwasaki{ 388151937Sjkim AML_RESOURCE_LARGE_HEADER_COMMON 389167802Sjkim UINT8 Flags; 390167802Sjkim UINT8 InterruptCount; 391167802Sjkim UINT32 Interrupts[1]; 392100966Siwasaki /* ResSourceIndex, ResSource optional fields follow */ 393100966Siwasaki 394151937Sjkim} AML_RESOURCE_EXTENDED_IRQ; 395100966Siwasaki 396100966Siwasaki 397151937Sjkimtypedef struct aml_resource_generic_register 398100966Siwasaki{ 399151937Sjkim AML_RESOURCE_LARGE_HEADER_COMMON 400167802Sjkim UINT8 AddressSpaceId; 401167802Sjkim UINT8 BitWidth; 402167802Sjkim UINT8 BitOffset; 403167802Sjkim UINT8 AccessSize; /* ACPI 3.0, was previously Reserved */ 404167802Sjkim UINT64 Address; 405100966Siwasaki 406151937Sjkim} AML_RESOURCE_GENERIC_REGISTER; 407100966Siwasaki 408228110Sjkim 409228110Sjkim/* Common descriptor for GpioInt and GpioIo (ACPI 5.0) */ 410228110Sjkim 411228110Sjkimtypedef struct aml_resource_gpio 412228110Sjkim{ 413228110Sjkim AML_RESOURCE_LARGE_HEADER_COMMON 414228110Sjkim UINT8 RevisionId; 415228110Sjkim UINT8 ConnectionType; 416228110Sjkim UINT16 Flags; 417228110Sjkim UINT16 IntFlags; 418228110Sjkim UINT8 PinConfig; 419228110Sjkim UINT16 DriveStrength; 420228110Sjkim UINT16 DebounceTimeout; 421228110Sjkim UINT16 PinTableOffset; 422228110Sjkim UINT8 ResSourceIndex; 423228110Sjkim UINT16 ResSourceOffset; 424228110Sjkim UINT16 VendorOffset; 425228110Sjkim UINT16 VendorLength; 426228110Sjkim /* 427228110Sjkim * Optional fields follow immediately: 428228110Sjkim * 1) PIN list (Words) 429228110Sjkim * 2) Resource Source String 430228110Sjkim * 3) Vendor Data bytes 431228110Sjkim */ 432228110Sjkim 433228110Sjkim} AML_RESOURCE_GPIO; 434228110Sjkim 435228110Sjkim#define AML_RESOURCE_GPIO_REVISION 1 /* ACPI 5.0 */ 436228110Sjkim 437228110Sjkim/* Values for ConnectionType above */ 438228110Sjkim 439228110Sjkim#define AML_RESOURCE_GPIO_TYPE_INT 0 440228110Sjkim#define AML_RESOURCE_GPIO_TYPE_IO 1 441228110Sjkim#define AML_RESOURCE_MAX_GPIOTYPE 1 442228110Sjkim 443228110Sjkim 444228110Sjkim/* Common preamble for all serial descriptors (ACPI 5.0) */ 445228110Sjkim 446228110Sjkim#define AML_RESOURCE_SERIAL_COMMON \ 447228110Sjkim UINT8 RevisionId; \ 448228110Sjkim UINT8 ResSourceIndex; \ 449228110Sjkim UINT8 Type; \ 450228110Sjkim UINT8 Flags; \ 451228110Sjkim UINT16 TypeSpecificFlags; \ 452228110Sjkim UINT8 TypeRevisionId; \ 453228110Sjkim UINT16 TypeDataLength; \ 454228110Sjkim 455228110Sjkim/* Values for the type field above */ 456228110Sjkim 457228110Sjkim#define AML_RESOURCE_I2C_SERIALBUSTYPE 1 458228110Sjkim#define AML_RESOURCE_SPI_SERIALBUSTYPE 2 459228110Sjkim#define AML_RESOURCE_UART_SERIALBUSTYPE 3 460228110Sjkim#define AML_RESOURCE_MAX_SERIALBUSTYPE 3 461228110Sjkim#define AML_RESOURCE_VENDOR_SERIALBUSTYPE 192 /* Vendor defined is 0xC0-0xFF (NOT SUPPORTED) */ 462228110Sjkim 463228110Sjkimtypedef struct aml_resource_common_serialbus 464228110Sjkim{ 465228110Sjkim AML_RESOURCE_LARGE_HEADER_COMMON 466228110Sjkim AML_RESOURCE_SERIAL_COMMON 467228110Sjkim 468228110Sjkim} AML_RESOURCE_COMMON_SERIALBUS; 469228110Sjkim 470228110Sjkimtypedef struct aml_resource_i2c_serialbus 471228110Sjkim{ 472228110Sjkim AML_RESOURCE_LARGE_HEADER_COMMON 473228110Sjkim AML_RESOURCE_SERIAL_COMMON 474228110Sjkim UINT32 ConnectionSpeed; 475228110Sjkim UINT16 SlaveAddress; 476228110Sjkim /* 477228110Sjkim * Optional fields follow immediately: 478228110Sjkim * 1) Vendor Data bytes 479228110Sjkim * 2) Resource Source String 480228110Sjkim */ 481228110Sjkim 482228110Sjkim} AML_RESOURCE_I2C_SERIALBUS; 483228110Sjkim 484228110Sjkim#define AML_RESOURCE_I2C_REVISION 1 /* ACPI 5.0 */ 485228110Sjkim#define AML_RESOURCE_I2C_TYPE_REVISION 1 /* ACPI 5.0 */ 486228110Sjkim#define AML_RESOURCE_I2C_MIN_DATA_LEN 6 487228110Sjkim 488228110Sjkimtypedef struct aml_resource_spi_serialbus 489228110Sjkim{ 490228110Sjkim AML_RESOURCE_LARGE_HEADER_COMMON 491228110Sjkim AML_RESOURCE_SERIAL_COMMON 492228110Sjkim UINT32 ConnectionSpeed; 493228110Sjkim UINT8 DataBitLength; 494228110Sjkim UINT8 ClockPhase; 495228110Sjkim UINT8 ClockPolarity; 496228110Sjkim UINT16 DeviceSelection; 497228110Sjkim /* 498228110Sjkim * Optional fields follow immediately: 499228110Sjkim * 1) Vendor Data bytes 500228110Sjkim * 2) Resource Source String 501228110Sjkim */ 502228110Sjkim 503228110Sjkim} AML_RESOURCE_SPI_SERIALBUS; 504228110Sjkim 505228110Sjkim#define AML_RESOURCE_SPI_REVISION 1 /* ACPI 5.0 */ 506228110Sjkim#define AML_RESOURCE_SPI_TYPE_REVISION 1 /* ACPI 5.0 */ 507228110Sjkim#define AML_RESOURCE_SPI_MIN_DATA_LEN 9 508228110Sjkim 509228110Sjkim 510228110Sjkimtypedef struct aml_resource_uart_serialbus 511228110Sjkim{ 512228110Sjkim AML_RESOURCE_LARGE_HEADER_COMMON 513228110Sjkim AML_RESOURCE_SERIAL_COMMON 514228110Sjkim UINT32 DefaultBaudRate; 515228110Sjkim UINT16 RxFifoSize; 516228110Sjkim UINT16 TxFifoSize; 517228110Sjkim UINT8 Parity; 518228110Sjkim UINT8 LinesEnabled; 519228110Sjkim /* 520228110Sjkim * Optional fields follow immediately: 521228110Sjkim * 1) Vendor Data bytes 522228110Sjkim * 2) Resource Source String 523228110Sjkim */ 524228110Sjkim 525228110Sjkim} AML_RESOURCE_UART_SERIALBUS; 526228110Sjkim 527228110Sjkim#define AML_RESOURCE_UART_REVISION 1 /* ACPI 5.0 */ 528228110Sjkim#define AML_RESOURCE_UART_TYPE_REVISION 1 /* ACPI 5.0 */ 529228110Sjkim#define AML_RESOURCE_UART_MIN_DATA_LEN 10 530228110Sjkim 531228110Sjkim 532100966Siwasaki/* restore default alignment */ 533100966Siwasaki 534100966Siwasaki#pragma pack() 535100966Siwasaki 536138287Smarks/* Union of all resource descriptors, so we can allocate the worst case */ 537100966Siwasaki 538151937Sjkimtypedef union aml_resource 539100966Siwasaki{ 540151937Sjkim /* Descriptor headers */ 541100966Siwasaki 542167802Sjkim UINT8 DescriptorType; 543167802Sjkim AML_RESOURCE_SMALL_HEADER SmallHeader; 544167802Sjkim AML_RESOURCE_LARGE_HEADER LargeHeader; 545100966Siwasaki 546151937Sjkim /* Small resource descriptors */ 547100966Siwasaki 548167802Sjkim AML_RESOURCE_IRQ Irq; 549167802Sjkim AML_RESOURCE_DMA Dma; 550167802Sjkim AML_RESOURCE_START_DEPENDENT StartDpf; 551167802Sjkim AML_RESOURCE_END_DEPENDENT EndDpf; 552167802Sjkim AML_RESOURCE_IO Io; 553167802Sjkim AML_RESOURCE_FIXED_IO FixedIo; 554228110Sjkim AML_RESOURCE_FIXED_DMA FixedDma; 555167802Sjkim AML_RESOURCE_VENDOR_SMALL VendorSmall; 556167802Sjkim AML_RESOURCE_END_TAG EndTag; 557100966Siwasaki 558151937Sjkim /* Large resource descriptors */ 559151937Sjkim 560167802Sjkim AML_RESOURCE_MEMORY24 Memory24; 561167802Sjkim AML_RESOURCE_GENERIC_REGISTER GenericReg; 562167802Sjkim AML_RESOURCE_VENDOR_LARGE VendorLarge; 563167802Sjkim AML_RESOURCE_MEMORY32 Memory32; 564167802Sjkim AML_RESOURCE_FIXED_MEMORY32 FixedMemory32; 565167802Sjkim AML_RESOURCE_ADDRESS16 Address16; 566167802Sjkim AML_RESOURCE_ADDRESS32 Address32; 567167802Sjkim AML_RESOURCE_ADDRESS64 Address64; 568167802Sjkim AML_RESOURCE_EXTENDED_ADDRESS64 ExtAddress64; 569167802Sjkim AML_RESOURCE_EXTENDED_IRQ ExtendedIrq; 570228110Sjkim AML_RESOURCE_GPIO Gpio; 571228110Sjkim AML_RESOURCE_I2C_SERIALBUS I2cSerialBus; 572228110Sjkim AML_RESOURCE_SPI_SERIALBUS SpiSerialBus; 573228110Sjkim AML_RESOURCE_UART_SERIALBUS UartSerialBus; 574228110Sjkim AML_RESOURCE_COMMON_SERIALBUS CommonSerialBus; 575151937Sjkim 576151937Sjkim /* Utility overlays */ 577151937Sjkim 578167802Sjkim AML_RESOURCE_ADDRESS Address; 579167802Sjkim UINT32 DwordItem; 580167802Sjkim UINT16 WordItem; 581167802Sjkim UINT8 ByteItem; 582151937Sjkim 583151937Sjkim} AML_RESOURCE; 584151937Sjkim 585281075Sdim 586281075Sdim/* Interfaces used by both the disassembler and compiler */ 587281075Sdim 588281075Sdimvoid 589281075SdimMpSaveGpioInfo ( 590281075Sdim ACPI_PARSE_OBJECT *Op, 591281075Sdim AML_RESOURCE *Resource, 592281075Sdim UINT32 PinCount, 593281075Sdim UINT16 *PinList, 594281075Sdim char *DeviceName); 595281075Sdim 596281075Sdimvoid 597281075SdimMpSaveSerialInfo ( 598281075Sdim ACPI_PARSE_OBJECT *Op, 599281075Sdim AML_RESOURCE *Resource, 600281075Sdim char *DeviceName); 601281075Sdim 602281075Sdimchar * 603281075SdimMpGetHidFromParseTree ( 604281075Sdim ACPI_NAMESPACE_NODE *HidNode); 605281075Sdim 606281075Sdimchar * 607281075SdimMpGetHidViaNamestring ( 608281075Sdim char *DeviceName); 609281075Sdim 610281075Sdimchar * 611281075SdimMpGetConnectionInfo ( 612281075Sdim ACPI_PARSE_OBJECT *Op, 613281075Sdim UINT32 PinIndex, 614281075Sdim ACPI_NAMESPACE_NODE **TargetNode, 615281075Sdim char **TargetName); 616281075Sdim 617281075Sdimchar * 618281075SdimMpGetParentDeviceHid ( 619281075Sdim ACPI_PARSE_OBJECT *Op, 620281075Sdim ACPI_NAMESPACE_NODE **TargetNode, 621281075Sdim char **ParentDeviceName); 622281075Sdim 623281075Sdimchar * 624281075SdimMpGetDdnValue ( 625281075Sdim char *DeviceName); 626281075Sdim 627281075Sdimchar * 628281075SdimMpGetHidValue ( 629281075Sdim ACPI_NAMESPACE_NODE *DeviceNode); 630281075Sdim 631100966Siwasaki#endif 632