1 /****************************************************************************** 2 * 3 * Module Name: amlresrc.h - AML resource descriptors 4 * 5 *****************************************************************************/ 6 7 /* 8 * Copyright (C) 2000 - 2014, 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 /* acpisrc:StructDefs -- for acpisrc conversion */ 45 46 #ifndef __AMLRESRC_H 47 #define __AMLRESRC_H 48 49 50 #pragma pack(push) /* Set default struct packing */ 51 52 /* 53 * Resource descriptor tags, as defined in the ACPI specification. 54 * Used to symbolically reference fields within a descriptor. 55 */ 56 #define ACPI_RESTAG_ADDRESS "_ADR" 57 #define ACPI_RESTAG_ALIGNMENT "_ALN" 58 #define ACPI_RESTAG_ADDRESSSPACE "_ASI" 59 #define ACPI_RESTAG_ACCESSSIZE "_ASZ" 60 #define ACPI_RESTAG_TYPESPECIFICATTRIBUTES "_ATT" 61 #define ACPI_RESTAG_BASEADDRESS "_BAS" 62 #define ACPI_RESTAG_BUSMASTER "_BM_" /* Master(1), Slave(0) */ 63 #define ACPI_RESTAG_DEBOUNCETIME "_DBT" 64 #define ACPI_RESTAG_DECODE "_DEC" 65 #define ACPI_RESTAG_DEVICEPOLARITY "_DPL" 66 #define ACPI_RESTAG_DMA "_DMA" 67 #define ACPI_RESTAG_DMATYPE "_TYP" /* Compatible(0), A(1), B(2), F(3) */ 68 #define ACPI_RESTAG_DRIVESTRENGTH "_DRS" 69 #define ACPI_RESTAG_ENDIANNESS "_END" 70 #define ACPI_RESTAG_FLOWCONTROL "_FLC" 71 #define ACPI_RESTAG_GRANULARITY "_GRA" 72 #define ACPI_RESTAG_INTERRUPT "_INT" 73 #define ACPI_RESTAG_INTERRUPTLEVEL "_LL_" /* ActiveLo(1), ActiveHi(0) */ 74 #define ACPI_RESTAG_INTERRUPTSHARE "_SHR" /* Shareable(1), NoShare(0) */ 75 #define ACPI_RESTAG_INTERRUPTTYPE "_HE_" /* Edge(1), Level(0) */ 76 #define ACPI_RESTAG_IORESTRICTION "_IOR" 77 #define ACPI_RESTAG_LENGTH "_LEN" 78 #define ACPI_RESTAG_LINE "_LIN" 79 #define ACPI_RESTAG_MEMATTRIBUTES "_MTP" /* Memory(0), Reserved(1), ACPI(2), NVS(3) */ 80 #define ACPI_RESTAG_MEMTYPE "_MEM" /* NonCache(0), Cacheable(1) Cache+combine(2), Cache+prefetch(3) */ 81 #define ACPI_RESTAG_MAXADDR "_MAX" 82 #define ACPI_RESTAG_MINADDR "_MIN" 83 #define ACPI_RESTAG_MAXTYPE "_MAF" 84 #define ACPI_RESTAG_MINTYPE "_MIF" 85 #define ACPI_RESTAG_MODE "_MOD" 86 #define ACPI_RESTAG_PARITY "_PAR" 87 #define ACPI_RESTAG_PHASE "_PHA" 88 #define ACPI_RESTAG_PIN "_PIN" 89 #define ACPI_RESTAG_PINCONFIG "_PPI" 90 #define ACPI_RESTAG_POLARITY "_POL" 91 #define ACPI_RESTAG_REGISTERBITOFFSET "_RBO" 92 #define ACPI_RESTAG_REGISTERBITWIDTH "_RBW" 93 #define ACPI_RESTAG_RANGETYPE "_RNG" 94 #define ACPI_RESTAG_READWRITETYPE "_RW_" /* ReadOnly(0), Writeable (1) */ 95 #define ACPI_RESTAG_LENGTH_RX "_RXL" 96 #define ACPI_RESTAG_LENGTH_TX "_TXL" 97 #define ACPI_RESTAG_SLAVEMODE "_SLV" 98 #define ACPI_RESTAG_SPEED "_SPE" 99 #define ACPI_RESTAG_STOPBITS "_STB" 100 #define ACPI_RESTAG_TRANSLATION "_TRA" 101 #define ACPI_RESTAG_TRANSTYPE "_TRS" /* Sparse(1), Dense(0) */ 102 #define ACPI_RESTAG_TYPE "_TTP" /* Translation(1), Static (0) */ 103 #define ACPI_RESTAG_XFERTYPE "_SIZ" /* 8(0), 8And16(1), 16(2) */ 104 #define ACPI_RESTAG_VENDORDATA "_VEN" 105 106 107 /* Default sizes for "small" resource descriptors */ 108 109 #define ASL_RDESC_IRQ_SIZE 0x02 110 #define ASL_RDESC_DMA_SIZE 0x02 111 #define ASL_RDESC_ST_DEPEND_SIZE 0x00 112 #define ASL_RDESC_END_DEPEND_SIZE 0x00 113 #define ASL_RDESC_IO_SIZE 0x07 114 #define ASL_RDESC_FIXED_IO_SIZE 0x03 115 #define ASL_RDESC_FIXED_DMA_SIZE 0x05 116 #define ASL_RDESC_END_TAG_SIZE 0x01 117 118 119 typedef struct asl_resource_node 120 { 121 UINT32 BufferLength; 122 void *Buffer; 123 struct asl_resource_node *Next; 124 125 } ASL_RESOURCE_NODE; 126 127 128 /* Macros used to generate AML resource length fields */ 129 130 #define ACPI_AML_SIZE_LARGE(r) (sizeof (r) - sizeof (AML_RESOURCE_LARGE_HEADER)) 131 #define ACPI_AML_SIZE_SMALL(r) (sizeof (r) - sizeof (AML_RESOURCE_SMALL_HEADER)) 132 133 /* 134 * Resource descriptors defined in the ACPI specification. 135 * 136 * Packing/alignment must be BYTE because these descriptors 137 * are used to overlay the raw AML byte stream. 138 */ 139 #pragma pack(1) 140 141 /* 142 * SMALL descriptors 143 */ 144 #define AML_RESOURCE_SMALL_HEADER_COMMON \ 145 UINT8 DescriptorType; 146 147 typedef struct aml_resource_small_header 148 { 149 AML_RESOURCE_SMALL_HEADER_COMMON 150 151 } AML_RESOURCE_SMALL_HEADER; 152 153 154 typedef struct aml_resource_irq 155 { 156 AML_RESOURCE_SMALL_HEADER_COMMON 157 UINT16 IrqMask; 158 UINT8 Flags; 159 160 } AML_RESOURCE_IRQ; 161 162 163 typedef struct aml_resource_irq_noflags 164 { 165 AML_RESOURCE_SMALL_HEADER_COMMON 166 UINT16 IrqMask; 167 168 } AML_RESOURCE_IRQ_NOFLAGS; 169 170 171 typedef struct aml_resource_dma 172 { 173 AML_RESOURCE_SMALL_HEADER_COMMON 174 UINT8 DmaChannelMask; 175 UINT8 Flags; 176 177 } AML_RESOURCE_DMA; 178 179 180 typedef struct aml_resource_start_dependent 181 { 182 AML_RESOURCE_SMALL_HEADER_COMMON 183 UINT8 Flags; 184 185 } AML_RESOURCE_START_DEPENDENT; 186 187 188 typedef struct aml_resource_start_dependent_noprio 189 { 190 AML_RESOURCE_SMALL_HEADER_COMMON 191 192 } AML_RESOURCE_START_DEPENDENT_NOPRIO; 193 194 195 typedef struct aml_resource_end_dependent 196 { 197 AML_RESOURCE_SMALL_HEADER_COMMON 198 199 } AML_RESOURCE_END_DEPENDENT; 200 201 202 typedef struct aml_resource_io 203 { 204 AML_RESOURCE_SMALL_HEADER_COMMON 205 UINT8 Flags; 206 UINT16 Minimum; 207 UINT16 Maximum; 208 UINT8 Alignment; 209 UINT8 AddressLength; 210 211 } AML_RESOURCE_IO; 212 213 214 typedef struct aml_resource_fixed_io 215 { 216 AML_RESOURCE_SMALL_HEADER_COMMON 217 UINT16 Address; 218 UINT8 AddressLength; 219 220 } AML_RESOURCE_FIXED_IO; 221 222 223 typedef struct aml_resource_vendor_small 224 { 225 AML_RESOURCE_SMALL_HEADER_COMMON 226 227 } AML_RESOURCE_VENDOR_SMALL; 228 229 230 typedef struct aml_resource_end_tag 231 { 232 AML_RESOURCE_SMALL_HEADER_COMMON 233 UINT8 Checksum; 234 235 } AML_RESOURCE_END_TAG; 236 237 238 typedef struct aml_resource_fixed_dma 239 { 240 AML_RESOURCE_SMALL_HEADER_COMMON 241 UINT16 RequestLines; 242 UINT16 Channels; 243 UINT8 Width; 244 245 } AML_RESOURCE_FIXED_DMA; 246 247 248 /* 249 * LARGE descriptors 250 */ 251 #define AML_RESOURCE_LARGE_HEADER_COMMON \ 252 UINT8 DescriptorType;\ 253 UINT16 ResourceLength; 254 255 typedef struct aml_resource_large_header 256 { 257 AML_RESOURCE_LARGE_HEADER_COMMON 258 259 } AML_RESOURCE_LARGE_HEADER; 260 261 262 /* General Flags for address space resource descriptors */ 263 264 #define ACPI_RESOURCE_FLAG_DEC 2 265 #define ACPI_RESOURCE_FLAG_MIF 4 266 #define ACPI_RESOURCE_FLAG_MAF 8 267 268 typedef struct aml_resource_memory24 269 { 270 AML_RESOURCE_LARGE_HEADER_COMMON 271 UINT8 Flags; 272 UINT16 Minimum; 273 UINT16 Maximum; 274 UINT16 Alignment; 275 UINT16 AddressLength; 276 277 } AML_RESOURCE_MEMORY24; 278 279 280 typedef struct aml_resource_vendor_large 281 { 282 AML_RESOURCE_LARGE_HEADER_COMMON 283 284 } AML_RESOURCE_VENDOR_LARGE; 285 286 287 typedef struct aml_resource_memory32 288 { 289 AML_RESOURCE_LARGE_HEADER_COMMON 290 UINT8 Flags; 291 UINT32 Minimum; 292 UINT32 Maximum; 293 UINT32 Alignment; 294 UINT32 AddressLength; 295 296 } AML_RESOURCE_MEMORY32; 297 298 299 typedef struct aml_resource_fixed_memory32 300 { 301 AML_RESOURCE_LARGE_HEADER_COMMON 302 UINT8 Flags; 303 UINT32 Address; 304 UINT32 AddressLength; 305 306 } AML_RESOURCE_FIXED_MEMORY32; 307 308 309 #define AML_RESOURCE_ADDRESS_COMMON \ 310 UINT8 ResourceType; \ 311 UINT8 Flags; \ 312 UINT8 SpecificFlags; 313 314 315 typedef struct aml_resource_address 316 { 317 AML_RESOURCE_LARGE_HEADER_COMMON 318 AML_RESOURCE_ADDRESS_COMMON 319 320 } AML_RESOURCE_ADDRESS; 321 322 323 typedef struct aml_resource_extended_address64 324 { 325 AML_RESOURCE_LARGE_HEADER_COMMON 326 AML_RESOURCE_ADDRESS_COMMON 327 UINT8 RevisionID; 328 UINT8 Reserved; 329 UINT64 Granularity; 330 UINT64 Minimum; 331 UINT64 Maximum; 332 UINT64 TranslationOffset; 333 UINT64 AddressLength; 334 UINT64 TypeSpecific; 335 336 } AML_RESOURCE_EXTENDED_ADDRESS64; 337 338 #define AML_RESOURCE_EXTENDED_ADDRESS_REVISION 1 /* ACPI 3.0 */ 339 340 341 typedef struct aml_resource_address64 342 { 343 AML_RESOURCE_LARGE_HEADER_COMMON 344 AML_RESOURCE_ADDRESS_COMMON 345 UINT64 Granularity; 346 UINT64 Minimum; 347 UINT64 Maximum; 348 UINT64 TranslationOffset; 349 UINT64 AddressLength; 350 351 } AML_RESOURCE_ADDRESS64; 352 353 354 typedef struct aml_resource_address32 355 { 356 AML_RESOURCE_LARGE_HEADER_COMMON 357 AML_RESOURCE_ADDRESS_COMMON 358 UINT32 Granularity; 359 UINT32 Minimum; 360 UINT32 Maximum; 361 UINT32 TranslationOffset; 362 UINT32 AddressLength; 363 364 } AML_RESOURCE_ADDRESS32; 365 366 367 typedef struct aml_resource_address16 368 { 369 AML_RESOURCE_LARGE_HEADER_COMMON 370 AML_RESOURCE_ADDRESS_COMMON 371 UINT16 Granularity; 372 UINT16 Minimum; 373 UINT16 Maximum; 374 UINT16 TranslationOffset; 375 UINT16 AddressLength; 376 377 } AML_RESOURCE_ADDRESS16; 378 379 380 typedef struct aml_resource_extended_irq 381 { 382 AML_RESOURCE_LARGE_HEADER_COMMON 383 UINT8 Flags; 384 UINT8 InterruptCount; 385 UINT32 Interrupts[1]; 386 /* ResSourceIndex, ResSource optional fields follow */ 387 388 } AML_RESOURCE_EXTENDED_IRQ; 389 390 391 typedef struct aml_resource_generic_register 392 { 393 AML_RESOURCE_LARGE_HEADER_COMMON 394 UINT8 AddressSpaceId; 395 UINT8 BitWidth; 396 UINT8 BitOffset; 397 UINT8 AccessSize; /* ACPI 3.0, was previously Reserved */ 398 UINT64 Address; 399 400 } AML_RESOURCE_GENERIC_REGISTER; 401 402 403 /* Common descriptor for GpioInt and GpioIo (ACPI 5.0) */ 404 405 typedef struct aml_resource_gpio 406 { 407 AML_RESOURCE_LARGE_HEADER_COMMON 408 UINT8 RevisionId; 409 UINT8 ConnectionType; 410 UINT16 Flags; 411 UINT16 IntFlags; 412 UINT8 PinConfig; 413 UINT16 DriveStrength; 414 UINT16 DebounceTimeout; 415 UINT16 PinTableOffset; 416 UINT8 ResSourceIndex; 417 UINT16 ResSourceOffset; 418 UINT16 VendorOffset; 419 UINT16 VendorLength; 420 /* 421 * Optional fields follow immediately: 422 * 1) PIN list (Words) 423 * 2) Resource Source String 424 * 3) Vendor Data bytes 425 */ 426 427 } AML_RESOURCE_GPIO; 428 429 #define AML_RESOURCE_GPIO_REVISION 1 /* ACPI 5.0 */ 430 431 /* Values for ConnectionType above */ 432 433 #define AML_RESOURCE_GPIO_TYPE_INT 0 434 #define AML_RESOURCE_GPIO_TYPE_IO 1 435 #define AML_RESOURCE_MAX_GPIOTYPE 1 436 437 438 /* Common preamble for all serial descriptors (ACPI 5.0) */ 439 440 #define AML_RESOURCE_SERIAL_COMMON \ 441 UINT8 RevisionId; \ 442 UINT8 ResSourceIndex; \ 443 UINT8 Type; \ 444 UINT8 Flags; \ 445 UINT16 TypeSpecificFlags; \ 446 UINT8 TypeRevisionId; \ 447 UINT16 TypeDataLength; \ 448 449 /* Values for the type field above */ 450 451 #define AML_RESOURCE_I2C_SERIALBUSTYPE 1 452 #define AML_RESOURCE_SPI_SERIALBUSTYPE 2 453 #define AML_RESOURCE_UART_SERIALBUSTYPE 3 454 #define AML_RESOURCE_MAX_SERIALBUSTYPE 3 455 #define AML_RESOURCE_VENDOR_SERIALBUSTYPE 192 /* Vendor defined is 0xC0-0xFF (NOT SUPPORTED) */ 456 457 typedef struct aml_resource_common_serialbus 458 { 459 AML_RESOURCE_LARGE_HEADER_COMMON 460 AML_RESOURCE_SERIAL_COMMON 461 462 } AML_RESOURCE_COMMON_SERIALBUS; 463 464 typedef struct aml_resource_i2c_serialbus 465 { 466 AML_RESOURCE_LARGE_HEADER_COMMON 467 AML_RESOURCE_SERIAL_COMMON 468 UINT32 ConnectionSpeed; 469 UINT16 SlaveAddress; 470 /* 471 * Optional fields follow immediately: 472 * 1) Vendor Data bytes 473 * 2) Resource Source String 474 */ 475 476 } AML_RESOURCE_I2C_SERIALBUS; 477 478 #define AML_RESOURCE_I2C_REVISION 1 /* ACPI 5.0 */ 479 #define AML_RESOURCE_I2C_TYPE_REVISION 1 /* ACPI 5.0 */ 480 #define AML_RESOURCE_I2C_MIN_DATA_LEN 6 481 482 typedef struct aml_resource_spi_serialbus 483 { 484 AML_RESOURCE_LARGE_HEADER_COMMON 485 AML_RESOURCE_SERIAL_COMMON 486 UINT32 ConnectionSpeed; 487 UINT8 DataBitLength; 488 UINT8 ClockPhase; 489 UINT8 ClockPolarity; 490 UINT16 DeviceSelection; 491 /* 492 * Optional fields follow immediately: 493 * 1) Vendor Data bytes 494 * 2) Resource Source String 495 */ 496 497 } AML_RESOURCE_SPI_SERIALBUS; 498 499 #define AML_RESOURCE_SPI_REVISION 1 /* ACPI 5.0 */ 500 #define AML_RESOURCE_SPI_TYPE_REVISION 1 /* ACPI 5.0 */ 501 #define AML_RESOURCE_SPI_MIN_DATA_LEN 9 502 503 504 typedef struct aml_resource_uart_serialbus 505 { 506 AML_RESOURCE_LARGE_HEADER_COMMON 507 AML_RESOURCE_SERIAL_COMMON 508 UINT32 DefaultBaudRate; 509 UINT16 RxFifoSize; 510 UINT16 TxFifoSize; 511 UINT8 Parity; 512 UINT8 LinesEnabled; 513 /* 514 * Optional fields follow immediately: 515 * 1) Vendor Data bytes 516 * 2) Resource Source String 517 */ 518 519 } AML_RESOURCE_UART_SERIALBUS; 520 521 #define AML_RESOURCE_UART_REVISION 1 /* ACPI 5.0 */ 522 #define AML_RESOURCE_UART_TYPE_REVISION 1 /* ACPI 5.0 */ 523 #define AML_RESOURCE_UART_MIN_DATA_LEN 10 524 525 526 /* restore default alignment */ 527 528 #pragma pack() 529 530 /* Union of all resource descriptors, so we can allocate the worst case */ 531 532 typedef union aml_resource 533 { 534 /* Descriptor headers */ 535 536 UINT8 DescriptorType; 537 AML_RESOURCE_SMALL_HEADER SmallHeader; 538 AML_RESOURCE_LARGE_HEADER LargeHeader; 539 540 /* Small resource descriptors */ 541 542 AML_RESOURCE_IRQ Irq; 543 AML_RESOURCE_DMA Dma; 544 AML_RESOURCE_START_DEPENDENT StartDpf; 545 AML_RESOURCE_END_DEPENDENT EndDpf; 546 AML_RESOURCE_IO Io; 547 AML_RESOURCE_FIXED_IO FixedIo; 548 AML_RESOURCE_FIXED_DMA FixedDma; 549 AML_RESOURCE_VENDOR_SMALL VendorSmall; 550 AML_RESOURCE_END_TAG EndTag; 551 552 /* Large resource descriptors */ 553 554 AML_RESOURCE_MEMORY24 Memory24; 555 AML_RESOURCE_GENERIC_REGISTER GenericReg; 556 AML_RESOURCE_VENDOR_LARGE VendorLarge; 557 AML_RESOURCE_MEMORY32 Memory32; 558 AML_RESOURCE_FIXED_MEMORY32 FixedMemory32; 559 AML_RESOURCE_ADDRESS16 Address16; 560 AML_RESOURCE_ADDRESS32 Address32; 561 AML_RESOURCE_ADDRESS64 Address64; 562 AML_RESOURCE_EXTENDED_ADDRESS64 ExtAddress64; 563 AML_RESOURCE_EXTENDED_IRQ ExtendedIrq; 564 AML_RESOURCE_GPIO Gpio; 565 AML_RESOURCE_I2C_SERIALBUS I2cSerialBus; 566 AML_RESOURCE_SPI_SERIALBUS SpiSerialBus; 567 AML_RESOURCE_UART_SERIALBUS UartSerialBus; 568 AML_RESOURCE_COMMON_SERIALBUS CommonSerialBus; 569 570 /* Utility overlays */ 571 572 AML_RESOURCE_ADDRESS Address; 573 UINT32 DwordItem; 574 UINT16 WordItem; 575 UINT8 ByteItem; 576 577 } AML_RESOURCE; 578 579 580 #pragma pack(pop) /* Restore original struct packing */ 581 582 #endif 583