Back to home page

OSCL-LXR

 
 

    


0001 // SPDX-License-Identifier: BSD-3-Clause OR GPL-2.0
0002 /*******************************************************************************
0003  *
0004  * Module Name: rsserial - GPIO/serial_bus resource descriptors
0005  *
0006  ******************************************************************************/
0007 
0008 #include <acpi/acpi.h>
0009 #include "accommon.h"
0010 #include "acresrc.h"
0011 
0012 #define _COMPONENT          ACPI_RESOURCES
0013 ACPI_MODULE_NAME("rsserial")
0014 
0015 /*******************************************************************************
0016  *
0017  * acpi_rs_convert_gpio
0018  *
0019  ******************************************************************************/
0020 struct acpi_rsconvert_info acpi_rs_convert_gpio[18] = {
0021     {ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_GPIO,
0022      ACPI_RS_SIZE(struct acpi_resource_gpio),
0023      ACPI_RSC_TABLE_SIZE(acpi_rs_convert_gpio)},
0024 
0025     {ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_GPIO,
0026      sizeof(struct aml_resource_gpio),
0027      0},
0028 
0029     /*
0030      * These fields are contiguous in both the source and destination:
0031      * revision_id
0032      * connection_type
0033      */
0034     {ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.gpio.revision_id),
0035      AML_OFFSET(gpio.revision_id),
0036      2},
0037 
0038     {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET(data.gpio.producer_consumer),
0039      AML_OFFSET(gpio.flags),
0040      0},
0041 
0042     {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET(data.gpio.shareable),
0043      AML_OFFSET(gpio.int_flags),
0044      3},
0045 
0046     {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET(data.gpio.wake_capable),
0047      AML_OFFSET(gpio.int_flags),
0048      4},
0049 
0050     {ACPI_RSC_2BITFLAG, ACPI_RS_OFFSET(data.gpio.io_restriction),
0051      AML_OFFSET(gpio.int_flags),
0052      0},
0053 
0054     {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET(data.gpio.triggering),
0055      AML_OFFSET(gpio.int_flags),
0056      0},
0057 
0058     {ACPI_RSC_2BITFLAG, ACPI_RS_OFFSET(data.gpio.polarity),
0059      AML_OFFSET(gpio.int_flags),
0060      1},
0061 
0062     {ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.gpio.pin_config),
0063      AML_OFFSET(gpio.pin_config),
0064      1},
0065 
0066     /*
0067      * These fields are contiguous in both the source and destination:
0068      * drive_strength
0069      * debounce_timeout
0070      */
0071     {ACPI_RSC_MOVE16, ACPI_RS_OFFSET(data.gpio.drive_strength),
0072      AML_OFFSET(gpio.drive_strength),
0073      2},
0074 
0075     /* Pin Table */
0076 
0077     {ACPI_RSC_COUNT_GPIO_PIN, ACPI_RS_OFFSET(data.gpio.pin_table_length),
0078      AML_OFFSET(gpio.pin_table_offset),
0079      AML_OFFSET(gpio.res_source_offset)},
0080 
0081     {ACPI_RSC_MOVE_GPIO_PIN, ACPI_RS_OFFSET(data.gpio.pin_table),
0082      AML_OFFSET(gpio.pin_table_offset),
0083      0},
0084 
0085     /* Resource Source */
0086 
0087     {ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.gpio.resource_source.index),
0088      AML_OFFSET(gpio.res_source_index),
0089      1},
0090 
0091     {ACPI_RSC_COUNT_GPIO_RES,
0092      ACPI_RS_OFFSET(data.gpio.resource_source.string_length),
0093      AML_OFFSET(gpio.res_source_offset),
0094      AML_OFFSET(gpio.vendor_offset)},
0095 
0096     {ACPI_RSC_MOVE_GPIO_RES,
0097      ACPI_RS_OFFSET(data.gpio.resource_source.string_ptr),
0098      AML_OFFSET(gpio.res_source_offset),
0099      0},
0100 
0101     /* Vendor Data */
0102 
0103     {ACPI_RSC_COUNT_GPIO_VEN, ACPI_RS_OFFSET(data.gpio.vendor_length),
0104      AML_OFFSET(gpio.vendor_length),
0105      1},
0106 
0107     {ACPI_RSC_MOVE_GPIO_RES, ACPI_RS_OFFSET(data.gpio.vendor_data),
0108      AML_OFFSET(gpio.vendor_offset),
0109      0},
0110 };
0111 
0112 /*******************************************************************************
0113  *
0114  * acpi_rs_convert_pinfunction
0115  *
0116  ******************************************************************************/
0117 
0118 struct acpi_rsconvert_info acpi_rs_convert_pin_function[13] = {
0119     {ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_PIN_FUNCTION,
0120      ACPI_RS_SIZE(struct acpi_resource_pin_function),
0121      ACPI_RSC_TABLE_SIZE(acpi_rs_convert_pin_function)},
0122 
0123     {ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_PIN_FUNCTION,
0124      sizeof(struct aml_resource_pin_function),
0125      0},
0126 
0127     {ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.pin_function.revision_id),
0128      AML_OFFSET(pin_function.revision_id),
0129      1},
0130 
0131     {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET(data.pin_function.shareable),
0132      AML_OFFSET(pin_function.flags),
0133      0},
0134 
0135     {ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.pin_function.pin_config),
0136      AML_OFFSET(pin_function.pin_config),
0137      1},
0138 
0139     {ACPI_RSC_MOVE16, ACPI_RS_OFFSET(data.pin_function.function_number),
0140      AML_OFFSET(pin_function.function_number),
0141      2},
0142 
0143     /* Pin Table */
0144 
0145     /*
0146      * It is OK to use GPIO operations here because none of them refer GPIO
0147      * structures directly but instead use offsets given here.
0148      */
0149 
0150     {ACPI_RSC_COUNT_GPIO_PIN,
0151      ACPI_RS_OFFSET(data.pin_function.pin_table_length),
0152      AML_OFFSET(pin_function.pin_table_offset),
0153      AML_OFFSET(pin_function.res_source_offset)},
0154 
0155     {ACPI_RSC_MOVE_GPIO_PIN, ACPI_RS_OFFSET(data.pin_function.pin_table),
0156      AML_OFFSET(pin_function.pin_table_offset),
0157      0},
0158 
0159     /* Resource Source */
0160 
0161     {ACPI_RSC_MOVE8,
0162      ACPI_RS_OFFSET(data.pin_function.resource_source.index),
0163      AML_OFFSET(pin_function.res_source_index),
0164      1},
0165 
0166     {ACPI_RSC_COUNT_GPIO_RES,
0167      ACPI_RS_OFFSET(data.pin_function.resource_source.string_length),
0168      AML_OFFSET(pin_function.res_source_offset),
0169      AML_OFFSET(pin_function.vendor_offset)},
0170 
0171     {ACPI_RSC_MOVE_GPIO_RES,
0172      ACPI_RS_OFFSET(data.pin_function.resource_source.string_ptr),
0173      AML_OFFSET(pin_function.res_source_offset),
0174      0},
0175 
0176     /* Vendor Data */
0177 
0178     {ACPI_RSC_COUNT_GPIO_VEN,
0179      ACPI_RS_OFFSET(data.pin_function.vendor_length),
0180      AML_OFFSET(pin_function.vendor_length),
0181      1},
0182 
0183     {ACPI_RSC_MOVE_GPIO_RES, ACPI_RS_OFFSET(data.pin_function.vendor_data),
0184      AML_OFFSET(pin_function.vendor_offset),
0185      0},
0186 };
0187 
0188 /*******************************************************************************
0189  *
0190  * acpi_rs_convert_csi2_serial_bus
0191  *
0192  ******************************************************************************/
0193 
0194 struct acpi_rsconvert_info acpi_rs_convert_csi2_serial_bus[14] = {
0195     { ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_SERIAL_BUS,
0196      ACPI_RS_SIZE(struct acpi_resource_csi2_serialbus),
0197      ACPI_RSC_TABLE_SIZE(acpi_rs_convert_csi2_serial_bus) },
0198 
0199     { ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_SERIAL_BUS,
0200      sizeof(struct aml_resource_csi2_serialbus),
0201      0 },
0202 
0203     { ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.common_serial_bus.revision_id),
0204      AML_OFFSET(common_serial_bus.revision_id),
0205      1 },
0206 
0207     { ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.csi2_serial_bus.type),
0208      AML_OFFSET(csi2_serial_bus.type),
0209      1 },
0210 
0211     { ACPI_RSC_1BITFLAG,
0212      ACPI_RS_OFFSET(data.csi2_serial_bus.producer_consumer),
0213      AML_OFFSET(csi2_serial_bus.flags),
0214      1 },
0215 
0216     { ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET(data.csi2_serial_bus.slave_mode),
0217      AML_OFFSET(csi2_serial_bus.flags),
0218      0 },
0219 
0220     { ACPI_RSC_2BITFLAG, ACPI_RS_OFFSET(data.csi2_serial_bus.phy_type),
0221      AML_OFFSET(csi2_serial_bus.type_specific_flags),
0222      0 },
0223 
0224     { ACPI_RSC_6BITFLAG,
0225      ACPI_RS_OFFSET(data.csi2_serial_bus.local_port_instance),
0226      AML_OFFSET(csi2_serial_bus.type_specific_flags),
0227      2 },
0228 
0229     { ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.csi2_serial_bus.type_revision_id),
0230      AML_OFFSET(csi2_serial_bus.type_revision_id),
0231      1 },
0232 
0233     /* Vendor data */
0234 
0235     { ACPI_RSC_COUNT_SERIAL_VEN,
0236      ACPI_RS_OFFSET(data.csi2_serial_bus.vendor_length),
0237      AML_OFFSET(csi2_serial_bus.type_data_length),
0238      AML_RESOURCE_CSI2_MIN_DATA_LEN },
0239 
0240     { ACPI_RSC_MOVE_SERIAL_VEN,
0241      ACPI_RS_OFFSET(data.csi2_serial_bus.vendor_data),
0242      0,
0243      sizeof(struct aml_resource_csi2_serialbus) },
0244 
0245     /* Resource Source */
0246 
0247     { ACPI_RSC_MOVE8,
0248      ACPI_RS_OFFSET(data.csi2_serial_bus.resource_source.index),
0249      AML_OFFSET(csi2_serial_bus.res_source_index),
0250      1 },
0251 
0252     { ACPI_RSC_COUNT_SERIAL_RES,
0253      ACPI_RS_OFFSET(data.csi2_serial_bus.resource_source.string_length),
0254      AML_OFFSET(csi2_serial_bus.type_data_length),
0255      sizeof(struct aml_resource_csi2_serialbus) },
0256 
0257     { ACPI_RSC_MOVE_SERIAL_RES,
0258      ACPI_RS_OFFSET(data.csi2_serial_bus.resource_source.string_ptr),
0259      AML_OFFSET(csi2_serial_bus.type_data_length),
0260      sizeof(struct aml_resource_csi2_serialbus) },
0261 };
0262 
0263 /*******************************************************************************
0264  *
0265  * acpi_rs_convert_i2c_serial_bus
0266  *
0267  ******************************************************************************/
0268 
0269 struct acpi_rsconvert_info acpi_rs_convert_i2c_serial_bus[17] = {
0270     {ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_SERIAL_BUS,
0271      ACPI_RS_SIZE(struct acpi_resource_i2c_serialbus),
0272      ACPI_RSC_TABLE_SIZE(acpi_rs_convert_i2c_serial_bus)},
0273 
0274     {ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_SERIAL_BUS,
0275      sizeof(struct aml_resource_i2c_serialbus),
0276      0},
0277 
0278     {ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.common_serial_bus.revision_id),
0279      AML_OFFSET(common_serial_bus.revision_id),
0280      1},
0281 
0282     {ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.common_serial_bus.type),
0283      AML_OFFSET(common_serial_bus.type),
0284      1},
0285 
0286     {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET(data.common_serial_bus.slave_mode),
0287      AML_OFFSET(common_serial_bus.flags),
0288      0},
0289 
0290     {ACPI_RSC_1BITFLAG,
0291      ACPI_RS_OFFSET(data.common_serial_bus.producer_consumer),
0292      AML_OFFSET(common_serial_bus.flags),
0293      1},
0294 
0295     {ACPI_RSC_1BITFLAG,
0296      ACPI_RS_OFFSET(data.common_serial_bus.connection_sharing),
0297      AML_OFFSET(common_serial_bus.flags),
0298      2},
0299 
0300     {ACPI_RSC_MOVE8,
0301      ACPI_RS_OFFSET(data.common_serial_bus.type_revision_id),
0302      AML_OFFSET(common_serial_bus.type_revision_id),
0303      1},
0304 
0305     {ACPI_RSC_MOVE16,
0306      ACPI_RS_OFFSET(data.common_serial_bus.type_data_length),
0307      AML_OFFSET(common_serial_bus.type_data_length),
0308      1},
0309 
0310     /* Vendor data */
0311 
0312     {ACPI_RSC_COUNT_SERIAL_VEN,
0313      ACPI_RS_OFFSET(data.common_serial_bus.vendor_length),
0314      AML_OFFSET(common_serial_bus.type_data_length),
0315      AML_RESOURCE_I2C_MIN_DATA_LEN},
0316 
0317     {ACPI_RSC_MOVE_SERIAL_VEN,
0318      ACPI_RS_OFFSET(data.common_serial_bus.vendor_data),
0319      0,
0320      sizeof(struct aml_resource_i2c_serialbus)},
0321 
0322     /* Resource Source */
0323 
0324     {ACPI_RSC_MOVE8,
0325      ACPI_RS_OFFSET(data.common_serial_bus.resource_source.index),
0326      AML_OFFSET(common_serial_bus.res_source_index),
0327      1},
0328 
0329     {ACPI_RSC_COUNT_SERIAL_RES,
0330      ACPI_RS_OFFSET(data.common_serial_bus.resource_source.string_length),
0331      AML_OFFSET(common_serial_bus.type_data_length),
0332      sizeof(struct aml_resource_common_serialbus)},
0333 
0334     {ACPI_RSC_MOVE_SERIAL_RES,
0335      ACPI_RS_OFFSET(data.common_serial_bus.resource_source.string_ptr),
0336      AML_OFFSET(common_serial_bus.type_data_length),
0337      sizeof(struct aml_resource_common_serialbus)},
0338 
0339     /* I2C bus type specific */
0340 
0341     {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET(data.i2c_serial_bus.access_mode),
0342      AML_OFFSET(i2c_serial_bus.type_specific_flags),
0343      0},
0344 
0345     {ACPI_RSC_MOVE32, ACPI_RS_OFFSET(data.i2c_serial_bus.connection_speed),
0346      AML_OFFSET(i2c_serial_bus.connection_speed),
0347      1},
0348 
0349     {ACPI_RSC_MOVE16, ACPI_RS_OFFSET(data.i2c_serial_bus.slave_address),
0350      AML_OFFSET(i2c_serial_bus.slave_address),
0351      1},
0352 };
0353 
0354 /*******************************************************************************
0355  *
0356  * acpi_rs_convert_spi_serial_bus
0357  *
0358  ******************************************************************************/
0359 
0360 struct acpi_rsconvert_info acpi_rs_convert_spi_serial_bus[21] = {
0361     {ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_SERIAL_BUS,
0362      ACPI_RS_SIZE(struct acpi_resource_spi_serialbus),
0363      ACPI_RSC_TABLE_SIZE(acpi_rs_convert_spi_serial_bus)},
0364 
0365     {ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_SERIAL_BUS,
0366      sizeof(struct aml_resource_spi_serialbus),
0367      0},
0368 
0369     {ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.common_serial_bus.revision_id),
0370      AML_OFFSET(common_serial_bus.revision_id),
0371      1},
0372 
0373     {ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.common_serial_bus.type),
0374      AML_OFFSET(common_serial_bus.type),
0375      1},
0376 
0377     {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET(data.common_serial_bus.slave_mode),
0378      AML_OFFSET(common_serial_bus.flags),
0379      0},
0380 
0381     {ACPI_RSC_1BITFLAG,
0382      ACPI_RS_OFFSET(data.common_serial_bus.producer_consumer),
0383      AML_OFFSET(common_serial_bus.flags),
0384      1},
0385 
0386     {ACPI_RSC_1BITFLAG,
0387      ACPI_RS_OFFSET(data.common_serial_bus.connection_sharing),
0388      AML_OFFSET(common_serial_bus.flags),
0389      2},
0390 
0391     {ACPI_RSC_MOVE8,
0392      ACPI_RS_OFFSET(data.common_serial_bus.type_revision_id),
0393      AML_OFFSET(common_serial_bus.type_revision_id),
0394      1},
0395 
0396     {ACPI_RSC_MOVE16,
0397      ACPI_RS_OFFSET(data.common_serial_bus.type_data_length),
0398      AML_OFFSET(common_serial_bus.type_data_length),
0399      1},
0400 
0401     /* Vendor data */
0402 
0403     {ACPI_RSC_COUNT_SERIAL_VEN,
0404      ACPI_RS_OFFSET(data.common_serial_bus.vendor_length),
0405      AML_OFFSET(common_serial_bus.type_data_length),
0406      AML_RESOURCE_SPI_MIN_DATA_LEN},
0407 
0408     {ACPI_RSC_MOVE_SERIAL_VEN,
0409      ACPI_RS_OFFSET(data.common_serial_bus.vendor_data),
0410      0,
0411      sizeof(struct aml_resource_spi_serialbus)},
0412 
0413     /* Resource Source */
0414 
0415     {ACPI_RSC_MOVE8,
0416      ACPI_RS_OFFSET(data.common_serial_bus.resource_source.index),
0417      AML_OFFSET(common_serial_bus.res_source_index),
0418      1},
0419 
0420     {ACPI_RSC_COUNT_SERIAL_RES,
0421      ACPI_RS_OFFSET(data.common_serial_bus.resource_source.string_length),
0422      AML_OFFSET(common_serial_bus.type_data_length),
0423      sizeof(struct aml_resource_common_serialbus)},
0424 
0425     {ACPI_RSC_MOVE_SERIAL_RES,
0426      ACPI_RS_OFFSET(data.common_serial_bus.resource_source.string_ptr),
0427      AML_OFFSET(common_serial_bus.type_data_length),
0428      sizeof(struct aml_resource_common_serialbus)},
0429 
0430     /* Spi bus type specific  */
0431 
0432     {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET(data.spi_serial_bus.wire_mode),
0433      AML_OFFSET(spi_serial_bus.type_specific_flags),
0434      0},
0435 
0436     {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET(data.spi_serial_bus.device_polarity),
0437      AML_OFFSET(spi_serial_bus.type_specific_flags),
0438      1},
0439 
0440     {ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.spi_serial_bus.data_bit_length),
0441      AML_OFFSET(spi_serial_bus.data_bit_length),
0442      1},
0443 
0444     {ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.spi_serial_bus.clock_phase),
0445      AML_OFFSET(spi_serial_bus.clock_phase),
0446      1},
0447 
0448     {ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.spi_serial_bus.clock_polarity),
0449      AML_OFFSET(spi_serial_bus.clock_polarity),
0450      1},
0451 
0452     {ACPI_RSC_MOVE16, ACPI_RS_OFFSET(data.spi_serial_bus.device_selection),
0453      AML_OFFSET(spi_serial_bus.device_selection),
0454      1},
0455 
0456     {ACPI_RSC_MOVE32, ACPI_RS_OFFSET(data.spi_serial_bus.connection_speed),
0457      AML_OFFSET(spi_serial_bus.connection_speed),
0458      1},
0459 };
0460 
0461 /*******************************************************************************
0462  *
0463  * acpi_rs_convert_uart_serial_bus
0464  *
0465  ******************************************************************************/
0466 
0467 struct acpi_rsconvert_info acpi_rs_convert_uart_serial_bus[23] = {
0468     {ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_SERIAL_BUS,
0469      ACPI_RS_SIZE(struct acpi_resource_uart_serialbus),
0470      ACPI_RSC_TABLE_SIZE(acpi_rs_convert_uart_serial_bus)},
0471 
0472     {ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_SERIAL_BUS,
0473      sizeof(struct aml_resource_uart_serialbus),
0474      0},
0475 
0476     {ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.common_serial_bus.revision_id),
0477      AML_OFFSET(common_serial_bus.revision_id),
0478      1},
0479 
0480     {ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.common_serial_bus.type),
0481      AML_OFFSET(common_serial_bus.type),
0482      1},
0483 
0484     {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET(data.common_serial_bus.slave_mode),
0485      AML_OFFSET(common_serial_bus.flags),
0486      0},
0487 
0488     {ACPI_RSC_1BITFLAG,
0489      ACPI_RS_OFFSET(data.common_serial_bus.producer_consumer),
0490      AML_OFFSET(common_serial_bus.flags),
0491      1},
0492 
0493     {ACPI_RSC_1BITFLAG,
0494      ACPI_RS_OFFSET(data.common_serial_bus.connection_sharing),
0495      AML_OFFSET(common_serial_bus.flags),
0496      2},
0497 
0498     {ACPI_RSC_MOVE8,
0499      ACPI_RS_OFFSET(data.common_serial_bus.type_revision_id),
0500      AML_OFFSET(common_serial_bus.type_revision_id),
0501      1},
0502 
0503     {ACPI_RSC_MOVE16,
0504      ACPI_RS_OFFSET(data.common_serial_bus.type_data_length),
0505      AML_OFFSET(common_serial_bus.type_data_length),
0506      1},
0507 
0508     /* Vendor data */
0509 
0510     {ACPI_RSC_COUNT_SERIAL_VEN,
0511      ACPI_RS_OFFSET(data.common_serial_bus.vendor_length),
0512      AML_OFFSET(common_serial_bus.type_data_length),
0513      AML_RESOURCE_UART_MIN_DATA_LEN},
0514 
0515     {ACPI_RSC_MOVE_SERIAL_VEN,
0516      ACPI_RS_OFFSET(data.common_serial_bus.vendor_data),
0517      0,
0518      sizeof(struct aml_resource_uart_serialbus)},
0519 
0520     /* Resource Source */
0521 
0522     {ACPI_RSC_MOVE8,
0523      ACPI_RS_OFFSET(data.common_serial_bus.resource_source.index),
0524      AML_OFFSET(common_serial_bus.res_source_index),
0525      1},
0526 
0527     {ACPI_RSC_COUNT_SERIAL_RES,
0528      ACPI_RS_OFFSET(data.common_serial_bus.resource_source.string_length),
0529      AML_OFFSET(common_serial_bus.type_data_length),
0530      sizeof(struct aml_resource_common_serialbus)},
0531 
0532     {ACPI_RSC_MOVE_SERIAL_RES,
0533      ACPI_RS_OFFSET(data.common_serial_bus.resource_source.string_ptr),
0534      AML_OFFSET(common_serial_bus.type_data_length),
0535      sizeof(struct aml_resource_common_serialbus)},
0536 
0537     /* Uart bus type specific  */
0538 
0539     {ACPI_RSC_2BITFLAG, ACPI_RS_OFFSET(data.uart_serial_bus.flow_control),
0540      AML_OFFSET(uart_serial_bus.type_specific_flags),
0541      0},
0542 
0543     {ACPI_RSC_2BITFLAG, ACPI_RS_OFFSET(data.uart_serial_bus.stop_bits),
0544      AML_OFFSET(uart_serial_bus.type_specific_flags),
0545      2},
0546 
0547     {ACPI_RSC_3BITFLAG, ACPI_RS_OFFSET(data.uart_serial_bus.data_bits),
0548      AML_OFFSET(uart_serial_bus.type_specific_flags),
0549      4},
0550 
0551     {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET(data.uart_serial_bus.endian),
0552      AML_OFFSET(uart_serial_bus.type_specific_flags),
0553      7},
0554 
0555     {ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.uart_serial_bus.parity),
0556      AML_OFFSET(uart_serial_bus.parity),
0557      1},
0558 
0559     {ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.uart_serial_bus.lines_enabled),
0560      AML_OFFSET(uart_serial_bus.lines_enabled),
0561      1},
0562 
0563     {ACPI_RSC_MOVE16, ACPI_RS_OFFSET(data.uart_serial_bus.rx_fifo_size),
0564      AML_OFFSET(uart_serial_bus.rx_fifo_size),
0565      1},
0566 
0567     {ACPI_RSC_MOVE16, ACPI_RS_OFFSET(data.uart_serial_bus.tx_fifo_size),
0568      AML_OFFSET(uart_serial_bus.tx_fifo_size),
0569      1},
0570 
0571     {ACPI_RSC_MOVE32,
0572      ACPI_RS_OFFSET(data.uart_serial_bus.default_baud_rate),
0573      AML_OFFSET(uart_serial_bus.default_baud_rate),
0574      1},
0575 };
0576 
0577 /*******************************************************************************
0578  *
0579  * acpi_rs_convert_pin_config
0580  *
0581  ******************************************************************************/
0582 
0583 struct acpi_rsconvert_info acpi_rs_convert_pin_config[14] = {
0584     {ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_PIN_CONFIG,
0585      ACPI_RS_SIZE(struct acpi_resource_pin_config),
0586      ACPI_RSC_TABLE_SIZE(acpi_rs_convert_pin_config)},
0587 
0588     {ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_PIN_CONFIG,
0589      sizeof(struct aml_resource_pin_config),
0590      0},
0591 
0592     {ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.pin_config.revision_id),
0593      AML_OFFSET(pin_config.revision_id),
0594      1},
0595 
0596     {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET(data.pin_config.shareable),
0597      AML_OFFSET(pin_config.flags),
0598      0},
0599 
0600     {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET(data.pin_config.producer_consumer),
0601      AML_OFFSET(pin_config.flags),
0602      1},
0603 
0604     {ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.pin_config.pin_config_type),
0605      AML_OFFSET(pin_config.pin_config_type),
0606      1},
0607 
0608     {ACPI_RSC_MOVE32, ACPI_RS_OFFSET(data.pin_config.pin_config_value),
0609      AML_OFFSET(pin_config.pin_config_value),
0610      1},
0611 
0612     /* Pin Table */
0613 
0614     /*
0615      * It is OK to use GPIO operations here because none of them refer GPIO
0616      * structures directly but instead use offsets given here.
0617      */
0618 
0619     {ACPI_RSC_COUNT_GPIO_PIN,
0620      ACPI_RS_OFFSET(data.pin_config.pin_table_length),
0621      AML_OFFSET(pin_config.pin_table_offset),
0622      AML_OFFSET(pin_config.res_source_offset)},
0623 
0624     {ACPI_RSC_MOVE_GPIO_PIN, ACPI_RS_OFFSET(data.pin_config.pin_table),
0625      AML_OFFSET(pin_config.pin_table_offset),
0626      0},
0627 
0628     /* Resource Source */
0629 
0630     {ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.pin_config.resource_source.index),
0631      AML_OFFSET(pin_config.res_source_index),
0632      1},
0633 
0634     {ACPI_RSC_COUNT_GPIO_RES,
0635      ACPI_RS_OFFSET(data.pin_config.resource_source.string_length),
0636      AML_OFFSET(pin_config.res_source_offset),
0637      AML_OFFSET(pin_config.vendor_offset)},
0638 
0639     {ACPI_RSC_MOVE_GPIO_RES,
0640      ACPI_RS_OFFSET(data.pin_config.resource_source.string_ptr),
0641      AML_OFFSET(pin_config.res_source_offset),
0642      0},
0643 
0644     /* Vendor Data */
0645 
0646     {ACPI_RSC_COUNT_GPIO_VEN, ACPI_RS_OFFSET(data.pin_config.vendor_length),
0647      AML_OFFSET(pin_config.vendor_length),
0648      1},
0649 
0650     {ACPI_RSC_MOVE_GPIO_RES, ACPI_RS_OFFSET(data.pin_config.vendor_data),
0651      AML_OFFSET(pin_config.vendor_offset),
0652      0},
0653 };
0654 
0655 /*******************************************************************************
0656  *
0657  * acpi_rs_convert_pin_group
0658  *
0659  ******************************************************************************/
0660 
0661 struct acpi_rsconvert_info acpi_rs_convert_pin_group[10] = {
0662     {ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_PIN_GROUP,
0663      ACPI_RS_SIZE(struct acpi_resource_pin_group),
0664      ACPI_RSC_TABLE_SIZE(acpi_rs_convert_pin_group)},
0665 
0666     {ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_PIN_GROUP,
0667      sizeof(struct aml_resource_pin_group),
0668      0},
0669 
0670     {ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.pin_group.revision_id),
0671      AML_OFFSET(pin_group.revision_id),
0672      1},
0673 
0674     {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET(data.pin_group.producer_consumer),
0675      AML_OFFSET(pin_group.flags),
0676      0},
0677 
0678     /* Pin Table */
0679 
0680     /*
0681      * It is OK to use GPIO operations here because none of them refer GPIO
0682      * structures directly but instead use offsets given here.
0683      */
0684 
0685     {ACPI_RSC_COUNT_GPIO_PIN,
0686      ACPI_RS_OFFSET(data.pin_group.pin_table_length),
0687      AML_OFFSET(pin_group.pin_table_offset),
0688      AML_OFFSET(pin_group.label_offset)},
0689 
0690     {ACPI_RSC_MOVE_GPIO_PIN, ACPI_RS_OFFSET(data.pin_group.pin_table),
0691      AML_OFFSET(pin_group.pin_table_offset),
0692      0},
0693 
0694     /* Resource Label */
0695 
0696     {ACPI_RSC_COUNT_GPIO_RES,
0697      ACPI_RS_OFFSET(data.pin_group.resource_label.string_length),
0698      AML_OFFSET(pin_group.label_offset),
0699      AML_OFFSET(pin_group.vendor_offset)},
0700 
0701     {ACPI_RSC_MOVE_GPIO_RES,
0702      ACPI_RS_OFFSET(data.pin_group.resource_label.string_ptr),
0703      AML_OFFSET(pin_group.label_offset),
0704      0},
0705 
0706     /* Vendor Data */
0707 
0708     {ACPI_RSC_COUNT_GPIO_VEN, ACPI_RS_OFFSET(data.pin_group.vendor_length),
0709      AML_OFFSET(pin_group.vendor_length),
0710      1},
0711 
0712     {ACPI_RSC_MOVE_GPIO_RES, ACPI_RS_OFFSET(data.pin_group.vendor_data),
0713      AML_OFFSET(pin_group.vendor_offset),
0714      0},
0715 };
0716 
0717 /*******************************************************************************
0718  *
0719  * acpi_rs_convert_pin_group_function
0720  *
0721  ******************************************************************************/
0722 
0723 struct acpi_rsconvert_info acpi_rs_convert_pin_group_function[13] = {
0724     {ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_PIN_GROUP_FUNCTION,
0725      ACPI_RS_SIZE(struct acpi_resource_pin_group_function),
0726      ACPI_RSC_TABLE_SIZE(acpi_rs_convert_pin_group_function)},
0727 
0728     {ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_PIN_GROUP_FUNCTION,
0729      sizeof(struct aml_resource_pin_group_function),
0730      0},
0731 
0732     {ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.pin_group_function.revision_id),
0733      AML_OFFSET(pin_group_function.revision_id),
0734      1},
0735 
0736     {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET(data.pin_group_function.shareable),
0737      AML_OFFSET(pin_group_function.flags),
0738      0},
0739 
0740     {ACPI_RSC_1BITFLAG,
0741      ACPI_RS_OFFSET(data.pin_group_function.producer_consumer),
0742      AML_OFFSET(pin_group_function.flags),
0743      1},
0744 
0745     {ACPI_RSC_MOVE16,
0746      ACPI_RS_OFFSET(data.pin_group_function.function_number),
0747      AML_OFFSET(pin_group_function.function_number),
0748      1},
0749 
0750     /* Resource Source */
0751 
0752     {ACPI_RSC_MOVE8,
0753      ACPI_RS_OFFSET(data.pin_group_function.resource_source.index),
0754      AML_OFFSET(pin_group_function.res_source_index),
0755      1},
0756 
0757     {ACPI_RSC_COUNT_GPIO_RES,
0758      ACPI_RS_OFFSET(data.pin_group_function.resource_source.string_length),
0759      AML_OFFSET(pin_group_function.res_source_offset),
0760      AML_OFFSET(pin_group_function.res_source_label_offset)},
0761 
0762     {ACPI_RSC_MOVE_GPIO_RES,
0763      ACPI_RS_OFFSET(data.pin_group_function.resource_source.string_ptr),
0764      AML_OFFSET(pin_group_function.res_source_offset),
0765      0},
0766 
0767     /* Resource Source Label */
0768 
0769     {ACPI_RSC_COUNT_GPIO_RES,
0770      ACPI_RS_OFFSET(data.pin_group_function.resource_source_label.
0771             string_length),
0772      AML_OFFSET(pin_group_function.res_source_label_offset),
0773      AML_OFFSET(pin_group_function.vendor_offset)},
0774 
0775     {ACPI_RSC_MOVE_GPIO_RES,
0776      ACPI_RS_OFFSET(data.pin_group_function.resource_source_label.
0777             string_ptr),
0778      AML_OFFSET(pin_group_function.res_source_label_offset),
0779      0},
0780 
0781     /* Vendor Data */
0782 
0783     {ACPI_RSC_COUNT_GPIO_VEN,
0784      ACPI_RS_OFFSET(data.pin_group_function.vendor_length),
0785      AML_OFFSET(pin_group_function.vendor_length),
0786      1},
0787 
0788     {ACPI_RSC_MOVE_GPIO_RES,
0789      ACPI_RS_OFFSET(data.pin_group_function.vendor_data),
0790      AML_OFFSET(pin_group_function.vendor_offset),
0791      0},
0792 };
0793 
0794 /*******************************************************************************
0795  *
0796  * acpi_rs_convert_pin_group_config
0797  *
0798  ******************************************************************************/
0799 
0800 struct acpi_rsconvert_info acpi_rs_convert_pin_group_config[14] = {
0801     {ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_PIN_GROUP_CONFIG,
0802      ACPI_RS_SIZE(struct acpi_resource_pin_group_config),
0803      ACPI_RSC_TABLE_SIZE(acpi_rs_convert_pin_group_config)},
0804 
0805     {ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_PIN_GROUP_CONFIG,
0806      sizeof(struct aml_resource_pin_group_config),
0807      0},
0808 
0809     {ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.pin_group_config.revision_id),
0810      AML_OFFSET(pin_group_config.revision_id),
0811      1},
0812 
0813     {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET(data.pin_group_config.shareable),
0814      AML_OFFSET(pin_group_config.flags),
0815      0},
0816 
0817     {ACPI_RSC_1BITFLAG,
0818      ACPI_RS_OFFSET(data.pin_group_config.producer_consumer),
0819      AML_OFFSET(pin_group_config.flags),
0820      1},
0821 
0822     {ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.pin_group_config.pin_config_type),
0823      AML_OFFSET(pin_group_config.pin_config_type),
0824      1},
0825 
0826     {ACPI_RSC_MOVE32,
0827      ACPI_RS_OFFSET(data.pin_group_config.pin_config_value),
0828      AML_OFFSET(pin_group_config.pin_config_value),
0829      1},
0830 
0831     /* Resource Source */
0832 
0833     {ACPI_RSC_MOVE8,
0834      ACPI_RS_OFFSET(data.pin_group_config.resource_source.index),
0835      AML_OFFSET(pin_group_config.res_source_index),
0836      1},
0837 
0838     {ACPI_RSC_COUNT_GPIO_RES,
0839      ACPI_RS_OFFSET(data.pin_group_config.resource_source.string_length),
0840      AML_OFFSET(pin_group_config.res_source_offset),
0841      AML_OFFSET(pin_group_config.res_source_label_offset)},
0842 
0843     {ACPI_RSC_MOVE_GPIO_RES,
0844      ACPI_RS_OFFSET(data.pin_group_config.resource_source.string_ptr),
0845      AML_OFFSET(pin_group_config.res_source_offset),
0846      0},
0847 
0848     /* Resource Source Label */
0849 
0850     {ACPI_RSC_COUNT_GPIO_RES,
0851      ACPI_RS_OFFSET(data.pin_group_config.resource_source_label.
0852             string_length),
0853      AML_OFFSET(pin_group_config.res_source_label_offset),
0854      AML_OFFSET(pin_group_config.vendor_offset)},
0855 
0856     {ACPI_RSC_MOVE_GPIO_RES,
0857      ACPI_RS_OFFSET(data.pin_group_config.resource_source_label.string_ptr),
0858      AML_OFFSET(pin_group_config.res_source_label_offset),
0859      0},
0860 
0861     /* Vendor Data */
0862 
0863     {ACPI_RSC_COUNT_GPIO_VEN,
0864      ACPI_RS_OFFSET(data.pin_group_config.vendor_length),
0865      AML_OFFSET(pin_group_config.vendor_length),
0866      1},
0867 
0868     {ACPI_RSC_MOVE_GPIO_RES,
0869      ACPI_RS_OFFSET(data.pin_group_config.vendor_data),
0870      AML_OFFSET(pin_group_config.vendor_offset),
0871      0},
0872 };