922 lines · c
1// SPDX-License-Identifier: BSD-3-Clause OR GPL-2.02/*******************************************************************************3 *4 * Module Name: rsserial - GPIO/serial_bus resource descriptors5 *6 ******************************************************************************/7 8#include <acpi/acpi.h>9#include "accommon.h"10#include "acresrc.h"11 12#define _COMPONENT ACPI_RESOURCES13ACPI_MODULE_NAME("rsserial")14 15/*******************************************************************************16 *17 * acpi_rs_convert_gpio18 *19 ******************************************************************************/20struct 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_id32 * connection_type33 */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_strength69 * debounce_timeout70 */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_input115 *116 ******************************************************************************/117 118struct 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_pinfunction164 *165 ******************************************************************************/166 167struct 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 GPIO196 * 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_bus240 *241 ******************************************************************************/242 243struct 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_bus315 *316 ******************************************************************************/317 318struct acpi_rsconvert_info acpi_rs_convert_i2c_serial_bus[17] = {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 {ACPI_RSC_MOVE32, ACPI_RS_OFFSET(data.i2c_serial_bus.connection_speed),395 AML_OFFSET(i2c_serial_bus.connection_speed),396 1},397 398 {ACPI_RSC_MOVE16, ACPI_RS_OFFSET(data.i2c_serial_bus.slave_address),399 AML_OFFSET(i2c_serial_bus.slave_address),400 1},401};402 403/*******************************************************************************404 *405 * acpi_rs_convert_spi_serial_bus406 *407 ******************************************************************************/408 409struct acpi_rsconvert_info acpi_rs_convert_spi_serial_bus[21] = {410 {ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_SERIAL_BUS,411 ACPI_RS_SIZE(struct acpi_resource_spi_serialbus),412 ACPI_RSC_TABLE_SIZE(acpi_rs_convert_spi_serial_bus)},413 414 {ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_SERIAL_BUS,415 sizeof(struct aml_resource_spi_serialbus),416 0},417 418 {ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.common_serial_bus.revision_id),419 AML_OFFSET(common_serial_bus.revision_id),420 1},421 422 {ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.common_serial_bus.type),423 AML_OFFSET(common_serial_bus.type),424 1},425 426 {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET(data.common_serial_bus.slave_mode),427 AML_OFFSET(common_serial_bus.flags),428 0},429 430 {ACPI_RSC_1BITFLAG,431 ACPI_RS_OFFSET(data.common_serial_bus.producer_consumer),432 AML_OFFSET(common_serial_bus.flags),433 1},434 435 {ACPI_RSC_1BITFLAG,436 ACPI_RS_OFFSET(data.common_serial_bus.connection_sharing),437 AML_OFFSET(common_serial_bus.flags),438 2},439 440 {ACPI_RSC_MOVE8,441 ACPI_RS_OFFSET(data.common_serial_bus.type_revision_id),442 AML_OFFSET(common_serial_bus.type_revision_id),443 1},444 445 {ACPI_RSC_MOVE16,446 ACPI_RS_OFFSET(data.common_serial_bus.type_data_length),447 AML_OFFSET(common_serial_bus.type_data_length),448 1},449 450 /* Vendor data */451 452 {ACPI_RSC_COUNT_SERIAL_VEN,453 ACPI_RS_OFFSET(data.common_serial_bus.vendor_length),454 AML_OFFSET(common_serial_bus.type_data_length),455 AML_RESOURCE_SPI_MIN_DATA_LEN},456 457 {ACPI_RSC_MOVE_SERIAL_VEN,458 ACPI_RS_OFFSET(data.common_serial_bus.vendor_data),459 0,460 sizeof(struct aml_resource_spi_serialbus)},461 462 /* Resource Source */463 464 {ACPI_RSC_MOVE8,465 ACPI_RS_OFFSET(data.common_serial_bus.resource_source.index),466 AML_OFFSET(common_serial_bus.res_source_index),467 1},468 469 {ACPI_RSC_COUNT_SERIAL_RES,470 ACPI_RS_OFFSET(data.common_serial_bus.resource_source.string_length),471 AML_OFFSET(common_serial_bus.type_data_length),472 sizeof(struct aml_resource_common_serialbus)},473 474 {ACPI_RSC_MOVE_SERIAL_RES,475 ACPI_RS_OFFSET(data.common_serial_bus.resource_source.string_ptr),476 AML_OFFSET(common_serial_bus.type_data_length),477 sizeof(struct aml_resource_common_serialbus)},478 479 /* Spi bus type specific */480 481 {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET(data.spi_serial_bus.wire_mode),482 AML_OFFSET(spi_serial_bus.type_specific_flags),483 0},484 485 {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET(data.spi_serial_bus.device_polarity),486 AML_OFFSET(spi_serial_bus.type_specific_flags),487 1},488 489 {ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.spi_serial_bus.data_bit_length),490 AML_OFFSET(spi_serial_bus.data_bit_length),491 1},492 493 {ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.spi_serial_bus.clock_phase),494 AML_OFFSET(spi_serial_bus.clock_phase),495 1},496 497 {ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.spi_serial_bus.clock_polarity),498 AML_OFFSET(spi_serial_bus.clock_polarity),499 1},500 501 {ACPI_RSC_MOVE16, ACPI_RS_OFFSET(data.spi_serial_bus.device_selection),502 AML_OFFSET(spi_serial_bus.device_selection),503 1},504 505 {ACPI_RSC_MOVE32, ACPI_RS_OFFSET(data.spi_serial_bus.connection_speed),506 AML_OFFSET(spi_serial_bus.connection_speed),507 1},508};509 510/*******************************************************************************511 *512 * acpi_rs_convert_uart_serial_bus513 *514 ******************************************************************************/515 516struct acpi_rsconvert_info acpi_rs_convert_uart_serial_bus[23] = {517 {ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_SERIAL_BUS,518 ACPI_RS_SIZE(struct acpi_resource_uart_serialbus),519 ACPI_RSC_TABLE_SIZE(acpi_rs_convert_uart_serial_bus)},520 521 {ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_SERIAL_BUS,522 sizeof(struct aml_resource_uart_serialbus),523 0},524 525 {ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.common_serial_bus.revision_id),526 AML_OFFSET(common_serial_bus.revision_id),527 1},528 529 {ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.common_serial_bus.type),530 AML_OFFSET(common_serial_bus.type),531 1},532 533 {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET(data.common_serial_bus.slave_mode),534 AML_OFFSET(common_serial_bus.flags),535 0},536 537 {ACPI_RSC_1BITFLAG,538 ACPI_RS_OFFSET(data.common_serial_bus.producer_consumer),539 AML_OFFSET(common_serial_bus.flags),540 1},541 542 {ACPI_RSC_1BITFLAG,543 ACPI_RS_OFFSET(data.common_serial_bus.connection_sharing),544 AML_OFFSET(common_serial_bus.flags),545 2},546 547 {ACPI_RSC_MOVE8,548 ACPI_RS_OFFSET(data.common_serial_bus.type_revision_id),549 AML_OFFSET(common_serial_bus.type_revision_id),550 1},551 552 {ACPI_RSC_MOVE16,553 ACPI_RS_OFFSET(data.common_serial_bus.type_data_length),554 AML_OFFSET(common_serial_bus.type_data_length),555 1},556 557 /* Vendor data */558 559 {ACPI_RSC_COUNT_SERIAL_VEN,560 ACPI_RS_OFFSET(data.common_serial_bus.vendor_length),561 AML_OFFSET(common_serial_bus.type_data_length),562 AML_RESOURCE_UART_MIN_DATA_LEN},563 564 {ACPI_RSC_MOVE_SERIAL_VEN,565 ACPI_RS_OFFSET(data.common_serial_bus.vendor_data),566 0,567 sizeof(struct aml_resource_uart_serialbus)},568 569 /* Resource Source */570 571 {ACPI_RSC_MOVE8,572 ACPI_RS_OFFSET(data.common_serial_bus.resource_source.index),573 AML_OFFSET(common_serial_bus.res_source_index),574 1},575 576 {ACPI_RSC_COUNT_SERIAL_RES,577 ACPI_RS_OFFSET(data.common_serial_bus.resource_source.string_length),578 AML_OFFSET(common_serial_bus.type_data_length),579 sizeof(struct aml_resource_common_serialbus)},580 581 {ACPI_RSC_MOVE_SERIAL_RES,582 ACPI_RS_OFFSET(data.common_serial_bus.resource_source.string_ptr),583 AML_OFFSET(common_serial_bus.type_data_length),584 sizeof(struct aml_resource_common_serialbus)},585 586 /* Uart bus type specific */587 588 {ACPI_RSC_2BITFLAG, ACPI_RS_OFFSET(data.uart_serial_bus.flow_control),589 AML_OFFSET(uart_serial_bus.type_specific_flags),590 0},591 592 {ACPI_RSC_2BITFLAG, ACPI_RS_OFFSET(data.uart_serial_bus.stop_bits),593 AML_OFFSET(uart_serial_bus.type_specific_flags),594 2},595 596 {ACPI_RSC_3BITFLAG, ACPI_RS_OFFSET(data.uart_serial_bus.data_bits),597 AML_OFFSET(uart_serial_bus.type_specific_flags),598 4},599 600 {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET(data.uart_serial_bus.endian),601 AML_OFFSET(uart_serial_bus.type_specific_flags),602 7},603 604 {ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.uart_serial_bus.parity),605 AML_OFFSET(uart_serial_bus.parity),606 1},607 608 {ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.uart_serial_bus.lines_enabled),609 AML_OFFSET(uart_serial_bus.lines_enabled),610 1},611 612 {ACPI_RSC_MOVE16, ACPI_RS_OFFSET(data.uart_serial_bus.rx_fifo_size),613 AML_OFFSET(uart_serial_bus.rx_fifo_size),614 1},615 616 {ACPI_RSC_MOVE16, ACPI_RS_OFFSET(data.uart_serial_bus.tx_fifo_size),617 AML_OFFSET(uart_serial_bus.tx_fifo_size),618 1},619 620 {ACPI_RSC_MOVE32,621 ACPI_RS_OFFSET(data.uart_serial_bus.default_baud_rate),622 AML_OFFSET(uart_serial_bus.default_baud_rate),623 1},624};625 626/*******************************************************************************627 *628 * acpi_rs_convert_pin_config629 *630 ******************************************************************************/631 632struct acpi_rsconvert_info acpi_rs_convert_pin_config[14] = {633 {ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_PIN_CONFIG,634 ACPI_RS_SIZE(struct acpi_resource_pin_config),635 ACPI_RSC_TABLE_SIZE(acpi_rs_convert_pin_config)},636 637 {ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_PIN_CONFIG,638 sizeof(struct aml_resource_pin_config),639 0},640 641 {ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.pin_config.revision_id),642 AML_OFFSET(pin_config.revision_id),643 1},644 645 {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET(data.pin_config.shareable),646 AML_OFFSET(pin_config.flags),647 0},648 649 {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET(data.pin_config.producer_consumer),650 AML_OFFSET(pin_config.flags),651 1},652 653 {ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.pin_config.pin_config_type),654 AML_OFFSET(pin_config.pin_config_type),655 1},656 657 {ACPI_RSC_MOVE32, ACPI_RS_OFFSET(data.pin_config.pin_config_value),658 AML_OFFSET(pin_config.pin_config_value),659 1},660 661 /* Pin Table */662 663 /*664 * It is OK to use GPIO operations here because none of them refer GPIO665 * structures directly but instead use offsets given here.666 */667 668 {ACPI_RSC_COUNT_GPIO_PIN,669 ACPI_RS_OFFSET(data.pin_config.pin_table_length),670 AML_OFFSET(pin_config.pin_table_offset),671 AML_OFFSET(pin_config.res_source_offset)},672 673 {ACPI_RSC_MOVE_GPIO_PIN, ACPI_RS_OFFSET(data.pin_config.pin_table),674 AML_OFFSET(pin_config.pin_table_offset),675 0},676 677 /* Resource Source */678 679 {ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.pin_config.resource_source.index),680 AML_OFFSET(pin_config.res_source_index),681 1},682 683 {ACPI_RSC_COUNT_GPIO_RES,684 ACPI_RS_OFFSET(data.pin_config.resource_source.string_length),685 AML_OFFSET(pin_config.res_source_offset),686 AML_OFFSET(pin_config.vendor_offset)},687 688 {ACPI_RSC_MOVE_GPIO_RES,689 ACPI_RS_OFFSET(data.pin_config.resource_source.string_ptr),690 AML_OFFSET(pin_config.res_source_offset),691 0},692 693 /* Vendor Data */694 695 {ACPI_RSC_COUNT_GPIO_VEN, ACPI_RS_OFFSET(data.pin_config.vendor_length),696 AML_OFFSET(pin_config.vendor_length),697 1},698 699 {ACPI_RSC_MOVE_GPIO_RES, ACPI_RS_OFFSET(data.pin_config.vendor_data),700 AML_OFFSET(pin_config.vendor_offset),701 0},702};703 704/*******************************************************************************705 *706 * acpi_rs_convert_pin_group707 *708 ******************************************************************************/709 710struct acpi_rsconvert_info acpi_rs_convert_pin_group[10] = {711 {ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_PIN_GROUP,712 ACPI_RS_SIZE(struct acpi_resource_pin_group),713 ACPI_RSC_TABLE_SIZE(acpi_rs_convert_pin_group)},714 715 {ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_PIN_GROUP,716 sizeof(struct aml_resource_pin_group),717 0},718 719 {ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.pin_group.revision_id),720 AML_OFFSET(pin_group.revision_id),721 1},722 723 {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET(data.pin_group.producer_consumer),724 AML_OFFSET(pin_group.flags),725 0},726 727 /* Pin Table */728 729 /*730 * It is OK to use GPIO operations here because none of them refer GPIO731 * structures directly but instead use offsets given here.732 */733 734 {ACPI_RSC_COUNT_GPIO_PIN,735 ACPI_RS_OFFSET(data.pin_group.pin_table_length),736 AML_OFFSET(pin_group.pin_table_offset),737 AML_OFFSET(pin_group.label_offset)},738 739 {ACPI_RSC_MOVE_GPIO_PIN, ACPI_RS_OFFSET(data.pin_group.pin_table),740 AML_OFFSET(pin_group.pin_table_offset),741 0},742 743 /* Resource Label */744 745 {ACPI_RSC_COUNT_GPIO_RES,746 ACPI_RS_OFFSET(data.pin_group.resource_label.string_length),747 AML_OFFSET(pin_group.label_offset),748 AML_OFFSET(pin_group.vendor_offset)},749 750 {ACPI_RSC_MOVE_GPIO_RES,751 ACPI_RS_OFFSET(data.pin_group.resource_label.string_ptr),752 AML_OFFSET(pin_group.label_offset),753 0},754 755 /* Vendor Data */756 757 {ACPI_RSC_COUNT_GPIO_VEN, ACPI_RS_OFFSET(data.pin_group.vendor_length),758 AML_OFFSET(pin_group.vendor_length),759 1},760 761 {ACPI_RSC_MOVE_GPIO_RES, ACPI_RS_OFFSET(data.pin_group.vendor_data),762 AML_OFFSET(pin_group.vendor_offset),763 0},764};765 766/*******************************************************************************767 *768 * acpi_rs_convert_pin_group_function769 *770 ******************************************************************************/771 772struct acpi_rsconvert_info acpi_rs_convert_pin_group_function[13] = {773 {ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_PIN_GROUP_FUNCTION,774 ACPI_RS_SIZE(struct acpi_resource_pin_group_function),775 ACPI_RSC_TABLE_SIZE(acpi_rs_convert_pin_group_function)},776 777 {ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_PIN_GROUP_FUNCTION,778 sizeof(struct aml_resource_pin_group_function),779 0},780 781 {ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.pin_group_function.revision_id),782 AML_OFFSET(pin_group_function.revision_id),783 1},784 785 {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET(data.pin_group_function.shareable),786 AML_OFFSET(pin_group_function.flags),787 0},788 789 {ACPI_RSC_1BITFLAG,790 ACPI_RS_OFFSET(data.pin_group_function.producer_consumer),791 AML_OFFSET(pin_group_function.flags),792 1},793 794 {ACPI_RSC_MOVE16,795 ACPI_RS_OFFSET(data.pin_group_function.function_number),796 AML_OFFSET(pin_group_function.function_number),797 1},798 799 /* Resource Source */800 801 {ACPI_RSC_MOVE8,802 ACPI_RS_OFFSET(data.pin_group_function.resource_source.index),803 AML_OFFSET(pin_group_function.res_source_index),804 1},805 806 {ACPI_RSC_COUNT_GPIO_RES,807 ACPI_RS_OFFSET(data.pin_group_function.resource_source.string_length),808 AML_OFFSET(pin_group_function.res_source_offset),809 AML_OFFSET(pin_group_function.res_source_label_offset)},810 811 {ACPI_RSC_MOVE_GPIO_RES,812 ACPI_RS_OFFSET(data.pin_group_function.resource_source.string_ptr),813 AML_OFFSET(pin_group_function.res_source_offset),814 0},815 816 /* Resource Source Label */817 818 {ACPI_RSC_COUNT_GPIO_RES,819 ACPI_RS_OFFSET(data.pin_group_function.resource_source_label.820 string_length),821 AML_OFFSET(pin_group_function.res_source_label_offset),822 AML_OFFSET(pin_group_function.vendor_offset)},823 824 {ACPI_RSC_MOVE_GPIO_RES,825 ACPI_RS_OFFSET(data.pin_group_function.resource_source_label.826 string_ptr),827 AML_OFFSET(pin_group_function.res_source_label_offset),828 0},829 830 /* Vendor Data */831 832 {ACPI_RSC_COUNT_GPIO_VEN,833 ACPI_RS_OFFSET(data.pin_group_function.vendor_length),834 AML_OFFSET(pin_group_function.vendor_length),835 1},836 837 {ACPI_RSC_MOVE_GPIO_RES,838 ACPI_RS_OFFSET(data.pin_group_function.vendor_data),839 AML_OFFSET(pin_group_function.vendor_offset),840 0},841};842 843/*******************************************************************************844 *845 * acpi_rs_convert_pin_group_config846 *847 ******************************************************************************/848 849struct acpi_rsconvert_info acpi_rs_convert_pin_group_config[14] = {850 {ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_PIN_GROUP_CONFIG,851 ACPI_RS_SIZE(struct acpi_resource_pin_group_config),852 ACPI_RSC_TABLE_SIZE(acpi_rs_convert_pin_group_config)},853 854 {ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_PIN_GROUP_CONFIG,855 sizeof(struct aml_resource_pin_group_config),856 0},857 858 {ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.pin_group_config.revision_id),859 AML_OFFSET(pin_group_config.revision_id),860 1},861 862 {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET(data.pin_group_config.shareable),863 AML_OFFSET(pin_group_config.flags),864 0},865 866 {ACPI_RSC_1BITFLAG,867 ACPI_RS_OFFSET(data.pin_group_config.producer_consumer),868 AML_OFFSET(pin_group_config.flags),869 1},870 871 {ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.pin_group_config.pin_config_type),872 AML_OFFSET(pin_group_config.pin_config_type),873 1},874 875 {ACPI_RSC_MOVE32,876 ACPI_RS_OFFSET(data.pin_group_config.pin_config_value),877 AML_OFFSET(pin_group_config.pin_config_value),878 1},879 880 /* Resource Source */881 882 {ACPI_RSC_MOVE8,883 ACPI_RS_OFFSET(data.pin_group_config.resource_source.index),884 AML_OFFSET(pin_group_config.res_source_index),885 1},886 887 {ACPI_RSC_COUNT_GPIO_RES,888 ACPI_RS_OFFSET(data.pin_group_config.resource_source.string_length),889 AML_OFFSET(pin_group_config.res_source_offset),890 AML_OFFSET(pin_group_config.res_source_label_offset)},891 892 {ACPI_RSC_MOVE_GPIO_RES,893 ACPI_RS_OFFSET(data.pin_group_config.resource_source.string_ptr),894 AML_OFFSET(pin_group_config.res_source_offset),895 0},896 897 /* Resource Source Label */898 899 {ACPI_RSC_COUNT_GPIO_RES,900 ACPI_RS_OFFSET(data.pin_group_config.resource_source_label.901 string_length),902 AML_OFFSET(pin_group_config.res_source_label_offset),903 AML_OFFSET(pin_group_config.vendor_offset)},904 905 {ACPI_RSC_MOVE_GPIO_RES,906 ACPI_RS_OFFSET(data.pin_group_config.resource_source_label.string_ptr),907 AML_OFFSET(pin_group_config.res_source_label_offset),908 0},909 910 /* Vendor Data */911 912 {ACPI_RSC_COUNT_GPIO_VEN,913 ACPI_RS_OFFSET(data.pin_group_config.vendor_length),914 AML_OFFSET(pin_group_config.vendor_length),915 1},916 917 {ACPI_RSC_MOVE_GPIO_RES,918 ACPI_RS_OFFSET(data.pin_group_config.vendor_data),919 AML_OFFSET(pin_group_config.vendor_offset),920 0},921};922