REF: https://bugzilla.tianocore.org/show_bug.cgi?id=3737 Apply uncrustify changes to .c/.h files in the ShellPkg package Cc: Andrew Fish <afish@apple.com> Cc: Leif Lindholm <leif@nuviainc.com> Cc: Michael D Kinney <michael.d.kinney@intel.com> Signed-off-by: Michael Kubacki <michael.kubacki@microsoft.com> Reviewed-by: Ray Ni <ray.ni@intel.com>
		
			
				
	
	
		
			545 lines
		
	
	
		
			16 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			545 lines
		
	
	
		
			16 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/** @file
 | 
						|
  SRAT table parser
 | 
						|
 | 
						|
  Copyright (c) 2016 - 2020, ARM Limited. All rights reserved.
 | 
						|
  SPDX-License-Identifier: BSD-2-Clause-Patent
 | 
						|
 | 
						|
  @par Reference(s):
 | 
						|
    - ACPI 6.3 Specification - January 2019
 | 
						|
**/
 | 
						|
 | 
						|
#include <IndustryStandard/Acpi.h>
 | 
						|
#include <Library/PrintLib.h>
 | 
						|
#include <Library/UefiLib.h>
 | 
						|
#include "AcpiParser.h"
 | 
						|
#include "AcpiTableParser.h"
 | 
						|
#include "AcpiViewConfig.h"
 | 
						|
 | 
						|
// Local Variables
 | 
						|
STATIC CONST UINT8                   *SratRAType;
 | 
						|
STATIC CONST UINT8                   *SratRALength;
 | 
						|
STATIC CONST UINT8                   *SratDeviceHandleType;
 | 
						|
STATIC ACPI_DESCRIPTION_HEADER_INFO  AcpiHdrInfo;
 | 
						|
 | 
						|
/**
 | 
						|
  This function validates the Reserved field in the SRAT table header.
 | 
						|
 | 
						|
  @param [in] Ptr     Pointer to the start of the field data.
 | 
						|
  @param [in] Context Pointer to context specific information e.g. this
 | 
						|
                      could be a pointer to the ACPI table header.
 | 
						|
**/
 | 
						|
STATIC
 | 
						|
VOID
 | 
						|
EFIAPI
 | 
						|
