dmresrcl2.c revision 1.1.1.3 1 /*******************************************************************************
2 *
3 * Module Name: dmresrcl2.c - "Large" Resource Descriptor disassembly (#2)
4 *
5 ******************************************************************************/
6
7 /*
8 * Copyright (C) 2000 - 2015, 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 #include "acpi.h"
45 #include "accommon.h"
46 #include "acdisasm.h"
47
48
49 #ifdef ACPI_DISASSEMBLER
50
51 #define _COMPONENT ACPI_CA_DEBUGGER
52 ACPI_MODULE_NAME ("dbresrcl2")
53
54 /* Local prototypes */
55
56 static void
57 AcpiDmI2cSerialBusDescriptor (
58 ACPI_OP_WALK_INFO *Info,
59 AML_RESOURCE *Resource,
60 UINT32 Length,
61 UINT32 Level);
62
63 static void
64 AcpiDmSpiSerialBusDescriptor (
65 ACPI_OP_WALK_INFO *Info,
66 AML_RESOURCE *Resource,
67 UINT32 Length,
68 UINT32 Level);
69
70 static void
71 AcpiDmUartSerialBusDescriptor (
72 ACPI_OP_WALK_INFO *Info,
73 AML_RESOURCE *Resource,
74 UINT32 Length,
75 UINT32 Level);
76
77 static void
78 AcpiDmGpioCommon (
79 ACPI_OP_WALK_INFO *Info,
80 AML_RESOURCE *Resource,
81 UINT32 Level);
82
83 static void
84 AcpiDmDumpRawDataBuffer (
85 UINT8 *Buffer,
86 UINT32 Length,
87 UINT32 Level);
88
89
90 /* Dispatch table for the serial bus descriptors */
91
92 static ACPI_RESOURCE_HANDLER SerialBusResourceDispatch [] =
93 {
94 NULL,
95 AcpiDmI2cSerialBusDescriptor,
96 AcpiDmSpiSerialBusDescriptor,
97 AcpiDmUartSerialBusDescriptor
98 };
99
100
101 /*******************************************************************************
102 *
103 * FUNCTION: AcpiDmDumpRawDataBuffer
104 *
105 * PARAMETERS: Buffer - Pointer to the data bytes
106 * Length - Length of the descriptor in bytes
107 * Level - Current source code indentation level
108 *
109 * RETURN: None
110 *
111 * DESCRIPTION: Dump a data buffer as a RawDataBuffer() object. Used for
112 * vendor data bytes.
113 *
114 ******************************************************************************/
115
116 static void
117 AcpiDmDumpRawDataBuffer (
118 UINT8 *Buffer,
119 UINT32 Length,
120 UINT32 Level)
121 {
122 UINT32 Index;
123 UINT32 i;
124 UINT32 j;
125
126
127 if (!Length)
128 {
129 return;
130 }
131
132 AcpiOsPrintf ("RawDataBuffer (0x%.2X) // Vendor Data", Length);
133
134 AcpiOsPrintf ("\n");
135 AcpiDmIndent (Level + 1);
136 AcpiOsPrintf ("{\n");
137 AcpiDmIndent (Level + 2);
138
139 for (i = 0; i < Length;)
140 {
141 for (j = 0; j < 8; j++)
142 {
143 Index = i + j;
144 if (Index >= Length)
145 {
146 goto Finish;
147 }
148
149 AcpiOsPrintf ("0x%2.2X", Buffer[Index]);
150 if ((Index + 1) >= Length)
151 {
152 goto Finish;
153 }
154
155 AcpiOsPrintf (", ");
156 }
157 AcpiOsPrintf ("\n");
158 AcpiDmIndent (Level + 2);
159
160 i += 8;
161 }
162
163 Finish:
164 AcpiOsPrintf ("\n");
165 AcpiDmIndent (Level + 1);
166 AcpiOsPrintf ("}");
167 }
168
169
170 /*******************************************************************************
171 *
172 * FUNCTION: AcpiDmGpioCommon
173 *
174 * PARAMETERS: Info - Extra resource info
175 * Resource - Pointer to the resource descriptor
176 * Level - Current source code indentation level
177 *
178 * RETURN: None
179 *
180 * DESCRIPTION: Decode common parts of a GPIO Interrupt descriptor
181 *
182 ******************************************************************************/
183
184 static void
185 AcpiDmGpioCommon (
186 ACPI_OP_WALK_INFO *Info,
187 AML_RESOURCE *Resource,
188 UINT32 Level)
189 {
190 UINT16 *PinList;
191 UINT8 *VendorData;
192 char *DeviceName = NULL;
193 UINT32 PinCount;
194 UINT32 i;
195
196
197 /* ResourceSource, ResourceSourceIndex, ResourceType */
198
199 AcpiDmIndent (Level + 1);
200 if (Resource->Gpio.ResSourceOffset)
201 {
202 DeviceName = ACPI_ADD_PTR (char, Resource, Resource->Gpio.ResSourceOffset),
203 AcpiUtPrintString (DeviceName, ACPI_UINT16_MAX);
204 }
205
206 AcpiOsPrintf (", ");
207 AcpiOsPrintf ("0x%2.2X, ", Resource->Gpio.ResSourceIndex);
208 AcpiOsPrintf ("%s, ",
209 AcpiGbl_ConsumeDecode [ACPI_GET_1BIT_FLAG (Resource->Gpio.Flags)]);
210
211 /* Insert a descriptor name */
212
213 AcpiDmDescriptorName ();
214 AcpiOsPrintf (",");
215
216 /* Dump the vendor data */
217
218 if (Resource->Gpio.VendorOffset)
219 {
220 AcpiOsPrintf ("\n");
221 AcpiDmIndent (Level + 1);
222 VendorData = ACPI_ADD_PTR (UINT8, Resource,
223 Resource->Gpio.VendorOffset);
224
225 AcpiDmDumpRawDataBuffer (VendorData,
226 Resource->Gpio.VendorLength, Level);
227 }
228
229 AcpiOsPrintf (")\n");
230
231 /* Dump the interrupt list */
232
233 AcpiDmIndent (Level + 1);
234 AcpiOsPrintf ("{ // Pin list\n");
235
236 PinCount = ((UINT32) (Resource->Gpio.ResSourceOffset -
237 Resource->Gpio.PinTableOffset)) /
238 sizeof (UINT16);
239
240 PinList = (UINT16 *) ACPI_ADD_PTR (char, Resource,
241 Resource->Gpio.PinTableOffset);
242
243 for (i = 0; i < PinCount; i++)
244 {
245 AcpiDmIndent (Level + 2);
246 AcpiOsPrintf ("0x%4.4X%s\n", PinList[i], ((i + 1) < PinCount) ? "," : "");
247 }
248
249 AcpiDmIndent (Level + 1);
250 AcpiOsPrintf ("}\n");
251
252 MpSaveGpioInfo (Info->MappingOp, Resource, PinCount, PinList, DeviceName);
253 }
254
255
256 /*******************************************************************************
257 *
258 * FUNCTION: AcpiDmGpioIntDescriptor
259 *
260 * PARAMETERS: Info - Extra resource info
261 * Resource - Pointer to the resource descriptor
262 * Length - Length of the descriptor in bytes
263 * Level - Current source code indentation level
264 *
265 * RETURN: None
266 *
267 * DESCRIPTION: Decode a GPIO Interrupt descriptor
268 *
269 ******************************************************************************/
270
271 static void
272 AcpiDmGpioIntDescriptor (
273 ACPI_OP_WALK_INFO *Info,
274 AML_RESOURCE *Resource,
275 UINT32 Length,
276 UINT32 Level)
277 {
278
279 /* Dump the GpioInt-specific portion of the descriptor */
280
281 /* EdgeLevel, ActiveLevel, Shared */
282
283 AcpiDmIndent (Level);
284 AcpiOsPrintf ("GpioInt (%s, %s, %s, ",
285 AcpiGbl_HeDecode [ACPI_GET_1BIT_FLAG (Resource->Gpio.IntFlags)],
286 AcpiGbl_LlDecode [ACPI_EXTRACT_2BIT_FLAG (Resource->Gpio.IntFlags, 1)],
287 AcpiGbl_ShrDecode [ACPI_EXTRACT_2BIT_FLAG (Resource->Gpio.IntFlags, 3)]);
288
289 /* PinConfig, DebounceTimeout */
290
291 if (Resource->Gpio.PinConfig <= 3)
292 {
293 AcpiOsPrintf ("%s, ",
294 AcpiGbl_PpcDecode[Resource->Gpio.PinConfig]);
295 }
296 else
297 {
298 AcpiOsPrintf ("0x%2.2X, ", Resource->Gpio.PinConfig);
299 }
300 AcpiOsPrintf ("0x%4.4X,\n", Resource->Gpio.DebounceTimeout);
301
302 /* Dump the GpioInt/GpioIo common portion of the descriptor */
303
304 AcpiDmGpioCommon (Info, Resource, Level);
305 }
306
307
308 /*******************************************************************************
309 *
310 * FUNCTION: AcpiDmGpioIoDescriptor
311 *
312 * PARAMETERS: Info - Extra resource info
313 * Resource - Pointer to the resource descriptor
314 * Length - Length of the descriptor in bytes
315 * Level - Current source code indentation level
316 *
317 * RETURN: None
318 *
319 * DESCRIPTION: Decode a GPIO I/O descriptor
320 *
321 ******************************************************************************/
322
323 static void
324 AcpiDmGpioIoDescriptor (
325 ACPI_OP_WALK_INFO *Info,
326 AML_RESOURCE *Resource,
327 UINT32 Length,
328 UINT32 Level)
329 {
330
331 /* Dump the GpioIo-specific portion of the descriptor */
332
333 /* Shared, PinConfig */
334
335 AcpiDmIndent (Level);
336 AcpiOsPrintf ("GpioIo (%s, ",
337 AcpiGbl_ShrDecode [ACPI_EXTRACT_2BIT_FLAG (Resource->Gpio.IntFlags, 3)]);
338
339 if (Resource->Gpio.PinConfig <= 3)
340 {
341 AcpiOsPrintf ("%s, ",
342 AcpiGbl_PpcDecode[Resource->Gpio.PinConfig]);
343 }
344 else
345 {
346 AcpiOsPrintf ("0x%2.2X, ", Resource->Gpio.PinConfig);
347 }
348
349 /* DebounceTimeout, DriveStrength, IoRestriction */
350
351 AcpiOsPrintf ("0x%4.4X, ", Resource->Gpio.DebounceTimeout);
352 AcpiOsPrintf ("0x%4.4X, ", Resource->Gpio.DriveStrength);
353 AcpiOsPrintf ("%s,\n",
354 AcpiGbl_IorDecode [ACPI_GET_2BIT_FLAG (Resource->Gpio.IntFlags)]);
355
356 /* Dump the GpioInt/GpioIo common portion of the descriptor */
357
358 AcpiDmGpioCommon (Info, Resource, Level);
359 }
360
361
362 /*******************************************************************************
363 *
364 * FUNCTION: AcpiDmGpioDescriptor
365 *
366 * PARAMETERS: Info - Extra resource info
367 * Resource - Pointer to the resource descriptor
368 * Length - Length of the descriptor in bytes
369 * Level - Current source code indentation level
370 *
371 * RETURN: None
372 *
373 * DESCRIPTION: Decode a GpioInt/GpioIo GPIO Interrupt/IO descriptor
374 *
375 ******************************************************************************/
376
377 void
378 AcpiDmGpioDescriptor (
379 ACPI_OP_WALK_INFO *Info,
380 AML_RESOURCE *Resource,
381 UINT32 Length,
382 UINT32 Level)
383 {
384 UINT8 ConnectionType;
385
386
387 ConnectionType = Resource->Gpio.ConnectionType;
388
389 switch (ConnectionType)
390 {
391 case AML_RESOURCE_GPIO_TYPE_INT:
392
393 AcpiDmGpioIntDescriptor (Info, Resource, Length, Level);
394 break;
395
396 case AML_RESOURCE_GPIO_TYPE_IO:
397
398 AcpiDmGpioIoDescriptor (Info, Resource, Length, Level);
399 break;
400
401 default:
402
403 AcpiOsPrintf ("Unknown GPIO type\n");
404 break;
405 }
406 }
407
408
409 /*******************************************************************************
410 *
411 * FUNCTION: AcpiDmDumpSerialBusVendorData
412 *
413 * PARAMETERS: Resource - Pointer to the resource descriptor
414 *
415 * RETURN: None
416 *
417 * DESCRIPTION: Dump optional serial bus vendor data
418 *
419 ******************************************************************************/
420
421 static void
422 AcpiDmDumpSerialBusVendorData (
423 AML_RESOURCE *Resource,
424 UINT32 Level)
425 {
426 UINT8 *VendorData;
427 UINT32 VendorLength;
428
429
430 /* Get the (optional) vendor data and length */
431
432 switch (Resource->CommonSerialBus.Type)
433 {
434 case AML_RESOURCE_I2C_SERIALBUSTYPE:
435
436 VendorLength = Resource->CommonSerialBus.TypeDataLength -
437 AML_RESOURCE_I2C_MIN_DATA_LEN;
438
439 VendorData = ACPI_ADD_PTR (UINT8, Resource,
440 sizeof (AML_RESOURCE_I2C_SERIALBUS));
441 break;
442
443 case AML_RESOURCE_SPI_SERIALBUSTYPE:
444
445 VendorLength = Resource->CommonSerialBus.TypeDataLength -
446 AML_RESOURCE_SPI_MIN_DATA_LEN;
447
448 VendorData = ACPI_ADD_PTR (UINT8, Resource,
449 sizeof (AML_RESOURCE_SPI_SERIALBUS));
450 break;
451
452 case AML_RESOURCE_UART_SERIALBUSTYPE:
453
454 VendorLength = Resource->CommonSerialBus.TypeDataLength -
455 AML_RESOURCE_UART_MIN_DATA_LEN;
456
457 VendorData = ACPI_ADD_PTR (UINT8, Resource,
458 sizeof (AML_RESOURCE_UART_SERIALBUS));
459 break;
460
461 default:
462
463 return;
464 }
465
466 /* Dump the vendor bytes as a RawDataBuffer object */
467
468 AcpiDmDumpRawDataBuffer (VendorData, VendorLength, Level);
469 }
470
471
472 /*******************************************************************************
473 *
474 * FUNCTION: AcpiDmI2cSerialBusDescriptor
475 *
476 * PARAMETERS: Info - Extra resource info
477 * Resource - Pointer to the resource descriptor
478 * Length - Length of the descriptor in bytes
479 * Level - Current source code indentation level
480 *
481 * RETURN: None
482 *
483 * DESCRIPTION: Decode a I2C serial bus descriptor
484 *
485 ******************************************************************************/
486
487 static void
488 AcpiDmI2cSerialBusDescriptor (
489 ACPI_OP_WALK_INFO *Info,
490 AML_RESOURCE *Resource,
491 UINT32 Length,
492 UINT32 Level)
493 {
494 UINT32 ResourceSourceOffset;
495 char *DeviceName;
496
497
498 /* SlaveAddress, SlaveMode, ConnectionSpeed, AddressingMode */
499
500 AcpiDmIndent (Level);
501 AcpiOsPrintf ("I2cSerialBus (0x%4.4X, %s, 0x%8.8X,\n",
502 Resource->I2cSerialBus.SlaveAddress,
503 AcpiGbl_SmDecode [ACPI_GET_1BIT_FLAG (Resource->I2cSerialBus.Flags)],
504 Resource->I2cSerialBus.ConnectionSpeed);
505
506 AcpiDmIndent (Level + 1);
507 AcpiOsPrintf ("%s, ",
508 AcpiGbl_AmDecode [ACPI_GET_1BIT_FLAG (Resource->I2cSerialBus.TypeSpecificFlags)]);
509
510 /* ResourceSource is a required field */
511
512 ResourceSourceOffset = sizeof (AML_RESOURCE_COMMON_SERIALBUS) +
513 Resource->CommonSerialBus.TypeDataLength;
514
515 DeviceName = ACPI_ADD_PTR (char, Resource, ResourceSourceOffset),
516 AcpiUtPrintString (DeviceName, ACPI_UINT16_MAX);
517
518 /* ResourceSourceIndex, ResourceUsage */
519
520 AcpiOsPrintf (",\n");
521 AcpiDmIndent (Level + 1);
522 AcpiOsPrintf ("0x%2.2X, ", Resource->I2cSerialBus.ResSourceIndex);
523
524 AcpiOsPrintf ("%s, ",
525 AcpiGbl_ConsumeDecode [ACPI_EXTRACT_1BIT_FLAG (Resource->I2cSerialBus.Flags, 1)]);
526
527 /* Insert a descriptor name */
528
529 AcpiDmDescriptorName ();
530 AcpiOsPrintf (",\n");
531
532 /* Dump the vendor data */
533
534 AcpiDmIndent (Level + 1);
535 AcpiDmDumpSerialBusVendorData (Resource, Level);
536 AcpiOsPrintf (")\n");
537
538 MpSaveSerialInfo (Info->MappingOp, Resource, DeviceName);
539 }
540
541
542 /*******************************************************************************
543 *
544 * FUNCTION: AcpiDmSpiSerialBusDescriptor
545 *
546 * PARAMETERS: Info - Extra resource info
547 * Resource - Pointer to the resource descriptor
548 * Length - Length of the descriptor in bytes
549 * Level - Current source code indentation level
550 *
551 * RETURN: None
552 *
553 * DESCRIPTION: Decode a SPI serial bus descriptor
554 *
555 ******************************************************************************/
556
557 static void
558 AcpiDmSpiSerialBusDescriptor (
559 ACPI_OP_WALK_INFO *Info,
560 AML_RESOURCE *Resource,
561 UINT32 Length,
562 UINT32 Level)
563 {
564 UINT32 ResourceSourceOffset;
565 char *DeviceName;
566
567
568 /* DeviceSelection, DeviceSelectionPolarity, WireMode, DataBitLength */
569
570 AcpiDmIndent (Level);
571 AcpiOsPrintf ("SpiSerialBus (0x%4.4X, %s, %s, 0x%2.2X,\n",
572 Resource->SpiSerialBus.DeviceSelection,
573 AcpiGbl_DpDecode [ACPI_EXTRACT_1BIT_FLAG (Resource->SpiSerialBus.TypeSpecificFlags, 1)],
574 AcpiGbl_WmDecode [ACPI_GET_1BIT_FLAG (Resource->SpiSerialBus.TypeSpecificFlags)],
575 Resource->SpiSerialBus.DataBitLength);
576
577 /* SlaveMode, ConnectionSpeed, ClockPolarity, ClockPhase */
578
579 AcpiDmIndent (Level + 1);
580 AcpiOsPrintf ("%s, 0x%8.8X, %s,\n",
581 AcpiGbl_SmDecode [ACPI_GET_1BIT_FLAG (Resource->SpiSerialBus.Flags)],
582 Resource->SpiSerialBus.ConnectionSpeed,
583 AcpiGbl_CpoDecode [ACPI_GET_1BIT_FLAG (Resource->SpiSerialBus.ClockPolarity)]);
584
585 AcpiDmIndent (Level + 1);
586 AcpiOsPrintf ("%s, ",
587 AcpiGbl_CphDecode [ACPI_GET_1BIT_FLAG (Resource->SpiSerialBus.ClockPhase)]);
588
589 /* ResourceSource is a required field */
590
591 ResourceSourceOffset = sizeof (AML_RESOURCE_COMMON_SERIALBUS) +
592 Resource->CommonSerialBus.TypeDataLength;
593
594 DeviceName = ACPI_ADD_PTR (char, Resource, ResourceSourceOffset),
595 AcpiUtPrintString (DeviceName, ACPI_UINT16_MAX);
596
597 /* ResourceSourceIndex, ResourceUsage */
598
599 AcpiOsPrintf (",\n");
600 AcpiDmIndent (Level + 1);
601 AcpiOsPrintf ("0x%2.2X, ", Resource->SpiSerialBus.ResSourceIndex);
602
603 AcpiOsPrintf ("%s, ",
604 AcpiGbl_ConsumeDecode [ACPI_EXTRACT_1BIT_FLAG (Resource->SpiSerialBus.Flags, 1)]);
605
606 /* Insert a descriptor name */
607
608 AcpiDmDescriptorName ();
609 AcpiOsPrintf (",\n");
610
611 /* Dump the vendor data */
612
613 AcpiDmIndent (Level + 1);
614 AcpiDmDumpSerialBusVendorData (Resource, Level);
615 AcpiOsPrintf (")\n");
616
617 MpSaveSerialInfo (Info->MappingOp, Resource, DeviceName);
618 }
619
620
621 /*******************************************************************************
622 *
623 * FUNCTION: AcpiDmUartSerialBusDescriptor
624 *
625 * PARAMETERS: Info - Extra resource info
626 * Resource - Pointer to the resource descriptor
627 * Length - Length of the descriptor in bytes
628 * Level - Current source code indentation level
629 *
630 * RETURN: None
631 *
632 * DESCRIPTION: Decode a UART serial bus descriptor
633 *
634 ******************************************************************************/
635
636 static void
637 AcpiDmUartSerialBusDescriptor (
638 ACPI_OP_WALK_INFO *Info,
639 AML_RESOURCE *Resource,
640 UINT32 Length,
641 UINT32 Level)
642 {
643 UINT32 ResourceSourceOffset;
644 char *DeviceName;
645
646
647 /* ConnectionSpeed, BitsPerByte, StopBits */
648
649 AcpiDmIndent (Level);
650 AcpiOsPrintf ("UartSerialBus (0x%8.8X, %s, %s,\n",
651 Resource->UartSerialBus.DefaultBaudRate,
652 AcpiGbl_BpbDecode [ACPI_EXTRACT_3BIT_FLAG (Resource->UartSerialBus.TypeSpecificFlags, 4)],
653 AcpiGbl_SbDecode [ACPI_EXTRACT_2BIT_FLAG (Resource->UartSerialBus.TypeSpecificFlags, 2)]);
654
655 /* LinesInUse, IsBigEndian, Parity, FlowControl */
656
657 AcpiDmIndent (Level + 1);
658 AcpiOsPrintf ("0x%2.2X, %s, %s, %s,\n",
659 Resource->UartSerialBus.LinesEnabled,
660 AcpiGbl_EdDecode [ACPI_EXTRACT_1BIT_FLAG (Resource->UartSerialBus.TypeSpecificFlags, 7)],
661 AcpiGbl_PtDecode [ACPI_GET_3BIT_FLAG (Resource->UartSerialBus.Parity)],
662 AcpiGbl_FcDecode [ACPI_GET_2BIT_FLAG (Resource->UartSerialBus.TypeSpecificFlags)]);
663
664 /* ReceiveBufferSize, TransmitBufferSize */
665
666 AcpiDmIndent (Level + 1);
667 AcpiOsPrintf ("0x%4.4X, 0x%4.4X, ",
668 Resource->UartSerialBus.RxFifoSize,
669 Resource->UartSerialBus.TxFifoSize);
670
671 /* ResourceSource is a required field */
672
673 ResourceSourceOffset = sizeof (AML_RESOURCE_COMMON_SERIALBUS) +
674 Resource->CommonSerialBus.TypeDataLength;
675
676 DeviceName = ACPI_ADD_PTR (char, Resource, ResourceSourceOffset),
677 AcpiUtPrintString (DeviceName, ACPI_UINT16_MAX);
678
679 /* ResourceSourceIndex, ResourceUsage */
680
681 AcpiOsPrintf (",\n");
682 AcpiDmIndent (Level + 1);
683 AcpiOsPrintf ("0x%2.2X, ", Resource->UartSerialBus.ResSourceIndex);
684
685 AcpiOsPrintf ("%s, ",
686 AcpiGbl_ConsumeDecode [ACPI_EXTRACT_1BIT_FLAG (Resource->UartSerialBus.Flags, 1)]);
687
688 /* Insert a descriptor name */
689
690 AcpiDmDescriptorName ();
691 AcpiOsPrintf (",\n");
692
693 /* Dump the vendor data */
694
695 AcpiDmIndent (Level + 1);
696 AcpiDmDumpSerialBusVendorData (Resource, Level);
697 AcpiOsPrintf (")\n");
698
699 MpSaveSerialInfo (Info->MappingOp, Resource, DeviceName);
700 }
701
702
703 /*******************************************************************************
704 *
705 * FUNCTION: AcpiDmSerialBusDescriptor
706 *
707 * PARAMETERS: Info - Extra resource info
708 * Resource - Pointer to the resource descriptor
709 * Length - Length of the descriptor in bytes
710 * Level - Current source code indentation level
711 *
712 * RETURN: None
713 *
714 * DESCRIPTION: Decode a I2C/SPI/UART serial bus descriptor
715 *
716 ******************************************************************************/
717
718 void
719 AcpiDmSerialBusDescriptor (
720 ACPI_OP_WALK_INFO *Info,
721 AML_RESOURCE *Resource,
722 UINT32 Length,
723 UINT32 Level)
724 {
725
726 SerialBusResourceDispatch [Resource->CommonSerialBus.Type] (
727 Info, Resource, Length, Level);
728 }
729
730 #endif
731