1 /******************************************************************************* 2 * 3 * Module Name: rsserial - GPIO/SerialBus resource descriptors 4 * 5 ******************************************************************************/ 6 7 /* 8 * Copyright (C) 2000 - 2026, 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 MERCHANTABILITY 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 #include "acpi.h" 45 #include "accommon.h" 46 #include "acresrc.h" 47 48 #define _COMPONENT ACPI_RESOURCES 49 ACPI_MODULE_NAME ("rsserial") 50 51 52 /******************************************************************************* 53 * 54 * AcpiRsConvertGpio 55 * 56 ******************************************************************************/ 57 58 ACPI_RSCONVERT_INFO AcpiRsConvertGpio[18] = 59 { 60 {ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_GPIO, 61 ACPI_RS_SIZE (ACPI_RESOURCE_GPIO), 62 ACPI_RSC_TABLE_SIZE (AcpiRsConvertGpio)}, 63 64 {ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_GPIO, 65 sizeof (AML_RESOURCE_GPIO), 66 0}, 67 68 /* 69 * These fields are contiguous in both the source and destination: 70 * RevisionId 71 * ConnectionType 72 */ 73 {ACPI_RSC_MOVE8, ACPI_RS_OFFSET (Data.Gpio.RevisionId), 74 AML_OFFSET (Gpio.RevisionId), 75 2}, 76 77 {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.Gpio.ProducerConsumer), 78 AML_OFFSET (Gpio.Flags), 79 0}, 80 81 {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.Gpio.Shareable), 82 AML_OFFSET (Gpio.IntFlags), 83 3}, 84 85 {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.Gpio.WakeCapable), 86 AML_OFFSET (Gpio.IntFlags), 87 4}, 88 89 {ACPI_RSC_2BITFLAG, ACPI_RS_OFFSET (Data.Gpio.IoRestriction), 90 AML_OFFSET (Gpio.IntFlags), 91 0}, 92 93 {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.Gpio.Triggering), 94 AML_OFFSET (Gpio.IntFlags), 95 0}, 96 97 {ACPI_RSC_2BITFLAG, ACPI_RS_OFFSET (Data.Gpio.Polarity), 98 AML_OFFSET (Gpio.IntFlags), 99 1}, 100 101 {ACPI_RSC_MOVE8, ACPI_RS_OFFSET (Data.Gpio.PinConfig), 102 AML_OFFSET (Gpio.PinConfig), 103 1}, 104 105 /* 106 * These fields are contiguous in both the source and destination: 107 * DriveStrength 108 * DebounceTimeout 109 */ 110 {ACPI_RSC_MOVE16, ACPI_RS_OFFSET (Data.Gpio.DriveStrength), 111 AML_OFFSET (Gpio.DriveStrength), 112 2}, 113 114 /* Pin Table */ 115 116 {ACPI_RSC_COUNT_GPIO_PIN, ACPI_RS_OFFSET (Data.Gpio.PinTableLength), 117 AML_OFFSET (Gpio.PinTableOffset), 118 AML_OFFSET (Gpio.ResSourceOffset)}, 119 120 {ACPI_RSC_MOVE_GPIO_PIN, ACPI_RS_OFFSET (Data.Gpio.PinTable), 121 AML_OFFSET (Gpio.PinTableOffset), 122 0}, 123 124 /* Resource Source */ 125 126 {ACPI_RSC_MOVE8, ACPI_RS_OFFSET (Data.Gpio.ResourceSource.Index), 127 AML_OFFSET (Gpio.ResSourceIndex), 128 1}, 129 130 {ACPI_RSC_COUNT_GPIO_RES, ACPI_RS_OFFSET (Data.Gpio.ResourceSource.StringLength), 131 AML_OFFSET (Gpio.ResSourceOffset), 132 AML_OFFSET (Gpio.VendorOffset)}, 133 134 {ACPI_RSC_MOVE_GPIO_RES, ACPI_RS_OFFSET (Data.Gpio.ResourceSource.StringPtr), 135 AML_OFFSET (Gpio.ResSourceOffset), 136 0}, 137 138 /* Vendor Data */ 139 140 {ACPI_RSC_COUNT_GPIO_VEN, ACPI_RS_OFFSET (Data.Gpio.VendorLength), 141 AML_OFFSET (Gpio.VendorLength), 142 1}, 143 144 {ACPI_RSC_MOVE_GPIO_RES, ACPI_RS_OFFSET (Data.Gpio.VendorData), 145 AML_OFFSET (Gpio.VendorOffset), 146 0}, 147 }; 148 149 /******************************************************************************* 150 * 151 * AcpiRsConvertClockInput 152 * 153 ******************************************************************************/ 154 155 ACPI_RSCONVERT_INFO AcpiRsConvertClockInput[8] = 156 { 157 {ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_CLOCK_INPUT, 158 ACPI_RS_SIZE (ACPI_RESOURCE_CLOCK_INPUT), 159 ACPI_RSC_TABLE_SIZE (AcpiRsConvertClockInput)}, 160 161 {ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_CLOCK_INPUT, 162 sizeof (AML_RESOURCE_CLOCK_INPUT), 163 0}, 164 165 {ACPI_RSC_MOVE8, ACPI_RS_OFFSET (Data.ClockInput.RevisionId), 166 AML_OFFSET (ClockInput.RevisionId), 167 1}, 168 169 {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.ClockInput.Mode), 170 AML_OFFSET (ClockInput.Flags), 171 0}, 172 173 {ACPI_RSC_2BITFLAG, ACPI_RS_OFFSET (Data.ClockInput.Scale), 174 AML_OFFSET (ClockInput.Flags), 175 1}, 176 177 {ACPI_RSC_MOVE16, ACPI_RS_OFFSET (Data.ClockInput.FrequencyDivisor), 178 AML_OFFSET (ClockInput.FrequencyDivisor), 179 2}, 180 181 {ACPI_RSC_MOVE32, ACPI_RS_OFFSET (Data.ClockInput.FrequencyNumerator), 182 AML_OFFSET (ClockInput.FrequencyNumerator), 183 4}, 184 185 /* Resource Source */ 186 {ACPI_RSC_SOURCE, ACPI_RS_OFFSET (Data.ClockInput.ResourceSource), 187 0, 188 sizeof(AML_RESOURCE_CLOCK_INPUT)}, 189 190 }; 191 192 193 /******************************************************************************* 194 * 195 * AcpiRsConvertPinfunction 196 * 197 ******************************************************************************/ 198 199 ACPI_RSCONVERT_INFO AcpiRsConvertPinFunction[13] = 200 { 201 {ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_PIN_FUNCTION, 202 ACPI_RS_SIZE (ACPI_RESOURCE_PIN_FUNCTION), 203 ACPI_RSC_TABLE_SIZE (AcpiRsConvertPinFunction)}, 204 205 {ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_PIN_FUNCTION, 206 sizeof (AML_RESOURCE_PIN_FUNCTION), 207 0}, 208 209 {ACPI_RSC_MOVE8, ACPI_RS_OFFSET (Data.PinFunction.RevisionId), 210 AML_OFFSET (PinFunction.RevisionId), 211 1}, 212 213 {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.PinFunction.Shareable), 214 AML_OFFSET (PinFunction.Flags), 215 0}, 216 217 {ACPI_RSC_MOVE8, ACPI_RS_OFFSET (Data.PinFunction.PinConfig), 218 AML_OFFSET (PinFunction.PinConfig), 219 1}, 220 221 {ACPI_RSC_MOVE16, ACPI_RS_OFFSET (Data.PinFunction.FunctionNumber), 222 AML_OFFSET (PinFunction.FunctionNumber), 223 2}, 224 225 /* Pin Table */ 226 227 /* 228 * It is OK to use GPIO operations here because none of them refer GPIO 229 * structures directly but instead use offsets given here. 230 */ 231 232 {ACPI_RSC_COUNT_GPIO_PIN, ACPI_RS_OFFSET (Data.PinFunction.PinTableLength), 233 AML_OFFSET (PinFunction.PinTableOffset), 234 AML_OFFSET (PinFunction.ResSourceOffset)}, 235 236 {ACPI_RSC_MOVE_GPIO_PIN, ACPI_RS_OFFSET (Data.PinFunction.PinTable), 237 AML_OFFSET (PinFunction.PinTableOffset), 238 0}, 239 240 /* Resource Source */ 241 242 {ACPI_RSC_MOVE8, ACPI_RS_OFFSET (Data.PinFunction.ResourceSource.Index), 243 AML_OFFSET (PinFunction.ResSourceIndex), 244 1}, 245 246 {ACPI_RSC_COUNT_GPIO_RES, ACPI_RS_OFFSET (Data.PinFunction.ResourceSource.StringLength), 247 AML_OFFSET (PinFunction.ResSourceOffset), 248 AML_OFFSET (PinFunction.VendorOffset)}, 249 250 {ACPI_RSC_MOVE_GPIO_RES, ACPI_RS_OFFSET (Data.PinFunction.ResourceSource.StringPtr), 251 AML_OFFSET (PinFunction.ResSourceOffset), 252 0}, 253 254 /* Vendor Data */ 255 256 {ACPI_RSC_COUNT_GPIO_VEN, ACPI_RS_OFFSET (Data.PinFunction.VendorLength), 257 AML_OFFSET (PinFunction.VendorLength), 258 1}, 259 260 {ACPI_RSC_MOVE_GPIO_RES, ACPI_RS_OFFSET (Data.PinFunction.VendorData), 261 AML_OFFSET (PinFunction.VendorOffset), 262 0}, 263 }; 264 265 266 /******************************************************************************* 267 * 268 * AcpiRsConvertCsi2SerialBus 269 * 270 ******************************************************************************/ 271 272 ACPI_RSCONVERT_INFO AcpiRsConvertCsi2SerialBus[14] = 273 { 274 {ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_SERIAL_BUS, 275 ACPI_RS_SIZE (ACPI_RESOURCE_CSI2_SERIALBUS), 276 ACPI_RSC_TABLE_SIZE (AcpiRsConvertCsi2SerialBus)}, 277 278 {ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_SERIAL_BUS, 279 sizeof (AML_RESOURCE_CSI2_SERIALBUS), 280 0}, 281 282 {ACPI_RSC_MOVE8, ACPI_RS_OFFSET (Data.CommonSerialBus.RevisionId), 283 AML_OFFSET (CommonSerialBus.RevisionId), 284 1}, 285 286 {ACPI_RSC_MOVE8, ACPI_RS_OFFSET (Data.Csi2SerialBus.Type), 287 AML_OFFSET (Csi2SerialBus.Type), 288 1}, 289 290 {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.Csi2SerialBus.ProducerConsumer), 291 AML_OFFSET (Csi2SerialBus.Flags), 292 1}, 293 294 {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.Csi2SerialBus.SlaveMode), 295 AML_OFFSET (Csi2SerialBus.Flags), 296 0}, 297 298 {ACPI_RSC_2BITFLAG, ACPI_RS_OFFSET (Data.Csi2SerialBus.PhyType), 299 AML_OFFSET (Csi2SerialBus.TypeSpecificFlags), 300 0}, 301 302 {ACPI_RSC_6BITFLAG, ACPI_RS_OFFSET (Data.Csi2SerialBus.LocalPortInstance), 303 AML_OFFSET (Csi2SerialBus.TypeSpecificFlags), 304 2}, 305 306 {ACPI_RSC_MOVE8, ACPI_RS_OFFSET (Data.Csi2SerialBus.TypeRevisionId), 307 AML_OFFSET (Csi2SerialBus.TypeRevisionId), 308 1}, 309 310 /* Vendor data */ 311 312 {ACPI_RSC_COUNT_SERIAL_VEN, ACPI_RS_OFFSET (Data.Csi2SerialBus.VendorLength), 313 AML_OFFSET (Csi2SerialBus.TypeDataLength), 314 AML_RESOURCE_CSI2_MIN_DATA_LEN}, 315 316 {ACPI_RSC_MOVE_SERIAL_VEN, ACPI_RS_OFFSET (Data.Csi2SerialBus.VendorData), 317 0, 318 sizeof (AML_RESOURCE_CSI2_SERIALBUS)}, 319 320 /* Resource Source */ 321 322 {ACPI_RSC_MOVE8, ACPI_RS_OFFSET (Data.Csi2SerialBus.ResourceSource.Index), 323 AML_OFFSET (Csi2SerialBus.ResSourceIndex), 324 1}, 325 326 {ACPI_RSC_COUNT_SERIAL_RES, ACPI_RS_OFFSET (Data.Csi2SerialBus.ResourceSource.StringLength), 327 AML_OFFSET (Csi2SerialBus.TypeDataLength), 328 sizeof (AML_RESOURCE_CSI2_SERIALBUS)}, 329 330 {ACPI_RSC_MOVE_SERIAL_RES, ACPI_RS_OFFSET (Data.Csi2SerialBus.ResourceSource.StringPtr), 331 AML_OFFSET (Csi2SerialBus.TypeDataLength), 332 sizeof (AML_RESOURCE_CSI2_SERIALBUS)}, 333 }; 334 335 336 /******************************************************************************* 337 * 338 * AcpiRsConvertI2cSerialBus 339 * 340 ******************************************************************************/ 341 342 ACPI_RSCONVERT_INFO AcpiRsConvertI2cSerialBus[18] = 343 { 344 {ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_SERIAL_BUS, 345 ACPI_RS_SIZE (ACPI_RESOURCE_I2C_SERIALBUS), 346 ACPI_RSC_TABLE_SIZE (AcpiRsConvertI2cSerialBus)}, 347 348 {ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_SERIAL_BUS, 349 sizeof (AML_RESOURCE_I2C_SERIALBUS), 350 0}, 351 352 {ACPI_RSC_MOVE8, ACPI_RS_OFFSET (Data.CommonSerialBus.RevisionId), 353 AML_OFFSET (CommonSerialBus.RevisionId), 354 1}, 355 356 {ACPI_RSC_MOVE8, ACPI_RS_OFFSET (Data.CommonSerialBus.Type), 357 AML_OFFSET (CommonSerialBus.Type), 358 1}, 359 360 {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.CommonSerialBus.SlaveMode), 361 AML_OFFSET (CommonSerialBus.Flags), 362 0}, 363 364 {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.CommonSerialBus.ProducerConsumer), 365 AML_OFFSET (CommonSerialBus.Flags), 366 1}, 367 368 {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.CommonSerialBus.ConnectionSharing), 369 AML_OFFSET (CommonSerialBus.Flags), 370 2}, 371 372 {ACPI_RSC_MOVE8, ACPI_RS_OFFSET (Data.CommonSerialBus.TypeRevisionId), 373 AML_OFFSET (CommonSerialBus.TypeRevisionId), 374 1}, 375 376 {ACPI_RSC_MOVE16, ACPI_RS_OFFSET (Data.CommonSerialBus.TypeDataLength), 377 AML_OFFSET (CommonSerialBus.TypeDataLength), 378 1}, 379 380 /* Vendor data */ 381 382 {ACPI_RSC_COUNT_SERIAL_VEN, ACPI_RS_OFFSET (Data.CommonSerialBus.VendorLength), 383 AML_OFFSET (CommonSerialBus.TypeDataLength), 384 AML_RESOURCE_I2C_MIN_DATA_LEN}, 385 386 {ACPI_RSC_MOVE_SERIAL_VEN, ACPI_RS_OFFSET (Data.CommonSerialBus.VendorData), 387 0, 388 sizeof (AML_RESOURCE_I2C_SERIALBUS)}, 389 390 /* Resource Source */ 391 392 {ACPI_RSC_MOVE8, ACPI_RS_OFFSET (Data.CommonSerialBus.ResourceSource.Index), 393 AML_OFFSET (CommonSerialBus.ResSourceIndex), 394 1}, 395 396 {ACPI_RSC_COUNT_SERIAL_RES, ACPI_RS_OFFSET (Data.CommonSerialBus.ResourceSource.StringLength), 397 AML_OFFSET (CommonSerialBus.TypeDataLength), 398 sizeof (AML_RESOURCE_COMMON_SERIALBUS)}, 399 400 {ACPI_RSC_MOVE_SERIAL_RES, ACPI_RS_OFFSET (Data.CommonSerialBus.ResourceSource.StringPtr), 401 AML_OFFSET (CommonSerialBus.TypeDataLength), 402 sizeof (AML_RESOURCE_COMMON_SERIALBUS)}, 403 404 /* I2C bus type specific */ 405 406 {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.I2cSerialBus.AccessMode), 407 AML_OFFSET (I2cSerialBus.TypeSpecificFlags), 408 0}, 409 410 /* Read LVR from Type Specific Flags, bits[15:8] */ 411 {ACPI_RSC_MOVE8, ACPI_RS_OFFSET (Data.I2cSerialBus.Lvr), 412 AML_OFFSET (I2cSerialBus.TypeSpecificFlags) + 1, 413 1}, 414 415 {ACPI_RSC_MOVE32, ACPI_RS_OFFSET (Data.I2cSerialBus.ConnectionSpeed), 416 AML_OFFSET (I2cSerialBus.ConnectionSpeed), 417 1}, 418 419 {ACPI_RSC_MOVE16, ACPI_RS_OFFSET (Data.I2cSerialBus.SlaveAddress), 420 AML_OFFSET (I2cSerialBus.SlaveAddress), 421 1}, 422 }; 423 424 425 /******************************************************************************* 426 * 427 * AcpiRsConvertSpiSerialBus 428 * 429 ******************************************************************************/ 430 431 ACPI_RSCONVERT_INFO AcpiRsConvertSpiSerialBus[21] = 432 { 433 {ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_SERIAL_BUS, 434 ACPI_RS_SIZE (ACPI_RESOURCE_SPI_SERIALBUS), 435 ACPI_RSC_TABLE_SIZE (AcpiRsConvertSpiSerialBus)}, 436 437 {ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_SERIAL_BUS, 438 sizeof (AML_RESOURCE_SPI_SERIALBUS), 439 0}, 440 441 {ACPI_RSC_MOVE8, ACPI_RS_OFFSET (Data.CommonSerialBus.RevisionId), 442 AML_OFFSET (CommonSerialBus.RevisionId), 443 1}, 444 445 {ACPI_RSC_MOVE8, ACPI_RS_OFFSET (Data.CommonSerialBus.Type), 446 AML_OFFSET (CommonSerialBus.Type), 447 1}, 448 449 {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.CommonSerialBus.SlaveMode), 450 AML_OFFSET (CommonSerialBus.Flags), 451 0}, 452 453 {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.CommonSerialBus.ProducerConsumer), 454 AML_OFFSET (CommonSerialBus.Flags), 455 1}, 456 457 {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.CommonSerialBus.ConnectionSharing), 458 AML_OFFSET (CommonSerialBus.Flags), 459 2}, 460 461 {ACPI_RSC_MOVE8, ACPI_RS_OFFSET (Data.CommonSerialBus.TypeRevisionId), 462 AML_OFFSET (CommonSerialBus.TypeRevisionId), 463 1}, 464 465 {ACPI_RSC_MOVE16, ACPI_RS_OFFSET (Data.CommonSerialBus.TypeDataLength), 466 AML_OFFSET (CommonSerialBus.TypeDataLength), 467 1}, 468 469 /* Vendor data */ 470 471 {ACPI_RSC_COUNT_SERIAL_VEN, ACPI_RS_OFFSET (Data.CommonSerialBus.VendorLength), 472 AML_OFFSET (CommonSerialBus.TypeDataLength), 473 AML_RESOURCE_SPI_MIN_DATA_LEN}, 474 475 {ACPI_RSC_MOVE_SERIAL_VEN, ACPI_RS_OFFSET (Data.CommonSerialBus.VendorData), 476 0, 477 sizeof (AML_RESOURCE_SPI_SERIALBUS)}, 478 479 /* Resource Source */ 480 481 {ACPI_RSC_MOVE8, ACPI_RS_OFFSET (Data.CommonSerialBus.ResourceSource.Index), 482 AML_OFFSET (CommonSerialBus.ResSourceIndex), 483 1}, 484 485 {ACPI_RSC_COUNT_SERIAL_RES, ACPI_RS_OFFSET (Data.CommonSerialBus.ResourceSource.StringLength), 486 AML_OFFSET (CommonSerialBus.TypeDataLength), 487 sizeof (AML_RESOURCE_COMMON_SERIALBUS)}, 488 489 {ACPI_RSC_MOVE_SERIAL_RES, ACPI_RS_OFFSET (Data.CommonSerialBus.ResourceSource.StringPtr), 490 AML_OFFSET (CommonSerialBus.TypeDataLength), 491 sizeof (AML_RESOURCE_COMMON_SERIALBUS)}, 492 493 /* Spi bus type specific */ 494 495 {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.SpiSerialBus.WireMode), 496 AML_OFFSET (SpiSerialBus.TypeSpecificFlags), 497 0}, 498 499 {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.SpiSerialBus.DevicePolarity), 500 AML_OFFSET (SpiSerialBus.TypeSpecificFlags), 501 1}, 502 503 {ACPI_RSC_MOVE8, ACPI_RS_OFFSET (Data.SpiSerialBus.DataBitLength), 504 AML_OFFSET (SpiSerialBus.DataBitLength), 505 1}, 506 507 {ACPI_RSC_MOVE8, ACPI_RS_OFFSET (Data.SpiSerialBus.ClockPhase), 508 AML_OFFSET (SpiSerialBus.ClockPhase), 509 1}, 510 511 {ACPI_RSC_MOVE8, ACPI_RS_OFFSET (Data.SpiSerialBus.ClockPolarity), 512 AML_OFFSET (SpiSerialBus.ClockPolarity), 513 1}, 514 515 {ACPI_RSC_MOVE16, ACPI_RS_OFFSET (Data.SpiSerialBus.DeviceSelection), 516 AML_OFFSET (SpiSerialBus.DeviceSelection), 517 1}, 518 519 {ACPI_RSC_MOVE32, ACPI_RS_OFFSET (Data.SpiSerialBus.ConnectionSpeed), 520 AML_OFFSET (SpiSerialBus.ConnectionSpeed), 521 1}, 522 }; 523 524 525 /******************************************************************************* 526 * 527 * AcpiRsConvertUartSerialBus 528 * 529 ******************************************************************************/ 530 531 ACPI_RSCONVERT_INFO AcpiRsConvertUartSerialBus[23] = 532 { 533 {ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_SERIAL_BUS, 534 ACPI_RS_SIZE (ACPI_RESOURCE_UART_SERIALBUS), 535 ACPI_RSC_TABLE_SIZE (AcpiRsConvertUartSerialBus)}, 536 537 {ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_SERIAL_BUS, 538 sizeof (AML_RESOURCE_UART_SERIALBUS), 539 0}, 540 541 {ACPI_RSC_MOVE8, ACPI_RS_OFFSET (Data.CommonSerialBus.RevisionId), 542 AML_OFFSET (CommonSerialBus.RevisionId), 543 1}, 544 545 {ACPI_RSC_MOVE8, ACPI_RS_OFFSET (Data.CommonSerialBus.Type), 546 AML_OFFSET (CommonSerialBus.Type), 547 1}, 548 549 {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.CommonSerialBus.SlaveMode), 550 AML_OFFSET (CommonSerialBus.Flags), 551 0}, 552 553 {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.CommonSerialBus.ProducerConsumer), 554 AML_OFFSET (CommonSerialBus.Flags), 555 1}, 556 557 {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.CommonSerialBus.ConnectionSharing), 558 AML_OFFSET (CommonSerialBus.Flags), 559 2}, 560 561 {ACPI_RSC_MOVE8, ACPI_RS_OFFSET (Data.CommonSerialBus.TypeRevisionId), 562 AML_OFFSET (CommonSerialBus.TypeRevisionId), 563 1}, 564 565 {ACPI_RSC_MOVE16, ACPI_RS_OFFSET (Data.CommonSerialBus.TypeDataLength), 566 AML_OFFSET (CommonSerialBus.TypeDataLength), 567 1}, 568 569 /* Vendor data */ 570 571 {ACPI_RSC_COUNT_SERIAL_VEN, ACPI_RS_OFFSET (Data.CommonSerialBus.VendorLength), 572 AML_OFFSET (CommonSerialBus.TypeDataLength), 573 AML_RESOURCE_UART_MIN_DATA_LEN}, 574 575 {ACPI_RSC_MOVE_SERIAL_VEN, ACPI_RS_OFFSET (Data.CommonSerialBus.VendorData), 576 0, 577 sizeof (AML_RESOURCE_UART_SERIALBUS)}, 578 579 /* Resource Source */ 580 581 {ACPI_RSC_MOVE8, ACPI_RS_OFFSET (Data.CommonSerialBus.ResourceSource.Index), 582 AML_OFFSET (CommonSerialBus.ResSourceIndex), 583 1}, 584 585 {ACPI_RSC_COUNT_SERIAL_RES, ACPI_RS_OFFSET (Data.CommonSerialBus.ResourceSource.StringLength), 586 AML_OFFSET (CommonSerialBus.TypeDataLength), 587 sizeof (AML_RESOURCE_COMMON_SERIALBUS)}, 588 589 {ACPI_RSC_MOVE_SERIAL_RES, ACPI_RS_OFFSET (Data.CommonSerialBus.ResourceSource.StringPtr), 590 AML_OFFSET (CommonSerialBus.TypeDataLength), 591 sizeof (AML_RESOURCE_COMMON_SERIALBUS)}, 592 593 /* Uart bus type specific */ 594 595 {ACPI_RSC_2BITFLAG, ACPI_RS_OFFSET (Data.UartSerialBus.FlowControl), 596 AML_OFFSET (UartSerialBus.TypeSpecificFlags), 597 0}, 598 599 {ACPI_RSC_2BITFLAG, ACPI_RS_OFFSET (Data.UartSerialBus.StopBits), 600 AML_OFFSET (UartSerialBus.TypeSpecificFlags), 601 2}, 602 603 {ACPI_RSC_3BITFLAG, ACPI_RS_OFFSET (Data.UartSerialBus.DataBits), 604 AML_OFFSET (UartSerialBus.TypeSpecificFlags), 605 4}, 606 607 {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.UartSerialBus.Endian), 608 AML_OFFSET (UartSerialBus.TypeSpecificFlags), 609 7}, 610 611 {ACPI_RSC_MOVE8, ACPI_RS_OFFSET (Data.UartSerialBus.Parity), 612 AML_OFFSET (UartSerialBus.Parity), 613 1}, 614 615 {ACPI_RSC_MOVE8, ACPI_RS_OFFSET (Data.UartSerialBus.LinesEnabled), 616 AML_OFFSET (UartSerialBus.LinesEnabled), 617 1}, 618 619 {ACPI_RSC_MOVE16, ACPI_RS_OFFSET (Data.UartSerialBus.RxFifoSize), 620 AML_OFFSET (UartSerialBus.RxFifoSize), 621 1}, 622 623 {ACPI_RSC_MOVE16, ACPI_RS_OFFSET (Data.UartSerialBus.TxFifoSize), 624 AML_OFFSET (UartSerialBus.TxFifoSize), 625 1}, 626 627 {ACPI_RSC_MOVE32, ACPI_RS_OFFSET (Data.UartSerialBus.DefaultBaudRate), 628 AML_OFFSET (UartSerialBus.DefaultBaudRate), 629 1}, 630 }; 631 632 633 /******************************************************************************* 634 * 635 * AcpiRsConvertPinConfig 636 * 637 ******************************************************************************/ 638 639 ACPI_RSCONVERT_INFO AcpiRsConvertPinConfig[14] = 640 { 641 {ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_PIN_CONFIG, 642 ACPI_RS_SIZE (ACPI_RESOURCE_PIN_CONFIG), 643 ACPI_RSC_TABLE_SIZE (AcpiRsConvertPinConfig)}, 644 645 {ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_PIN_CONFIG, 646 sizeof (AML_RESOURCE_PIN_CONFIG), 647 0}, 648 649 {ACPI_RSC_MOVE8, ACPI_RS_OFFSET (Data.PinConfig.RevisionId), 650 AML_OFFSET (PinConfig.RevisionId), 651 1}, 652 653 {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.PinConfig.Shareable), 654 AML_OFFSET (PinConfig.Flags), 655 0}, 656 657 {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.PinConfig.ProducerConsumer), 658 AML_OFFSET (PinConfig.Flags), 659 1}, 660 661 {ACPI_RSC_MOVE8, ACPI_RS_OFFSET (Data.PinConfig.PinConfigType), 662 AML_OFFSET (PinConfig.PinConfigType), 663 1}, 664 665 {ACPI_RSC_MOVE32, ACPI_RS_OFFSET (Data.PinConfig.PinConfigValue), 666 AML_OFFSET (PinConfig.PinConfigValue), 667 1}, 668 669 /* Pin Table */ 670 671 /* 672 * It is OK to use GPIO operations here because none of them refer GPIO 673 * structures directly but instead use offsets given here. 674 */ 675 676 {ACPI_RSC_COUNT_GPIO_PIN, ACPI_RS_OFFSET (Data.PinConfig.PinTableLength), 677 AML_OFFSET (PinConfig.PinTableOffset), 678 AML_OFFSET (PinConfig.ResSourceOffset)}, 679 680 {ACPI_RSC_MOVE_GPIO_PIN, ACPI_RS_OFFSET (Data.PinConfig.PinTable), 681 AML_OFFSET (PinConfig.PinTableOffset), 682 0}, 683 684 /* Resource Source */ 685 686 {ACPI_RSC_MOVE8, ACPI_RS_OFFSET (Data.PinConfig.ResourceSource.Index), 687 AML_OFFSET (PinConfig.ResSourceIndex), 688 1}, 689 690 {ACPI_RSC_COUNT_GPIO_RES, ACPI_RS_OFFSET (Data.PinConfig.ResourceSource.StringLength), 691 AML_OFFSET (PinConfig.ResSourceOffset), 692 AML_OFFSET (PinConfig.VendorOffset)}, 693 694 {ACPI_RSC_MOVE_GPIO_RES, ACPI_RS_OFFSET (Data.PinConfig.ResourceSource.StringPtr), 695 AML_OFFSET (PinConfig.ResSourceOffset), 696 0}, 697 698 /* Vendor Data */ 699 700 {ACPI_RSC_COUNT_GPIO_VEN, ACPI_RS_OFFSET (Data.PinConfig.VendorLength), 701 AML_OFFSET (PinConfig.VendorLength), 702 1}, 703 704 {ACPI_RSC_MOVE_GPIO_RES, ACPI_RS_OFFSET (Data.PinConfig.VendorData), 705 AML_OFFSET (PinConfig.VendorOffset), 706 0}, 707 }; 708 709 /******************************************************************************* 710 * 711 * AcpiRsConvertPinGroup 712 * 713 ******************************************************************************/ 714 715 ACPI_RSCONVERT_INFO AcpiRsConvertPinGroup[10] = 716 { 717 {ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_PIN_GROUP, 718 ACPI_RS_SIZE (ACPI_RESOURCE_PIN_GROUP), 719 ACPI_RSC_TABLE_SIZE (AcpiRsConvertPinGroup)}, 720 721 {ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_PIN_GROUP, 722 sizeof (AML_RESOURCE_PIN_GROUP), 723 0}, 724 725 {ACPI_RSC_MOVE8, ACPI_RS_OFFSET (Data.PinGroup.RevisionId), 726 AML_OFFSET (PinGroup.RevisionId), 727 1}, 728 729 {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.PinGroup.ProducerConsumer), 730 AML_OFFSET (PinGroup.Flags), 731 0}, 732 733 /* Pin Table */ 734 735 /* 736 * It is OK to use GPIO operations here because none of them refer GPIO 737 * structures directly but instead use offsets given here. 738 */ 739 740 {ACPI_RSC_COUNT_GPIO_PIN, ACPI_RS_OFFSET (Data.PinGroup.PinTableLength), 741 AML_OFFSET (PinGroup.PinTableOffset), 742 AML_OFFSET (PinGroup.LabelOffset)}, 743 744 {ACPI_RSC_MOVE_GPIO_PIN, ACPI_RS_OFFSET (Data.PinGroup.PinTable), 745 AML_OFFSET (PinGroup.PinTableOffset), 746 0}, 747 748 /* Resource Label */ 749 750 {ACPI_RSC_COUNT_GPIO_RES, ACPI_RS_OFFSET (Data.PinGroup.ResourceLabel.StringLength), 751 AML_OFFSET (PinGroup.LabelOffset), 752 AML_OFFSET (PinGroup.VendorOffset)}, 753 754 {ACPI_RSC_MOVE_GPIO_RES, ACPI_RS_OFFSET (Data.PinGroup.ResourceLabel.StringPtr), 755 AML_OFFSET (PinGroup.LabelOffset), 756 0}, 757 758 /* Vendor Data */ 759 760 {ACPI_RSC_COUNT_GPIO_VEN, ACPI_RS_OFFSET (Data.PinGroup.VendorLength), 761 AML_OFFSET (PinGroup.VendorLength), 762 1}, 763 764 {ACPI_RSC_MOVE_GPIO_RES, ACPI_RS_OFFSET (Data.PinGroup.VendorData), 765 AML_OFFSET (PinGroup.VendorOffset), 766 0}, 767 }; 768 769 /******************************************************************************* 770 * 771 * AcpiRsConvertPinGroupFunction 772 * 773 ******************************************************************************/ 774 775 ACPI_RSCONVERT_INFO AcpiRsConvertPinGroupFunction[13] = 776 { 777 {ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_PIN_GROUP_FUNCTION, 778 ACPI_RS_SIZE (ACPI_RESOURCE_PIN_GROUP_FUNCTION), 779 ACPI_RSC_TABLE_SIZE (AcpiRsConvertPinGroupFunction)}, 780 781 {ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_PIN_GROUP_FUNCTION, 782 sizeof (AML_RESOURCE_PIN_GROUP_FUNCTION), 783 0}, 784 785 {ACPI_RSC_MOVE8, ACPI_RS_OFFSET (Data.PinGroupFunction.RevisionId), 786 AML_OFFSET (PinGroupFunction.RevisionId), 787 1}, 788 789 {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.PinGroupFunction.Shareable), 790 AML_OFFSET (PinGroupFunction.Flags), 791 0}, 792 793 {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.PinGroupFunction.ProducerConsumer), 794 AML_OFFSET (PinGroupFunction.Flags), 795 1}, 796 797 {ACPI_RSC_MOVE16, ACPI_RS_OFFSET (Data.PinGroupFunction.FunctionNumber), 798 AML_OFFSET (PinGroupFunction.FunctionNumber), 799 1}, 800 801 /* Resource Source */ 802 803 {ACPI_RSC_MOVE8, ACPI_RS_OFFSET (Data.PinGroupFunction.ResourceSource.Index), 804 AML_OFFSET (PinGroupFunction.ResSourceIndex), 805 1}, 806 807 {ACPI_RSC_COUNT_GPIO_RES, ACPI_RS_OFFSET (Data.PinGroupFunction.ResourceSource.StringLength), 808 AML_OFFSET (PinGroupFunction.ResSourceOffset), 809 AML_OFFSET (PinGroupFunction.ResSourceLabelOffset)}, 810 811 {ACPI_RSC_MOVE_GPIO_RES, ACPI_RS_OFFSET (Data.PinGroupFunction.ResourceSource.StringPtr), 812 AML_OFFSET (PinGroupFunction.ResSourceOffset), 813 0}, 814 815 /* Resource Source Label */ 816 817 {ACPI_RSC_COUNT_GPIO_RES, ACPI_RS_OFFSET (Data.PinGroupFunction.ResourceSourceLabel.StringLength), 818 AML_OFFSET (PinGroupFunction.ResSourceLabelOffset), 819 AML_OFFSET (PinGroupFunction.VendorOffset)}, 820 821 {ACPI_RSC_MOVE_GPIO_RES, ACPI_RS_OFFSET (Data.PinGroupFunction.ResourceSourceLabel.StringPtr), 822 AML_OFFSET (PinGroupFunction.ResSourceLabelOffset), 823 0}, 824 825 /* Vendor Data */ 826 827 {ACPI_RSC_COUNT_GPIO_VEN, ACPI_RS_OFFSET (Data.PinGroupFunction.VendorLength), 828 AML_OFFSET (PinGroupFunction.VendorLength), 829 1}, 830 831 {ACPI_RSC_MOVE_GPIO_RES, ACPI_RS_OFFSET (Data.PinGroupFunction.VendorData), 832 AML_OFFSET (PinGroupFunction.VendorOffset), 833 0}, 834 }; 835 836 /******************************************************************************* 837 * 838 * AcpiRsConvertPinGroupConfig 839 * 840 ******************************************************************************/ 841 842 ACPI_RSCONVERT_INFO AcpiRsConvertPinGroupConfig[14] = 843 { 844 {ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_PIN_GROUP_CONFIG, 845 ACPI_RS_SIZE (ACPI_RESOURCE_PIN_GROUP_CONFIG), 846 ACPI_RSC_TABLE_SIZE (AcpiRsConvertPinGroupConfig)}, 847 848 {ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_PIN_GROUP_CONFIG, 849 sizeof (AML_RESOURCE_PIN_GROUP_CONFIG), 850 0}, 851 852 {ACPI_RSC_MOVE8, ACPI_RS_OFFSET (Data.PinGroupConfig.RevisionId), 853 AML_OFFSET (PinGroupConfig.RevisionId), 854 1}, 855 856 {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.PinGroupConfig.Shareable), 857 AML_OFFSET (PinGroupConfig.Flags), 858 0}, 859 860 {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.PinGroupConfig.ProducerConsumer), 861 AML_OFFSET (PinGroupConfig.Flags), 862 1}, 863 864 {ACPI_RSC_MOVE8, ACPI_RS_OFFSET (Data.PinGroupConfig.PinConfigType), 865 AML_OFFSET (PinGroupConfig.PinConfigType), 866 1}, 867 868 {ACPI_RSC_MOVE32, ACPI_RS_OFFSET (Data.PinGroupConfig.PinConfigValue), 869 AML_OFFSET (PinGroupConfig.PinConfigValue), 870 1}, 871 872 /* Resource Source */ 873 874 {ACPI_RSC_MOVE8, ACPI_RS_OFFSET (Data.PinGroupConfig.ResourceSource.Index), 875 AML_OFFSET (PinGroupConfig.ResSourceIndex), 876 1}, 877 878 {ACPI_RSC_COUNT_GPIO_RES, ACPI_RS_OFFSET (Data.PinGroupConfig.ResourceSource.StringLength), 879 AML_OFFSET (PinGroupConfig.ResSourceOffset), 880 AML_OFFSET (PinGroupConfig.ResSourceLabelOffset)}, 881 882 {ACPI_RSC_MOVE_GPIO_RES, ACPI_RS_OFFSET (Data.PinGroupConfig.ResourceSource.StringPtr), 883 AML_OFFSET (PinGroupConfig.ResSourceOffset), 884 0}, 885 886 /* Resource Source Label */ 887 888 {ACPI_RSC_COUNT_GPIO_RES, ACPI_RS_OFFSET (Data.PinGroupConfig.ResourceSourceLabel.StringLength), 889 AML_OFFSET (PinGroupConfig.ResSourceLabelOffset), 890 AML_OFFSET (PinGroupConfig.VendorOffset)}, 891 892 {ACPI_RSC_MOVE_GPIO_RES, ACPI_RS_OFFSET (Data.PinGroupConfig.ResourceSourceLabel.StringPtr), 893 AML_OFFSET (PinGroupConfig.ResSourceLabelOffset), 894 0}, 895 896 /* Vendor Data */ 897 898 {ACPI_RSC_COUNT_GPIO_VEN, ACPI_RS_OFFSET (Data.PinGroupConfig.VendorLength), 899 AML_OFFSET (PinGroupConfig.VendorLength), 900 1}, 901 902 {ACPI_RSC_MOVE_GPIO_RES, ACPI_RS_OFFSET (Data.PinGroupConfig.VendorData), 903 AML_OFFSET (PinGroupConfig.VendorOffset), 904 0}, 905 }; 906