1 /******************************************************************************* 2 * 3 * Module Name: rsserial - GPIO/SerialBus resource descriptors 4 * 5 ******************************************************************************/ 6 7 /* 8 * Copyright (C) 2000 - 2023, 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[17] = 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 {ACPI_RSC_MOVE32, ACPI_RS_OFFSET (Data.I2cSerialBus.ConnectionSpeed), 411 AML_OFFSET (I2cSerialBus.ConnectionSpeed), 412 1}, 413 414 {ACPI_RSC_MOVE16, ACPI_RS_OFFSET (Data.I2cSerialBus.SlaveAddress), 415 AML_OFFSET (I2cSerialBus.SlaveAddress), 416 1}, 417 }; 418 419 420 /******************************************************************************* 421 * 422 * AcpiRsConvertSpiSerialBus 423 * 424 ******************************************************************************/ 425 426 ACPI_RSCONVERT_INFO AcpiRsConvertSpiSerialBus[21] = 427 { 428 {ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_SERIAL_BUS, 429 ACPI_RS_SIZE (ACPI_RESOURCE_SPI_SERIALBUS), 430 ACPI_RSC_TABLE_SIZE (AcpiRsConvertSpiSerialBus)}, 431 432 {ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_SERIAL_BUS, 433 sizeof (AML_RESOURCE_SPI_SERIALBUS), 434 0}, 435 436 {ACPI_RSC_MOVE8, ACPI_RS_OFFSET (Data.CommonSerialBus.RevisionId), 437 AML_OFFSET (CommonSerialBus.RevisionId), 438 1}, 439 440 {ACPI_RSC_MOVE8, ACPI_RS_OFFSET (Data.CommonSerialBus.Type), 441 AML_OFFSET (CommonSerialBus.Type), 442 1}, 443 444 {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.CommonSerialBus.SlaveMode), 445 AML_OFFSET (CommonSerialBus.Flags), 446 0}, 447 448 {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.CommonSerialBus.ProducerConsumer), 449 AML_OFFSET (CommonSerialBus.Flags), 450 1}, 451 452 {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.CommonSerialBus.ConnectionSharing), 453 AML_OFFSET (CommonSerialBus.Flags), 454 2}, 455 456 {ACPI_RSC_MOVE8, ACPI_RS_OFFSET (Data.CommonSerialBus.TypeRevisionId), 457 AML_OFFSET (CommonSerialBus.TypeRevisionId), 458 1}, 459 460 {ACPI_RSC_MOVE16, ACPI_RS_OFFSET (Data.CommonSerialBus.TypeDataLength), 461 AML_OFFSET (CommonSerialBus.TypeDataLength), 462 1}, 463 464 /* Vendor data */ 465 466 {ACPI_RSC_COUNT_SERIAL_VEN, ACPI_RS_OFFSET (Data.CommonSerialBus.VendorLength), 467 AML_OFFSET (CommonSerialBus.TypeDataLength), 468 AML_RESOURCE_SPI_MIN_DATA_LEN}, 469 470 {ACPI_RSC_MOVE_SERIAL_VEN, ACPI_RS_OFFSET (Data.CommonSerialBus.VendorData), 471 0, 472 sizeof (AML_RESOURCE_SPI_SERIALBUS)}, 473 474 /* Resource Source */ 475 476 {ACPI_RSC_MOVE8, ACPI_RS_OFFSET (Data.CommonSerialBus.ResourceSource.Index), 477 AML_OFFSET (CommonSerialBus.ResSourceIndex), 478 1}, 479 480 {ACPI_RSC_COUNT_SERIAL_RES, ACPI_RS_OFFSET (Data.CommonSerialBus.ResourceSource.StringLength), 481 AML_OFFSET (CommonSerialBus.TypeDataLength), 482 sizeof (AML_RESOURCE_COMMON_SERIALBUS)}, 483 484 {ACPI_RSC_MOVE_SERIAL_RES, ACPI_RS_OFFSET (Data.CommonSerialBus.ResourceSource.StringPtr), 485 AML_OFFSET (CommonSerialBus.TypeDataLength), 486 sizeof (AML_RESOURCE_COMMON_SERIALBUS)}, 487 488 /* Spi bus type specific */ 489 490 {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.SpiSerialBus.WireMode), 491 AML_OFFSET (SpiSerialBus.TypeSpecificFlags), 492 0}, 493 494 {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.SpiSerialBus.DevicePolarity), 495 AML_OFFSET (SpiSerialBus.TypeSpecificFlags), 496 1}, 497 498 {ACPI_RSC_MOVE8, ACPI_RS_OFFSET (Data.SpiSerialBus.DataBitLength), 499 AML_OFFSET (SpiSerialBus.DataBitLength), 500 1}, 501 502 {ACPI_RSC_MOVE8, ACPI_RS_OFFSET (Data.SpiSerialBus.ClockPhase), 503 AML_OFFSET (SpiSerialBus.ClockPhase), 504 1}, 505 506 {ACPI_RSC_MOVE8, ACPI_RS_OFFSET (Data.SpiSerialBus.ClockPolarity), 507 AML_OFFSET (SpiSerialBus.ClockPolarity), 508 1}, 509 510 {ACPI_RSC_MOVE16, ACPI_RS_OFFSET (Data.SpiSerialBus.DeviceSelection), 511 AML_OFFSET (SpiSerialBus.DeviceSelection), 512 1}, 513 514 {ACPI_RSC_MOVE32, ACPI_RS_OFFSET (Data.SpiSerialBus.ConnectionSpeed), 515 AML_OFFSET (SpiSerialBus.ConnectionSpeed), 516 1}, 517 }; 518 519 520 /******************************************************************************* 521 * 522 * AcpiRsConvertUartSerialBus 523 * 524 ******************************************************************************/ 525 526 ACPI_RSCONVERT_INFO AcpiRsConvertUartSerialBus[23] = 527 { 528 {ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_SERIAL_BUS, 529 ACPI_RS_SIZE (ACPI_RESOURCE_UART_SERIALBUS), 530 ACPI_RSC_TABLE_SIZE (AcpiRsConvertUartSerialBus)}, 531 532 {ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_SERIAL_BUS, 533 sizeof (AML_RESOURCE_UART_SERIALBUS), 534 0}, 535 536 {ACPI_RSC_MOVE8, ACPI_RS_OFFSET (Data.CommonSerialBus.RevisionId), 537 AML_OFFSET (CommonSerialBus.RevisionId), 538 1}, 539 540 {ACPI_RSC_MOVE8, ACPI_RS_OFFSET (Data.CommonSerialBus.Type), 541 AML_OFFSET (CommonSerialBus.Type), 542 1}, 543 544 {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.CommonSerialBus.SlaveMode), 545 AML_OFFSET (CommonSerialBus.Flags), 546 0}, 547 548 {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.CommonSerialBus.ProducerConsumer), 549 AML_OFFSET (CommonSerialBus.Flags), 550 1}, 551 552 {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.CommonSerialBus.ConnectionSharing), 553 AML_OFFSET (CommonSerialBus.Flags), 554 2}, 555 556 {ACPI_RSC_MOVE8, ACPI_RS_OFFSET (Data.CommonSerialBus.TypeRevisionId), 557 AML_OFFSET (CommonSerialBus.TypeRevisionId), 558 1}, 559 560 {ACPI_RSC_MOVE16, ACPI_RS_OFFSET (Data.CommonSerialBus.TypeDataLength), 561 AML_OFFSET (CommonSerialBus.TypeDataLength), 562 1}, 563 564 /* Vendor data */ 565 566 {ACPI_RSC_COUNT_SERIAL_VEN, ACPI_RS_OFFSET (Data.CommonSerialBus.VendorLength), 567 AML_OFFSET (CommonSerialBus.TypeDataLength), 568 AML_RESOURCE_UART_MIN_DATA_LEN}, 569 570 {ACPI_RSC_MOVE_SERIAL_VEN, ACPI_RS_OFFSET (Data.CommonSerialBus.VendorData), 571 0, 572 sizeof (AML_RESOURCE_UART_SERIALBUS)}, 573 574 /* Resource Source */ 575 576 {ACPI_RSC_MOVE8, ACPI_RS_OFFSET (Data.CommonSerialBus.ResourceSource.Index), 577 AML_OFFSET (CommonSerialBus.ResSourceIndex), 578 1}, 579 580 {ACPI_RSC_COUNT_SERIAL_RES, ACPI_RS_OFFSET (Data.CommonSerialBus.ResourceSource.StringLength), 581 AML_OFFSET (CommonSerialBus.TypeDataLength), 582 sizeof (AML_RESOURCE_COMMON_SERIALBUS)}, 583 584 {ACPI_RSC_MOVE_SERIAL_RES, ACPI_RS_OFFSET (Data.CommonSerialBus.ResourceSource.StringPtr), 585 AML_OFFSET (CommonSerialBus.TypeDataLength), 586 sizeof (AML_RESOURCE_COMMON_SERIALBUS)}, 587 588 /* Uart bus type specific */ 589 590 {ACPI_RSC_2BITFLAG, ACPI_RS_OFFSET (Data.UartSerialBus.FlowControl), 591 AML_OFFSET (UartSerialBus.TypeSpecificFlags), 592 0}, 593 594 {ACPI_RSC_2BITFLAG, ACPI_RS_OFFSET (Data.UartSerialBus.StopBits), 595 AML_OFFSET (UartSerialBus.TypeSpecificFlags), 596 2}, 597 598 {ACPI_RSC_3BITFLAG, ACPI_RS_OFFSET (Data.UartSerialBus.DataBits), 599 AML_OFFSET (UartSerialBus.TypeSpecificFlags), 600 4}, 601 602 {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.UartSerialBus.Endian), 603 AML_OFFSET (UartSerialBus.TypeSpecificFlags), 604 7}, 605 606 {ACPI_RSC_MOVE8, ACPI_RS_OFFSET (Data.UartSerialBus.Parity), 607 AML_OFFSET (UartSerialBus.Parity), 608 1}, 609 610 {ACPI_RSC_MOVE8, ACPI_RS_OFFSET (Data.UartSerialBus.LinesEnabled), 611 AML_OFFSET (UartSerialBus.LinesEnabled), 612 1}, 613 614 {ACPI_RSC_MOVE16, ACPI_RS_OFFSET (Data.UartSerialBus.RxFifoSize), 615 AML_OFFSET (UartSerialBus.RxFifoSize), 616 1}, 617 618 {ACPI_RSC_MOVE16, ACPI_RS_OFFSET (Data.UartSerialBus.TxFifoSize), 619 AML_OFFSET (UartSerialBus.TxFifoSize), 620 1}, 621 622 {ACPI_RSC_MOVE32, ACPI_RS_OFFSET (Data.UartSerialBus.DefaultBaudRate), 623 AML_OFFSET (UartSerialBus.DefaultBaudRate), 624 1}, 625 }; 626 627 628 /******************************************************************************* 629 * 630 * AcpiRsConvertPinConfig 631 * 632 ******************************************************************************/ 633 634 ACPI_RSCONVERT_INFO AcpiRsConvertPinConfig[14] = 635 { 636 {ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_PIN_CONFIG, 637 ACPI_RS_SIZE (ACPI_RESOURCE_PIN_CONFIG), 638 ACPI_RSC_TABLE_SIZE (AcpiRsConvertPinConfig)}, 639 640 {ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_PIN_CONFIG, 641 sizeof (AML_RESOURCE_PIN_CONFIG), 642 0}, 643 644 {ACPI_RSC_MOVE8, ACPI_RS_OFFSET (Data.PinConfig.RevisionId), 645 AML_OFFSET (PinConfig.RevisionId), 646 1}, 647 648 {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.PinConfig.Shareable), 649 AML_OFFSET (PinConfig.Flags), 650 0}, 651 652 {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.PinConfig.ProducerConsumer), 653 AML_OFFSET (PinConfig.Flags), 654 1}, 655 656 {ACPI_RSC_MOVE8, ACPI_RS_OFFSET (Data.PinConfig.PinConfigType), 657 AML_OFFSET (PinConfig.PinConfigType), 658 1}, 659 660 {ACPI_RSC_MOVE32, ACPI_RS_OFFSET (Data.PinConfig.PinConfigValue), 661 AML_OFFSET (PinConfig.PinConfigValue), 662 1}, 663 664 /* Pin Table */ 665 666 /* 667 * It is OK to use GPIO operations here because none of them refer GPIO 668 * structures directly but instead use offsets given here. 669 */ 670 671 {ACPI_RSC_COUNT_GPIO_PIN, ACPI_RS_OFFSET (Data.PinConfig.PinTableLength), 672 AML_OFFSET (PinConfig.PinTableOffset), 673 AML_OFFSET (PinConfig.ResSourceOffset)}, 674 675 {ACPI_RSC_MOVE_GPIO_PIN, ACPI_RS_OFFSET (Data.PinConfig.PinTable), 676 AML_OFFSET (PinConfig.PinTableOffset), 677 0}, 678 679 /* Resource Source */ 680 681 {ACPI_RSC_MOVE8, ACPI_RS_OFFSET (Data.PinConfig.ResourceSource.Index), 682 AML_OFFSET (PinConfig.ResSourceIndex), 683 1}, 684 685 {ACPI_RSC_COUNT_GPIO_RES, ACPI_RS_OFFSET (Data.PinConfig.ResourceSource.StringLength), 686 AML_OFFSET (PinConfig.ResSourceOffset), 687 AML_OFFSET (PinConfig.VendorOffset)}, 688 689 {ACPI_RSC_MOVE_GPIO_RES, ACPI_RS_OFFSET (Data.PinConfig.ResourceSource.StringPtr), 690 AML_OFFSET (PinConfig.ResSourceOffset), 691 0}, 692 693 /* Vendor Data */ 694 695 {ACPI_RSC_COUNT_GPIO_VEN, ACPI_RS_OFFSET (Data.PinConfig.VendorLength), 696 AML_OFFSET (PinConfig.VendorLength), 697 1}, 698 699 {ACPI_RSC_MOVE_GPIO_RES, ACPI_RS_OFFSET (Data.PinConfig.VendorData), 700 AML_OFFSET (PinConfig.VendorOffset), 701 0}, 702 }; 703 704 /******************************************************************************* 705 * 706 * AcpiRsConvertPinGroup 707 * 708 ******************************************************************************/ 709 710 ACPI_RSCONVERT_INFO AcpiRsConvertPinGroup[10] = 711 { 712 {ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_PIN_GROUP, 713 ACPI_RS_SIZE (ACPI_RESOURCE_PIN_GROUP), 714 ACPI_RSC_TABLE_SIZE (AcpiRsConvertPinGroup)}, 715 716 {ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_PIN_GROUP, 717 sizeof (AML_RESOURCE_PIN_GROUP), 718 0}, 719 720 {ACPI_RSC_MOVE8, ACPI_RS_OFFSET (Data.PinGroup.RevisionId), 721 AML_OFFSET (PinGroup.RevisionId), 722 1}, 723 724 {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.PinGroup.ProducerConsumer), 725 AML_OFFSET (PinGroup.Flags), 726 0}, 727 728 /* Pin Table */ 729 730 /* 731 * It is OK to use GPIO operations here because none of them refer GPIO 732 * structures directly but instead use offsets given here. 733 */ 734 735 {ACPI_RSC_COUNT_GPIO_PIN, ACPI_RS_OFFSET (Data.PinGroup.PinTableLength), 736 AML_OFFSET (PinGroup.PinTableOffset), 737 AML_OFFSET (PinGroup.LabelOffset)}, 738 739 {ACPI_RSC_MOVE_GPIO_PIN, ACPI_RS_OFFSET (Data.PinGroup.PinTable), 740 AML_OFFSET (PinGroup.PinTableOffset), 741 0}, 742 743 /* Resource Label */ 744 745 {ACPI_RSC_COUNT_GPIO_RES, ACPI_RS_OFFSET (Data.PinGroup.ResourceLabel.StringLength), 746 AML_OFFSET (PinGroup.LabelOffset), 747 AML_OFFSET (PinGroup.VendorOffset)}, 748 749 {ACPI_RSC_MOVE_GPIO_RES, ACPI_RS_OFFSET (Data.PinGroup.ResourceLabel.StringPtr), 750 AML_OFFSET (PinGroup.LabelOffset), 751 0}, 752 753 /* Vendor Data */ 754 755 {ACPI_RSC_COUNT_GPIO_VEN, ACPI_RS_OFFSET (Data.PinGroup.VendorLength), 756 AML_OFFSET (PinGroup.VendorLength), 757 1}, 758 759 {ACPI_RSC_MOVE_GPIO_RES, ACPI_RS_OFFSET (Data.PinGroup.VendorData), 760 AML_OFFSET (PinGroup.VendorOffset), 761 0}, 762 }; 763 764 /******************************************************************************* 765 * 766 * AcpiRsConvertPinGroupFunction 767 * 768 ******************************************************************************/ 769 770 ACPI_RSCONVERT_INFO AcpiRsConvertPinGroupFunction[13] = 771 { 772 {ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_PIN_GROUP_FUNCTION, 773 ACPI_RS_SIZE (ACPI_RESOURCE_PIN_GROUP_FUNCTION), 774 ACPI_RSC_TABLE_SIZE (AcpiRsConvertPinGroupFunction)}, 775 776 {ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_PIN_GROUP_FUNCTION, 777 sizeof (AML_RESOURCE_PIN_GROUP_FUNCTION), 778 0}, 779 780 {ACPI_RSC_MOVE8, ACPI_RS_OFFSET (Data.PinGroupFunction.RevisionId), 781 AML_OFFSET (PinGroupFunction.RevisionId), 782 1}, 783 784 {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.PinGroupFunction.Shareable), 785 AML_OFFSET (PinGroupFunction.Flags), 786 0}, 787 788 {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.PinGroupFunction.ProducerConsumer), 789 AML_OFFSET (PinGroupFunction.Flags), 790 1}, 791 792 {ACPI_RSC_MOVE16, ACPI_RS_OFFSET (Data.PinGroupFunction.FunctionNumber), 793 AML_OFFSET (PinGroupFunction.FunctionNumber), 794 1}, 795 796 /* Resource Source */ 797 798 {ACPI_RSC_MOVE8, ACPI_RS_OFFSET (Data.PinGroupFunction.ResourceSource.Index), 799 AML_OFFSET (PinGroupFunction.ResSourceIndex), 800 1}, 801 802 {ACPI_RSC_COUNT_GPIO_RES, ACPI_RS_OFFSET (Data.PinGroupFunction.ResourceSource.StringLength), 803 AML_OFFSET (PinGroupFunction.ResSourceOffset), 804 AML_OFFSET (PinGroupFunction.ResSourceLabelOffset)}, 805 806 {ACPI_RSC_MOVE_GPIO_RES, ACPI_RS_OFFSET (Data.PinGroupFunction.ResourceSource.StringPtr), 807 AML_OFFSET (PinGroupFunction.ResSourceOffset), 808 0}, 809 810 /* Resource Source Label */ 811 812 {ACPI_RSC_COUNT_GPIO_RES, ACPI_RS_OFFSET (Data.PinGroupFunction.ResourceSourceLabel.StringLength), 813 AML_OFFSET (PinGroupFunction.ResSourceLabelOffset), 814 AML_OFFSET (PinGroupFunction.VendorOffset)}, 815 816 {ACPI_RSC_MOVE_GPIO_RES, ACPI_RS_OFFSET (Data.PinGroupFunction.ResourceSourceLabel.StringPtr), 817 AML_OFFSET (PinGroupFunction.ResSourceLabelOffset), 818 0}, 819 820 /* Vendor Data */ 821 822 {ACPI_RSC_COUNT_GPIO_VEN, ACPI_RS_OFFSET (Data.PinGroupFunction.VendorLength), 823 AML_OFFSET (PinGroupFunction.VendorLength), 824 1}, 825 826 {ACPI_RSC_MOVE_GPIO_RES, ACPI_RS_OFFSET (Data.PinGroupFunction.VendorData), 827 AML_OFFSET (PinGroupFunction.VendorOffset), 828 0}, 829 }; 830 831 /******************************************************************************* 832 * 833 * AcpiRsConvertPinGroupConfig 834 * 835 ******************************************************************************/ 836 837 ACPI_RSCONVERT_INFO AcpiRsConvertPinGroupConfig[14] = 838 { 839 {ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_PIN_GROUP_CONFIG, 840 ACPI_RS_SIZE (ACPI_RESOURCE_PIN_GROUP_CONFIG), 841 ACPI_RSC_TABLE_SIZE (AcpiRsConvertPinGroupConfig)}, 842 843 {ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_PIN_GROUP_CONFIG, 844 sizeof (AML_RESOURCE_PIN_GROUP_CONFIG), 845 0}, 846 847 {ACPI_RSC_MOVE8, ACPI_RS_OFFSET (Data.PinGroupConfig.RevisionId), 848 AML_OFFSET (PinGroupConfig.RevisionId), 849 1}, 850 851 {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.PinGroupConfig.Shareable), 852 AML_OFFSET (PinGroupConfig.Flags), 853 0}, 854 855 {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.PinGroupConfig.ProducerConsumer), 856 AML_OFFSET (PinGroupConfig.Flags), 857 1}, 858 859 {ACPI_RSC_MOVE8, ACPI_RS_OFFSET (Data.PinGroupConfig.PinConfigType), 860 AML_OFFSET (PinGroupConfig.PinConfigType), 861 1}, 862 863 {ACPI_RSC_MOVE32, ACPI_RS_OFFSET (Data.PinGroupConfig.PinConfigValue), 864 AML_OFFSET (PinGroupConfig.PinConfigValue), 865 1}, 866 867 /* Resource Source */ 868 869 {ACPI_RSC_MOVE8, ACPI_RS_OFFSET (Data.PinGroupConfig.ResourceSource.Index), 870 AML_OFFSET (PinGroupConfig.ResSourceIndex), 871 1}, 872 873 {ACPI_RSC_COUNT_GPIO_RES, ACPI_RS_OFFSET (Data.PinGroupConfig.ResourceSource.StringLength), 874 AML_OFFSET (PinGroupConfig.ResSourceOffset), 875 AML_OFFSET (PinGroupConfig.ResSourceLabelOffset)}, 876 877 {ACPI_RSC_MOVE_GPIO_RES, ACPI_RS_OFFSET (Data.PinGroupConfig.ResourceSource.StringPtr), 878 AML_OFFSET (PinGroupConfig.ResSourceOffset), 879 0}, 880 881 /* Resource Source Label */ 882 883 {ACPI_RSC_COUNT_GPIO_RES, ACPI_RS_OFFSET (Data.PinGroupConfig.ResourceSourceLabel.StringLength), 884 AML_OFFSET (PinGroupConfig.ResSourceLabelOffset), 885 AML_OFFSET (PinGroupConfig.VendorOffset)}, 886 887 {ACPI_RSC_MOVE_GPIO_RES, ACPI_RS_OFFSET (Data.PinGroupConfig.ResourceSourceLabel.StringPtr), 888 AML_OFFSET (PinGroupConfig.ResSourceLabelOffset), 889 0}, 890 891 /* Vendor Data */ 892 893 {ACPI_RSC_COUNT_GPIO_VEN, ACPI_RS_OFFSET (Data.PinGroupConfig.VendorLength), 894 AML_OFFSET (PinGroupConfig.VendorLength), 895 1}, 896 897 {ACPI_RSC_MOVE_GPIO_RES, ACPI_RS_OFFSET (Data.PinGroupConfig.VendorData), 898 AML_OFFSET (PinGroupConfig.VendorOffset), 899 0}, 900 }; 901