From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by mx.groups.io with SMTP id smtpd.web10.405.1624378323418185615 for ; Tue, 22 Jun 2021 09:12:03 -0700 Authentication-Results: mx.groups.io; dkim=missing; spf=pass (domain: arm.com, ip: 217.140.110.172, mailfrom: pierre.gondois@arm.com) Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 7A96D31B; Tue, 22 Jun 2021 09:12:02 -0700 (PDT) Received: from [10.57.78.245] (unknown [10.57.78.245]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPA id 0649D3F718; Tue, 22 Jun 2021 09:12:00 -0700 (PDT) Subject: Re: [edk2-devel] [edk2-platforms][PATCH V1 4/4] Platform/ARM/N1Sdp: Configuration Manager for N1Sdp To: Sami Mujawar , devel@edk2.groups.io, khasim.mohammed@arm.com References: <20210602124701.18045-1-khasim.mohammed@arm.com> <20210602124701.18045-5-khasim.mohammed@arm.com> <9a383418-594d-fe23-d904-1c0b138e71a3@arm.com> From: "PierreGondois" Message-ID: Date: Tue, 22 Jun 2021 17:11:54 +0100 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.11.0 MIME-Version: 1.0 In-Reply-To: <9a383418-594d-fe23-d904-1c0b138e71a3@arm.com> Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: quoted-printable Hi Khasim Just some comments about the SsdtPci.asl and SsdtRemotePci.asl files: =C2=A0- is it possible to update the ACPI spec referenced from 6.1 to 6.4 =C2=A0=C2=A0 as this is the latest version ? =C2=A0- isn't it necessary to have an _OSC method in each PCI device, =C2=A0=C2=A0 cf PCI Firmware Specification Revision 3.3 =C2=A0- is there a reason to have two asl files to describe the PCI buses= instead =C2=A0=C2=A0 of one ? Regards, Pierre On 6/22/21 3:38 PM, Sami Mujawar wrote: > Hi Khasim, > > This patch really needs to be split as it is too large to review. Also,= some changes don't look relevant to the commit message or the subject of= the patch, e.g PlatformDxe changes. > > Other than that, please find my response inline marked [SAMI]. > > Regards, > > Sami Mujawar > > > On 02/06/2021 01:47 PM, Khasim Mohammed via groups.io wrote: >> The dynamic tables framework utilizes the configuration manager >> protocol to get the platform specific information required for >> building the firmware tables. >> >> The configuration manager is a platform specific component that >> collates the platform hardware information and builds an abstract >> platform configuration repository. The configuration manager also >> implements the configuration manager protocol which returns the >> hardware information requested by the table generators. >> >> This patch implements the configuration manager for N1SDP >> platform. It enables support for generating the following >> ACPI tables: >> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0 1. FACP >> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0 2. DSDT >> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0 3. GTDT >> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0 4. APIC >> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0 5. SPCR >> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0 6. DBG2 >> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0 7. PPTT >> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0 8. IORT >> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0 9. MCFG >> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= 10. SSDT - PCI >> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= 11. SSDT - REMOTE PCI >> >> Also added : >> =C2=A0=C2=A0=C2=A0 ACPI bindings for CoreSight components. >> =C2=A0=C2=A0=C2=A0 Support for Arm CMN-600 PMU >> =C2=A0=C2=A0=C2=A0 HMAT table and expose CCIX memory as EFI_MEMORY_SP >> >> Signed-off-by: Sami Mujawar >> Signed-off-by: Khasim Syed Mohammed >> Signed-off-by: Chandni Cherukuri >> Signed-off-by: Manoj Kumar >> Signed-off-by: Patrik Berglund >> Signed-off-by: anukou01 >> Signed-off-by: Sayanta Pattanayak >> --- >> =C2=A0 Platform/ARM/N1Sdp/N1SdpPlatform.dec=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0 |=C2=A0=C2=A0 10 + >> =C2=A0 Silicon/ARM/NeoverseN1Soc/NeoverseN1Soc.dec=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 |=C2=A0=C2=A0=C2=A0 5 + >> =C2=A0 Platform/ARM/N1Sdp/ConfigurationManager/ConfigurationManager.ds= c.inc=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 |=C2= =A0=C2=A0 16 + >> =C2=A0 Platform/ARM/N1Sdp/N1SdpPlatform.dsc=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0 |=C2=A0=C2=A0 10 + >> =C2=A0 Platform/ARM/N1Sdp/N1SdpPlatform.fdf=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0 |=C2=A0=C2=A0=C2=A0 9 + >> =C2=A0 Platform/ARM/N1Sdp/ConfigurationManager/ConfigurationManagerDxe= /ConfigurationManagerDxe.inf |=C2=A0 167 ++ >> =C2=A0 Platform/ARM/N1Sdp/Drivers/PlatformDxe/PlatformDxe.inf=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 |=C2=A0=C2= =A0=C2=A0 4 + >> =C2=A0 Platform/ARM/N1Sdp/ConfigurationManager/ConfigurationManagerDxe= /ConfigurationManager.h=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 |=C2=A0 307 +++ >> =C2=A0 Platform/ARM/N1Sdp/ConfigurationManager/ConfigurationManagerDxe= /Platform.h=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 |=C2=A0=C2=A0 92 + >> =C2=A0 Platform/ARM/N1Sdp/Include/N1SdpAcpiHeader.h=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 |=C2=A0=C2=A0 35 + >> =C2=A0 Platform/ARM/N1Sdp/ConfigurationManager/ConfigurationManagerDxe= /ConfigurationManager.c=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 | 2197 ++++++++++++= ++++++++ >> =C2=A0 Platform/ARM/N1Sdp/ConfigurationManager/ConfigurationManagerDxe= /Hmat.c=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 |=C2=A0 103 = + >> =C2=A0 Platform/ARM/N1Sdp/Drivers/PlatformDxe/PlatformDxe.c=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 = |=C2=A0=C2=A0=C2=A0 1 + >> =C2=A0 Platform/ARM/N1Sdp/ConfigurationManager/ConfigurationManagerDxe= /AslTables/Dsdt.asl=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= |=C2=A0 477 +++++ >> =C2=A0 Platform/ARM/N1Sdp/ConfigurationManager/ConfigurationManagerDxe= /AslTables/SsdtPci.asl=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 |=C2=A0 247 ++= + >> =C2=A0 Platform/ARM/N1Sdp/ConfigurationManager/ConfigurationManagerDxe= /AslTables/SsdtRemotePci.asl |=C2=A0 156 ++ >> =C2=A0 16 files changed, 3836 insertions(+) >> >> diff --git a/Platform/ARM/N1Sdp/N1SdpPlatform.dec b/Platform/ARM/N1Sdp= /N1SdpPlatform.dec >> index 4b730d728eaf..a6f982c7af3f 100644 >> --- a/Platform/ARM/N1Sdp/N1SdpPlatform.dec >> +++ b/Platform/ARM/N1Sdp/N1SdpPlatform.dec >> @@ -22,17 +22,22 @@ [Defines] >> =C2=A0 # >> =C2=A0 ###############################################################= ################# >> =C2=A0 [Includes.common] >> +=C2=A0 Include=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0 # Root include for the package >> =C2=A0 =C2=A0 [LibraryClasses] >> =C2=A0=C2=A0=C2=A0 ArmPlatformLib|Silicon/ARM/NeoverseN1Soc/Library/Pl= atformLib/PlatformLib.inf >> =C2=A0 =C2=A0 [Guids.common] >> =C2=A0=C2=A0=C2=A0 gArmN1SdpTokenSpaceGuid =3D=C2=A0 { 0xd8f1624a, 0x9= 8c1, 0x4f64, { 0xa6, 0x41, 0x19, 0x5e, 0xb5, 0x3b, 0x26, 0x0f } } >> +=C2=A0 gN1SdpAcpiTableFileGuid =3D=C2=A0 { 0x9af67d31, 0x7de8, 0x4a71= , { 0xa9, 0xa8, 0xa5, 0x97, 0xa2, 0x76, 0x59, 0xce } } > [SAMI] I don't think the gN1SdpAcpiTableFileGuid would be needed when D= ynamic Tables Framework is used. Can you explain why this is added here, = please? > [/SAMI] >> =C2=A0 =C2=A0 [PcdsFixedAtBuild] >> =C2=A0=C2=A0=C2=A0 gArmN1SdpTokenSpaceGuid.PcdRamDiskBase|0x88000000|U= INT32|0x00000001 >> =C2=A0=C2=A0=C2=A0 gArmN1SdpTokenSpaceGuid.PcdRamDiskSize|0x18000000|U= INT32|0x00000002 >> =C2=A0 +=C2=A0 # PCIe >> +=C2=A0 gArmN1SdpTokenSpaceGuid.PcdPcieExpressBaseAddress|0x70000000|U= INT32|0x00000007 >> + >> =C2=A0=C2=A0=C2=A0 # External memory >> =C2=A0=C2=A0=C2=A0 gArmNeoverseN1SocTokenSpaceGuid.PcdExtMemorySpace|0= |UINT64|0x00000029 >> =C2=A0 @@ -88,3 +93,8 @@ [PcdsFixedAtBuild.common] >> =C2=A0=C2=A0=C2=A0 # unmapped reserved region results in a DECERR resp= onse. >> =C2=A0=C2=A0=C2=A0 # >> =C2=A0=C2=A0=C2=A0 gArmN1SdpTokenSpaceGuid.PcdCsComponentSize|0x1000|U= INT32|0x00000049 >> + >> +=C2=A0 # Remote Chip PCIe >> +=C2=A0 gArmN1SdpTokenSpaceGuid.PcdRemotePcieIoTranslation|0x400752000= 00|UINT64|0x0000004A >> +=C2=A0 gArmN1SdpTokenSpaceGuid.PcdRemotePcieMmio32Translation|0x40000= 000000|UINT64|0x0000004B >> +=C2=A0 gArmN1SdpTokenSpaceGuid.PcdRemotePcieMmio64Translation|0x40000= 000000|UINT64|0x0000004C >> diff --git a/Silicon/ARM/NeoverseN1Soc/NeoverseN1Soc.dec b/Silicon/ARM= /NeoverseN1Soc/NeoverseN1Soc.dec >> index 8789795bbae3..eea2d58402e6 100644 >> --- a/Silicon/ARM/NeoverseN1Soc/NeoverseN1Soc.dec >> +++ b/Silicon/ARM/NeoverseN1Soc/NeoverseN1Soc.dec >> @@ -68,3 +68,8 @@ [PcdsFixedAtBuild] >> =C2=A0=C2=A0=C2=A0 gArmNeoverseN1SocTokenSpaceGuid.PcdCcixRootPortConf= igBaseSize|0x00001000|UINT32|0x00000027 >> =C2=A0 =C2=A0=C2=A0=C2=A0 gArmNeoverseN1SocTokenSpaceGuid.PcdExtMemory= Space|0x40000000000|UINT64|0x00000029 >> + >> +=C2=A0 # Remote Chip PCIe >> +=C2=A0 gArmNeoverseN1SocTokenSpaceGuid.PcdRemotePcieIoTranslation|0x4= 0075200000|UINT64|0x0000004A >> +=C2=A0 gArmNeoverseN1SocTokenSpaceGuid.PcdRemotePcieMmio32Translation= |0x40000000000|UINT64|0x0000004B >> +=C2=A0 gArmNeoverseN1SocTokenSpaceGuid.PcdRemotePcieMmio64Translation= |0x40000000000|UINT64|0x0000004C >> diff --git a/Platform/ARM/N1Sdp/ConfigurationManager/ConfigurationMana= ger.dsc.inc b/Platform/ARM/N1Sdp/ConfigurationManager/ConfigurationManage= r.dsc.inc >> new file mode 100644 >> index 000000000000..bcd4bf334dad >> --- /dev/null >> +++ b/Platform/ARM/N1Sdp/ConfigurationManager/ConfigurationManager.dsc= .inc >> @@ -0,0 +1,16 @@ >> +## @file >> +#=C2=A0 dsc include file for Configuration Manager >> +# >> +#=C2=A0 Copyright (c) 2021, ARM Limited. All rights reserved.
>> +# >> +#=C2=A0 SPDX-License-Identifier: BSD-2-Clause-Patent >> +# >> +## >> + >> +[Defines] >> + >> +[BuildOptions] >> + >> +[Components.common] >> +=C2=A0 # Configuration Manager >> +=C2=A0 Platform/ARM/N1Sdp/ConfigurationManager/ConfigurationManagerDx= e/ConfigurationManagerDxe.inf >> diff --git a/Platform/ARM/N1Sdp/N1SdpPlatform.dsc b/Platform/ARM/N1Sdp= /N1SdpPlatform.dsc >> index abfcbe534550..14769659ddf5 100644 >> --- a/Platform/ARM/N1Sdp/N1SdpPlatform.dsc >> +++ b/Platform/ARM/N1Sdp/N1SdpPlatform.dsc >> @@ -27,6 +27,9 @@ [Defines] >> =C2=A0 !include Platform/ARM/VExpressPkg/ArmVExpress.dsc.inc >> =C2=A0 !include MdePkg/MdeLibs.dsc.inc >> =C2=A0 +!include DynamicTablesPkg/DynamicTables.dsc.inc >> +!include Platform/ARM/N1Sdp/ConfigurationManager/ConfigurationManager= .dsc.inc >> + >> =C2=A0 [LibraryClasses.common] >> =C2=A0=C2=A0=C2=A0 ArmLib|ArmPkg/Library/ArmLib/ArmBaseLib.inf >> =C2=A0=C2=A0=C2=A0 ArmMmuLib|ArmPkg/Library/ArmMmuLib/ArmMmuBaseLib.in= f >> @@ -156,6 +159,9 @@ [PcdsFixedAtBuild.common] >> =C2=A0=C2=A0=C2=A0 gArmPlatformTokenSpaceGuid.PcdCoreCount|2 >> =C2=A0=C2=A0=C2=A0 gArmPlatformTokenSpaceGuid.PcdClusterCount|2 >> =C2=A0 +=C2=A0 # ACPI Table Version >> +=C2=A0 gEfiMdeModulePkgTokenSpaceGuid.PcdAcpiExposedTableVersions|0x2= 0 >> + >> =C2=A0=C2=A0=C2=A0 # Runtime Variable storage >> =C2=A0=C2=A0=C2=A0 gEfiMdeModulePkgTokenSpaceGuid.PcdEmuVariableNvStor= eReserved|0 >> =C2=A0=C2=A0=C2=A0 gEfiMdeModulePkgTokenSpaceGuid.PcdEmuVariableNvMode= Enable|TRUE >> @@ -215,6 +221,10 @@ [Components.common] >> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 BaseMemoryLib|MdePkg/Librar= y/BaseMemoryLib/BaseMemoryLib.inf >> =C2=A0=C2=A0=C2=A0 } >> =C2=A0 +=C2=A0 # ACPI Support >> +=C2=A0 MdeModulePkg/Universal/Acpi/AcpiTableDxe/AcpiTableDxe.inf >> +=C2=A0 MdeModulePkg/Universal/HiiDatabaseDxe/HiiDatabaseDxe.inf >> + >> =C2=A0=C2=A0=C2=A0 # Platform driver >> =C2=A0=C2=A0=C2=A0 Platform/ARM/N1Sdp/Drivers/PlatformDxe/PlatformDxe.= inf >> =C2=A0 diff --git a/Platform/ARM/N1Sdp/N1SdpPlatform.fdf b/Platform/AR= M/N1Sdp/N1SdpPlatform.fdf >> index 6b097438adaf..6ede2b7fc894 100644 >> --- a/Platform/ARM/N1Sdp/N1SdpPlatform.fdf >> +++ b/Platform/ARM/N1Sdp/N1SdpPlatform.fdf >> @@ -94,6 +94,15 @@ [FV.FvMain] >> =C2=A0=C2=A0=C2=A0 INF MdeModulePkg/Universal/SecurityStubDxe/Security= StubDxe.inf >> =C2=A0=C2=A0=C2=A0 INF MdeModulePkg/Universal/Variable/RuntimeDxe/Vari= ableRuntimeDxe.inf >> =C2=A0 +=C2=A0 # ACPI Support >> +=C2=A0 INF MdeModulePkg/Universal/Acpi/AcpiTableDxe/AcpiTableDxe.inf >> + >> +=C2=A0 # Configuration Manager >> +=C2=A0 INF Platform/ARM/N1Sdp/ConfigurationManager/ConfigurationManag= erDxe/ConfigurationManagerDxe.inf >> + >> +=C2=A0 # Dynamic Table fdf >> +=C2=A0 !include DynamicTablesPkg/DynamicTables.fdf.inc >> + >> =C2=A0=C2=A0=C2=A0 # Human Interface Support >> =C2=A0=C2=A0=C2=A0 INF MdeModulePkg/Universal/HiiDatabaseDxe/HiiDataba= seDxe.inf >> =C2=A0 diff --git a/Platform/ARM/N1Sdp/ConfigurationManager/Configurat= ionManagerDxe/ConfigurationManagerDxe.inf b/Platform/ARM/N1Sdp/Configurat= ionManager/ConfigurationManagerDxe/ConfigurationManagerDxe.inf >> new file mode 100644 >> index 000000000000..52207e7f7d26 >> --- /dev/null >> +++ b/Platform/ARM/N1Sdp/ConfigurationManager/ConfigurationManagerDxe/= ConfigurationManagerDxe.inf >> @@ -0,0 +1,167 @@ >> +## @file >> +#=C2=A0 Configuration Manager Dxe >> +# >> +#=C2=A0 Copyright (c) 2021, ARM Limited. All rights reserved.
>> +# >> +#=C2=A0 SPDX-License-Identifier: BSD-2-Clause-Patent >> +# >> +## >> + >> +[Defines] >> +=C2=A0 INF_VERSION=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 =3D 0x000= 1001B >> +=C2=A0 BASE_NAME=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 = =3D ConfigurationManagerDxe >> +=C2=A0 FILE_GUID=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 = =3D 6f9c3b47-6f7d-44b6-87e5-4b7f44a60147 >> +=C2=A0 MODULE_TYPE=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 =3D DXE_D= RIVER >> +=C2=A0 VERSION_STRING=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 =3D 1.0 >> +=C2=A0 ENTRY_POINT=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 =3D Confi= gurationManagerDxeInitialize >> + >> +# >> +# The following information is for reference only and not required by= the build tools. >> +# >> +#=C2=A0 VALID_ARCHITECTURES=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0 =3D ARM AARCH64 >> +# >> + >> +[Sources] >> +=C2=A0 AslTables/Dsdt.asl >> +=C2=A0 AslTables/SsdtPci.asl >> +=C2=A0 AslTables/SsdtRemotePci.asl >> +=C2=A0 ConfigurationManager.c >> +=C2=A0 ConfigurationManager.h >> +=C2=A0 Hmat.c >> +=C2=A0 Platform.h >> + >> +[Packages] >> +=C2=A0 ArmPkg/ArmPkg.dec >> +=C2=A0 ArmPlatformPkg/ArmPlatformPkg.dec >> +=C2=A0 DynamicTablesPkg/DynamicTablesPkg.dec >> +=C2=A0 EmbeddedPkg/EmbeddedPkg.dec >> +=C2=A0 MdeModulePkg/MdeModulePkg.dec >> +=C2=A0 MdePkg/MdePkg.dec >> +=C2=A0 Platform/ARM/N1Sdp/N1SdpPlatform.dec >> +=C2=A0 Platform/ARM/VExpressPkg/ArmVExpressPkg.dec >> +=C2=A0 Silicon/ARM/NeoverseN1Soc/NeoverseN1Soc.dec >> + >> +[LibraryClasses] >> +=C2=A0 ArmPlatformLib >> +=C2=A0 PrintLib >> +=C2=A0 UefiBootServicesTableLib >> +=C2=A0 UefiDriverEntryPoint >> +=C2=A0 UefiRuntimeServicesTableLib >> + >> +[Protocols] >> +=C2=A0 gEdkiiConfigurationManagerProtocolGuid >> + >> +[FixedPcd] >> +=C2=A0 # PL011 Serial Debug UART >> +=C2=A0 gArmPlatformTokenSpaceGuid.PcdSerialDbgRegisterBase >> +=C2=A0 gArmPlatformTokenSpaceGuid.PcdSerialDbgUartBaudRate >> +=C2=A0 gArmPlatformTokenSpaceGuid.PcdSerialDbgUartClkInHz >> + >> +=C2=A0 gArmPlatformTokenSpaceGuid.PL011UartClkInHz >> +=C2=A0 gArmPlatformTokenSpaceGuid.PL011UartInterrupt >> + >> +=C2=A0 gArmTokenSpaceGuid.PcdArmArchTimerHypIntrNum >> +=C2=A0 gArmTokenSpaceGuid.PcdArmArchTimerIntrNum >> +=C2=A0 gArmTokenSpaceGuid.PcdArmArchTimerSecIntrNum >> +=C2=A0 gArmTokenSpaceGuid.PcdArmArchTimerVirtIntrNum >> + >> +=C2=A0 # SBSA Generic Watchdog >> +=C2=A0 gArmTokenSpaceGuid.PcdGenericWatchdogControlBase >> +=C2=A0 gArmTokenSpaceGuid.PcdGenericWatchdogEl2IntrNum >> +=C2=A0 gArmTokenSpaceGuid.PcdGenericWatchdogRefreshBase >> + >> +=C2=A0 gArmTokenSpaceGuid.PcdGicDistributorBase >> +=C2=A0 gArmTokenSpaceGuid.PcdGicInterruptInterfaceBase >> +=C2=A0 gArmTokenSpaceGuid.PcdGicRedistributorsBase >> + >> +=C2=A0 gEfiMdeModulePkgTokenSpaceGuid.PcdSerialRegisterBase >> +=C2=A0 gEfiMdePkgTokenSpaceGuid.PcdUartDefaultBaudRate >> + >> +=C2=A0 gArmN1SdpTokenSpaceGuid.PcdPcieExpressBaseAddress >> + >> +=C2=A0 gArmNeoverseN1SocTokenSpaceGuid.PcdExtMemorySpace >> +=C2=A0 gArmNeoverseN1SocTokenSpaceGuid.PcdDramBlock2Base >> + >> +=C2=A0 gArmPlatformTokenSpaceGuid.PcdCoreCount >> +=C2=A0 gArmPlatformTokenSpaceGuid.PcdClusterCount >> + >> +=C2=A0 gArmTokenSpaceGuid.PcdSystemMemoryBase >> +=C2=A0 gArmTokenSpaceGuid.PcdSystemMemorySize >> + >> +=C2=A0 #PCIe >> +=C2=A0 gArmNeoverseN1SocTokenSpaceGuid.PcdPcieBusCount >> +=C2=A0 gArmNeoverseN1SocTokenSpaceGuid.PcdPcieBusMax >> +=C2=A0 gArmNeoverseN1SocTokenSpaceGuid.PcdPcieBusMin >> +=C2=A0 gArmNeoverseN1SocTokenSpaceGuid.PcdPcieIoBase >> +=C2=A0 gArmNeoverseN1SocTokenSpaceGuid.PcdPcieIoMaxBase >> +=C2=A0 gArmNeoverseN1SocTokenSpaceGuid.PcdPcieIoSize >> +=C2=A0 gArmNeoverseN1SocTokenSpaceGuid.PcdPcieIoTranslation >> +=C2=A0 gArmNeoverseN1SocTokenSpaceGuid.PcdPcieMmio32Base >> +=C2=A0 gArmNeoverseN1SocTokenSpaceGuid.PcdPcieMmio32MaxBase >> +=C2=A0 gArmNeoverseN1SocTokenSpaceGuid.PcdPcieMmio32Size >> +=C2=A0 gArmNeoverseN1SocTokenSpaceGuid.PcdPcieMmio32Translation >> +=C2=A0 gArmNeoverseN1SocTokenSpaceGuid.PcdPcieMmio64Base >> +=C2=A0 gArmNeoverseN1SocTokenSpaceGuid.PcdPcieMmio64MaxBase >> +=C2=A0 gArmNeoverseN1SocTokenSpaceGuid.PcdPcieMmio64Size >> +=C2=A0 gArmNeoverseN1SocTokenSpaceGuid.PcdPcieMmio64Translation >> +=C2=A0 gArmNeoverseN1SocTokenSpaceGuid.PcdPcieRootPortConfigBaseAddre= ss >> +=C2=A0 gArmNeoverseN1SocTokenSpaceGuid.PcdPcieRootPortConfigBaseSize >> + >> +=C2=A0 # CCIX >> +=C2=A0 gArmNeoverseN1SocTokenSpaceGuid.PcdCcixBusCount >> +=C2=A0 gArmNeoverseN1SocTokenSpaceGuid.PcdCcixBusMax >> +=C2=A0 gArmNeoverseN1SocTokenSpaceGuid.PcdCcixBusMin >> +=C2=A0 gArmNeoverseN1SocTokenSpaceGuid.PcdCcixExpressBaseAddress >> +=C2=A0 gArmNeoverseN1SocTokenSpaceGuid.PcdCcixIoBase >> +=C2=A0 gArmNeoverseN1SocTokenSpaceGuid.PcdCcixIoMaxBase >> +=C2=A0 gArmNeoverseN1SocTokenSpaceGuid.PcdCcixIoSize >> +=C2=A0 gArmNeoverseN1SocTokenSpaceGuid.PcdCcixIoTranslation >> +=C2=A0 gArmNeoverseN1SocTokenSpaceGuid.PcdCcixMmio32Base >> +=C2=A0 gArmNeoverseN1SocTokenSpaceGuid.PcdCcixMmio32MaxBase >> +=C2=A0 gArmNeoverseN1SocTokenSpaceGuid.PcdCcixMmio32Size >> +=C2=A0 gArmNeoverseN1SocTokenSpaceGuid.PcdCcixMmio32Translation >> +=C2=A0 gArmNeoverseN1SocTokenSpaceGuid.PcdCcixMmio64Base >> +=C2=A0 gArmNeoverseN1SocTokenSpaceGuid.PcdCcixMmio64MaxBase >> +=C2=A0 gArmNeoverseN1SocTokenSpaceGuid.PcdCcixMmio64Size >> +=C2=A0 gArmNeoverseN1SocTokenSpaceGuid.PcdCcixMmio64Translation >> +=C2=A0 gArmNeoverseN1SocTokenSpaceGuid.PcdCcixRootPortConfigBaseAddre= ss >> +=C2=A0 gArmNeoverseN1SocTokenSpaceGuid.PcdCcixRootPortConfigBaseSize >> + >> +=C2=A0 # Coresight >> +=C2=A0 gArmN1SdpTokenSpaceGuid.PcdCsComponentSize >> +=C2=A0 gArmN1SdpTokenSpaceGuid.PcdCsEtf0Base >> +=C2=A0 gArmN1SdpTokenSpaceGuid.PcdCsEtf0MaxBase >> +=C2=A0 gArmN1SdpTokenSpaceGuid.PcdCsEtf1Base >> +=C2=A0 gArmN1SdpTokenSpaceGuid.PcdCsEtf1MaxBase >> +=C2=A0 gArmN1SdpTokenSpaceGuid.PcdCsEtf2Base >> +=C2=A0 gArmN1SdpTokenSpaceGuid.PcdCsEtf2MaxBase >> +=C2=A0 gArmN1SdpTokenSpaceGuid.PcdCsEtm0Base >> +=C2=A0 gArmN1SdpTokenSpaceGuid.PcdCsEtm0MaxBase >> +=C2=A0 gArmN1SdpTokenSpaceGuid.PcdCsEtm1Base >> +=C2=A0 gArmN1SdpTokenSpaceGuid.PcdCsEtm1MaxBase >> +=C2=A0 gArmN1SdpTokenSpaceGuid.PcdCsEtm2Base >> +=C2=A0 gArmN1SdpTokenSpaceGuid.PcdCsEtm2MaxBase >> +=C2=A0 gArmN1SdpTokenSpaceGuid.PcdCsEtm3Base >> +=C2=A0 gArmN1SdpTokenSpaceGuid.PcdCsEtm3MaxBase >> +=C2=A0 gArmN1SdpTokenSpaceGuid.PcdCsEtrBase >> +=C2=A0 gArmN1SdpTokenSpaceGuid.PcdCsEtrMaxBase >> +=C2=A0 gArmN1SdpTokenSpaceGuid.PcdCsFunnel0Base >> +=C2=A0 gArmN1SdpTokenSpaceGuid.PcdCsFunnel0MaxBase >> +=C2=A0 gArmN1SdpTokenSpaceGuid.PcdCsFunnel1Base >> +=C2=A0 gArmN1SdpTokenSpaceGuid.PcdCsFunnel1MaxBase >> +=C2=A0 gArmN1SdpTokenSpaceGuid.PcdCsReplicatorBase >> +=C2=A0 gArmN1SdpTokenSpaceGuid.PcdCsReplicatorMaxBase >> +=C2=A0 gArmN1SdpTokenSpaceGuid.PcdCsStmBase >> +=C2=A0 gArmN1SdpTokenSpaceGuid.PcdCsStmMaxBase >> +=C2=A0 gArmN1SdpTokenSpaceGuid.PcdCsStmStimulusBase >> +=C2=A0 gArmN1SdpTokenSpaceGuid.PcdCsStmStimulusSize >> +=C2=A0 gArmN1SdpTokenSpaceGuid.PcdCsTpiuBase >> +=C2=A0 gArmN1SdpTokenSpaceGuid.PcdCsTpiuMaxBase >> + >> +=C2=A0 # Remote PCIe >> +=C2=A0 gArmN1SdpTokenSpaceGuid.PcdRemotePcieIoTranslation >> +=C2=A0 gArmN1SdpTokenSpaceGuid.PcdRemotePcieMmio32Translation >> +=C2=A0 gArmN1SdpTokenSpaceGuid.PcdRemotePcieMmio64Translation >> + >> +[Depex] >> +=C2=A0 TRUE >> diff --git a/Platform/ARM/N1Sdp/Drivers/PlatformDxe/PlatformDxe.inf b/= Platform/ARM/N1Sdp/Drivers/PlatformDxe/PlatformDxe.inf >> index 925bde4063cc..55325327298b 100644 >> --- a/Platform/ARM/N1Sdp/Drivers/PlatformDxe/PlatformDxe.inf >> +++ b/Platform/ARM/N1Sdp/Drivers/PlatformDxe/PlatformDxe.inf >> @@ -27,9 +27,13 @@ [Packages] >> =C2=A0=C2=A0=C2=A0 Platform/ARM/N1Sdp/N1SdpPlatform.dec >> =C2=A0 =C2=A0 [LibraryClasses] >> +=C2=A0 AcpiLib > [SAMI] I may be missing somthing here, where is AcpiLib used in this mo= dule? >> =C2=A0=C2=A0=C2=A0 HobLib >> =C2=A0=C2=A0=C2=A0 UefiDriverEntryPoint >> =C2=A0 +[Guids] >> +=C2=A0 gN1SdpAcpiTableFileGuid > [SAMI] Is this needed here? > [/SAMI] >> + >> =C2=A0 [Protocols] >> =C2=A0=C2=A0=C2=A0 gEfiRamDiskProtocolGuid >> =C2=A0 diff --git a/Platform/ARM/N1Sdp/ConfigurationManager/Configurat= ionManagerDxe/ConfigurationManager.h b/Platform/ARM/N1Sdp/ConfigurationMa= nager/ConfigurationManagerDxe/ConfigurationManager.h >> new file mode 100644 >> index 000000000000..52e7680cd34d >> --- /dev/null >> +++ b/Platform/ARM/N1Sdp/ConfigurationManager/ConfigurationManagerDxe/= ConfigurationManager.h >> @@ -0,0 +1,307 @@ >> +/** @file >> + >> +=C2=A0 Copyright (c) 2021, ARM Limited. All rights reserved.
>> + >> +=C2=A0 SPDX-License-Identifier: BSD-2-Clause-Patent >> + >> +=C2=A0 @par Glossary: >> +=C2=A0=C2=A0=C2=A0 - Cm or CM=C2=A0=C2=A0 - Configuration Manager >> +=C2=A0=C2=A0=C2=A0 - Obj or OBJ - Object >> +**/ >> + >> +#ifndef CONFIGURATION_MANAGER_H_ >> +#define CONFIGURATION_MANAGER_H_ >> + >> +/** C array containing the compiled AML template. >> +=C2=A0=C2=A0=C2=A0 This symbol is defined in the auto generated C fil= e >> +=C2=A0=C2=A0=C2=A0 containing the AML bytecode array. >> +*/ >> +extern CHAR8=C2=A0 dsdt_aml_code[]; >> +extern CHAR8=C2=A0 ssdtpci_aml_code[]; >> +extern CHAR8=C2=A0 ssdtremotepci_aml_code[]; >> + >> +/** The configuration manager version. >> +*/ >> +#define CONFIGURATION_MANAGER_REVISION CREATE_REVISION (1, 0) >> + >> +/** The OEM ID >> +*/ >> +#define CFG_MGR_OEM_ID=C2=A0=C2=A0=C2=A0 { 'A', 'R', 'M', 'L', 'T', '= D' } >> + >> +/** A helper macro for mapping a reference token >> +*/ >> +#define REFERENCE_TOKEN(Field)=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0 \ >> +=C2=A0 (CM_OBJECT_TOKEN)((UINT8*)&N1sdpRepositoryInfo +=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= \ >> +=C2=A0=C2=A0=C2=A0 OFFSET_OF (EDKII_PLATFORM_REPOSITORY_INFO, Field)) >> + >> +/** A helper macro that constructs the MPID based on the >> +=C2=A0=C2=A0=C2=A0 Aff0, Aff1, Aff2, Aff3 values >> +*/ >> +#define GET_MPID3(Aff3, Aff2, Aff1, Aff0)=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 \ >> +=C2=A0 (((Aff3##ULL) << 32) | ((Aff2) << 16) | ((Aff1) << 8) | (Aff0)= ) >> + >> +/** A helper macro for populating the GIC CPU information >> +*/ >> +#define GICC_ENTRY(=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 \ >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 CPUInterfaceNu= mber,=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 \ >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Mpidr,=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 \ >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 PmuIrq,=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0 \ >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 VGicIrq,=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0 \ >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 GicRedistBase,= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 \ >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 EnergyEfficien= cy,=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 \ >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 SpeIrq,=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0 \ >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 ProximityDomai= n,=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 \ >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 ClockDomain=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0 \ >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 ) {=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 \ >> +=C2=A0=C2=A0=C2=A0 CPUInterfaceNumber,=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0 /* UINT32=C2=A0 CPUInterfaceNumber=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0 */ \ >> +=C2=A0=C2=A0=C2=A0 CPUInterfaceNumber,=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0 /* UINT32=C2=A0 AcpiProcessorUid=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 */ \ >> +=C2=A0=C2=A0=C2=A0 EFI_ACPI_6_2_GIC_ENABLED, /* UINT32=C2=A0 Flags=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 */ \ >> +=C2=A0=C2=A0=C2=A0 0,=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0 /* UINT32=C2=A0 ParkingProtocolVersion=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0 */ \ >> +=C2=A0=C2=A0=C2=A0 PmuIrq,=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 /* UINT32= =C2=A0 PerformanceInterruptGsiv=C2=A0=C2=A0=C2=A0=C2=A0 */ \ >> +=C2=A0=C2=A0=C2=A0 0,=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0 /* UINT64=C2=A0 ParkedAddress=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 */ \ >> +=C2=A0=C2=A0=C2=A0 FixedPcdGet64 (=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 \ >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 PcdGicInterruptInterfaceBase=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 \ >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 ),=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0 /* UINT64=C2=A0 PhysicalBaseAddress=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 */ \ >> +=C2=A0=C2=A0=C2=A0 0,=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0 /* UINT64=C2=A0 GICV=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 */ \ >> +=C2=A0=C2=A0=C2=A0 0,=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0 /* UINT64=C2=A0 GICH=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 */ \ >> +=C2=A0=C2=A0=C2=A0 VGicIrq,=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 /* UINT32=C2= =A0 VGICMaintenanceInterrupt=C2=A0=C2=A0=C2=A0=C2=A0 */ \ >> +=C2=A0=C2=A0=C2=A0 GicRedistBase,=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 /* UINT64=C2=A0 GICRBaseAddress=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 */ \ >> +=C2=A0=C2=A0=C2=A0 Mpidr,=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 /* = UINT64=C2=A0 MPIDR=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0 */ \ >> +=C2=A0=C2=A0=C2=A0 EnergyEfficiency,=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0 /* UINT8=C2=A0=C2=A0 ProcessorPowerEfficiencyClass*/ \ >> +=C2=A0=C2=A0=C2=A0 SpeIrq,=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 /* UINT16= =C2=A0 SpeOverflowInterrupt=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= */ \ >> +=C2=A0=C2=A0=C2=A0 ProximityDomain,=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0 /* UINT32=C2=A0 ProximityDomain=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 */ \ >> +=C2=A0=C2=A0=C2=A0 ClockDomain,=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 /* UINT32=C2=A0 ClockDomain=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0 */ \ >> +=C2=A0=C2=A0=C2=A0 EFI_ACPI_6_3_GICC_ENABLED,/* UINT32=C2=A0 Flags=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 */ \ >> +=C2=A0=C2=A0=C2=A0 } >> + >> +/** A helper macro for populating the Processor Hierarchy Node flags >> +*/ >> +#define PROC_NODE_FLAGS(=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0 \ >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 PhysicalPackag= e,=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 \ >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 AcpiProcessorI= dValid,=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0 \ >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 ProcessorIsThr= ead,=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 \ >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 NodeIsLeaf,=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 = \ >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 IdenticalImple= mentation=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0 \ >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 )=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 \ >> +=C2=A0 (=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 \ >> +=C2=A0=C2=A0=C2=A0 PhysicalPackage |=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 \ >> +=C2=A0=C2=A0=C2=A0 (AcpiProcessorIdValid << 1) |=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 \ >> +=C2=A0=C2=A0=C2=A0 (ProcessorIsThread << 2) |=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 = \ >> +=C2=A0=C2=A0=C2=A0 (NodeIsLeaf << 3) |=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 \ >> +=C2=A0=C2=A0=C2=A0 (IdenticalImplementation << 4)=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 \ >> +=C2=A0 ) >> + >> +/** A helper macro for populating the Cache Type Structure's attribut= es >> +*/ >> +#define CACHE_ATTRIBUTES(=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0 \ >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 AllocationType= ,=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 \ >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 CacheType,=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= \ >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 WritePolicy=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 = \ >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 )=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 \ >> +=C2=A0 (=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 \ >> +=C2=A0=C2=A0=C2=A0 AllocationType |=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 \ >> +=C2=A0=C2=A0=C2=A0 (CacheType << 2) |=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 \ >> +=C2=A0=C2=A0=C2=A0 (WritePolicy << 4)=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 \ >> +=C2=A0 ) >> + >> +/** A function that prepares Configuration Manager Objects for return= ing. >> +=C2=A0 @param [in]=C2=A0 This=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= Pointer to the Configuration Manager Protocol. >> +=C2=A0 @param [in]=C2=A0 CmObjectId=C2=A0 The Configuration Manager O= bject ID. >> +=C2=A0 @param [in]=C2=A0 Token=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 A = token for identifying the object. >> +=C2=A0 @param [out] CmObject=C2=A0=C2=A0=C2=A0 Pointer to the Configu= ration Manager Object >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0 descriptor describing the requested Object. >> +=C2=A0 @retval EFI_SUCCESS=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0 Success. >> +=C2=A0 @retval EFI_INVALID_PARAMETER A parameter is invalid. >> +=C2=A0 @retval EFI_NOT_FOUND=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0 The required object information is not found. >> +**/ >> +typedef EFI_STATUS (*CM_OBJECT_HANDLER_PROC) ( >> +=C2=A0 IN=C2=A0 CONST EDKII_CONFIGURATION_MANAGER_PROTOCOL=C2=A0 * CO= NST This, >> +=C2=A0 IN=C2=A0 CONST CM_OBJECT_ID=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0 CmObjectId, >> +=C2=A0 IN=C2=A0 CONST CM_OBJECT_TOKEN=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 = Token, >> +=C2=A0 IN=C2=A0 OUT=C2=A0=C2=A0 CM_OBJ_DESCRIPTOR=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0 * CONST CmObject >> +=C2=A0 ); >> + >> +/** The number of CPUs >> +*/ >> +#define PLAT_CPU_COUNT=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 4 >> + >> +/** The number of ACPI tables to install >> +*/ >> +#define PLAT_ACPI_TABLE_COUNT=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 13 >> + >> +/** The number of platform generic timer blocks >> +*/ >> +#define PLAT_GTBLOCK_COUNT=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0 1 >> + >> +/** The number of timer frames per generic timer block >> +*/ >> +#define PLAT_GTFRAME_COUNT=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0 2 >> + >> +/** The number of Processor Hierarchy Nodes >> +=C2=A0=C2=A0=C2=A0 - one package node >> +=C2=A0=C2=A0=C2=A0 - two cluster nodes >> +=C2=A0=C2=A0=C2=A0 - two cores in cluster 0 >> +=C2=A0=C2=A0=C2=A0 - two cores in cluster 1 >> +*/ >> +#define PLAT_PROC_HIERARCHY_NODE_COUNT=C2=A0 7 >> + >> +/** The number of unique cache structures: >> +=C2=A0=C2=A0=C2=A0 - cluster L3 unified cache >> +=C2=A0=C2=A0=C2=A0 - core L1 instruction cache >> +=C2=A0=C2=A0=C2=A0 - core L1 data cache >> +=C2=A0=C2=A0=C2=A0 - core L2 cache >> +=C2=A0=C2=A0=C2=A0 - slc unified cache >> +*/ >> +#define PLAT_CACHE_COUNT=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 5 >> + >> +/** The number of resources private to the cluster >> +=C2=A0=C2=A0=C2=A0 - L3 cache >> +*/ >> +#define CLUSTER_RESOURCE_COUNT=C2=A0 1 >> + >> +/** The number of resources private to 'core instance >> +=C2=A0=C2=A0=C2=A0 - L1 data cache >> +=C2=A0=C2=A0=C2=A0 - L1 instruction cache >> +*/ >> +#define CORE_RESOURCE_COUNT=C2=A0 2 >> + >> +/** The number of resources private to SoC >> +=C2=A0=C2=A0=C2=A0 - slc cache >> +*/ >> +#define SOC_RESOURCE_COUNT=C2=A0 1 >> + >> +/** Number of memory affinity entries >> +*/ >> +#define LOCAL_DDR_REGION1=C2=A0=C2=A0 0 >> +#define LOCAL_DDR_REGION2=C2=A0=C2=A0 1 >> +#define REMOTE_DDR_REGION1=C2=A0 2 >> +#define REMOTE_DDR_REGION2=C2=A0 3 >> +#define DDR_REGION_COUNT=C2=A0=C2=A0=C2=A0 4 >> + >> +enum { >> +=C2=A0=C2=A0 ITS_SMMU_CCIX =3D 0, >> +=C2=A0=C2=A0 ITS_SMMU_PCIE, >> +=C2=A0=C2=A0 ITS_CCIX, >> +=C2=A0=C2=A0 ITS_PCIE, >> +=C2=A0=C2=A0 ITS_MASTER_CHIP_MAX, >> +=C2=A0=C2=A0 ITS_REMOTE_SMMU_PCIE =3D ITS_MASTER_CHIP_MAX, >> +=C2=A0=C2=A0 ITS_REMOTE_PCIE, >> +=C2=A0=C2=A0 ITS_MAX >> +}; > [SAMI] Enums should be typedefed. Same comment for the other enums defi= ned in this file. > [/SAMI] >> + >> +enum { >> +=C2=A0=C2=A0 SMMUV3INFO_PCIE =3D 0, >> +=C2=A0=C2=A0 SMMUV3INFO_CCIX, >> +=C2=A0=C2=A0 SMMUV3INFO_MASTER_CHIP_MAX, >> +=C2=A0=C2=A0 SMMUV3INFO_REMOTE_PCIE =3D SMMUV3INFO_MASTER_CHIP_MAX, >> +=C2=A0=C2=A0 SMMUV3INFO_MAX >> +}; >> + >> +enum { >> +=C2=A0=C2=A0 ROOT_PCIE =3D 0, >> +=C2=A0=C2=A0 ROOT_PCIE_CCIX, >> +=C2=A0=C2=A0 ROOT_PCIE_MASTER_CHIP_MAX, >> +=C2=A0=C2=A0 ROOT_REMOTE_PCIE =3D ROOT_PCIE_MASTER_CHIP_MAX, >> +=C2=A0=C2=A0 ROOT_PCIE_MAX >> +}; >> + >> +enum { >> +=C2=A0=C2=A0 DEVICEIDMAPPING_SMMU_PCIE =3D 0, >> +=C2=A0=C2=A0 DEVICEIDMAPPING_SMMU_CCIX, >> +=C2=A0=C2=A0 DEVICEIDMAPPING_PCIE, >> +=C2=A0=C2=A0 DEVICEIDMAPPING_MASTER_CHIP_MAX, >> +=C2=A0=C2=A0 DEVICEIDMAPPING_REMOTE_SMMU_PCIE =3D DEVICEIDMAPPING_MAS= TER_CHIP_MAX, >> +=C2=A0=C2=A0 DEVICEIDMAPPING_REMOTE_PCIE, >> +=C2=A0=C2=A0 DEVICEIDMAPPING_MAX, >> +}; >> + >> +/** A structure describing the platform configuration >> +=C2=A0=C2=A0=C2=A0 manager repository information >> +*/ >> +typedef struct PlatformRepositoryInfo { >> +=C2=A0 /// Configuration Manager Information >> +=C2=A0 CM_STD_OBJ_CONFIGURATION_MANAGER_INFO CmInfo; >> + >> +=C2=A0 /// List of ACPI tables >> +=C2=A0 CM_STD_OBJ_ACPI_TABLE_INFO=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 CmAcpiTableList[PLAT_ACPI_TABLE_COUNT]; >> + >> +=C2=A0 /// Boot architecture information >> +=C2=A0 CM_ARM_BOOT_ARCH_INFO=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 BootArchInfo; >> + >> +=C2=A0 /// Fixed feature flag information >> +=C2=A0 CM_ARM_FIXED_FEATURE_FLAGS=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 FixedFeatureFlags; >> + >> +=C2=A0 /// Power management profile information >> +=C2=A0 CM_ARM_POWER_MANAGEMENT_PROFILE_INFO=C2=A0 PmProfileInfo; >> + >> +=C2=A0 /// GIC CPU interface information >> +=C2=A0 CM_ARM_GICC_INFO=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0 GicCInfo[PLAT_CPU_COUNT * 2]; >> + >> +=C2=A0 /// GIC distributor information >> +=C2=A0 CM_ARM_GICD_INFO=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0 GicDInfo; >> + >> +=C2=A0 /// GIC Redistributor information >> +=C2=A0 CM_ARM_GIC_REDIST_INFO=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 GicRedistInfo[2]; >> + >> +=C2=A0 /// GIC ITS information >> +=C2=A0 CM_ARM_GIC_ITS_INFO=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 GicItsInf= o[ITS_MAX]; >> + >> +=C2=A0 /// Generic timer information >> +=C2=A0 CM_ARM_GENERIC_TIMER_INFO=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 GenericTimerInfo; >> + >> +=C2=A0 /// Generic timer block information >> +=C2=A0 CM_ARM_GTBLOCK_INFO=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 GTBlockIn= fo[PLAT_GTBLOCK_COUNT]; >> + >> +=C2=A0 /// Generic timer frame information >> +=C2=A0 CM_ARM_GTBLOCK_TIMER_FRAME_INFO=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0 GTBlock0TimerInfo[PLAT_GTFRAME_COUNT]; >> + >> +=C2=A0 /// Watchdog information >> +=C2=A0 CM_ARM_GENERIC_WATCHDOG_INFO=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0 Watchdog; >> + >> +=C2=A0 /** Serial port information for the >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 serial port console redirection port >> +=C2=A0 */ >> +=C2=A0 CM_ARM_SERIAL_PORT_INFO=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 SpcrSerialPort; >> + >> +=C2=A0 /// Serial port information for the DBG2 UART port >> +=C2=A0 CM_ARM_SERIAL_PORT_INFO=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 DbgSerialPort; >> + >> +=C2=A0 // Processor topology information >> +=C2=A0 CM_ARM_PROC_HIERARCHY_INFO=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 ProcHierarchyInfo[PLAT_PROC_HIERARCHY_NODE= _COUNT * 2]; >> + >> +=C2=A0 // Cache information >> +=C2=A0 CM_ARM_CACHE_INFO=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= CacheInfo[PLAT_CACHE_COUNT]; >> + >> +=C2=A0 // Cluster private resources >> +=C2=A0 CM_ARM_OBJ_REF=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0 ClusterResources[CLUSTER_RESOURCE_COUNT]; >> + >> +=C2=A0 // Core private resources >> +=C2=A0 CM_ARM_OBJ_REF=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0 CoreResources[CORE_RESOURCE_COUNT]; >> + >> +=C2=A0 // SoC Resources >> +=C2=A0 CM_ARM_OBJ_REF=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0 SocResources[SOC_RESOURCE_COUNT]; >> + >> +=C2=A0 /// ITS Group node >> +=C2=A0 CM_ARM_ITS_GROUP_NODE=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 ItsGroupInfo[ITS_M= AX]; >> + >> +=C2=A0 /// ITS Identifier array >> +=C2=A0 CM_ARM_ITS_IDENTIFIER=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 ItsIdentifierArray= [ITS_MAX]; >> + >> +=C2=A0 /// SMMUv3 node >> +=C2=A0 CM_ARM_SMMUV3_NODE=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Smm= uV3Info[SMMUV3INFO_MAX]; >> + >> +=C2=A0 /// PCI Root complex node >> +=C2=A0 CM_ARM_ROOT_COMPLEX_NODE=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 RootComplexInfo[ROOT_PCIE_MAX]; >> + >> +=C2=A0 /// Array of DeviceID mapping >> +=C2=A0 CM_ARM_ID_MAPPING=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= DeviceIdMapping[DEVICEIDMAPPING_MAX][2]; >> + >> +=C2=A0 /// PCI configuration space information >> +=C2=A0 CM_ARM_PCI_CONFIG_SPACE_INFO=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0 PciConfigInfo[ROOT_PCIE_MAX]; >> + >> +=C2=A0 /// Memory Affinity Info >> +=C2=A0 CM_ARM_MEMORY_AFFINITY_INFO=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0 MemAffInfo[DDR_REGION_COUNT]; >> + >> +} EDKII_PLATFORM_REPOSITORY_INFO; >> + >> +#endif // CONFIGURATION_MANAGER_H_ >> diff --git a/Platform/ARM/N1Sdp/ConfigurationManager/ConfigurationMana= gerDxe/Platform.h b/Platform/ARM/N1Sdp/ConfigurationManager/Configuration= ManagerDxe/Platform.h >> new file mode 100644 >> index 000000000000..a4a1d8504ffc >> --- /dev/null >> +++ b/Platform/ARM/N1Sdp/ConfigurationManager/ConfigurationManagerDxe/= Platform.h >> @@ -0,0 +1,92 @@ >> +/** @file >> + >> +=C2=A0 Copyright (c) 2021, ARM Limited. All rights reserved.
>> + >> +=C2=A0 SPDX-License-Identifier: BSD-2-Clause-Patent >> + >> +**/ >> + >> +#ifndef PLATFORM_H_ >> +#define PLATFORM_H_ >> + >> +#define ENABLE_MEM_MAPPED_TIMER >> + >> +#ifdef ENABLE_MEM_MAPPED_TIMER >> +// REFCLK CNTControl >> +#define N1Sdp_SYSTEM_TIMER_BASE_ADDRESS=C2=A0=C2=A0 0x2A430000 > [SAMI] Macro names should all be in capital letters. Same comment for o= ther macros defined and used in this patch series. > [/SAMI] >> +// REFCLK CNTRead >> +#define N1Sdp_CNT_READ_BASE_ADDRESS=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= 0x2A800000 >> +#else >> +#define N1Sdp_SYSTEM_TIMER_BASE_ADDRESS=C2=A0=C2=A0 0xFFFFFFFFFFFFFFF= F >> +#define N1Sdp_CNT_READ_BASE_ADDRESS=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= 0xFFFFFFFFFFFFFFFF >> +#endif >> + >> +// GT Block Timer >> +// AP_REFCLK CNTCTL >> +#define N1Sdp_GT_BLOCK_CTL_BASE=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0 0x2A810000 >> +#define N1Sdp_TIMER_FRAMES_COUNT=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0 2 >> + >> +// GT Block Timer Frames >> +// AP_REFCLK_S CNTBase0 >> +#define N1Sdp_GT_BLOCK_FRAME0_CTL_BASE=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 = 0x2A830000 >> +#define N1Sdp_GT_BLOCK_FRAME0_CTL_EL0_BASE=C2=A0 0xFFFFFFFFFFFFFFFF >> +#define N1Sdp_GT_BLOCK_FRAME0_GSIV=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0 92 >> + >> +// AP_REFCLK_NS CNTBase1 >> +#define N1Sdp_GT_BLOCK_FRAME1_CTL_BASE=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 = 0x2A820000 >> +#define N1Sdp_GT_BLOCK_FRAME1_CTL_EL0_BASE=C2=A0 0xFFFFFFFFFFFFFFFF >> +#define N1Sdp_GT_BLOCK_FRAME1_GSIV=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0 91 >> + >> +#define GTDT_TIMER_EDGE_TRIGGERED=C2=A0=C2=A0 \ >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 EFI_ACPI_6_3_G= TDT_TIMER_FLAG_TIMER_INTERRUPT_MODE >> +#define GTDT_TIMER_LEVEL_TRIGGERED=C2=A0 0 >> +#define GTDT_TIMER_ACTIVE_LOW=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 \ >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 EFI_ACPI_6_3_G= TDT_TIMER_FLAG_TIMER_INTERRUPT_POLARITY >> +#define GTDT_TIMER_ACTIVE_HIGH=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 0 >> +#define GTDT_TIMER_SAVE_CONTEXT=C2=A0=C2=A0=C2=A0=C2=A0 \ >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 EFI_ACPI_6_3_G= TDT_TIMER_FLAG_ALWAYS_ON_CAPABILITY >> +#define GTDT_TIMER_LOSE_CONTEXT=C2=A0=C2=A0=C2=A0=C2=A0 0 >> + >> +#define N1Sdp_GTDT_GTIMER_FLAGS=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 (= GTDT_TIMER_LOSE_CONTEXT=C2=A0=C2=A0 | \ >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0 GTDT_TIMER_ACTIVE_LOW=C2=A0=C2=A0 | \ >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0 GTDT_TIMER_LEVEL_TRIGGERED) >> + >> +// GT Block Timer Flags >> +#define GTX_TIMER_EDGE_TRIGGERED=C2=A0=C2=A0=C2=A0 \ >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 EFI_ACPI_6_3_G= TDT_GT_BLOCK_TIMER_FLAG_TIMER_INTERRUPT_MODE >> +#define GTX_TIMER_LEVEL_TRIGGERED=C2=A0=C2=A0 0 >> +#define GTX_TIMER_ACTIVE_LOW=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= \ >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 EFI_ACPI_6_3_G= TDT_GT_BLOCK_TIMER_FLAG_TIMER_INTERRUPT_POLARITY >> +#define GTX_TIMER_ACTIVE_HIGH=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 0 >> + >> +#define N1Sdp_GTX_TIMER_FLAGS=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0 (GTX_TIMER_ACTIVE_HIGH | \ >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0 GTX_TIMER_LEVEL_TRIGGERED) >> + >> +#define GTX_TIMER_SECURE=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0 \ >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 EFI_ACPI_6_3_G= TDT_GT_BLOCK_COMMON_FLAG_SECURE_TIMER >> +#define GTX_TIMER_NON_SECURE=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= 0 >> +#define GTX_TIMER_SAVE_CONTEXT=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 \ >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 EFI_ACPI_6_3_G= TDT_GT_BLOCK_COMMON_FLAG_ALWAYS_ON_CAPABILITY >> +#define GTX_TIMER_LOSE_CONTEXT=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 0 >> + >> +#define N1Sdp_GTX_COMMON_FLAGS_S=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 (GTX_T= IMER_SAVE_CONTEXT=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 | \ >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0 GTX_TIMER_SECURE) >> +#define N1Sdp_GTX_COMMON_FLAGS_NS=C2=A0=C2=A0=C2=A0=C2=A0 (GTX_TIMER_= SAVE_CONTEXT=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 | \ >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0 GTX_TIMER_NON_SECURE) >> + >> +// Watchdog >> +#define SBSA_WATCHDOG_EDGE_TRIGGERED=C2=A0=C2=A0 \ >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 EFI_ACPI_6_3_G= TDT_SBSA_GENERIC_WATCHDOG_FLAG_TIMER_INTERRUPT_MODE >> +#define SBSA_WATCHDOG_LEVEL_TRIGGERED=C2=A0 0 >> +#define SBSA_WATCHDOG_ACTIVE_LOW=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 = \ >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 EFI_ACPI_6_3_G= TDT_SBSA_GENERIC_WATCHDOG_FLAG_TIMER_INTERRUPT_POLARITY >> +#define SBSA_WATCHDOG_ACTIVE_HIGH=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 0 >> +#define SBSA_WATCHDOG_SECURE=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0 \ >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 EFI_ACPI_6_3_G= TDT_SBSA_GENERIC_WATCHDOG_FLAG_SECURE_TIMER >> +#define SBSA_WATCHDOG_NON_SECURE=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 = 0 >> + >> +#define N1Sdp_SBSA_WATCHDOG_FLAGS=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0 (SBSA_WATCHDOG_NON_SECURE=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 | \ >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 SBSA_WATCHDOG_ACTIVE_HIGH=C2=A0=C2= =A0=C2=A0 | \ >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 SBSA_WATCHDOG_LEVEL_TRIGGERED) >> + >> +#endif // PLATFORM_H_ >> diff --git a/Platform/ARM/N1Sdp/Include/N1SdpAcpiHeader.h b/Platform/A= RM/N1Sdp/Include/N1SdpAcpiHeader.h >> new file mode 100644 >> index 000000000000..e0ea26893810 >> --- /dev/null >> +++ b/Platform/ARM/N1Sdp/Include/N1SdpAcpiHeader.h >> @@ -0,0 +1,35 @@ >> +/** @file >> + >> +=C2=A0 Copyright (c) 2021, ARM Limited. All rights reserved.
>> + >> +=C2=A0 SPDX-License-Identifier: BSD-2-Clause-Patent >> + >> +**/ >> + >> +#ifndef N1Sdp_ACPI_HEADER_ >> +#define N1Sdp_ACPI_HEADER_ > [SAMI] File include guard must be in all capital letters. > [/SAMI] >> + >> +// >> +// ACPI table information used to initialize tables. >> +// >> +#define EFI_ACPI_ARM_OEM_ID=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0 'A','R','M','L','T','D'=C2=A0=C2=A0 // OEMID 6 bytes l= ong >> +#define EFI_ACPI_ARM_OEM_TABLE_ID=C2=A0=C2=A0=C2=A0=C2=A0 SIGNATURE_6= 4('A','R','M','N','1','S','D','P') // OEM table id 8 bytes long >> +#define EFI_ACPI_ARM_OEM_REVISION=C2=A0=C2=A0=C2=A0=C2=A0 0x20181101 >> +#define EFI_ACPI_ARM_CREATOR_ID=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 S= IGNATURE_32('A','R','M',' ') >> +#define EFI_ACPI_ARM_CREATOR_REVISION 0x00000099 >> + >> +// A macro to initialise the common header part of EFI ACPI tables as= defined by >> +// EFI_ACPI_DESCRIPTION_HEADER structure. >> +#define ARM_ACPI_HEADER(Signature, Type, Revision) {=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 \ >> +=C2=A0=C2=A0=C2=A0 Signature,=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0 /* UINT32=C2=A0 Signature */=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= \ >> +=C2=A0=C2=A0=C2=A0 sizeof (Type),=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 /* UIN= T32=C2=A0 Length */=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= \ >> +=C2=A0=C2=A0=C2=A0 Revision,=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0 /* UINT8=C2=A0=C2=A0 Revision */=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0 \ >> +=C2=A0=C2=A0=C2=A0 0,=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 /* UINT8=C2=A0=C2=A0 = Checksum */=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 \ >> +=C2=A0=C2=A0=C2=A0 { EFI_ACPI_ARM_OEM_ID },=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0 /* UINT8=C2=A0=C2=A0 OemId[6] */=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0 \ >> +=C2=A0=C2=A0=C2=A0 EFI_ACPI_ARM_OEM_TABLE_ID,=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0 /* UINT64=C2=A0 OemTableId */=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 \ >> +=C2=A0=C2=A0=C2=A0 EFI_ACPI_ARM_OEM_REVISION,=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0 /* UINT32=C2=A0 OemRevision */=C2=A0=C2=A0=C2=A0=C2=A0 \ >> +=C2=A0=C2=A0=C2=A0 EFI_ACPI_ARM_CREATOR_ID,=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0 /* UINT32=C2=A0 CreatorId */=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0 \ >> +=C2=A0=C2=A0=C2=A0 EFI_ACPI_ARM_CREATOR_REVISION=C2=A0=C2=A0 /* UINT3= 2=C2=A0 CreatorRevision */ \ >> +=C2=A0 } >> + >> +#endif /* N1Sdp_ACPI_HEADER_ */ >> diff --git a/Platform/ARM/N1Sdp/ConfigurationManager/ConfigurationMana= gerDxe/ConfigurationManager.c b/Platform/ARM/N1Sdp/ConfigurationManager/C= onfigurationManagerDxe/ConfigurationManager.c >> new file mode 100644 >> index 000000000000..fb264ba783af >> --- /dev/null >> +++ b/Platform/ARM/N1Sdp/ConfigurationManager/ConfigurationManagerDxe/= ConfigurationManager.c >> @@ -0,0 +1,2197 @@ >> +/** @file >> +=C2=A0 Configuration Manager Dxe >> + >> +=C2=A0 Copyright (c) 2021, ARM Limited. All rights reserved.
>> + >> +=C2=A0 SPDX-License-Identifier: BSD-2-Clause-Patent >> + >> +=C2=A0 @par Glossary: >> +=C2=A0=C2=A0=C2=A0 - Cm or CM=C2=A0=C2=A0 - Configuration Manager >> +=C2=A0=C2=A0=C2=A0 - Obj or OBJ - Object >> +**/ >> + >> +#include >> +#include >> +#include >> +#include >> +#include >> +#include >> +#include >> +#include >> +#include >> +#include >> +#include >> +#include >> + >> +#include "ConfigurationManager.h" >> +#include "N1SdpAcpiHeader.h" >> +#include "Platform.h" >> + >> +extern struct EFI_ACPI_HETEROGENEOUS_MEMORY_ATTRIBUTE_TABLE Hmat; >> + >> +/** The platform configuration repository information. >> +*/ >> +STATIC >> +EDKII_PLATFORM_REPOSITORY_INFO N1sdpRepositoryInfo =3D { >> +=C2=A0 // Configuration Manager information >> +=C2=A0 { CONFIGURATION_MANAGER_REVISION, CFG_MGR_OEM_ID }, >> + >> +=C2=A0 // ACPI Table List >> +=C2=A0 { >> +=C2=A0=C2=A0=C2=A0 // FADT Table >> +=C2=A0=C2=A0=C2=A0 { >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 EFI_ACPI_6_3_FIXED_ACPI_DESCRIPTION_TA= BLE_SIGNATURE, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 EFI_ACPI_6_3_FIXED_ACPI_DESCRIPTION_TA= BLE_REVISION, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 CREATE_STD_ACPI_TABLE_GEN_ID (EStdAcpi= TableIdFadt), >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 NULL >> +=C2=A0=C2=A0=C2=A0 }, >> +=C2=A0=C2=A0=C2=A0 // GTDT Table >> +=C2=A0=C2=A0=C2=A0 { >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 EFI_ACPI_6_3_GENERIC_TIMER_DESCRIPTION= _TABLE_SIGNATURE, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 EFI_ACPI_6_3_GENERIC_TIMER_DESCRIPTION= _TABLE_REVISION, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 CREATE_STD_ACPI_TABLE_GEN_ID (EStdAcpi= TableIdGtdt), >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 NULL >> +=C2=A0=C2=A0=C2=A0 }, >> +=C2=A0=C2=A0=C2=A0 // MADT Table >> +=C2=A0=C2=A0=C2=A0 { >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 EFI_ACPI_6_3_MULTIPLE_APIC_DESCRIPTION= _TABLE_SIGNATURE, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 EFI_ACPI_6_3_MULTIPLE_APIC_DESCRIPTION= _TABLE_REVISION, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 CREATE_STD_ACPI_TABLE_GEN_ID (EStdAcpi= TableIdMadt), >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 NULL >> +=C2=A0=C2=A0=C2=A0 }, >> +=C2=A0=C2=A0=C2=A0 // SPCR Table >> +=C2=A0=C2=A0=C2=A0 { >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 EFI_ACPI_6_3_SERIAL_PORT_CONSOLE_REDIR= ECTION_TABLE_SIGNATURE, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 EFI_ACPI_SERIAL_PORT_CONSOLE_REDIRECTI= ON_TABLE_REVISION, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 CREATE_STD_ACPI_TABLE_GEN_ID (EStdAcpi= TableIdSpcr), >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 NULL >> +=C2=A0=C2=A0=C2=A0 }, >> +=C2=A0=C2=A0=C2=A0 // DSDT Table >> +=C2=A0=C2=A0=C2=A0 { >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 EFI_ACPI_6_3_DIFFERENTIATED_SYSTEM_DES= CRIPTION_TABLE_SIGNATURE, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 0, // Unused >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 CREATE_STD_ACPI_TABLE_GEN_ID (EStdAcpi= TableIdDsdt), >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 (EFI_ACPI_DESCRIPTION_HEADER*)dsdt_aml= _code >> +=C2=A0=C2=A0=C2=A0 }, >> +=C2=A0=C2=A0=C2=A0 // DBG2 Table >> +=C2=A0=C2=A0=C2=A0 { >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 EFI_ACPI_6_3_DEBUG_PORT_2_TABLE_SIGNAT= URE, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 EFI_ACPI_DBG2_DEBUG_DEVICE_INFORMATION= _STRUCT_REVISION, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 CREATE_STD_ACPI_TABLE_GEN_ID (EStdAcpi= TableIdDbg2), >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 NULL >> +=C2=A0=C2=A0=C2=A0 }, >> +=C2=A0=C2=A0=C2=A0 // PPTT Table >> +=C2=A0=C2=A0=C2=A0 { >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 EFI_ACPI_6_3_PROCESSOR_PROPERTIES_TOPO= LOGY_TABLE_STRUCTURE_SIGNATURE, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 EFI_ACPI_6_3_PROCESSOR_PROPERTIES_TOPO= LOGY_TABLE_REVISION, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 CREATE_STD_ACPI_TABLE_GEN_ID (EStdAcpi= TableIdPptt), >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 NULL >> +=C2=A0=C2=A0=C2=A0 }, >> +=C2=A0=C2=A0=C2=A0 // IORT Table >> +=C2=A0=C2=A0=C2=A0 { >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 EFI_ACPI_6_3_IO_REMAPPING_TABLE_SIGNAT= URE, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 EFI_ACPI_IO_REMAPPING_TABLE_REVISION, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 CREATE_STD_ACPI_TABLE_GEN_ID (EStdAcpi= TableIdIort), >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 NULL >> +=C2=A0=C2=A0=C2=A0 }, >> +=C2=A0=C2=A0=C2=A0 // PCI MCFG Table >> +=C2=A0=C2=A0=C2=A0 { >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 EFI_ACPI_6_3_PCI_EXPRESS_MEMORY_MAPPED= _CONFIGURATION_SPACE_BASE_ADDRESS_DESCRIPTION_TABLE_SIGNATURE, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 EFI_ACPI_MEMORY_MAPPED_CONFIGURATION_S= PACE_ACCESS_TABLE_REVISION, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 CREATE_STD_ACPI_TABLE_GEN_ID (EStdAcpi= TableIdMcfg), >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 NULL, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 SIGNATURE_64 ('A','R','M','N','1','S',= 'D','P'), >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 0x20181101 >> +=C2=A0=C2=A0=C2=A0 }, >> +=C2=A0=C2=A0=C2=A0 // SSDT table describing the PCI root complex >> +=C2=A0=C2=A0=C2=A0 { >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 EFI_ACPI_6_3_SECONDARY_SYSTEM_DESCRIPT= ION_TABLE_SIGNATURE, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 0, // Unused >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 CREATE_STD_ACPI_TABLE_GEN_ID (EStdAcpi= TableIdSsdt), >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 (EFI_ACPI_DESCRIPTION_HEADER*)ssdtpci_= aml_code >> +=C2=A0=C2=A0=C2=A0 }, >> +=C2=A0=C2=A0=C2=A0 // SRAT Table >> +=C2=A0=C2=A0=C2=A0 { >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 EFI_ACPI_6_3_SYSTEM_RESOURCE_AFFINITY_= TABLE_SIGNATURE, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 EFI_ACPI_6_3_SYSTEM_RESOURCE_AFFINITY_= TABLE_REVISION, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 CREATE_STD_ACPI_TABLE_GEN_ID (EStdAcpi= TableIdSrat), >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 NULL >> +=C2=A0=C2=A0=C2=A0 }, >> +=C2=A0=C2=A0=C2=A0 // HMAT Table >> +=C2=A0=C2=A0=C2=A0 { >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 EFI_ACPI_6_3_HETEROGENEOUS_MEMORY_ATTR= IBUTE_TABLE_SIGNATURE, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 EFI_ACPI_6_3_HETEROGENEOUS_MEMORY_ATTR= IBUTE_TABLE_REVISION, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 CREATE_STD_ACPI_TABLE_GEN_ID (EStdAcpi= TableIdRaw), >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 (EFI_ACPI_DESCRIPTION_HEADER*)&Hmat >> +=C2=A0=C2=A0=C2=A0 }, >> +=C2=A0=C2=A0=C2=A0 // SSDT table describing the Remote Chip PCI root = complex >> +=C2=A0=C2=A0=C2=A0 { >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 EFI_ACPI_6_3_SECONDARY_SYSTEM_DESCRIPT= ION_TABLE_SIGNATURE, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 0, // Unused >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 CREATE_STD_ACPI_TABLE_GEN_ID (EStdAcpi= TableIdSsdt), >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 (EFI_ACPI_DESCRIPTION_HEADER*)ssdtremo= tepci_aml_code >> +=C2=A0=C2=A0=C2=A0 }, >> +=C2=A0 }, >> + >> +=C2=A0 // Boot architecture information >> +=C2=A0 { EFI_ACPI_6_3_ARM_PSCI_COMPLIANT },=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // BootArchFlags >> + >> +=C2=A0 // Fixed feature flag information >> +=C2=A0 { EFI_ACPI_6_3_HEADLESS },=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 // Fixed feature flags >> + >> +=C2=A0 // Power management profile information >> +=C2=A0 { EFI_ACPI_6_3_PM_PROFILE_ENTERPRISE_SERVER },=C2=A0=C2=A0=C2=A0= // PowerManagement Profile >> + >> +=C2=A0 /* GIC CPU Interface information >> +=C2=A0=C2=A0=C2=A0=C2=A0 GICC_ENTRY (CPUInterfaceNumber, Mpidr, PmuIr= q, VGicIrq, GicRedistBase, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0 EnergyEfficiency, SpeIrq, ProximityDomain, ClockDom= ain) >> +=C2=A0 */ >> +=C2=A0 { >> +=C2=A0=C2=A0=C2=A0 GICC_ENTRY (0, GET_MPID3 (0x0, 0x0, 0x0, 0x0), 23,= 25, 0, 0, 21, 0, 0), >> +=C2=A0=C2=A0=C2=A0 GICC_ENTRY (1, GET_MPID3 (0x0, 0x0, 0x1, 0x0), 23,= 25, 0, 0, 21, 0, 0), >> +=C2=A0=C2=A0=C2=A0 GICC_ENTRY (2, GET_MPID3 (0x0, 0x1, 0x0, 0x0), 23,= 25, 0, 0, 21, 0, 0), >> +=C2=A0=C2=A0=C2=A0 GICC_ENTRY (3, GET_MPID3 (0x0, 0x1, 0x1, 0x0), 23,= 25, 0, 0, 21, 0, 0), >> +=C2=A0=C2=A0=C2=A0 GICC_ENTRY (4, GET_MPID3 (0x1, 0x0, 0x0, 0x0), 23,= 25, 0, 0, 21, 1, 0), >> +=C2=A0=C2=A0=C2=A0 GICC_ENTRY (5, GET_MPID3 (0x1, 0x0, 0x1, 0x0), 23,= 25, 0, 0, 21, 1, 0), >> +=C2=A0=C2=A0=C2=A0 GICC_ENTRY (6, GET_MPID3 (0x1, 0x1, 0x0, 0x0), 23,= 25, 0, 0, 21, 1, 0), >> +=C2=A0=C2=A0=C2=A0 GICC_ENTRY (7, GET_MPID3 (0x1, 0x1, 0x1, 0x0), 23,= 25, 0, 0, 21, 1, 0), >> +=C2=A0 }, >> + >> +=C2=A0 // GIC Distributor Info >> +=C2=A0 { >> +=C2=A0=C2=A0=C2=A0 FixedPcdGet64 (PcdGicDistributorBase),=C2=A0 // UI= NT64=C2=A0 PhysicalBaseAddress >> +=C2=A0=C2=A0=C2=A0 0,=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0 // UINT32=C2=A0 SystemVectorBase >> +=C2=A0=C2=A0=C2=A0 3=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 // UINT8=C2=A0=C2=A0 GicVersion >> +=C2=A0 }, >> + >> +=C2=A0 // GIC Re-Distributor Info >> +=C2=A0 { >> +=C2=A0=C2=A0=C2=A0 { >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // UINT64=C2=A0 DiscoveryRangeBaseAddr= ess >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 FixedPcdGet64 (PcdGicRedistributorsBas= e), >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // UINT32=C2=A0 DiscoveryRangeLength >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 SIZE_1MB >> +=C2=A0=C2=A0=C2=A0 }, >> +=C2=A0=C2=A0=C2=A0 { >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // UINT64=C2=A0 DiscoveryRangeBaseAddr= ess >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 FixedPcdGet64 (PcdGicRedistributorsBas= e) + (1ULL << 42), >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // UINT32=C2=A0 DiscoveryRangeLength >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 SIZE_1MB >> +=C2=A0=C2=A0=C2=A0 }, >> +=C2=A0 }, >> + >> +=C2=A0 // GIC ITS >> +=C2=A0 { >> +=C2=A0=C2=A0=C2=A0 // GIC ITS - CCIX TCU >> +=C2=A0=C2=A0=C2=A0 { >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // The GIC ITS ID. >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 0, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // The physical address for the Interr= upt Translation Service >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 0x30040000, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 //Proximity Domain >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 0 >> +=C2=A0=C2=A0=C2=A0 }, >> +=C2=A0=C2=A0=C2=A0 // GIC ITS - PCIe TCU >> +=C2=A0=C2=A0=C2=A0 { >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // The GIC ITS ID. >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 1, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // The physical address for the Interr= upt Translation Service >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 0x30060000, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 //Proximity Domain >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 0 >> +=C2=A0=C2=A0=C2=A0 }, >> +=C2=A0=C2=A0=C2=A0 // GIC ITS - CCIX RC >> +=C2=A0=C2=A0=C2=A0 { >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // The GIC ITS ID. >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 2, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // The physical address for the Interr= upt Translation Service >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 0x30080000, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 //Proximity Domain >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 0 >> +=C2=A0=C2=A0=C2=A0 }, >> +=C2=A0=C2=A0=C2=A0 // GIC ITS - PCIe RC >> +=C2=A0=C2=A0=C2=A0 { >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // The GIC ITS ID. >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 3, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // The physical address for the Interr= upt Translation Service >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 0x300A0000, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 //Proximity Domain >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 0 >> +=C2=A0=C2=A0=C2=A0 }, >> +=C2=A0=C2=A0=C2=A0 //Remote chip GIC ITS - PCIe TCU >> +=C2=A0=C2=A0=C2=A0 { >> +=C2=A0=C2=A0=C2=A0=C2=A0 ITS_REMOTE_SMMU_PCIE, >> +=C2=A0=C2=A0=C2=A0=C2=A0 0x40030060000, >> +=C2=A0=C2=A0=C2=A0=C2=A0 1 >> +=C2=A0=C2=A0=C2=A0 }, >> +=C2=A0=C2=A0=C2=A0 //Remote chip GIC ITS - PCIe RC >> +=C2=A0=C2=A0=C2=A0 { >> +=C2=A0=C2=A0=C2=A0=C2=A0 ITS_REMOTE_PCIE, >> +=C2=A0=C2=A0=C2=A0=C2=A0 0x400300a0000, >> +=C2=A0=C2=A0=C2=A0=C2=A0 1 >> +=C2=A0=C2=A0=C2=A0 }, >> +=C2=A0 }, >> + >> +=C2=A0 // Generic Timer Info >> +=C2=A0 { >> +=C2=A0=C2=A0=C2=A0 // The physical base address for the counter contr= ol frame >> +=C2=A0=C2=A0=C2=A0 N1Sdp_SYSTEM_TIMER_BASE_ADDRESS, >> +=C2=A0=C2=A0=C2=A0 // The physical base address for the counter read = frame >> +=C2=A0=C2=A0=C2=A0 N1Sdp_CNT_READ_BASE_ADDRESS, >> +=C2=A0=C2=A0=C2=A0 // The secure PL1 timer interrupt >> +=C2=A0=C2=A0=C2=A0 FixedPcdGet32 (PcdArmArchTimerSecIntrNum), >> +=C2=A0=C2=A0=C2=A0 // The secure PL1 timer flags >> +=C2=A0=C2=A0=C2=A0 N1Sdp_GTDT_GTIMER_FLAGS, >> +=C2=A0=C2=A0=C2=A0 // The non-secure PL1 timer interrupt >> +=C2=A0=C2=A0=C2=A0 FixedPcdGet32 (PcdArmArchTimerIntrNum), >> +=C2=A0=C2=A0=C2=A0 // The non-secure PL1 timer flags >> +=C2=A0=C2=A0=C2=A0 N1Sdp_GTDT_GTIMER_FLAGS, >> +=C2=A0=C2=A0=C2=A0 // The virtual timer interrupt >> +=C2=A0=C2=A0=C2=A0 FixedPcdGet32 (PcdArmArchTimerVirtIntrNum), >> +=C2=A0=C2=A0=C2=A0 // The virtual timer flags >> +=C2=A0=C2=A0=C2=A0 N1Sdp_GTDT_GTIMER_FLAGS, >> +=C2=A0=C2=A0=C2=A0 // The non-secure PL2 timer interrupt >> +=C2=A0=C2=A0=C2=A0 FixedPcdGet32 (PcdArmArchTimerHypIntrNum), >> +=C2=A0=C2=A0=C2=A0 // The non-secure PL2 timer flags >> +=C2=A0=C2=A0=C2=A0 N1Sdp_GTDT_GTIMER_FLAGS >> +=C2=A0 }, >> + >> +=C2=A0 // Generic Timer Block Information >> +=C2=A0 { >> +=C2=A0=C2=A0=C2=A0 { >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // The physical base address for the G= T Block Timer structure >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 N1Sdp_GT_BLOCK_CTL_BASE, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // The number of timer frames implemen= ted in the GT Block >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 N1Sdp_TIMER_FRAMES_COUNT, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // Reference token for the GT Block ti= mer frame list >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 REFERENCE_TOKEN (GTBlock0TimerInfo) >> +=C2=A0=C2=A0=C2=A0 } >> +=C2=A0 }, >> + >> +=C2=A0 // GT Block Timer Frames >> +=C2=A0 { >> +=C2=A0=C2=A0=C2=A0 // Frame 0 >> +=C2=A0=C2=A0=C2=A0 { >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 0,=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0 // UINT8=C2=A0=C2=A0 FrameNumber >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 N1Sdp_GT_BLOCK_FRAME0_CTL_BASE,=C2=A0=C2= =A0=C2=A0=C2=A0 // UINT64=C2=A0 PhysicalAddressCntBase >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 N1Sdp_GT_BLOCK_FRAME0_CTL_EL0_BASE, //= UINT64=C2=A0 PhysicalAddressCntEL0Base >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 N1Sdp_GT_BLOCK_FRAME0_GSIV,=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // UINT32=C2=A0 PhysicalTimerGSIV >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 N1Sdp_GTX_TIMER_FLAGS,=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // UINT32=C2= =A0 PhysicalTimerFlags >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 0,=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0 // UINT32=C2=A0 VirtualTimerGSIV >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 0,=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0 // UINT32=C2=A0 VirtualTimerFlags >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 N1Sdp_GTX_COMMON_FLAGS_NS=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // UINT32=C2=A0 CommonFlags >> +=C2=A0=C2=A0=C2=A0 }, >> +=C2=A0=C2=A0=C2=A0 // Frame 1 >> +=C2=A0=C2=A0=C2=A0 { >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 1,=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0 // UINT8=C2=A0=C2=A0 FrameNumber >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 N1Sdp_GT_BLOCK_FRAME1_CTL_BASE,=C2=A0=C2= =A0=C2=A0=C2=A0 // UINT64=C2=A0 PhysicalAddressCntBase >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 N1Sdp_GT_BLOCK_FRAME1_CTL_EL0_BASE, //= UINT64=C2=A0 PhysicalAddressCntEL0Base >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 N1Sdp_GT_BLOCK_FRAME1_GSIV,=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // UINT32=C2=A0 PhysicalTimerGSIV >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 N1Sdp_GTX_TIMER_FLAGS,=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // UINT32=C2= =A0 PhysicalTimerFlags >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 0,=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0 // UINT32=C2=A0 VirtualTimerGSIV >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 0,=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0 // UINT32=C2=A0 VirtualTimerFlags >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 N1Sdp_GTX_COMMON_FLAGS_S=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // UINT32=C2=A0 Commo= nFlags >> +=C2=A0=C2=A0=C2=A0 }, >> +=C2=A0 }, >> + >> +=C2=A0 // Watchdog Info >> +=C2=A0 { >> +=C2=A0=C2=A0=C2=A0 // The physical base address of the SBSA Watchdog = control frame >> +=C2=A0=C2=A0=C2=A0 FixedPcdGet64 (PcdGenericWatchdogControlBase), >> +=C2=A0=C2=A0=C2=A0 // The physical base address of the SBSA Watchdog = refresh frame >> +=C2=A0=C2=A0=C2=A0 FixedPcdGet64 (PcdGenericWatchdogRefreshBase), >> +=C2=A0=C2=A0=C2=A0 // The watchdog interrupt >> +=C2=A0=C2=A0=C2=A0 FixedPcdGet32 (PcdGenericWatchdogEl2IntrNum), >> +=C2=A0=C2=A0=C2=A0 // The watchdog flags >> +=C2=A0=C2=A0=C2=A0 N1Sdp_SBSA_WATCHDOG_FLAGS >> +=C2=A0 }, >> + >> +=C2=A0 // SPCR Serial Port >> +=C2=A0 { >> +=C2=A0=C2=A0=C2=A0 FixedPcdGet64 (PcdSerialRegisterBase),=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0 // BaseAddress >> +=C2=A0=C2=A0=C2=A0 FixedPcdGet32 (PL011UartInterrupt),=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // Interrupt >> +=C2=A0=C2=A0=C2=A0 FixedPcdGet64 (PcdUartDefaultBaudRate),=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0 // BaudRate >> +=C2=A0=C2=A0=C2=A0 FixedPcdGet32 (PL011UartClkInHz),=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // Clock >> +=C2=A0=C2=A0=C2=A0 EFI_ACPI_DBG2_PORT_SUBTYPE_SERIAL_ARM_PL011_UART=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // Port subtype >> +=C2=A0 }, >> + >> +=C2=A0 // Debug Serial Port >> +=C2=A0 { >> +=C2=A0=C2=A0=C2=A0 FixedPcdGet64 (PcdSerialDbgRegisterBase),=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= // BaseAddress >> +=C2=A0=C2=A0=C2=A0 0,=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // Interrupt -unused >> +=C2=A0=C2=A0=C2=A0 FixedPcdGet64 (PcdSerialDbgUartBaudRate),=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= // BaudRate >> +=C2=A0=C2=A0=C2=A0 FixedPcdGet32 (PcdSerialDbgUartClkInHz),=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0 // Clock >> +=C2=A0=C2=A0=C2=A0 EFI_ACPI_DBG2_PORT_SUBTYPE_SERIAL_ARM_PL011_UART=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // Port subtype >> +=C2=A0 }, >> + >> +=C2=A0 // Processor Hierarchy Nodes >> +=C2=A0 { >> +=C2=A0=C2=A0=C2=A0 // Package >> +=C2=A0=C2=A0=C2=A0 { >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // CM_OBJECT_TOKEN=C2=A0 Token >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 REFERENCE_TOKEN (ProcHierarchyInfo[0])= , >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // UINT32=C2=A0 Flags >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 PROC_NODE_FLAGS ( >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 EFI_ACPI_6_3_PPTT_PACKAGE_= PHYSICAL, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 EFI_ACPI_6_3_PPTT_PROCESSO= R_ID_INVALID, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 EFI_ACPI_6_3_PPTT_PROCESSO= R_IS_NOT_THREAD, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 EFI_ACPI_6_3_PPTT_NODE_IS_= NOT_LEAF, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 EFI_ACPI_6_3_PPTT_IMPLEMEN= TATION_IDENTICAL >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 ), >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // CM_OBJECT_TOKEN=C2=A0 ParentToken >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 CM_NULL_TOKEN, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // CM_OBJECT_TOKEN=C2=A0 GicCToken >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 CM_NULL_TOKEN, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // UINT32=C2=A0 NoOfPrivateResources >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 SOC_RESOURCE_COUNT, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // CM_OBJECT_TOKEN=C2=A0 PrivateResour= cesArrayToken >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 REFERENCE_TOKEN (SocResources) >> +=C2=A0=C2=A0=C2=A0 }, >> +=C2=A0=C2=A0=C2=A0 // Cluster0 >> +=C2=A0=C2=A0=C2=A0 { >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // CM_OBJECT_TOKEN=C2=A0 Token >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 REFERENCE_TOKEN (ProcHierarchyInfo[1])= , >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // UINT32=C2=A0 Flags >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 PROC_NODE_FLAGS ( >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 EFI_ACPI_6_3_PPTT_PACKAGE_= NOT_PHYSICAL, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 EFI_ACPI_6_3_PPTT_PROCESSO= R_ID_INVALID, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 EFI_ACPI_6_3_PPTT_PROCESSO= R_IS_NOT_THREAD, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 EFI_ACPI_6_3_PPTT_NODE_IS_= NOT_LEAF, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 EFI_ACPI_6_3_PPTT_IMPLEMEN= TATION_IDENTICAL >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 ), >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // CM_OBJECT_TOKEN=C2=A0 ParentToken >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 REFERENCE_TOKEN (ProcHierarchyInfo[0])= , // -> Package >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // CM_OBJECT_TOKEN=C2=A0 GicCToken >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 CM_NULL_TOKEN, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // UINT32=C2=A0 NoOfPrivateResources >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 CLUSTER_RESOURCE_COUNT, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // CM_OBJECT_TOKEN=C2=A0 PrivateResour= cesArrayToken >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 REFERENCE_TOKEN (ClusterResources) >> +=C2=A0=C2=A0=C2=A0 }, >> +=C2=A0=C2=A0=C2=A0 // Cluster1 >> +=C2=A0=C2=A0=C2=A0 { >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // CM_OBJECT_TOKEN=C2=A0 Token >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 REFERENCE_TOKEN (ProcHierarchyInfo[2])= , >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // UINT32=C2=A0 Flags >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 PROC_NODE_FLAGS ( >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 EFI_ACPI_6_3_PPTT_PACKAGE_= NOT_PHYSICAL, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 EFI_ACPI_6_3_PPTT_PROCESSO= R_ID_INVALID, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 EFI_ACPI_6_3_PPTT_PROCESSO= R_IS_NOT_THREAD, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 EFI_ACPI_6_3_PPTT_NODE_IS_= NOT_LEAF, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 EFI_ACPI_6_3_PPTT_IMPLEMEN= TATION_IDENTICAL >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 ), >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // CM_OBJECT_TOKEN=C2=A0 ParentToken >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 REFERENCE_TOKEN (ProcHierarchyInfo[0])= , // -> Package >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // CM_OBJECT_TOKEN=C2=A0 GicCToken >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 CM_NULL_TOKEN, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // UINT32=C2=A0 NoOfPrivateResources >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 CLUSTER_RESOURCE_COUNT, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // CM_OBJECT_TOKEN=C2=A0 PrivateResour= cesArrayToken >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 REFERENCE_TOKEN (ClusterResources) >> +=C2=A0=C2=A0=C2=A0 }, >> +=C2=A0=C2=A0=C2=A0 // Cluster0 - Cpu0 >> +=C2=A0=C2=A0=C2=A0 { >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // CM_OBJECT_TOKEN=C2=A0 Token >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 REFERENCE_TOKEN (ProcHierarchyInfo[3])= , >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // UINT32=C2=A0 Flags >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 PROC_NODE_FLAGS ( >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 EFI_ACPI_6_3_PPTT_PACKAGE_= NOT_PHYSICAL, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 EFI_ACPI_6_3_PPTT_PROCESSO= R_ID_VALID, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 EFI_ACPI_6_3_PPTT_PROCESSO= R_IS_NOT_THREAD, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 EFI_ACPI_6_3_PPTT_NODE_IS_= LEAF, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 EFI_ACPI_6_3_PPTT_IMPLEMEN= TATION_NOT_IDENTICAL >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 ), >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // CM_OBJECT_TOKEN=C2=A0 ParentToken >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 REFERENCE_TOKEN (ProcHierarchyInfo[1])= , // -> 'cluster in Cluster0 >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // CM_OBJECT_TOKEN=C2=A0 GicCToken >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 REFERENCE_TOKEN (GicCInfo[0]), >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // UINT32=C2=A0 NoOfPrivateResources >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 CORE_RESOURCE_COUNT, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // CM_OBJECT_TOKEN=C2=A0 PrivateResour= cesArrayToken >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 REFERENCE_TOKEN (CoreResources) >> +=C2=A0=C2=A0=C2=A0 }, >> +=C2=A0=C2=A0=C2=A0 // Cluster0 - Cpu1 >> +=C2=A0=C2=A0=C2=A0 { >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // CM_OBJECT_TOKEN=C2=A0 Token >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 REFERENCE_TOKEN (ProcHierarchyInfo[4])= , >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // UINT32=C2=A0 Flags >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 PROC_NODE_FLAGS ( >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 EFI_ACPI_6_3_PPTT_PACKAGE_= NOT_PHYSICAL, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 EFI_ACPI_6_3_PPTT_PROCESSO= R_ID_VALID, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 EFI_ACPI_6_3_PPTT_PROCESSO= R_IS_NOT_THREAD, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 EFI_ACPI_6_3_PPTT_NODE_IS_= LEAF, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 EFI_ACPI_6_3_PPTT_IMPLEMEN= TATION_NOT_IDENTICAL >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 ), >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // CM_OBJECT_TOKEN=C2=A0 ParentToken >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 REFERENCE_TOKEN (ProcHierarchyInfo[1])= , // -> 'cluster in Cluster0 >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // CM_OBJECT_TOKEN=C2=A0 GicCToken >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 REFERENCE_TOKEN (GicCInfo[1]), >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // UINT32=C2=A0 NoOfPrivateResources >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 CORE_RESOURCE_COUNT, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // CM_OBJECT_TOKEN=C2=A0 PrivateResour= cesArrayToken >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 REFERENCE_TOKEN (CoreResources) >> +=C2=A0=C2=A0=C2=A0 }, >> +=C2=A0=C2=A0=C2=A0 // Cluster1 - Cpu0 >> +=C2=A0=C2=A0=C2=A0 { >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // CM_OBJECT_TOKEN=C2=A0 Token >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 REFERENCE_TOKEN (ProcHierarchyInfo[3])= , >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // UINT32=C2=A0 Flags >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 PROC_NODE_FLAGS ( >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 EFI_ACPI_6_3_PPTT_PACKAGE_= NOT_PHYSICAL, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 EFI_ACPI_6_3_PPTT_PROCESSO= R_ID_VALID, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 EFI_ACPI_6_3_PPTT_PROCESSO= R_IS_NOT_THREAD, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 EFI_ACPI_6_3_PPTT_NODE_IS_= LEAF, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 EFI_ACPI_6_3_PPTT_IMPLEMEN= TATION_NOT_IDENTICAL >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 ), >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // CM_OBJECT_TOKEN=C2=A0 ParentToken >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 REFERENCE_TOKEN (ProcHierarchyInfo[2])= , // -> 'cluster in Cluster1 >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // CM_OBJECT_TOKEN=C2=A0 GicCToken >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 REFERENCE_TOKEN (GicCInfo[2]), >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // UINT32=C2=A0 NoOfPrivateResources >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 CORE_RESOURCE_COUNT, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // CM_OBJECT_TOKEN=C2=A0 PrivateResour= cesArrayToken >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 REFERENCE_TOKEN (CoreResources) >> +=C2=A0=C2=A0=C2=A0 }, >> +=C2=A0=C2=A0=C2=A0 // Cluster1 - Cpu1 >> +=C2=A0=C2=A0=C2=A0 { >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // CM_OBJECT_TOKEN=C2=A0 Token >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 REFERENCE_TOKEN (ProcHierarchyInfo[4])= , >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // UINT32=C2=A0 Flags >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 PROC_NODE_FLAGS ( >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 EFI_ACPI_6_3_PPTT_PACKAGE_= NOT_PHYSICAL, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 EFI_ACPI_6_3_PPTT_PROCESSO= R_ID_VALID, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 EFI_ACPI_6_3_PPTT_PROCESSO= R_IS_NOT_THREAD, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 EFI_ACPI_6_3_PPTT_NODE_IS_= LEAF, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 EFI_ACPI_6_3_PPTT_IMPLEMEN= TATION_NOT_IDENTICAL >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 ), >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // CM_OBJECT_TOKEN=C2=A0 ParentToken >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 REFERENCE_TOKEN (ProcHierarchyInfo[2])= , // -> 'cluster in Cluster1 >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // CM_OBJECT_TOKEN=C2=A0 GicCToken >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 REFERENCE_TOKEN (GicCInfo[3]), >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // UINT32=C2=A0 NoOfPrivateResources >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 CORE_RESOURCE_COUNT, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // CM_OBJECT_TOKEN=C2=A0 PrivateResour= cesArrayToken >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 REFERENCE_TOKEN (CoreResources) >> +=C2=A0=C2=A0=C2=A0 }, >> +=C2=A0=C2=A0=C2=A0 // Slave chip hierarchy >> +=C2=A0=C2=A0=C2=A0 // Package >> +=C2=A0=C2=A0=C2=A0 { >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // CM_OBJECT_TOKEN=C2=A0 Token >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 REFERENCE_TOKEN (ProcHierarchyInfo[7])= , >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // UINT32=C2=A0 Flags >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 PROC_NODE_FLAGS ( >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 EFI_ACPI_6_3_PPTT_PACKAGE_= PHYSICAL, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 EFI_ACPI_6_3_PPTT_PROCESSO= R_ID_INVALID, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 EFI_ACPI_6_3_PPTT_PROCESSO= R_IS_NOT_THREAD, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 EFI_ACPI_6_3_PPTT_NODE_IS_= NOT_LEAF, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 EFI_ACPI_6_3_PPTT_IMPLEMEN= TATION_IDENTICAL >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 ), >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // CM_OBJECT_TOKEN=C2=A0 ParentToken >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 CM_NULL_TOKEN, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // CM_OBJECT_TOKEN=C2=A0 GicCToken >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 CM_NULL_TOKEN, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // UINT32=C2=A0 NoOfPrivateResources >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 SOC_RESOURCE_COUNT, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // CM_OBJECT_TOKEN=C2=A0 PrivateResour= cesArrayToken >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 REFERENCE_TOKEN (SocResources) >> +=C2=A0=C2=A0=C2=A0 }, >> +=C2=A0=C2=A0=C2=A0 // Cluster0 >> +=C2=A0=C2=A0=C2=A0 { >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // CM_OBJECT_TOKEN=C2=A0 Token >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 REFERENCE_TOKEN (ProcHierarchyInfo[8])= , >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // UINT32=C2=A0 Flags >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 PROC_NODE_FLAGS ( >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 EFI_ACPI_6_3_PPTT_PACKAGE_= NOT_PHYSICAL, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 EFI_ACPI_6_3_PPTT_PROCESSO= R_ID_INVALID, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 EFI_ACPI_6_3_PPTT_PROCESSO= R_IS_NOT_THREAD, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 EFI_ACPI_6_3_PPTT_NODE_IS_= NOT_LEAF, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 EFI_ACPI_6_3_PPTT_IMPLEMEN= TATION_IDENTICAL >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 ), >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // CM_OBJECT_TOKEN=C2=A0 ParentToken >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 REFERENCE_TOKEN (ProcHierarchyInfo[7])= , // -> Package >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // CM_OBJECT_TOKEN=C2=A0 GicCToken >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 CM_NULL_TOKEN, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // UINT32=C2=A0 NoOfPrivateResources >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 CLUSTER_RESOURCE_COUNT, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // CM_OBJECT_TOKEN=C2=A0 PrivateResour= cesArrayToken >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 REFERENCE_TOKEN (ClusterResources) >> +=C2=A0=C2=A0=C2=A0 }, >> +=C2=A0=C2=A0=C2=A0 // Cluster1 >> +=C2=A0=C2=A0=C2=A0 { >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // CM_OBJECT_TOKEN=C2=A0 Token >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 REFERENCE_TOKEN (ProcHierarchyInfo[9])= , >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // UINT32=C2=A0 Flags >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 PROC_NODE_FLAGS ( >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 EFI_ACPI_6_3_PPTT_PACKAGE_= NOT_PHYSICAL, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 EFI_ACPI_6_3_PPTT_PROCESSO= R_ID_INVALID, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 EFI_ACPI_6_3_PPTT_PROCESSO= R_IS_NOT_THREAD, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 EFI_ACPI_6_3_PPTT_NODE_IS_= NOT_LEAF, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 EFI_ACPI_6_3_PPTT_IMPLEMEN= TATION_IDENTICAL >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 ), >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // CM_OBJECT_TOKEN=C2=A0 ParentToken >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 REFERENCE_TOKEN (ProcHierarchyInfo[7])= , // -> Package >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // CM_OBJECT_TOKEN=C2=A0 GicCToken >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 CM_NULL_TOKEN, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // UINT32=C2=A0 NoOfPrivateResources >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 CLUSTER_RESOURCE_COUNT, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // CM_OBJECT_TOKEN=C2=A0 PrivateResour= cesArrayToken >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 REFERENCE_TOKEN (ClusterResources) >> +=C2=A0=C2=A0=C2=A0 }, >> +=C2=A0=C2=A0=C2=A0 // Cluster0 - Cpu0 >> +=C2=A0=C2=A0=C2=A0 { >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // CM_OBJECT_TOKEN=C2=A0 Token >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 REFERENCE_TOKEN (ProcHierarchyInfo[10]= ), >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // UINT32=C2=A0 Flags >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 PROC_NODE_FLAGS ( >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 EFI_ACPI_6_3_PPTT_PACKAGE_= NOT_PHYSICAL, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 EFI_ACPI_6_3_PPTT_PROCESSO= R_ID_VALID, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 EFI_ACPI_6_3_PPTT_PROCESSO= R_IS_NOT_THREAD, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 EFI_ACPI_6_3_PPTT_NODE_IS_= LEAF, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 EFI_ACPI_6_3_PPTT_IMPLEMEN= TATION_NOT_IDENTICAL >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 ), >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // CM_OBJECT_TOKEN=C2=A0 ParentToken >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 REFERENCE_TOKEN (ProcHierarchyInfo[8])= , // -> 'cluster in Cluster0 >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // CM_OBJECT_TOKEN=C2=A0 GicCToken >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 REFERENCE_TOKEN (GicCInfo[4]), >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // UINT32=C2=A0 NoOfPrivateResources >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 CORE_RESOURCE_COUNT, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // CM_OBJECT_TOKEN=C2=A0 PrivateResour= cesArrayToken >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 REFERENCE_TOKEN (CoreResources) >> +=C2=A0=C2=A0=C2=A0 }, >> +=C2=A0=C2=A0=C2=A0 // Cluster0 - Cpu1 >> +=C2=A0=C2=A0=C2=A0 { >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // CM_OBJECT_TOKEN=C2=A0 Token >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 REFERENCE_TOKEN (ProcHierarchyInfo[11]= ), >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // UINT32=C2=A0 Flags >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 PROC_NODE_FLAGS ( >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 EFI_ACPI_6_3_PPTT_PACKAGE_= NOT_PHYSICAL, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 EFI_ACPI_6_3_PPTT_PROCESSO= R_ID_VALID, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 EFI_ACPI_6_3_PPTT_PROCESSO= R_IS_NOT_THREAD, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 EFI_ACPI_6_3_PPTT_NODE_IS_= LEAF, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 EFI_ACPI_6_3_PPTT_IMPLEMEN= TATION_NOT_IDENTICAL >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 ), >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // CM_OBJECT_TOKEN=C2=A0 ParentToken >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 REFERENCE_TOKEN (ProcHierarchyInfo[8])= , // -> 'cluster in Cluster0 >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // CM_OBJECT_TOKEN=C2=A0 GicCToken >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 REFERENCE_TOKEN (GicCInfo[5]), >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // UINT32=C2=A0 NoOfPrivateResources >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 CORE_RESOURCE_COUNT, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // CM_OBJECT_TOKEN=C2=A0 PrivateResour= cesArrayToken >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 REFERENCE_TOKEN (CoreResources) >> +=C2=A0=C2=A0=C2=A0 }, >> +=C2=A0=C2=A0=C2=A0 // Cluster1 - Cpu0 >> +=C2=A0=C2=A0=C2=A0 { >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // CM_OBJECT_TOKEN=C2=A0 Token >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 REFERENCE_TOKEN (ProcHierarchyInfo[10]= ), >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // UINT32=C2=A0 Flags >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 PROC_NODE_FLAGS ( >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 EFI_ACPI_6_3_PPTT_PACKAGE_= NOT_PHYSICAL, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 EFI_ACPI_6_3_PPTT_PROCESSO= R_ID_VALID, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 EFI_ACPI_6_3_PPTT_PROCESSO= R_IS_NOT_THREAD, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 EFI_ACPI_6_3_PPTT_NODE_IS_= LEAF, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 EFI_ACPI_6_3_PPTT_IMPLEMEN= TATION_NOT_IDENTICAL >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 ), >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // CM_OBJECT_TOKEN=C2=A0 ParentToken >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 REFERENCE_TOKEN (ProcHierarchyInfo[9])= , // -> 'cluster in Cluster1 >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // CM_OBJECT_TOKEN=C2=A0 GicCToken >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 REFERENCE_TOKEN (GicCInfo[6]), >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // UINT32=C2=A0 NoOfPrivateResources >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 CORE_RESOURCE_COUNT, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // CM_OBJECT_TOKEN=C2=A0 PrivateResour= cesArrayToken >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 REFERENCE_TOKEN (CoreResources) >> +=C2=A0=C2=A0=C2=A0 }, >> +=C2=A0=C2=A0=C2=A0 // Cluster1 - Cpu1 >> +=C2=A0=C2=A0=C2=A0 { >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // CM_OBJECT_TOKEN=C2=A0 Token >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 REFERENCE_TOKEN (ProcHierarchyInfo[11]= ), >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // UINT32=C2=A0 Flags >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 PROC_NODE_FLAGS ( >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 EFI_ACPI_6_3_PPTT_PACKAGE_= NOT_PHYSICAL, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 EFI_ACPI_6_3_PPTT_PROCESSO= R_ID_VALID, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 EFI_ACPI_6_3_PPTT_PROCESSO= R_IS_NOT_THREAD, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 EFI_ACPI_6_3_PPTT_NODE_IS_= LEAF, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 EFI_ACPI_6_3_PPTT_IMPLEMEN= TATION_NOT_IDENTICAL >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 ), >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // CM_OBJECT_TOKEN=C2=A0 ParentToken >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 REFERENCE_TOKEN (ProcHierarchyInfo[9])= , // -> 'cluster in Cluster1 >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // CM_OBJECT_TOKEN=C2=A0 GicCToken >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 REFERENCE_TOKEN (GicCInfo[7]), >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // UINT32=C2=A0 NoOfPrivateResources >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 CORE_RESOURCE_COUNT, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // CM_OBJECT_TOKEN=C2=A0 PrivateResour= cesArrayToken >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 REFERENCE_TOKEN (CoreResources) >> +=C2=A0=C2=A0=C2=A0 }, >> +=C2=A0 }, >> + >> +=C2=A0 // Cache information >> +=C2=A0 { >> +=C2=A0=C2=A0=C2=A0 // 'cluster's L3 cache >> +=C2=A0=C2=A0=C2=A0 { >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 REFERENCE_TOKEN (CacheInfo[0]),=C2=A0 = // CM_OBJECT_TOKEN=C2=A0 Token >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 CM_NULL_TOKEN,=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0 // CM_OBJECT_TOKEN=C2=A0 NextLevelOfCacheToken >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 SIZE_1MB,=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // UINT32=C2=A0 Size >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 2048,=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // UINT32=C2=A0 Nu= mberOfSets >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 8,=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // = UINT32=C2=A0 Associativity >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 CACHE_ATTRIBUTES (=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // UINT8=C2= =A0=C2=A0 Attributes >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 EFI_ACPI_6_3_CACHE_ATTRIBU= TES_ALLOCATION_READ, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 EFI_ACPI_6_3_CACHE_ATTRIBU= TES_CACHE_TYPE_UNIFIED, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 EFI_ACPI_6_3_CACHE_ATTRIBU= TES_WRITE_POLICY_WRITE_BACK >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 ), >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 64=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // = UINT16=C2=A0 LineSize >> +=C2=A0=C2=A0=C2=A0 }, >> +=C2=A0=C2=A0=C2=A0 // 'core's L1 instruction cache >> +=C2=A0=C2=A0=C2=A0 { >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 REFERENCE_TOKEN (CacheInfo[1]),=C2=A0 = // CM_OBJECT_TOKEN=C2=A0 Token >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 REFERENCE_TOKEN (CacheInfo[3]),=C2=A0 = // CM_OBJECT_TOKEN=C2=A0 NextLevelOfCacheToken >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 SIZE_64KB,=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 // UINT32=C2=A0 Size >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 256,=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // UINT32=C2=A0= NumberOfSets >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 4,=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // = UINT32=C2=A0 Associativity >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 CACHE_ATTRIBUTES (=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // UINT8=C2= =A0=C2=A0 Attributes >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 EFI_ACPI_6_3_CACHE_ATTRIBU= TES_ALLOCATION_READ, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 EFI_ACPI_6_3_CACHE_ATTRIBU= TES_CACHE_TYPE_INSTRUCTION, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 EFI_ACPI_6_3_CACHE_ATTRIBU= TES_WRITE_POLICY_WRITE_BACK >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 ), >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 64=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // = UINT16=C2=A0 LineSize >> +=C2=A0=C2=A0=C2=A0 }, >> +=C2=A0=C2=A0=C2=A0 // 'core's L1 data cache >> +=C2=A0=C2=A0=C2=A0 { >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 REFERENCE_TOKEN (CacheInfo[2]),=C2=A0 = // CM_OBJECT_TOKEN=C2=A0 Token >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 REFERENCE_TOKEN (CacheInfo[3]),=C2=A0 = // CM_OBJECT_TOKEN=C2=A0 NextLevelOfCacheToken >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 SIZE_64KB,=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 // UINT32=C2=A0 Size >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 256,=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // UINT32=C2=A0= NumberOfSets >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 4,=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // = UINT32=C2=A0 Associativity >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 CACHE_ATTRIBUTES (=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // UINT8=C2= =A0=C2=A0 Attributes >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 EFI_ACPI_6_3_CACHE_ATTRIBU= TES_ALLOCATION_READ_WRITE, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 EFI_ACPI_6_3_CACHE_ATTRIBU= TES_CACHE_TYPE_DATA, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 EFI_ACPI_6_3_CACHE_ATTRIBU= TES_WRITE_POLICY_WRITE_BACK >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 ), >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 64=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // = UINT16=C2=A0 LineSize >> +=C2=A0=C2=A0=C2=A0 }, >> +=C2=A0=C2=A0=C2=A0 // cores's L2 cache >> +=C2=A0=C2=A0=C2=A0 { >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 REFERENCE_TOKEN (CacheInfo[3]),=C2=A0 = // CM_OBJECT_TOKEN=C2=A0 Token >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 CM_NULL_TOKEN,=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0 // CM_OBJECT_TOKEN=C2=A0 NextLevelOfCacheToken >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 SIZE_1MB,=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // UINT32=C2=A0 Size >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 2048,=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // UINT32=C2=A0 Nu= mberOfSets >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 8,=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // = UINT32=C2=A0 Associativity >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 CACHE_ATTRIBUTES (=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // UINT8=C2= =A0=C2=A0 Attributes >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 EFI_ACPI_6_3_CACHE_ATTRIBU= TES_ALLOCATION_READ, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 EFI_ACPI_6_3_CACHE_ATTRIBU= TES_CACHE_TYPE_UNIFIED, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 EFI_ACPI_6_3_CACHE_ATTRIBU= TES_WRITE_POLICY_WRITE_BACK >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 ), >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 64=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // = UINT16=C2=A0 LineSize >> +=C2=A0=C2=A0=C2=A0 }, >> +=C2=A0=C2=A0=C2=A0 // slc cache >> +=C2=A0=C2=A0=C2=A0 { >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 REFERENCE_TOKEN (CacheInfo[4]),=C2=A0 = // CM_OBJECT_TOKEN=C2=A0 Token >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 CM_NULL_TOKEN,=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0 // CM_OBJECT_TOKEN=C2=A0 NextLevelOfCacheToken >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 SIZE_8MB,=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // UINT32=C2=A0 Size >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 8192,=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // UINT32=C2=A0 Nu= mberOfSets >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 16,=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // UINT32= =C2=A0 Associativity >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 CACHE_ATTRIBUTES (=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // UINT8=C2= =A0=C2=A0 Attributes >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 EFI_ACPI_6_3_CACHE_ATTRIBU= TES_ALLOCATION_READ, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 EFI_ACPI_6_3_CACHE_ATTRIBU= TES_CACHE_TYPE_UNIFIED, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 EFI_ACPI_6_3_CACHE_ATTRIBU= TES_WRITE_POLICY_WRITE_BACK >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 ), >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 64=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // = UINT16=C2=A0 LineSize >> +=C2=A0=C2=A0=C2=A0 }, >> +=C2=A0 }, >> + >> +=C2=A0 // Resources private to the 'cluster (shared among cores) in C= luster >> +=C2=A0 { >> +=C2=A0=C2=A0=C2=A0 { REFERENCE_TOKEN (CacheInfo[0]) }=C2=A0 // -> 'cl= uster's L3 cache in Cluster >> +=C2=A0 }, >> + >> +=C2=A0 // Resources private to each individual 'core instance in Clus= ter >> +=C2=A0 { >> +=C2=A0=C2=A0=C2=A0 { REFERENCE_TOKEN (CacheInfo[1]) }, // -> 'core's = L1 I-cache in Cluster >> +=C2=A0=C2=A0=C2=A0 { REFERENCE_TOKEN (CacheInfo[2]) }=C2=A0 // -> 'co= re's L1 D-cache in Cluster >> +=C2=A0 }, >> + >> +=C2=A0 // Resources private to the SoC >> +=C2=A0 { >> +=C2=A0=C2=A0=C2=A0 { REFERENCE_TOKEN (CacheInfo[4])=C2=A0=C2=A0 },=C2= =A0 // -> slc for SoC >> +=C2=A0 }, >> + >> +=C2=A0 // ITS group node >> +=C2=A0 { >> +=C2=A0=C2=A0=C2=A0 { >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // Reference token for this Iort node >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 REFERENCE_TOKEN (ItsGroupInfo[ITS_SMMU= _CCIX]), >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // The number of ITS identifiers in th= e ITS node. >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 1, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // Reference token for the ITS identif= ier array >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 REFERENCE_TOKEN (ItsIdentifierArray[IT= S_SMMU_CCIX]) >> +=C2=A0=C2=A0=C2=A0 }, >> +=C2=A0=C2=A0=C2=A0 { >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // Reference token for this Iort node >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 REFERENCE_TOKEN (ItsGroupInfo[ITS_SMMU= _PCIE]), >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // The number of ITS identifiers in th= e ITS node. >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 1, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // Reference token for the ITS identif= ier array >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 REFERENCE_TOKEN (ItsIdentifierArray[IT= S_SMMU_PCIE]) >> +=C2=A0=C2=A0=C2=A0 }, >> +=C2=A0=C2=A0=C2=A0 { >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // Reference token for this Iort node >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 REFERENCE_TOKEN (ItsGroupInfo[ITS_CCIX= ]), >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // The number of ITS identifiers in th= e ITS node. >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 1, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // Reference token for the ITS identif= ier array >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 REFERENCE_TOKEN (ItsIdentifierArray[IT= S_CCIX]) >> +=C2=A0=C2=A0=C2=A0 }, >> +=C2=A0=C2=A0=C2=A0 { >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // Reference token for this Iort node >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 REFERENCE_TOKEN (ItsGroupInfo[ITS_PCIE= ]), >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // The number of ITS identifiers in th= e ITS node. >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 1, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // Reference token for the ITS identif= ier array >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 REFERENCE_TOKEN (ItsIdentifierArray[IT= S_PCIE]) >> +=C2=A0=C2=A0=C2=A0 }, >> +=C2=A0=C2=A0=C2=A0 //Remote Chip ITS >> +=C2=A0=C2=A0=C2=A0 { >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 REFERENCE_TOKEN (ItsGroupInfo[ITS_REMO= TE_SMMU_PCIE]), >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 1, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 REFERENCE_TOKEN (ItsIdentifierArray[IT= S_REMOTE_SMMU_PCIE]) >> +=C2=A0=C2=A0=C2=A0 }, >> +=C2=A0=C2=A0=C2=A0 { >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 REFERENCE_TOKEN (ItsGroupInfo[ITS_REMO= TE_PCIE]), >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 1, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 REFERENCE_TOKEN (ItsIdentifierArray[IT= S_REMOTE_PCIE]) >> +=C2=A0=C2=A0=C2=A0 }, >> +=C2=A0 }, >> + >> +=C2=A0 // ITS identifier array >> +=C2=A0 { >> +=C2=A0=C2=A0=C2=A0 { >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // The ITS Identifier - 0 >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 ITS_SMMU_CCIX >> +=C2=A0=C2=A0=C2=A0 }, >> +=C2=A0=C2=A0=C2=A0 { >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // The ITS Identifier - 1 >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 ITS_SMMU_PCIE >> +=C2=A0=C2=A0=C2=A0 }, >> +=C2=A0=C2=A0=C2=A0 { >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // The ITS Identifier - 2 >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 ITS_CCIX >> +=C2=A0=C2=A0=C2=A0 }, >> +=C2=A0=C2=A0=C2=A0 { >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // The ITS Identifier - 3 >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 ITS_PCIE >> +=C2=A0=C2=A0=C2=A0 }, >> +=C2=A0=C2=A0=C2=A0 { >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // The ITS Identifier - 4 >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 ITS_REMOTE_SMMU_PCIE >> +=C2=A0=C2=A0=C2=A0 }, >> +=C2=A0=C2=A0=C2=A0 { >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // The ITS Identifier - 5 >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 ITS_REMOTE_PCIE >> +=C2=A0=C2=A0=C2=A0 } >> +=C2=A0 }, >> + >> +=C2=A0 { >> +=C2=A0=C2=A0=C2=A0 // SMMUv3 Node >> +=C2=A0=C2=A0=C2=A0 { >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // Reference token for this Iort node >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 REFERENCE_TOKEN (SmmuV3Info[SMMUV3INFO= _PCIE]), >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // Number of ID mappings >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 2, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // Reference token for the ID mapping = array >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 REFERENCE_TOKEN (DeviceIdMapping[DEVIC= EIDMAPPING_SMMU_PCIE][0]), >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // SMMU Base Address >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 0x4F400000, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // SMMU flags >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 EFI_ACPI_IORT_SMMUv3_FLAG_COHAC_OVERRI= DE, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // VATOS address >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 0, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // Model >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 EFI_ACPI_IORT_SMMUv3_MODEL_GENERIC, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // GSIV of the Event interrupt if SPI = based >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 0x10B, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // PRI Interrupt if SPI based >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 0, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // GERR interrupt if GSIV based >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 0x10D, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // Sync interrupt if GSIV based >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 0x10C, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // Proximity domain flag, ignored in t= his case >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 0, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // Index into the array of ID mapping >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 1 >> +=C2=A0=C2=A0=C2=A0 }, >> +=C2=A0=C2=A0=C2=A0 // SMMUv3 Node >> +=C2=A0=C2=A0=C2=A0 { >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // Reference token for this Iort node >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 REFERENCE_TOKEN (SmmuV3Info[SMMUV3INFO= _CCIX]), >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // Number of ID mappings >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 2, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // Reference token for the ID mapping = array >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 REFERENCE_TOKEN (DeviceIdMapping[DEVIC= EIDMAPPING_SMMU_CCIX][0]), >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // SMMU Base Address >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 0x4F000000, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // SMMU flags >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 EFI_ACPI_IORT_SMMUv3_FLAG_COHAC_OVERRI= DE, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // VATOS address >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 0, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // Model >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 EFI_ACPI_IORT_SMMUv3_MODEL_GENERIC, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // GSIV of the Event interrupt if SPI = based >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 0x104, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // PRI Interrupt if SPI based >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 0, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // GERR interrupt if GSIV based >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 0x106, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // Sync interrupt if GSIV based >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 0x105, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // Proximity domain flag, ignored in t= his case >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 0, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // Index into the array of ID mapping >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 1 >> +=C2=A0=C2=A0=C2=A0 }, >> +=C2=A0=C2=A0=C2=A0 //Remote Chip SMMU V3 setting >> +=C2=A0=C2=A0=C2=A0 { >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 REFERENCE_TOKEN (SmmuV3Info[SMMUV3INFO= _REMOTE_PCIE]), >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 2, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 REFERENCE_TOKEN (DeviceIdMapping[DEVIC= EIDMAPPING_REMOTE_SMMU_PCIE][0]), >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 0x4004f400000, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 EFI_ACPI_IORT_SMMUv3_FLAG_COHAC_OVERRI= DE, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 0, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 EFI_ACPI_IORT_SMMUv3_MODEL_GENERIC, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 747, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 0, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 749, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 748, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 0, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 1 >> +=C2=A0=C2=A0=C2=A0 } >> +=C2=A0 }, >> + >> +=C2=A0 { >> +=C2=A0=C2=A0=C2=A0 // Root Complex node info >> +=C2=A0=C2=A0=C2=A0 { >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // Reference token for this Iort node >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 REFERENCE_TOKEN (RootComplexInfo[0]), >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // Number of ID mappings >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 1, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // Reference token for the ID mapping = array >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 REFERENCE_TOKEN (DeviceIdMapping[DEVIC= EIDMAPPING_PCIE][0]), >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // Memory access properties : Cache co= herent attributes >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 EFI_ACPI_IORT_MEM_ACCESS_PROP_CCA, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // Memory access properties : Allocati= on hints >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 0, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // Memory access properties : Memory a= ccess flags >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 0, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // ATS attributes >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 EFI_ACPI_IORT_ROOT_COMPLEX_ATS_SUPPORT= ED, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // PCI segment number >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 0, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // Memory address size limit >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 42 >> +=C2=A0=C2=A0=C2=A0 }, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // Root Complex node info >> +=C2=A0=C2=A0=C2=A0 { >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // Reference token for this Iort node >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 REFERENCE_TOKEN (RootComplexInfo[1]), >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // Number of ID mappings >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 1, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // Reference token for the ID mapping = array >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 REFERENCE_TOKEN (DeviceIdMapping[DEVIC= EIDMAPPING_PCIE][1]), >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // Memory access properties : Cache co= herent attributes >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 EFI_ACPI_IORT_MEM_ACCESS_PROP_CCA, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // Memory access properties : Allocati= on hints >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 0, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // Memory access properties : Memory a= ccess flags >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 0, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // ATS attributes >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 EFI_ACPI_IORT_ROOT_COMPLEX_ATS_SUPPORT= ED, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // PCI segment number >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 1, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // Memory address size limit >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 42 >> +=C2=A0=C2=A0=C2=A0 }, >> +=C2=A0=C2=A0=C2=A0=C2=A0 //Remote Chip Root Complex node Info >> +=C2=A0=C2=A0=C2=A0 { >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 REFERENCE_TOKEN (RootComplexInfo[ROOT_= REMOTE_PCIE]), >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 1, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 REFERENCE_TOKEN (DeviceIdMapping[DEVIC= EIDMAPPING_REMOTE_PCIE][0]), >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 EFI_ACPI_IORT_MEM_ACCESS_PROP_CCA, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 0, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 0, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 EFI_ACPI_IORT_ROOT_COMPLEX_ATS_SUPPORT= ED, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 2, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 42 >> +=C2=A0=C2=A0=C2=A0 } >> +=C2=A0 }, >> + >> +=C2=A0 // Array of Device ID mappings >> +=C2=A0 { >> +=C2=A0=C2=A0=C2=A0 // DeviceIdMapping[0][0] - [0][1] >> +=C2=A0=C2=A0=C2=A0 { >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // Mapping SMMUv3 -> ITS Group >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // SMMUv3 device ID mapping >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 { >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // Input base >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 0x0, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // Number of input IDs >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 0x0000FFFF, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // Output Base >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 0x0, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // Output reference >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 REFERENCE_TOKEN (ItsGroupI= nfo[ITS_PCIE]), >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // Flags >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 0 >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 }, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // SMMUv3 device ID mapping >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 { >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // Input base >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 0x0, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // Number of input IDs >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 0x00000001, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // Output Base >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 0x0, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // Output reference token = for the IORT node >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 REFERENCE_TOKEN (ItsGroupI= nfo[ITS_SMMU_PCIE]), >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // Flags >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 EFI_ACPI_IORT_ID_MAPPING_F= LAGS_SINGLE >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 } >> +=C2=A0=C2=A0=C2=A0 }, >> +=C2=A0=C2=A0=C2=A0 // DeviceIdMapping[1][0] - [1][1] >> +=C2=A0=C2=A0=C2=A0 { >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // Mapping SMMUv3 -> ITS Group >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // SMMUv3 device ID mapping >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 { >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // Input base >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 0x0, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // Number of input IDs >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 0x0000FFFF, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // Output Base >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 0x0, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // Output reference >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 REFERENCE_TOKEN (ItsGroupI= nfo[ITS_CCIX]), >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // Flags >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 0 >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 }, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // SMMUv3 device ID mapping >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 { >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // Input base >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 0x0, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // Number of input IDs >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 0x00000001, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // Output Base >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 0x0, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // Output reference token = for the IORT node >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 REFERENCE_TOKEN (ItsGroupI= nfo[ITS_SMMU_CCIX]), >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // Flags >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 EFI_ACPI_IORT_ID_MAPPING_F= LAGS_SINGLE >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 } >> +=C2=A0=C2=A0=C2=A0 }, >> +=C2=A0=C2=A0=C2=A0 // DeviceIdMapping[2][0] - [2][1] >> +=C2=A0=C2=A0=C2=A0 { >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // Mapping for=C2=A0 RootComplex -> SM= MUv3 >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // Device ID mapping for Root complex = node >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 { >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // Input base >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 0x0, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // Number of input IDs >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 0x0000FFFF, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // Output Base >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 0x0, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // Output reference >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 REFERENCE_TOKEN (SmmuV3Inf= o[SMMUV3INFO_PCIE]), >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // Flags >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 0 >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 }, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // Device ID mapping for Root complex = node >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 { >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // Input base >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 0x0, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // Number of input IDs >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 0x0000FFFF, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // Output Base >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 0x0, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // Output reference token = for the IORT node >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 REFERENCE_TOKEN (SmmuV3Inf= o[SMMUV3INFO_CCIX]), >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // Flags >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 0 >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 } >> +=C2=A0=C2=A0=C2=A0 }, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // Mapping of Remote Chip SMMUv3 -> IT= S Group >> +=C2=A0=C2=A0=C2=A0 { >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 { >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 0x0, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 0x0000ffff, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 0x0, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 REFERENCE_TOKEN (ItsGroupI= nfo[ITS_REMOTE_PCIE]), >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 0 >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 }, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 { >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 0x0, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 0x00000001, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 0x0, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 REFERENCE_TOKEN (ItsGroupI= nfo[ITS_REMOTE_SMMU_PCIE]), >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 EFI_ACPI_IORT_ID_MAPPING_F= LAGS_SINGLE >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 } >> +=C2=A0=C2=A0=C2=A0 }, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // Mapping for=C2=A0 Remote Chip RootC= omplex -> SMMUv3 >> +=C2=A0=C2=A0=C2=A0 { >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 { >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 0x0, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 0x0000ffff, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 0x0, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 REFERENCE_TOKEN (SmmuV3Inf= o[SMMUV3INFO_REMOTE_PCIE]), >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 0 >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 } >> +=C2=A0=C2=A0=C2=A0 }, >> +=C2=A0 }, >> + >> +=C2=A0 // PCI Configuration Space Info >> +=C2=A0 { >> +=C2=A0=C2=A0=C2=A0 // PCIe ECAM >> +=C2=A0=C2=A0=C2=A0 { >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 0x70000000,=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0 // Base Address >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 0x0,=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // Segment Group Number >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 0x0,=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // Start Bus Number >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 17=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // End Bus Number >> +=C2=A0=C2=A0=C2=A0 }, >> +=C2=A0=C2=A0=C2=A0 // CCIX ECAM >> +=C2=A0=C2=A0=C2=A0 { >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 0x68000000,=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0 // Base Address >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 0x1,=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // Segment Group Number >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 0x0,=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // Start Bus Number >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 17=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // End Bus Number >> +=C2=A0=C2=A0=C2=A0 }, >> +=C2=A0=C2=A0=C2=A0 //Remote Chip PCIe ECAM >> +=C2=A0=C2=A0=C2=A0 { >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 0x40070000000,=C2=A0=C2=A0 // Base Add= ress >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 0x2,=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // Segment Group Number >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 0x0,=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // Start Bus Number >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 17=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // End Bus Number >> +=C2=A0=C2=A0=C2=A0 } >> +=C2=A0 }, >> + >> +=C2=A0 // Memory Affinity Info >> +=C2=A0 { >> +=C2=A0=C2=A0=C2=A0 { >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // Proximity domain to which memory ra= nge belongs >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 0, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 //Base Address >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 0x80000000, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 //Length >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 0x80000000, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 //Flags >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 EFI_ACPI_6_3_MEMORY_ENABLED >> +=C2=A0=C2=A0=C2=A0 }, >> +=C2=A0=C2=A0=C2=A0 { >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // Proximity domain to which memory ra= nge belongs >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 0, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 //Base Address >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 0x8080000000, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 //Length is updated dynamically from S= RAM >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 0, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 //Flags >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 EFI_ACPI_6_3_MEMORY_ENABLED >> +=C2=A0=C2=A0=C2=A0 } >> +=C2=A0 } >> + >> +}; >> + >> +/** A helper function for returning the Configuration Manager Objects= . >> +=C2=A0 @param [in]=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 CmObjectId=C2=A0= =C2=A0=C2=A0=C2=A0 The Configuration Manager Object ID. >> +=C2=A0 @param [in]=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Object=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Pointer to the Object(s). >> +=C2=A0 @param [in]=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 ObjectSize=C2=A0= =C2=A0=C2=A0=C2=A0 Total size of the Object(s). >> +=C2=A0 @param [in]=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 ObjectCount=C2= =A0=C2=A0=C2=A0 Number of Objects. >> +=C2=A0 @param [in, out]=C2=A0 CmObjectDesc=C2=A0=C2=A0 Pointer to the= Configuration Manager Object >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 descriptor d= escribing the requested Object. >> +=C2=A0 @retval EFI_SUCCESS=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Success. >> +**/ >> +STATIC >> +EFI_STATUS >> +EFIAPI >> +HandleCmObject ( >> +=C2=A0 IN=C2=A0 CONST CM_OBJECT_ID=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 CmObjectId, >> +=C2=A0 IN=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 VOID=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= *=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Object, >> +=C2=A0 IN=C2=A0 CONST UINTN=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0 ObjectSize, >> +=C2=A0 IN=C2=A0 CONST UINTN=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0 ObjectCount, >> +=C2=A0 IN=C2=A0 OUT=C2=A0=C2=A0 CM_OBJ_DESCRIPTOR=C2=A0=C2=A0 * CONST= CmObjectDesc >> +=C2=A0 ) >> +{ >> +=C2=A0 CmObjectDesc->ObjectId =3D CmObjectId; >> +=C2=A0 CmObjectDesc->Size =3D ObjectSize; >> +=C2=A0 CmObjectDesc->Data =3D (VOID*)Object; >> +=C2=A0 CmObjectDesc->Count =3D ObjectCount; >> +=C2=A0 DEBUG (( >> +=C2=A0=C2=A0=C2=A0 DEBUG_INFO, >> +=C2=A0=C2=A0=C2=A0 "INFO: CmObjectId =3D %x, Ptr =3D 0x%p, Size =3D %= d, Count =3D %d\n", >> +=C2=A0=C2=A0=C2=A0 CmObjectId, >> +=C2=A0=C2=A0=C2=A0 CmObjectDesc->Data, >> +=C2=A0=C2=A0=C2=A0 CmObjectDesc->Size, >> +=C2=A0=C2=A0=C2=A0 CmObjectDesc->Count >> +=C2=A0=C2=A0=C2=A0 )); >> +=C2=A0 return EFI_SUCCESS; >> +} >> + >> +/** A helper function for returning the Configuration Manager Objects= that >> +=C2=A0=C2=A0=C2=A0 match the token. >> +=C2=A0 @param [in]=C2=A0 This=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Pointer to the Configuration M= anager Protocol. >> +=C2=A0 @param [in]=C2=A0 CmObjectId=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0 The Configuration Manager Object ID. >> +=C2=A0 @param [in]=C2=A0 Object=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Pointer to the Object(s). >> +=C2=A0 @param [in]=C2=A0 ObjectSize=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0 Total size of the Object(s). >> +=C2=A0 @param [in]=C2=A0 ObjectCount=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0 Number of Objects. >> +=C2=A0 @param [in]=C2=A0 Token=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 A token identifying the object. >> +=C2=A0 @param [in]=C2=A0 HandlerProc=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0 A handler function to search the object >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 referenced by the = token. >> +=C2=A0 @param [in, out]=C2=A0 CmObjectDesc=C2=A0 Pointer to the Confi= guration Manager Object >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 descriptor describ= ing the requested Object. >> +=C2=A0 @retval EFI_SUCCESS=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0 Success. >> +=C2=A0 @retval EFI_INVALID_PARAMETER A parameter is invalid. >> +=C2=A0 @retval EFI_NOT_FOUND=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0 The required object information is not found. >> +**/ >> +STATIC >> +EFI_STATUS >> +EFIAPI >> +HandleCmObjectRefByToken ( >> +=C2=A0 IN=C2=A0 CONST EDKII_CONFIGURATION_MANAGER_PROTOCOL=C2=A0 * CO= NST This, >> +=C2=A0 IN=C2=A0 CONST CM_OBJECT_ID=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0 CmObjectId, >> +=C2=A0 IN=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 VOID=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 *=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 O= bject, >> +=C2=A0 IN=C2=A0 CONST UINTN=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 ObjectSize, >> +=C2=A0 IN=C2=A0 CONST UINTN=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 ObjectCount, >> +=C2=A0 IN=C2=A0 CONST CM_OBJECT_TOKEN=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 = Token, >> +=C2=A0 IN=C2=A0 CONST CM_OBJECT_HANDLER_PROC=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 HandlerProc, >> +=C2=A0 IN=C2=A0 OUT=C2=A0=C2=A0 CM_OBJ_DESCRIPTOR=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0 * CONST CmObjectDesc >> +=C2=A0 ) >> +{ >> +=C2=A0 EFI_STATUS=C2=A0 Status; >> +=C2=A0 CmObjectDesc->ObjectId =3D CmObjectId; >> +=C2=A0 if (Token =3D=3D CM_NULL_TOKEN) { >> +=C2=A0=C2=A0=C2=A0 CmObjectDesc->Size =3D ObjectSize; >> +=C2=A0=C2=A0=C2=A0 CmObjectDesc->Data =3D (VOID*)Object; >> +=C2=A0=C2=A0=C2=A0 CmObjectDesc->Count =3D ObjectCount; >> +=C2=A0=C2=A0=C2=A0 Status =3D EFI_SUCCESS; >> +=C2=A0 } else { >> +=C2=A0=C2=A0=C2=A0 Status =3D HandlerProc (This, CmObjectId, Token, C= mObjectDesc); >> +=C2=A0 } >> + >> +=C2=A0 DEBUG (( >> +=C2=A0=C2=A0=C2=A0 DEBUG_INFO, >> +=C2=A0=C2=A0=C2=A0 "INFO: Token =3D 0x%p, CmObjectId =3D %x, Ptr =3D = 0x%p, Size =3D %d, Count =3D %d\n", >> +=C2=A0=C2=A0=C2=A0 (VOID*)Token, >> +=C2=A0=C2=A0=C2=A0 CmObjectId, >> +=C2=A0=C2=A0=C2=A0 CmObjectDesc->Data, >> +=C2=A0=C2=A0=C2=A0 CmObjectDesc->Size, >> +=C2=A0=C2=A0=C2=A0 CmObjectDesc->Count >> +=C2=A0=C2=A0=C2=A0 )); >> +=C2=A0 return Status; >> +} >> + >> +/** A helper function for returning Configuration Manager Object(s) r= eferenced >> +=C2=A0=C2=A0=C2=A0 by token when the entire platform repository is in= scope and the >> +=C2=A0=C2=A0=C2=A0 CM_NULL_TOKEN value is not allowed. >> +=C2=A0 @param [in]=C2=A0 This=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Pointer to the Configuration M= anager Protocol. >> +=C2=A0 @param [in]=C2=A0 CmObjectId=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0 The Configuration Manager Object ID. >> +=C2=A0 @param [in]=C2=A0 Token=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 A token identifying the object. >> +=C2=A0 @param [in]=C2=A0 HandlerProc=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0 A handler function to search the object(s) >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 referenced by the = token. >> +=C2=A0 @param [in, out]=C2=A0 CmObjectDesc=C2=A0 Pointer to the Confi= guration Manager Object >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 descriptor describ= ing the requested Object. >> +=C2=A0 @retval EFI_SUCCESS=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0 Success. >> +=C2=A0 @retval EFI_INVALID_PARAMETER A parameter is invalid. >> +=C2=A0 @retval EFI_NOT_FOUND=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0 The required object information is not found. >> +**/ >> +STATIC >> +EFI_STATUS >> +EFIAPI >> +HandleCmObjectSearchPlatformRepo ( >> +=C2=A0 IN=C2=A0 CONST EDKII_CONFIGURATION_MANAGER_PROTOCOL=C2=A0 * CO= NST This, >> +=C2=A0 IN=C2=A0 CONST CM_OBJECT_ID=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0 CmObjectId, >> +=C2=A0 IN=C2=A0 CONST CM_OBJECT_TOKEN=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 = Token, >> +=C2=A0 IN=C2=A0 CONST CM_OBJECT_HANDLER_PROC=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 HandlerProc, >> +=C2=A0 IN=C2=A0 OUT=C2=A0=C2=A0 CM_OBJ_DESCRIPTOR=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0 * CONST CmObjectDesc >> +=C2=A0 ) >> +{ >> +=C2=A0 EFI_STATUS=C2=A0 Status; >> +=C2=A0 CmObjectDesc->ObjectId =3D CmObjectId; >> +=C2=A0 if (Token =3D=3D CM_NULL_TOKEN) { >> +=C2=A0=C2=A0=C2=A0 DEBUG (( >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 DEBUG_ERROR, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 "ERROR: CM_NULL_TOKEN value is not all= owed when searching" >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 " the entire platform repository.\n" >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 )); >> +=C2=A0=C2=A0=C2=A0 return EFI_INVALID_PARAMETER; >> +=C2=A0 } >> + >> +=C2=A0 Status =3D HandlerProc (This, CmObjectId, Token, CmObjectDesc)= ; >> +=C2=A0 DEBUG (( >> +=C2=A0=C2=A0=C2=A0 DEBUG_INFO, >> +=C2=A0=C2=A0=C2=A0 "INFO: Token =3D 0x%p, CmObjectId =3D %x, Ptr =3D = 0x%p, Size =3D %d, Count =3D %d\n", >> +=C2=A0=C2=A0=C2=A0 CmObjectId, >> +=C2=A0=C2=A0=C2=A0 (VOID*)Token, >> +=C2=A0=C2=A0=C2=A0 CmObjectDesc->Data, >> +=C2=A0=C2=A0=C2=A0 CmObjectDesc->Size, >> +=C2=A0=C2=A0=C2=A0 CmObjectDesc->Count >> +=C2=A0=C2=A0=C2=A0 )); >> +=C2=A0 return Status; >> +} >> + >> +/** Initialize the Platform Configuration Repository. >> +=C2=A0 @param [in]=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 PlatformRepo=C2= =A0=C2=A0 Pointer to the Configuration Manager Protocol. >> +=C2=A0 @retval EFI_SUCCESS=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0 Success >> +**/ >> +STATIC >> +EFI_STATUS >> +EFIAPI >> +InitializePlatformRepository ( >> +=C2=A0 IN=C2=A0 EDKII_PLATFORM_REPOSITORY_INFO=C2=A0 * CONST Platform= Repo >> +=C2=A0 ) >> +{ >> +=C2=A0 return EFI_SUCCESS; >> +} >> + >> +/** Return a GT Block timer frame info list. >> + >> +=C2=A0 @param [in]=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 This=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Pointer to the Configuration Manager= Protocol. >> +=C2=A0 @param [in]=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 CmObject= Id=C2=A0 The Configuration Manager Object ID. >> +=C2=A0 @param [in]=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Token=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 A token for identifying the object >> +=C2=A0 @param [in, out]=C2=A0=C2=A0 CmObject=C2=A0=C2=A0=C2=A0 Pointe= r to the Configuration Manager Object >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 descriptor describing th= e requested Object. >> + >> +=C2=A0 @retval EFI_SUCCESS=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0 Success. >> +=C2=A0 @retval EFI_INVALID_PARAMETER=C2=A0 A parameter is invalid. >> +=C2=A0 @retval EFI_NOT_FOUND=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0 The required object information is not found. >> +**/ >> +EFI_STATUS >> +EFIAPI >> +GetGTBlockTimerFrameInfo ( >> +=C2=A0 IN=C2=A0 CONST EDKII_CONFIGURATION_MANAGER_PROTOCOL=C2=A0 * CO= NST This, >> +=C2=A0 IN=C2=A0 CONST CM_OBJECT_ID=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0 CmObjectId, >> +=C2=A0 IN=C2=A0 CONST CM_OBJECT_TOKEN=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 = Token, >> +=C2=A0 IN=C2=A0 OUT=C2=A0=C2=A0 CM_OBJ_DESCRIPTOR=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0 * CONST CmObject >> +=C2=A0 ) >> +{ >> +=C2=A0 EDKII_PLATFORM_REPOSITORY_INFO=C2=A0 * PlatformRepo; >> + >> +=C2=A0 if ((This =3D=3D NULL) || (CmObject =3D=3D NULL)) { >> +=C2=A0=C2=A0=C2=A0 ASSERT (This !=3D NULL); >> +=C2=A0=C2=A0=C2=A0 ASSERT (CmObject !=3D NULL); >> +=C2=A0=C2=A0=C2=A0 return EFI_INVALID_PARAMETER; >> +=C2=A0 } >> + >> +=C2=A0 PlatformRepo =3D This->PlatRepoInfo; >> + >> +=C2=A0 if (Token !=3D (CM_OBJECT_TOKEN)&PlatformRepo->GTBlock0TimerIn= fo) { >> +=C2=A0=C2=A0=C2=A0 return EFI_NOT_FOUND; >> +=C2=A0 } >> + >> +=C2=A0 CmObject->ObjectId =3D CmObjectId; >> +=C2=A0 CmObject->Size =3D sizeof (PlatformRepo->GTBlock0TimerInfo); >> +=C2=A0 CmObject->Data =3D (VOID*)&PlatformRepo->GTBlock0TimerInfo; >> +=C2=A0 CmObject->Count =3D ARRAY_SIZE (PlatformRepo->GTBlock0TimerInf= o); >> +=C2=A0 return EFI_SUCCESS; >> +} >> + >> +/** Return an ITS identifier array. >> + >> +=C2=A0 @param [in]=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 This=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Pointer to the Configuration Manager= Protocol. >> +=C2=A0 @param [in]=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 CmObject= Id=C2=A0 The Configuration Manager Object ID. >> +=C2=A0 @param [in]=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Token=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 A token for identifying the object >> +=C2=A0 @param [in, out]=C2=A0=C2=A0 CmObject=C2=A0=C2=A0=C2=A0 Pointe= r to the Configuration Manager Object >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 descriptor describing th= e requested Object. >> + >> +=C2=A0 @retval EFI_SUCCESS=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0 Success. >> +=C2=A0 @retval EFI_INVALID_PARAMETER=C2=A0 A parameter is invalid. >> +=C2=A0 @retval EFI_NOT_FOUND=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0 The required object information is not found. >> +**/ >> +EFI_STATUS >> +EFIAPI >> +GetItsIdentifierArray ( >> +=C2=A0 IN=C2=A0 CONST EDKII_CONFIGURATION_MANAGER_PROTOCOL=C2=A0 * CO= NST This, >> +=C2=A0 IN=C2=A0 CONST CM_OBJECT_ID=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0 CmObjectId, >> +=C2=A0 IN=C2=A0 CONST CM_OBJECT_TOKEN=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 = Token, >> +=C2=A0 IN=C2=A0 OUT=C2=A0=C2=A0 CM_OBJ_DESCRIPTOR=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0 * CONST CmObject >> +=C2=A0 ) >> +{ >> +=C2=A0 EDKII_PLATFORM_REPOSITORY_INFO=C2=A0 * PlatformRepo; >> +=C2=A0 UINTN=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Count; >> +=C2=A0 UINTN=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Index; >> + >> +=C2=A0 if ((This =3D=3D NULL) || (CmObject =3D=3D NULL)) { >> +=C2=A0=C2=A0=C2=A0 ASSERT (This !=3D NULL); >> +=C2=A0=C2=A0=C2=A0 ASSERT (CmObject !=3D NULL); >> +=C2=A0=C2=A0=C2=A0 return EFI_INVALID_PARAMETER; >> +=C2=A0 } >> + >> +=C2=A0 PlatformRepo =3D This->PlatRepoInfo; >> + >> +=C2=A0 Count =3D ARRAY_SIZE (PlatformRepo->ItsIdentifierArray); >> + >> +=C2=A0 for (Index =3D 0; Index < Count; Index++) { >> +=C2=A0=C2=A0=C2=A0 if (Token =3D=3D (CM_OBJECT_TOKEN)&PlatformRepo->I= tsIdentifierArray[Index]) { >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 CmObject->ObjectId =3D CmObjectId; >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 CmObject->Size =3D sizeof (PlatformRep= o->ItsIdentifierArray[0]); >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 CmObject->Data =3D (VOID*)&PlatformRep= o->ItsIdentifierArray[Index]; >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 CmObject->Count =3D 1; >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 return EFI_SUCCESS; >> +=C2=A0=C2=A0=C2=A0 } >> +=C2=A0 } >> + >> +=C2=A0 return EFI_NOT_FOUND; >> +} >> + >> +/** Return an ITS group info. >> + >> +=C2=A0 @param [in]=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 This=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Pointer to the Configuration Manager= Protocol. >> +=C2=A0 @param [in]=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 CmObject= Id=C2=A0 The Configuration Manager Object ID. >> +=C2=A0 @param [in]=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Token=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 A token for identifying the object >> +=C2=A0 @param [in, out]=C2=A0=C2=A0 CmObject=C2=A0=C2=A0=C2=A0 Pointe= r to the Configuration Manager Object >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 descriptor describing th= e requested Object. >> + >> +=C2=A0 @retval EFI_SUCCESS=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0 Success. >> +=C2=A0 @retval EFI_INVALID_PARAMETER=C2=A0 A parameter is invalid. >> +=C2=A0 @retval EFI_NOT_FOUND=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0 The required object information is not found. >> +**/ >> +EFI_STATUS >> +EFIAPI >> +GetItsGroupInfo ( >> +=C2=A0 IN=C2=A0 CONST EDKII_CONFIGURATION_MANAGER_PROTOCOL=C2=A0 * CO= NST This, >> +=C2=A0 IN=C2=A0 CONST CM_OBJECT_ID=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0 CmObjectId, >> +=C2=A0 IN=C2=A0 CONST CM_OBJECT_TOKEN=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 = Token, >> +=C2=A0 IN=C2=A0 OUT=C2=A0=C2=A0 CM_OBJ_DESCRIPTOR=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0 * CONST CmObject >> +=C2=A0 ) >> +{ >> +=C2=A0 EDKII_PLATFORM_REPOSITORY_INFO=C2=A0 * PlatformRepo; >> +=C2=A0 UINTN=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Count; >> +=C2=A0 UINTN=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Index; >> + >> +=C2=A0 if ((This =3D=3D NULL) || (CmObject =3D=3D NULL)) { >> +=C2=A0=C2=A0=C2=A0 ASSERT (This !=3D NULL); >> +=C2=A0=C2=A0=C2=A0 ASSERT (CmObject !=3D NULL); >> +=C2=A0=C2=A0=C2=A0 return EFI_INVALID_PARAMETER; >> +=C2=A0 } >> + >> +=C2=A0 PlatformRepo =3D This->PlatRepoInfo; >> + >> +=C2=A0 Count =3D ARRAY_SIZE (PlatformRepo->ItsGroupInfo); >> + >> +=C2=A0 for (Index =3D 0; Index < Count; Index++) { >> +=C2=A0=C2=A0=C2=A0 if (Token =3D=3D (CM_OBJECT_TOKEN)&PlatformRepo->I= tsGroupInfo[Index]) { >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 CmObject->ObjectId =3D CmObjectId; >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 CmObject->Size =3D sizeof (PlatformRep= o->ItsGroupInfo[0]); >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 CmObject->Data =3D (VOID*)&PlatformRep= o->ItsGroupInfo[Index]; >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 CmObject->Count =3D 1; >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 return EFI_SUCCESS; >> +=C2=A0=C2=A0=C2=A0 } >> +=C2=A0 } >> + >> +=C2=A0 return EFI_NOT_FOUND; >> +} >> + >> +/** Return a device Id mapping array. >> + >> +=C2=A0 @param [in]=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 This=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Pointer to the Configuration Manager= Protocol. >> +=C2=A0 @param [in]=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 CmObject= Id=C2=A0 The Configuration Manager Object ID. >> +=C2=A0 @param [in]=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Token=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 A token for identifying the object >> +=C2=A0 @param [in, out]=C2=A0=C2=A0 CmObject=C2=A0=C2=A0=C2=A0 Pointe= r to the Configuration Manager Object >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 descriptor describing th= e requested Object. >> + >> +=C2=A0 @retval EFI_SUCCESS=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0 Success. >> +=C2=A0 @retval EFI_INVALID_PARAMETER=C2=A0 A parameter is invalid. >> +=C2=A0 @retval EFI_NOT_FOUND=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0 The required object information is not found. >> +**/ >> +EFI_STATUS >> +EFIAPI >> +GetDeviceIdMappingArray ( >> +=C2=A0 IN=C2=A0 CONST EDKII_CONFIGURATION_MANAGER_PROTOCOL=C2=A0 * CO= NST This, >> +=C2=A0 IN=C2=A0 CONST CM_OBJECT_ID=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0 CmObjectId, >> +=C2=A0 IN=C2=A0 CONST CM_OBJECT_TOKEN=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 = Token, >> +=C2=A0 IN=C2=A0 OUT=C2=A0=C2=A0 CM_OBJ_DESCRIPTOR=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0 * CONST CmObject >> +=C2=A0 ) >> +{ >> +=C2=A0 EDKII_PLATFORM_REPOSITORY_INFO=C2=A0 * PlatformRepo; >> +=C2=A0 UINTN=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Count; >> + >> +=C2=A0 if ((This =3D=3D NULL) || (CmObject =3D=3D NULL)) { >> +=C2=A0=C2=A0=C2=A0 ASSERT (This !=3D NULL); >> +=C2=A0=C2=A0=C2=A0 ASSERT (CmObject !=3D NULL); >> +=C2=A0=C2=A0=C2=A0 return EFI_INVALID_PARAMETER; >> +=C2=A0 } >> + >> +=C2=A0 PlatformRepo =3D This->PlatRepoInfo; >> + >> +=C2=A0 DEBUG ((DEBUG_INFO, "DeviceIdMapping - Token =3D %p\n")); >> + >> +=C2=A0 if (Token =3D=3D (CM_OBJECT_TOKEN)&PlatformRepo->DeviceIdMappi= ng[0][0]) { >> +=C2=A0=C2=A0=C2=A0 Count =3D 2; >> +=C2=A0=C2=A0=C2=A0 DEBUG ((DEBUG_INFO, "DeviceIdMapping - Found Devic= eIdMapping[0][0]\n")); >> +=C2=A0 } else if (Token =3D=3D >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0 (CM_OBJECT_TOKEN)&PlatformRepo->DeviceIdMapping[1][0]) { >> +=C2=A0=C2=A0=C2=A0 Count =3D 2; >> +=C2=A0=C2=A0=C2=A0 DEBUG ((DEBUG_INFO, "DeviceIdMapping - Found Devic= eIdMapping[1][0]\n")); >> +=C2=A0 } else if (Token =3D=3D >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0 (CM_OBJECT_TOKEN)&PlatformRepo->DeviceIdMapping[2][0]) { >> +=C2=A0=C2=A0=C2=A0 Count=C2=A0 =3D 1; >> +=C2=A0=C2=A0=C2=A0 DEBUG ((DEBUG_INFO, "DeviceIdMapping - Found Devic= eIdMapping[2][0]\n")); >> +=C2=A0 } else if (Token =3D=3D >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0 (CM_OBJECT_TOKEN)&PlatformRepo->DeviceIdMapping[2][1]) { >> +=C2=A0=C2=A0=C2=A0 Count=C2=A0 =3D 1; >> +=C2=A0=C2=A0=C2=A0 DEBUG ((DEBUG_INFO, "DeviceIdMapping - Found Devic= eIdMapping[2][1]\n")); >> +=C2=A0 } else if (Token =3D=3D >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0 (CM_OBJECT_TOKEN)&PlatformRepo->DeviceIdMapping[DEVICEIDMAPPING_REMOT= E_SMMU_PCIE][0]) { >> +=C2=A0=C2=A0=C2=A0 Count =3D 2; >> +=C2=A0=C2=A0=C2=A0 DEBUG ((DEBUG_INFO, "DeviceIdMapping - Found Devic= eIdMapping[DEVICEIDMAPPING_REMOTE_SMMU_PCIE][0]\n")); >> +=C2=A0 } else if (Token =3D=3D >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0 (CM_OBJECT_TOKEN)&PlatformRepo->DeviceIdMapping[DEVICEIDMAPPING_REMOT= E_PCIE][0]) { >> +=C2=A0=C2=A0=C2=A0 Count=C2=A0 =3D 1; >> +=C2=A0=C2=A0=C2=A0 DEBUG ((DEBUG_INFO, "DeviceIdMapping - Found Devic= eIdMapping[DEVICEIDMAPPING_REMOTE_PCIE][0]\n")); >> +=C2=A0 } else { >> +=C2=A0=C2=A0=C2=A0 DEBUG ((DEBUG_INFO, "DeviceIdMapping - Not Found\n= ")); >> +=C2=A0=C2=A0=C2=A0 return EFI_NOT_FOUND; >> +=C2=A0 } >> + >> +=C2=A0 CmObject->Data =3D (VOID*)Token; >> +=C2=A0 CmObject->ObjectId =3D CmObjectId; >> +=C2=A0 CmObject->Count =3D Count; >> +=C2=A0 CmObject->Size =3D Count * sizeof (CM_ARM_ID_MAPPING); >> + >> +=C2=A0 return EFI_SUCCESS; >> +} >> + >> +/** Return GIC CPU Interface Info. >> + >> +=C2=A0 @param [in]=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 This=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Pointer to the Configuration Manager= Protocol. >> +=C2=A0 @param [in]=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 CmObject= Id=C2=A0 The Object ID of the CM object requested >> +=C2=A0 @param [in]=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 SearchTo= ken A unique token for identifying the requested >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 CM_ARM_GICC_INFO object. >> +=C2=A0 @param [in, out]=C2=A0=C2=A0 CmObject=C2=A0=C2=A0=C2=A0 Pointe= r to the Configuration Manager Object >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 descriptor describing th= e requested Object. >> + >> +=C2=A0 @retval EFI_SUCCESS=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0 Success. >> +=C2=A0 @retval EFI_INVALID_PARAMETER=C2=A0 A parameter is invalid. >> +=C2=A0 @retval EFI_NOT_FOUND=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0 The required object information is not found. >> +**/ >> +EFI_STATUS >> +EFIAPI >> +GetGicCInfo ( >> +=C2=A0 IN=C2=A0 CONST EDKII_CONFIGURATION_MANAGER_PROTOCOL=C2=A0 * CO= NST This, >> +=C2=A0 IN=C2=A0 CONST CM_OBJECT_ID=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0 CmObjectId, >> +=C2=A0 IN=C2=A0 CONST CM_OBJECT_TOKEN=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 = SearchToken, >> +=C2=A0 IN=C2=A0 OUT=C2=A0=C2=A0 CM_OBJ_DESCRIPTOR=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0 * CONST CmObject >> +=C2=A0 ) >> +{ >> +=C2=A0 EDKII_PLATFORM_REPOSITORY_INFO=C2=A0 * PlatformRepo; >> +=C2=A0 NEOVERSEN1SOC_PLAT_INFO=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0 *PlatInfo; >> +=C2=A0 UINT32=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0 TotalObjCount; >> +=C2=A0 UINT32=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0 ObjIndex; >> + >> +=C2=A0 if ((This =3D=3D NULL) || (CmObject =3D=3D NULL)) { >> +=C2=A0=C2=A0=C2=A0 ASSERT (This !=3D NULL); >> +=C2=A0=C2=A0=C2=A0 ASSERT (CmObject !=3D NULL); >> +=C2=A0=C2=A0=C2=A0 return EFI_INVALID_PARAMETER; >> +=C2=A0 } >> + >> +=C2=A0 PlatformRepo =3D This->PlatRepoInfo; >> +=C2=A0 PlatInfo =3D (NEOVERSEN1SOC_PLAT_INFO *)NEOVERSEN1SOC_PLAT_INF= O_STRUCT_BASE; >> + >> +=C2=A0 if (PlatInfo->MultichipMode) > [SAMI] Use curly braces for if-else. Also, the if statment does not eva= luate a boolean expression as MultichipMode is UINT8. Same comment for ot= her places in this patch series. > [/SAMI] >> +=C2=A0=C2=A0=C2=A0 TotalObjCount =3D PLAT_CPU_COUNT * 2; >> +=C2=A0 else >> +=C2=A0=C2=A0=C2=A0 TotalObjCount =3D PLAT_CPU_COUNT; >> + >> +=C2=A0 for (ObjIndex =3D 0; ObjIndex < TotalObjCount; ObjIndex++) { >> +=C2=A0=C2=A0=C2=A0 if (SearchToken =3D=3D (CM_OBJECT_TOKEN)&PlatformR= epo->GicCInfo[ObjIndex]) { >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 CmObject->ObjectId =3D CmObjectId; >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 CmObject->Size =3D sizeof (PlatformRep= o->GicCInfo[ObjIndex]); >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 CmObject->Data =3D (VOID*)&PlatformRep= o->GicCInfo[ObjIndex]; >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 CmObject->Count =3D 1; >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 return EFI_SUCCESS; >> +=C2=A0=C2=A0=C2=A0 } >> +=C2=A0 } >> + >> +=C2=A0 return EFI_NOT_FOUND; >> +} >> + >> +/** Return a list of Configuration Manager object references pointed = to by the >> +=C2=A0=C2=A0=C2=A0 given input token. >> + >> +=C2=A0 @param [in]=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 This=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Pointer to the Configuration Manager= Protocol. >> +=C2=A0 @param [in]=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 CmObject= Id=C2=A0 The Object ID of the CM object requested >> +=C2=A0 @param [in]=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 SearchTo= ken A unique token for identifying the requested >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 CM_ARM_OBJ_REF list. >> +=C2=A0 @param [in, out]=C2=A0=C2=A0 CmObject=C2=A0=C2=A0=C2=A0 Pointe= r to the Configuration Manager Object >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 descriptor describing th= e requested Object. >> + >> +=C2=A0 @retval EFI_SUCCESS=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0 Success. >> +=C2=A0 @retval EFI_INVALID_PARAMETER=C2=A0 A parameter is invalid. >> +=C2=A0 @retval EFI_NOT_FOUND=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0 The required object information is not found. >> +**/ >> +EFI_STATUS >> +EFIAPI >> +GetCmObjRefs ( >> +=C2=A0 IN=C2=A0 CONST EDKII_CONFIGURATION_MANAGER_PROTOCOL=C2=A0 * CO= NST This, >> +=C2=A0 IN=C2=A0 CONST CM_OBJECT_ID=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0 CmObjectId, >> +=C2=A0 IN=C2=A0 CONST CM_OBJECT_TOKEN=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 = SearchToken, >> +=C2=A0 IN=C2=A0 OUT=C2=A0=C2=A0 CM_OBJ_DESCRIPTOR=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0 * CONST CmObject >> +=C2=A0 ) >> +{ >> +=C2=A0 EDKII_PLATFORM_REPOSITORY_INFO=C2=A0 * PlatformRepo; >> + >> +=C2=A0 if ((This =3D=3D NULL) || (CmObject =3D=3D NULL)) { >> +=C2=A0=C2=A0=C2=A0 ASSERT (This !=3D NULL); >> +=C2=A0=C2=A0=C2=A0 ASSERT (CmObject !=3D NULL); >> +=C2=A0=C2=A0=C2=A0 return EFI_INVALID_PARAMETER; >> +=C2=A0 } >> + >> +=C2=A0 PlatformRepo =3D This->PlatRepoInfo; >> + >> +=C2=A0 if (SearchToken =3D=3D (CM_OBJECT_TOKEN)&PlatformRepo->Cluster= Resources) { >> +=C2=A0=C2=A0=C2=A0 CmObject->Size =3D sizeof (PlatformRepo->ClusterRe= sources); >> +=C2=A0=C2=A0=C2=A0 CmObject->Data =3D (VOID*)&PlatformRepo->ClusterRe= sources; >> +=C2=A0=C2=A0=C2=A0 CmObject->Count =3D ARRAY_SIZE (PlatformRepo->Clus= terResources); >> +=C2=A0=C2=A0=C2=A0 return EFI_SUCCESS; >> +=C2=A0 } >> +=C2=A0 if (SearchToken =3D=3D (CM_OBJECT_TOKEN)&PlatformRepo->CoreRes= ources) { >> +=C2=A0=C2=A0=C2=A0 CmObject->Size =3D sizeof (PlatformRepo->CoreResou= rces); >> +=C2=A0=C2=A0=C2=A0 CmObject->Data =3D (VOID*)&PlatformRepo->CoreResou= rces; >> +=C2=A0=C2=A0=C2=A0 CmObject->Count =3D ARRAY_SIZE (PlatformRepo->Core= Resources); >> +=C2=A0=C2=A0=C2=A0 return EFI_SUCCESS; >> +=C2=A0 } >> +=C2=A0 if (SearchToken =3D=3D (CM_OBJECT_TOKEN)&PlatformRepo->SocReso= urces) { >> +=C2=A0=C2=A0=C2=A0 CmObject->Size =3D sizeof (PlatformRepo->SocResour= ces); >> +=C2=A0=C2=A0=C2=A0 CmObject->Data =3D (VOID*)&PlatformRepo->SocResour= ces; >> +=C2=A0=C2=A0=C2=A0 CmObject->Count =3D ARRAY_SIZE (PlatformRepo->SocR= esources); >> +=C2=A0=C2=A0=C2=A0 return EFI_SUCCESS; >> +=C2=A0 } >> + >> +=C2=A0 return EFI_NOT_FOUND; >> +} >> + >> +/** Return a standard namespace object. >> + >> +=C2=A0 @param [in]=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 This=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Pointer to the Configuration Manager= Protocol. >> +=C2=A0 @param [in]=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 CmObject= Id=C2=A0 The Configuration Manager Object ID. >> +=C2=A0 @param [in]=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Token=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 An optional token identifying the objec= t. If >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 unused this must be CM_N= ULL_TOKEN. >> +=C2=A0 @param [in, out]=C2=A0=C2=A0 CmObject=C2=A0=C2=A0=C2=A0 Pointe= r to the Configuration Manager Object >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 descriptor describing th= e requested Object. >> + >> +=C2=A0 @retval EFI_SUCCESS=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0 Success. >> +=C2=A0 @retval EFI_INVALID_PARAMETER=C2=A0 A parameter is invalid. >> +=C2=A0 @retval EFI_NOT_FOUND=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0 The required object information is not found. >> +**/ >> +EFI_STATUS >> +EFIAPI >> +GetStandardNameSpaceObject ( >> +=C2=A0 IN=C2=A0 CONST EDKII_CONFIGURATION_MANAGER_PROTOCOL=C2=A0 * CO= NST This, >> +=C2=A0 IN=C2=A0 CONST CM_OBJECT_ID=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0 CmObjectId, >> +=C2=A0 IN=C2=A0 CONST CM_OBJECT_TOKEN=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 = Token OPTIONAL, >> +=C2=A0 IN=C2=A0 OUT=C2=A0=C2=A0 CM_OBJ_DESCRIPTOR=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0 * CONST CmObject >> +=C2=A0 ) >> +{ >> +=C2=A0 EFI_STATUS=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 = Status; >> +=C2=A0 EDKII_PLATFORM_REPOSITORY_INFO=C2=A0 * PlatformRepo; >> +=C2=A0 NEOVERSEN1SOC_PLAT_INFO=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0 *PlatInfo; >> +=C2=A0 UINT32=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0 AcpiTableCount; >> + >> +=C2=A0 if ((This =3D=3D NULL) || (CmObject =3D=3D NULL)) { >> +=C2=A0=C2=A0=C2=A0 ASSERT (This !=3D NULL); >> +=C2=A0=C2=A0=C2=A0 ASSERT (CmObject !=3D NULL); >> +=C2=A0=C2=A0=C2=A0 return EFI_INVALID_PARAMETER; >> +=C2=A0 } >> + >> +=C2=A0 Status =3D EFI_NOT_FOUND; >> +=C2=A0 PlatformRepo =3D This->PlatRepoInfo; >> +=C2=A0 PlatInfo =3D (NEOVERSEN1SOC_PLAT_INFO *)NEOVERSEN1SOC_PLAT_INF= O_STRUCT_BASE; >> +=C2=A0 AcpiTableCount =3D ARRAY_SIZE (PlatformRepo->CmAcpiTableList); >> +=C2=A0 if (!PlatInfo->MultichipMode) >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 AcpiTableCount -=3D 1; >> + >> +=C2=A0 switch (GET_CM_OBJECT_ID (CmObjectId)) { >> +=C2=A0=C2=A0=C2=A0 case EStdObjCfgMgrInfo: >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Status =3D HandleCmObject ( >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 CmObjectId, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 &PlatformRepo->CmInfo, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 sizeof (PlatformRepo->CmInfo), >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 1, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 CmObject >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 ); >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 break; >> +=C2=A0=C2=A0=C2=A0 case EStdObjAcpiTableList: >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Status =3D HandleCmObject ( >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 CmObjectId, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 &PlatformRepo->CmAcpiTableList, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 sizeof (PlatformRepo->CmAcpiTableList), >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 AcpiTableCount, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 CmObject >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 ); >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 break; >> +=C2=A0=C2=A0=C2=A0 default: { >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Status =3D EFI_NOT_FOUND; >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 DEBUG (( >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 DEBUG_ERROR, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 "ERROR: Object 0x%x. Statu= s =3D %r\n", >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 CmObjectId, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Status >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 )); >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 break; >> +=C2=A0=C2=A0=C2=A0 } >> +=C2=A0 } >> + >> +=C2=A0 return Status; >> +} >> + >> +/** Return an ARM namespace object. >> + >> +=C2=A0 @param [in]=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 This=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Pointer to the Configuration Manager= Protocol. >> +=C2=A0 @param [in]=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 CmObject= Id=C2=A0 The Configuration Manager Object ID. >> +=C2=A0 @param [in]=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Token=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 An optional token identifying the objec= t. If >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 unused this must be CM_N= ULL_TOKEN. >> +=C2=A0 @param [in, out]=C2=A0=C2=A0 CmObject=C2=A0=C2=A0=C2=A0 Pointe= r to the Configuration Manager Object >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 descriptor describing th= e requested Object. >> + >> +=C2=A0 @retval EFI_SUCCESS=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0 Success. >> +=C2=A0 @retval EFI_INVALID_PARAMETER=C2=A0 A parameter is invalid. >> +=C2=A0 @retval EFI_NOT_FOUND=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0 The required object information is not found. >> +**/ >> +EFI_STATUS >> +EFIAPI >> +GetArmNameSpaceObject ( >> +=C2=A0 IN=C2=A0 CONST EDKII_CONFIGURATION_MANAGER_PROTOCOL=C2=A0 * CO= NST This, >> +=C2=A0 IN=C2=A0 CONST CM_OBJECT_ID=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0 CmObjectId, >> +=C2=A0 IN=C2=A0 CONST CM_OBJECT_TOKEN=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 = Token OPTIONAL, >> +=C2=A0 IN=C2=A0 OUT=C2=A0=C2=A0 CM_OBJ_DESCRIPTOR=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0 * CONST CmObject >> +=C2=A0 ) >> +{ >> +=C2=A0 EFI_STATUS=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0 Status; >> +=C2=A0 EDKII_PLATFORM_REPOSITORY_INFO=C2=A0 * PlatformRepo; >> +=C2=A0 NEOVERSEN1SOC_PLAT_INFO=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0 *PlatInfo; > [SAMI] Align consistently. > [/SAMI] >> +=C2=A0 UINT32=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0 GicRedistCount; >> +=C2=A0 UINT32=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0 GicCpuCount; >> +=C2=A0 UINT32=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0 ProcHierarchyInfoCount; >> +=C2=A0 UINT32=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0 GicItsInfoCount; >> +=C2=A0 UINT32=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0 ItsGroupInfoCount; >> +=C2=A0 UINT32=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0 ItsIdentifierArrayCount; >> +=C2=A0 UINT32=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0 SmmuV3InfoCount; >> +=C2=A0 UINT32=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0 DeviceIdMappingCount; >> +=C2=A0 UINT32=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0 RootComplexInfoCount; >> +=C2=A0 UINT32=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0 PciConfigInfoCount; >> + >> +=C2=A0 if ((This =3D=3D NULL) || (CmObject =3D=3D NULL)) { >> +=C2=A0=C2=A0=C2=A0 ASSERT (This !=3D NULL); >> +=C2=A0=C2=A0=C2=A0 ASSERT (CmObject !=3D NULL); >> +=C2=A0=C2=A0=C2=A0 return EFI_INVALID_PARAMETER; >> +=C2=A0 } >> + >> +=C2=A0 Status =3D EFI_NOT_FOUND; >> +=C2=A0 PlatformRepo =3D This->PlatRepoInfo; >> + >> +=C2=A0 // Probe for multi chip information >> +=C2=A0 PlatInfo =3D (NEOVERSEN1SOC_PLAT_INFO *)NEOVERSEN1SOC_PLAT_INF= O_STRUCT_BASE; >> +=C2=A0 if (PlatInfo->MultichipMode) { >> +=C2=A0=C2=A0=C2=A0 GicRedistCount =3D 2; >> +=C2=A0=C2=A0=C2=A0 GicCpuCount =3D PLAT_CPU_COUNT * 2; >> +=C2=A0=C2=A0=C2=A0 ProcHierarchyInfoCount =3D PLAT_PROC_HIERARCHY_NOD= E_COUNT * 2; >> +=C2=A0=C2=A0=C2=A0 GicItsInfoCount =3D ITS_MAX; >> +=C2=A0=C2=A0=C2=A0 ItsGroupInfoCount =3D ITS_MAX; >> +=C2=A0=C2=A0=C2=A0 ItsIdentifierArrayCount =3D ITS_MAX; >> +=C2=A0=C2=A0=C2=A0 SmmuV3InfoCount =3D SMMUV3INFO_MAX; >> +=C2=A0=C2=A0=C2=A0 DeviceIdMappingCount =3D DEVICEIDMAPPING_MAX; >> +=C2=A0=C2=A0=C2=A0 RootComplexInfoCount =3D ROOT_PCIE_MAX; >> +=C2=A0=C2=A0=C2=A0 PciConfigInfoCount =3D ROOT_PCIE_MAX; >> +=C2=A0 } else { >> +=C2=A0=C2=A0=C2=A0 GicRedistCount =3D 1; >> +=C2=A0=C2=A0=C2=A0 GicCpuCount =3D PLAT_CPU_COUNT; >> +=C2=A0=C2=A0=C2=A0 ProcHierarchyInfoCount =3D PLAT_PROC_HIERARCHY_NOD= E_COUNT; >> +=C2=A0=C2=A0=C2=A0 GicItsInfoCount =3D ITS_MASTER_CHIP_MAX; >> +=C2=A0=C2=A0=C2=A0 ItsGroupInfoCount =3D ITS_MASTER_CHIP_MAX; >> +=C2=A0=C2=A0=C2=A0 ItsIdentifierArrayCount =3D ITS_MASTER_CHIP_MAX; >> +=C2=A0=C2=A0=C2=A0 SmmuV3InfoCount =3D SMMUV3INFO_MASTER_CHIP_MAX; >> +=C2=A0=C2=A0=C2=A0 DeviceIdMappingCount =3D DEVICEIDMAPPING_MASTER_CH= IP_MAX; >> +=C2=A0=C2=A0=C2=A0 RootComplexInfoCount =3D ROOT_PCIE_MASTER_CHIP_MAX= ; >> +=C2=A0=C2=A0=C2=A0 PciConfigInfoCount =3D ROOT_PCIE_MASTER_CHIP_MAX; >> +=C2=A0 } >> + >> +=C2=A0 switch (GET_CM_OBJECT_ID (CmObjectId)) { >> +=C2=A0=C2=A0=C2=A0 case EArmObjBootArchInfo: >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Status =3D HandleCmObject ( >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 CmObjectId, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 &PlatformRepo->BootArchInfo, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 sizeof (PlatformRepo->BootArchInfo), >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 1, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 CmObject >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 ); >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 break; >> + >> +=C2=A0=C2=A0=C2=A0 case EArmObjFixedFeatureFlags: >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Status =3D HandleCmObject ( >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 CmObjectId, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 &PlatformRepo->FixedFeatureFlags, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 sizeof (PlatformRepo->FixedFeatureFlags), >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 1, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 CmObject >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 ); >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 break; >> + >> +=C2=A0=C2=A0=C2=A0 case EArmObjPowerManagementProfileInfo: >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Status =3D HandleCmObject ( >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 CmObjectId, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 &PlatformRepo->PmProfileInfo, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 sizeof (PlatformRepo->PmProfileInfo), >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 1, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 CmObject >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 ); >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 break; >> + >> +=C2=A0=C2=A0=C2=A0 case EArmObjGenericTimerInfo: >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Status =3D HandleCmObject ( >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 CmObjectId, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 &PlatformRepo->GenericTimerInfo, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 sizeof (PlatformRepo->GenericTimerInfo), >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 1, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 CmObject >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 ); >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 break; >> + >> +=C2=A0=C2=A0=C2=A0 case EArmObjPlatformGenericWatchdogInfo: >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Status =3D HandleCmObject ( >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 CmObjectId, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 &PlatformRepo->Watchdog, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 sizeof (PlatformRepo->Watchdog), >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 1, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 CmObject >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 ); >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 break; >> + >> +=C2=A0=C2=A0=C2=A0 case EArmObjPlatformGTBlockInfo: >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Status =3D HandleCmObject ( >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 CmObjectId, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 PlatformRepo->GTBlockInfo, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 sizeof (PlatformRepo->GTBlockInfo), >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 ARRAY_SIZE (PlatformRepo->GTBlockInfo), >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 CmObject >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 ); >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 break; >> + >> +=C2=A0=C2=A0=C2=A0 case EArmObjGTBlockTimerFrameInfo: >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Status =3D HandleCmObjectRefByToken ( >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 This, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 CmObjectId, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 PlatformRepo->GTBlock0TimerInfo, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 sizeof (PlatformRepo->GTBlock0TimerInfo), >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 ARRAY_SIZE (PlatformRepo->GTBlock0TimerInfo), >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 Token, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 GetGTBlockTimerFrameInfo, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 CmObject >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 ); >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 break; >> + >> +=C2=A0=C2=A0=C2=A0 case EArmObjGicCInfo: >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Status =3D HandleCmObjectRefByToken ( >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 This, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 CmObjectId, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 PlatformRepo->GicCInfo, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 sizeof (PlatformRepo->GicCInfo), >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 GicCpuCount, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 Token, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 GetGicCInfo, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 CmObject >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 ); >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 break; >> + >> +=C2=A0=C2=A0=C2=A0 case EArmObjGicDInfo: >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Status =3D HandleCmObject ( >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 CmObjectId, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 &PlatformRepo->GicDInfo, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 sizeof (PlatformRepo->GicDInfo), >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 1, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 CmObject >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 ); >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 break; >> + >> +=C2=A0=C2=A0=C2=A0 case EArmObjGicRedistributorInfo: >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Status =3D HandleCmObject ( >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 CmObjectId, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 PlatformRepo->GicRedistInfo, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 sizeof (PlatformRepo->GicRedistInfo), >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 GicRedistCount, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 CmObject >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 ); >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 break; >> + >> +=C2=A0=C2=A0=C2=A0 case EArmObjSerialConsolePortInfo: >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Status =3D HandleCmObject ( >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 CmObjectId, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 &PlatformRepo->SpcrSerialPort, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 sizeof (PlatformRepo->SpcrSerialPort), >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 1, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 CmObject >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 ); >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 break; >> + >> +=C2=A0=C2=A0=C2=A0 case=C2=A0 EArmObjSerialDebugPortInfo: >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Status =3D HandleCmObject ( >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 CmObjectId, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 &PlatformRepo->DbgSerialPort, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 sizeof (PlatformRepo->DbgSerialPort), >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 1, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 CmObject >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 ); >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 break; >> + >> +=C2=A0=C2=A0=C2=A0 case EArmObjGicItsInfo: >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Status =3D HandleCmObject ( >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 CmObjectId, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 PlatformRepo->GicItsInfo, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 sizeof (PlatformRepo->GicItsInfo), >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 GicItsInfoCount, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 CmObject >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 ); >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 break; >> + >> +=C2=A0=C2=A0=C2=A0 case EArmObjSmmuV3: >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Status =3D HandleCmObject ( >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 CmObjectId, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 PlatformRepo->SmmuV3Info, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 sizeof (PlatformRepo->SmmuV3Info), >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 SmmuV3InfoCount, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 CmObject >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 ); >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 break; >> + >> +=C2=A0=C2=A0=C2=A0 case EArmObjItsGroup: >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Status =3D HandleCmObjectRefByToken ( >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 This, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 CmObjectId, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 PlatformRepo->ItsGroupInfo, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 sizeof (PlatformRepo->ItsGroupInfo), >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 ItsGroupInfoCount, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 Token, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 GetItsGroupInfo, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 CmObject >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 ); >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 break; >> + >> +=C2=A0=C2=A0=C2=A0 case EArmObjGicItsIdentifierArray: >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Status =3D HandleCmObjectRefByToken ( >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 This, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 CmObjectId, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 PlatformRepo->ItsIdentifierArray, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 sizeof (PlatformRepo->ItsIdentifierArray), >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 ItsIdentifierArrayCount, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 Token, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 GetItsIdentifierArray, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 CmObject >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 ); >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 break; >> + >> +=C2=A0=C2=A0=C2=A0 case EArmObjRootComplex: >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Status =3D HandleCmObject ( >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 CmObjectId, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 PlatformRepo->RootComplexInfo, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 sizeof (PlatformRepo->RootComplexInfo), >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 RootComplexInfoCount, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 CmObject >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 ); >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 break; >> + >> +=C2=A0=C2=A0=C2=A0 case EArmObjIdMappingArray: >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Status =3D HandleCmObjectRefByToken ( >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 This, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 CmObjectId, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 PlatformRepo->DeviceIdMapping, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 sizeof (PlatformRepo->DeviceIdMapping), >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 DeviceIdMappingCount, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 Token, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 GetDeviceIdMappingArray, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 CmObject >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 ); >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 break; >> + >> +=C2=A0=C2=A0=C2=A0 case EArmObjProcHierarchyInfo: >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Status =3D HandleCmObject ( >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 CmObjectId, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 PlatformRepo->ProcHierarchyInfo, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 sizeof (PlatformRepo->ProcHierarchyInfo), >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 ProcHierarchyInfoCount, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 CmObject >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 ); >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 break; >> + >> +=C2=A0=C2=A0=C2=A0 case EArmObjCacheInfo: >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Status =3D HandleCmObject ( >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 CmObjectId, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 PlatformRepo->CacheInfo, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 sizeof (PlatformRepo->CacheInfo), >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 ARRAY_SIZE (PlatformRepo->CacheInfo), >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 CmObject >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 ); >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 break; >> + >> +=C2=A0=C2=A0=C2=A0 case EArmObjCmRef: >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Status =3D HandleCmObjectSearchPlatfor= mRepo ( >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 This, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 CmObjectId, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 Token, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 GetCmObjRefs, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 CmObject >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 ); >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 break; >> + >> +=C2=A0=C2=A0=C2=A0 case EArmObjPciConfigSpaceInfo: >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Status =3D HandleCmObject ( >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 CmObjectId, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 PlatformRepo->PciConfigInfo, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 sizeof (PlatformRepo->PciConfigInfo), >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 PciConfigInfoCount, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 CmObject >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 ); >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 break; >> + >> +=C2=A0=C2=A0=C2=A0 case EArmObjMemoryAffinityInfo: >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Status =3D HandleCmObject ( >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 CmObjectId, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 PlatformRepo->MemAffInfo, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 sizeof (PlatformRepo->MemAffInfo), >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 ARRAY_SIZE (PlatformRepo->MemAffInfo), >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 CmObject >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 ); >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 break; >> + >> +=C2=A0=C2=A0=C2=A0 default: { >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Status =3D EFI_NOT_FOUND; >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 DEBUG (( >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 DEBUG_INFO, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 "INFO: Object 0x%x. Status= =3D %r\n", >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 CmObjectId, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Status >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 )); >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 break; >> +=C2=A0=C2=A0=C2=A0 } >> +=C2=A0 }//switch >> + >> +=C2=A0 return Status; >> +} >> + >> +/** Return an OEM namespace object. >> + >> +=C2=A0 @param [in]=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 This=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Pointer to the Configuration Manager= Protocol. >> +=C2=A0 @param [in]=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 CmObject= Id=C2=A0 The Configuration Manager Object ID. >> +=C2=A0 @param [in]=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Token=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 An optional token identifying the objec= t. If >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 unused this must be CM_N= ULL_TOKEN. >> +=C2=A0 @param [in, out]=C2=A0=C2=A0 CmObject=C2=A0=C2=A0=C2=A0 Pointe= r to the Configuration Manager Object >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 descriptor describing th= e requested Object. >> + >> +=C2=A0 @retval EFI_SUCCESS=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0 Success. >> +=C2=A0 @retval EFI_INVALID_PARAMETER=C2=A0 A parameter is invalid. >> +=C2=A0 @retval EFI_NOT_FOUND=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0 The required object information is not found. >> +**/ >> +EFI_STATUS >> +EFIAPI >> +GetOemNameSpaceObject ( >> +=C2=A0 IN=C2=A0 CONST EDKII_CONFIGURATION_MANAGER_PROTOCOL=C2=A0 * CO= NST This, >> +=C2=A0 IN=C2=A0 CONST CM_OBJECT_ID=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0 CmObjectId, >> +=C2=A0 IN=C2=A0 CONST CM_OBJECT_TOKEN=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 = Token OPTIONAL, >> +=C2=A0 IN=C2=A0 OUT=C2=A0=C2=A0 CM_OBJ_DESCRIPTOR=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0 * CONST CmObject >> +=C2=A0 ) >> +{ >> +=C2=A0 EFI_STATUS=C2=A0 Status; >> + >> +=C2=A0 Status =3D EFI_SUCCESS; >> +=C2=A0 if ((This =3D=3D NULL) || (CmObject =3D=3D NULL)) { >> +=C2=A0=C2=A0=C2=A0 ASSERT (This !=3D NULL); >> +=C2=A0=C2=A0=C2=A0 ASSERT (CmObject !=3D NULL); >> +=C2=A0=C2=A0=C2=A0 return EFI_INVALID_PARAMETER; >> +=C2=A0 } >> + >> +=C2=A0 switch (GET_CM_OBJECT_ID (CmObjectId)) { >> +=C2=A0=C2=A0=C2=A0 default: { >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Status =3D EFI_NOT_FOUND; >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 DEBUG (( >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 DEBUG_ERROR, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 "ERROR: Object 0x%x. Statu= s =3D %r\n", >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 CmObjectId, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Status >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 )); >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 break; >> +=C2=A0=C2=A0=C2=A0 } >> +=C2=A0 } >> + >> +=C2=A0 return Status; >> +} >> + >> +/** The GetObject function defines the interface implemented by the >> +=C2=A0=C2=A0=C2=A0 Configuration Manager Protocol for returning the C= onfiguration >> +=C2=A0=C2=A0=C2=A0 Manager Objects. >> + >> +=C2=A0 @param [in]=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 This=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Pointer to the Configuration Manager= Protocol. >> +=C2=A0 @param [in]=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 CmObject= Id=C2=A0 The Configuration Manager Object ID. >> +=C2=A0 @param [in]=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Token=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 An optional token identifying the objec= t. If >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 unused this must be CM_N= ULL_TOKEN. >> +=C2=A0 @param [in, out]=C2=A0=C2=A0 CmObject=C2=A0=C2=A0=C2=A0 Pointe= r to the Configuration Manager Object >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 descriptor describing th= e requested Object. >> + >> +=C2=A0 @retval EFI_SUCCESS=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0 Success. >> +=C2=A0 @retval EFI_INVALID_PARAMETER=C2=A0 A parameter is invalid. >> +=C2=A0 @retval EFI_NOT_FOUND=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0 The required object information is not found. >> +**/ >> +EFI_STATUS >> +EFIAPI >> +N1sdpPlatformGetObject ( >> +=C2=A0 IN=C2=A0 CONST EDKII_CONFIGURATION_MANAGER_PROTOCOL=C2=A0 * CO= NST This, >> +=C2=A0 IN=C2=A0 CONST CM_OBJECT_ID=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0 CmObjectId, >> +=C2=A0 IN=C2=A0 CONST CM_OBJECT_TOKEN=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 = Token OPTIONAL, >> +=C2=A0 IN=C2=A0 OUT=C2=A0=C2=A0 CM_OBJ_DESCRIPTOR=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0 * CONST CmObject >> +=C2=A0 ) >> +{ >> +=C2=A0 EFI_STATUS=C2=A0 Status; >> + >> +=C2=A0 if ((This =3D=3D NULL) || (CmObject =3D=3D NULL)) { >> +=C2=A0=C2=A0=C2=A0 ASSERT (This !=3D NULL); >> +=C2=A0=C2=A0=C2=A0 ASSERT (CmObject !=3D NULL); >> +=C2=A0=C2=A0=C2=A0 return EFI_INVALID_PARAMETER; >> +=C2=A0 } >> + >> +=C2=A0 switch (GET_CM_NAMESPACE_ID (CmObjectId)) { >> +=C2=A0=C2=A0=C2=A0 case EObjNameSpaceStandard: >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Status =3D GetStandardNameSpaceObject = (This, CmObjectId, Token, CmObject); >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 break; >> +=C2=A0=C2=A0=C2=A0 case EObjNameSpaceArm: >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Status =3D GetArmNameSpaceObject (This= , CmObjectId, Token, CmObject); >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 break; >> +=C2=A0=C2=A0=C2=A0 case EObjNameSpaceOem: >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Status =3D GetOemNameSpaceObject (This= , CmObjectId, Token, CmObject); >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 break; >> +=C2=A0=C2=A0=C2=A0 default: { >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Status =3D EFI_INVALID_PARAMETER; >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 DEBUG (( >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 DEBUG_ERROR, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 "ERROR: Unknown Namespace = Object =3D 0x%x. Status =3D %r\n", >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 CmObjectId, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Status >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 )); >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 break; >> +=C2=A0=C2=A0=C2=A0 } >> +=C2=A0 } >> + >> +=C2=A0 return Status; >> +} >> + >> +/** The SetObject function defines the interface implemented by the >> +=C2=A0=C2=A0=C2=A0 Configuration Manager Protocol for updating the Co= nfiguration >> +=C2=A0=C2=A0=C2=A0 Manager Objects. >> + >> +=C2=A0 @param [in]=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 This=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Pointer to the Configuration Manager= Protocol. >> +=C2=A0 @param [in]=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 CmObject= Id=C2=A0 The Configuration Manager Object ID. >> +=C2=A0 @param [in]=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Token=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 An optional token identifying the objec= t. If >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 unused this must be CM_N= ULL_TOKEN. >> +=C2=A0 @param [in]=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 CmObject= =C2=A0=C2=A0=C2=A0 Pointer to the Configuration Manager Object >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 descriptor describing th= e Object. >> + >> +=C2=A0 @retval EFI_UNSUPPORTED=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0 This operation is not supported. >> +**/ >> +EFI_STATUS >> +EFIAPI >> +N1sdpPlatformSetObject ( >> +=C2=A0 IN=C2=A0 CONST EDKII_CONFIGURATION_MANAGER_PROTOCOL=C2=A0 * CO= NST This, >> +=C2=A0 IN=C2=A0 CONST CM_OBJECT_ID=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0 CmObjectId, >> +=C2=A0 IN=C2=A0 CONST CM_OBJECT_TOKEN=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 = Token OPTIONAL, >> +=C2=A0 IN=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 CM_OBJ_DESCRIPTOR= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 * CONST CmObject >> +=C2=A0 ) >> +{ >> +=C2=A0 return EFI_UNSUPPORTED; >> +} >> + >> +/** A structure describing the configuration manager protocol interfa= ce. >> +*/ >> +STATIC >> +CONST >> +EDKII_CONFIGURATION_MANAGER_PROTOCOL N1sdpPlatformConfigManagerProtoc= ol =3D { >> +=C2=A0 CREATE_REVISION(1,0), >> +=C2=A0 N1sdpPlatformGetObject, >> +=C2=A0 N1sdpPlatformSetObject, >> +=C2=A0 &N1sdpRepositoryInfo >> +}; >> + >> +/** >> +=C2=A0 Entrypoint of Configuration Manager Dxe. >> + >> +=C2=A0 @param=C2=A0 ImageHandle >> +=C2=A0 @param=C2=A0 SystemTable >> + >> +=C2=A0 @return EFI_SUCCESS >> +=C2=A0 @return EFI_LOAD_ERROR >> +=C2=A0 @return EFI_OUT_OF_RESOURCES >> +**/ >> +EFI_STATUS >> +EFIAPI >> +ConfigurationManagerDxeInitialize ( >> +=C2=A0 IN EFI_HANDLE=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0 ImageHandle, >> +=C2=A0 IN EFI_SYSTEM_TABLE=C2=A0 * SystemTable >> +=C2=A0 ) >> +{ >> +=C2=A0 EFI_STATUS=C2=A0 Status; >> +=C2=A0 NEOVERSEN1SOC_PLAT_INFO=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 *P= latInfo; >> +=C2=A0 UINT64=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0 Dram2Size; >> +=C2=A0 UINT64=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0 RemoteDdrSize; >> + >> +=C2=A0 RemoteDdrSize =3D 0; >> + >> +=C2=A0 PlatInfo =3D (NEOVERSEN1SOC_PLAT_INFO *)NEOVERSEN1SOC_PLAT_INF= O_STRUCT_BASE; >> +=C2=A0 Dram2Size =3D ((PlatInfo->LocalDdrSize - 2) * 1024UL * 1024UL = * 1024UL); > [SAMI] Can SIZE_1GB be used here instead of 1024UL *...? > [/SAMI] >> + >> +=C2=A0 N1sdpPlatformConfigManagerProtocol.PlatRepoInfo->MemAffInfo[LO= CAL_DDR_REGION2]. \ >> +=C2=A0=C2=A0=C2=A0 Length =3D Dram2Size; >> + >> +=C2=A0 if (PlatInfo->MultichipMode =3D=3D 1) { >> +=C2=A0=C2=A0=C2=A0 RemoteDdrSize =3D ((PlatInfo->RemoteDdrSize -2) * = 1024UL * 1024UL * 1024UL); >> + >> +=C2=A0=C2=A0=C2=A0 // Update Remote DDR Region1 >> +=C2=A0=C2=A0=C2=A0 N1sdpPlatformConfigManagerProtocol.PlatRepoInfo->M= emAffInfo[REMOTE_DDR_REGION1]. \ >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 ProximityDomain =3D 1; >> +=C2=A0=C2=A0=C2=A0 N1sdpPlatformConfigManagerProtocol.PlatRepoInfo->M= emAffInfo[REMOTE_DDR_REGION1]. \ >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 BaseAddress =3D FixedPcdGet64 (PcdExtM= emorySpace) + FixedPcdGet64 (PcdSystemMemoryBase); >> +=C2=A0=C2=A0=C2=A0 N1sdpPlatformConfigManagerProtocol.PlatRepoInfo->M= emAffInfo[REMOTE_DDR_REGION1]. \ >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Length =3D FixedPcdGet64 (PcdSystemMem= orySize); >> +=C2=A0=C2=A0=C2=A0 N1sdpPlatformConfigManagerProtocol.PlatRepoInfo->M= emAffInfo[REMOTE_DDR_REGION1]. \ >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Flags =3D EFI_ACPI_6_3_MEMORY_ENABLED; >> + >> +=C2=A0=C2=A0=C2=A0 // Update Remote DDR Region2 >> +=C2=A0=C2=A0=C2=A0 N1sdpPlatformConfigManagerProtocol.PlatRepoInfo->M= emAffInfo[REMOTE_DDR_REGION2]. \ >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 ProximityDomain =3D 1; >> +=C2=A0=C2=A0=C2=A0 N1sdpPlatformConfigManagerProtocol.PlatRepoInfo->M= emAffInfo[REMOTE_DDR_REGION2]. \ >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 BaseAddress =3D FixedPcdGet64 (PcdExtM= emorySpace) + FixedPcdGet64 (PcdDramBlock2Base); >> +=C2=A0=C2=A0=C2=A0 N1sdpPlatformConfigManagerProtocol.PlatRepoInfo->M= emAffInfo[REMOTE_DDR_REGION2]. \ >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Length =3D RemoteDdrSize; >> +=C2=A0=C2=A0=C2=A0 N1sdpPlatformConfigManagerProtocol.PlatRepoInfo->M= emAffInfo[REMOTE_DDR_REGION2]. \ >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Flags =3D EFI_ACPI_6_3_MEMORY_ENABLED; >> +=C2=A0 } >> + > [SAMI] The code clock above is initialising the platform info repositor= y. Can this be moved to InitializePlatformRepositor() ? > [/SAMI] >> +=C2=A0 // Initialize the Platform Configuration Repository before ins= talling the >> +=C2=A0 // Configuration Manager Protocol >> +=C2=A0 Status =3D InitializePlatformRepository ( >> +=C2=A0=C2=A0=C2=A0 N1sdpPlatformConfigManagerProtocol.PlatRepoInfo >> +=C2=A0=C2=A0=C2=A0 ); >> +=C2=A0 if (EFI_ERROR (Status)) { >> +=C2=A0=C2=A0=C2=A0 DEBUG (( >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 DEBUG_ERROR, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 "ERROR: Failed to initialize the Platf= orm Configuration Repository." \ >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 " Status =3D %r\n", >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Status >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 )); >> +=C2=A0 } >> + >> +=C2=A0 Status =3D gBS->InstallProtocolInterface ( >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 &ImageHandle, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 &gEdkiiConfigurationManagerProtocolGuid= , >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 EFI_NATIVE_INTERFACE, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 (VOID*)&N1sdpPlatformConfigManagerProto= col >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 ); >> +=C2=A0 if (EFI_ERROR (Status)) { >> +=C2=A0=C2=A0=C2=A0 DEBUG (( >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 DEBUG_ERROR, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 "ERROR: Failed to get Install Configur= ation Manager Protocol." \ >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 " Status =3D %r\n", >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Status >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 )); >> +=C2=A0=C2=A0=C2=A0 goto error_handler; >> +=C2=A0 } >> + >> +error_handler: >> +=C2=A0 return Status; >> +} >> diff --git a/Platform/ARM/N1Sdp/ConfigurationManager/ConfigurationMana= gerDxe/Hmat.c b/Platform/ARM/N1Sdp/ConfigurationManager/ConfigurationMana= gerDxe/Hmat.c >> new file mode 100644 >> index 000000000000..52fc3108a2c5 >> --- /dev/null >> +++ b/Platform/ARM/N1Sdp/ConfigurationManager/ConfigurationManagerDxe/= Hmat.c >> @@ -0,0 +1,103 @@ >> +/** @file >> +=C2=A0 Heterogeneous Memory Attribute Table (HMAT) >> + >> +=C2=A0 Copyright (c) 2021, ARM Limited. All rights reserved.
>> + >> +=C2=A0 SPDX-License-Identifier: BSD-2-Clause-Patent >> +**/ >> + >> +#include >> +#include >> +#include >> +#include "N1SdpAcpiHeader.h" >> + >> +// >> +// Heterogeneous Memory Attribute Table >> +// >> +#pragma pack (1) >> + >> +typedef struct { >> +=C2=A0 EFI_ACPI_6_3_HMAT_STRUCTURE_SYSTEM_LOCALITY_LATENCY_AND_BANDWI= DTH_INFO LatencyStruct; >> +=C2=A0 UINT32 InitiatorProximityDomainList[1]; >> +=C2=A0 UINT32 TargetProximityDomainList[2]; >> +=C2=A0 UINT16 LatencyEntry[1][2]; >> +} EFI_ACPI_6_3_HMAT_SYSTEM_LOCALITY_LATENCY_STRUCTURE; >> + >> +typedef struct { >> +=C2=A0 EFI_ACPI_6_3_HETEROGENEOUS_MEMORY_ATTRIBUTE_TABLE_HEADER=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Header; >> +=C2=A0 EFI_ACPI_6_3_HMAT_STRUCTURE_MEMORY_PROXIMITY_DOMAIN_ATTRIBUTES= Memory[2]; >> +=C2=A0 EFI_ACPI_6_3_HMAT_SYSTEM_LOCALITY_LATENCY_STRUCTURE=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 LatencyInfo; >> +} EFI_ACPI_HETEROGENEOUS_MEMORY_ATTRIBUTE_TABLE; >> + >> +#pragma pack () >> + >> +EFI_ACPI_HETEROGENEOUS_MEMORY_ATTRIBUTE_TABLE Hmat =3D { >> +=C2=A0 // Header >> +=C2=A0 { >> +=C2=A0=C2=A0=C2=A0 ARM_ACPI_HEADER ( >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 EFI_ACPI_6_3_HETEROGENEOUS_MEMORY_ATTR= IBUTE_TABLE_SIGNATURE, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 EFI_ACPI_HETEROGENEOUS_MEMORY_ATTRIBUT= E_TABLE, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 EFI_ACPI_6_3_HETEROGENEOUS_MEMORY_ATTR= IBUTE_TABLE_REVISION >> +=C2=A0=C2=A0=C2=A0 ), >> +=C2=A0=C2=A0=C2=A0 {0x00, 0x00, 0x00, 0x00}, >> +=C2=A0 }, >> + >> +=C2=A0 // Memory Attribute Structure >> +=C2=A0 { >> +=C2=A0=C2=A0=C2=A0 { >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 EFI_ACPI_6_3_HMAT_TYPE_MEMORY_PROXIMIT= Y_DOMAIN_ATTRIBUTES, // Type >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 {0x00, 0x00}, // Reserved >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 40, // Length >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 {.InitiatorProximityDomainValid =3D 1}= , // Flags >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 {0x00, 0x00}, // Reserved1 >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 0, // InitiatorProximityDomain >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 0, // MemoryProximityDomain >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 { 0x00, 0x00, 0x00, 0x00, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 0x00, 0x00, 0x00, 0x00, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 0x00, 0x00, 0x00, 0x00, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 0x00, 0x00, 0x00, 0x00, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 0x00, 0x00, 0x00, 0x00, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 }, // Reserved2 >> +=C2=A0=C2=A0=C2=A0 }, >> +=C2=A0=C2=A0=C2=A0 { >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 EFI_ACPI_6_3_HMAT_TYPE_MEMORY_PROXIMIT= Y_DOMAIN_ATTRIBUTES, // Type >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 {0x00, 0x00}, // Reserved >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 40, // Length >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 {.InitiatorProximityDomainValid =3D 1}= , // Flags >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 {0x00, 0x00}, // Reserved1 >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 0, // InitiatorProximityDomain >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 1, // MemoryProximityDomain >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 { 0x00, 0x00, 0x00, 0x00, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 0x00, 0x00, 0x00, 0x00, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 0x00, 0x00, 0x00, 0x00, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 0x00, 0x00, 0x00, 0x00, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 0x00, 0x00, 0x00, 0x00, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 }, // Reserved2 >> +=C2=A0=C2=A0=C2=A0 }, >> +=C2=A0 }, >> + >> +=C2=A0 // System Locality Latency Structure (LatencyInfo) >> +=C2=A0 { >> +=C2=A0=C2=A0=C2=A0 // LatencyStruct >> +=C2=A0=C2=A0=C2=A0 { >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 EFI_ACPI_6_3_HMAT_TYPE_SYSTEM_LOCALITY= _LATENCY_AND_BANDWIDTH_INFO, // Type >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 {0x00, 0x00}, // Reserved >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 sizeof (EFI_ACPI_6_3_HMAT_SYSTEM_LOCAL= ITY_LATENCY_STRUCTURE), // Length >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 {.MemoryHierarchy =3D 0}, // Flags >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 0, // DataType - Access latency >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 {0x00, 0x00}, // Reserved1 >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 1, // NumberOfInitiatorProximityDomain= s >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 2, // NumberOfTargetProximityDomains >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 {0x00, 0x00, 0x00, 0x00}, // Reserved2 >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 1000, // EntryBaseUnit - 1000ps =3D 1n= s >> +=C2=A0=C2=A0=C2=A0 }, >> +=C2=A0=C2=A0=C2=A0 // InitiatorProximityDomainList >> +=C2=A0=C2=A0=C2=A0 { 0 }, >> +=C2=A0=C2=A0=C2=A0 // TargetProximityDomainList >> +=C2=A0=C2=A0=C2=A0 { 0, 1 }, >> +=C2=A0=C2=A0=C2=A0 // LatencyEntry >> +=C2=A0=C2=A0=C2=A0 { >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 {119, 200}, >> +=C2=A0=C2=A0=C2=A0 }, >> +=C2=A0 }, >> +}; >> diff --git a/Platform/ARM/N1Sdp/Drivers/PlatformDxe/PlatformDxe.c b/Pl= atform/ARM/N1Sdp/Drivers/PlatformDxe/PlatformDxe.c >> index e0b89556d40d..a5ebeb71efa8 100644 >> --- a/Platform/ARM/N1Sdp/Drivers/PlatformDxe/PlatformDxe.c >> +++ b/Platform/ARM/N1Sdp/Drivers/PlatformDxe/PlatformDxe.c >> @@ -6,6 +6,7 @@ >> =C2=A0 =C2=A0 **/ >> =C2=A0 +#include > [SAMI] Is this needed here in this file? > [SAMI] >> =C2=A0 #include >> =C2=A0 #include >> =C2=A0 #include >> diff --git a/Platform/ARM/N1Sdp/ConfigurationManager/ConfigurationMana= gerDxe/AslTables/Dsdt.asl b/Platform/ARM/N1Sdp/ConfigurationManager/Confi= gurationManagerDxe/AslTables/Dsdt.asl >> new file mode 100644 >> index 000000000000..0d7dde1a73ae >> --- /dev/null >> +++ b/Platform/ARM/N1Sdp/ConfigurationManager/ConfigurationManagerDxe/= AslTables/Dsdt.asl >> @@ -0,0 +1,477 @@ >> +/** @file >> +=C2=A0 Differentiated System Description Table Fields (DSDT) >> + >> +=C2=A0 Copyright (c) 2021, ARM Limited. All rights reserved.
>> + >> +=C2=A0 SPDX-License-Identifier: BSD-2-Clause-Patent >> +**/ >> + >> +#include "N1SdpAcpiHeader.h" >> +#include "NeoverseN1Soc.h" >> + >> +#define ACPI_GRAPH_REV=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 0 >> +#define ACPI_GRAPH_UUID=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 "ab02a46b= -74c7-45a2-bd68-f7d344ef2153" >> + >> +#define CORESIGHT_GRAPH_UUID=C2=A0 "3ecbc8b6-1d0e-4fb3-8107-e627f805c= 6cd" >> + >> +#define CS_LINK_MASTER=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 1 >> +#define CS_LINK_SLAVE=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= 0 >> + >> +#define DSD_CS_GRAPH_BEGIN(_nports)=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= \ >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Package () {=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 \ >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 1,=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0 \ >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 ToUUID(CORESIG= HT_GRAPH_UUID),=C2=A0=C2=A0 \ >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 _nports, >> + >> +#define DSD_CS_GRAPH_END=C2=A0 \ >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 } >> + >> +#define DSD_GRAPH_BEGIN(_nports)=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 \ >> +=C2=A0=C2=A0=C2=A0=C2=A0 ToUUID(ACPI_GRAPH_UUID),=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 \ >> +=C2=A0=C2=A0=C2=A0=C2=A0 Package() {=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0 \ >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 ACPI_GRAPH_REV,=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 = \ >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 1,=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 \ >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 DSD_CS_GRAPH_BEGIN(_nports) >> + >> +#define DSD_GRAPH_END=C2=A0=C2=A0=C2=A0=C2=A0 \ >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 DSD_CS_GRAPH_END=C2=A0=C2=A0 \ >> +=C2=A0=C2=A0=C2=A0=C2=A0 } >> + >> +#define DSD_PORTS_BEGIN(_nports)=C2=A0=C2=A0=C2=A0 \ >> +=C2=A0=C2=A0 Name (_DSD,=C2=A0 Package () {=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0 \ >> +=C2=A0=C2=A0=C2=A0=C2=A0 DSD_GRAPH_BEGIN(_nports) >> + >> +#define DSD_PORTS_END=C2=A0=C2=A0=C2=A0=C2=A0 \ >> +=C2=A0=C2=A0 DSD_GRAPH_END=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0 \ >> +=C2=A0 }) >> + >> +#define CS_PORT(_port, _rport, _rphandle, _dir)=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0 \ >> +=C2=A0=C2=A0=C2=A0 Package () { _port, _rport, _rphandle, _dir} >> + >> +#define CS_INPUT_PORT(_port, _rport, _rphandle)=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0 \ >> +=C2=A0=C2=A0=C2=A0 CS_PORT(_port, _rport, _rphandle, CS_LINK_SLAVE) >> + >> +#define CS_OUTPUT_PORT(_port, _rport, _rphandle)=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0 \ >> +=C2=A0=C2=A0=C2=A0 CS_PORT(_port, _rport, _rphandle, CS_LINK_MASTER) >> + >> +DefinitionBlock("Dsdt.aml", "DSDT", 1, "ARMLTD", "N1Sdp", EFI_ACPI_AR= M_OEM_REVISION) { >> +=C2=A0 Scope(_SB) { >> +=C2=A0=C2=A0=C2=A0 Device(CP00) { // Ares-0: Cluster 0, Cpu 0 >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Name(_HID, "ACPI0007") >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Name(_UID, 0) >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Name(_STA, 0xF) >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Device(ETM0) { // ETM on Cluster0 CPU0 >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Name (_HID, "ARMHC500") >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Name (_CID, "ARMHC500") >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Name (_CRS, ResourceTempla= te() { >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 QWordMemory ( >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Re= sourceProducer, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Po= sDecode, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Mi= nFixed, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Ma= xFixed, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Ca= cheable, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Re= adWrite, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 0x= 00000000,=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // Granul= arity >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Fi= xedPcdGet64 (PcdCsEtm0Base),=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // Min Base Address >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Fi= xedPcdGet64 (PcdCsEtm0MaxBase),=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // Max Base Address >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 0,= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // Translate >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Fi= xedPcdGet32 (PcdCsComponentSize)=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0 // Length >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 ) >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 }) >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 DSD_PORTS_BEGIN(1) >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 CS_OUTPUT_PORT(0, 0, \_SB_= .SFN0) >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 DSD_PORTS_END >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 } // ETM0 >> +=C2=A0=C2=A0=C2=A0 } >> + >> +=C2=A0=C2=A0=C2=A0 Device(CP01) { // Ares-1: Cluster 0, Cpu 1 >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Name(_HID, "ACPI0007") >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Name(_UID, 1) >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Name(_STA, 0xF) >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Device(ETM1) { // ETM on Cluster0 CPU1 >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Name (_HID, "ARMHC500") >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Name (_CID, "ARMHC500") >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Name (_CRS, ResourceTempla= te() { >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 QWordMemory ( >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Re= sourceProducer, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Po= sDecode, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Mi= nFixed, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Ma= xFixed, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Ca= cheable, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Re= adWrite, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 0x= 00000000,=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // Granularity >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Fi= xedPcdGet64 (PcdCsEtm1Base),=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0 // Min Base Address >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Fi= xedPcdGet64 (PcdCsEtm1MaxBase),=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0 // Max Base Address >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 0,= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0 // Translate >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Fi= xedPcdGet32 (PcdCsComponentSize)=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= // Length >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 ) >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 }) >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 DSD_PORTS_BEGIN(1) >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 CS_OUTPUT_PORT(0, 1, \_SB_= .SFN0) >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 DSD_PORTS_END >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 } // ETM1 >> +=C2=A0=C2=A0=C2=A0 } >> + >> +=C2=A0=C2=A0=C2=A0 Device(CP02) { // Ares-2: Cluster 1, Cpu 0 >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Name(_HID, "ACPI0007") >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Name(_UID, 2) >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Name(_STA, 0xF) >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Device(ETM2) { // ETM on Cluster1 CPU0 >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Name (_HID, "ARMHC500") >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Name (_CID, "ARMHC500") >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Name (_CRS, ResourceTempla= te() { >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 QWordMemory ( >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Re= sourceProducer, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Po= sDecode, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Mi= nFixed, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Ma= xFixed, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Ca= cheable, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Re= adWrite, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 0x= 00000000,=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // Granularity >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Fi= xedPcdGet64 (PcdCsEtm2Base),=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0 // Min Base Address >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Fi= xedPcdGet64 (PcdCsEtm2MaxBase),=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0 // Max Base Address >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 0,= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0 // Translate >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Fi= xedPcdGet32 (PcdCsComponentSize)=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= // Length >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 ) >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 }) >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 DSD_PORTS_BEGIN(1) >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 CS_OUTPUT_PORT(0, 0, \_SB_= .SFN1) >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 DSD_PORTS_END >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 } // ETM2 >> +=C2=A0=C2=A0=C2=A0 } >> + >> +=C2=A0=C2=A0=C2=A0 Device(CP03) { // Ares-3: Cluster 1, Cpu 1 >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Name(_HID, "ACPI0007") >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Name(_UID, 3) >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Name(_STA, 0xF) >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Device(ETM3) { // ETM on Cluster0 CPU0 >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Name (_HID, "ARMHC500") >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Name (_CID, "ARMHC500") >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Name (_CRS, ResourceTempla= te() { >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 QWordMemory ( >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Re= sourceProducer, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Po= sDecode, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Mi= nFixed, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Ma= xFixed, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Ca= cheable, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Re= adWrite, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 0x= 00000000,=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // Granularity >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Fi= xedPcdGet64 (PcdCsEtm3Base),=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0 // Min Base Address >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Fi= xedPcdGet64 (PcdCsEtm3MaxBase),=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0 // Max Base Address >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 0,= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0 // Translate >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Fi= xedPcdGet32 (PcdCsComponentSize)=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= // Length >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 ) >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 }) >> + >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 DSD_PORTS_BEGIN(1) >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 CS_OUTPUT_PORT(0, 1, \_SB_= .SFN1) >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 DSD_PORTS_END >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 } // ETM3 >> +=C2=A0=C2=A0=C2=A0 } >> + >> +=C2=A0=C2=A0=C2=A0 Device(ETF0) { >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Name(_HID, "ARMHC97C")=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // TMC >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Name(_CID, "ARMHC97C")=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // TMC >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Name(_CRS, ResourceTemplate() { >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 QWordMemory ( >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 ResourceProduc= er, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 PosDecode, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 MinFixed, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 MaxFixed, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Cacheable, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 ReadWrite, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 0x00000000,=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 // Granularity >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 FixedPcdGet64 = (PcdCsEtf0Base),=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0 // Min Base Address >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 FixedPcdGet64 = (PcdCsEtf0MaxBase),=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // Ma= x Base Address >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 0,=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 = // Translate >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 FixedPcdGet32 = (PcdCsComponentSize)=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // Length >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 ) >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 }) >> + >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 DSD_PORTS_BEGIN(2) >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 CS_OUTPUT_PORT(0, 0, \_SB_.FUN), >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 CS_INPUT_PORT(0, 0, \_SB_.SFN0) >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 DSD_PORTS_END >> +=C2=A0=C2=A0=C2=A0 } // ETF0 >> + >> +=C2=A0=C2=A0=C2=A0 Device(ETF1) { >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Name(_HID, "ARMHC97C")=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // TMC >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Name(_CID, "ARMHC97C")=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // TMC >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Name(_CRS, ResourceTemplate() { >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 QWordMemory ( >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 ResourceProduc= er, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 PosDecode, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 MinFixed, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 MaxFixed, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Cacheable, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 ReadWrite, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 0x00000000,=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 // Granularity >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 FixedPcdGet64 = (PcdCsEtf1Base),=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0 // Min Base Address >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 FixedPcdGet64 = (PcdCsEtf1MaxBase),=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // Ma= x Base Address >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 0,=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 = // Translate >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 FixedPcdGet32 = (PcdCsComponentSize)=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // Length >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 ) >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 }) >> + >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 DSD_PORTS_BEGIN(2) >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 CS_OUTPUT_PORT(0, 1, \_SB_.FUN), >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 CS_INPUT_PORT(0, 0, \_SB_.SFN1) >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 DSD_PORTS_END >> +=C2=A0=C2=A0=C2=A0 } // ETF1 >> + >> +=C2=A0=C2=A0=C2=A0 Device(ETF2) { >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Name(_HID, "ARMHC97C")=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // TMC >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Name(_CID, "ARMHC97C")=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // TMC >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Name(_CRS, ResourceTemplate() { >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 QWordMemory ( >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 ResourceProduc= er, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 PosDecode, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 MinFixed, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 MaxFixed, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Cacheable, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 ReadWrite, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 0x00000000,=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 // Granularity >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 FixedPcdGet64 = (PcdCsEtf2Base),=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0 // Min Base Address >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 FixedPcdGet64 = (PcdCsEtf2MaxBase),=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // Ma= x Base Address >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 0,=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 = // Translate >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 FixedPcdGet32 = (PcdCsComponentSize)=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // Length >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 ) >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 }) >> + >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 DSD_PORTS_BEGIN(2) >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 CS_OUTPUT_PORT(0, 5, \_SB_.MFUN), >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 CS_INPUT_PORT(0, 0, \_SB_.STM0) >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 DSD_PORTS_END >> +=C2=A0=C2=A0=C2=A0 } // ETF2 >> + >> +=C2=A0=C2=A0=C2=A0 Device(FUN) { >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Name(_HID, "ARMHC9FF") >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Name(_CID, "ARMHC9FF") >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Name(_CRS, ResourceTemplate() { >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 QWordMemory ( >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 ResourceProduc= er, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 PosDecode, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 MinFixed, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 MaxFixed, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Cacheable, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 ReadWrite, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 0x00000000,=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 // Granularity >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 FixedPcdGet64 = (PcdCsFunnel0Base),=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // Mi= n Base Address >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 FixedPcdGet64 = (PcdCsFunnel0MaxBase),=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // Max Base Address >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 0,=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 = // Translate >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 FixedPcdGet32 = (PcdCsComponentSize)=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // Length >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 ) >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 }) >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 DSD_PORTS_BEGIN(3) >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 CS_OUTPUT_PORT(0, 0, \_SB_.MFUN), >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 CS_INPUT_PORT(0, 0, \_SB_.ETF0), >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 CS_INPUT_PORT(1, 0, \_SB_.ETF1) >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 DSD_PORTS_END >> +=C2=A0=C2=A0=C2=A0 } // FUN >> + >> +=C2=A0=C2=A0=C2=A0 Device(STM0) { >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Name(_HID, "ARMHC502")=C2=A0=C2=A0=C2=A0= // STM >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Name(_CID, "ARMHC502") >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Name(_CRS, ResourceTemplate() { >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 QWordMemory ( >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 ResourceProduc= er, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 PosDecode, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 MinFixed, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 MaxFixed, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Cacheable, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 ReadWrite, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 0x00000000,=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 // Granularity >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 FixedPcdGet64 = (PcdCsStmBase),=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0 // Min Base Address >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 FixedPcdGet64 = (PcdCsStmMaxBase),=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 = // Max Base Address >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 0,=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 = // Translate >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 FixedPcdGet32 = (PcdCsComponentSize)=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // Length >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 ) >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Memory32Fixed(ReadWrite, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 FixedPcdGet32 (= PcdCsStmStimulusBase), >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 FixedPcdGet32 (= PcdCsStmStimulusSize)) >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 }) >> + >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 DSD_PORTS_BEGIN(1) >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 CS_OUTPUT_PORT(0, 0, \_SB_.ETF2) >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 DSD_PORTS_END >> +=C2=A0=C2=A0=C2=A0 } >> + >> +=C2=A0=C2=A0=C2=A0 Device(MFUN) {=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // Master Funnel >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Name(_HID, "ARMHC9FF")=C2=A0=C2=A0=C2=A0= // Funnel >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Name(_CID, "ARMHC9FF")=C2=A0=C2=A0=C2=A0= // Funnel >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Name(_CRS, ResourceTemplate() { >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 QWordMemory ( >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 ResourceProduc= er, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 PosDecode, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 MinFixed, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 MaxFixed, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Cacheable, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 ReadWrite, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 0x00000000,=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 // Granularity >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 FixedPcdGet64 = (PcdCsFunnel1Base),=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // Mi= n Base Address >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 FixedPcdGet64 = (PcdCsFunnel1MaxBase),=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // Max Base Address >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 0,=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 = // Translate >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 FixedPcdGet32 = (PcdCsComponentSize)=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // Length >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 ) >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 }) >> + >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 DSD_PORTS_BEGIN(3) >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 CS_OUTPUT_PORT(0, 0, \_SB_.REP), >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 CS_INPUT_PORT(0, 0, \_SB_.FUN), >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 CS_INPUT_PORT(5, 0, \_SB_.ETF2) >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 DSD_PORTS_END >> +=C2=A0=C2=A0=C2=A0 } // MFUN >> + >> +=C2=A0=C2=A0=C2=A0 Device(REP) { >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Name(_HID, "ARMHC98D")=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // Replicator >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Name(_CID, "ARMHC98D")=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // Replicator >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Name(_CRS, ResourceTemplate() { >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 QWordMemory ( >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 ResourceProduc= er, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 PosDecode, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 MinFixed, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 MaxFixed, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Cacheable, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 ReadWrite, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 0x00000000,=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 // Granularity >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 FixedPcdGet64 = (PcdCsReplicatorBase),=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // Min Base Address >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 FixedPcdGet64 = (PcdCsReplicatorMaxBase),=C2=A0=C2=A0 // Max Base Address >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 0,=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 = // Translate >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 FixedPcdGet32 = (PcdCsComponentSize)=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // Length >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 ) >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 }) >> + >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 DSD_PORTS_BEGIN(3) >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 CS_OUTPUT_PORT(0, 0, \_SB_.TPIU), >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 CS_OUTPUT_PORT(1, 0, \_SB_.ETR), >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 CS_INPUT_PORT(0, 0, \_SB_.MFUN) >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 DSD_PORTS_END >> +=C2=A0=C2=A0=C2=A0 } // REP >> + >> +=C2=A0=C2=A0=C2=A0 Device(TPIU) { >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Name(_HID, "ARMHC979")=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // TPIU >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Name(_CID, "ARMHC979")=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // TPIU >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Name(_CRS, ResourceTemplate() { >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 QWordMemory ( >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 ResourceProduc= er, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 PosDecode, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 MinFixed, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 MaxFixed, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Cacheable, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 ReadWrite, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 0x00000000,=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 // Granularity >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 FixedPcdGet64 = (PcdCsTpiuBase),=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0 // Min Base Address >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 FixedPcdGet64 = (PcdCsTpiuMaxBase),=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // Ma= x Base Address >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 0,=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 = // Translate >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 FixedPcdGet32 = (PcdCsComponentSize)=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // Length >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 ) >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 }) >> + >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 DSD_PORTS_BEGIN(1) >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 CS_INPUT_PORT(0, 0, \_SB_.REP) >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 DSD_PORTS_END >> +=C2=A0=C2=A0=C2=A0 } // TPIU >> + >> +=C2=A0=C2=A0=C2=A0 Device(ETR) { >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Name(_HID, "ARMHC97C")=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0 // TMC >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Name(_CID, "ARMHC97C")=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0 // TMC >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Name(_CCA, 0)=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // = The ETR on this platform is not coherent >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Name(_CRS, ResourceTemplate() { >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 QWordMemory ( >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 ResourceProduc= er, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 PosDecode, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 MinFixed, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 MaxFixed, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Cacheable, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 ReadWrite, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 0x00000000,=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 // Granularity >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 FixedPcdGet64 = (PcdCsEtrBase),=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0 // Min Base Address >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 FixedPcdGet64 = (PcdCsEtrMaxBase),=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 = // Max Base Address >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 0,=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 = // Translate >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 FixedPcdGet32 = (PcdCsComponentSize)=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // Length >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 ) >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 }) >> + >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Name(_DSD, Package() { >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 DSD_GRAPH_BEGIN(1) >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 CS_INPUT_PORT(0, 1, = \_SB_.REP) >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 DSD_GRAPH_END, >> + >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 ToUUID("daffd814-6eb= a-4d8c-8a91-bc9bbf4aa301"), >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Package() { >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Pa= ckage(2) {"arm,scatter-gather", 1} >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 } >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 }) >> + >> +=C2=A0=C2=A0=C2=A0 } // ETR >> + >> +=C2=A0=C2=A0=C2=A0 Device(SFN0) {=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // Static Funnel 0 >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Name(_HID, "ARMHC9FE")=C2=A0=C2=A0=C2=A0= // Funnel >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Name(_CID, "ARMHC9FE")=C2=A0=C2=A0=C2=A0= // Funnel >> + >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 DSD_PORTS_BEGIN(3) >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 CS_OUTPUT_PORT(0, 0, \_SB_.ETF0), >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 CS_INPUT_PORT(0, 0, \_SB_.CP00.ETM0), >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 CS_INPUT_PORT(1, 0, \_SB_.CP01.ETM1) >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 DSD_PORTS_END >> +=C2=A0=C2=A0=C2=A0 } // SFN0 >> + >> +=C2=A0=C2=A0=C2=A0 Device(SFN1) {=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // Static Funnel 1 >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Name(_HID, "ARMHC9FE")=C2=A0=C2=A0=C2=A0= // Funnel >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Name(_CID, "ARMHC9FE")=C2=A0=C2=A0=C2=A0= // Funnel >> + >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 DSD_PORTS_BEGIN(3) >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 CS_OUTPUT_PORT(0, 0, \_SB_.ETF1), >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 CS_INPUT_PORT(0, 0, \_SB_.CP02.ETM2), >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 CS_INPUT_PORT(1, 0, \_SB_.CP03.ETM3) >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 DSD_PORTS_END >> +=C2=A0=C2=A0=C2=A0 } // SFN1 >> + >> +=C2=A0=C2=A0=C2=A0 Device(CMN6) { >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Name(_HID, "ARMHC600") >> + >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Name(_CRS, ResourceTemplate () { >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // Region location is plat= form specific >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // Other name(s) of this r= egion: PERIPHBASE >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 QWordMemory ( >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 ResourceConsum= er, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 PosDecode, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 MinFixed, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 MaxFixed, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 NonCacheable, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 ReadWrite, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 0x00000000, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 0x50000000, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 0x5FFFFFFF, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 0x00000000, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 0x10000000, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 , >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 , >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 CFGR >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 ) >> + >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // Sub-region location is = platform specific >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // Other name(s) of this r= egion: ROOTNODEBASE >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 QWordMemory ( >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 ResourceConsum= er, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 PosDecode, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 MinFixed, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 MaxFixed, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 NonCacheable, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 ReadWrite, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 0x00000000, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 0x50D00000, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 0x50D03FFF, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 0x00000000, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 0x00004000, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 , >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 , >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 ROOT >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 ) >> + >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // CMN600_INTREQPMU_DTC0 >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Interrupt (ResourceConsume= r, Level, ActiveHigh, Exclusive) { 78 } >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 }) >> +=C2=A0=C2=A0=C2=A0 } >> +=C2=A0 } // Scope(_SB) >> +} >> diff --git a/Platform/ARM/N1Sdp/ConfigurationManager/ConfigurationMana= gerDxe/AslTables/SsdtPci.asl b/Platform/ARM/N1Sdp/ConfigurationManager/Co= nfigurationManagerDxe/AslTables/SsdtPci.asl >> new file mode 100644 >> index 000000000000..50f8fdf11416 >> --- /dev/null >> +++ b/Platform/ARM/N1Sdp/ConfigurationManager/ConfigurationManagerDxe/= AslTables/SsdtPci.asl >> @@ -0,0 +1,247 @@ >> +/** @file >> +=C2=A0 Secondary System Description Table (SSDT) >> + >> +=C2=A0 Copyright (c) 2021, ARM Limited. All rights reserved.
>> + >> +=C2=A0 SPDX-License-Identifier: BSD-2-Clause-Patent >> +**/ >> + >> +#include "N1SdpAcpiHeader.h" >> + >> +/* >> +=C2=A0 See ACPI 6.1 Section 6.2.13 >> + >> +=C2=A0 There are two ways that _PRT can be used. >> + >> +=C2=A0 In the first model, a PCI Link device is used to provide addit= ional >> +=C2=A0 configuration information such as whether the interrupt is Lev= el or >> +=C2=A0 Edge triggered, it is active High or Low, Shared or Exclusive,= etc. >> + >> +=C2=A0 In the second model, the PCI interrupts are hardwired to speci= fic >> +=C2=A0 interrupt inputs on the interrupt controller and are not >> +=C2=A0 configurable. In this case, the Source field in _PRT does not >> +=C2=A0 reference a device, but instead contains the value zero, and t= he >> +=C2=A0 Source Index field contains the global system interrupt to whi= ch the >> +=C2=A0 PCI interrupt is hardwired. >> + >> +=C2=A0 We use the first model with link indirection to set the correc= t >> +=C2=A0 interrupt type as PCI defaults (Level Triggered, Active Low) a= re not >> +=C2=A0 compatible with GICv2. >> +*/ >> +#define LNK_DEVICE(Unique_Id, Link_Name, irq)=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 \ >> +=C2=A0 Device(Link_Name) {=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 \ >> +=C2=A0 Name(_HID, EISAID("PNP0C0F"))=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 \ >> +=C2=A0 Name(_UID, Unique_Id)=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0 \ >> +=C2=A0 Name(_PRS, ResourceTemplate() {=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 \ >> +=C2=A0=C2=A0=C2=A0 Interrupt(ResourceProducer, Level, ActiveHigh, Exc= lusive) { irq }=C2=A0=C2=A0 \ >> +=C2=A0=C2=A0=C2=A0 })=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 \ >> +=C2=A0 Method (_CRS, 0) { Return (_PRS) }=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 \ >> +=C2=A0 Method (_SRS, 1) { }=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 \ >> +=C2=A0 Method (_DIS) { }=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 \ >> +} >> + >> +#define PRT_ENTRY(Address, Pin, Link)=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 \ >> +=C2=A0 Package (4) {=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0 \ >> +=C2=A0=C2=A0=C2=A0 Address,=C2=A0 /* uses the same format as _ADR */=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0 \ >> +=C2=A0=C2=A0=C2=A0 Pin,=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 /* The PCI pin = number of the device (0-INTA, 1-INTB, 2-INTC, 3-INTD)=C2=A0 */=C2=A0 \ >> +=C2=A0=C2=A0=C2=A0 Link,=C2=A0=C2=A0=C2=A0=C2=A0 /* Interrupt allocat= ed via Link device=C2=A0 */=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 \ >> +=C2=A0=C2=A0=C2=A0 Zero=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 /* global syste= m interrupt number (no used) */=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 \ >> +} >> + >> +/* >> +=C2=A0 See Reference [1] 6.1.1 >> +=C2=A0 "High word-Device #, Low word-Function #. (for example, device= 3, >> +=C2=A0 function 2 is 0x00030002). To refer to all the functions on a = device #, >> +=C2=A0 use a function number of FFFF)." >> +*/ >> +#define ROOT_PRT_ENTRY(Pin, Link)=C2=A0=C2=A0 PRT_ENTRY(0x0000FFFF, P= in, Link)=C2=A0 // Device 0 for Bridge. >> + >> +DefinitionBlock("SsdtPci.aml", "SSDT", 1, "ARMLTD", "N1Sdp", >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0 EFI_ACPI_ARM_OEM_REVISION) >> +{ >> +=C2=A0 Scope (_SB) { >> + >> +=C2=A0=C2=A0=C2=A0 // PCI Root Complex >> +=C2=A0=C2=A0=C2=A0 LNK_DEVICE(1, LNKA, 201) >> +=C2=A0=C2=A0=C2=A0 LNK_DEVICE(2, LNKB, 202) >> +=C2=A0=C2=A0=C2=A0 LNK_DEVICE(3, LNKC, 203) >> +=C2=A0=C2=A0=C2=A0 LNK_DEVICE(4, LNKD, 204) >> +=C2=A0=C2=A0=C2=A0 LNK_DEVICE(5, LNKE, 233) >> +=C2=A0=C2=A0=C2=A0 LNK_DEVICE(6, LNKF, 234) >> +=C2=A0=C2=A0=C2=A0 LNK_DEVICE(7, LNKG, 235) >> +=C2=A0=C2=A0=C2=A0 LNK_DEVICE(8, LNKH, 236) >> + >> +=C2=A0=C2=A0=C2=A0 // PCI Root Complex >> +=C2=A0=C2=A0=C2=A0 Device(PCI0) { >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Name (_HID, EISAID("PNP0A08")) // PCI = Express Root Bridge >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Name (_CID, EISAID("PNP0A03")) // Comp= atible PCI Root Bridge >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Name (_SEG, Zero)=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // PCI Segment = Group number >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Name (_BBN, Zero)=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // PCI Base Bus= Number >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Name (_CCA, 1)=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 = // Cache Coherency Attribute >> + >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // Root Complex 0 >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Device (RP0) { >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Name(_ADR, 0xF0000000)=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // Dev 0, Func 0 >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 } >> + >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // PCI Routing Table >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Name(_PRT, Package() { >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 ROOT_PRT_ENTRY(0, LNKA),=C2= =A0=C2=A0=C2=A0=C2=A0 // INTA >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 ROOT_PRT_ENTRY(1, LNKB),=C2= =A0=C2=A0=C2=A0=C2=A0 // INTB >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 ROOT_PRT_ENTRY(2, LNKC),=C2= =A0=C2=A0=C2=A0=C2=A0 // INTC >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 ROOT_PRT_ENTRY(3, LNKD),=C2= =A0=C2=A0=C2=A0=C2=A0 // INTD >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 }) >> + >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // Root complex resources >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Method (_CRS, 0, Serialized) { >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Name (RBUF, ResourceTempla= te () { >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 WordBusNumber = (=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0 // Bus numbers assigned to this root >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Re= sourceProducer, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Mi= nFixed, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Ma= xFixed, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Po= sDecode, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 0,= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0 // AddressGranularity >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Fi= xedPcdGet32 (PcdPcieBusMin),=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0 // AddressMinimum - Minimum Bus Number >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Fi= xedPcdGet32 (PcdPcieBusMax),=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0 // AddressMaximum - Maximum Bus Number >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 0,= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0 // AddressTranslation - Set to 0 >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Fi= xedPcdGet32 (PcdPcieBusCount)=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0 // RangeLength - Number of Busses >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 ) >> + >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 DWordMemory (=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 // 32-bit BAR Windows >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Re= sourceProducer, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Po= sDecode, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Mi= nFixed, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Ma= xFixed, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Ca= cheable, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Re= adWrite, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 0x= 00000000,=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // Granularity >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Fi= xedPcdGet32 (PcdPcieMmio32Base),=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= // Min Base Address >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Fi= xedPcdGet32 (PcdPcieMmio32MaxBase),=C2=A0=C2=A0=C2=A0=C2=A0 // Max Base A= ddress >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Fi= xedPcdGet32 (PcdPcieMmio32Translation), // Translate >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Fi= xedPcdGet32 (PcdPcieMmio32Size)=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0 // Length >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 ) >> + >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 QWordMemory (=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 // 64-bit BAR Windows >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Re= sourceProducer, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Po= sDecode, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Mi= nFixed, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Ma= xFixed, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Ca= cheable, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Re= adWrite, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 0x= 00000000,=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // Granularity >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Fi= xedPcdGet64 (PcdPcieMmio64Base),=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= // Min Base Address >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Fi= xedPcdGet64 (PcdPcieMmio64MaxBase),=C2=A0=C2=A0=C2=A0=C2=A0 // Max Base A= ddress >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Fi= xedPcdGet64 (PcdPcieMmio64Translation), // Translate >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Fi= xedPcdGet64 (PcdPcieMmio64Size)=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0 // Length >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 ) >> + >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 DWordIo (=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // IO window >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Re= sourceProducer, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Mi= nFixed, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Ma= xFixed, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Po= sDecode, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 En= tireRange, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 0x= 00000000,=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // Granularity >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Fi= xedPcdGet32 (PcdPcieIoBase),=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0 // Min Base Address >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Fi= xedPcdGet32 (PcdPcieIoMaxBase),=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0 // Max Base Address >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Fi= xedPcdGet32 (PcdPcieIoTranslation),=C2=A0=C2=A0=C2=A0=C2=A0 // Translate >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Fi= xedPcdGet32 (PcdPcieIoSize),=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0 // Length >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 , >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 , >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 , >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Ty= peTranslation >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 ) >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 }) // Name(RBUF) >> + >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Return (RBUF) >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 } // Method (_CRS) >> +=C2=A0=C2=A0=C2=A0 } >> + >> +=C2=A0 // CCIX Root Complex >> +=C2=A0=C2=A0=C2=A0 Device(PCI1) { >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Name (_HID, EISAID("PNP0A08")) // PCI = Express Root Bridge >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Name (_CID, EISAID("PNP0A03")) // Comp= atible PCI Root Bridge >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Name (_SEG, 1)=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 = // PCI Segment Group number >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Name (_BBN, Zero)=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // PCI Base Bus= Number >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Name (_CCA, 1)=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 = // Cache Coherency Attribute >> + >> +=C2=A0=C2=A0=C2=A0 // Root Complex 1 >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Device (RP1) { >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Name(_ADR, 0xF0000000)=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // Dev 0, Func 0 >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 } >> + >> +=C2=A0=C2=A0=C2=A0 // PCI Routing Table >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Name(_PRT, Package() { >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 ROOT_PRT_ENTRY(0, LN= KE),=C2=A0=C2=A0=C2=A0 // INTA >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 ROOT_PRT_ENTRY(1, LN= KF),=C2=A0=C2=A0=C2=A0 // INTB >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 ROOT_PRT_ENTRY(2, LN= KG),=C2=A0=C2=A0=C2=A0 // INTC >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 ROOT_PRT_ENTRY(3, LN= KH),=C2=A0=C2=A0=C2=A0 // INTD >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 }) >> + >> +=C2=A0=C2=A0=C2=A0 // Root complex resources >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Method (_CRS, 0, Serialized) { >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Name (RBUF, ResourceTempla= te () { >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 WordBusNumber = (=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // Bu= s numbers assigned to this root >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Re= sourceProducer, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Mi= nFixed, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Ma= xFixed, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Po= sDecode, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 0,= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0 // AddressGranularity >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Fi= xedPcdGet32 (PcdCcixBusMin),=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0 // AddressMinimum - Minimum Bus Number >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Fi= xedPcdGet32 (PcdCcixBusMax),=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0 // AddressMaximum - Maximum Bus Number >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 0,= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0 // AddressTranslation - Set to 0 >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Fi= xedPcdGet32 (PcdCcixBusCount)=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0 // RangeLength - Number of Busses >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 ) >> + >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 DWordMemory (=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= // 32-bit BAR Windows >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Re= sourceProducer, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Po= sDecode, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Mi= nFixed, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Ma= xFixed, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Ca= cheable, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Re= adWrite, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 0x= 00000000,=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // Granularity >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Fi= xedPcdGet32 (PcdCcixMmio32Base),=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= // Min Base Address >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Fi= xedPcdGet32 (PcdCcixMmio32MaxBase),=C2=A0=C2=A0=C2=A0=C2=A0 // Max Base A= ddress >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Fi= xedPcdGet32 (PcdCcixMmio32Translation), // Translate >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Fi= xedPcdGet32 (PcdCcixMmio32Size)=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0 // Length >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 ) >> + >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 QWordMemory (=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= // 64-bit BAR Windows >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Re= sourceProducer, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Po= sDecode, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Mi= nFixed, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Ma= xFixed, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Ca= cheable, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Re= adWrite, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 0x= 00000000,=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // Granularity >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Fi= xedPcdGet64 (PcdCcixMmio64Base),=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= // Min Base Address >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Fi= xedPcdGet64 (PcdCcixMmio64MaxBase),=C2=A0=C2=A0=C2=A0=C2=A0 // Max Base A= ddress >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Fi= xedPcdGet64 (PcdCcixMmio64Translation), // Translate >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Fi= xedPcdGet64 (PcdCcixMmio64Size)=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0 // Length >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 ) >> + >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 DWordIo (=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0 // IO window >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Re= sourceProducer, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Mi= nFixed, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Ma= xFixed, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Po= sDecode, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 En= tireRange, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 0x= 00000000,=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // Granularity >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Fi= xedPcdGet32 (PcdCcixIoBase),=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0 // Min Base Address >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Fi= xedPcdGet32 (PcdCcixIoMaxBase),=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0 // Max Base Address >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Fi= xedPcdGet32 (PcdCcixIoTranslation),=C2=A0=C2=A0=C2=A0=C2=A0 // Translate >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Fi= xedPcdGet32 (PcdCcixIoSize),=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0 // Length >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 , >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 , >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 , >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Ty= peTranslation >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 ) >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 }) // Name(RBUF) >> + >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Return (RBUF) >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 } // Method (_CRS) >> +=C2=A0=C2=A0=C2=A0 } >> + >> +=C2=A0 } >> +} >> diff --git a/Platform/ARM/N1Sdp/ConfigurationManager/ConfigurationMana= gerDxe/AslTables/SsdtRemotePci.asl b/Platform/ARM/N1Sdp/ConfigurationMana= ger/ConfigurationManagerDxe/AslTables/SsdtRemotePci.asl >> new file mode 100644 >> index 000000000000..1efb755a67dd >> --- /dev/null >> +++ b/Platform/ARM/N1Sdp/ConfigurationManager/ConfigurationManagerDxe/= AslTables/SsdtRemotePci.asl >> @@ -0,0 +1,156 @@ >> +/** @file >> +=C2=A0 Secondary System Description Table (SSDT) >> + >> +=C2=A0 Copyright (c) 2021, ARM Limited. All rights reserved.
>> + >> +=C2=A0 SPDX-License-Identifier: BSD-2-Clause-Patent >> +**/ >> + >> +#include "N1SdpAcpiHeader.h" >> + >> +/* >> +=C2=A0 See ACPI 6.1 Section 6.2.13 >> + >> +=C2=A0 There are two ways that _PRT can be used. >> + >> +=C2=A0 In the first model, a PCI Link device is used to provide addit= ional >> +=C2=A0 configuration information such as whether the interrupt is Lev= el or >> +=C2=A0 Edge triggered, it is active High or Low, Shared or Exclusive,= etc. >> + >> +=C2=A0 In the second model, the PCI interrupts are hardwired to speci= fic >> +=C2=A0 interrupt inputs on the interrupt controller and are not >> +=C2=A0 configurable. In this case, the Source field in _PRT does not >> +=C2=A0 reference a device, but instead contains the value zero, and t= he >> +=C2=A0 Source Index field contains the global system interrupt to whi= ch the >> +=C2=A0 PCI interrupt is hardwired. >> + >> +=C2=A0 We use the first model with link indirection to set the correc= t >> +=C2=A0 interrupt type as PCI defaults (Level Triggered, Active Low) a= re not >> +=C2=A0 compatible with GICv2. >> +*/ >> +#define LNK_DEVICE(Unique_Id, Link_Name, irq)=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 \ >> +=C2=A0 Device(Link_Name) {=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 \ >> +=C2=A0 Name(_HID, EISAID("PNP0C0F"))=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 \ >> +=C2=A0 Name(_UID, Unique_Id)=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0 \ >> +=C2=A0 Name(_PRS, ResourceTemplate() {=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 \ >> +=C2=A0=C2=A0=C2=A0 Interrupt(ResourceProducer, Level, ActiveHigh, Exc= lusive) { irq }=C2=A0=C2=A0 \ >> +=C2=A0=C2=A0=C2=A0 })=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 \ >> +=C2=A0 Method (_CRS, 0) { Return (_PRS) }=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 \ >> +=C2=A0 Method (_SRS, 1) { }=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 \ >> +=C2=A0 Method (_DIS) { }=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 \ >> +} >> + >> +#define PRT_ENTRY(Address, Pin, Link)=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 \ >> +=C2=A0 Package (4) {=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0 \ >> +=C2=A0=C2=A0=C2=A0 Address,=C2=A0 /* uses the same format as _ADR */=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0 \ >> +=C2=A0=C2=A0=C2=A0 Pin,=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 /* The PCI pin = number of the device (0-INTA, 1-INTB, 2-INTC, 3-INTD)=C2=A0 */=C2=A0 \ >> +=C2=A0=C2=A0=C2=A0 Link,=C2=A0=C2=A0=C2=A0=C2=A0 /* Interrupt allocat= ed via Link device=C2=A0 */=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 \ >> +=C2=A0=C2=A0=C2=A0 Zero=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 /* global syste= m interrupt number (no used) */=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 \ >> +} >> + >> +/* >> +=C2=A0 See Reference [1] 6.1.1 >> +=C2=A0 "High word-Device #, Low word-Function #. (for example, device= 3, >> +=C2=A0 function 2 is 0x00030002). To refer to all the functions on a = device #, >> +=C2=A0 use a function number of FFFF)." >> +*/ >> +#define ROOT_PRT_ENTRY(Pin, Link)=C2=A0=C2=A0 PRT_ENTRY(0x0000FFFF, P= in, Link)=C2=A0 // Device 0 for Bridge. >> + >> +DefinitionBlock("SsdtRemotePci.aml", "SSDT", 1, "ARMLTD", "N1Sdp", >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0 EFI_ACPI_ARM_OEM_REVISION) >> +{ >> +=C2=A0 Scope (_SB) { >> + >> +=C2=A0=C2=A0=C2=A0 // Remote PCI Root Complex >> +=C2=A0=C2=A0=C2=A0 LNK_DEVICE(9, LNKI, 681) >> +=C2=A0=C2=A0=C2=A0 LNK_DEVICE(10, LNKJ, 682) >> +=C2=A0=C2=A0=C2=A0 LNK_DEVICE(11, LNKK, 683) >> +=C2=A0=C2=A0=C2=A0 LNK_DEVICE(12, LNKL, 684) >> + >> +=C2=A0=C2=A0=C2=A0 //Remote PCIe root complex >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Device(PCI2) { >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Name (_HID, EISAID("PNP0A08")) // PCI = Express Root Bridge >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Name (_CID, EISAID("PNP0A03")) // Comp= atible PCI Root Bridge >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Name (_SEG, 2)=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 = // PCI Segment Group number >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Name (_BBN, Zero)=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // PCI Base Bus= Number >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Name (_CCA, 1)=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 = // Cache Coherency Attribute >> + >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // Remote Root Complex 0 >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Device (RP0) { >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Name(_ADR, 0xF0000000)=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // Dev 0, Func 0 >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 } >> + >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // PCI Routing Table >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Name(_PRT, Package() { >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 ROOT_PRT_ENTRY(0, LNKI),=C2= =A0=C2=A0=C2=A0=C2=A0 // INTA >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 ROOT_PRT_ENTRY(1, LNKJ),=C2= =A0=C2=A0=C2=A0=C2=A0 // INTB >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 ROOT_PRT_ENTRY(2, LNKK),=C2= =A0=C2=A0=C2=A0=C2=A0 // INTC >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 ROOT_PRT_ENTRY(3, LNKL),=C2= =A0=C2=A0=C2=A0=C2=A0 // INTD >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 }) >> + >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // Root complex resources >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Method (_CRS, 0, Serialized) { >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Name (RBUF, ResourceTempla= te () { >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 WordBusNumber = (=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0 // Bus numbers assigned to this root >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Re= sourceProducer, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Mi= nFixed, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Ma= xFixed, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Po= sDecode, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 0,= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0 // AddressGranularity >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Fi= xedPcdGet32 (PcdPcieBusMin),=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0 // AddressMinimum - Minimum Bus Number >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Fi= xedPcdGet32 (PcdPcieBusMax),=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0 // AddressMaximum - Maximum Bus Number >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 0,= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0 // AddressTranslation - Set to 0 >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Fi= xedPcdGet32 (PcdPcieBusCount)=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0 // RangeLength - Number of Busses >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 ) >> + >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 QWordMemory (=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 // 32-bit BAR Windows >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Re= sourceProducer, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Po= sDecode, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Mi= nFixed, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Ma= xFixed, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Ca= cheable, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Re= adWrite, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 0x= 00000000,=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // Granularity >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Fi= xedPcdGet32 (PcdPcieMmio32Base),=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= // Min Base Address >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Fi= xedPcdGet32 (PcdPcieMmio32MaxBase),=C2=A0=C2=A0=C2=A0=C2=A0 // Max Base A= ddress >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Fi= xedPcdGet32 (PcdRemotePcieMmio32Translation), // Translate >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Fi= xedPcdGet32 (PcdPcieMmio32Size)=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0 // Length >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 ) >> + >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 QWordMemory (=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 // 64-bit BAR Windows >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Re= sourceProducer, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Po= sDecode, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Mi= nFixed, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Ma= xFixed, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Ca= cheable, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Re= adWrite, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 0x= 00000000,=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // Granularity >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Fi= xedPcdGet64 (PcdPcieMmio64Base),=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= // Min Base Address >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Fi= xedPcdGet64 (PcdPcieMmio64MaxBase),=C2=A0=C2=A0=C2=A0=C2=A0 // Max Base A= ddress >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Fi= xedPcdGet64 (PcdRemotePcieMmio64Translation), // Translate >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Fi= xedPcdGet64 (PcdPcieMmio64Size)=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0 // Length >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 ) >> + >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 QWordIo (=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // IO window >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Re= sourceProducer, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Mi= nFixed, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Ma= xFixed, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Po= sDecode, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 En= tireRange, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 0x= 00000000,=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // Granularity >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Fi= xedPcdGet32 (PcdPcieIoBase),=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0 // Min Base Address >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Fi= xedPcdGet32 (PcdPcieIoMaxBase),=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0 // Max Base Address >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Fi= xedPcdGet64 (PcdRemotePcieIoTranslation), // Translate >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Fi= xedPcdGet32 (PcdPcieIoSize),=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0 // Length >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 , >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 , >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 , >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Ty= peTranslation >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 ) >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 }) // Name(RBUF) >> + >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Return (RBUF) >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 } // Method (_CRS) >> +=C2=A0=C2=A0=C2=A0 } >> +=C2=A0 } >> +} >