dmresrcl2.c revision 243347
1275970Scy/*******************************************************************************
2275970Scy *
3275970Scy * Module Name: dmresrcl2.c - "Large" Resource Descriptor disassembly (#2)
4275970Scy *
5275970Scy ******************************************************************************/
6275970Scy
7275970Scy/*
8275970Scy * Copyright (C) 2000 - 2012, Intel Corp.
9275970Scy * All rights reserved.
10275970Scy *
11275970Scy * Redistribution and use in source and binary forms, with or without
12275970Scy * modification, are permitted provided that the following conditions
13275970Scy * are met:
14275970Scy * 1. Redistributions of source code must retain the above copyright
15275970Scy *    notice, this list of conditions, and the following disclaimer,
16275970Scy *    without modification.
17275970Scy * 2. Redistributions in binary form must reproduce at minimum a disclaimer
18275970Scy *    substantially similar to the "NO WARRANTY" disclaimer below
19275970Scy *    ("Disclaimer") and any redistribution must be conditioned upon
20275970Scy *    including a substantially similar Disclaimer requirement for further
21275970Scy *    binary redistribution.
22275970Scy * 3. Neither the names of the above-listed copyright holders nor the names
23275970Scy *    of any contributors may be used to endorse or promote products derived
24275970Scy *    from this software without specific prior written permission.
25275970Scy *
26275970Scy * Alternatively, this software may be distributed under the terms of the
27275970Scy * GNU General Public License ("GPL") version 2 as published by the Free
28275970Scy * Software Foundation.
29275970Scy *
30275970Scy * NO WARRANTY
31275970Scy * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
32275970Scy * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
33275970Scy * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
34275970Scy * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
35275970Scy * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
36275970Scy * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
37275970Scy * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
38275970Scy * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
39275970Scy * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
40275970Scy * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
41275970Scy * POSSIBILITY OF SUCH DAMAGES.
42275970Scy */
43275970Scy
44275970Scy
45275970Scy#include <contrib/dev/acpica/include/acpi.h>
46275970Scy#include <contrib/dev/acpica/include/accommon.h>
47275970Scy#include <contrib/dev/acpica/include/acdisasm.h>
48275970Scy
49275970Scy
50275970Scy#ifdef ACPI_DISASSEMBLER
51275970Scy
52275970Scy#define _COMPONENT          ACPI_CA_DEBUGGER
53275970Scy        ACPI_MODULE_NAME    ("dbresrcl2")
54275970Scy
55275970Scy/* Local prototypes */
56275970Scy
57275970Scystatic void
58275970ScyAcpiDmI2cSerialBusDescriptor (
59275970Scy    AML_RESOURCE            *Resource,
60275970Scy    UINT32                  Length,
61275970Scy    UINT32                  Level);
62275970Scy
63275970Scystatic void
64275970ScyAcpiDmSpiSerialBusDescriptor (
65275970Scy    AML_RESOURCE            *Resource,
66275970Scy    UINT32                  Length,
67275970Scy    UINT32                  Level);
68275970Scy
69275970Scystatic void
70275970ScyAcpiDmUartSerialBusDescriptor (
71275970Scy    AML_RESOURCE            *Resource,
72275970Scy    UINT32                  Length,
73275970Scy    UINT32                  Level);
74275970Scy
75275970Scystatic void
76AcpiDmGpioCommon (
77    AML_RESOURCE            *Resource,
78    UINT32                  Level);
79
80static void
81AcpiDmDumpRawDataBuffer (
82    UINT8                   *Buffer,
83    UINT32                  Length,
84    UINT32                  Level);
85
86
87/* Dispatch table for the serial bus descriptors */
88
89static ACPI_RESOURCE_HANDLER        SerialBusResourceDispatch [] =
90{
91    NULL,
92    AcpiDmI2cSerialBusDescriptor,
93    AcpiDmSpiSerialBusDescriptor,
94    AcpiDmUartSerialBusDescriptor
95};
96
97
98/*******************************************************************************
99 *
100 * FUNCTION:    AcpiDmDumpRawDataBuffer
101 *
102 * PARAMETERS:  Buffer              - Pointer to the data bytes
103 *              Length              - Length of the descriptor in bytes
104 *              Level               - Current source code indentation level
105 *
106 * RETURN:      None
107 *
108 * DESCRIPTION: Dump a data buffer as a RawDataBuffer() object. Used for
109 *              vendor data bytes.
110 *
111 ******************************************************************************/
112
113static void
114AcpiDmDumpRawDataBuffer (
115    UINT8                   *Buffer,
116    UINT32                  Length,
117    UINT32                  Level)
118{
119    UINT32                  Index;
120    UINT32                  i;
121    UINT32                  j;
122
123
124    if (!Length)
125    {
126        return;
127    }
128
129    AcpiOsPrintf ("RawDataBuffer (0x%.2X)  // Vendor Data", Length);
130
131    AcpiOsPrintf ("\n");
132    AcpiDmIndent (Level + 1);
133    AcpiOsPrintf ("{\n");
134    AcpiDmIndent (Level + 2);
135
136    for (i = 0; i < Length;)
137    {
138        for (j = 0; j < 8; j++)
139        {
140            Index = i + j;
141            if (Index >= Length)
142            {
143                goto Finish;
144            }
145
146            AcpiOsPrintf ("0x%2.2X", Buffer[Index]);
147            if ((Index + 1) >= Length)
148            {
149                goto Finish;
150            }
151
152            AcpiOsPrintf (", ");
153        }
154        AcpiOsPrintf ("\n");
155        AcpiDmIndent (Level + 2);
156
157        i += 8;
158    }
159
160Finish:
161    AcpiOsPrintf ("\n");
162    AcpiDmIndent (Level + 1);
163    AcpiOsPrintf ("}");
164}
165
166
167/*******************************************************************************
168 *
169 * FUNCTION:    AcpiDmGpioCommon
170 *
171 * PARAMETERS:  Resource            - Pointer to the resource descriptor
172 *              Level               - Current source code indentation level
173 *
174 * RETURN:      None
175 *
176 * DESCRIPTION: Decode common parts of a GPIO Interrupt descriptor
177 *
178 ******************************************************************************/
179
180static void
181AcpiDmGpioCommon (
182    AML_RESOURCE            *Resource,
183    UINT32                  Level)
184{
185    UINT32                  PinCount;
186    UINT16                  *PinList;
187    UINT8                   *VendorData;
188    UINT32                  i;
189
190
191    /* ResourceSource, ResourceSourceIndex, ResourceType */
192
193    AcpiDmIndent (Level + 1);
194    if (Resource->Gpio.ResSourceOffset)
195    {
196        AcpiUtPrintString (
197            ACPI_ADD_PTR (char, Resource, Resource->Gpio.ResSourceOffset),
198            ACPI_UINT8_MAX);
199    }
200
201    AcpiOsPrintf (", ");
202    AcpiOsPrintf ("0x%2.2X, ", Resource->Gpio.ResSourceIndex);
203    AcpiOsPrintf ("%s, ",
204        AcpiGbl_ConsumeDecode [ACPI_GET_1BIT_FLAG (Resource->Gpio.Flags)]);
205
206    /* Insert a descriptor name */
207
208    AcpiDmDescriptorName ();
209    AcpiOsPrintf (",");
210
211    /* Dump the vendor data */
212
213    if (Resource->Gpio.VendorOffset)
214    {
215        AcpiOsPrintf ("\n");
216        AcpiDmIndent (Level + 1);
217        VendorData = ACPI_ADD_PTR (UINT8, Resource,
218            Resource->Gpio.VendorOffset);
219
220        AcpiDmDumpRawDataBuffer (VendorData,
221            Resource->Gpio.VendorLength, Level);
222    }
223
224    AcpiOsPrintf (")\n");
225
226    /* Dump the interrupt list */
227
228    AcpiDmIndent (Level + 1);
229    AcpiOsPrintf ("{   // Pin list\n");
230
231    PinCount = ((UINT32) (Resource->Gpio.ResSourceOffset -
232        Resource->Gpio.PinTableOffset)) /
233        sizeof (UINT16);
234
235    PinList = (UINT16 *) ACPI_ADD_PTR (char, Resource,
236        Resource->Gpio.PinTableOffset);
237
238    for (i = 0; i < PinCount; i++)
239    {
240        AcpiDmIndent (Level + 2);
241        AcpiOsPrintf ("0x%4.4X%s\n", PinList[i], ((i + 1) < PinCount) ? "," : "");
242    }
243
244    AcpiDmIndent (Level + 1);
245    AcpiOsPrintf ("}\n");
246}
247
248
249/*******************************************************************************
250 *
251 * FUNCTION:    AcpiDmGpioIntDescriptor
252 *
253 * PARAMETERS:  Resource            - Pointer to the resource descriptor
254 *              Length              - Length of the descriptor in bytes
255 *              Level               - Current source code indentation level
256 *
257 * RETURN:      None
258 *
259 * DESCRIPTION: Decode a GPIO Interrupt descriptor
260 *
261 ******************************************************************************/
262
263static void
264AcpiDmGpioIntDescriptor (
265    AML_RESOURCE            *Resource,
266    UINT32                  Length,
267    UINT32                  Level)
268{
269
270    /* Dump the GpioInt-specific portion of the descriptor */
271
272    /* EdgeLevel, ActiveLevel, Shared */
273
274    AcpiDmIndent (Level);
275    AcpiOsPrintf ("GpioInt (%s, %s, %s, ",
276        AcpiGbl_HeDecode [ACPI_GET_1BIT_FLAG (Resource->Gpio.IntFlags)],
277        AcpiGbl_LlDecode [ACPI_EXTRACT_1BIT_FLAG (Resource->Gpio.IntFlags, 1)],
278        AcpiGbl_ShrDecode [ACPI_EXTRACT_2BIT_FLAG (Resource->Gpio.IntFlags, 3)]);
279
280    /* PinConfig, DebounceTimeout */
281
282    if (Resource->Gpio.PinConfig <= 3)
283    {
284        AcpiOsPrintf ("%s, ",
285            AcpiGbl_PpcDecode[Resource->Gpio.PinConfig]);
286    }
287    else
288    {
289        AcpiOsPrintf ("0x%2.2X, ", Resource->Gpio.PinConfig);
290    }
291    AcpiOsPrintf ("0x%4.4X,\n", Resource->Gpio.DebounceTimeout);
292
293    /* Dump the GpioInt/GpioIo common portion of the descriptor */
294
295    AcpiDmGpioCommon (Resource, Level);
296}
297
298
299/*******************************************************************************
300 *
301 * FUNCTION:    AcpiDmGpioIoDescriptor
302 *
303 * PARAMETERS:  Resource            - Pointer to the resource descriptor
304 *              Length              - Length of the descriptor in bytes
305 *              Level               - Current source code indentation level
306 *
307 * RETURN:      None
308 *
309 * DESCRIPTION: Decode a GPIO I/O descriptor
310 *
311 ******************************************************************************/
312
313static void
314AcpiDmGpioIoDescriptor (
315    AML_RESOURCE            *Resource,
316    UINT32                  Length,
317    UINT32                  Level)
318{
319
320    /* Dump the GpioIo-specific portion of the descriptor */
321
322    /* Shared, PinConfig */
323
324    AcpiDmIndent (Level);
325    AcpiOsPrintf ("GpioIo (%s, ",
326        AcpiGbl_ShrDecode [ACPI_EXTRACT_2BIT_FLAG (Resource->Gpio.IntFlags, 3)]);
327
328    if (Resource->Gpio.PinConfig <= 3)
329    {
330        AcpiOsPrintf ("%s, ",
331            AcpiGbl_PpcDecode[Resource->Gpio.PinConfig]);
332    }
333    else
334    {
335        AcpiOsPrintf ("0x%2.2X, ", Resource->Gpio.PinConfig);
336    }
337
338    /* DebounceTimeout, DriveStrength, IoRestriction */
339
340    AcpiOsPrintf ("0x%4.4X, ", Resource->Gpio.DebounceTimeout);
341    AcpiOsPrintf ("0x%4.4X, ", Resource->Gpio.DriveStrength);
342    AcpiOsPrintf ("%s,\n",
343        AcpiGbl_IorDecode [ACPI_GET_2BIT_FLAG (Resource->Gpio.IntFlags)]);
344
345    /* Dump the GpioInt/GpioIo common portion of the descriptor */
346
347    AcpiDmGpioCommon (Resource, Level);
348}
349
350
351/*******************************************************************************
352 *
353 * FUNCTION:    AcpiDmGpioDescriptor
354 *
355 * PARAMETERS:  Resource            - Pointer to the resource descriptor
356 *              Length              - Length of the descriptor in bytes
357 *              Level               - Current source code indentation level
358 *
359 * RETURN:      None
360 *
361 * DESCRIPTION: Decode a GpioInt/GpioIo GPIO Interrupt/IO descriptor
362 *
363 ******************************************************************************/
364
365void
366AcpiDmGpioDescriptor (
367    AML_RESOURCE            *Resource,
368    UINT32                  Length,
369    UINT32                  Level)
370{
371    UINT8                   ConnectionType;
372
373
374    ConnectionType = Resource->Gpio.ConnectionType;
375
376    switch (ConnectionType)
377    {
378    case AML_RESOURCE_GPIO_TYPE_INT:
379        AcpiDmGpioIntDescriptor (Resource, Length, Level);
380        break;
381
382    case AML_RESOURCE_GPIO_TYPE_IO:
383        AcpiDmGpioIoDescriptor (Resource, Length, Level);
384        break;
385
386    default:
387        AcpiOsPrintf ("Unknown GPIO type\n");
388        break;
389    }
390}
391
392
393/*******************************************************************************
394 *
395 * FUNCTION:    AcpiDmDumpSerialBusVendorData
396 *
397 * PARAMETERS:  Resource            - Pointer to the resource descriptor
398 *
399 * RETURN:      None
400 *
401 * DESCRIPTION: Dump optional serial bus vendor data
402 *
403 ******************************************************************************/
404
405static void
406AcpiDmDumpSerialBusVendorData (
407    AML_RESOURCE            *Resource,
408    UINT32                  Level)
409{
410    UINT8                   *VendorData;
411    UINT32                  VendorLength;
412
413
414    /* Get the (optional) vendor data and length */
415
416    switch (Resource->CommonSerialBus.Type)
417    {
418    case AML_RESOURCE_I2C_SERIALBUSTYPE:
419
420        VendorLength = Resource->CommonSerialBus.TypeDataLength -
421            AML_RESOURCE_I2C_MIN_DATA_LEN;
422
423        VendorData = ACPI_ADD_PTR (UINT8, Resource,
424            sizeof (AML_RESOURCE_I2C_SERIALBUS));
425        break;
426
427    case AML_RESOURCE_SPI_SERIALBUSTYPE:
428
429        VendorLength = Resource->CommonSerialBus.TypeDataLength -
430            AML_RESOURCE_SPI_MIN_DATA_LEN;
431
432        VendorData = ACPI_ADD_PTR (UINT8, Resource,
433            sizeof (AML_RESOURCE_SPI_SERIALBUS));
434        break;
435
436    case AML_RESOURCE_UART_SERIALBUSTYPE:
437
438        VendorLength = Resource->CommonSerialBus.TypeDataLength -
439            AML_RESOURCE_UART_MIN_DATA_LEN;
440
441        VendorData = ACPI_ADD_PTR (UINT8, Resource,
442            sizeof (AML_RESOURCE_UART_SERIALBUS));
443        break;
444
445    default:
446        return;
447    }
448
449    /* Dump the vendor bytes as a RawDataBuffer object */
450
451    AcpiDmDumpRawDataBuffer (VendorData, VendorLength, Level);
452}
453
454
455/*******************************************************************************
456 *
457 * FUNCTION:    AcpiDmI2cSerialBusDescriptor
458 *
459 * PARAMETERS:  Resource            - Pointer to the resource descriptor
460 *              Length              - Length of the descriptor in bytes
461 *              Level               - Current source code indentation level
462 *
463 * RETURN:      None
464 *
465 * DESCRIPTION: Decode a I2C serial bus descriptor
466 *
467 ******************************************************************************/
468
469static void
470AcpiDmI2cSerialBusDescriptor (
471    AML_RESOURCE            *Resource,
472    UINT32                  Length,
473    UINT32                  Level)
474{
475    UINT32                  ResourceSourceOffset;
476
477
478    /* SlaveAddress, SlaveMode, ConnectionSpeed, AddressingMode */
479
480    AcpiDmIndent (Level);
481    AcpiOsPrintf ("I2cSerialBus (0x%4.4X, %s, 0x%8.8X,\n",
482        Resource->I2cSerialBus.SlaveAddress,
483        AcpiGbl_SmDecode [ACPI_GET_1BIT_FLAG (Resource->I2cSerialBus.Flags)],
484        Resource->I2cSerialBus.ConnectionSpeed);
485
486    AcpiDmIndent (Level + 1);
487    AcpiOsPrintf ("%s, ",
488        AcpiGbl_AmDecode [ACPI_GET_1BIT_FLAG (Resource->I2cSerialBus.TypeSpecificFlags)]);
489
490    /* ResourceSource is a required field */
491
492    ResourceSourceOffset = sizeof (AML_RESOURCE_COMMON_SERIALBUS) +
493        Resource->CommonSerialBus.TypeDataLength;
494
495    AcpiUtPrintString (
496        ACPI_ADD_PTR (char, Resource, ResourceSourceOffset),
497        ACPI_UINT8_MAX);
498
499    /* ResourceSourceIndex, ResourceUsage */
500
501    AcpiOsPrintf (",\n");
502    AcpiDmIndent (Level + 1);
503    AcpiOsPrintf ("0x%2.2X, ", Resource->I2cSerialBus.ResSourceIndex);
504
505    AcpiOsPrintf ("%s, ",
506        AcpiGbl_ConsumeDecode [ACPI_EXTRACT_1BIT_FLAG (Resource->I2cSerialBus.Flags, 1)]);
507
508    /* Insert a descriptor name */
509
510    AcpiDmDescriptorName ();
511    AcpiOsPrintf (",\n");
512
513    /* Dump the vendor data */
514
515    AcpiDmIndent (Level + 1);
516    AcpiDmDumpSerialBusVendorData (Resource, Level);
517    AcpiOsPrintf (")\n");
518}
519
520
521/*******************************************************************************
522 *
523 * FUNCTION:    AcpiDmSpiSerialBusDescriptor
524 *
525 * PARAMETERS:  Resource            - Pointer to the resource descriptor
526 *              Length              - Length of the descriptor in bytes
527 *              Level               - Current source code indentation level
528 *
529 * RETURN:      None
530 *
531 * DESCRIPTION: Decode a SPI serial bus descriptor
532 *
533 ******************************************************************************/
534
535static void
536AcpiDmSpiSerialBusDescriptor (
537    AML_RESOURCE            *Resource,
538    UINT32                  Length,
539    UINT32                  Level)
540{
541    UINT32                  ResourceSourceOffset;
542
543
544    /* DeviceSelection, DeviceSelectionPolarity, WireMode, DataBitLength */
545
546    AcpiDmIndent (Level);
547    AcpiOsPrintf ("SpiSerialBus (0x%4.4X, %s, %s, 0x%2.2X,\n",
548        Resource->SpiSerialBus.DeviceSelection,
549        AcpiGbl_DpDecode [ACPI_EXTRACT_1BIT_FLAG (Resource->SpiSerialBus.TypeSpecificFlags, 1)],
550        AcpiGbl_WmDecode [ACPI_GET_1BIT_FLAG (Resource->SpiSerialBus.TypeSpecificFlags)],
551        Resource->SpiSerialBus.DataBitLength);
552
553    /* SlaveMode, ConnectionSpeed, ClockPolarity, ClockPhase */
554
555    AcpiDmIndent (Level + 1);
556    AcpiOsPrintf ("%s, 0x%8.8X, %s,\n",
557        AcpiGbl_SmDecode [ACPI_GET_1BIT_FLAG (Resource->SpiSerialBus.Flags)],
558        Resource->SpiSerialBus.ConnectionSpeed,
559        AcpiGbl_CpoDecode [ACPI_GET_1BIT_FLAG (Resource->SpiSerialBus.ClockPolarity)]);
560
561    AcpiDmIndent (Level + 1);
562    AcpiOsPrintf ("%s, ",
563        AcpiGbl_CphDecode [ACPI_GET_1BIT_FLAG (Resource->SpiSerialBus.ClockPhase)]);
564
565    /* ResourceSource is a required field */
566
567    ResourceSourceOffset = sizeof (AML_RESOURCE_COMMON_SERIALBUS) +
568        Resource->CommonSerialBus.TypeDataLength;
569
570    AcpiUtPrintString (
571        ACPI_ADD_PTR (char, Resource, ResourceSourceOffset),
572        ACPI_UINT8_MAX);
573
574    /* ResourceSourceIndex, ResourceUsage */
575
576    AcpiOsPrintf (",\n");
577    AcpiDmIndent (Level + 1);
578    AcpiOsPrintf ("0x%2.2X, ", Resource->SpiSerialBus.ResSourceIndex);
579
580    AcpiOsPrintf ("%s, ",
581        AcpiGbl_ConsumeDecode [ACPI_EXTRACT_1BIT_FLAG (Resource->SpiSerialBus.Flags, 1)]);
582
583    /* Insert a descriptor name */
584
585    AcpiDmDescriptorName ();
586    AcpiOsPrintf (",\n");
587
588    /* Dump the vendor data */
589
590    AcpiDmIndent (Level + 1);
591    AcpiDmDumpSerialBusVendorData (Resource, Level);
592    AcpiOsPrintf (")\n");
593}
594
595
596/*******************************************************************************
597 *
598 * FUNCTION:    AcpiDmUartSerialBusDescriptor
599 *
600 * PARAMETERS:  Resource            - Pointer to the resource descriptor
601 *              Length              - Length of the descriptor in bytes
602 *              Level               - Current source code indentation level
603 *
604 * RETURN:      None
605 *
606 * DESCRIPTION: Decode a UART serial bus descriptor
607 *
608 ******************************************************************************/
609
610static void
611AcpiDmUartSerialBusDescriptor (
612    AML_RESOURCE            *Resource,
613    UINT32                  Length,
614    UINT32                  Level)
615{
616    UINT32                  ResourceSourceOffset;
617
618
619    /* ConnectionSpeed, BitsPerByte, StopBits */
620
621    AcpiDmIndent (Level);
622    AcpiOsPrintf ("UartSerialBus (0x%8.8X, %s, %s,\n",
623        Resource->UartSerialBus.DefaultBaudRate,
624        AcpiGbl_BpbDecode [ACPI_EXTRACT_3BIT_FLAG (Resource->UartSerialBus.TypeSpecificFlags, 4)],
625        AcpiGbl_SbDecode [ACPI_EXTRACT_2BIT_FLAG (Resource->UartSerialBus.TypeSpecificFlags, 2)]);
626
627    /* LinesInUse, IsBigEndian, Parity, FlowControl */
628
629    AcpiDmIndent (Level + 1);
630    AcpiOsPrintf ("0x%2.2X, %s, %s, %s,\n",
631        Resource->UartSerialBus.LinesEnabled,
632        AcpiGbl_EdDecode [ACPI_EXTRACT_1BIT_FLAG (Resource->UartSerialBus.TypeSpecificFlags, 7)],
633        AcpiGbl_PtDecode [ACPI_GET_3BIT_FLAG (Resource->UartSerialBus.Parity)],
634        AcpiGbl_FcDecode [ACPI_GET_2BIT_FLAG (Resource->UartSerialBus.TypeSpecificFlags)]);
635
636    /* ReceiveBufferSize, TransmitBufferSize */
637
638    AcpiDmIndent (Level + 1);
639    AcpiOsPrintf ("0x%4.4X, 0x%4.4X, ",
640        Resource->UartSerialBus.RxFifoSize,
641        Resource->UartSerialBus.TxFifoSize);
642
643    /* ResourceSource is a required field */
644
645    ResourceSourceOffset = sizeof (AML_RESOURCE_COMMON_SERIALBUS) +
646        Resource->CommonSerialBus.TypeDataLength;
647
648    AcpiUtPrintString (
649        ACPI_ADD_PTR (char, Resource, ResourceSourceOffset),
650        ACPI_UINT8_MAX);
651
652    /* ResourceSourceIndex, ResourceUsage */
653
654    AcpiOsPrintf (",\n");
655    AcpiDmIndent (Level + 1);
656    AcpiOsPrintf ("0x%2.2X, ", Resource->UartSerialBus.ResSourceIndex);
657
658    AcpiOsPrintf ("%s, ",
659        AcpiGbl_ConsumeDecode [ACPI_EXTRACT_1BIT_FLAG (Resource->UartSerialBus.Flags, 1)]);
660
661    /* Insert a descriptor name */
662
663    AcpiDmDescriptorName ();
664    AcpiOsPrintf (",\n");
665
666    /* Dump the vendor data */
667
668    AcpiDmIndent (Level + 1);
669    AcpiDmDumpSerialBusVendorData (Resource, Level);
670    AcpiOsPrintf (")\n");
671}
672
673
674/*******************************************************************************
675 *
676 * FUNCTION:    AcpiDmSerialBusDescriptor
677 *
678 * PARAMETERS:  Resource            - Pointer to the resource descriptor
679 *              Length              - Length of the descriptor in bytes
680 *              Level               - Current source code indentation level
681 *
682 * RETURN:      None
683 *
684 * DESCRIPTION: Decode a I2C/SPI/UART serial bus descriptor
685 *
686 ******************************************************************************/
687
688void
689AcpiDmSerialBusDescriptor (
690    AML_RESOURCE            *Resource,
691    UINT32                  Length,
692    UINT32                  Level)
693{
694
695    SerialBusResourceDispatch [Resource->CommonSerialBus.Type] (
696        Resource, Length, Level);
697}
698
699#endif
700