dmresrcl2.c revision 1.1.1.14 1 /*******************************************************************************
2 *
3 * Module Name: dmresrcl2.c - "Large" Resource Descriptor disassembly (#2)
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 "acdisasm.h"
47
48
49 #define _COMPONENT ACPI_CA_DEBUGGER
50 ACPI_MODULE_NAME ("dbresrcl2")
51
52 /* Local prototypes */
53
54 static void
55 AcpiDmCsi2SerialBusDescriptor (
56 ACPI_OP_WALK_INFO *Info,
57 AML_RESOURCE *Resource,
58 UINT32 Length,
59 UINT32 Level);
60
61 static void
62 AcpiDmI2cSerialBusDescriptor (
63 ACPI_OP_WALK_INFO *Info,
64 AML_RESOURCE *Resource,
65 UINT32 Length,
66 UINT32 Level);
67
68 static void
69 AcpiDmSpiSerialBusDescriptor (
70 ACPI_OP_WALK_INFO *Info,
71 AML_RESOURCE *Resource,
72 UINT32 Length,
73 UINT32 Level);
74
75 static void
76 AcpiDmUartSerialBusDescriptor (
77 ACPI_OP_WALK_INFO *Info,
78 AML_RESOURCE *Resource,
79 UINT32 Length,
80 UINT32 Level);
81
82 static void
83 AcpiDmGpioCommon (
84 ACPI_OP_WALK_INFO *Info,
85 AML_RESOURCE *Resource,
86 UINT32 Level);
87
88 static void
89 AcpiDmDumpRawDataBuffer (
90 UINT8 *Buffer,
91 UINT32 Length,
92 UINT32 Level);
93
94
95 /* Dispatch table for the serial bus descriptors */
96
97 static ACPI_RESOURCE_HANDLER SerialBusResourceDispatch [] =
98 {
99 NULL,
100 AcpiDmI2cSerialBusDescriptor,
101 AcpiDmSpiSerialBusDescriptor,
102 AcpiDmUartSerialBusDescriptor,
103 AcpiDmCsi2SerialBusDescriptor
104 };
105
106
107 /*******************************************************************************
108 *
109 * FUNCTION: AcpiDmDumpRawDataBuffer
110 *
111 * PARAMETERS: Buffer - Pointer to the data bytes
112 * Length - Length of the descriptor in bytes
113 * Level - Current source code indentation level
114 *
115 * RETURN: None
116 *
117 * DESCRIPTION: Dump a data buffer as a RawDataBuffer() object. Used for
118 * vendor data bytes.
119 *
120 ******************************************************************************/
121
122 static void
123 AcpiDmDumpRawDataBuffer (
124 UINT8 *Buffer,
125 UINT32 Length,
126 UINT32 Level)
127 {
128 UINT32 Index;
129 UINT32 i;
130 UINT32 j;
131
132
133 if (!Length)
134 {
135 return;
136 }
137
138 AcpiOsPrintf ("RawDataBuffer (0x%.2X) // Vendor Data", Length);
139
140 AcpiOsPrintf ("\n");
141 AcpiDmIndent (Level + 1);
142 AcpiOsPrintf ("{\n");
143 AcpiDmIndent (Level + 2);
144
145 for (i = 0; i < Length;)
146 {
147 for (j = 0; j < 8; j++)
148 {
149 Index = i + j;
150 if (Index >= Length)
151 {
152 goto Finish;
153 }
154
155 AcpiOsPrintf ("0x%2.2X", Buffer[Index]);
156 if ((Index + 1) >= Length)
157 {
158 goto Finish;
159 }
160
161 AcpiOsPrintf (", ");
162 }
163
164 AcpiOsPrintf ("\n");
165 AcpiDmIndent (Level + 2);
166
167 i += 8;
168 }
169
170 Finish:
171 AcpiOsPrintf ("\n");
172 AcpiDmIndent (Level + 1);
173 AcpiOsPrintf ("}");
174 }
175
176
177 /*******************************************************************************
178 *
179 * FUNCTION: AcpiDmGpioCommon
180 *
181 * PARAMETERS: Info - Extra resource info
182 * Resource - Pointer to the resource descriptor
183 * Level - Current source code indentation level
184 *
185 * RETURN: None
186 *
187 * DESCRIPTION: Decode common parts of a GPIO Interrupt descriptor
188 *
189 ******************************************************************************/
190
191 static void
192 AcpiDmGpioCommon (
193 ACPI_OP_WALK_INFO *Info,
194 AML_RESOURCE *Resource,
195 UINT32 Level)
196 {
197 UINT16 *PinList;
198 UINT8 *VendorData;
199 char *DeviceName = NULL;
200 UINT32 PinCount;
201 UINT32 i;
202
203
204 /* ResourceSource, ResourceSourceIndex, ResourceType */
205
206 AcpiDmIndent (Level + 1);
207 if (Resource->Gpio.ResSourceOffset)
208 {
209 DeviceName = ACPI_ADD_PTR (char,
210 Resource, Resource->Gpio.ResSourceOffset),
211 AcpiUtPrintString (DeviceName, ACPI_UINT16_MAX);
212 }
213
214 AcpiOsPrintf (", ");
215 AcpiOsPrintf ("0x%2.2X, ", Resource->Gpio.ResSourceIndex);
216 AcpiOsPrintf ("%s, ",
217 AcpiGbl_ConsumeDecode [ACPI_GET_1BIT_FLAG (Resource->Gpio.Flags)]);
218
219 /* Insert a descriptor name */
220
221 AcpiDmDescriptorName ();
222 AcpiOsPrintf (",");
223
224 /* Dump the vendor data */
225
226 if (Resource->Gpio.VendorOffset)
227 {
228 AcpiOsPrintf ("\n");
229 AcpiDmIndent (Level + 1);
230 VendorData = ACPI_ADD_PTR (UINT8, Resource,
231 Resource->Gpio.VendorOffset);
232
233 AcpiDmDumpRawDataBuffer (VendorData,
234 Resource->Gpio.VendorLength, Level);
235 }
236
237 AcpiOsPrintf (")\n");
238
239 /* Dump the interrupt list */
240
241 AcpiDmIndent (Level + 1);
242 AcpiOsPrintf ("{ // Pin list\n");
243
244 PinCount = ((UINT32) (Resource->Gpio.ResSourceOffset -
245 Resource->Gpio.PinTableOffset)) /
246 sizeof (UINT16);
247
248 PinList = (UINT16 *) ACPI_ADD_PTR (char, Resource,
249 Resource->Gpio.PinTableOffset);
250
251 for (i = 0; i < PinCount; i++)
252 {
253 AcpiDmIndent (Level + 2);
254 AcpiOsPrintf ("0x%4.4X%s\n", PinList[i],
255 ((i + 1) < PinCount) ? "," : "");
256 }
257
258 AcpiDmIndent (Level + 1);
259 AcpiOsPrintf ("}\n");
260
261 MpSaveGpioInfo (Info->MappingOp, Resource,
262 PinCount, PinList, DeviceName);
263 }
264
265
266 /*******************************************************************************
267 *
268 * FUNCTION: AcpiDmGpioIntDescriptor
269 *
270 * PARAMETERS: Info - Extra resource info
271 * Resource - Pointer to the resource descriptor
272 * Length - Length of the descriptor in bytes
273 * Level - Current source code indentation level
274 *
275 * RETURN: None
276 *
277 * DESCRIPTION: Decode a GPIO Interrupt descriptor
278 *
279 ******************************************************************************/
280
281 static void
282 AcpiDmGpioIntDescriptor (
283 ACPI_OP_WALK_INFO *Info,
284 AML_RESOURCE *Resource,
285 UINT32 Length,
286 UINT32 Level)
287 {
288
289 /* Dump the GpioInt-specific portion of the descriptor */
290
291 /* EdgeLevel, ActiveLevel, Shared */
292
293 AcpiDmIndent (Level);
294 AcpiOsPrintf ("GpioInt (%s, %s, %s, ",
295 AcpiGbl_HeDecode [ACPI_GET_1BIT_FLAG (Resource->Gpio.IntFlags)],
296 AcpiGbl_LlDecode [ACPI_EXTRACT_2BIT_FLAG (Resource->Gpio.IntFlags, 1)],
297 AcpiGbl_ShrDecode [ACPI_EXTRACT_2BIT_FLAG (Resource->Gpio.IntFlags, 3)]);
298
299 /* PinConfig, DebounceTimeout */
300
301 if (Resource->Gpio.PinConfig <= 3)
302 {
303 AcpiOsPrintf ("%s, ",
304 AcpiGbl_PpcDecode[Resource->Gpio.PinConfig]);
305 }
306 else
307 {
308 AcpiOsPrintf ("0x%2.2X, ", Resource->Gpio.PinConfig);
309 }
310 AcpiOsPrintf ("0x%4.4X,\n", Resource->Gpio.DebounceTimeout);
311
312 /* Dump the GpioInt/GpioIo common portion of the descriptor */
313
314 AcpiDmGpioCommon (Info, Resource, Level);
315 }
316
317
318 /*******************************************************************************
319 *
320 * FUNCTION: AcpiDmGpioIoDescriptor
321 *
322 * PARAMETERS: Info - Extra resource info
323 * Resource - Pointer to the resource descriptor
324 * Length - Length of the descriptor in bytes
325 * Level - Current source code indentation level
326 *
327 * RETURN: None
328 *
329 * DESCRIPTION: Decode a GPIO I/O descriptor
330 *
331 ******************************************************************************/
332
333 static void
334 AcpiDmGpioIoDescriptor (
335 ACPI_OP_WALK_INFO *Info,
336 AML_RESOURCE *Resource,
337 UINT32 Length,
338 UINT32 Level)
339 {
340
341 /* Dump the GpioIo-specific portion of the descriptor */
342
343 /* Shared, PinConfig */
344
345 AcpiDmIndent (Level);
346 AcpiOsPrintf ("GpioIo (%s, ",
347 AcpiGbl_ShrDecode [ACPI_EXTRACT_2BIT_FLAG (Resource->Gpio.IntFlags, 3)]);
348
349 if (Resource->Gpio.PinConfig <= 3)
350 {
351 AcpiOsPrintf ("%s, ",
352 AcpiGbl_PpcDecode[Resource->Gpio.PinConfig]);
353 }
354 else
355 {
356 AcpiOsPrintf ("0x%2.2X, ", Resource->Gpio.PinConfig);
357 }
358
359 /* DebounceTimeout, DriveStrength, IoRestriction */
360
361 AcpiOsPrintf ("0x%4.4X, ", Resource->Gpio.DebounceTimeout);
362 AcpiOsPrintf ("0x%4.4X, ", Resource->Gpio.DriveStrength);
363 AcpiOsPrintf ("%s,\n",
364 AcpiGbl_IorDecode [ACPI_GET_2BIT_FLAG (Resource->Gpio.IntFlags)]);
365
366 /* Dump the GpioInt/GpioIo common portion of the descriptor */
367
368 AcpiDmGpioCommon (Info, Resource, Level);
369 }
370
371
372 /*******************************************************************************
373 *
374 * FUNCTION: AcpiDmGpioDescriptor
375 *
376 * PARAMETERS: Info - Extra resource info
377 * Resource - Pointer to the resource descriptor
378 * Length - Length of the descriptor in bytes
379 * Level - Current source code indentation level
380 *
381 * RETURN: None
382 *
383 * DESCRIPTION: Decode a GpioInt/GpioIo GPIO Interrupt/IO descriptor
384 *
385 ******************************************************************************/
386
387 void
388 AcpiDmGpioDescriptor (
389 ACPI_OP_WALK_INFO *Info,
390 AML_RESOURCE *Resource,
391 UINT32 Length,
392 UINT32 Level)
393 {
394 UINT8 ConnectionType;
395
396
397 ConnectionType = Resource->Gpio.ConnectionType;
398
399 switch (ConnectionType)
400 {
401 case AML_RESOURCE_GPIO_TYPE_INT:
402
403 AcpiDmGpioIntDescriptor (Info, Resource, Length, Level);
404 break;
405
406 case AML_RESOURCE_GPIO_TYPE_IO:
407
408 AcpiDmGpioIoDescriptor (Info, Resource, Length, Level);
409 break;
410
411 default:
412
413 AcpiOsPrintf ("Unknown GPIO type\n");
414 break;
415 }
416 }
417
418 void
419 AcpiDmClockInputDescriptor (
420 ACPI_OP_WALK_INFO *Info,
421 AML_RESOURCE *Resource,
422 UINT32 Length,
423 UINT32 Level)
424 {
425 char *DeviceName = NULL;
426 UINT8 *ResourceIndex = NULL;
427 AcpiDmIndent (Level);
428
429 AcpiOsPrintf ("ClockInput (");
430
431 AcpiOsPrintf ("0x%8.8X, ", Resource->ClockInput.FrequencyNumerator);
432
433 AcpiOsPrintf ("0x%4.4X, ", Resource->ClockInput.FrequencyDivisor);
434
435 AcpiOsPrintf ("%s, ",
436 AcpiGbl_ClockInputScale [ACPI_EXTRACT_2BIT_FLAG (Resource->ClockInput.Flags, 1)]);
437
438 AcpiOsPrintf ("%s, ",
439 AcpiGbl_ClockInputMode [ACPI_GET_1BIT_FLAG (Resource->ClockInput.Flags)]);
440
441 if (Length > sizeof(Resource->ClockInput))
442 {
443 DeviceName = ACPI_ADD_PTR (char,
444 Resource, sizeof(Resource->ClockInput)+1),
445 AcpiUtPrintString (DeviceName, ACPI_UINT16_MAX);
446
447 AcpiOsPrintf (", ");
448 ResourceIndex = ACPI_ADD_PTR (UINT8,
449 Resource, sizeof(Resource->ClockInput)),
450
451 AcpiOsPrintf ("0x%2.2X", *ResourceIndex);
452 }
453
454 AcpiOsPrintf (")\n");
455
456 }
457
458 /*******************************************************************************
459 *
460 * FUNCTION: AcpiDmPinFunctionDescriptor
461 *
462 * PARAMETERS: Info - Extra resource info
463 * Resource - Pointer to the resource descriptor
464 * Length - Length of the descriptor in bytes
465 * Level - Current source code indentation level
466 *
467 * RETURN: None
468 *
469 * DESCRIPTION: Decode a PinFunction descriptor
470 *
471 ******************************************************************************/
472
473 void
474 AcpiDmPinFunctionDescriptor (
475 ACPI_OP_WALK_INFO *Info,
476 AML_RESOURCE *Resource,
477 UINT32 Length,
478 UINT32 Level)
479 {
480 UINT16 *PinList;
481 UINT8 *VendorData;
482 char *DeviceName = NULL;
483 UINT32 PinCount;
484 UINT32 i;
485
486 AcpiDmIndent (Level);
487 AcpiOsPrintf ("PinFunction (%s, ",
488 AcpiGbl_ShrDecode [ACPI_GET_1BIT_FLAG (Resource->PinFunction.Flags)]);
489
490 if (Resource->PinFunction.PinConfig <= 3)
491 {
492 AcpiOsPrintf ("%s, ",
493 AcpiGbl_PpcDecode[Resource->PinFunction.PinConfig]);
494 }
495 else
496 {
497 AcpiOsPrintf ("0x%2.2X, ", Resource->PinFunction.PinConfig);
498 }
499
500 /* FunctionNumber */
501
502 AcpiOsPrintf ("0x%4.4X, ", Resource->PinFunction.FunctionNumber);
503
504 if (Resource->PinFunction.ResSourceOffset)
505 {
506 DeviceName = ACPI_ADD_PTR (char,
507 Resource, Resource->PinFunction.ResSourceOffset),
508 AcpiUtPrintString (DeviceName, ACPI_UINT16_MAX);
509 }
510
511 AcpiOsPrintf (", ");
512 AcpiOsPrintf ("0x%2.2X,\n", Resource->PinFunction.ResSourceIndex);
513
514 AcpiDmIndent (Level + 1);
515
516 /* Always ResourceConsumer */
517 AcpiOsPrintf ("%s, ", AcpiGbl_ConsumeDecode [ACPI_CONSUMER]);
518
519 /* Insert a descriptor name */
520
521 AcpiDmDescriptorName ();
522
523 AcpiOsPrintf (",");
524
525 /* Dump the vendor data */
526
527 if (Resource->PinFunction.VendorLength)
528 {
529 AcpiOsPrintf ("\n");
530 AcpiDmIndent (Level + 1);
531 VendorData = ACPI_ADD_PTR (UINT8, Resource,
532 Resource->PinFunction.VendorOffset);
533
534 AcpiDmDumpRawDataBuffer (VendorData,
535 Resource->PinFunction.VendorLength, Level);
536 }
537
538 AcpiOsPrintf (")\n");
539
540 AcpiDmIndent (Level + 1);
541
542 /* Dump the interrupt list */
543
544 AcpiOsPrintf ("{ // Pin list\n");
545
546 PinCount = ((UINT32) (Resource->PinFunction.ResSourceOffset -
547 Resource->PinFunction.PinTableOffset)) /
548 sizeof (UINT16);
549
550 PinList = (UINT16 *) ACPI_ADD_PTR (char, Resource,
551 Resource->PinFunction.PinTableOffset);
552
553 for (i = 0; i < PinCount; i++)
554 {
555 AcpiDmIndent (Level + 2);
556 AcpiOsPrintf ("0x%4.4X%s\n", PinList[i],
557 ((i + 1) < PinCount) ? "," : "");
558 }
559
560 AcpiDmIndent (Level + 1);
561 AcpiOsPrintf ("}\n");
562 }
563
564
565 /*******************************************************************************
566 *
567 * FUNCTION: AcpiDmDumpSerialBusVendorData
568 *
569 * PARAMETERS: Resource - Pointer to the resource descriptor
570 *
571 * RETURN: None
572 *
573 * DESCRIPTION: Dump optional serial bus vendor data
574 *
575 ******************************************************************************/
576
577 static void
578 AcpiDmDumpSerialBusVendorData (
579 AML_RESOURCE *Resource,
580 UINT32 Level)
581 {
582 UINT8 *VendorData;
583 UINT32 VendorLength;
584
585
586 /* Get the (optional) vendor data and length */
587
588 switch (Resource->CommonSerialBus.Type)
589 {
590 case AML_RESOURCE_I2C_SERIALBUSTYPE:
591
592 VendorLength = Resource->CommonSerialBus.TypeDataLength -
593 AML_RESOURCE_I2C_MIN_DATA_LEN;
594
595 VendorData = ACPI_ADD_PTR (UINT8, Resource,
596 sizeof (AML_RESOURCE_I2C_SERIALBUS));
597 break;
598
599 case AML_RESOURCE_SPI_SERIALBUSTYPE:
600
601 VendorLength = Resource->CommonSerialBus.TypeDataLength -
602 AML_RESOURCE_SPI_MIN_DATA_LEN;
603
604 VendorData = ACPI_ADD_PTR (UINT8, Resource,
605 sizeof (AML_RESOURCE_SPI_SERIALBUS));
606 break;
607
608 case AML_RESOURCE_UART_SERIALBUSTYPE:
609
610 VendorLength = Resource->CommonSerialBus.TypeDataLength -
611 AML_RESOURCE_UART_MIN_DATA_LEN;
612
613 VendorData = ACPI_ADD_PTR (UINT8, Resource,
614 sizeof (AML_RESOURCE_UART_SERIALBUS));
615 break;
616
617 case AML_RESOURCE_CSI2_SERIALBUSTYPE:
618
619 VendorLength = Resource->CommonSerialBus.TypeDataLength -
620 AML_RESOURCE_CSI2_MIN_DATA_LEN;
621
622 VendorData = ACPI_ADD_PTR (UINT8, Resource,
623 sizeof (AML_RESOURCE_CSI2_SERIALBUS));
624 break;
625
626 default:
627
628 return;
629 }
630
631 /* Dump the vendor bytes as a RawDataBuffer object */
632
633 AcpiDmDumpRawDataBuffer (VendorData, VendorLength, Level);
634 }
635
636
637 /*******************************************************************************
638 *
639 * FUNCTION: AcpiDmCsi2SerialBusDescriptor
640 *
641 * PARAMETERS: Info - Extra resource info
642 * Resource - Pointer to the resource descriptor
643 * Length - Length of the descriptor in bytes
644 * Level - Current source code indentation level
645 *
646 * RETURN: None
647 *
648 * DESCRIPTION: Decode a CSI2 serial bus descriptor
649 *
650 ******************************************************************************/
651
652 static void
653 AcpiDmCsi2SerialBusDescriptor (
654 ACPI_OP_WALK_INFO *Info,
655 AML_RESOURCE *Resource,
656 UINT32 Length,
657 UINT32 Level)
658 {
659 UINT32 ResourceSourceOffset;
660 char *DeviceName;
661
662
663 /* SlaveMode, PhyType, LocalPortInstance */
664
665 AcpiDmIndent (Level);
666 AcpiOsPrintf ("Csi2Bus (%s,",
667 AcpiGbl_SmDecode [ACPI_GET_1BIT_FLAG (Resource->Csi2SerialBus.Flags)]);
668
669 AcpiOsPrintf (" 0x%2.2X, 0x%2.2X,\n",
670 Resource->Csi2SerialBus.TypeSpecificFlags & 0x03,
671 Resource->Csi2SerialBus.TypeSpecificFlags & 0xFC);
672
673 /* ResourceSource is a required field */
674
675 ResourceSourceOffset = sizeof (AML_RESOURCE_COMMON_SERIALBUS) +
676 Resource->CommonSerialBus.TypeDataLength;
677
678 AcpiDmIndent (Level + 1);
679 DeviceName = ACPI_ADD_PTR (char, Resource, ResourceSourceOffset);
680 AcpiUtPrintString (DeviceName, ACPI_UINT16_MAX);
681
682 /* ResourceSourceIndex, ResourceUsage */
683
684 AcpiOsPrintf (",\n");
685 AcpiDmIndent (Level + 1);
686 AcpiOsPrintf ("0x%2.2X, ", Resource->Csi2SerialBus.ResSourceIndex);
687
688 AcpiOsPrintf ("%s, ",
689 AcpiGbl_ConsumeDecode [ACPI_EXTRACT_1BIT_FLAG (Resource->Csi2SerialBus.Flags, 1)]);
690
691 /* Insert a descriptor name */
692
693 AcpiDmDescriptorName ();
694
695 /* Dump the vendor data */
696
697 AcpiOsPrintf (",\n");
698 AcpiDmIndent (Level + 1);
699 AcpiDmDumpSerialBusVendorData (Resource, Level);
700 AcpiOsPrintf (")\n");
701
702 MpSaveSerialInfo (Info->MappingOp, Resource, DeviceName);
703 }
704
705
706 /*******************************************************************************
707 *
708 * FUNCTION: AcpiDmI2cSerialBusDescriptor
709 *
710 * PARAMETERS: Info - Extra resource info
711 * Resource - Pointer to the resource descriptor
712 * Length - Length of the descriptor in bytes
713 * Level - Current source code indentation level
714 *
715 * RETURN: None
716 *
717 * DESCRIPTION: Decode a I2C serial bus descriptor
718 *
719 ******************************************************************************/
720
721 static void
722 AcpiDmI2cSerialBusDescriptor (
723 ACPI_OP_WALK_INFO *Info,
724 AML_RESOURCE *Resource,
725 UINT32 Length,
726 UINT32 Level)
727 {
728 UINT32 ResourceSourceOffset;
729 char *DeviceName;
730
731
732 /* SlaveAddress, SlaveMode, ConnectionSpeed, AddressingMode */
733
734 AcpiDmIndent (Level);
735 AcpiOsPrintf ("I2cSerialBusV2 (0x%4.4X, %s, 0x%8.8X,\n",
736 Resource->I2cSerialBus.SlaveAddress,
737 AcpiGbl_SmDecode [ACPI_GET_1BIT_FLAG (Resource->I2cSerialBus.Flags)],
738 Resource->I2cSerialBus.ConnectionSpeed);
739
740 AcpiDmIndent (Level + 1);
741 AcpiOsPrintf ("%s, ",
742 AcpiGbl_AmDecode [ACPI_GET_1BIT_FLAG (Resource->I2cSerialBus.TypeSpecificFlags)]);
743
744 /* ResourceSource is a required field */
745
746 ResourceSourceOffset = sizeof (AML_RESOURCE_COMMON_SERIALBUS) +
747 Resource->CommonSerialBus.TypeDataLength;
748
749 DeviceName = ACPI_ADD_PTR (char, Resource, ResourceSourceOffset);
750 AcpiUtPrintString (DeviceName, ACPI_UINT16_MAX);
751
752 /* ResourceSourceIndex, ResourceUsage */
753
754 AcpiOsPrintf (",\n");
755 AcpiDmIndent (Level + 1);
756 AcpiOsPrintf ("0x%2.2X, ", Resource->I2cSerialBus.ResSourceIndex);
757
758 AcpiOsPrintf ("%s, ",
759 AcpiGbl_ConsumeDecode [ACPI_EXTRACT_1BIT_FLAG (Resource->I2cSerialBus.Flags, 1)]);
760
761 /* Insert a descriptor name */
762
763 AcpiDmDescriptorName ();
764
765 /* Share */
766
767 AcpiOsPrintf (", %s,\n",
768 AcpiGbl_ShrDecode [ACPI_EXTRACT_1BIT_FLAG (Resource->I2cSerialBus.Flags, 2)]);
769
770 /* Dump the vendor data */
771
772 AcpiDmIndent (Level + 1);
773 AcpiDmDumpSerialBusVendorData (Resource, Level);
774 AcpiOsPrintf (")\n");
775
776 MpSaveSerialInfo (Info->MappingOp, Resource, DeviceName);
777 }
778
779
780 /*******************************************************************************
781 *
782 * FUNCTION: AcpiDmSpiSerialBusDescriptor
783 *
784 * PARAMETERS: Info - Extra resource info
785 * Resource - Pointer to the resource descriptor
786 * Length - Length of the descriptor in bytes
787 * Level - Current source code indentation level
788 *
789 * RETURN: None
790 *
791 * DESCRIPTION: Decode a SPI serial bus descriptor
792 *
793 ******************************************************************************/
794
795 static void
796 AcpiDmSpiSerialBusDescriptor (
797 ACPI_OP_WALK_INFO *Info,
798 AML_RESOURCE *Resource,
799 UINT32 Length,
800 UINT32 Level)
801 {
802 UINT32 ResourceSourceOffset;
803 char *DeviceName;
804
805
806 /* DeviceSelection, DeviceSelectionPolarity, WireMode, DataBitLength */
807
808 AcpiDmIndent (Level);
809 AcpiOsPrintf ("SpiSerialBusV2 (0x%4.4X, %s, %s, 0x%2.2X,\n",
810 Resource->SpiSerialBus.DeviceSelection,
811 AcpiGbl_DpDecode [ACPI_EXTRACT_1BIT_FLAG (Resource->SpiSerialBus.TypeSpecificFlags, 1)],
812 AcpiGbl_WmDecode [ACPI_GET_1BIT_FLAG (Resource->SpiSerialBus.TypeSpecificFlags)],
813 Resource->SpiSerialBus.DataBitLength);
814
815 /* SlaveMode, ConnectionSpeed, ClockPolarity, ClockPhase */
816
817 AcpiDmIndent (Level + 1);
818 AcpiOsPrintf ("%s, 0x%8.8X, %s,\n",
819 AcpiGbl_SmDecode [ACPI_GET_1BIT_FLAG (Resource->SpiSerialBus.Flags)],
820 Resource->SpiSerialBus.ConnectionSpeed,
821 AcpiGbl_CpoDecode [ACPI_GET_1BIT_FLAG (Resource->SpiSerialBus.ClockPolarity)]);
822
823 AcpiDmIndent (Level + 1);
824 AcpiOsPrintf ("%s, ",
825 AcpiGbl_CphDecode [ACPI_GET_1BIT_FLAG (Resource->SpiSerialBus.ClockPhase)]);
826
827 /* ResourceSource is a required field */
828
829 ResourceSourceOffset = sizeof (AML_RESOURCE_COMMON_SERIALBUS) +
830 Resource->CommonSerialBus.TypeDataLength;
831
832 DeviceName = ACPI_ADD_PTR (char, Resource, ResourceSourceOffset);
833 AcpiUtPrintString (DeviceName, ACPI_UINT16_MAX);
834
835 /* ResourceSourceIndex, ResourceUsage */
836
837 AcpiOsPrintf (",\n");
838 AcpiDmIndent (Level + 1);
839 AcpiOsPrintf ("0x%2.2X, ", Resource->SpiSerialBus.ResSourceIndex);
840
841 AcpiOsPrintf ("%s, ",
842 AcpiGbl_ConsumeDecode [ACPI_EXTRACT_1BIT_FLAG (Resource->SpiSerialBus.Flags, 1)]);
843
844 /* Insert a descriptor name */
845
846 AcpiDmDescriptorName ();
847
848 /* Share */
849
850 AcpiOsPrintf (", %s,\n",
851 AcpiGbl_ShrDecode [ACPI_EXTRACT_1BIT_FLAG (Resource->SpiSerialBus.Flags, 2)]);
852
853 /* Dump the vendor data */
854
855 AcpiDmIndent (Level + 1);
856 AcpiDmDumpSerialBusVendorData (Resource, Level);
857 AcpiOsPrintf (")\n");
858
859 MpSaveSerialInfo (Info->MappingOp, Resource, DeviceName);
860 }
861
862
863 /*******************************************************************************
864 *
865 * FUNCTION: AcpiDmUartSerialBusDescriptor
866 *
867 * PARAMETERS: Info - Extra resource info
868 * Resource - Pointer to the resource descriptor
869 * Length - Length of the descriptor in bytes
870 * Level - Current source code indentation level
871 *
872 * RETURN: None
873 *
874 * DESCRIPTION: Decode a UART serial bus descriptor
875 *
876 ******************************************************************************/
877
878 static void
879 AcpiDmUartSerialBusDescriptor (
880 ACPI_OP_WALK_INFO *Info,
881 AML_RESOURCE *Resource,
882 UINT32 Length,
883 UINT32 Level)
884 {
885 UINT32 ResourceSourceOffset;
886 char *DeviceName;
887
888
889 /* ConnectionSpeed, BitsPerByte, StopBits */
890
891 AcpiDmIndent (Level);
892 AcpiOsPrintf ("UartSerialBusV2 (0x%8.8X, %s, %s,\n",
893 Resource->UartSerialBus.DefaultBaudRate,
894 AcpiGbl_BpbDecode [ACPI_EXTRACT_3BIT_FLAG (Resource->UartSerialBus.TypeSpecificFlags, 4)],
895 AcpiGbl_SbDecode [ACPI_EXTRACT_2BIT_FLAG (Resource->UartSerialBus.TypeSpecificFlags, 2)]);
896
897 /* LinesInUse, IsBigEndian, Parity, FlowControl */
898
899 AcpiDmIndent (Level + 1);
900 AcpiOsPrintf ("0x%2.2X, %s, %s, %s,\n",
901 Resource->UartSerialBus.LinesEnabled,
902 AcpiGbl_EdDecode [ACPI_EXTRACT_1BIT_FLAG (Resource->UartSerialBus.TypeSpecificFlags, 7)],
903 AcpiGbl_PtDecode [ACPI_GET_3BIT_FLAG (Resource->UartSerialBus.Parity)],
904 AcpiGbl_FcDecode [ACPI_GET_2BIT_FLAG (Resource->UartSerialBus.TypeSpecificFlags)]);
905
906 /* ReceiveBufferSize, TransmitBufferSize */
907
908 AcpiDmIndent (Level + 1);
909 AcpiOsPrintf ("0x%4.4X, 0x%4.4X, ",
910 Resource->UartSerialBus.RxFifoSize,
911 Resource->UartSerialBus.TxFifoSize);
912
913 /* ResourceSource is a required field */
914
915 ResourceSourceOffset = sizeof (AML_RESOURCE_COMMON_SERIALBUS) +
916 Resource->CommonSerialBus.TypeDataLength;
917
918 DeviceName = ACPI_ADD_PTR (char, Resource, ResourceSourceOffset);
919 AcpiUtPrintString (DeviceName, ACPI_UINT16_MAX);
920
921 /* ResourceSourceIndex, ResourceUsage */
922
923 AcpiOsPrintf (",\n");
924 AcpiDmIndent (Level + 1);
925 AcpiOsPrintf ("0x%2.2X, ", Resource->UartSerialBus.ResSourceIndex);
926
927 AcpiOsPrintf ("%s, ",
928 AcpiGbl_ConsumeDecode [ACPI_EXTRACT_1BIT_FLAG (Resource->UartSerialBus.Flags, 1)]);
929
930 /* Insert a descriptor name */
931
932 AcpiDmDescriptorName ();
933
934 /* Share */
935
936 AcpiOsPrintf (", %s,\n",
937 AcpiGbl_ShrDecode [ACPI_EXTRACT_1BIT_FLAG (Resource->UartSerialBus.Flags, 2)]);
938
939 /* Dump the vendor data */
940
941 AcpiDmIndent (Level + 1);
942 AcpiDmDumpSerialBusVendorData (Resource, Level);
943 AcpiOsPrintf (")\n");
944
945 MpSaveSerialInfo (Info->MappingOp, Resource, DeviceName);
946 }
947
948
949 /*******************************************************************************
950 *
951 * FUNCTION: AcpiDmSerialBusDescriptor
952 *
953 * PARAMETERS: Info - Extra resource info
954 * Resource - Pointer to the resource descriptor
955 * Length - Length of the descriptor in bytes
956 * Level - Current source code indentation level
957 *
958 * RETURN: None
959 *
960 * DESCRIPTION: Decode a I2C/SPI/UART/CSI2 serial bus descriptor
961 *
962 ******************************************************************************/
963
964 void
965 AcpiDmSerialBusDescriptor (
966 ACPI_OP_WALK_INFO *Info,
967 AML_RESOURCE *Resource,
968 UINT32 Length,
969 UINT32 Level)
970 {
971
972 SerialBusResourceDispatch [Resource->CommonSerialBus.Type] (
973 Info, Resource, Length, Level);
974 }
975
976 /*******************************************************************************
977 *
978 * FUNCTION: AcpiDmPinConfig
979 *
980 * PARAMETERS: PinConfigType - Pin configuration type
981 * PinConfigValue - Pin configuration value
982 *
983 * RETURN: None
984 *
985 * DESCRIPTION: Pretty prints PinConfig type and value.
986 *
987 ******************************************************************************/
988
989 static void
990 AcpiDmPinConfig(
991 UINT8 PinConfigType,
992 UINT32 PinConfigValue)
993 {
994 if (PinConfigType <= 13)
995 {
996 AcpiOsPrintf ("0x%2.2X /* %s */, ", PinConfigType,
997 AcpiGbl_PtypDecode[PinConfigType]);
998 }
999 else
1000 {
1001 AcpiOsPrintf ("0x%2.2X, /* Vendor Defined */ ", PinConfigType);
1002 }
1003
1004 /* PinConfigValue */
1005
1006 AcpiOsPrintf ("0x%4.4X,\n", PinConfigValue);
1007 }
1008
1009 /*******************************************************************************
1010 *
1011 * FUNCTION: AcpiDmPinConfigDescriptor
1012 *
1013 * PARAMETERS: Info - Extra resource info
1014 * Resource - Pointer to the resource descriptor
1015 * Length - Length of the descriptor in bytes
1016 * Level - Current source code indentation level
1017 *
1018 * RETURN: None
1019 *
1020 * DESCRIPTION: Decode a PinConfig descriptor
1021 *
1022 ******************************************************************************/
1023
1024 void
1025 AcpiDmPinConfigDescriptor (
1026 ACPI_OP_WALK_INFO *Info,
1027 AML_RESOURCE *Resource,
1028 UINT32 Length,
1029 UINT32 Level)
1030 {
1031 UINT16 *PinList;
1032 UINT8 *VendorData;
1033 char *DeviceName = NULL;
1034 UINT32 PinCount;
1035 UINT32 i;
1036
1037 AcpiDmIndent (Level);
1038 AcpiOsPrintf ("PinConfig (%s, ",
1039 AcpiGbl_ShrDecode [ACPI_GET_1BIT_FLAG (Resource->PinConfig.Flags)]);
1040
1041 AcpiDmPinConfig (Resource->PinConfig.PinConfigType,
1042 Resource->PinConfig.PinConfigValue);
1043
1044 AcpiDmIndent (Level + 1);
1045
1046 if (Resource->PinConfig.ResSourceOffset)
1047 {
1048 DeviceName = ACPI_ADD_PTR (char,
1049 Resource, Resource->PinConfig.ResSourceOffset),
1050 AcpiUtPrintString (DeviceName, ACPI_UINT16_MAX);
1051 }
1052
1053 AcpiOsPrintf (", ");
1054 AcpiOsPrintf ("0x%2.2X, ", Resource->PinConfig.ResSourceIndex);
1055
1056 AcpiOsPrintf ("%s, ",
1057 AcpiGbl_ConsumeDecode [ACPI_EXTRACT_1BIT_FLAG (Resource->PinConfig.Flags, 1)]);
1058
1059 /* Insert a descriptor name */
1060
1061 AcpiDmDescriptorName ();
1062
1063 AcpiOsPrintf (",");
1064
1065 /* Dump the vendor data */
1066
1067 if (Resource->PinConfig.VendorLength)
1068 {
1069 AcpiOsPrintf ("\n");
1070 AcpiDmIndent (Level + 1);
1071 VendorData = ACPI_ADD_PTR (UINT8, Resource,
1072 Resource->PinConfig.VendorOffset);
1073
1074 AcpiDmDumpRawDataBuffer (VendorData,
1075 Resource->PinConfig.VendorLength, Level);
1076 }
1077
1078 AcpiOsPrintf (")\n");
1079
1080 AcpiDmIndent (Level + 1);
1081
1082 /* Dump the interrupt list */
1083
1084 AcpiOsPrintf ("{ // Pin list\n");
1085
1086 PinCount = ((UINT32) (Resource->PinConfig.ResSourceOffset -
1087 Resource->PinConfig.PinTableOffset)) /
1088 sizeof (UINT16);
1089
1090 PinList = (UINT16 *) ACPI_ADD_PTR (char, Resource,
1091 Resource->PinConfig.PinTableOffset);
1092
1093 for (i = 0; i < PinCount; i++)
1094 {
1095 AcpiDmIndent (Level + 2);
1096 AcpiOsPrintf ("0x%4.4X%s\n", PinList[i],
1097 ((i + 1) < PinCount) ? "," : "");
1098 }
1099
1100 AcpiDmIndent (Level + 1);
1101 AcpiOsPrintf ("}\n");
1102 }
1103
1104 /*******************************************************************************
1105 *
1106 * FUNCTION: AcpiDmPinGroupDescriptor
1107 *
1108 * PARAMETERS: Info - Extra resource info
1109 * Resource - Pointer to the resource descriptor
1110 * Length - Length of the descriptor in bytes
1111 * Level - Current source code indentation level
1112 *
1113 * RETURN: None
1114 *
1115 * DESCRIPTION: Decode a PinGroup descriptor
1116 *
1117 ******************************************************************************/
1118
1119 void
1120 AcpiDmPinGroupDescriptor (
1121 ACPI_OP_WALK_INFO *Info,
1122 AML_RESOURCE *Resource,
1123 UINT32 Length,
1124 UINT32 Level)
1125 {
1126 char *Label;
1127 UINT16 *PinList;
1128 UINT8 *VendorData;
1129 UINT32 PinCount;
1130 UINT32 i;
1131
1132 AcpiDmIndent (Level);
1133 /* Always producer */
1134 AcpiOsPrintf ("PinGroup (");
1135
1136 Label = ACPI_ADD_PTR (char,
1137 Resource, Resource->PinGroup.LabelOffset),
1138 AcpiUtPrintString (Label, ACPI_UINT16_MAX);
1139
1140 AcpiOsPrintf (", ");
1141
1142 AcpiOsPrintf ("%s, ",
1143 AcpiGbl_ConsumeDecode [ACPI_GET_1BIT_FLAG (Resource->PinGroup.Flags)]);
1144
1145 /* Insert a descriptor name */
1146
1147 AcpiDmDescriptorName ();
1148
1149 AcpiOsPrintf (",");
1150
1151 /* Dump the vendor data */
1152
1153 if (Resource->PinGroup.VendorLength)
1154 {
1155 AcpiOsPrintf ("\n");
1156 AcpiDmIndent (Level + 1);
1157 VendorData = ACPI_ADD_PTR (UINT8, Resource,
1158 Resource->PinGroup.VendorOffset);
1159
1160 AcpiDmDumpRawDataBuffer (VendorData,
1161 Resource->PinGroup.VendorLength, Level);
1162 }
1163
1164 AcpiOsPrintf (")\n");
1165
1166 AcpiDmIndent (Level + 1);
1167
1168 /* Dump the interrupt list */
1169
1170 AcpiOsPrintf ("{ // Pin list\n");
1171
1172 PinCount = (Resource->PinGroup.LabelOffset -
1173 Resource->PinGroup.PinTableOffset) / sizeof (UINT16);
1174
1175 PinList = (UINT16 *) ACPI_ADD_PTR (char, Resource,
1176 Resource->PinGroup.PinTableOffset);
1177
1178 for (i = 0; i < PinCount; i++)
1179 {
1180 AcpiDmIndent (Level + 2);
1181 AcpiOsPrintf ("0x%4.4X%s\n", PinList[i],
1182 ((i + 1) < PinCount) ? "," : "");
1183 }
1184
1185 AcpiDmIndent (Level + 1);
1186 AcpiOsPrintf ("}\n");
1187 }
1188
1189 /*******************************************************************************
1190 *
1191 * FUNCTION: AcpiDmPinGroupFunctionDescriptor
1192 *
1193 * PARAMETERS: Info - Extra resource info
1194 * Resource - Pointer to the resource descriptor
1195 * Length - Length of the descriptor in bytes
1196 * Level - Current source code indentation level
1197 *
1198 * RETURN: None
1199 *
1200 * DESCRIPTION: Decode a PinGroupFunction descriptor
1201 *
1202 ******************************************************************************/
1203
1204 void
1205 AcpiDmPinGroupFunctionDescriptor (
1206 ACPI_OP_WALK_INFO *Info,
1207 AML_RESOURCE *Resource,
1208 UINT32 Length,
1209 UINT32 Level)
1210 {
1211 UINT8 *VendorData;
1212 char *DeviceName = NULL;
1213 char *Label = NULL;
1214
1215 AcpiDmIndent (Level);
1216 AcpiOsPrintf ("PinGroupFunction (%s, ",
1217 AcpiGbl_ShrDecode [ACPI_GET_1BIT_FLAG (Resource->PinGroupFunction.Flags)]);
1218
1219 /* FunctionNumber */
1220
1221 AcpiOsPrintf ("0x%4.4X, ", Resource->PinGroupFunction.FunctionNumber);
1222
1223 DeviceName = ACPI_ADD_PTR (char,
1224 Resource, Resource->PinGroupFunction.ResSourceOffset),
1225 AcpiUtPrintString (DeviceName, ACPI_UINT16_MAX);
1226
1227 AcpiOsPrintf (", ");
1228 AcpiOsPrintf ("0x%2.2X,\n", Resource->PinGroupFunction.ResSourceIndex);
1229
1230 AcpiDmIndent (Level + 1);
1231
1232 Label = ACPI_ADD_PTR (char, Resource,
1233 Resource->PinGroupFunction.ResSourceLabelOffset);
1234 AcpiUtPrintString (Label, ACPI_UINT16_MAX);
1235
1236 AcpiOsPrintf (", ");
1237
1238 AcpiOsPrintf ("%s, ",
1239 AcpiGbl_ConsumeDecode [ACPI_EXTRACT_1BIT_FLAG (Resource->PinGroupFunction.Flags, 1)]);
1240
1241 /* Insert a descriptor name */
1242
1243 AcpiDmDescriptorName ();
1244
1245 AcpiOsPrintf (",");
1246
1247 /* Dump the vendor data */
1248
1249 if (Resource->PinGroupFunction.VendorLength)
1250 {
1251 AcpiOsPrintf ("\n");
1252 AcpiDmIndent (Level + 1);
1253 VendorData = ACPI_ADD_PTR (UINT8, Resource,
1254 Resource->PinGroupFunction.VendorOffset);
1255
1256 AcpiDmDumpRawDataBuffer (VendorData,
1257 Resource->PinGroupFunction.VendorLength, Level);
1258 }
1259
1260 AcpiOsPrintf (")\n");
1261 }
1262
1263 /*******************************************************************************
1264 *
1265 * FUNCTION: AcpiDmPinGroupConfigDescriptor
1266 *
1267 * PARAMETERS: Info - Extra resource info
1268 * Resource - Pointer to the resource descriptor
1269 * Length - Length of the descriptor in bytes
1270 * Level - Current source code indentation level
1271 *
1272 * RETURN: None
1273 *
1274 * DESCRIPTION: Decode a PinGroupConfig descriptor
1275 *
1276 ******************************************************************************/
1277
1278 void
1279 AcpiDmPinGroupConfigDescriptor (
1280 ACPI_OP_WALK_INFO *Info,
1281 AML_RESOURCE *Resource,
1282 UINT32 Length,
1283 UINT32 Level)
1284 {
1285 UINT8 *VendorData;
1286 char *DeviceName = NULL;
1287 char *Label = NULL;
1288
1289 AcpiDmIndent (Level);
1290 AcpiOsPrintf ("PinGroupConfig (%s, ",
1291 AcpiGbl_ShrDecode [ACPI_GET_1BIT_FLAG (Resource->PinGroupConfig.Flags)]);
1292
1293 AcpiDmPinConfig(Resource->PinGroupConfig.PinConfigType,
1294 Resource->PinGroupConfig.PinConfigValue);
1295
1296 AcpiDmIndent (Level + 1);
1297
1298 DeviceName = ACPI_ADD_PTR (char,
1299 Resource, Resource->PinGroupConfig.ResSourceOffset),
1300 AcpiUtPrintString (DeviceName, ACPI_UINT16_MAX);
1301
1302 AcpiOsPrintf (", ");
1303 AcpiOsPrintf ("0x%2.2X, ", Resource->PinGroupConfig.ResSourceIndex);
1304
1305 Label = ACPI_ADD_PTR (char, Resource,
1306 Resource->PinGroupConfig.ResSourceLabelOffset);
1307 AcpiUtPrintString (Label, ACPI_UINT16_MAX);
1308
1309 AcpiOsPrintf (", ");
1310
1311 AcpiOsPrintf ("%s, ",
1312 AcpiGbl_ConsumeDecode [ACPI_EXTRACT_1BIT_FLAG (Resource->PinGroupConfig.Flags, 1)]);
1313
1314 /* Insert a descriptor name */
1315
1316 AcpiDmDescriptorName ();
1317
1318 AcpiOsPrintf (",");
1319
1320 /* Dump the vendor data */
1321
1322 if (Resource->PinGroupConfig.VendorLength)
1323 {
1324 AcpiOsPrintf ("\n");
1325 AcpiDmIndent (Level + 1);
1326 VendorData = ACPI_ADD_PTR (UINT8, Resource,
1327 Resource->PinGroupConfig.VendorOffset);
1328
1329 AcpiDmDumpRawDataBuffer (VendorData,
1330 Resource->PinGroupConfig.VendorLength, Level);
1331 }
1332
1333 AcpiOsPrintf (")\n");
1334 }
1335