1 /******************************************************************************* 2 * 3 * Module Name: rsserial - GPIO/SerialBus resource descriptors 4 * 5 ******************************************************************************/ 6 7 /* 8 * Copyright (C) 2000 - 2013, Intel Corp. 9 * All rights reserved. 10 * 11 * Redistribution and use in source and binary forms, with or without 12 * modification, are permitted provided that the following conditions 13 * are met: 14 * 1. Redistributions of source code must retain the above copyright 15 * notice, this list of conditions, and the following disclaimer, 16 * without modification. 17 * 2. Redistributions in binary form must reproduce at minimum a disclaimer 18 * substantially similar to the "NO WARRANTY" disclaimer below 19 * ("Disclaimer") and any redistribution must be conditioned upon 20 * including a substantially similar Disclaimer requirement for further 21 * binary redistribution. 22 * 3. Neither the names of the above-listed copyright holders nor the names 23 * of any contributors may be used to endorse or promote products derived 24 * from this software without specific prior written permission. 25 * 26 * Alternatively, this software may be distributed under the terms of the 27 * GNU General Public License ("GPL") version 2 as published by the Free 28 * Software Foundation. 29 * 30 * NO WARRANTY 31 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 32 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 33 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR 34 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 35 * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 36 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 37 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 38 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 39 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING 40 * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 41 * POSSIBILITY OF SUCH DAMAGES. 42 */ 43 44 #define __RSIRQ_C__ 45 46 #include "acpi.h" 47 #include "accommon.h" 48 #include "acresrc.h" 49 50 #define _COMPONENT ACPI_RESOURCES 51 ACPI_MODULE_NAME ("rsserial") 52 53 54 /******************************************************************************* 55 * 56 * AcpiRsConvertGpio 57 * 58 ******************************************************************************/ 59 60 ACPI_RSCONVERT_INFO AcpiRsConvertGpio[18] = 61 { 62 {ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_GPIO, 63 ACPI_RS_SIZE (ACPI_RESOURCE_GPIO), 64 ACPI_RSC_TABLE_SIZE (AcpiRsConvertGpio)}, 65 66 {ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_GPIO, 67 sizeof (AML_RESOURCE_GPIO), 68 0}, 69 70 /* 71 * These fields are contiguous in both the source and destination: 72 * RevisionId 73 * ConnectionType 74 */ 75 {ACPI_RSC_MOVE8, ACPI_RS_OFFSET (Data.Gpio.RevisionId), 76 AML_OFFSET (Gpio.RevisionId), 77 2}, 78 79 {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.Gpio.ProducerConsumer), 80 AML_OFFSET (Gpio.Flags), 81 0}, 82 83 {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.Gpio.Sharable), 84 AML_OFFSET (Gpio.IntFlags), 85 3}, 86 87 {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.Gpio.WakeCapable), 88 AML_OFFSET (Gpio.IntFlags), 89 4}, 90 91 {ACPI_RSC_2BITFLAG, ACPI_RS_OFFSET (Data.Gpio.IoRestriction), 92 AML_OFFSET (Gpio.IntFlags), 93 0}, 94 95 {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.Gpio.Triggering), 96 AML_OFFSET (Gpio.IntFlags), 97 0}, 98 99 {ACPI_RSC_2BITFLAG, ACPI_RS_OFFSET (Data.Gpio.Polarity), 100 AML_OFFSET (Gpio.IntFlags), 101 1}, 102 103 {ACPI_RSC_MOVE8, ACPI_RS_OFFSET (Data.Gpio.PinConfig), 104 AML_OFFSET (Gpio.PinConfig), 105 1}, 106 107 /* 108 * These fields are contiguous in both the source and destination: 109 * DriveStrength 110 * DebounceTimeout 111 */ 112 {ACPI_RSC_MOVE16, ACPI_RS_OFFSET (Data.Gpio.DriveStrength), 113 AML_OFFSET (Gpio.DriveStrength), 114 2}, 115 116 /* Pin Table */ 117 118 {ACPI_RSC_COUNT_GPIO_PIN, ACPI_RS_OFFSET (Data.Gpio.PinTableLength), 119 AML_OFFSET (Gpio.PinTableOffset), 120 AML_OFFSET (Gpio.ResSourceOffset)}, 121 122 {ACPI_RSC_MOVE_GPIO_PIN, ACPI_RS_OFFSET (Data.Gpio.PinTable), 123 AML_OFFSET (Gpio.PinTableOffset), 124 0}, 125 126 /* Resource Source */ 127 128 {ACPI_RSC_MOVE8, ACPI_RS_OFFSET (Data.Gpio.ResourceSource.Index), 129 AML_OFFSET (Gpio.ResSourceIndex), 130 1}, 131 132 {ACPI_RSC_COUNT_GPIO_RES, ACPI_RS_OFFSET (Data.Gpio.ResourceSource.StringLength), 133 AML_OFFSET (Gpio.ResSourceOffset), 134 AML_OFFSET (Gpio.VendorOffset)}, 135 136 {ACPI_RSC_MOVE_GPIO_RES, ACPI_RS_OFFSET (Data.Gpio.ResourceSource.StringPtr), 137 AML_OFFSET (Gpio.ResSourceOffset), 138 0}, 139 140 /* Vendor Data */ 141 142 {ACPI_RSC_COUNT_GPIO_VEN, ACPI_RS_OFFSET (Data.Gpio.VendorLength), 143 AML_OFFSET (Gpio.VendorLength), 144 1}, 145 146 {ACPI_RSC_MOVE_GPIO_RES, ACPI_RS_OFFSET (Data.Gpio.VendorData), 147 AML_OFFSET (Gpio.VendorOffset), 148 0}, 149 }; 150 151 152 /******************************************************************************* 153 * 154 * AcpiRsConvertI2cSerialBus 155 * 156 ******************************************************************************/ 157 158 ACPI_RSCONVERT_INFO AcpiRsConvertI2cSerialBus[16] = 159 { 160 {ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_SERIAL_BUS, 161 ACPI_RS_SIZE (ACPI_RESOURCE_I2C_SERIALBUS), 162 ACPI_RSC_TABLE_SIZE (AcpiRsConvertI2cSerialBus)}, 163 164 {ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_SERIAL_BUS, 165 sizeof (AML_RESOURCE_I2C_SERIALBUS), 166 0}, 167 168 {ACPI_RSC_MOVE8, ACPI_RS_OFFSET (Data.CommonSerialBus.RevisionId), 169 AML_OFFSET (CommonSerialBus.RevisionId), 170 1}, 171 172 {ACPI_RSC_MOVE8, ACPI_RS_OFFSET (Data.CommonSerialBus.Type), 173 AML_OFFSET (CommonSerialBus.Type), 174 1}, 175 176 {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.CommonSerialBus.SlaveMode), 177 AML_OFFSET (CommonSerialBus.Flags), 178 0}, 179 180 {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.CommonSerialBus.ProducerConsumer), 181 AML_OFFSET (CommonSerialBus.Flags), 182 1}, 183 184 {ACPI_RSC_MOVE8, ACPI_RS_OFFSET (Data.CommonSerialBus.TypeRevisionId), 185 AML_OFFSET (CommonSerialBus.TypeRevisionId), 186 1}, 187 188 {ACPI_RSC_MOVE16, ACPI_RS_OFFSET (Data.CommonSerialBus.TypeDataLength), 189 AML_OFFSET (CommonSerialBus.TypeDataLength), 190 1}, 191 192 /* Vendor data */ 193 194 {ACPI_RSC_COUNT_SERIAL_VEN, ACPI_RS_OFFSET (Data.CommonSerialBus.VendorLength), 195 AML_OFFSET (CommonSerialBus.TypeDataLength), 196 AML_RESOURCE_I2C_MIN_DATA_LEN}, 197 198 {ACPI_RSC_MOVE_SERIAL_VEN, ACPI_RS_OFFSET (Data.CommonSerialBus.VendorData), 199 0, 200 sizeof (AML_RESOURCE_I2C_SERIALBUS)}, 201 202 /* Resource Source */ 203 204 {ACPI_RSC_MOVE8, ACPI_RS_OFFSET (Data.CommonSerialBus.ResourceSource.Index), 205 AML_OFFSET (CommonSerialBus.ResSourceIndex), 206 1}, 207 208 {ACPI_RSC_COUNT_SERIAL_RES, ACPI_RS_OFFSET (Data.CommonSerialBus.ResourceSource.StringLength), 209 AML_OFFSET (CommonSerialBus.TypeDataLength), 210 sizeof (AML_RESOURCE_COMMON_SERIALBUS)}, 211 212 {ACPI_RSC_MOVE_SERIAL_RES, ACPI_RS_OFFSET (Data.CommonSerialBus.ResourceSource.StringPtr), 213 AML_OFFSET (CommonSerialBus.TypeDataLength), 214 sizeof (AML_RESOURCE_COMMON_SERIALBUS)}, 215 216 /* I2C bus type specific */ 217 218 {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.I2cSerialBus.AccessMode), 219 AML_OFFSET (I2cSerialBus.TypeSpecificFlags), 220 0}, 221 222 {ACPI_RSC_MOVE32, ACPI_RS_OFFSET (Data.I2cSerialBus.ConnectionSpeed), 223 AML_OFFSET (I2cSerialBus.ConnectionSpeed), 224 1}, 225 226 {ACPI_RSC_MOVE16, ACPI_RS_OFFSET (Data.I2cSerialBus.SlaveAddress), 227 AML_OFFSET (I2cSerialBus.SlaveAddress), 228 1}, 229 }; 230 231 232 /******************************************************************************* 233 * 234 * AcpiRsConvertSpiSerialBus 235 * 236 ******************************************************************************/ 237 238 ACPI_RSCONVERT_INFO AcpiRsConvertSpiSerialBus[20] = 239 { 240 {ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_SERIAL_BUS, 241 ACPI_RS_SIZE (ACPI_RESOURCE_SPI_SERIALBUS), 242 ACPI_RSC_TABLE_SIZE (AcpiRsConvertSpiSerialBus)}, 243 244 {ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_SERIAL_BUS, 245 sizeof (AML_RESOURCE_SPI_SERIALBUS), 246 0}, 247 248 {ACPI_RSC_MOVE8, ACPI_RS_OFFSET (Data.CommonSerialBus.RevisionId), 249 AML_OFFSET (CommonSerialBus.RevisionId), 250 1}, 251 252 {ACPI_RSC_MOVE8, ACPI_RS_OFFSET (Data.CommonSerialBus.Type), 253 AML_OFFSET (CommonSerialBus.Type), 254 1}, 255 256 {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.CommonSerialBus.SlaveMode), 257 AML_OFFSET (CommonSerialBus.Flags), 258 0}, 259 260 {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.CommonSerialBus.ProducerConsumer), 261 AML_OFFSET (CommonSerialBus.Flags), 262 1}, 263 264 {ACPI_RSC_MOVE8, ACPI_RS_OFFSET (Data.CommonSerialBus.TypeRevisionId), 265 AML_OFFSET (CommonSerialBus.TypeRevisionId), 266 1}, 267 268 {ACPI_RSC_MOVE16, ACPI_RS_OFFSET (Data.CommonSerialBus.TypeDataLength), 269 AML_OFFSET (CommonSerialBus.TypeDataLength), 270 1}, 271 272 /* Vendor data */ 273 274 {ACPI_RSC_COUNT_SERIAL_VEN, ACPI_RS_OFFSET (Data.CommonSerialBus.VendorLength), 275 AML_OFFSET (CommonSerialBus.TypeDataLength), 276 AML_RESOURCE_SPI_MIN_DATA_LEN}, 277 278 {ACPI_RSC_MOVE_SERIAL_VEN, ACPI_RS_OFFSET (Data.CommonSerialBus.VendorData), 279 0, 280 sizeof (AML_RESOURCE_SPI_SERIALBUS)}, 281 282 /* Resource Source */ 283 284 {ACPI_RSC_MOVE8, ACPI_RS_OFFSET (Data.CommonSerialBus.ResourceSource.Index), 285 AML_OFFSET (CommonSerialBus.ResSourceIndex), 286 1}, 287 288 {ACPI_RSC_COUNT_SERIAL_RES, ACPI_RS_OFFSET (Data.CommonSerialBus.ResourceSource.StringLength), 289 AML_OFFSET (CommonSerialBus.TypeDataLength), 290 sizeof (AML_RESOURCE_COMMON_SERIALBUS)}, 291 292 {ACPI_RSC_MOVE_SERIAL_RES, ACPI_RS_OFFSET (Data.CommonSerialBus.ResourceSource.StringPtr), 293 AML_OFFSET (CommonSerialBus.TypeDataLength), 294 sizeof (AML_RESOURCE_COMMON_SERIALBUS)}, 295 296 /* Spi bus type specific */ 297 298 {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.SpiSerialBus.WireMode), 299 AML_OFFSET (SpiSerialBus.TypeSpecificFlags), 300 0}, 301 302 {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.SpiSerialBus.DevicePolarity), 303 AML_OFFSET (SpiSerialBus.TypeSpecificFlags), 304 1}, 305 306 {ACPI_RSC_MOVE8, ACPI_RS_OFFSET (Data.SpiSerialBus.DataBitLength), 307 AML_OFFSET (SpiSerialBus.DataBitLength), 308 1}, 309 310 {ACPI_RSC_MOVE8, ACPI_RS_OFFSET (Data.SpiSerialBus.ClockPhase), 311 AML_OFFSET (SpiSerialBus.ClockPhase), 312 1}, 313 314 {ACPI_RSC_MOVE8, ACPI_RS_OFFSET (Data.SpiSerialBus.ClockPolarity), 315 AML_OFFSET (SpiSerialBus.ClockPolarity), 316 1}, 317 318 {ACPI_RSC_MOVE16, ACPI_RS_OFFSET (Data.SpiSerialBus.DeviceSelection), 319 AML_OFFSET (SpiSerialBus.DeviceSelection), 320 1}, 321 322 {ACPI_RSC_MOVE32, ACPI_RS_OFFSET (Data.SpiSerialBus.ConnectionSpeed), 323 AML_OFFSET (SpiSerialBus.ConnectionSpeed), 324 1}, 325 }; 326 327 328 /******************************************************************************* 329 * 330 * AcpiRsConvertUartSerialBus 331 * 332 ******************************************************************************/ 333 334 ACPI_RSCONVERT_INFO AcpiRsConvertUartSerialBus[22] = 335 { 336 {ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_SERIAL_BUS, 337 ACPI_RS_SIZE (ACPI_RESOURCE_UART_SERIALBUS), 338 ACPI_RSC_TABLE_SIZE (AcpiRsConvertUartSerialBus)}, 339 340 {ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_SERIAL_BUS, 341 sizeof (AML_RESOURCE_UART_SERIALBUS), 342 0}, 343 344 {ACPI_RSC_MOVE8, ACPI_RS_OFFSET (Data.CommonSerialBus.RevisionId), 345 AML_OFFSET (CommonSerialBus.RevisionId), 346 1}, 347 348 {ACPI_RSC_MOVE8, ACPI_RS_OFFSET (Data.CommonSerialBus.Type), 349 AML_OFFSET (CommonSerialBus.Type), 350 1}, 351 352 {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.CommonSerialBus.SlaveMode), 353 AML_OFFSET (CommonSerialBus.Flags), 354 0}, 355 356 {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.CommonSerialBus.ProducerConsumer), 357 AML_OFFSET (CommonSerialBus.Flags), 358 1}, 359 360 {ACPI_RSC_MOVE8, ACPI_RS_OFFSET (Data.CommonSerialBus.TypeRevisionId), 361 AML_OFFSET (CommonSerialBus.TypeRevisionId), 362 1}, 363 364 {ACPI_RSC_MOVE16, ACPI_RS_OFFSET (Data.CommonSerialBus.TypeDataLength), 365 AML_OFFSET (CommonSerialBus.TypeDataLength), 366 1}, 367 368 /* Vendor data */ 369 370 {ACPI_RSC_COUNT_SERIAL_VEN, ACPI_RS_OFFSET (Data.CommonSerialBus.VendorLength), 371 AML_OFFSET (CommonSerialBus.TypeDataLength), 372 AML_RESOURCE_UART_MIN_DATA_LEN}, 373 374 {ACPI_RSC_MOVE_SERIAL_VEN, ACPI_RS_OFFSET (Data.CommonSerialBus.VendorData), 375 0, 376 sizeof (AML_RESOURCE_UART_SERIALBUS)}, 377 378 /* Resource Source */ 379 380 {ACPI_RSC_MOVE8, ACPI_RS_OFFSET (Data.CommonSerialBus.ResourceSource.Index), 381 AML_OFFSET (CommonSerialBus.ResSourceIndex), 382 1}, 383 384 {ACPI_RSC_COUNT_SERIAL_RES, ACPI_RS_OFFSET (Data.CommonSerialBus.ResourceSource.StringLength), 385 AML_OFFSET (CommonSerialBus.TypeDataLength), 386 sizeof (AML_RESOURCE_COMMON_SERIALBUS)}, 387 388 {ACPI_RSC_MOVE_SERIAL_RES, ACPI_RS_OFFSET (Data.CommonSerialBus.ResourceSource.StringPtr), 389 AML_OFFSET (CommonSerialBus.TypeDataLength), 390 sizeof (AML_RESOURCE_COMMON_SERIALBUS)}, 391 392 /* Uart bus type specific */ 393 394 {ACPI_RSC_2BITFLAG, ACPI_RS_OFFSET (Data.UartSerialBus.FlowControl), 395 AML_OFFSET (UartSerialBus.TypeSpecificFlags), 396 0}, 397 398 {ACPI_RSC_2BITFLAG, ACPI_RS_OFFSET (Data.UartSerialBus.StopBits), 399 AML_OFFSET (UartSerialBus.TypeSpecificFlags), 400 2}, 401 402 {ACPI_RSC_3BITFLAG, ACPI_RS_OFFSET (Data.UartSerialBus.DataBits), 403 AML_OFFSET (UartSerialBus.TypeSpecificFlags), 404 4}, 405 406 {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.UartSerialBus.Endian), 407 AML_OFFSET (UartSerialBus.TypeSpecificFlags), 408 7}, 409 410 {ACPI_RSC_MOVE8, ACPI_RS_OFFSET (Data.UartSerialBus.Parity), 411 AML_OFFSET (UartSerialBus.Parity), 412 1}, 413 414 {ACPI_RSC_MOVE8, ACPI_RS_OFFSET (Data.UartSerialBus.LinesEnabled), 415 AML_OFFSET (UartSerialBus.LinesEnabled), 416 1}, 417 418 {ACPI_RSC_MOVE16, ACPI_RS_OFFSET (Data.UartSerialBus.RxFifoSize), 419 AML_OFFSET (UartSerialBus.RxFifoSize), 420 1}, 421 422 {ACPI_RSC_MOVE16, ACPI_RS_OFFSET (Data.UartSerialBus.TxFifoSize), 423 AML_OFFSET (UartSerialBus.TxFifoSize), 424 1}, 425 426 {ACPI_RSC_MOVE32, ACPI_RS_OFFSET (Data.UartSerialBus.DefaultBaudRate), 427 AML_OFFSET (UartSerialBus.DefaultBaudRate), 428 1}, 429 };