ValidateSratReserved (
 | 
						|
  IN UINT8  *Ptr,
 | 
						|
  IN VOID   *Context
 | 
						|
  )
 | 
						|
{
 | 
						|
  if (*(UINT32 *)Ptr != 1) {
 | 
						|
    IncrementErrorCount ();
 | 
						|
    Print (L"\nERROR: Reserved should be 1 for backward compatibility.\n");
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
  This function validates the Device Handle Type field in the Generic Initiator
 | 
						|
  Affinity Structure.
 | 
						|
 | 
						|
  @param [in] Ptr     Pointer to the start of the field data.
 | 
						|
  @param [in] Context Pointer to context specific information e.g. this
 | 
						|
                      could be a pointer to the ACPI table header.
 | 
						|
**/
 | 
						|
STATIC
 | 
						|
VOID
 | 
						|
EFIAPI
 | 
						|
ValidateSratDeviceHandleType (
 | 
						|
  IN UINT8  *Ptr,
 | 
						|
  IN VOID   *Context
 | 
						|
  )
 | 
						|
{
 | 
						|
  UINT8  DeviceHandleType;
 | 
						|
 | 
						|
  DeviceHandleType = *Ptr;
 | 
						|
 | 
						|
  if (DeviceHandleType > EFI_ACPI_6_3_PCI_DEVICE_HANDLE) {
 | 
						|
    IncrementErrorCount ();
 | 
						|
    Print (
 | 
						|
      L"\nERROR: Invalid Device Handle Type: %d. Must be between 0 and %d.",
 | 
						|
      DeviceHandleType,
 | 
						|
      EFI_ACPI_6_3_PCI_DEVICE_HANDLE
 | 
						|
      );
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
  This function traces the PCI BDF Number field inside Device Handle - PCI
 | 
						|
 | 
						|
  @param [in] Format  Format string for tracing the data.
 | 
						|
  @param [in] Ptr     Pointer to the start of the buffer.
 | 
						|
**/
 | 
						|
STATIC
 | 
						|
VOID
 | 
						|
EFIAPI
 | 
						|
DumpSratPciBdfNumber (
 | 
						|
  IN CONST CHAR16  *Format,
 | 
						|
  IN UINT8         *Ptr
 | 
						|
  )
 | 
						|
{
 | 
						|
  CHAR16  Buffer[OUTPUT_FIELD_COLUMN_WIDTH];
 | 
						|
 | 
						|
  Print (L"\n");
 | 
						|
 | 
						|
  /*
 | 
						|
    The PCI BDF Number subfields are printed in the order specified in the ACPI
 | 
						|
    specification. The format of the 16-bit PCI BDF Number field is as follows:
 | 
						|
 | 
						|
    +-----+------+------+
 | 
						|
    |DEV  | FUNC | BUS  |
 | 
						|
    +-----+------+------+
 | 
						|
    |15:11| 10:8 |  7:0 |
 | 
						|
    +-----+------+------+
 | 
						|
  */
 | 
						|
 | 
						|
  // Print PCI Bus Number (Bits 7:0 of Byte 2)
 | 
						|
  UnicodeSPrint (
 | 
						|
    Buffer,
 | 
						|
    sizeof (Buffer),
 | 
						|
    L"PCI Bus Number"
 | 
						|
    );
 | 
						|
  PrintFieldName (4, Buffer);
 | 
						|
  Print (
 | 
						|
    L"0x%x\n",
 | 
						|
    *Ptr
 | 
						|
    );
 | 
						|
 | 
						|
  Ptr++;
 | 
						|
 | 
						|
  // Print PCI Device Number (Bits 7:3 of Byte 3)
 | 
						|
  UnicodeSPrint (
 | 
						|
    Buffer,
 | 
						|
    sizeof (Buffer),
 | 
						|
    L"PCI Device Number"
 | 
						|
    );
 | 
						|
  PrintFieldName (4, Buffer);
 | 
						|
  Print (
 | 
						|
    L"0x%x\n",
 | 
						|
    (*Ptr & (BIT7 | BIT6 | BIT5 | BIT4 | BIT3)) >> 3
 | 
						|
    );
 | 
						|
 | 
						|
  // PCI Function Number (Bits 2:0 of Byte 3)
 | 
						|
  UnicodeSPrint (
 | 
						|
    Buffer,
 | 
						|
    sizeof (Buffer),
 | 
						|
    L"PCI Function Number"
 | 
						|
    );
 | 
						|
  PrintFieldName (4, Buffer);
 | 
						|
  Print (
 | 
						|
    L"0x%x\n",
 | 
						|
    *Ptr & (BIT2 | BIT1 | BIT0)
 | 
						|
    );
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
  An ACPI_PARSER array describing the Device Handle - ACPI
 | 
						|
**/
 | 
						|
STATIC CONST ACPI_PARSER  SratDeviceHandleAcpiParser[] = {
 | 
						|
  { L"ACPI_HID", 8, 0,  L"0x%lx", NULL, NULL, NULL, NULL },
 | 
						|
  { L"ACPI_UID", 4, 8,  L"0x%x",  NULL, NULL, NULL, NULL },
 | 
						|
  { L"Reserved", 4, 12, L"0x%x",  NULL, NULL, NULL, NULL }
 | 
						|
};
 | 
						|
 | 
						|
/**
 | 
						|
  An ACPI_PARSER array describing the Device Handle - PCI
 | 
						|
**/
 | 
						|
STATIC CONST ACPI_PARSER  SratDeviceHandlePciParser[] = {
 | 
						|
  { L"PCI Segment",    2,  0, L"0x%x",                                    NULL,                 NULL, NULL, NULL },
 | 
						|
  { L"PCI BDF Number", 2,  2, NULL,                                       DumpSratPciBdfNumber, NULL, NULL, NULL },
 | 
						|
  { L"Reserved",       12, 4, L"%x %x %x %x - %x %x %x %x - %x %x %x %x", Dump12Chars,
 | 
						|
    NULL, NULL, NULL }
 | 
						|
};
 | 
						|
 | 
						|
/**
 | 
						|
  This function traces the Device Handle field inside Generic Initiator
 | 
						|
  Affinity Structure.
 | 
						|
 | 
						|
  @param [in] Format  Format string for tracing the data.
 | 
						|
  @param [in] Ptr     Pointer to the start of the buffer.
 | 
						|
**/
 | 
						|
STATIC
 | 
						|
VOID
 | 
						|
EFIAPI
 | 
						|
DumpSratDeviceHandle (
 | 
						|
  IN CONST CHAR16  *Format,
 | 
						|
  IN UINT8         *Ptr
 | 
						|
  )
 | 
						|
{
 | 
						|
  if (SratDeviceHandleType == NULL) {
 | 
						|
    IncrementErrorCount ();
 | 
						|
    Print (L"\nERROR: Device Handle Type read incorrectly.\n");
 | 
						|
    return;
 | 
						|
  }
 | 
						|
 | 
						|
  Print (L"\n");
 | 
						|
 | 
						|
  if (*SratDeviceHandleType == EFI_ACPI_6_3_ACPI_DEVICE_HANDLE) {
 | 
						|
    ParseAcpi (
 | 
						|
      TRUE,
 | 
						|
      2,
 | 
						|
      NULL,
 | 
						|
      Ptr,
 | 
						|
      sizeof (EFI_ACPI_6_3_DEVICE_HANDLE_ACPI),
 | 
						|
      PARSER_PARAMS (SratDeviceHandleAcpiParser)
 | 
						|
      );
 | 
						|
  } else if (*SratDeviceHandleType == EFI_ACPI_6_3_PCI_DEVICE_HANDLE) {
 | 
						|
    ParseAcpi (
 | 
						|
      TRUE,
 | 
						|
      2,
 | 
						|
      NULL,
 | 
						|
      Ptr,
 | 
						|
      sizeof (EFI_ACPI_6_3_DEVICE_HANDLE_PCI),
 | 
						|
      PARSER_PARAMS (SratDeviceHandlePciParser)
 | 
						|
      );
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
  This function traces the APIC Proximity Domain field.
 | 
						|
 | 
						|
  @param [in] Format  Format string for tracing the data.
 | 
						|
  @param [in] Ptr     Pointer to the start of the buffer.
 | 
						|
**/
 | 
						|
STATIC
 | 
						|
VOID
 | 
						|
EFIAPI
 | 
						|
DumpSratApicProximity (
 | 
						|
  IN CONST CHAR16  *Format,
 | 
						|
  IN UINT8         *Ptr
 | 
						|
  )
 | 
						|
{
 | 
						|
  UINT32  ProximityDomain;
 | 
						|
 | 
						|
  ProximityDomain = Ptr[0] | (Ptr[1] << 8) | (Ptr[2] << 16);
 | 
						|
 | 
						|
  Print (Format, ProximityDomain);
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
  An ACPI_PARSER array describing the SRAT Table.
 | 
						|
**/
 | 
						|
STATIC CONST ACPI_PARSER  SratParser[] = {
 | 
						|
  PARSE_ACPI_HEADER (&AcpiHdrInfo),
 | 
						|
  { L"Reserved",                   4,  36, L"0x%x",  NULL, NULL, ValidateSratReserved, NULL },
 | 
						|
  { L"Reserved",                   8,  40, L"0x%lx", NULL, NULL, NULL,                 NULL }
 | 
						|
};
 | 
						|
 | 
						|
/**
 | 
						|
  An ACPI_PARSER array describing the Resource Allocation structure header.
 | 
						|
**/
 | 
						|
STATIC CONST ACPI_PARSER  SratResourceAllocationParser[] = {
 | 
						|
  { L"Type",   1, 0, NULL, NULL, (VOID **)&SratRAType,   NULL, NULL },
 | 
						|
  { L"Length", 1, 1, NULL, NULL, (VOID **)&SratRALength, NULL, NULL }
 | 
						|
};
 | 
						|
 | 
						|
/**
 | 
						|
  An ACPI_PARSER array describing the GICC Affinity structure.
 | 
						|
**/
 | 
						|
STATIC CONST ACPI_PARSER  SratGicCAffinityParser[] = {
 | 
						|
  { L"Type",               1, 0,  L"0x%x", NULL, NULL, NULL, NULL },
 | 
						|
  { L"Length",             1, 1,  L"0x%x", NULL, NULL, NULL, NULL },
 | 
						|
 | 
						|
  { L"Proximity Domain",   4, 2,  L"0x%x", NULL, NULL, NULL, NULL },
 | 
						|
  { L"ACPI Processor UID", 4, 6,  L"0x%x", NULL, NULL, NULL, NULL },
 | 
						|
  { L"Flags",              4, 10, L"0x%x", NULL, NULL, NULL, NULL },
 | 
						|
  { L"Clock Domain",       4, 14, L"0x%x", NULL, NULL, NULL, NULL }
 | 
						|
};
 | 
						|
 | 
						|
/**
 | 
						|
  An ACPI_PARSER array describing the GIC ITS Affinity structure.
 | 
						|
**/
 | 
						|
STATIC CONST ACPI_PARSER  SratGicITSAffinityParser[] = {
 | 
						|
  { L"Type",             1, 0, L"0x%x", NULL, NULL, NULL, NULL },
 | 
						|
  { L"Length",           1, 1, L"0x%x", NULL, NULL, NULL, NULL },
 | 
						|
 | 
						|
  { L"Proximity Domain", 4, 2, L"0x%x", NULL, NULL, NULL, NULL },
 | 
						|
  { L"Reserved",         2, 6, L"0x%x", NULL, NULL, NULL, NULL },
 | 
						|
  { L"ITS Id",           4, 8, L"0x%x", NULL, NULL, NULL, NULL },
 | 
						|
};
 | 
						|
 | 
						|
/**
 | 
						|
  An ACPI_PARSER array describing the Generic Initiator Affinity Structure
 | 
						|
**/
 | 
						|
STATIC CONST ACPI_PARSER  SratGenericInitiatorAffinityParser[] = {
 | 
						|
  { L"Type",               1,  0,  L"0x%x", NULL,                 NULL,                           NULL, NULL },
 | 
						|
  { L"Length",             1,  1,  L"0x%x", NULL,                 NULL,                           NULL, NULL },
 | 
						|
 | 
						|
  { L"Reserved",           1,  2,  L"0x%x", NULL,                 NULL,                           NULL, NULL },
 | 
						|
  { L"Device Handle Type", 1,  3,  L"%d",   NULL,                 (VOID **)&SratDeviceHandleType,
 | 
						|
    ValidateSratDeviceHandleType, NULL },
 | 
						|
  { L"Proximity Domain",   4,  4,  L"0x%x", NULL,                 NULL,                           NULL, NULL },
 | 
						|
  { L"Device Handle",      16, 8,  L"%s",   DumpSratDeviceHandle, NULL,                           NULL, NULL },
 | 
						|
  { L"Flags",              4,  24, L"0x%x", NULL,                 NULL,                           NULL, NULL },
 | 
						|
  { L"Reserved",           4,  28, L"0x%x", NULL,                 NULL,                           NULL, NULL }
 | 
						|
};
 | 
						|
 | 
						|
/**
 | 
						|
  An ACPI_PARSER array describing the Memory Affinity structure.
 | 
						|
**/
 | 
						|
STATIC CONST ACPI_PARSER  SratMemAffinityParser[] = {
 | 
						|
  { L"Type",              1, 0,  L"0x%x",  NULL, NULL, NULL, NULL },
 | 
						|
  { L"Length",            1, 1,  L"0x%x",  NULL, NULL, NULL, NULL },
 | 
						|
 | 
						|
  { L"Proximity Domain",  4, 2,  L"0x%x",  NULL, NULL, NULL, NULL },
 | 
						|
  { L"Reserved",          2, 6,  L"0x%x",  NULL, NULL, NULL, NULL },
 | 
						|
  { L"Base Address Low",  4, 8,  L"0x%x",  NULL, NULL, NULL, NULL },
 | 
						|
  { L"Base Address High", 4, 12, L"0x%x",  NULL, NULL, NULL, NULL },
 | 
						|
  { L"Length Low",        4, 16, L"0x%x",  NULL, NULL, NULL, NULL },
 | 
						|
  { L"Length High",       4, 20, L"0x%x",  NULL, NULL, NULL, NULL },
 | 
						|
  { L"Reserved",          4, 24, L"0x%x",  NULL, NULL, NULL, NULL },
 | 
						|
  { L"Flags",             4, 28, L"0x%x",  NULL, NULL, NULL, NULL },
 | 
						|
  { L"Reserved",          8, 32, L"0x%lx", NULL, NULL, NULL, NULL }
 | 
						|
};
 | 
						|
 | 
						|
/**
 | 
						|
  An ACPI_PARSER array describing the APIC/SAPIC Affinity structure.
 | 
						|
**/
 | 
						|
STATIC CONST ACPI_PARSER  SratApciSapicAffinityParser[] = {
 | 
						|
  { L"Type",                    1, 0,  L"0x%x", NULL,                  NULL, NULL, NULL },
 | 
						|
  { L"Length",                  1, 1,  L"0x%x", NULL,                  NULL, NULL, NULL },
 | 
						|
 | 
						|
  { L"Proximity Domain [7:0]",  1, 2,  L"0x%x", NULL,                  NULL, NULL, NULL },
 | 
						|
  { L"APIC ID",                 1, 3,  L"0x%x", NULL,                  NULL, NULL, NULL },
 | 
						|
  { L"Flags",                   4, 4,  L"0x%x", NULL,                  NULL, NULL, NULL },
 | 
						|
  { L"Local SAPIC EID",         1, 8,  L"0x%x", NULL,                  NULL, NULL, NULL },
 | 
						|
  { L"Proximity Domain [31:8]", 3, 9,  L"0x%x", DumpSratApicProximity,
 | 
						|
    NULL, NULL, NULL },
 | 
						|
  { L"Clock Domain",            4, 12, L"0x%x", NULL,                  NULL, NULL, NULL }
 | 
						|
};
 | 
						|
 | 
						|
/**
 | 
						|
  An ACPI_PARSER array describing the Processor Local x2APIC Affinity structure.
 | 
						|
**/
 | 
						|
STATIC CONST ACPI_PARSER  SratX2ApciAffinityParser[] = {
 | 
						|
  { L"Type",             1, 0,  L"0x%x", NULL, NULL, NULL, NULL },
 | 
						|
  { L"Length",           1, 1,  L"0x%x", NULL, NULL, NULL, NULL },
 | 
						|
 | 
						|
  { L"Reserved",         2, 2,  L"0x%x", NULL, NULL, NULL, NULL },
 | 
						|
  { L"Proximity Domain", 4, 4,  L"0x%x", NULL, NULL, NULL, NULL },
 | 
						|
  { L"X2APIC ID",        4, 8,  L"0x%x", NULL, NULL, NULL, NULL },
 | 
						|
  { L"Flags",            4, 12, L"0x%x", NULL, NULL, NULL, NULL },
 | 
						|
  { L"Clock Domain",     4, 16, L"0x%x", NULL, NULL, NULL, NULL },
 | 
						|
  { L"Reserved",         4, 20, L"0x%x", NULL, NULL, NULL, NULL }
 | 
						|
};
 | 
						|
 | 
						|
/**
 | 
						|
  This function parses the ACPI SRAT table.
 | 
						|
  When trace is enabled this function parses the SRAT table and
 | 
						|
  traces the ACPI table fields.
 | 
						|
 | 
						|
  This function parses the following Resource Allocation Structures:
 | 
						|
    - Processor Local APIC/SAPIC Affinity Structure
 | 
						|
    - Memory Affinity Structure
 | 
						|
    - Processor Local x2APIC Affinity Structure
 | 
						|
    - GICC Affinity Structure
 | 
						|
 | 
						|
  This function also performs validation of the ACPI table fields.
 | 
						|
 | 
						|
  @param [in] Trace              If TRUE, trace the ACPI fields.
 | 
						|
  @param [in] Ptr                Pointer to the start of the buffer.
 | 
						|
  @param [in] AcpiTableLength    Length of the ACPI table.
 | 
						|
  @param [in] AcpiTableRevision  Revision of the ACPI table.
 | 
						|
**/
 | 
						|
VOID
 | 
						|
EFIAPI
 | 
						|
ParseAcpiSrat (
 | 
						|
  IN BOOLEAN  Trace,
 | 
						|
  IN UINT8    *Ptr,
 | 
						|
  IN UINT32   AcpiTableLength,
 | 
						|
  IN UINT8    AcpiTableRevision
 | 
						|
  )
 | 
						|
{
 | 
						|
  UINT32  Offset;
 | 
						|
  UINT8   *ResourcePtr;
 | 
						|
  UINT32  GicCAffinityIndex;
 | 
						|
  UINT32  GicITSAffinityIndex;
 | 
						|
  UINT32  GenericInitiatorAffinityIndex;
 | 
						|
  UINT32  MemoryAffinityIndex;
 | 
						|
  UINT32  ApicSapicAffinityIndex;
 | 
						|
  UINT32  X2ApicAffinityIndex;
 | 
						|
  CHAR8   Buffer[80]; // Used for AsciiName param of ParseAcpi
 | 
						|
 | 
						|
  GicCAffinityIndex             = 0;
 | 
						|
  GicITSAffinityIndex           = 0;
 | 
						|
  GenericInitiatorAffinityIndex = 0;
 | 
						|
  MemoryAffinityIndex           = 0;
 | 
						|
  ApicSapicAffinityIndex        = 0;
 | 
						|
  X2ApicAffinityIndex           = 0;
 | 
						|
 | 
						|
  if (!Trace) {
 | 
						|
    return;
 | 
						|
  }
 | 
						|
 | 
						|
  Offset = ParseAcpi (
 | 
						|
             TRUE,
 | 
						|
             0,
 | 
						|
             "SRAT",
 | 
						|
             Ptr,
 | 
						|
             AcpiTableLength,
 | 
						|
             PARSER_PARAMS (SratParser)
 | 
						|
             );
 | 
						|
 | 
						|
  ResourcePtr = Ptr + Offset;
 | 
						|
 | 
						|
  while (Offset < AcpiTableLength) {
 | 
						|
    ParseAcpi (
 | 
						|
      FALSE,
 | 
						|
      0,
 | 
						|
      NULL,
 | 
						|
      ResourcePtr,
 | 
						|
      AcpiTableLength - Offset,
 | 
						|
      PARSER_PARAMS (SratResourceAllocationParser)
 | 
						|
      );
 | 
						|
 | 
						|
    // Check if the values used to control the parsing logic have been
 | 
						|
    // successfully read.
 | 
						|
    if ((SratRAType == NULL) ||
 | 
						|
        (SratRALength == NULL))
 | 
						|
    {
 | 
						|
      IncrementErrorCount ();
 | 
						|
      Print (
 | 
						|
        L"ERROR: Insufficient remaining table buffer length to read the " \
 | 
						|
        L"Static Resource Allocation structure header. Length = %d.\n",
 | 
						|
        AcpiTableLength - Offset
 | 
						|
        );
 | 
						|
      return;
 | 
						|
    }
 | 
						|
 | 
						|
    // Validate Static Resource Allocation Structure length
 | 
						|
    if ((*SratRALength == 0) ||
 | 
						|
        ((Offset + (*SratRALength)) > AcpiTableLength))
 | 
						|
    {
 | 
						|
      IncrementErrorCount ();
 | 
						|
      Print (
 | 
						|
        L"ERROR: Invalid Static Resource Allocation Structure length. " \
 | 
						|
        L"Length = %d. Offset = %d. AcpiTableLength = %d.\n",
 | 
						|
        *SratRALength,
 | 
						|
        Offset,
 | 
						|
        AcpiTableLength
 | 
						|
        );
 | 
						|
      return;
 | 
						|
    }
 | 
						|
 | 
						|
    switch (*SratRAType) {
 | 
						|
      case EFI_ACPI_6_3_GICC_AFFINITY:
 | 
						|
        AsciiSPrint (
 | 
						|
          Buffer,
 | 
						|
          sizeof (Buffer),
 | 
						|
          "GICC Affinity Structure [%d]",
 | 
						|
          GicCAffinityIndex++
 | 
						|
          );
 | 
						|
        ParseAcpi (
 | 
						|
          TRUE,
 | 
						|
          2,
 | 
						|
          Buffer,
 | 
						|
          ResourcePtr,
 | 
						|
          *SratRALength,
 | 
						|
          PARSER_PARAMS (SratGicCAffinityParser)
 | 
						|
          );
 | 
						|
        break;
 | 
						|
 | 
						|
      case EFI_ACPI_6_3_GIC_ITS_AFFINITY:
 | 
						|
        AsciiSPrint (
 | 
						|
          Buffer,
 | 
						|
          sizeof (Buffer),
 | 
						|
          "GIC ITS Affinity Structure [%d]",
 | 
						|
          GicITSAffinityIndex++
 | 
						|
          );
 | 
						|
        ParseAcpi (
 | 
						|
          TRUE,
 | 
						|
          2,
 | 
						|
          Buffer,
 | 
						|
          ResourcePtr,
 | 
						|
          *SratRALength,
 | 
						|
          PARSER_PARAMS (SratGicITSAffinityParser)
 | 
						|
          );
 | 
						|
        break;
 | 
						|
 | 
						|
      case EFI_ACPI_6_3_GENERIC_INITIATOR_AFFINITY:
 | 
						|
        AsciiSPrint (
 | 
						|
          Buffer,
 | 
						|
          sizeof (Buffer),
 | 
						|
          "Generic Initiator Affinity Structure [%d]",
 | 
						|
          GenericInitiatorAffinityIndex++
 | 
						|
          );
 | 
						|
        ParseAcpi (
 | 
						|
          TRUE,
 | 
						|
          2,
 | 
						|
          Buffer,
 | 
						|
          ResourcePtr,
 | 
						|
          *SratRALength,
 | 
						|
          PARSER_PARAMS (SratGenericInitiatorAffinityParser)
 | 
						|
          );
 | 
						|
        break;
 | 
						|
 | 
						|
      case EFI_ACPI_6_3_MEMORY_AFFINITY:
 | 
						|
        AsciiSPrint (
 | 
						|
          Buffer,
 | 
						|
          sizeof (Buffer),
 | 
						|
          "Memory Affinity Structure [%d]",
 | 
						|
          MemoryAffinityIndex++
 | 
						|
          );
 | 
						|
        ParseAcpi (
 | 
						|
          TRUE,
 | 
						|
          2,
 | 
						|
          Buffer,
 | 
						|
          ResourcePtr,
 | 
						|
          *SratRALength,
 | 
						|
          PARSER_PARAMS (SratMemAffinityParser)
 | 
						|
          );
 | 
						|
        break;
 | 
						|
 | 
						|
      case EFI_ACPI_6_3_PROCESSOR_LOCAL_APIC_SAPIC_AFFINITY:
 | 
						|
        AsciiSPrint (
 | 
						|
          Buffer,
 | 
						|
          sizeof (Buffer),
 | 
						|
          "APIC/SAPIC Affinity Structure [%d]",
 | 
						|
          ApicSapicAffinityIndex++
 | 
						|
          );
 | 
						|
        ParseAcpi (
 | 
						|
          TRUE,
 | 
						|
          2,
 | 
						|
          Buffer,
 | 
						|
          ResourcePtr,
 | 
						|
          *SratRALength,
 | 
						|
          PARSER_PARAMS (SratApciSapicAffinityParser)
 | 
						|
          );
 | 
						|
        break;
 | 
						|
 | 
						|
      case EFI_ACPI_6_3_PROCESSOR_LOCAL_X2APIC_AFFINITY:
 | 
						|
        AsciiSPrint (
 | 
						|
          Buffer,
 | 
						|
          sizeof (Buffer),
 | 
						|
          "X2APIC Affinity Structure [%d]",
 | 
						|
          X2ApicAffinityIndex++
 | 
						|
          );
 | 
						|
        ParseAcpi (
 | 
						|
          TRUE,
 | 
						|
          2,
 | 
						|
          Buffer,
 | 
						|
          ResourcePtr,
 | 
						|
          *SratRALength,
 | 
						|
          PARSER_PARAMS (SratX2ApciAffinityParser)
 | 
						|
          );
 | 
						|
        break;
 | 
						|
 | 
						|
      default:
 | 
						|
        IncrementErrorCount ();
 | 
						|
        Print (L"ERROR: Unknown SRAT Affinity type = 0x%x\n", *SratRAType);
 | 
						|
        break;
 | 
						|
    }
 | 
						|
 | 
						|
    ResourcePtr += (*SratRALength);
 | 
						|
    Offset      += (*SratRALength);
 | 
						|
  }
 | 
						|
}
 |