TianoCore EDK2 master
Loading...
Searching...
No Matches
IortParser.c
Go to the documentation of this file.
1
17#include <Library/PrintLib.h>
18#include <Library/UefiLib.h>
19#include "AcpiParser.h"
20#include "AcpiTableParser.h"
21#include "AcpiViewConfig.h"
22
23// Local variables
25
26STATIC CONST UINT32 *IortNodeCount;
27STATIC CONST UINT32 *IortNodeOffset;
28
29STATIC CONST UINT8 *IortNodeType;
30STATIC CONST UINT16 *IortNodeLength;
31STATIC CONST UINT8 *IortNodeRevision;
32STATIC CONST UINT32 *IortIdMappingCount;
33STATIC CONST UINT32 *IortIdMappingOffset;
34
35STATIC CONST UINT32 *InterruptContextCount;
36STATIC CONST UINT32 *InterruptContextOffset;
37STATIC CONST UINT32 *PmuInterruptCount;
38STATIC CONST UINT32 *PmuInterruptOffset;
39
40STATIC CONST UINT32 *ItsCount;
41
42STATIC CONST UINT32 *RmrMemDescCount;
43STATIC CONST UINT32 *RmrMemDescOffset;
44
54VOID
55EFIAPI
57 IN UINT8 *Ptr,
58 IN UINT32 Length,
59 IN VOID *Context
60 )
61{
62 if (*(UINT32 *)Ptr != 0) {
64 Print (L"\nERROR: IORT ID Mapping count must be zero.");
65 }
66}
67
78VOID
79EFIAPI
81 IN UINT8 *Ptr,
82 IN UINT32 Length,
83 IN VOID *Context
84 )
85{
86 if (*(UINT32 *)Ptr > 1) {
88 Print (L"\nERROR: IORT ID Mapping count must not be greater than 1.");
89 }
90}
91
100STATIC
101VOID
102EFIAPI
104 IN UINT8 *Ptr,
105 IN UINT32 Length,
106 IN VOID *Context
107 )
108{
109 if (*(UINT32 *)Ptr != 0) {
111 Print (L"\nERROR: IORT ID Mapping offset must be zero.");
112 }
113}
114
124STATIC
125VOID
126EFIAPI
128 IN UINT8 *Ptr,
129 IN UINT32 Length,
130 IN VOID *Context
131 )
132{
133 UINT64 Value;
134
135 Value = *(UINT64 *)Ptr;
136 if ((Value == 0) || ((Value & (SIZE_64KB - 1)) != 0)) {
138 Print (L"\nERROR: Physical Range must be 64K aligned and cannot be zero.");
139 }
140}
141
150STATIC
151VOID
152EFIAPI
154 IN UINT8 *Ptr,
155 IN UINT32 Length,
156 IN VOID *Context
157 )
158{
159 if (*(UINT32 *)Ptr == 0) {
161 Print (L"\nERROR: Memory Range Descriptor count must be >=1.");
162 }
163}
164
173#define PARSE_IORT_NODE_HEADER(ValidateIdMappingCount, \
174 ValidateIdArrayReference) \
175 { L"Type", 1, 0, L"%d", NULL, (VOID**)&IortNodeType, NULL, NULL }, \
176 { L"Length", 2, 1, L"%d", NULL, (VOID**)&IortNodeLength, NULL, NULL }, \
177 { L"Revision", 1, 3, L"%d", NULL, (VOID**)&IortNodeRevision, NULL, NULL }, \
178 { L"Identifier", 4, 4, L"0x%x", NULL, NULL, NULL, NULL }, \
179 { L"Number of ID mappings", 4, 8, L"%d", NULL, \
180 (VOID**)&IortIdMappingCount, ValidateIdMappingCount, NULL }, \
181 { L"Reference to ID Array", 4, 12, L"0x%x", NULL, \
182 (VOID**)&IortIdMappingOffset, ValidateIdArrayReference, NULL }
183
188 PARSE_ACPI_HEADER (&AcpiHdrInfo),
189 { L"Number of IORT Nodes", 4, 36, L"%d", NULL,
190 (VOID **)&IortNodeCount, NULL, NULL },
191 { L"Offset to Array of IORT Nodes",4, 40, L"0x%x", NULL,
192 (VOID **)&IortNodeOffset, NULL, NULL },
193 { L"Reserved", 4, 44, L"0x%x", NULL,NULL,NULL, NULL }
194};
195
201};
202
208 { L"Base Address", 8, 16, L"0x%lx", NULL, NULL, NULL, NULL },
209 { L"Span", 8, 24, L"0x%lx", NULL, NULL, NULL, NULL },
210 { L"Model", 4, 32, L"%d", NULL, NULL, NULL, NULL },
211 { L"Flags", 4, 36, L"0x%x", NULL, NULL, NULL, NULL },
212 { L"Global Interrupt Array Ref", 4, 40, L"0x%x", NULL, NULL, NULL,
213 NULL },
214 { L"Number of context interrupts", 4, 44, L"%d", NULL,
215 (VOID **)&InterruptContextCount, NULL, NULL },
216 { L"Context Interrupt Array Ref", 4, 48, L"0x%x", NULL,
217 (VOID **)&InterruptContextOffset, NULL, NULL },
218 { L"Number of PMU Interrupts", 4, 52, L"%d", NULL,
219 (VOID **)&PmuInterruptCount, NULL, NULL },
220 { L"PMU Interrupt Array Ref", 4, 56, L"0x%x", NULL,
221 (VOID **)&PmuInterruptOffset, NULL, NULL },
222
223 // Interrupt Array
224 { L"SMMU_NSgIrpt", 4, 60, L"0x%x", NULL, NULL, NULL, NULL },
225 { L"SMMU_NSgIrpt interrupt flags", 4, 64, L"0x%x", NULL, NULL, NULL, NULL },
226 { L"SMMU_NSgCfgIrpt", 4, 68, L"0x%x", NULL, NULL, NULL, NULL },
227 { L"SMMU_NSgCfgIrpt interrupt flags",4, 72, L"0x%x", NULL, NULL, NULL, NULL }
228};
229
234 { L"Interrupt GSIV", 4, 0, L"0x%x", NULL, NULL, NULL, NULL },
235 { L"Flags", 4, 4, L"0x%x", NULL, NULL, NULL, NULL }
236};
237
242 { L"Input base", 4, 0, L"0x%x", NULL, NULL, NULL, NULL },
243 { L"Number of IDs", 4, 4, L"0x%x", NULL, NULL, NULL, NULL },
244 { L"Output base", 4, 8, L"0x%x", NULL, NULL, NULL, NULL },
245 { L"Output reference", 4, 12, L"0x%x", NULL, NULL, NULL, NULL },
246 { L"Flags", 4, 16, L"0x%x", NULL, NULL, NULL, NULL }
247};
248
254 { L"Base Address", 8, 16, L"0x%lx", NULL, NULL, NULL, NULL },
255 { L"Flags", 4, 24, L"0x%x", NULL, NULL, NULL, NULL },
256 { L"Reserved", 4, 28, L"0x%x", NULL, NULL, NULL, NULL },
257 { L"VATOS Address", 8, 32, L"0x%lx", NULL, NULL, NULL, NULL },
258 { L"Model", 4, 40, L"%d", NULL, NULL, NULL, NULL },
259 { L"Event", 4, 44, L"0x%x", NULL, NULL, NULL, NULL },
260 { L"PRI", 4, 48, L"0x%x", NULL, NULL, NULL, NULL },
261 { L"GERR", 4, 52, L"0x%x", NULL, NULL, NULL, NULL },
262 { L"Sync", 4, 56, L"0x%x", NULL, NULL, NULL, NULL },
263 { L"Proximity domain", 4, 60, L"0x%x", NULL, NULL, NULL, NULL },
264 { L"Device ID mapping index", 4, 64, L"%d", NULL, NULL, NULL, NULL }
265};
266
274 ),
275 { L"Number of ITSs", 4,16, L"%d", NULL, (VOID **)&ItsCount, NULL }
276};
277
282 { L"GIC ITS Identifier", 4, 0, L"%d", NULL, NULL, NULL }
283};
284
290 { L"Node Flags", 4, 16, L"%d", NULL, NULL, NULL, NULL },
291 { L"Memory access properties",8, 20, L"0x%lx", NULL, NULL, NULL, NULL },
292 { L"Device memory address size limit",1, 28, L"%d", NULL, NULL, NULL, NULL }
293};
294
300 { L"Memory access properties",8, 16, L"0x%lx", NULL, NULL, NULL, NULL },
301 { L"ATS Attribute", 4, 24, L"0x%x", NULL, NULL, NULL, NULL },
302 { L"PCI Segment number", 4, 28, L"0x%x", NULL, NULL, NULL, NULL },
303 { L"Memory access size limit",1, 32, L"0x%x", NULL, NULL, NULL, NULL },
304 { L"PASID capabilities", 2, 33, L"0x%x", NULL, NULL, NULL, NULL },
305 { L"Reserved", 1, 35, L"%x", NULL, NULL, NULL, NULL },
306 { L"Flags", 4, 36, L"0x%x", NULL, NULL, NULL, NULL },
307};
308
314 { L"Page 0 Base Address", 8, 16, L"0x%lx", NULL, NULL, NULL, NULL },
315 { L"Overflow interrupt GSIV", 4, 24, L"0x%x", NULL, NULL, NULL, NULL },
316 { L"Node reference", 4, 28, L"0x%x", NULL, NULL, NULL, NULL },
317 { L"Page 1 Base Address", 8, 32, L"0x%lx", NULL, NULL, NULL, NULL }
318};
319
325 { L"Flags", 4, 16, L"0x%x", NULL, NULL, NULL, NULL },
326 { L"Memory Range Desc count", 4, 20, L"%d", NULL,
327 (VOID **)&RmrMemDescCount, ValidateRmrMemDescCount,NULL },
328 { L"Memory Range Desc Ref", 4, 24, L"0x%x", NULL,
329 (VOID **)&RmrMemDescOffset, NULL, NULL }
330};
331
336 { L"Physical Range offset", 8, 0, L"0x%lx", NULL, NULL, ValidatePhysicalRange,
337 NULL },
338 { L"Physical Range length", 8, 8, L"0x%lx", NULL, NULL, ValidatePhysicalRange,
339 NULL },
340 { L"Reserved", 4, 16, L"0x%x", NULL, NULL, NULL, NULL}
341};
342
350STATIC
351VOID
353 IN UINT8 *Ptr,
354 IN UINT32 Length,
355 IN UINT32 MappingCount
356 )
357{
358 UINT32 Index;
359 UINT32 Offset;
360 CHAR8 Buffer[40]; // Used for AsciiName param of ParseAcpi
361
362 Index = 0;
363 Offset = 0;
364
365 while ((Index < MappingCount) &&
366 (Offset < Length))
367 {
369 Buffer,
370 sizeof (Buffer),
371 "ID Mapping [%d]",
372 Index
373 );
374 Offset += ParseAcpi (
375 TRUE,
376 4,
377 Buffer,
378 Ptr + Offset,
379 Length - Offset,
381 );
382 Index++;
383 }
384}
385
395STATIC
396VOID
398 IN UINT8 *Ptr,
399 IN UINT16 Length,
400 IN UINT32 MappingCount,
401 IN UINT32 MappingOffset
402 )
403{
404 UINT32 Index;
405 UINT32 Offset;
406 CHAR8 Buffer[50]; // Used for AsciiName param of ParseAcpi
407
408 ParseAcpi (
409 TRUE,
410 2,
411 "SMMUv1 or SMMUv2 Node",
412 Ptr,
413 Length,
415 );
416
417 // Check if the values used to control the parsing logic have been
418 // successfully read.
419 if ((InterruptContextCount == NULL) ||
420 (InterruptContextOffset == NULL) ||
421 (PmuInterruptCount == NULL) ||
422 (PmuInterruptOffset == NULL))
423 {
425 Print (
426 L"ERROR: Insufficient SMMUv1/2 node length. Length = %d\n",
427 Length
428 );
429 return;
430 }
431
432 Offset = *InterruptContextOffset;
433 Index = 0;
434
435 while ((Index < *InterruptContextCount) &&
436 (Offset < Length))
437 {
439 Buffer,
440 sizeof (Buffer),
441 "Context Interrupts Array [%d]",
442 Index
443 );
444 Offset += ParseAcpi (
445 TRUE,
446 4,
447 Buffer,
448 Ptr + Offset,
449 Length - Offset,
451 );
452 Index++;
453 }
454
455 Offset = *PmuInterruptOffset;
456 Index = 0;
457
458 while ((Index < *PmuInterruptCount) &&
459 (Offset < Length))
460 {
462 Buffer,
463 sizeof (Buffer),
464 "PMU Interrupts Array [%d]",
465 Index
466 );
467 Offset += ParseAcpi (
468 TRUE,
469 4,
470 Buffer,
471 Ptr + Offset,
472 Length - Offset,
474 );
475 Index++;
476 }
477
479 Ptr + MappingOffset,
480 Length - MappingOffset,
481 MappingCount
482 );
483}
484
494STATIC
495VOID
497 IN UINT8 *Ptr,
498 IN UINT16 Length,
499 IN UINT32 MappingCount,
500 IN UINT32 MappingOffset
501 )
502{
503 ParseAcpi (
504 TRUE,
505 2,
506 "SMMUV3 Node",
507 Ptr,
508 Length,
510 );
511
513 Ptr + MappingOffset,
514 Length - MappingOffset,
515 MappingCount
516 );
517}
518
525STATIC
526VOID
528 IN UINT8 *Ptr,
529 IN UINT16 Length
530 )
531{
532 UINT32 Offset;
533 UINT32 Index;
534 CHAR8 Buffer[80]; // Used for AsciiName param of ParseAcpi
535
536 Offset = ParseAcpi (
537 TRUE,
538 2,
539 "ITS Node",
540 Ptr,
541 Length,
543 );
544
545 // Check if the values used to control the parsing logic have been
546 // successfully read.
547 if (ItsCount == NULL) {
549 Print (
550 L"ERROR: Insufficient ITS group length. Length = %d.\n",
551 Length
552 );
553 return;
554 }
555
556 Index = 0;
557
558 while ((Index < *ItsCount) &&
559 (Offset < Length))
560 {
562 Buffer,
563 sizeof (Buffer),
564 "GIC ITS Identifier Array [%d]",
565 Index
566 );
567 Offset += ParseAcpi (
568 TRUE,
569 4,
570 Buffer,
571 Ptr + Offset,
572 Length - Offset,
574 );
575 Index++;
576 }
577
578 // Note: ITS does not have the ID Mappings Array
579}
580
590STATIC
591VOID
593 IN UINT8 *Ptr,
594 IN UINT16 Length,
595 IN UINT32 MappingCount,
596 IN UINT32 MappingOffset
597 )
598{
599 UINT32 Offset;
600
601 Offset = ParseAcpi (
602 TRUE,
603 2,
604 "Named Component Node",
605 Ptr,
606 Length,
608 );
609
610 // Estimate the Device Name length
611 PrintFieldName (2, L"Device Object Name");
612
613 while ((*(Ptr + Offset) != 0) &&
614 (Offset < Length))
615 {
616 Print (L"%c", *(Ptr + Offset));
617 Offset++;
618 }
619
620 Print (L"\n");
621
623 Ptr + MappingOffset,
624 Length - MappingOffset,
625 MappingCount
626 );
627}
628
638STATIC
639VOID
641 IN UINT8 *Ptr,
642 IN UINT16 Length,
643 IN UINT32 MappingCount,
644 IN UINT32 MappingOffset
645 )
646{
647 ParseAcpi (
648 TRUE,
649 2,
650 "Root Complex Node",
651 Ptr,
652 Length,
654 );
655
657 Ptr + MappingOffset,
658 Length - MappingOffset,
659 MappingCount
660 );
661}
662
672STATIC
673VOID
675 IN UINT8 *Ptr,
676 IN UINT16 Length,
677 IN UINT32 MappingCount,
678 IN UINT32 MappingOffset
679 )
680{
681 ParseAcpi (
682 TRUE,
683 2,
684 "PMCG Node",
685 Ptr,
686 Length,
688 );
689
691 Ptr + MappingOffset,
692 Length - MappingOffset,
693 MappingCount
694 );
695}
696
705STATIC
706VOID
708 IN UINT8 *Ptr,
709 IN UINT32 Length,
710 IN UINT32 DescCount
711 )
712{
713 UINT32 Index;
714 UINT32 Offset;
715 CHAR8 Buffer[40]; // Used for AsciiName param of ParseAcpi
716
717 Index = 0;
718 Offset = 0;
719
720 while ((Index < DescCount) &&
721 (Offset < Length))
722 {
724 Buffer,
725 sizeof (Buffer),
726 "Mem range Descriptor [%d]",
727 Index
728 );
729 Offset += ParseAcpi (
730 TRUE,
731 4,
732 Buffer,
733 Ptr + Offset,
734 Length - Offset,
736 );
737 Index++;
738 }
739}
740
750STATIC
751VOID
753 IN UINT8 *Ptr,
754 IN UINT16 Length,
755 IN UINT32 MappingCount,
756 IN UINT32 MappingOffset
757 )
758{
759 ParseAcpi (
760 TRUE,
761 2,
762 "RMR Node",
763 Ptr,
764 Length,
766 );
767
768 if (*IortNodeRevision == EFI_ACPI_IORT_RMR_NODE_REVISION_02) {
770 Print (
771 L"ERROR: RMR node Rev 2 (defined in IORT Rev E.c) must not be used."
772 L" IORT tabe Revision E.c is deprecated and must not be used.\n"
773 );
774 }
775
777 Ptr + MappingOffset,
778 Length - MappingOffset,
779 MappingCount
780 );
781
783 Ptr + (*RmrMemDescOffset),
784 Length - (*RmrMemDescOffset),
785 *RmrMemDescCount
786 );
787}
788
810VOID
811EFIAPI
813 IN BOOLEAN Trace,
814 IN UINT8 *Ptr,
815 IN UINT32 AcpiTableLength,
816 IN UINT8 AcpiTableRevision
817 )
818{
819 UINT32 Offset;
820 UINT32 Index;
821 UINT8 *NodePtr;
822
823 if (!Trace) {
824 return;
825 }
826
827 if ((AcpiTableRevision > EFI_ACPI_IO_REMAPPING_TABLE_REVISION_00) &&
828 (AcpiTableRevision < EFI_ACPI_IO_REMAPPING_TABLE_REVISION_05))
829 {
830 Print (
831 L"ERROR: Parsing not supported for IORT tabe Revision E, E.<a,b,c>.\n"
832 );
833 if (AcpiTableRevision == EFI_ACPI_IO_REMAPPING_TABLE_REVISION_04) {
835 Print (
836 L"ERROR: IORT tabe Revision E.c is deprecated and must not be used.\n"
837 );
838 }
839
840 return;
841 }
842
843 ParseAcpi (
844 TRUE,
845 0,
846 "IORT",
847 Ptr,
848 AcpiTableLength,
850 );
851
852 // Check if the values used to control the parsing logic have been
853 // successfully read.
854 if ((IortNodeCount == NULL) ||
855 (IortNodeOffset == NULL))
856 {
858 Print (
859 L"ERROR: Insufficient table length. AcpiTableLength = %d.\n",
860 AcpiTableLength
861 );
862 return;
863 }
864
865 Offset = *IortNodeOffset;
866 NodePtr = Ptr + Offset;
867 Index = 0;
868
869 // Parse the specified number of IORT nodes or the IORT table buffer length.
870 // Whichever is minimum.
871 while ((Index++ < *IortNodeCount) &&
872 (Offset < AcpiTableLength))
873 {
874 // Parse the IORT Node Header
875 ParseAcpi (
876 FALSE,
877 0,
878 "IORT Node Header",
879 NodePtr,
880 AcpiTableLength - Offset,
882 );
883
884 // Check if the values used to control the parsing logic have been
885 // successfully read.
886 if ((IortNodeType == NULL) ||
887 (IortNodeLength == NULL) ||
888 (IortIdMappingCount == NULL) ||
889 (IortIdMappingOffset == NULL))
890 {
892 Print (
893 L"ERROR: Insufficient remaining table buffer length to read the " \
894 L"IORT node header. Length = %d.\n",
895 AcpiTableLength - Offset
896 );
897 return;
898 }
899
900 // Validate IORT Node length
901 if ((*IortNodeLength == 0) ||
902 ((Offset + (*IortNodeLength)) > AcpiTableLength))
903 {
905 Print (
906 L"ERROR: Invalid IORT Node length. " \
907 L"Length = %d. Offset = %d. AcpiTableLength = %d.\n",
908 *IortNodeLength,
909 Offset,
910 AcpiTableLength
911 );
912 return;
913 }
914
915 PrintFieldName (2, L"* Node Offset *");
916 Print (L"0x%x\n", Offset);
917
918 switch (*IortNodeType) {
919 case EFI_ACPI_IORT_TYPE_ITS_GROUP:
921 NodePtr,
922 *IortNodeLength
923 );
924 break;
925 case EFI_ACPI_IORT_TYPE_NAMED_COMP:
927 NodePtr,
928 *IortNodeLength,
929 *IortIdMappingCount,
930 *IortIdMappingOffset
931 );
932 break;
933 case EFI_ACPI_IORT_TYPE_ROOT_COMPLEX:
935 NodePtr,
936 *IortNodeLength,
937 *IortIdMappingCount,
938 *IortIdMappingOffset
939 );
940 break;
941 case EFI_ACPI_IORT_TYPE_SMMUv1v2:
943 NodePtr,
944 *IortNodeLength,
945 *IortIdMappingCount,
946 *IortIdMappingOffset
947 );
948 break;
949 case EFI_ACPI_IORT_TYPE_SMMUv3:
951 NodePtr,
952 *IortNodeLength,
953 *IortIdMappingCount,
954 *IortIdMappingOffset
955 );
956 break;
957 case EFI_ACPI_IORT_TYPE_PMCG:
959 NodePtr,
960 *IortNodeLength,
961 *IortIdMappingCount,
962 *IortIdMappingOffset
963 );
964 break;
965 case EFI_ACPI_IORT_TYPE_RMR:
967 NodePtr,
968 *IortNodeLength,
969 *IortIdMappingCount,
970 *IortIdMappingOffset
971 );
972 break;
973 default:
975 Print (L"ERROR: Unsupported IORT Node type = %d\n", *IortNodeType);
976 } // switch
977
978 NodePtr += (*IortNodeLength);
979 Offset += (*IortNodeLength);
980 } // while
981}
VOID EFIAPI PrintFieldName(IN UINT32 Indent, IN CONST CHAR16 *FieldName)
Definition: AcpiParser.c:641
VOID EFIAPI IncrementErrorCount(VOID)
Definition: AcpiParser.c:83
UINT32 EFIAPI ParseAcpi(IN BOOLEAN Trace, IN UINT32 Indent, IN CONST CHAR8 *AsciiName OPTIONAL, IN UINT8 *Ptr, IN UINT32 Length, IN CONST ACPI_PARSER *Parser, IN UINT32 ParserItems)
Definition: AcpiParser.c:683
#define PARSER_PARAMS(Parser)
Definition: AcpiParser.h:494
#define PARSE_ACPI_HEADER(Info)
Definition: AcpiParser.h:501
STATIC CONST ACPI_PARSER InterruptArrayParser[]
Definition: IortParser.c:233
STATIC CONST ACPI_PARSER IortNodeHeaderParser[]
Definition: IortParser.c:199
VOID EFIAPI ParseAcpiIort(IN BOOLEAN Trace, IN UINT8 *Ptr, IN UINT32 AcpiTableLength, IN UINT8 AcpiTableRevision)
Definition: IortParser.c:812
STATIC CONST ACPI_PARSER ItsIdParser[]
Definition: IortParser.c:281
STATIC CONST ACPI_PARSER IortNodePmcgParser[]
Definition: IortParser.c:312
STATIC CONST ACPI_PARSER IortNodeRmrParser[]
Definition: IortParser.c:323
STATIC CONST ACPI_PARSER IortNodeRootComplexParser[]
Definition: IortParser.c:298
STATIC CONST ACPI_PARSER IortNodeSmmuV1V2Parser[]
Definition: IortParser.c:206
STATIC CONST ACPI_PARSER IortNodeRmrMemRangeDescParser[]
Definition: IortParser.c:335
STATIC VOID DumpIortNodeIts(IN UINT8 *Ptr, IN UINT16 Length)
Definition: IortParser.c:527
STATIC VOID DumpIortNodeRmrMemRangeDesc(IN UINT8 *Ptr, IN UINT32 Length, IN UINT32 DescCount)
Definition: IortParser.c:707
STATIC VOID DumpIortNodePmcg(IN UINT8 *Ptr, IN UINT16 Length, IN UINT32 MappingCount, IN UINT32 MappingOffset)
Definition: IortParser.c:674
STATIC VOID EFIAPI ValidatePmcgIdMappingCount(IN UINT8 *Ptr, IN UINT32 Length, IN VOID *Context)
Definition: IortParser.c:80
STATIC CONST ACPI_PARSER IortNodeSmmuV3Parser[]
Definition: IortParser.c:252
STATIC VOID EFIAPI ValidateItsIdMappingCount(IN UINT8 *Ptr, IN UINT32 Length, IN VOID *Context)
Definition: IortParser.c:56
STATIC VOID DumpIortNodeSmmuV1V2(IN UINT8 *Ptr, IN UINT16 Length, IN UINT32 MappingCount, IN UINT32 MappingOffset)
Definition: IortParser.c:397
STATIC CONST ACPI_PARSER IortNodeNamedComponentParser[]
Definition: IortParser.c:288
STATIC VOID DumpIortNodeRmr(IN UINT8 *Ptr, IN UINT16 Length, IN UINT32 MappingCount, IN UINT32 MappingOffset)
Definition: IortParser.c:752
STATIC VOID DumpIortNodeIdMappings(IN UINT8 *Ptr, IN UINT32 Length, IN UINT32 MappingCount)
Definition: IortParser.c:352
STATIC VOID DumpIortNodeNamedComponent(IN UINT8 *Ptr, IN UINT16 Length, IN UINT32 MappingCount, IN UINT32 MappingOffset)
Definition: IortParser.c:592
STATIC VOID DumpIortNodeRootComplex(IN UINT8 *Ptr, IN UINT16 Length, IN UINT32 MappingCount, IN UINT32 MappingOffset)
Definition: IortParser.c:640
STATIC CONST ACPI_PARSER IortNodeIdMappingParser[]
Definition: IortParser.c:241
#define PARSE_IORT_NODE_HEADER(ValidateIdMappingCount, ValidateIdArrayReference)
Definition: IortParser.c:173
STATIC VOID DumpIortNodeSmmuV3(IN UINT8 *Ptr, IN UINT16 Length, IN UINT32 MappingCount, IN UINT32 MappingOffset)
Definition: IortParser.c:496
STATIC VOID EFIAPI ValidateItsIdArrayReference(IN UINT8 *Ptr, IN UINT32 Length, IN VOID *Context)
Definition: IortParser.c:103
STATIC CONST ACPI_PARSER IortNodeItsParser[]
Definition: IortParser.c:270
STATIC VOID EFIAPI ValidatePhysicalRange(IN UINT8 *Ptr, IN UINT32 Length, IN VOID *Context)
Definition: IortParser.c:127
STATIC VOID EFIAPI ValidateRmrMemDescCount(IN UINT8 *Ptr, IN UINT32 Length, IN VOID *Context)
Definition: IortParser.c:153
STATIC CONST ACPI_PARSER IortParser[]
Definition: IortParser.c:187
UINTN EFIAPI AsciiSPrint(OUT CHAR8 *StartOfBuffer, IN UINTN BufferSize, IN CONST CHAR8 *FormatString,...)
Definition: PrintLib.c:813
#define NULL
Definition: Base.h:319
#define CONST
Definition: Base.h:259
#define STATIC
Definition: Base.h:264
#define TRUE
Definition: Base.h:301
#define FALSE
Definition: Base.h:307
#define IN
Definition: Base.h:279
UINTN EFIAPI Print(IN CONST CHAR16 *Format,...)
Definition: UefiLibPrint.c:113