linux/drivers/acpi/acpica/rsserial.c
<<
>>
Prefs
   1/*******************************************************************************
   2 *
   3 * Module Name: rsserial - GPIO/serial_bus resource descriptors
   4 *
   5 ******************************************************************************/
   6
   7/*
   8 * Copyright (C) 2000 - 2017, Intel Corp.
   9 * All rights reserved.
  10 *
  11 * Redistribution and use in source and binary forms, with or without
  12 * modification, are permitted provided that the following conditions
  13 * are met:
  14 * 1. Redistributions of source code must retain the above copyright
  15 *    notice, this list of conditions, and the following disclaimer,
  16 *    without modification.
  17 * 2. Redistributions in binary form must reproduce at minimum a disclaimer
  18 *    substantially similar to the "NO WARRANTY" disclaimer below
  19 *    ("Disclaimer") and any redistribution must be conditioned upon
  20 *    including a substantially similar Disclaimer requirement for further
  21 *    binary redistribution.
  22 * 3. Neither the names of the above-listed copyright holders nor the names
  23 *    of any contributors may be used to endorse or promote products derived
  24 *    from this software without specific prior written permission.
  25 *
  26 * Alternatively, this software may be distributed under the terms of the
  27 * GNU General Public License ("GPL") version 2 as published by the Free
  28 * Software Foundation.
  29 *
  30 * NO WARRANTY
  31 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
  32 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
  33 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
  34 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
  35 * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  36 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  37 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  38 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
  39 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
  40 * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
  41 * POSSIBILITY OF SUCH DAMAGES.
  42 */
  43
  44#include <acpi/acpi.h>
  45#include "accommon.h"
  46#include "acresrc.h"
  47
  48#define _COMPONENT          ACPI_RESOURCES
  49ACPI_MODULE_NAME("rsserial")
  50
  51/*******************************************************************************
  52 *
  53 * acpi_rs_convert_gpio
  54 *
  55 ******************************************************************************/
  56struct acpi_rsconvert_info acpi_rs_convert_gpio[18] = {
  57        {ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_GPIO,
  58         ACPI_RS_SIZE(struct acpi_resource_gpio),
  59         ACPI_RSC_TABLE_SIZE(acpi_rs_convert_gpio)},
  60
  61        {ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_GPIO,
  62         sizeof(struct aml_resource_gpio),
  63         0},
  64
  65        /*
  66         * These fields are contiguous in both the source and destination:
  67         * revision_id
  68         * connection_type
  69         */
  70        {ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.gpio.revision_id),
  71         AML_OFFSET(gpio.revision_id),
  72         2},
  73
  74        {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET(data.gpio.producer_consumer),
  75         AML_OFFSET(gpio.flags),
  76         0},
  77
  78        {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET(data.gpio.sharable),
  79         AML_OFFSET(gpio.int_flags),
  80         3},
  81
  82        {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET(data.gpio.wake_capable),
  83         AML_OFFSET(gpio.int_flags),
  84         4},
  85
  86        {ACPI_RSC_2BITFLAG, ACPI_RS_OFFSET(data.gpio.io_restriction),
  87         AML_OFFSET(gpio.int_flags),
  88         0},
  89
  90        {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET(data.gpio.triggering),
  91         AML_OFFSET(gpio.int_flags),
  92         0},
  93
  94        {ACPI_RSC_2BITFLAG, ACPI_RS_OFFSET(data.gpio.polarity),
  95         AML_OFFSET(gpio.int_flags),
  96         1},
  97
  98        {ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.gpio.pin_config),
  99         AML_OFFSET(gpio.pin_config),
 100         1},
 101
 102        /*
 103         * These fields are contiguous in both the source and destination:
 104         * drive_strength
 105         * debounce_timeout
 106         */
 107        {ACPI_RSC_MOVE16, ACPI_RS_OFFSET(data.gpio.drive_strength),
 108         AML_OFFSET(gpio.drive_strength),
 109         2},
 110
 111        /* Pin Table */
 112
 113        {ACPI_RSC_COUNT_GPIO_PIN, ACPI_RS_OFFSET(data.gpio.pin_table_length),
 114         AML_OFFSET(gpio.pin_table_offset),
 115         AML_OFFSET(gpio.res_source_offset)},
 116
 117        {ACPI_RSC_MOVE_GPIO_PIN, ACPI_RS_OFFSET(data.gpio.pin_table),
 118         AML_OFFSET(gpio.pin_table_offset),
 119         0},
 120
 121        /* Resource Source */
 122
 123        {ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.gpio.resource_source.index),
 124         AML_OFFSET(gpio.res_source_index),
 125         1},
 126
 127        {ACPI_RSC_COUNT_GPIO_RES,
 128         ACPI_RS_OFFSET(data.gpio.resource_source.string_length),
 129         AML_OFFSET(gpio.res_source_offset),
 130         AML_OFFSET(gpio.vendor_offset)},
 131
 132        {ACPI_RSC_MOVE_GPIO_RES,
 133         ACPI_RS_OFFSET(data.gpio.resource_source.string_ptr),
 134         AML_OFFSET(gpio.res_source_offset),
 135         0},
 136
 137        /* Vendor Data */
 138
 139        {ACPI_RSC_COUNT_GPIO_VEN, ACPI_RS_OFFSET(data.gpio.vendor_length),
 140         AML_OFFSET(gpio.vendor_length),
 141         1},
 142
 143        {ACPI_RSC_MOVE_GPIO_RES, ACPI_RS_OFFSET(data.gpio.vendor_data),
 144         AML_OFFSET(gpio.vendor_offset),
 145         0},
 146};
 147
 148/*******************************************************************************
 149 *
 150 * acpi_rs_convert_pinfunction
 151 *
 152 ******************************************************************************/
 153
 154struct acpi_rsconvert_info acpi_rs_convert_pin_function[13] = {
 155        {ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_PIN_FUNCTION,
 156         ACPI_RS_SIZE(struct acpi_resource_pin_function),
 157         ACPI_RSC_TABLE_SIZE(acpi_rs_convert_pin_function)},
 158
 159        {ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_PIN_FUNCTION,
 160         sizeof(struct aml_resource_pin_function),
 161         0},
 162
 163        {ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.pin_function.revision_id),
 164         AML_OFFSET(pin_function.revision_id),
 165         1},
 166
 167        {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET(data.pin_function.sharable),
 168         AML_OFFSET(pin_function.flags),
 169         0},
 170
 171        {ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.pin_function.pin_config),
 172         AML_OFFSET(pin_function.pin_config),
 173         1},
 174
 175        {ACPI_RSC_MOVE16, ACPI_RS_OFFSET(data.pin_function.function_number),
 176         AML_OFFSET(pin_function.function_number),
 177         2},
 178
 179        /* Pin Table */
 180
 181        /*
 182         * It is OK to use GPIO operations here because none of them refer GPIO
 183         * structures directly but instead use offsets given here.
 184         */
 185
 186        {ACPI_RSC_COUNT_GPIO_PIN,
 187         ACPI_RS_OFFSET(data.pin_function.pin_table_length),
 188         AML_OFFSET(pin_function.pin_table_offset),
 189         AML_OFFSET(pin_function.res_source_offset)},
 190
 191        {ACPI_RSC_MOVE_GPIO_PIN, ACPI_RS_OFFSET(data.pin_function.pin_table),
 192         AML_OFFSET(pin_function.pin_table_offset),
 193         0},
 194
 195        /* Resource Source */
 196
 197        {ACPI_RSC_MOVE8,
 198         ACPI_RS_OFFSET(data.pin_function.resource_source.index),
 199         AML_OFFSET(pin_function.res_source_index),
 200         1},
 201
 202        {ACPI_RSC_COUNT_GPIO_RES,
 203         ACPI_RS_OFFSET(data.pin_function.resource_source.string_length),
 204         AML_OFFSET(pin_function.res_source_offset),
 205         AML_OFFSET(pin_function.vendor_offset)},
 206
 207        {ACPI_RSC_MOVE_GPIO_RES,
 208         ACPI_RS_OFFSET(data.pin_function.resource_source.string_ptr),
 209         AML_OFFSET(pin_function.res_source_offset),
 210         0},
 211
 212        /* Vendor Data */
 213
 214        {ACPI_RSC_COUNT_GPIO_VEN,
 215         ACPI_RS_OFFSET(data.pin_function.vendor_length),
 216         AML_OFFSET(pin_function.vendor_length),
 217         1},
 218
 219        {ACPI_RSC_MOVE_GPIO_RES, ACPI_RS_OFFSET(data.pin_function.vendor_data),
 220         AML_OFFSET(pin_function.vendor_offset),
 221         0},
 222};
 223
 224/*******************************************************************************
 225 *
 226 * acpi_rs_convert_i2c_serial_bus
 227 *
 228 ******************************************************************************/
 229
 230struct acpi_rsconvert_info acpi_rs_convert_i2c_serial_bus[17] = {
 231        {ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_SERIAL_BUS,
 232         ACPI_RS_SIZE(struct acpi_resource_i2c_serialbus),
 233         ACPI_RSC_TABLE_SIZE(acpi_rs_convert_i2c_serial_bus)},
 234
 235        {ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_SERIAL_BUS,
 236         sizeof(struct aml_resource_i2c_serialbus),
 237         0},
 238
 239        {ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.common_serial_bus.revision_id),
 240         AML_OFFSET(common_serial_bus.revision_id),
 241         1},
 242
 243        {ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.common_serial_bus.type),
 244         AML_OFFSET(common_serial_bus.type),
 245         1},
 246
 247        {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET(data.common_serial_bus.slave_mode),
 248         AML_OFFSET(common_serial_bus.flags),
 249         0},
 250
 251        {ACPI_RSC_1BITFLAG,
 252         ACPI_RS_OFFSET(data.common_serial_bus.producer_consumer),
 253         AML_OFFSET(common_serial_bus.flags),
 254         1},
 255
 256        {ACPI_RSC_1BITFLAG,
 257         ACPI_RS_OFFSET(data.common_serial_bus.connection_sharing),
 258         AML_OFFSET(common_serial_bus.flags),
 259         2},
 260
 261        {ACPI_RSC_MOVE8,
 262         ACPI_RS_OFFSET(data.common_serial_bus.type_revision_id),
 263         AML_OFFSET(common_serial_bus.type_revision_id),
 264         1},
 265
 266        {ACPI_RSC_MOVE16,
 267         ACPI_RS_OFFSET(data.common_serial_bus.type_data_length),
 268         AML_OFFSET(common_serial_bus.type_data_length),
 269         1},
 270
 271        /* Vendor data */
 272
 273        {ACPI_RSC_COUNT_SERIAL_VEN,
 274         ACPI_RS_OFFSET(data.common_serial_bus.vendor_length),
 275         AML_OFFSET(common_serial_bus.type_data_length),
 276         AML_RESOURCE_I2C_MIN_DATA_LEN},
 277
 278        {ACPI_RSC_MOVE_SERIAL_VEN,
 279         ACPI_RS_OFFSET(data.common_serial_bus.vendor_data),
 280         0,
 281         sizeof(struct aml_resource_i2c_serialbus)},
 282
 283        /* Resource Source */
 284
 285        {ACPI_RSC_MOVE8,
 286         ACPI_RS_OFFSET(data.common_serial_bus.resource_source.index),
 287         AML_OFFSET(common_serial_bus.res_source_index),
 288         1},
 289
 290        {ACPI_RSC_COUNT_SERIAL_RES,
 291         ACPI_RS_OFFSET(data.common_serial_bus.resource_source.string_length),
 292         AML_OFFSET(common_serial_bus.type_data_length),
 293         sizeof(struct aml_resource_common_serialbus)},
 294
 295        {ACPI_RSC_MOVE_SERIAL_RES,
 296         ACPI_RS_OFFSET(data.common_serial_bus.resource_source.string_ptr),
 297         AML_OFFSET(common_serial_bus.type_data_length),
 298         sizeof(struct aml_resource_common_serialbus)},
 299
 300        /* I2C bus type specific */
 301
 302        {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET(data.i2c_serial_bus.access_mode),
 303         AML_OFFSET(i2c_serial_bus.type_specific_flags),
 304         0},
 305
 306        {ACPI_RSC_MOVE32, ACPI_RS_OFFSET(data.i2c_serial_bus.connection_speed),
 307         AML_OFFSET(i2c_serial_bus.connection_speed),
 308         1},
 309
 310        {ACPI_RSC_MOVE16, ACPI_RS_OFFSET(data.i2c_serial_bus.slave_address),
 311         AML_OFFSET(i2c_serial_bus.slave_address),
 312         1},
 313};
 314
 315/*******************************************************************************
 316 *
 317 * acpi_rs_convert_spi_serial_bus
 318 *
 319 ******************************************************************************/
 320
 321struct acpi_rsconvert_info acpi_rs_convert_spi_serial_bus[21] = {
 322        {ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_SERIAL_BUS,
 323         ACPI_RS_SIZE(struct acpi_resource_spi_serialbus),
 324         ACPI_RSC_TABLE_SIZE(acpi_rs_convert_spi_serial_bus)},
 325
 326        {ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_SERIAL_BUS,
 327         sizeof(struct aml_resource_spi_serialbus),
 328         0},
 329
 330        {ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.common_serial_bus.revision_id),
 331         AML_OFFSET(common_serial_bus.revision_id),
 332         1},
 333
 334        {ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.common_serial_bus.type),
 335         AML_OFFSET(common_serial_bus.type),
 336         1},
 337
 338        {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET(data.common_serial_bus.slave_mode),
 339         AML_OFFSET(common_serial_bus.flags),
 340         0},
 341
 342        {ACPI_RSC_1BITFLAG,
 343         ACPI_RS_OFFSET(data.common_serial_bus.producer_consumer),
 344         AML_OFFSET(common_serial_bus.flags),
 345         1},
 346
 347        {ACPI_RSC_1BITFLAG,
 348         ACPI_RS_OFFSET(data.common_serial_bus.connection_sharing),
 349         AML_OFFSET(common_serial_bus.flags),
 350         2},
 351
 352        {ACPI_RSC_MOVE8,
 353         ACPI_RS_OFFSET(data.common_serial_bus.type_revision_id),
 354         AML_OFFSET(common_serial_bus.type_revision_id),
 355         1},
 356
 357        {ACPI_RSC_MOVE16,
 358         ACPI_RS_OFFSET(data.common_serial_bus.type_data_length),
 359         AML_OFFSET(common_serial_bus.type_data_length),
 360         1},
 361
 362        /* Vendor data */
 363
 364        {ACPI_RSC_COUNT_SERIAL_VEN,
 365         ACPI_RS_OFFSET(data.common_serial_bus.vendor_length),
 366         AML_OFFSET(common_serial_bus.type_data_length),
 367         AML_RESOURCE_SPI_MIN_DATA_LEN},
 368
 369        {ACPI_RSC_MOVE_SERIAL_VEN,
 370         ACPI_RS_OFFSET(data.common_serial_bus.vendor_data),
 371         0,
 372         sizeof(struct aml_resource_spi_serialbus)},
 373
 374        /* Resource Source */
 375
 376        {ACPI_RSC_MOVE8,
 377         ACPI_RS_OFFSET(data.common_serial_bus.resource_source.index),
 378         AML_OFFSET(common_serial_bus.res_source_index),
 379         1},
 380
 381        {ACPI_RSC_COUNT_SERIAL_RES,
 382         ACPI_RS_OFFSET(data.common_serial_bus.resource_source.string_length),
 383         AML_OFFSET(common_serial_bus.type_data_length),
 384         sizeof(struct aml_resource_common_serialbus)},
 385
 386        {ACPI_RSC_MOVE_SERIAL_RES,
 387         ACPI_RS_OFFSET(data.common_serial_bus.resource_source.string_ptr),
 388         AML_OFFSET(common_serial_bus.type_data_length),
 389         sizeof(struct aml_resource_common_serialbus)},
 390
 391        /* Spi bus type specific  */
 392
 393        {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET(data.spi_serial_bus.wire_mode),
 394         AML_OFFSET(spi_serial_bus.type_specific_flags),
 395         0},
 396
 397        {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET(data.spi_serial_bus.device_polarity),
 398         AML_OFFSET(spi_serial_bus.type_specific_flags),
 399         1},
 400
 401        {ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.spi_serial_bus.data_bit_length),
 402         AML_OFFSET(spi_serial_bus.data_bit_length),
 403         1},
 404
 405        {ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.spi_serial_bus.clock_phase),
 406         AML_OFFSET(spi_serial_bus.clock_phase),
 407         1},
 408
 409        {ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.spi_serial_bus.clock_polarity),
 410         AML_OFFSET(spi_serial_bus.clock_polarity),
 411         1},
 412
 413        {ACPI_RSC_MOVE16, ACPI_RS_OFFSET(data.spi_serial_bus.device_selection),
 414         AML_OFFSET(spi_serial_bus.device_selection),
 415         1},
 416
 417        {ACPI_RSC_MOVE32, ACPI_RS_OFFSET(data.spi_serial_bus.connection_speed),
 418         AML_OFFSET(spi_serial_bus.connection_speed),
 419         1},
 420};
 421
 422/*******************************************************************************
 423 *
 424 * acpi_rs_convert_uart_serial_bus
 425 *
 426 ******************************************************************************/
 427
 428struct acpi_rsconvert_info acpi_rs_convert_uart_serial_bus[23] = {
 429        {ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_SERIAL_BUS,
 430         ACPI_RS_SIZE(struct acpi_resource_uart_serialbus),
 431         ACPI_RSC_TABLE_SIZE(acpi_rs_convert_uart_serial_bus)},
 432
 433        {ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_SERIAL_BUS,
 434         sizeof(struct aml_resource_uart_serialbus),
 435         0},
 436
 437        {ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.common_serial_bus.revision_id),
 438         AML_OFFSET(common_serial_bus.revision_id),
 439         1},
 440
 441        {ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.common_serial_bus.type),
 442         AML_OFFSET(common_serial_bus.type),
 443         1},
 444
 445        {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET(data.common_serial_bus.slave_mode),
 446         AML_OFFSET(common_serial_bus.flags),
 447         0},
 448
 449        {ACPI_RSC_1BITFLAG,
 450         ACPI_RS_OFFSET(data.common_serial_bus.producer_consumer),
 451         AML_OFFSET(common_serial_bus.flags),
 452         1},
 453
 454        {ACPI_RSC_1BITFLAG,
 455         ACPI_RS_OFFSET(data.common_serial_bus.connection_sharing),
 456         AML_OFFSET(common_serial_bus.flags),
 457         2},
 458
 459        {ACPI_RSC_MOVE8,
 460         ACPI_RS_OFFSET(data.common_serial_bus.type_revision_id),
 461         AML_OFFSET(common_serial_bus.type_revision_id),
 462         1},
 463
 464        {ACPI_RSC_MOVE16,
 465         ACPI_RS_OFFSET(data.common_serial_bus.type_data_length),
 466         AML_OFFSET(common_serial_bus.type_data_length),
 467         1},
 468
 469        /* Vendor data */
 470
 471        {ACPI_RSC_COUNT_SERIAL_VEN,
 472         ACPI_RS_OFFSET(data.common_serial_bus.vendor_length),
 473         AML_OFFSET(common_serial_bus.type_data_length),
 474         AML_RESOURCE_UART_MIN_DATA_LEN},
 475
 476        {ACPI_RSC_MOVE_SERIAL_VEN,
 477         ACPI_RS_OFFSET(data.common_serial_bus.vendor_data),
 478         0,
 479         sizeof(struct aml_resource_uart_serialbus)},
 480
 481        /* Resource Source */
 482
 483        {ACPI_RSC_MOVE8,
 484         ACPI_RS_OFFSET(data.common_serial_bus.resource_source.index),
 485         AML_OFFSET(common_serial_bus.res_source_index),
 486         1},
 487
 488        {ACPI_RSC_COUNT_SERIAL_RES,
 489         ACPI_RS_OFFSET(data.common_serial_bus.resource_source.string_length),
 490         AML_OFFSET(common_serial_bus.type_data_length),
 491         sizeof(struct aml_resource_common_serialbus)},
 492
 493        {ACPI_RSC_MOVE_SERIAL_RES,
 494         ACPI_RS_OFFSET(data.common_serial_bus.resource_source.string_ptr),
 495         AML_OFFSET(common_serial_bus.type_data_length),
 496         sizeof(struct aml_resource_common_serialbus)},
 497
 498        /* Uart bus type specific  */
 499
 500        {ACPI_RSC_2BITFLAG, ACPI_RS_OFFSET(data.uart_serial_bus.flow_control),
 501         AML_OFFSET(uart_serial_bus.type_specific_flags),
 502         0},
 503
 504        {ACPI_RSC_2BITFLAG, ACPI_RS_OFFSET(data.uart_serial_bus.stop_bits),
 505         AML_OFFSET(uart_serial_bus.type_specific_flags),
 506         2},
 507
 508        {ACPI_RSC_3BITFLAG, ACPI_RS_OFFSET(data.uart_serial_bus.data_bits),
 509         AML_OFFSET(uart_serial_bus.type_specific_flags),
 510         4},
 511
 512        {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET(data.uart_serial_bus.endian),
 513         AML_OFFSET(uart_serial_bus.type_specific_flags),
 514         7},
 515
 516        {ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.uart_serial_bus.parity),
 517         AML_OFFSET(uart_serial_bus.parity),
 518         1},
 519
 520        {ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.uart_serial_bus.lines_enabled),
 521         AML_OFFSET(uart_serial_bus.lines_enabled),
 522         1},
 523
 524        {ACPI_RSC_MOVE16, ACPI_RS_OFFSET(data.uart_serial_bus.rx_fifo_size),
 525         AML_OFFSET(uart_serial_bus.rx_fifo_size),
 526         1},
 527
 528        {ACPI_RSC_MOVE16, ACPI_RS_OFFSET(data.uart_serial_bus.tx_fifo_size),
 529         AML_OFFSET(uart_serial_bus.tx_fifo_size),
 530         1},
 531
 532        {ACPI_RSC_MOVE32,
 533         ACPI_RS_OFFSET(data.uart_serial_bus.default_baud_rate),
 534         AML_OFFSET(uart_serial_bus.default_baud_rate),
 535         1},
 536};
 537
 538/*******************************************************************************
 539 *
 540 * acpi_rs_convert_pin_config
 541 *
 542 ******************************************************************************/
 543
 544struct acpi_rsconvert_info acpi_rs_convert_pin_config[14] = {
 545        {ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_PIN_CONFIG,
 546         ACPI_RS_SIZE(struct acpi_resource_pin_config),
 547         ACPI_RSC_TABLE_SIZE(acpi_rs_convert_pin_config)},
 548
 549        {ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_PIN_CONFIG,
 550         sizeof(struct aml_resource_pin_config),
 551         0},
 552
 553        {ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.pin_config.revision_id),
 554         AML_OFFSET(pin_config.revision_id),
 555         1},
 556
 557        {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET(data.pin_config.sharable),
 558         AML_OFFSET(pin_config.flags),
 559         0},
 560
 561        {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET(data.pin_config.producer_consumer),
 562         AML_OFFSET(pin_config.flags),
 563         1},
 564
 565        {ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.pin_config.pin_config_type),
 566         AML_OFFSET(pin_config.pin_config_type),
 567         1},
 568
 569        {ACPI_RSC_MOVE32, ACPI_RS_OFFSET(data.pin_config.pin_config_value),
 570         AML_OFFSET(pin_config.pin_config_value),
 571         1},
 572
 573        /* Pin Table */
 574
 575        /*
 576         * It is OK to use GPIO operations here because none of them refer GPIO
 577         * structures directly but instead use offsets given here.
 578         */
 579
 580        {ACPI_RSC_COUNT_GPIO_PIN,
 581         ACPI_RS_OFFSET(data.pin_config.pin_table_length),
 582         AML_OFFSET(pin_config.pin_table_offset),
 583         AML_OFFSET(pin_config.res_source_offset)},
 584
 585        {ACPI_RSC_MOVE_GPIO_PIN, ACPI_RS_OFFSET(data.pin_config.pin_table),
 586         AML_OFFSET(pin_config.pin_table_offset),
 587         0},
 588
 589        /* Resource Source */
 590
 591        {ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.pin_config.resource_source.index),
 592         AML_OFFSET(pin_config.res_source_index),
 593         1},
 594
 595        {ACPI_RSC_COUNT_GPIO_RES,
 596         ACPI_RS_OFFSET(data.pin_config.resource_source.string_length),
 597         AML_OFFSET(pin_config.res_source_offset),
 598         AML_OFFSET(pin_config.vendor_offset)},
 599
 600        {ACPI_RSC_MOVE_GPIO_RES,
 601         ACPI_RS_OFFSET(data.pin_config.resource_source.string_ptr),
 602         AML_OFFSET(pin_config.res_source_offset),
 603         0},
 604
 605        /* Vendor Data */
 606
 607        {ACPI_RSC_COUNT_GPIO_VEN, ACPI_RS_OFFSET(data.pin_config.vendor_length),
 608         AML_OFFSET(pin_config.vendor_length),
 609         1},
 610
 611        {ACPI_RSC_MOVE_GPIO_RES, ACPI_RS_OFFSET(data.pin_config.vendor_data),
 612         AML_OFFSET(pin_config.vendor_offset),
 613         0},
 614};
 615
 616/*******************************************************************************
 617 *
 618 * acpi_rs_convert_pin_group
 619 *
 620 ******************************************************************************/
 621
 622struct acpi_rsconvert_info acpi_rs_convert_pin_group[10] = {
 623        {ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_PIN_GROUP,
 624         ACPI_RS_SIZE(struct acpi_resource_pin_group),
 625         ACPI_RSC_TABLE_SIZE(acpi_rs_convert_pin_group)},
 626
 627        {ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_PIN_GROUP,
 628         sizeof(struct aml_resource_pin_group),
 629         0},
 630
 631        {ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.pin_group.revision_id),
 632         AML_OFFSET(pin_group.revision_id),
 633         1},
 634
 635        {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET(data.pin_group.producer_consumer),
 636         AML_OFFSET(pin_group.flags),
 637         0},
 638
 639        /* Pin Table */
 640
 641        /*
 642         * It is OK to use GPIO operations here because none of them refer GPIO
 643         * structures directly but instead use offsets given here.
 644         */
 645
 646        {ACPI_RSC_COUNT_GPIO_PIN,
 647         ACPI_RS_OFFSET(data.pin_group.pin_table_length),
 648         AML_OFFSET(pin_group.pin_table_offset),
 649         AML_OFFSET(pin_group.label_offset)},
 650
 651        {ACPI_RSC_MOVE_GPIO_PIN, ACPI_RS_OFFSET(data.pin_group.pin_table),
 652         AML_OFFSET(pin_group.pin_table_offset),
 653         0},
 654
 655        /* Resource Label */
 656
 657        {ACPI_RSC_COUNT_GPIO_RES,
 658         ACPI_RS_OFFSET(data.pin_group.resource_label.string_length),
 659         AML_OFFSET(pin_group.label_offset),
 660         AML_OFFSET(pin_group.vendor_offset)},
 661
 662        {ACPI_RSC_MOVE_GPIO_RES,
 663         ACPI_RS_OFFSET(data.pin_group.resource_label.string_ptr),
 664         AML_OFFSET(pin_group.label_offset),
 665         0},
 666
 667        /* Vendor Data */
 668
 669        {ACPI_RSC_COUNT_GPIO_VEN, ACPI_RS_OFFSET(data.pin_group.vendor_length),
 670         AML_OFFSET(pin_group.vendor_length),
 671         1},
 672
 673        {ACPI_RSC_MOVE_GPIO_RES, ACPI_RS_OFFSET(data.pin_group.vendor_data),
 674         AML_OFFSET(pin_group.vendor_offset),
 675         0},
 676};
 677
 678/*******************************************************************************
 679 *
 680 * acpi_rs_convert_pin_group_function
 681 *
 682 ******************************************************************************/
 683
 684struct acpi_rsconvert_info acpi_rs_convert_pin_group_function[13] = {
 685        {ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_PIN_GROUP_FUNCTION,
 686         ACPI_RS_SIZE(struct acpi_resource_pin_group_function),
 687         ACPI_RSC_TABLE_SIZE(acpi_rs_convert_pin_group_function)},
 688
 689        {ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_PIN_GROUP_FUNCTION,
 690         sizeof(struct aml_resource_pin_group_function),
 691         0},
 692
 693        {ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.pin_group_function.revision_id),
 694         AML_OFFSET(pin_group_function.revision_id),
 695         1},
 696
 697        {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET(data.pin_group_function.sharable),
 698         AML_OFFSET(pin_group_function.flags),
 699         0},
 700
 701        {ACPI_RSC_1BITFLAG,
 702         ACPI_RS_OFFSET(data.pin_group_function.producer_consumer),
 703         AML_OFFSET(pin_group_function.flags),
 704         1},
 705
 706        {ACPI_RSC_MOVE16,
 707         ACPI_RS_OFFSET(data.pin_group_function.function_number),
 708         AML_OFFSET(pin_group_function.function_number),
 709         1},
 710
 711        /* Resource Source */
 712
 713        {ACPI_RSC_MOVE8,
 714         ACPI_RS_OFFSET(data.pin_group_function.resource_source.index),
 715         AML_OFFSET(pin_group_function.res_source_index),
 716         1},
 717
 718        {ACPI_RSC_COUNT_GPIO_RES,
 719         ACPI_RS_OFFSET(data.pin_group_function.resource_source.string_length),
 720         AML_OFFSET(pin_group_function.res_source_offset),
 721         AML_OFFSET(pin_group_function.res_source_label_offset)},
 722
 723        {ACPI_RSC_MOVE_GPIO_RES,
 724         ACPI_RS_OFFSET(data.pin_group_function.resource_source.string_ptr),
 725         AML_OFFSET(pin_group_function.res_source_offset),
 726         0},
 727
 728        /* Resource Source Label */
 729
 730        {ACPI_RSC_COUNT_GPIO_RES,
 731         ACPI_RS_OFFSET(data.pin_group_function.resource_source_label.
 732                        string_length),
 733         AML_OFFSET(pin_group_function.res_source_label_offset),
 734         AML_OFFSET(pin_group_function.vendor_offset)},
 735
 736        {ACPI_RSC_MOVE_GPIO_RES,
 737         ACPI_RS_OFFSET(data.pin_group_function.resource_source_label.
 738                        string_ptr),
 739         AML_OFFSET(pin_group_function.res_source_label_offset),
 740         0},
 741
 742        /* Vendor Data */
 743
 744        {ACPI_RSC_COUNT_GPIO_VEN,
 745         ACPI_RS_OFFSET(data.pin_group_function.vendor_length),
 746         AML_OFFSET(pin_group_function.vendor_length),
 747         1},
 748
 749        {ACPI_RSC_MOVE_GPIO_RES,
 750         ACPI_RS_OFFSET(data.pin_group_function.vendor_data),
 751         AML_OFFSET(pin_group_function.vendor_offset),
 752         0},
 753};
 754
 755/*******************************************************************************
 756 *
 757 * acpi_rs_convert_pin_group_config
 758 *
 759 ******************************************************************************/
 760
 761struct acpi_rsconvert_info acpi_rs_convert_pin_group_config[14] = {
 762        {ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_PIN_GROUP_CONFIG,
 763         ACPI_RS_SIZE(struct acpi_resource_pin_group_config),
 764         ACPI_RSC_TABLE_SIZE(acpi_rs_convert_pin_group_config)},
 765
 766        {ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_PIN_GROUP_CONFIG,
 767         sizeof(struct aml_resource_pin_group_config),
 768         0},
 769
 770        {ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.pin_group_config.revision_id),
 771         AML_OFFSET(pin_group_config.revision_id),
 772         1},
 773
 774        {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET(data.pin_group_config.sharable),
 775         AML_OFFSET(pin_group_config.flags),
 776         0},
 777
 778        {ACPI_RSC_1BITFLAG,
 779         ACPI_RS_OFFSET(data.pin_group_config.producer_consumer),
 780         AML_OFFSET(pin_group_config.flags),
 781         1},
 782
 783        {ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.pin_group_config.pin_config_type),
 784         AML_OFFSET(pin_group_config.pin_config_type),
 785         1},
 786
 787        {ACPI_RSC_MOVE32,
 788         ACPI_RS_OFFSET(data.pin_group_config.pin_config_value),
 789         AML_OFFSET(pin_group_config.pin_config_value),
 790         1},
 791
 792        /* Resource Source */
 793
 794        {ACPI_RSC_MOVE8,
 795         ACPI_RS_OFFSET(data.pin_group_config.resource_source.index),
 796         AML_OFFSET(pin_group_config.res_source_index),
 797         1},
 798
 799        {ACPI_RSC_COUNT_GPIO_RES,
 800         ACPI_RS_OFFSET(data.pin_group_config.resource_source.string_length),
 801         AML_OFFSET(pin_group_config.res_source_offset),
 802         AML_OFFSET(pin_group_config.res_source_label_offset)},
 803
 804        {ACPI_RSC_MOVE_GPIO_RES,
 805         ACPI_RS_OFFSET(data.pin_group_config.resource_source.string_ptr),
 806         AML_OFFSET(pin_group_config.res_source_offset),
 807         0},
 808
 809        /* Resource Source Label */
 810
 811        {ACPI_RSC_COUNT_GPIO_RES,
 812         ACPI_RS_OFFSET(data.pin_group_config.resource_source_label.
 813                        string_length),
 814         AML_OFFSET(pin_group_config.res_source_label_offset),
 815         AML_OFFSET(pin_group_config.vendor_offset)},
 816
 817        {ACPI_RSC_MOVE_GPIO_RES,
 818         ACPI_RS_OFFSET(data.pin_group_config.resource_source_label.string_ptr),
 819         AML_OFFSET(pin_group_config.res_source_label_offset),
 820         0},
 821
 822        /* Vendor Data */
 823
 824        {ACPI_RSC_COUNT_GPIO_VEN,
 825         ACPI_RS_OFFSET(data.pin_group_config.vendor_length),
 826         AML_OFFSET(pin_group_config.vendor_length),
 827         1},
 828
 829        {ACPI_RSC_MOVE_GPIO_RES,
 830         ACPI_RS_OFFSET(data.pin_group_config.vendor_data),
 831         AML_OFFSET(pin_group_config.vendor_offset),
 832         0},
 833};
 834