Home | History | Annotate | Line # | Download | only in resources
rsserial.c revision 1.1.1.13
      1 /*******************************************************************************
      2  *
      3  * Module Name: rsserial - GPIO/SerialBus resource descriptors
      4  *
      5  ******************************************************************************/
      6 
      7 /*
      8  * Copyright (C) 2000 - 2023, 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 MERCHANTABILITY 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.h"
     45 #include "accommon.h"
     46 #include "acresrc.h"
     47 
     48 #define _COMPONENT          ACPI_RESOURCES
     49         ACPI_MODULE_NAME    ("rsserial")
     50 
     51 
     52 /*******************************************************************************
     53  *
     54  * AcpiRsConvertGpio
     55  *
     56  ******************************************************************************/
     57 
     58 ACPI_RSCONVERT_INFO     AcpiRsConvertGpio[18] =
     59 {
     60     {ACPI_RSC_INITGET,  ACPI_RESOURCE_TYPE_GPIO,
     61                         ACPI_RS_SIZE (ACPI_RESOURCE_GPIO),
     62                         ACPI_RSC_TABLE_SIZE (AcpiRsConvertGpio)},
     63 
     64     {ACPI_RSC_INITSET,  ACPI_RESOURCE_NAME_GPIO,
     65                         sizeof (AML_RESOURCE_GPIO),
     66                         0},
     67 
     68     /*
     69      * These fields are contiguous in both the source and destination:
     70      * RevisionId
     71      * ConnectionType
     72      */
     73     {ACPI_RSC_MOVE8,    ACPI_RS_OFFSET (Data.Gpio.RevisionId),
     74                         AML_OFFSET (Gpio.RevisionId),
     75                         2},
     76 
     77     {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.Gpio.ProducerConsumer),
     78                         AML_OFFSET (Gpio.Flags),
     79                         0},
     80 
     81     {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.Gpio.Shareable),
     82                         AML_OFFSET (Gpio.IntFlags),
     83                         3},
     84 
     85     {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.Gpio.WakeCapable),
     86                         AML_OFFSET (Gpio.IntFlags),
     87                         4},
     88 
     89     {ACPI_RSC_2BITFLAG, ACPI_RS_OFFSET (Data.Gpio.IoRestriction),
     90                         AML_OFFSET (Gpio.IntFlags),
     91                         0},
     92 
     93     {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.Gpio.Triggering),
     94                         AML_OFFSET (Gpio.IntFlags),
     95                         0},
     96 
     97     {ACPI_RSC_2BITFLAG, ACPI_RS_OFFSET (Data.Gpio.Polarity),
     98                         AML_OFFSET (Gpio.IntFlags),
     99                         1},
    100 
    101     {ACPI_RSC_MOVE8,    ACPI_RS_OFFSET (Data.Gpio.PinConfig),
    102                         AML_OFFSET (Gpio.PinConfig),
    103                         1},
    104 
    105     /*
    106      * These fields are contiguous in both the source and destination:
    107      * DriveStrength
    108      * DebounceTimeout
    109      */
    110     {ACPI_RSC_MOVE16,   ACPI_RS_OFFSET (Data.Gpio.DriveStrength),
    111                         AML_OFFSET (Gpio.DriveStrength),
    112                         2},
    113 
    114     /* Pin Table */
    115 
    116     {ACPI_RSC_COUNT_GPIO_PIN, ACPI_RS_OFFSET (Data.Gpio.PinTableLength),
    117                         AML_OFFSET (Gpio.PinTableOffset),
    118                         AML_OFFSET (Gpio.ResSourceOffset)},
    119 
    120     {ACPI_RSC_MOVE_GPIO_PIN, ACPI_RS_OFFSET (Data.Gpio.PinTable),
    121                         AML_OFFSET (Gpio.PinTableOffset),
    122                         0},
    123 
    124     /* Resource Source */
    125 
    126     {ACPI_RSC_MOVE8,    ACPI_RS_OFFSET (Data.Gpio.ResourceSource.Index),
    127                         AML_OFFSET (Gpio.ResSourceIndex),
    128                         1},
    129 
    130     {ACPI_RSC_COUNT_GPIO_RES,  ACPI_RS_OFFSET (Data.Gpio.ResourceSource.StringLength),
    131                         AML_OFFSET (Gpio.ResSourceOffset),
    132                         AML_OFFSET (Gpio.VendorOffset)},
    133 
    134     {ACPI_RSC_MOVE_GPIO_RES,   ACPI_RS_OFFSET (Data.Gpio.ResourceSource.StringPtr),
    135                         AML_OFFSET (Gpio.ResSourceOffset),
    136                         0},
    137 
    138     /* Vendor Data */
    139 
    140     {ACPI_RSC_COUNT_GPIO_VEN,   ACPI_RS_OFFSET (Data.Gpio.VendorLength),
    141                         AML_OFFSET (Gpio.VendorLength),
    142                         1},
    143 
    144     {ACPI_RSC_MOVE_GPIO_RES,   ACPI_RS_OFFSET (Data.Gpio.VendorData),
    145                         AML_OFFSET (Gpio.VendorOffset),
    146                         0},
    147 };
    148 
    149 /*******************************************************************************
    150  *
    151  * AcpiRsConvertClockInput
    152  *
    153  ******************************************************************************/
    154 
    155 ACPI_RSCONVERT_INFO     AcpiRsConvertClockInput[8] =
    156 {
    157     {ACPI_RSC_INITGET,  ACPI_RESOURCE_TYPE_CLOCK_INPUT,
    158                         ACPI_RS_SIZE (ACPI_RESOURCE_CLOCK_INPUT),
    159                         ACPI_RSC_TABLE_SIZE (AcpiRsConvertClockInput)},
    160 
    161     {ACPI_RSC_INITSET,  ACPI_RESOURCE_NAME_CLOCK_INPUT,
    162                         sizeof (AML_RESOURCE_CLOCK_INPUT),
    163                         0},
    164 
    165     {ACPI_RSC_MOVE8,    ACPI_RS_OFFSET (Data.ClockInput.RevisionId),
    166                         AML_OFFSET (ClockInput.RevisionId),
    167                         1},
    168 
    169     {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.ClockInput.Mode),
    170                         AML_OFFSET (ClockInput.Flags),
    171                         0},
    172 
    173     {ACPI_RSC_2BITFLAG, ACPI_RS_OFFSET (Data.ClockInput.Scale),
    174                         AML_OFFSET (ClockInput.Flags),
    175                         1},
    176 
    177     {ACPI_RSC_MOVE16,   ACPI_RS_OFFSET (Data.ClockInput.FrequencyDivisor),
    178                         AML_OFFSET (ClockInput.FrequencyDivisor),
    179                         2},
    180 
    181     {ACPI_RSC_MOVE32,   ACPI_RS_OFFSET (Data.ClockInput.FrequencyNumerator),
    182                         AML_OFFSET (ClockInput.FrequencyNumerator),
    183                         4},
    184 
    185     /* Resource Source */
    186     {ACPI_RSC_SOURCE,    ACPI_RS_OFFSET (Data.ClockInput.ResourceSource),
    187                         0,
    188                         sizeof(AML_RESOURCE_CLOCK_INPUT)},
    189 
    190 };
    191 
    192 
    193 /*******************************************************************************
    194  *
    195  * AcpiRsConvertPinfunction
    196  *
    197  ******************************************************************************/
    198 
    199 ACPI_RSCONVERT_INFO     AcpiRsConvertPinFunction[13] =
    200 {
    201     {ACPI_RSC_INITGET,  ACPI_RESOURCE_TYPE_PIN_FUNCTION,
    202                         ACPI_RS_SIZE (ACPI_RESOURCE_PIN_FUNCTION),
    203                         ACPI_RSC_TABLE_SIZE (AcpiRsConvertPinFunction)},
    204 
    205     {ACPI_RSC_INITSET,  ACPI_RESOURCE_NAME_PIN_FUNCTION,
    206                         sizeof (AML_RESOURCE_PIN_FUNCTION),
    207                         0},
    208 
    209     {ACPI_RSC_MOVE8,    ACPI_RS_OFFSET (Data.PinFunction.RevisionId),
    210                         AML_OFFSET (PinFunction.RevisionId),
    211                         1},
    212 
    213     {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.PinFunction.Shareable),
    214                         AML_OFFSET (PinFunction.Flags),
    215                         0},
    216 
    217     {ACPI_RSC_MOVE8,    ACPI_RS_OFFSET (Data.PinFunction.PinConfig),
    218                         AML_OFFSET (PinFunction.PinConfig),
    219                         1},
    220 
    221     {ACPI_RSC_MOVE16,   ACPI_RS_OFFSET (Data.PinFunction.FunctionNumber),
    222                         AML_OFFSET (PinFunction.FunctionNumber),
    223                         2},
    224 
    225     /* Pin Table */
    226 
    227     /*
    228      * It is OK to use GPIO operations here because none of them refer GPIO
    229      * structures directly but instead use offsets given here.
    230      */
    231 
    232     {ACPI_RSC_COUNT_GPIO_PIN, ACPI_RS_OFFSET (Data.PinFunction.PinTableLength),
    233                         AML_OFFSET (PinFunction.PinTableOffset),
    234                         AML_OFFSET (PinFunction.ResSourceOffset)},
    235 
    236     {ACPI_RSC_MOVE_GPIO_PIN, ACPI_RS_OFFSET (Data.PinFunction.PinTable),
    237                         AML_OFFSET (PinFunction.PinTableOffset),
    238                         0},
    239 
    240     /* Resource Source */
    241 
    242     {ACPI_RSC_MOVE8,    ACPI_RS_OFFSET (Data.PinFunction.ResourceSource.Index),
    243                         AML_OFFSET (PinFunction.ResSourceIndex),
    244                         1},
    245 
    246     {ACPI_RSC_COUNT_GPIO_RES,  ACPI_RS_OFFSET (Data.PinFunction.ResourceSource.StringLength),
    247                         AML_OFFSET (PinFunction.ResSourceOffset),
    248                         AML_OFFSET (PinFunction.VendorOffset)},
    249 
    250     {ACPI_RSC_MOVE_GPIO_RES,   ACPI_RS_OFFSET (Data.PinFunction.ResourceSource.StringPtr),
    251                         AML_OFFSET (PinFunction.ResSourceOffset),
    252                         0},
    253 
    254     /* Vendor Data */
    255 
    256     {ACPI_RSC_COUNT_GPIO_VEN,   ACPI_RS_OFFSET (Data.PinFunction.VendorLength),
    257                         AML_OFFSET (PinFunction.VendorLength),
    258                         1},
    259 
    260     {ACPI_RSC_MOVE_GPIO_RES,   ACPI_RS_OFFSET (Data.PinFunction.VendorData),
    261                         AML_OFFSET (PinFunction.VendorOffset),
    262                         0},
    263 };
    264 
    265 
    266 /*******************************************************************************
    267  *
    268  * AcpiRsConvertCsi2SerialBus
    269  *
    270  ******************************************************************************/
    271 
    272 ACPI_RSCONVERT_INFO     AcpiRsConvertCsi2SerialBus[14] =
    273 {
    274     {ACPI_RSC_INITGET,  ACPI_RESOURCE_TYPE_SERIAL_BUS,
    275                         ACPI_RS_SIZE (ACPI_RESOURCE_CSI2_SERIALBUS),
    276                         ACPI_RSC_TABLE_SIZE (AcpiRsConvertCsi2SerialBus)},
    277 
    278     {ACPI_RSC_INITSET,  ACPI_RESOURCE_NAME_SERIAL_BUS,
    279                         sizeof (AML_RESOURCE_CSI2_SERIALBUS),
    280                         0},
    281 
    282     {ACPI_RSC_MOVE8,    ACPI_RS_OFFSET (Data.CommonSerialBus.RevisionId),
    283                         AML_OFFSET (CommonSerialBus.RevisionId),
    284                         1},
    285 
    286     {ACPI_RSC_MOVE8,    ACPI_RS_OFFSET (Data.Csi2SerialBus.Type),
    287                         AML_OFFSET (Csi2SerialBus.Type),
    288                         1},
    289 
    290     {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.Csi2SerialBus.ProducerConsumer),
    291                         AML_OFFSET (Csi2SerialBus.Flags),
    292                         1},
    293 
    294     {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.Csi2SerialBus.SlaveMode),
    295                         AML_OFFSET (Csi2SerialBus.Flags),
    296                         0},
    297 
    298     {ACPI_RSC_2BITFLAG, ACPI_RS_OFFSET (Data.Csi2SerialBus.PhyType),
    299                         AML_OFFSET (Csi2SerialBus.TypeSpecificFlags),
    300                         0},
    301 
    302     {ACPI_RSC_6BITFLAG, ACPI_RS_OFFSET (Data.Csi2SerialBus.LocalPortInstance),
    303                         AML_OFFSET (Csi2SerialBus.TypeSpecificFlags),
    304                         2},
    305 
    306     {ACPI_RSC_MOVE8,    ACPI_RS_OFFSET (Data.Csi2SerialBus.TypeRevisionId),
    307                         AML_OFFSET (Csi2SerialBus.TypeRevisionId),
    308                         1},
    309 
    310     /* Vendor data */
    311 
    312     {ACPI_RSC_COUNT_SERIAL_VEN, ACPI_RS_OFFSET (Data.Csi2SerialBus.VendorLength),
    313                         AML_OFFSET (Csi2SerialBus.TypeDataLength),
    314                         AML_RESOURCE_CSI2_MIN_DATA_LEN},
    315 
    316     {ACPI_RSC_MOVE_SERIAL_VEN,  ACPI_RS_OFFSET (Data.Csi2SerialBus.VendorData),
    317                         0,
    318                         sizeof (AML_RESOURCE_CSI2_SERIALBUS)},
    319 
    320     /* Resource Source */
    321 
    322     {ACPI_RSC_MOVE8,    ACPI_RS_OFFSET (Data.Csi2SerialBus.ResourceSource.Index),
    323                         AML_OFFSET (Csi2SerialBus.ResSourceIndex),
    324                         1},
    325 
    326     {ACPI_RSC_COUNT_SERIAL_RES, ACPI_RS_OFFSET (Data.Csi2SerialBus.ResourceSource.StringLength),
    327                         AML_OFFSET (Csi2SerialBus.TypeDataLength),
    328                         sizeof (AML_RESOURCE_CSI2_SERIALBUS)},
    329 
    330     {ACPI_RSC_MOVE_SERIAL_RES,  ACPI_RS_OFFSET (Data.Csi2SerialBus.ResourceSource.StringPtr),
    331                         AML_OFFSET (Csi2SerialBus.TypeDataLength),
    332                         sizeof (AML_RESOURCE_CSI2_SERIALBUS)},
    333 };
    334 
    335 
    336 /*******************************************************************************
    337  *
    338  * AcpiRsConvertI2cSerialBus
    339  *
    340  ******************************************************************************/
    341 
    342 ACPI_RSCONVERT_INFO     AcpiRsConvertI2cSerialBus[17] =
    343 {
    344     {ACPI_RSC_INITGET,  ACPI_RESOURCE_TYPE_SERIAL_BUS,
    345                         ACPI_RS_SIZE (ACPI_RESOURCE_I2C_SERIALBUS),
    346                         ACPI_RSC_TABLE_SIZE (AcpiRsConvertI2cSerialBus)},
    347 
    348     {ACPI_RSC_INITSET,  ACPI_RESOURCE_NAME_SERIAL_BUS,
    349                         sizeof (AML_RESOURCE_I2C_SERIALBUS),
    350                         0},
    351 
    352     {ACPI_RSC_MOVE8,    ACPI_RS_OFFSET (Data.CommonSerialBus.RevisionId),
    353                         AML_OFFSET (CommonSerialBus.RevisionId),
    354                         1},
    355 
    356     {ACPI_RSC_MOVE8,    ACPI_RS_OFFSET (Data.CommonSerialBus.Type),
    357                         AML_OFFSET (CommonSerialBus.Type),
    358                         1},
    359 
    360     {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.CommonSerialBus.SlaveMode),
    361                         AML_OFFSET (CommonSerialBus.Flags),
    362                         0},
    363 
    364     {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.CommonSerialBus.ProducerConsumer),
    365                         AML_OFFSET (CommonSerialBus.Flags),
    366                         1},
    367 
    368     {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.CommonSerialBus.ConnectionSharing),
    369                         AML_OFFSET (CommonSerialBus.Flags),
    370                         2},
    371 
    372     {ACPI_RSC_MOVE8,    ACPI_RS_OFFSET (Data.CommonSerialBus.TypeRevisionId),
    373                         AML_OFFSET (CommonSerialBus.TypeRevisionId),
    374                         1},
    375 
    376     {ACPI_RSC_MOVE16,   ACPI_RS_OFFSET (Data.CommonSerialBus.TypeDataLength),
    377                         AML_OFFSET (CommonSerialBus.TypeDataLength),
    378                         1},
    379 
    380     /* Vendor data */
    381 
    382     {ACPI_RSC_COUNT_SERIAL_VEN, ACPI_RS_OFFSET (Data.CommonSerialBus.VendorLength),
    383                         AML_OFFSET (CommonSerialBus.TypeDataLength),
    384                         AML_RESOURCE_I2C_MIN_DATA_LEN},
    385 
    386     {ACPI_RSC_MOVE_SERIAL_VEN,  ACPI_RS_OFFSET (Data.CommonSerialBus.VendorData),
    387                         0,
    388                         sizeof (AML_RESOURCE_I2C_SERIALBUS)},
    389 
    390     /* Resource Source */
    391 
    392     {ACPI_RSC_MOVE8,    ACPI_RS_OFFSET (Data.CommonSerialBus.ResourceSource.Index),
    393                         AML_OFFSET (CommonSerialBus.ResSourceIndex),
    394                         1},
    395 
    396     {ACPI_RSC_COUNT_SERIAL_RES, ACPI_RS_OFFSET (Data.CommonSerialBus.ResourceSource.StringLength),
    397                         AML_OFFSET (CommonSerialBus.TypeDataLength),
    398                         sizeof (AML_RESOURCE_COMMON_SERIALBUS)},
    399 
    400     {ACPI_RSC_MOVE_SERIAL_RES,  ACPI_RS_OFFSET (Data.CommonSerialBus.ResourceSource.StringPtr),
    401                         AML_OFFSET (CommonSerialBus.TypeDataLength),
    402                         sizeof (AML_RESOURCE_COMMON_SERIALBUS)},
    403 
    404     /* I2C bus type specific */
    405 
    406     {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.I2cSerialBus.AccessMode),
    407                         AML_OFFSET (I2cSerialBus.TypeSpecificFlags),
    408                         0},
    409 
    410     {ACPI_RSC_MOVE32,   ACPI_RS_OFFSET (Data.I2cSerialBus.ConnectionSpeed),
    411                         AML_OFFSET (I2cSerialBus.ConnectionSpeed),
    412                         1},
    413 
    414     {ACPI_RSC_MOVE16,   ACPI_RS_OFFSET (Data.I2cSerialBus.SlaveAddress),
    415                         AML_OFFSET (I2cSerialBus.SlaveAddress),
    416                         1},
    417 };
    418 
    419 
    420 /*******************************************************************************
    421  *
    422  * AcpiRsConvertSpiSerialBus
    423  *
    424  ******************************************************************************/
    425 
    426 ACPI_RSCONVERT_INFO     AcpiRsConvertSpiSerialBus[21] =
    427 {
    428     {ACPI_RSC_INITGET,  ACPI_RESOURCE_TYPE_SERIAL_BUS,
    429                         ACPI_RS_SIZE (ACPI_RESOURCE_SPI_SERIALBUS),
    430                         ACPI_RSC_TABLE_SIZE (AcpiRsConvertSpiSerialBus)},
    431 
    432     {ACPI_RSC_INITSET,  ACPI_RESOURCE_NAME_SERIAL_BUS,
    433                         sizeof (AML_RESOURCE_SPI_SERIALBUS),
    434                         0},
    435 
    436     {ACPI_RSC_MOVE8,    ACPI_RS_OFFSET (Data.CommonSerialBus.RevisionId),
    437                         AML_OFFSET (CommonSerialBus.RevisionId),
    438                         1},
    439 
    440     {ACPI_RSC_MOVE8,    ACPI_RS_OFFSET (Data.CommonSerialBus.Type),
    441                         AML_OFFSET (CommonSerialBus.Type),
    442                         1},
    443 
    444     {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.CommonSerialBus.SlaveMode),
    445                         AML_OFFSET (CommonSerialBus.Flags),
    446                         0},
    447 
    448     {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.CommonSerialBus.ProducerConsumer),
    449                         AML_OFFSET (CommonSerialBus.Flags),
    450                         1},
    451 
    452     {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.CommonSerialBus.ConnectionSharing),
    453                         AML_OFFSET (CommonSerialBus.Flags),
    454                         2},
    455 
    456     {ACPI_RSC_MOVE8,    ACPI_RS_OFFSET (Data.CommonSerialBus.TypeRevisionId),
    457                         AML_OFFSET (CommonSerialBus.TypeRevisionId),
    458                         1},
    459 
    460     {ACPI_RSC_MOVE16,   ACPI_RS_OFFSET (Data.CommonSerialBus.TypeDataLength),
    461                         AML_OFFSET (CommonSerialBus.TypeDataLength),
    462                         1},
    463 
    464     /* Vendor data */
    465 
    466     {ACPI_RSC_COUNT_SERIAL_VEN, ACPI_RS_OFFSET (Data.CommonSerialBus.VendorLength),
    467                         AML_OFFSET (CommonSerialBus.TypeDataLength),
    468                         AML_RESOURCE_SPI_MIN_DATA_LEN},
    469 
    470     {ACPI_RSC_MOVE_SERIAL_VEN,  ACPI_RS_OFFSET (Data.CommonSerialBus.VendorData),
    471                         0,
    472                         sizeof (AML_RESOURCE_SPI_SERIALBUS)},
    473 
    474     /* Resource Source */
    475 
    476     {ACPI_RSC_MOVE8,    ACPI_RS_OFFSET (Data.CommonSerialBus.ResourceSource.Index),
    477                         AML_OFFSET (CommonSerialBus.ResSourceIndex),
    478                         1},
    479 
    480     {ACPI_RSC_COUNT_SERIAL_RES, ACPI_RS_OFFSET (Data.CommonSerialBus.ResourceSource.StringLength),
    481                         AML_OFFSET (CommonSerialBus.TypeDataLength),
    482                         sizeof (AML_RESOURCE_COMMON_SERIALBUS)},
    483 
    484     {ACPI_RSC_MOVE_SERIAL_RES,  ACPI_RS_OFFSET (Data.CommonSerialBus.ResourceSource.StringPtr),
    485                         AML_OFFSET (CommonSerialBus.TypeDataLength),
    486                         sizeof (AML_RESOURCE_COMMON_SERIALBUS)},
    487 
    488     /* Spi bus type specific  */
    489 
    490     {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.SpiSerialBus.WireMode),
    491                         AML_OFFSET (SpiSerialBus.TypeSpecificFlags),
    492                         0},
    493 
    494     {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.SpiSerialBus.DevicePolarity),
    495                         AML_OFFSET (SpiSerialBus.TypeSpecificFlags),
    496                         1},
    497 
    498     {ACPI_RSC_MOVE8,    ACPI_RS_OFFSET (Data.SpiSerialBus.DataBitLength),
    499                         AML_OFFSET (SpiSerialBus.DataBitLength),
    500                         1},
    501 
    502     {ACPI_RSC_MOVE8,    ACPI_RS_OFFSET (Data.SpiSerialBus.ClockPhase),
    503                         AML_OFFSET (SpiSerialBus.ClockPhase),
    504                         1},
    505 
    506     {ACPI_RSC_MOVE8,    ACPI_RS_OFFSET (Data.SpiSerialBus.ClockPolarity),
    507                         AML_OFFSET (SpiSerialBus.ClockPolarity),
    508                         1},
    509 
    510     {ACPI_RSC_MOVE16,   ACPI_RS_OFFSET (Data.SpiSerialBus.DeviceSelection),
    511                         AML_OFFSET (SpiSerialBus.DeviceSelection),
    512                         1},
    513 
    514     {ACPI_RSC_MOVE32,   ACPI_RS_OFFSET (Data.SpiSerialBus.ConnectionSpeed),
    515                         AML_OFFSET (SpiSerialBus.ConnectionSpeed),
    516                         1},
    517 };
    518 
    519 
    520 /*******************************************************************************
    521  *
    522  * AcpiRsConvertUartSerialBus
    523  *
    524  ******************************************************************************/
    525 
    526 ACPI_RSCONVERT_INFO     AcpiRsConvertUartSerialBus[23] =
    527 {
    528     {ACPI_RSC_INITGET,  ACPI_RESOURCE_TYPE_SERIAL_BUS,
    529                         ACPI_RS_SIZE (ACPI_RESOURCE_UART_SERIALBUS),
    530                         ACPI_RSC_TABLE_SIZE (AcpiRsConvertUartSerialBus)},
    531 
    532     {ACPI_RSC_INITSET,  ACPI_RESOURCE_NAME_SERIAL_BUS,
    533                         sizeof (AML_RESOURCE_UART_SERIALBUS),
    534                         0},
    535 
    536     {ACPI_RSC_MOVE8,    ACPI_RS_OFFSET (Data.CommonSerialBus.RevisionId),
    537                         AML_OFFSET (CommonSerialBus.RevisionId),
    538                         1},
    539 
    540     {ACPI_RSC_MOVE8,    ACPI_RS_OFFSET (Data.CommonSerialBus.Type),
    541                         AML_OFFSET (CommonSerialBus.Type),
    542                         1},
    543 
    544     {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.CommonSerialBus.SlaveMode),
    545                         AML_OFFSET (CommonSerialBus.Flags),
    546                         0},
    547 
    548     {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.CommonSerialBus.ProducerConsumer),
    549                         AML_OFFSET (CommonSerialBus.Flags),
    550                         1},
    551 
    552     {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.CommonSerialBus.ConnectionSharing),
    553                         AML_OFFSET (CommonSerialBus.Flags),
    554                         2},
    555 
    556     {ACPI_RSC_MOVE8,    ACPI_RS_OFFSET (Data.CommonSerialBus.TypeRevisionId),
    557                         AML_OFFSET (CommonSerialBus.TypeRevisionId),
    558                         1},
    559 
    560     {ACPI_RSC_MOVE16,   ACPI_RS_OFFSET (Data.CommonSerialBus.TypeDataLength),
    561                         AML_OFFSET (CommonSerialBus.TypeDataLength),
    562                         1},
    563 
    564     /* Vendor data */
    565 
    566     {ACPI_RSC_COUNT_SERIAL_VEN, ACPI_RS_OFFSET (Data.CommonSerialBus.VendorLength),
    567                         AML_OFFSET (CommonSerialBus.TypeDataLength),
    568                         AML_RESOURCE_UART_MIN_DATA_LEN},
    569 
    570     {ACPI_RSC_MOVE_SERIAL_VEN,  ACPI_RS_OFFSET (Data.CommonSerialBus.VendorData),
    571                         0,
    572                         sizeof (AML_RESOURCE_UART_SERIALBUS)},
    573 
    574     /* Resource Source */
    575 
    576     {ACPI_RSC_MOVE8,    ACPI_RS_OFFSET (Data.CommonSerialBus.ResourceSource.Index),
    577                         AML_OFFSET (CommonSerialBus.ResSourceIndex),
    578                         1},
    579 
    580     {ACPI_RSC_COUNT_SERIAL_RES, ACPI_RS_OFFSET (Data.CommonSerialBus.ResourceSource.StringLength),
    581                         AML_OFFSET (CommonSerialBus.TypeDataLength),
    582                         sizeof (AML_RESOURCE_COMMON_SERIALBUS)},
    583 
    584     {ACPI_RSC_MOVE_SERIAL_RES,  ACPI_RS_OFFSET (Data.CommonSerialBus.ResourceSource.StringPtr),
    585                         AML_OFFSET (CommonSerialBus.TypeDataLength),
    586                         sizeof (AML_RESOURCE_COMMON_SERIALBUS)},
    587 
    588     /* Uart bus type specific  */
    589 
    590     {ACPI_RSC_2BITFLAG, ACPI_RS_OFFSET (Data.UartSerialBus.FlowControl),
    591                         AML_OFFSET (UartSerialBus.TypeSpecificFlags),
    592                         0},
    593 
    594     {ACPI_RSC_2BITFLAG, ACPI_RS_OFFSET (Data.UartSerialBus.StopBits),
    595                         AML_OFFSET (UartSerialBus.TypeSpecificFlags),
    596                         2},
    597 
    598     {ACPI_RSC_3BITFLAG, ACPI_RS_OFFSET (Data.UartSerialBus.DataBits),
    599                         AML_OFFSET (UartSerialBus.TypeSpecificFlags),
    600                         4},
    601 
    602     {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.UartSerialBus.Endian),
    603                         AML_OFFSET (UartSerialBus.TypeSpecificFlags),
    604                         7},
    605 
    606     {ACPI_RSC_MOVE8,    ACPI_RS_OFFSET (Data.UartSerialBus.Parity),
    607                         AML_OFFSET (UartSerialBus.Parity),
    608                         1},
    609 
    610     {ACPI_RSC_MOVE8,    ACPI_RS_OFFSET (Data.UartSerialBus.LinesEnabled),
    611                         AML_OFFSET (UartSerialBus.LinesEnabled),
    612                         1},
    613 
    614     {ACPI_RSC_MOVE16,   ACPI_RS_OFFSET (Data.UartSerialBus.RxFifoSize),
    615                         AML_OFFSET (UartSerialBus.RxFifoSize),
    616                         1},
    617 
    618     {ACPI_RSC_MOVE16,   ACPI_RS_OFFSET (Data.UartSerialBus.TxFifoSize),
    619                         AML_OFFSET (UartSerialBus.TxFifoSize),
    620                         1},
    621 
    622     {ACPI_RSC_MOVE32,   ACPI_RS_OFFSET (Data.UartSerialBus.DefaultBaudRate),
    623                         AML_OFFSET (UartSerialBus.DefaultBaudRate),
    624                         1},
    625 };
    626 
    627 
    628 /*******************************************************************************
    629  *
    630  * AcpiRsConvertPinConfig
    631  *
    632  ******************************************************************************/
    633 
    634 ACPI_RSCONVERT_INFO     AcpiRsConvertPinConfig[14] =
    635 {
    636     {ACPI_RSC_INITGET,  ACPI_RESOURCE_TYPE_PIN_CONFIG,
    637                         ACPI_RS_SIZE (ACPI_RESOURCE_PIN_CONFIG),
    638                         ACPI_RSC_TABLE_SIZE (AcpiRsConvertPinConfig)},
    639 
    640     {ACPI_RSC_INITSET,  ACPI_RESOURCE_NAME_PIN_CONFIG,
    641                         sizeof (AML_RESOURCE_PIN_CONFIG),
    642                         0},
    643 
    644     {ACPI_RSC_MOVE8,    ACPI_RS_OFFSET (Data.PinConfig.RevisionId),
    645                         AML_OFFSET (PinConfig.RevisionId),
    646                         1},
    647 
    648     {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.PinConfig.Shareable),
    649                         AML_OFFSET (PinConfig.Flags),
    650                         0},
    651 
    652     {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.PinConfig.ProducerConsumer),
    653                         AML_OFFSET (PinConfig.Flags),
    654                         1},
    655 
    656     {ACPI_RSC_MOVE8,    ACPI_RS_OFFSET (Data.PinConfig.PinConfigType),
    657                         AML_OFFSET (PinConfig.PinConfigType),
    658                         1},
    659 
    660     {ACPI_RSC_MOVE32,   ACPI_RS_OFFSET (Data.PinConfig.PinConfigValue),
    661                         AML_OFFSET (PinConfig.PinConfigValue),
    662                         1},
    663 
    664     /* Pin Table */
    665 
    666     /*
    667      * It is OK to use GPIO operations here because none of them refer GPIO
    668      * structures directly but instead use offsets given here.
    669      */
    670 
    671     {ACPI_RSC_COUNT_GPIO_PIN, ACPI_RS_OFFSET (Data.PinConfig.PinTableLength),
    672                         AML_OFFSET (PinConfig.PinTableOffset),
    673                         AML_OFFSET (PinConfig.ResSourceOffset)},
    674 
    675     {ACPI_RSC_MOVE_GPIO_PIN, ACPI_RS_OFFSET (Data.PinConfig.PinTable),
    676                         AML_OFFSET (PinConfig.PinTableOffset),
    677                         0},
    678 
    679     /* Resource Source */
    680 
    681     {ACPI_RSC_MOVE8,    ACPI_RS_OFFSET (Data.PinConfig.ResourceSource.Index),
    682                         AML_OFFSET (PinConfig.ResSourceIndex),
    683                         1},
    684 
    685     {ACPI_RSC_COUNT_GPIO_RES,  ACPI_RS_OFFSET (Data.PinConfig.ResourceSource.StringLength),
    686                         AML_OFFSET (PinConfig.ResSourceOffset),
    687                         AML_OFFSET (PinConfig.VendorOffset)},
    688 
    689     {ACPI_RSC_MOVE_GPIO_RES,   ACPI_RS_OFFSET (Data.PinConfig.ResourceSource.StringPtr),
    690                         AML_OFFSET (PinConfig.ResSourceOffset),
    691                         0},
    692 
    693     /* Vendor Data */
    694 
    695     {ACPI_RSC_COUNT_GPIO_VEN,   ACPI_RS_OFFSET (Data.PinConfig.VendorLength),
    696                         AML_OFFSET (PinConfig.VendorLength),
    697                         1},
    698 
    699     {ACPI_RSC_MOVE_GPIO_RES,   ACPI_RS_OFFSET (Data.PinConfig.VendorData),
    700                         AML_OFFSET (PinConfig.VendorOffset),
    701                         0},
    702 };
    703 
    704 /*******************************************************************************
    705  *
    706  * AcpiRsConvertPinGroup
    707  *
    708  ******************************************************************************/
    709 
    710 ACPI_RSCONVERT_INFO     AcpiRsConvertPinGroup[10] =
    711 {
    712     {ACPI_RSC_INITGET,  ACPI_RESOURCE_TYPE_PIN_GROUP,
    713                         ACPI_RS_SIZE (ACPI_RESOURCE_PIN_GROUP),
    714                         ACPI_RSC_TABLE_SIZE (AcpiRsConvertPinGroup)},
    715 
    716     {ACPI_RSC_INITSET,  ACPI_RESOURCE_NAME_PIN_GROUP,
    717                         sizeof (AML_RESOURCE_PIN_GROUP),
    718                         0},
    719 
    720     {ACPI_RSC_MOVE8,    ACPI_RS_OFFSET (Data.PinGroup.RevisionId),
    721                         AML_OFFSET (PinGroup.RevisionId),
    722                         1},
    723 
    724     {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.PinGroup.ProducerConsumer),
    725                         AML_OFFSET (PinGroup.Flags),
    726                         0},
    727 
    728     /* Pin Table */
    729 
    730     /*
    731      * It is OK to use GPIO operations here because none of them refer GPIO
    732      * structures directly but instead use offsets given here.
    733      */
    734 
    735     {ACPI_RSC_COUNT_GPIO_PIN, ACPI_RS_OFFSET (Data.PinGroup.PinTableLength),
    736                         AML_OFFSET (PinGroup.PinTableOffset),
    737                         AML_OFFSET (PinGroup.LabelOffset)},
    738 
    739     {ACPI_RSC_MOVE_GPIO_PIN, ACPI_RS_OFFSET (Data.PinGroup.PinTable),
    740                         AML_OFFSET (PinGroup.PinTableOffset),
    741                         0},
    742 
    743     /* Resource Label */
    744 
    745     {ACPI_RSC_COUNT_GPIO_RES, ACPI_RS_OFFSET (Data.PinGroup.ResourceLabel.StringLength),
    746                         AML_OFFSET (PinGroup.LabelOffset),
    747                         AML_OFFSET (PinGroup.VendorOffset)},
    748 
    749     {ACPI_RSC_MOVE_GPIO_RES, ACPI_RS_OFFSET (Data.PinGroup.ResourceLabel.StringPtr),
    750                         AML_OFFSET (PinGroup.LabelOffset),
    751                         0},
    752 
    753     /* Vendor Data */
    754 
    755     {ACPI_RSC_COUNT_GPIO_VEN,   ACPI_RS_OFFSET (Data.PinGroup.VendorLength),
    756                         AML_OFFSET (PinGroup.VendorLength),
    757                         1},
    758 
    759     {ACPI_RSC_MOVE_GPIO_RES,   ACPI_RS_OFFSET (Data.PinGroup.VendorData),
    760                         AML_OFFSET (PinGroup.VendorOffset),
    761                         0},
    762 };
    763 
    764 /*******************************************************************************
    765  *
    766  * AcpiRsConvertPinGroupFunction
    767  *
    768  ******************************************************************************/
    769 
    770 ACPI_RSCONVERT_INFO     AcpiRsConvertPinGroupFunction[13] =
    771 {
    772     {ACPI_RSC_INITGET,  ACPI_RESOURCE_TYPE_PIN_GROUP_FUNCTION,
    773                         ACPI_RS_SIZE (ACPI_RESOURCE_PIN_GROUP_FUNCTION),
    774                         ACPI_RSC_TABLE_SIZE (AcpiRsConvertPinGroupFunction)},
    775 
    776     {ACPI_RSC_INITSET,  ACPI_RESOURCE_NAME_PIN_GROUP_FUNCTION,
    777                         sizeof (AML_RESOURCE_PIN_GROUP_FUNCTION),
    778                         0},
    779 
    780     {ACPI_RSC_MOVE8,    ACPI_RS_OFFSET (Data.PinGroupFunction.RevisionId),
    781                         AML_OFFSET (PinGroupFunction.RevisionId),
    782                         1},
    783 
    784     {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.PinGroupFunction.Shareable),
    785                         AML_OFFSET (PinGroupFunction.Flags),
    786                         0},
    787 
    788     {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.PinGroupFunction.ProducerConsumer),
    789                         AML_OFFSET (PinGroupFunction.Flags),
    790                         1},
    791 
    792     {ACPI_RSC_MOVE16,   ACPI_RS_OFFSET (Data.PinGroupFunction.FunctionNumber),
    793                         AML_OFFSET (PinGroupFunction.FunctionNumber),
    794                         1},
    795 
    796     /* Resource Source */
    797 
    798     {ACPI_RSC_MOVE8,    ACPI_RS_OFFSET (Data.PinGroupFunction.ResourceSource.Index),
    799                         AML_OFFSET (PinGroupFunction.ResSourceIndex),
    800                         1},
    801 
    802     {ACPI_RSC_COUNT_GPIO_RES,  ACPI_RS_OFFSET (Data.PinGroupFunction.ResourceSource.StringLength),
    803                         AML_OFFSET (PinGroupFunction.ResSourceOffset),
    804                         AML_OFFSET (PinGroupFunction.ResSourceLabelOffset)},
    805 
    806     {ACPI_RSC_MOVE_GPIO_RES,   ACPI_RS_OFFSET (Data.PinGroupFunction.ResourceSource.StringPtr),
    807                         AML_OFFSET (PinGroupFunction.ResSourceOffset),
    808                         0},
    809 
    810     /* Resource Source Label */
    811 
    812     {ACPI_RSC_COUNT_GPIO_RES,  ACPI_RS_OFFSET (Data.PinGroupFunction.ResourceSourceLabel.StringLength),
    813                         AML_OFFSET (PinGroupFunction.ResSourceLabelOffset),
    814                         AML_OFFSET (PinGroupFunction.VendorOffset)},
    815 
    816     {ACPI_RSC_MOVE_GPIO_RES,   ACPI_RS_OFFSET (Data.PinGroupFunction.ResourceSourceLabel.StringPtr),
    817                         AML_OFFSET (PinGroupFunction.ResSourceLabelOffset),
    818                         0},
    819 
    820     /* Vendor Data */
    821 
    822     {ACPI_RSC_COUNT_GPIO_VEN,   ACPI_RS_OFFSET (Data.PinGroupFunction.VendorLength),
    823                         AML_OFFSET (PinGroupFunction.VendorLength),
    824                         1},
    825 
    826     {ACPI_RSC_MOVE_GPIO_RES,   ACPI_RS_OFFSET (Data.PinGroupFunction.VendorData),
    827                         AML_OFFSET (PinGroupFunction.VendorOffset),
    828                         0},
    829 };
    830 
    831 /*******************************************************************************
    832  *
    833  * AcpiRsConvertPinGroupConfig
    834  *
    835  ******************************************************************************/
    836 
    837 ACPI_RSCONVERT_INFO     AcpiRsConvertPinGroupConfig[14] =
    838 {
    839     {ACPI_RSC_INITGET,  ACPI_RESOURCE_TYPE_PIN_GROUP_CONFIG,
    840                         ACPI_RS_SIZE (ACPI_RESOURCE_PIN_GROUP_CONFIG),
    841                         ACPI_RSC_TABLE_SIZE (AcpiRsConvertPinGroupConfig)},
    842 
    843     {ACPI_RSC_INITSET,  ACPI_RESOURCE_NAME_PIN_GROUP_CONFIG,
    844                         sizeof (AML_RESOURCE_PIN_GROUP_CONFIG),
    845                         0},
    846 
    847     {ACPI_RSC_MOVE8,    ACPI_RS_OFFSET (Data.PinGroupConfig.RevisionId),
    848                         AML_OFFSET (PinGroupConfig.RevisionId),
    849                         1},
    850 
    851     {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.PinGroupConfig.Shareable),
    852                         AML_OFFSET (PinGroupConfig.Flags),
    853                         0},
    854 
    855     {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.PinGroupConfig.ProducerConsumer),
    856                         AML_OFFSET (PinGroupConfig.Flags),
    857                         1},
    858 
    859     {ACPI_RSC_MOVE8,    ACPI_RS_OFFSET (Data.PinGroupConfig.PinConfigType),
    860                         AML_OFFSET (PinGroupConfig.PinConfigType),
    861                         1},
    862 
    863     {ACPI_RSC_MOVE32,   ACPI_RS_OFFSET (Data.PinGroupConfig.PinConfigValue),
    864                         AML_OFFSET (PinGroupConfig.PinConfigValue),
    865                         1},
    866 
    867     /* Resource Source */
    868 
    869     {ACPI_RSC_MOVE8,    ACPI_RS_OFFSET (Data.PinGroupConfig.ResourceSource.Index),
    870                         AML_OFFSET (PinGroupConfig.ResSourceIndex),
    871                         1},
    872 
    873     {ACPI_RSC_COUNT_GPIO_RES,  ACPI_RS_OFFSET (Data.PinGroupConfig.ResourceSource.StringLength),
    874                         AML_OFFSET (PinGroupConfig.ResSourceOffset),
    875                         AML_OFFSET (PinGroupConfig.ResSourceLabelOffset)},
    876 
    877     {ACPI_RSC_MOVE_GPIO_RES,   ACPI_RS_OFFSET (Data.PinGroupConfig.ResourceSource.StringPtr),
    878                         AML_OFFSET (PinGroupConfig.ResSourceOffset),
    879                         0},
    880 
    881     /* Resource Source Label */
    882 
    883     {ACPI_RSC_COUNT_GPIO_RES,  ACPI_RS_OFFSET (Data.PinGroupConfig.ResourceSourceLabel.StringLength),
    884                         AML_OFFSET (PinGroupConfig.ResSourceLabelOffset),
    885                         AML_OFFSET (PinGroupConfig.VendorOffset)},
    886 
    887     {ACPI_RSC_MOVE_GPIO_RES,   ACPI_RS_OFFSET (Data.PinGroupConfig.ResourceSourceLabel.StringPtr),
    888                         AML_OFFSET (PinGroupConfig.ResSourceLabelOffset),
    889                         0},
    890 
    891     /* Vendor Data */
    892 
    893     {ACPI_RSC_COUNT_GPIO_VEN,   ACPI_RS_OFFSET (Data.PinGroupConfig.VendorLength),
    894                         AML_OFFSET (PinGroupConfig.VendorLength),
    895                         1},
    896 
    897     {ACPI_RSC_MOVE_GPIO_RES,   ACPI_RS_OFFSET (Data.PinGroupConfig.VendorData),
    898                         AML_OFFSET (PinGroupConfig.VendorOffset),
    899                         0},
    900 };
    901