cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

rsserial.c (25447B)


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