rsserial.c revision 1.1 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 };
430