1 // SPDX-License-Identifier: BSD-3-Clause OR GPL-2.0 2 /******************************************************************************* 3 * 4 * Module Name: rsserial - GPIO/serial_bus resource descriptors 5 * 6 ******************************************************************************/ 7 8 #include <acpi/acpi.h> 9 #include "accommon.h" 10 #include "acresrc.h" 11 12 #define _COMPONENT ACPI_RESOURCES 13 ACPI_MODULE_NAME("rsserial") 14 15 /******************************************************************************* 16 * 17 * acpi_rs_convert_gpio 18 * 19 ******************************************************************************/ 20 struct acpi_rsconvert_info acpi_rs_convert_gpio[18] = { 21 {ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_GPIO, 22 ACPI_RS_SIZE(struct acpi_resource_gpio), 23 ACPI_RSC_TABLE_SIZE(acpi_rs_convert_gpio)}, 24 25 {ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_GPIO, 26 sizeof(struct aml_resource_gpio), 27 0}, 28 29 /* 30 * These fields are contiguous in both the source and destination: 31 * revision_id 32 * connection_type 33 */ 34 {ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.gpio.revision_id), 35 AML_OFFSET(gpio.revision_id), 36 2}, 37 38 {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET(data.gpio.producer_consumer), 39 AML_OFFSET(gpio.flags), 40 0}, 41 42 {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET(data.gpio.shareable), 43 AML_OFFSET(gpio.int_flags), 44 3}, 45 46 {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET(data.gpio.wake_capable), 47 AML_OFFSET(gpio.int_flags), 48 4}, 49 50 {ACPI_RSC_2BITFLAG, ACPI_RS_OFFSET(data.gpio.io_restriction), 51 AML_OFFSET(gpio.int_flags), 52 0}, 53 54 {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET(data.gpio.triggering), 55 AML_OFFSET(gpio.int_flags), 56 0}, 57 58 {ACPI_RSC_2BITFLAG, ACPI_RS_OFFSET(data.gpio.polarity), 59 AML_OFFSET(gpio.int_flags), 60 1}, 61 62 {ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.gpio.pin_config), 63 AML_OFFSET(gpio.pin_config), 64 1}, 65 66 /* 67 * These fields are contiguous in both the source and destination: 68 * drive_strength 69 * debounce_timeout 70 */ 71 {ACPI_RSC_MOVE16, ACPI_RS_OFFSET(data.gpio.drive_strength), 72 AML_OFFSET(gpio.drive_strength), 73 2}, 74 75 /* Pin Table */ 76 77 {ACPI_RSC_COUNT_GPIO_PIN, ACPI_RS_OFFSET(data.gpio.pin_table_length), 78 AML_OFFSET(gpio.pin_table_offset), 79 AML_OFFSET(gpio.res_source_offset)}, 80 81 {ACPI_RSC_MOVE_GPIO_PIN, ACPI_RS_OFFSET(data.gpio.pin_table), 82 AML_OFFSET(gpio.pin_table_offset), 83 0}, 84 85 /* Resource Source */ 86 87 {ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.gpio.resource_source.index), 88 AML_OFFSET(gpio.res_source_index), 89 1}, 90 91 {ACPI_RSC_COUNT_GPIO_RES, 92 ACPI_RS_OFFSET(data.gpio.resource_source.string_length), 93 AML_OFFSET(gpio.res_source_offset), 94 AML_OFFSET(gpio.vendor_offset)}, 95 96 {ACPI_RSC_MOVE_GPIO_RES, 97 ACPI_RS_OFFSET(data.gpio.resource_source.string_ptr), 98 AML_OFFSET(gpio.res_source_offset), 99 0}, 100 101 /* Vendor Data */ 102 103 {ACPI_RSC_COUNT_GPIO_VEN, ACPI_RS_OFFSET(data.gpio.vendor_length), 104 AML_OFFSET(gpio.vendor_length), 105 1}, 106 107 {ACPI_RSC_MOVE_GPIO_RES, ACPI_RS_OFFSET(data.gpio.vendor_data), 108 AML_OFFSET(gpio.vendor_offset), 109 0}, 110 }; 111 112 /******************************************************************************* 113 * 114 * acpi_rs_convert_clock_input 115 * 116 ******************************************************************************/ 117 118 struct acpi_rsconvert_info acpi_rs_convert_clock_input[8] = { 119 {ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_CLOCK_INPUT, 120 ACPI_RS_SIZE(struct acpi_resource_clock_input), 121 ACPI_RSC_TABLE_SIZE(acpi_rs_convert_clock_input)}, 122 123 {ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_CLOCK_INPUT, 124 sizeof(struct aml_resource_clock_input), 125 0} 126 , 127 128 {ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.clock_input.revision_id), 129 AML_OFFSET(clock_input.revision_id), 130 1} 131 , 132 133 {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET(data.clock_input.mode), 134 AML_OFFSET(clock_input.flags), 135 0} 136 , 137 138 {ACPI_RSC_2BITFLAG, ACPI_RS_OFFSET(data.clock_input.scale), 139 AML_OFFSET(clock_input.flags), 140 1} 141 , 142 143 {ACPI_RSC_MOVE16, ACPI_RS_OFFSET(data.clock_input.frequency_divisor), 144 AML_OFFSET(clock_input.frequency_divisor), 145 2} 146 , 147 148 {ACPI_RSC_MOVE32, ACPI_RS_OFFSET(data.clock_input.frequency_numerator), 149 AML_OFFSET(clock_input.frequency_numerator), 150 4} 151 , 152 153 /* Resource Source */ 154 {ACPI_RSC_SOURCE, ACPI_RS_OFFSET(data.clock_input.resource_source), 155 0, 156 sizeof(struct aml_resource_clock_input)} 157 , 158 159 }; 160 161 /******************************************************************************* 162 * 163 * acpi_rs_convert_pinfunction 164 * 165 ******************************************************************************/ 166 167 struct acpi_rsconvert_info acpi_rs_convert_pin_function[13] = { 168 {ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_PIN_FUNCTION, 169 ACPI_RS_SIZE(struct acpi_resource_pin_function), 170 ACPI_RSC_TABLE_SIZE(acpi_rs_convert_pin_function)}, 171 172 {ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_PIN_FUNCTION, 173 sizeof(struct aml_resource_pin_function), 174 0}, 175 176 {ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.pin_function.revision_id), 177 AML_OFFSET(pin_function.revision_id), 178 1}, 179 180 {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET(data.pin_function.shareable), 181 AML_OFFSET(pin_function.flags), 182 0}, 183 184 {ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.pin_function.pin_config), 185 AML_OFFSET(pin_function.pin_config), 186 1}, 187 188 {ACPI_RSC_MOVE16, ACPI_RS_OFFSET(data.pin_function.function_number), 189 AML_OFFSET(pin_function.function_number), 190 2}, 191 192 /* Pin Table */ 193 194 /* 195 * It is OK to use GPIO operations here because none of them refer GPIO 196 * structures directly but instead use offsets given here. 197 */ 198 199 {ACPI_RSC_COUNT_GPIO_PIN, 200 ACPI_RS_OFFSET(data.pin_function.pin_table_length), 201 AML_OFFSET(pin_function.pin_table_offset), 202 AML_OFFSET(pin_function.res_source_offset)}, 203 204 {ACPI_RSC_MOVE_GPIO_PIN, ACPI_RS_OFFSET(data.pin_function.pin_table), 205 AML_OFFSET(pin_function.pin_table_offset), 206 0}, 207 208 /* Resource Source */ 209 210 {ACPI_RSC_MOVE8, 211 ACPI_RS_OFFSET(data.pin_function.resource_source.index), 212 AML_OFFSET(pin_function.res_source_index), 213 1}, 214 215 {ACPI_RSC_COUNT_GPIO_RES, 216 ACPI_RS_OFFSET(data.pin_function.resource_source.string_length), 217 AML_OFFSET(pin_function.res_source_offset), 218 AML_OFFSET(pin_function.vendor_offset)}, 219 220 {ACPI_RSC_MOVE_GPIO_RES, 221 ACPI_RS_OFFSET(data.pin_function.resource_source.string_ptr), 222 AML_OFFSET(pin_function.res_source_offset), 223 0}, 224 225 /* Vendor Data */ 226 227 {ACPI_RSC_COUNT_GPIO_VEN, 228 ACPI_RS_OFFSET(data.pin_function.vendor_length), 229 AML_OFFSET(pin_function.vendor_length), 230 1}, 231 232 {ACPI_RSC_MOVE_GPIO_RES, ACPI_RS_OFFSET(data.pin_function.vendor_data), 233 AML_OFFSET(pin_function.vendor_offset), 234 0}, 235 }; 236 237 /******************************************************************************* 238 * 239 * acpi_rs_convert_csi2_serial_bus 240 * 241 ******************************************************************************/ 242 243 struct acpi_rsconvert_info acpi_rs_convert_csi2_serial_bus[14] = { 244 { ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_SERIAL_BUS, 245 ACPI_RS_SIZE(struct acpi_resource_csi2_serialbus), 246 ACPI_RSC_TABLE_SIZE(acpi_rs_convert_csi2_serial_bus) }, 247 248 { ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_SERIAL_BUS, 249 sizeof(struct aml_resource_csi2_serialbus), 250 0 }, 251 252 { ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.common_serial_bus.revision_id), 253 AML_OFFSET(common_serial_bus.revision_id), 254 1 }, 255 256 { ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.csi2_serial_bus.type), 257 AML_OFFSET(csi2_serial_bus.type), 258 1 }, 259 260 { ACPI_RSC_1BITFLAG, 261 ACPI_RS_OFFSET(data.csi2_serial_bus.producer_consumer), 262 AML_OFFSET(csi2_serial_bus.flags), 263 1 }, 264 265 { ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET(data.csi2_serial_bus.slave_mode), 266 AML_OFFSET(csi2_serial_bus.flags), 267 0 }, 268 269 { ACPI_RSC_2BITFLAG, ACPI_RS_OFFSET(data.csi2_serial_bus.phy_type), 270 AML_OFFSET(csi2_serial_bus.type_specific_flags), 271 0 }, 272 273 { ACPI_RSC_6BITFLAG, 274 ACPI_RS_OFFSET(data.csi2_serial_bus.local_port_instance), 275 AML_OFFSET(csi2_serial_bus.type_specific_flags), 276 2 }, 277 278 { ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.csi2_serial_bus.type_revision_id), 279 AML_OFFSET(csi2_serial_bus.type_revision_id), 280 1 }, 281 282 /* Vendor data */ 283 284 { ACPI_RSC_COUNT_SERIAL_VEN, 285 ACPI_RS_OFFSET(data.csi2_serial_bus.vendor_length), 286 AML_OFFSET(csi2_serial_bus.type_data_length), 287 AML_RESOURCE_CSI2_MIN_DATA_LEN }, 288 289 { ACPI_RSC_MOVE_SERIAL_VEN, 290 ACPI_RS_OFFSET(data.csi2_serial_bus.vendor_data), 291 0, 292 sizeof(struct aml_resource_csi2_serialbus) }, 293 294 /* Resource Source */ 295 296 { ACPI_RSC_MOVE8, 297 ACPI_RS_OFFSET(data.csi2_serial_bus.resource_source.index), 298 AML_OFFSET(csi2_serial_bus.res_source_index), 299 1 }, 300 301 { ACPI_RSC_COUNT_SERIAL_RES, 302 ACPI_RS_OFFSET(data.csi2_serial_bus.resource_source.string_length), 303 AML_OFFSET(csi2_serial_bus.type_data_length), 304 sizeof(struct aml_resource_csi2_serialbus) }, 305 306 { ACPI_RSC_MOVE_SERIAL_RES, 307 ACPI_RS_OFFSET(data.csi2_serial_bus.resource_source.string_ptr), 308 AML_OFFSET(csi2_serial_bus.type_data_length), 309 sizeof(struct aml_resource_csi2_serialbus) }, 310 }; 311 312 /******************************************************************************* 313 * 314 * acpi_rs_convert_i2c_serial_bus 315 * 316 ******************************************************************************/ 317 318 struct acpi_rsconvert_info acpi_rs_convert_i2c_serial_bus[18] = { 319 {ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_SERIAL_BUS, 320 ACPI_RS_SIZE(struct acpi_resource_i2c_serialbus), 321 ACPI_RSC_TABLE_SIZE(acpi_rs_convert_i2c_serial_bus)}, 322 323 {ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_SERIAL_BUS, 324 sizeof(struct aml_resource_i2c_serialbus), 325 0}, 326 327 {ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.common_serial_bus.revision_id), 328 AML_OFFSET(common_serial_bus.revision_id), 329 1}, 330 331 {ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.common_serial_bus.type), 332 AML_OFFSET(common_serial_bus.type), 333 1}, 334 335 {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET(data.common_serial_bus.slave_mode), 336 AML_OFFSET(common_serial_bus.flags), 337 0}, 338 339 {ACPI_RSC_1BITFLAG, 340 ACPI_RS_OFFSET(data.common_serial_bus.producer_consumer), 341 AML_OFFSET(common_serial_bus.flags), 342 1}, 343 344 {ACPI_RSC_1BITFLAG, 345 ACPI_RS_OFFSET(data.common_serial_bus.connection_sharing), 346 AML_OFFSET(common_serial_bus.flags), 347 2}, 348 349 {ACPI_RSC_MOVE8, 350 ACPI_RS_OFFSET(data.common_serial_bus.type_revision_id), 351 AML_OFFSET(common_serial_bus.type_revision_id), 352 1}, 353 354 {ACPI_RSC_MOVE16, 355 ACPI_RS_OFFSET(data.common_serial_bus.type_data_length), 356 AML_OFFSET(common_serial_bus.type_data_length), 357 1}, 358 359 /* Vendor data */ 360 361 {ACPI_RSC_COUNT_SERIAL_VEN, 362 ACPI_RS_OFFSET(data.common_serial_bus.vendor_length), 363 AML_OFFSET(common_serial_bus.type_data_length), 364 AML_RESOURCE_I2C_MIN_DATA_LEN}, 365 366 {ACPI_RSC_MOVE_SERIAL_VEN, 367 ACPI_RS_OFFSET(data.common_serial_bus.vendor_data), 368 0, 369 sizeof(struct aml_resource_i2c_serialbus)}, 370 371 /* Resource Source */ 372 373 {ACPI_RSC_MOVE8, 374 ACPI_RS_OFFSET(data.common_serial_bus.resource_source.index), 375 AML_OFFSET(common_serial_bus.res_source_index), 376 1}, 377 378 {ACPI_RSC_COUNT_SERIAL_RES, 379 ACPI_RS_OFFSET(data.common_serial_bus.resource_source.string_length), 380 AML_OFFSET(common_serial_bus.type_data_length), 381 sizeof(struct aml_resource_common_serialbus)}, 382 383 {ACPI_RSC_MOVE_SERIAL_RES, 384 ACPI_RS_OFFSET(data.common_serial_bus.resource_source.string_ptr), 385 AML_OFFSET(common_serial_bus.type_data_length), 386 sizeof(struct aml_resource_common_serialbus)}, 387 388 /* I2C bus type specific */ 389 390 {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET(data.i2c_serial_bus.access_mode), 391 AML_OFFSET(i2c_serial_bus.type_specific_flags), 392 0}, 393 394 /* Read LVR from Type Specific Flags, bits[15:8] */ 395 {ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.i2c_serial_bus.lvr), 396 AML_OFFSET(i2c_serial_bus.type_specific_flags) + 1, 397 1}, 398 399 {ACPI_RSC_MOVE32, ACPI_RS_OFFSET(data.i2c_serial_bus.connection_speed), 400 AML_OFFSET(i2c_serial_bus.connection_speed), 401 1}, 402 403 {ACPI_RSC_MOVE16, ACPI_RS_OFFSET(data.i2c_serial_bus.slave_address), 404 AML_OFFSET(i2c_serial_bus.slave_address), 405 1}, 406 }; 407 408 /******************************************************************************* 409 * 410 * acpi_rs_convert_spi_serial_bus 411 * 412 ******************************************************************************/ 413 414 struct acpi_rsconvert_info acpi_rs_convert_spi_serial_bus[21] = { 415 {ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_SERIAL_BUS, 416 ACPI_RS_SIZE(struct acpi_resource_spi_serialbus), 417 ACPI_RSC_TABLE_SIZE(acpi_rs_convert_spi_serial_bus)}, 418 419 {ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_SERIAL_BUS, 420 sizeof(struct aml_resource_spi_serialbus), 421 0}, 422 423 {ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.common_serial_bus.revision_id), 424 AML_OFFSET(common_serial_bus.revision_id), 425 1}, 426 427 {ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.common_serial_bus.type), 428 AML_OFFSET(common_serial_bus.type), 429 1}, 430 431 {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET(data.common_serial_bus.slave_mode), 432 AML_OFFSET(common_serial_bus.flags), 433 0}, 434 435 {ACPI_RSC_1BITFLAG, 436 ACPI_RS_OFFSET(data.common_serial_bus.producer_consumer), 437 AML_OFFSET(common_serial_bus.flags), 438 1}, 439 440 {ACPI_RSC_1BITFLAG, 441 ACPI_RS_OFFSET(data.common_serial_bus.connection_sharing), 442 AML_OFFSET(common_serial_bus.flags), 443 2}, 444 445 {ACPI_RSC_MOVE8, 446 ACPI_RS_OFFSET(data.common_serial_bus.type_revision_id), 447 AML_OFFSET(common_serial_bus.type_revision_id), 448 1}, 449 450 {ACPI_RSC_MOVE16, 451 ACPI_RS_OFFSET(data.common_serial_bus.type_data_length), 452 AML_OFFSET(common_serial_bus.type_data_length), 453 1}, 454 455 /* Vendor data */ 456 457 {ACPI_RSC_COUNT_SERIAL_VEN, 458 ACPI_RS_OFFSET(data.common_serial_bus.vendor_length), 459 AML_OFFSET(common_serial_bus.type_data_length), 460 AML_RESOURCE_SPI_MIN_DATA_LEN}, 461 462 {ACPI_RSC_MOVE_SERIAL_VEN, 463 ACPI_RS_OFFSET(data.common_serial_bus.vendor_data), 464 0, 465 sizeof(struct aml_resource_spi_serialbus)}, 466 467 /* Resource Source */ 468 469 {ACPI_RSC_MOVE8, 470 ACPI_RS_OFFSET(data.common_serial_bus.resource_source.index), 471 AML_OFFSET(common_serial_bus.res_source_index), 472 1}, 473 474 {ACPI_RSC_COUNT_SERIAL_RES, 475 ACPI_RS_OFFSET(data.common_serial_bus.resource_source.string_length), 476 AML_OFFSET(common_serial_bus.type_data_length), 477 sizeof(struct aml_resource_common_serialbus)}, 478 479 {ACPI_RSC_MOVE_SERIAL_RES, 480 ACPI_RS_OFFSET(data.common_serial_bus.resource_source.string_ptr), 481 AML_OFFSET(common_serial_bus.type_data_length), 482 sizeof(struct aml_resource_common_serialbus)}, 483 484 /* Spi bus type specific */ 485 486 {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET(data.spi_serial_bus.wire_mode), 487 AML_OFFSET(spi_serial_bus.type_specific_flags), 488 0}, 489 490 {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET(data.spi_serial_bus.device_polarity), 491 AML_OFFSET(spi_serial_bus.type_specific_flags), 492 1}, 493 494 {ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.spi_serial_bus.data_bit_length), 495 AML_OFFSET(spi_serial_bus.data_bit_length), 496 1}, 497 498 {ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.spi_serial_bus.clock_phase), 499 AML_OFFSET(spi_serial_bus.clock_phase), 500 1}, 501 502 {ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.spi_serial_bus.clock_polarity), 503 AML_OFFSET(spi_serial_bus.clock_polarity), 504 1}, 505 506 {ACPI_RSC_MOVE16, ACPI_RS_OFFSET(data.spi_serial_bus.device_selection), 507 AML_OFFSET(spi_serial_bus.device_selection), 508 1}, 509 510 {ACPI_RSC_MOVE32, ACPI_RS_OFFSET(data.spi_serial_bus.connection_speed), 511 AML_OFFSET(spi_serial_bus.connection_speed), 512 1}, 513 }; 514 515 /******************************************************************************* 516 * 517 * acpi_rs_convert_uart_serial_bus 518 * 519 ******************************************************************************/ 520 521 struct acpi_rsconvert_info acpi_rs_convert_uart_serial_bus[23] = { 522 {ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_SERIAL_BUS, 523 ACPI_RS_SIZE(struct acpi_resource_uart_serialbus), 524 ACPI_RSC_TABLE_SIZE(acpi_rs_convert_uart_serial_bus)}, 525 526 {ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_SERIAL_BUS, 527 sizeof(struct aml_resource_uart_serialbus), 528 0}, 529 530 {ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.common_serial_bus.revision_id), 531 AML_OFFSET(common_serial_bus.revision_id), 532 1}, 533 534 {ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.common_serial_bus.type), 535 AML_OFFSET(common_serial_bus.type), 536 1}, 537 538 {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET(data.common_serial_bus.slave_mode), 539 AML_OFFSET(common_serial_bus.flags), 540 0}, 541 542 {ACPI_RSC_1BITFLAG, 543 ACPI_RS_OFFSET(data.common_serial_bus.producer_consumer), 544 AML_OFFSET(common_serial_bus.flags), 545 1}, 546 547 {ACPI_RSC_1BITFLAG, 548 ACPI_RS_OFFSET(data.common_serial_bus.connection_sharing), 549 AML_OFFSET(common_serial_bus.flags), 550 2}, 551 552 {ACPI_RSC_MOVE8, 553 ACPI_RS_OFFSET(data.common_serial_bus.type_revision_id), 554 AML_OFFSET(common_serial_bus.type_revision_id), 555 1}, 556 557 {ACPI_RSC_MOVE16, 558 ACPI_RS_OFFSET(data.common_serial_bus.type_data_length), 559 AML_OFFSET(common_serial_bus.type_data_length), 560 1}, 561 562 /* Vendor data */ 563 564 {ACPI_RSC_COUNT_SERIAL_VEN, 565 ACPI_RS_OFFSET(data.common_serial_bus.vendor_length), 566 AML_OFFSET(common_serial_bus.type_data_length), 567 AML_RESOURCE_UART_MIN_DATA_LEN}, 568 569 {ACPI_RSC_MOVE_SERIAL_VEN, 570 ACPI_RS_OFFSET(data.common_serial_bus.vendor_data), 571 0, 572 sizeof(struct aml_resource_uart_serialbus)}, 573 574 /* Resource Source */ 575 576 {ACPI_RSC_MOVE8, 577 ACPI_RS_OFFSET(data.common_serial_bus.resource_source.index), 578 AML_OFFSET(common_serial_bus.res_source_index), 579 1}, 580 581 {ACPI_RSC_COUNT_SERIAL_RES, 582 ACPI_RS_OFFSET(data.common_serial_bus.resource_source.string_length), 583 AML_OFFSET(common_serial_bus.type_data_length), 584 sizeof(struct aml_resource_common_serialbus)}, 585 586 {ACPI_RSC_MOVE_SERIAL_RES, 587 ACPI_RS_OFFSET(data.common_serial_bus.resource_source.string_ptr), 588 AML_OFFSET(common_serial_bus.type_data_length), 589 sizeof(struct aml_resource_common_serialbus)}, 590 591 /* Uart bus type specific */ 592 593 {ACPI_RSC_2BITFLAG, ACPI_RS_OFFSET(data.uart_serial_bus.flow_control), 594 AML_OFFSET(uart_serial_bus.type_specific_flags), 595 0}, 596 597 {ACPI_RSC_2BITFLAG, ACPI_RS_OFFSET(data.uart_serial_bus.stop_bits), 598 AML_OFFSET(uart_serial_bus.type_specific_flags), 599 2}, 600 601 {ACPI_RSC_3BITFLAG, ACPI_RS_OFFSET(data.uart_serial_bus.data_bits), 602 AML_OFFSET(uart_serial_bus.type_specific_flags), 603 4}, 604 605 {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET(data.uart_serial_bus.endian), 606 AML_OFFSET(uart_serial_bus.type_specific_flags), 607 7}, 608 609 {ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.uart_serial_bus.parity), 610 AML_OFFSET(uart_serial_bus.parity), 611 1}, 612 613 {ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.uart_serial_bus.lines_enabled), 614 AML_OFFSET(uart_serial_bus.lines_enabled), 615 1}, 616 617 {ACPI_RSC_MOVE16, ACPI_RS_OFFSET(data.uart_serial_bus.rx_fifo_size), 618 AML_OFFSET(uart_serial_bus.rx_fifo_size), 619 1}, 620 621 {ACPI_RSC_MOVE16, ACPI_RS_OFFSET(data.uart_serial_bus.tx_fifo_size), 622 AML_OFFSET(uart_serial_bus.tx_fifo_size), 623 1}, 624 625 {ACPI_RSC_MOVE32, 626 ACPI_RS_OFFSET(data.uart_serial_bus.default_baud_rate), 627 AML_OFFSET(uart_serial_bus.default_baud_rate), 628 1}, 629 }; 630 631 /******************************************************************************* 632 * 633 * acpi_rs_convert_pin_config 634 * 635 ******************************************************************************/ 636 637 struct acpi_rsconvert_info acpi_rs_convert_pin_config[14] = { 638 {ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_PIN_CONFIG, 639 ACPI_RS_SIZE(struct acpi_resource_pin_config), 640 ACPI_RSC_TABLE_SIZE(acpi_rs_convert_pin_config)}, 641 642 {ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_PIN_CONFIG, 643 sizeof(struct aml_resource_pin_config), 644 0}, 645 646 {ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.pin_config.revision_id), 647 AML_OFFSET(pin_config.revision_id), 648 1}, 649 650 {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET(data.pin_config.shareable), 651 AML_OFFSET(pin_config.flags), 652 0}, 653 654 {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET(data.pin_config.producer_consumer), 655 AML_OFFSET(pin_config.flags), 656 1}, 657 658 {ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.pin_config.pin_config_type), 659 AML_OFFSET(pin_config.pin_config_type), 660 1}, 661 662 {ACPI_RSC_MOVE32, ACPI_RS_OFFSET(data.pin_config.pin_config_value), 663 AML_OFFSET(pin_config.pin_config_value), 664 1}, 665 666 /* Pin Table */ 667 668 /* 669 * It is OK to use GPIO operations here because none of them refer GPIO 670 * structures directly but instead use offsets given here. 671 */ 672 673 {ACPI_RSC_COUNT_GPIO_PIN, 674 ACPI_RS_OFFSET(data.pin_config.pin_table_length), 675 AML_OFFSET(pin_config.pin_table_offset), 676 AML_OFFSET(pin_config.res_source_offset)}, 677 678 {ACPI_RSC_MOVE_GPIO_PIN, ACPI_RS_OFFSET(data.pin_config.pin_table), 679 AML_OFFSET(pin_config.pin_table_offset), 680 0}, 681 682 /* Resource Source */ 683 684 {ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.pin_config.resource_source.index), 685 AML_OFFSET(pin_config.res_source_index), 686 1}, 687 688 {ACPI_RSC_COUNT_GPIO_RES, 689 ACPI_RS_OFFSET(data.pin_config.resource_source.string_length), 690 AML_OFFSET(pin_config.res_source_offset), 691 AML_OFFSET(pin_config.vendor_offset)}, 692 693 {ACPI_RSC_MOVE_GPIO_RES, 694 ACPI_RS_OFFSET(data.pin_config.resource_source.string_ptr), 695 AML_OFFSET(pin_config.res_source_offset), 696 0}, 697 698 /* Vendor Data */ 699 700 {ACPI_RSC_COUNT_GPIO_VEN, ACPI_RS_OFFSET(data.pin_config.vendor_length), 701 AML_OFFSET(pin_config.vendor_length), 702 1}, 703 704 {ACPI_RSC_MOVE_GPIO_RES, ACPI_RS_OFFSET(data.pin_config.vendor_data), 705 AML_OFFSET(pin_config.vendor_offset), 706 0}, 707 }; 708 709 /******************************************************************************* 710 * 711 * acpi_rs_convert_pin_group 712 * 713 ******************************************************************************/ 714 715 struct acpi_rsconvert_info acpi_rs_convert_pin_group[10] = { 716 {ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_PIN_GROUP, 717 ACPI_RS_SIZE(struct acpi_resource_pin_group), 718 ACPI_RSC_TABLE_SIZE(acpi_rs_convert_pin_group)}, 719 720 {ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_PIN_GROUP, 721 sizeof(struct aml_resource_pin_group), 722 0}, 723 724 {ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.pin_group.revision_id), 725 AML_OFFSET(pin_group.revision_id), 726 1}, 727 728 {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET(data.pin_group.producer_consumer), 729 AML_OFFSET(pin_group.flags), 730 0}, 731 732 /* Pin Table */ 733 734 /* 735 * It is OK to use GPIO operations here because none of them refer GPIO 736 * structures directly but instead use offsets given here. 737 */ 738 739 {ACPI_RSC_COUNT_GPIO_PIN, 740 ACPI_RS_OFFSET(data.pin_group.pin_table_length), 741 AML_OFFSET(pin_group.pin_table_offset), 742 AML_OFFSET(pin_group.label_offset)}, 743 744 {ACPI_RSC_MOVE_GPIO_PIN, ACPI_RS_OFFSET(data.pin_group.pin_table), 745 AML_OFFSET(pin_group.pin_table_offset), 746 0}, 747 748 /* Resource Label */ 749 750 {ACPI_RSC_COUNT_GPIO_RES, 751 ACPI_RS_OFFSET(data.pin_group.resource_label.string_length), 752 AML_OFFSET(pin_group.label_offset), 753 AML_OFFSET(pin_group.vendor_offset)}, 754 755 {ACPI_RSC_MOVE_GPIO_RES, 756 ACPI_RS_OFFSET(data.pin_group.resource_label.string_ptr), 757 AML_OFFSET(pin_group.label_offset), 758 0}, 759 760 /* Vendor Data */ 761 762 {ACPI_RSC_COUNT_GPIO_VEN, ACPI_RS_OFFSET(data.pin_group.vendor_length), 763 AML_OFFSET(pin_group.vendor_length), 764 1}, 765 766 {ACPI_RSC_MOVE_GPIO_RES, ACPI_RS_OFFSET(data.pin_group.vendor_data), 767 AML_OFFSET(pin_group.vendor_offset), 768 0}, 769 }; 770 771 /******************************************************************************* 772 * 773 * acpi_rs_convert_pin_group_function 774 * 775 ******************************************************************************/ 776 777 struct acpi_rsconvert_info acpi_rs_convert_pin_group_function[13] = { 778 {ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_PIN_GROUP_FUNCTION, 779 ACPI_RS_SIZE(struct acpi_resource_pin_group_function), 780 ACPI_RSC_TABLE_SIZE(acpi_rs_convert_pin_group_function)}, 781 782 {ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_PIN_GROUP_FUNCTION, 783 sizeof(struct aml_resource_pin_group_function), 784 0}, 785 786 {ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.pin_group_function.revision_id), 787 AML_OFFSET(pin_group_function.revision_id), 788 1}, 789 790 {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET(data.pin_group_function.shareable), 791 AML_OFFSET(pin_group_function.flags), 792 0}, 793 794 {ACPI_RSC_1BITFLAG, 795 ACPI_RS_OFFSET(data.pin_group_function.producer_consumer), 796 AML_OFFSET(pin_group_function.flags), 797 1}, 798 799 {ACPI_RSC_MOVE16, 800 ACPI_RS_OFFSET(data.pin_group_function.function_number), 801 AML_OFFSET(pin_group_function.function_number), 802 1}, 803 804 /* Resource Source */ 805 806 {ACPI_RSC_MOVE8, 807 ACPI_RS_OFFSET(data.pin_group_function.resource_source.index), 808 AML_OFFSET(pin_group_function.res_source_index), 809 1}, 810 811 {ACPI_RSC_COUNT_GPIO_RES, 812 ACPI_RS_OFFSET(data.pin_group_function.resource_source.string_length), 813 AML_OFFSET(pin_group_function.res_source_offset), 814 AML_OFFSET(pin_group_function.res_source_label_offset)}, 815 816 {ACPI_RSC_MOVE_GPIO_RES, 817 ACPI_RS_OFFSET(data.pin_group_function.resource_source.string_ptr), 818 AML_OFFSET(pin_group_function.res_source_offset), 819 0}, 820 821 /* Resource Source Label */ 822 823 {ACPI_RSC_COUNT_GPIO_RES, 824 ACPI_RS_OFFSET(data.pin_group_function.resource_source_label. 825 string_length), 826 AML_OFFSET(pin_group_function.res_source_label_offset), 827 AML_OFFSET(pin_group_function.vendor_offset)}, 828 829 {ACPI_RSC_MOVE_GPIO_RES, 830 ACPI_RS_OFFSET(data.pin_group_function.resource_source_label. 831 string_ptr), 832 AML_OFFSET(pin_group_function.res_source_label_offset), 833 0}, 834 835 /* Vendor Data */ 836 837 {ACPI_RSC_COUNT_GPIO_VEN, 838 ACPI_RS_OFFSET(data.pin_group_function.vendor_length), 839 AML_OFFSET(pin_group_function.vendor_length), 840 1}, 841 842 {ACPI_RSC_MOVE_GPIO_RES, 843 ACPI_RS_OFFSET(data.pin_group_function.vendor_data), 844 AML_OFFSET(pin_group_function.vendor_offset), 845 0}, 846 }; 847 848 /******************************************************************************* 849 * 850 * acpi_rs_convert_pin_group_config 851 * 852 ******************************************************************************/ 853 854 struct acpi_rsconvert_info acpi_rs_convert_pin_group_config[14] = { 855 {ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_PIN_GROUP_CONFIG, 856 ACPI_RS_SIZE(struct acpi_resource_pin_group_config), 857 ACPI_RSC_TABLE_SIZE(acpi_rs_convert_pin_group_config)}, 858 859 {ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_PIN_GROUP_CONFIG, 860 sizeof(struct aml_resource_pin_group_config), 861 0}, 862 863 {ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.pin_group_config.revision_id), 864 AML_OFFSET(pin_group_config.revision_id), 865 1}, 866 867 {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET(data.pin_group_config.shareable), 868 AML_OFFSET(pin_group_config.flags), 869 0}, 870 871 {ACPI_RSC_1BITFLAG, 872 ACPI_RS_OFFSET(data.pin_group_config.producer_consumer), 873 AML_OFFSET(pin_group_config.flags), 874 1}, 875 876 {ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.pin_group_config.pin_config_type), 877 AML_OFFSET(pin_group_config.pin_config_type), 878 1}, 879 880 {ACPI_RSC_MOVE32, 881 ACPI_RS_OFFSET(data.pin_group_config.pin_config_value), 882 AML_OFFSET(pin_group_config.pin_config_value), 883 1}, 884 885 /* Resource Source */ 886 887 {ACPI_RSC_MOVE8, 888 ACPI_RS_OFFSET(data.pin_group_config.resource_source.index), 889 AML_OFFSET(pin_group_config.res_source_index), 890 1}, 891 892 {ACPI_RSC_COUNT_GPIO_RES, 893 ACPI_RS_OFFSET(data.pin_group_config.resource_source.string_length), 894 AML_OFFSET(pin_group_config.res_source_offset), 895 AML_OFFSET(pin_group_config.res_source_label_offset)}, 896 897 {ACPI_RSC_MOVE_GPIO_RES, 898 ACPI_RS_OFFSET(data.pin_group_config.resource_source.string_ptr), 899 AML_OFFSET(pin_group_config.res_source_offset), 900 0}, 901 902 /* Resource Source Label */ 903 904 {ACPI_RSC_COUNT_GPIO_RES, 905 ACPI_RS_OFFSET(data.pin_group_config.resource_source_label. 906 string_length), 907 AML_OFFSET(pin_group_config.res_source_label_offset), 908 AML_OFFSET(pin_group_config.vendor_offset)}, 909 910 {ACPI_RSC_MOVE_GPIO_RES, 911 ACPI_RS_OFFSET(data.pin_group_config.resource_source_label.string_ptr), 912 AML_OFFSET(pin_group_config.res_source_label_offset), 913 0}, 914 915 /* Vendor Data */ 916 917 {ACPI_RSC_COUNT_GPIO_VEN, 918 ACPI_RS_OFFSET(data.pin_group_config.vendor_length), 919 AML_OFFSET(pin_group_config.vendor_length), 920 1}, 921 922 {ACPI_RSC_MOVE_GPIO_RES, 923 ACPI_RS_OFFSET(data.pin_group_config.vendor_data), 924 AML_OFFSET(pin_group_config.vendor_offset), 925 0}, 926 }; 927