public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
* [edk2-devel][edk2-platforms][PATCH V1 0/8] Whitley ACPI Tables
@ 2022-02-07 19:02 Oram, Isaac W
  2022-02-07 19:02 ` [edk2-devel][edk2-platforms][PATCH V1 1/8] MinPlatformPkg/AmlGenOffset: Update for python 3 Oram, Isaac W
                   ` (7 more replies)
  0 siblings, 8 replies; 17+ messages in thread
From: Oram, Isaac W @ 2022-02-07 19:02 UTC (permalink / raw)
  To: devel; +Cc: Chasel Chiu, Nate DeSimone, Liming Gao, Eric Dong

This patch series adds ACPI tables and the associated UBA driver required to patch the tables during boot.

The common AmlGenOffset python script needed to be updated for Python 3.
The server ACPI tables are large, so the 02 through 05 are just separating into multiple commits for review.
Building ACPI tables requires a pre-build step that generates AML offsets by building the ACPI tables with
the appropriate flags, then stripping out offsets that do not need to be patched during boot.
Then the stripped down AML offsets are available for the main build as a C source data structure.
In the main build, StaticSkuDataDxe incorporates the AML offset data and publishes them if it is the
correct motherboard.
The AcpiTables10nm data file and the StaticSkuDataDxe driver were previously provided in binary form in
FvLateOpenBoard.  The AcpiPlatform driver that consumes the AML offset data and patches tables with boottime
data is still a binary.

The tables are provided as a part of WhitleyOpenBoardPkg because they can support multiple boards.
It is expected that most boards will make copies in their board directories and customize from there.

Cc: Chasel Chiu <chasel.chiu@intel.com>
Cc: Nate DeSimone <nathaniel.l.desimone@intel.com>
Cc: Liming Gao <gaoliming@byosoft.com.cn>
Cc: Eric Dong <eric.dong@intel.com>
Signed-off-by: Isaac Oram <isaac.w.oram@intel.com>

Isaac Oram (8):
  MinPlatformPkg/AmlGenOffset: Update for python 3
  WhitleyOpenBoardPkg/AcpiTables: Add ACPI Table definitions
  WhitleyOpenBoardPkg/AcpiTables: South Cluster ASL
  WhitleyOpenBoardPkg/AcpiTables10nm: Add Static ACPI tables
  WhitleyOpenBoardPkg/AcpiTables10nm: Add DSDT ACPI table
  WhitleyOpenBoardPkg/Build: Enable includable build options
  WhitleyOpenBoardPkg/WilsonCityRvp: Generate AML offset table
  WhitleyOpenBoardPkg/StaticSkuDataDxe: Add open source driver

 Platform/Intel/.gitignore                                                                         |    2 +
 Platform/Intel/MinPlatformPkg/Tools/AmlGenOffset/AmlGenOffset.py                                  |   13 +-
 Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/AcpiTables10nm.inf                    |   48 +
 Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Bdat/Bdat.aslc                        |   54 +
 Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/DBG2/DBG2.aslc                        |   81 +
 Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/AMLUPD.asl                       |   20 +
 Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/BiosParameterRegion.asi          |  346 ++
 Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/CommonPlatform10nm.asi           |  205 +
 Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/CpuMemHp.asi                     |  730 +++
 Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/DSDT.asl                         |   61 +
 Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/EPRPPlatform10nm.asl             |   19 +
 Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/FpgaBus00.asi                    |  158 +
 Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/FpgaBus01.asi                    |  158 +
 Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/FpgaBus02.asi                    |  157 +
 Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/FpgaBus03.asi                    |  157 +
 Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/Gpe.asi                          |  137 +
 Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/IioPcieEdpcGpe.asi               |   16 +
 Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/IioPcieEdpcNotify10nm.asi        |  183 +
 Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/IioPcieEdpcOst.asi               |   16 +
 Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/IioPcieHotPlugGpeHandler10nm.asl | 1322 +++++
 Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/IioRootBridge.asi                |  328 ++
 Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/IioRootBridgeIcx.asi             |  270 +
 Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/Mother.asi                       |  164 +
 Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/NvdimmGpe.asi                    |   25 +
 Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/Os.asi                           |   66 +
 Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/PC0010nm.asi                     |  427 ++
 Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/PC0610nmEjd.asi                  |   10 +
 Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/PC1210nmEjd.asi                  |   10 +
 Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/PC1810nmEjd.asi                  |   10 +
 Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/PchApic.asi                      |   18 +
 Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/PcieHp.asi                       |  669 +++
 Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/PcieHpDev.asi                    |   53 +
 Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/PcieNonHpDev.asi                 |   45 +
 Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/Platform.asl                     |   91 +
 Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/PlatformGpe10nm.asi              |  191 +
 Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/PlatformPciTree10nm_EPRP.asi     | 5388 ++++++++++++++++++++
 Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/Sck1Ejd.asi                      |   10 +
 Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/Sck2Ejd.asi                      |   10 +
 Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/Sck3Ejd.asi                      |   10 +
 Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/Sgx.asi                          |  219 +
 Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/Uncore.asi                       |  163 +
 Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Facs/Facs62.aslc                      |   72 +
 Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Fadt/Fadt62.aslc                      |  171 +
 Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Hmat/Hmat.aslc                        |  972 ++++
 Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Hpet/Hpet.aslc                        |   61 +
 Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Mcfg/Mcfg.aslc                        |   74 +
 Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Migt/Migt.aslc                        |   68 +
 Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Msct/Msct.aslc                        |  137 +
 Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/NFIT/Nfit.aslc                        |   48 +
 Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/PCAT/Pcat.aslc                        |   44 +
 Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Pmtt/Pmtt10nm.aslc                    |  136 +
 Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/SPCR/Spcr.aslc                        |   89 +
 Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Spmi/Spmi.aslc                        |   53 +
 Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Wddt/Wddt1.0.aslc                     |   74 +
 Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Wsmt/Wsmt.aslc                        |   74 +
 Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/Bdat.h                                            |   91 +
 Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/Dbg2.h                                            |   30 +
 Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/Facs.h                                            |   37 +
 Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/Fadt.h                                            |  206 +
 Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/Hmat.h                                            |   88 +
 Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/Hpet.h                                            |   43 +
 Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/Mcfg.h                                            |   58 +
 Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/Migt.h                                            |   57 +
 Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/Msars.h                                           |   56 +
 Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/Mscis.h                                           |   84 +
 Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/Msct.h                                            |   58 +
 Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/Nfit.h                                            |   50 +
 Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/Pcat.h                                            |   45 +
 Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/Pmtt.h                                            |  120 +
 Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/Sllbis.h                                          |   87 +
 Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/Spcr.h                                            |   48 +
 Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/Spmi.h                                            |   59 +
 Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/WatchdogDescriptionTable.h                        |   82 +
 Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/Wddt.h                                            |   53 +
 Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/Wsmt.h                                            |   67 +
 Platform/Intel/WhitleyOpenBoardPkg/Include/Dsc/BuildOptions.dsc                                   |  151 +
 Platform/Intel/WhitleyOpenBoardPkg/Include/Library/UbaMpTableUpdateLib.h                          |   41 +
 Platform/Intel/WhitleyOpenBoardPkg/Include/Library/UbaPirqUpdateLib.h                             |   42 +
 Platform/Intel/WhitleyOpenBoardPkg/PlatformPkg.dec                                                |    7 +-
 Platform/Intel/WhitleyOpenBoardPkg/PlatformPkg.dsc                                                |  148 +-
 Platform/Intel/WhitleyOpenBoardPkg/PlatformPkg.fdf                                                |    1 +
 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaDxeRpBoards.fdf                                         |    5 +
 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/StaticSkuDataDxe/AcpiStaticData.c                  |   54 +
 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/StaticSkuDataDxe/DeviceDataInstall.c               |  100 +
 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/StaticSkuDataDxe/PlatformDeviceDataSRP10nm.c       |  110 +
 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/StaticSkuDataDxe/Readme.md                         |   19 +
 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/StaticSkuDataDxe/StaticSkuDataDxe.c                |   60 +
 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/StaticSkuDataDxe/StaticSkuDataDxe.h                |   41 +
 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/StaticSkuDataDxe/StaticSkuDataDxe.inf              |   59 +
 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaRpBoards.dsc                                            |    5 +
 Platform/Intel/WhitleyOpenBoardPkg/WilsonCityRvp/AmlOffsets.dsc                                   |   41 +
 Platform/Intel/WhitleyOpenBoardPkg/WilsonCityRvp/AmlOffsets/AmlOffsets.inf                        |   26 +
 Platform/Intel/WhitleyOpenBoardPkg/WilsonCityRvp/build_board.py                                   |   63 +
 Platform/Intel/WhitleyOpenBoardPkg/WilsonCityRvp/build_config.cfg                                 |   15 +
 Silicon/Intel/WhitleySiliconPkg/Include/UncoreCommonIncludes.h                                    |    8 +
 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/Pch.asl                       |  833 +++
 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/PchHda.asl                    |  307 ++
 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/PchNvs.asl                    |  271 +
 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/PchPcie.asl                   |  203 +
 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/PchSata.asl                   |   50 +
 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/PchXhci.asl                   |  558 ++
 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP01_ADR.asl                  |   15 +
 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP02_ADR.asl                  |   15 +
 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP03_ADR.asl                  |   15 +
 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP04_ADR.asl                  |   15 +
 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP05_ADR.asl                  |   15 +
 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP06_ADR.asl                  |   15 +
 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP07_ADR.asl                  |   15 +
 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP08_ADR.asl                  |   15 +
 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP09_ADR.asl                  |   15 +
 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP10_ADR.asl                  |   15 +
 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP11_ADR.asl                  |   15 +
 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP12_ADR.asl                  |   15 +
 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP13_ADR.asl                  |   15 +
 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP14_ADR.asl                  |   15 +
 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP15_ADR.asl                  |   15 +
 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP16_ADR.asl                  |   15 +
 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP17_ADR.asl                  |   15 +
 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP18_ADR.asl                  |   15 +
 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP19_ADR.asl                  |   15 +
 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP20_ADR.asl                  |   15 +
 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/TraceHubDebug.asl             |  150 +
 Silicon/Intel/WhitleySiliconPkg/SiliconPkg.dec                                                    |    1 +
 123 files changed, 19064 insertions(+), 157 deletions(-)
 create mode 100644 Platform/Intel/.gitignore
 create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/AcpiTables10nm.inf
 create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Bdat/Bdat.aslc
 create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/DBG2/DBG2.aslc
 create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/AMLUPD.asl
 create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/BiosParameterRegion.asi
 create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/CommonPlatform10nm.asi
 create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/CpuMemHp.asi
 create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/DSDT.asl
 create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/EPRPPlatform10nm.asl
 create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/FpgaBus00.asi
 create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/FpgaBus01.asi
 create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/FpgaBus02.asi
 create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/FpgaBus03.asi
 create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/Gpe.asi
 create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/IioPcieEdpcGpe.asi
 create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/IioPcieEdpcNotify10nm.asi
 create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/IioPcieEdpcOst.asi
 create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/IioPcieHotPlugGpeHandler10nm.asl
 create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/IioRootBridge.asi
 create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/IioRootBridgeIcx.asi
 create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/Mother.asi
 create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/NvdimmGpe.asi
 create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/Os.asi
 create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/PC0010nm.asi
 create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/PC0610nmEjd.asi
 create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/PC1210nmEjd.asi
 create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/PC1810nmEjd.asi
 create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/PchApic.asi
 create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/PcieHp.asi
 create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/PcieHpDev.asi
 create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/PcieNonHpDev.asi
 create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/Platform.asl
 create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/PlatformGpe10nm.asi
 create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/PlatformPciTree10nm_EPRP.asi
 create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/Sck1Ejd.asi
 create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/Sck2Ejd.asi
 create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/Sck3Ejd.asi
 create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/Sgx.asi
 create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/Uncore.asi
 create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Facs/Facs62.aslc
 create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Fadt/Fadt62.aslc
 create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Hmat/Hmat.aslc
 create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Hpet/Hpet.aslc
 create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Mcfg/Mcfg.aslc
 create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Migt/Migt.aslc
 create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Msct/Msct.aslc
 create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/NFIT/Nfit.aslc
 create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/PCAT/Pcat.aslc
 create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Pmtt/Pmtt10nm.aslc
 create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/SPCR/Spcr.aslc
 create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Spmi/Spmi.aslc
 create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Wddt/Wddt1.0.aslc
 create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Wsmt/Wsmt.aslc
 create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/Bdat.h
 create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/Dbg2.h
 create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/Facs.h
 create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/Fadt.h
 create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/Hmat.h
 create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/Hpet.h
 create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/Mcfg.h
 create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/Migt.h
 create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/Msars.h
 create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/Mscis.h
 create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/Msct.h
 create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/Nfit.h
 create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/Pcat.h
 create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/Pmtt.h
 create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/Sllbis.h
 create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/Spcr.h
 create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/Spmi.h
 create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/WatchdogDescriptionTable.h
 create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/Wddt.h
 create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/Wsmt.h
 create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Dsc/BuildOptions.dsc
 create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Library/UbaMpTableUpdateLib.h
 create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Library/UbaPirqUpdateLib.h
 create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/StaticSkuDataDxe/AcpiStaticData.c
 create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/StaticSkuDataDxe/DeviceDataInstall.c
 create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/StaticSkuDataDxe/PlatformDeviceDataSRP10nm.c
 create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/StaticSkuDataDxe/Readme.md
 create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/StaticSkuDataDxe/StaticSkuDataDxe.c
 create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/StaticSkuDataDxe/StaticSkuDataDxe.h
 create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/StaticSkuDataDxe/StaticSkuDataDxe.inf
 create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/WilsonCityRvp/AmlOffsets.dsc
 create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/WilsonCityRvp/AmlOffsets/AmlOffsets.inf
 create mode 100644 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/Pch.asl
 create mode 100644 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/PchHda.asl
 create mode 100644 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/PchNvs.asl
 create mode 100644 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/PchPcie.asl
 create mode 100644 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/PchSata.asl
 create mode 100644 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/PchXhci.asl
 create mode 100644 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP01_ADR.asl
 create mode 100644 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP02_ADR.asl
 create mode 100644 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP03_ADR.asl
 create mode 100644 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP04_ADR.asl
 create mode 100644 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP05_ADR.asl
 create mode 100644 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP06_ADR.asl
 create mode 100644 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP07_ADR.asl
 create mode 100644 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP08_ADR.asl
 create mode 100644 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP09_ADR.asl
 create mode 100644 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP10_ADR.asl
 create mode 100644 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP11_ADR.asl
 create mode 100644 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP12_ADR.asl
 create mode 100644 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP13_ADR.asl
 create mode 100644 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP14_ADR.asl
 create mode 100644 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP15_ADR.asl
 create mode 100644 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP16_ADR.asl
 create mode 100644 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP17_ADR.asl
 create mode 100644 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP18_ADR.asl
 create mode 100644 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP19_ADR.asl
 create mode 100644 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP20_ADR.asl
 create mode 100644 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/TraceHubDebug.asl

--
2.27.0.windows.1

^ permalink raw reply	[flat|nested] 17+ messages in thread

* [edk2-devel][edk2-platforms][PATCH V1 1/8] MinPlatformPkg/AmlGenOffset: Update for python 3
  2022-02-07 19:02 [edk2-devel][edk2-platforms][PATCH V1 0/8] Whitley ACPI Tables Oram, Isaac W
@ 2022-02-07 19:02 ` Oram, Isaac W
  2022-02-09  3:20   ` Nate DeSimone
  2022-02-07 19:02 ` [edk2-devel][edk2-platforms][PATCH V1 2/8] WhitleyOpenBoardPkg/AcpiTables: Add ACPI Table definitions Oram, Isaac W
                   ` (6 subsequent siblings)
  7 siblings, 1 reply; 17+ messages in thread
From: Oram, Isaac W @ 2022-02-07 19:02 UTC (permalink / raw)
  To: devel; +Cc: Chasel Chiu, Nate DeSimone, Liming Gao, Eric Dong

Update for library changes.
Remove version.
Changed to not open files as bytes.

Cc: Chasel Chiu <chasel.chiu@intel.com>
Cc: Nate DeSimone <nathaniel.l.desimone@intel.com>
Cc: Liming Gao <gaoliming@byosoft.com.cn>
Cc: Eric Dong <eric.dong@intel.com>
Signed-off-by: Isaac Oram <isaac.w.oram@intel.com>
---
 Platform/Intel/MinPlatformPkg/Tools/AmlGenOffset/AmlGenOffset.py | 13 ++++++-------
 1 file changed, 6 insertions(+), 7 deletions(-)

diff --git a/Platform/Intel/MinPlatformPkg/Tools/AmlGenOffset/AmlGenOffset.py b/Platform/Intel/MinPlatformPkg/Tools/AmlGenOffset/AmlGenOffset.py
index e13ca06471..4799eee1a9 100644
--- a/Platform/Intel/MinPlatformPkg/Tools/AmlGenOffset/AmlGenOffset.py
+++ b/Platform/Intel/MinPlatformPkg/Tools/AmlGenOffset/AmlGenOffset.py
@@ -32,16 +32,16 @@ if __name__ == '__main__':
   #
   # Create command line argument parser object
   #
-  parser = argparse.ArgumentParser(prog=__prog__, version=__version__, usage=__usage__, description=__copyright__, conflict_handler='resolve')
+  parser = argparse.ArgumentParser(prog=__prog__, usage=__usage__, description=__copyright__, conflict_handler='resolve')
   group = parser.add_mutually_exclusive_group(required=True)
   group.add_argument("-e", action="store_true", dest='Encode', help='encode file')
   group.add_argument("-d", action="store_true", dest='Decode', help='decode file')
-  parser.add_argument("-o", "--output", dest='OutputFile', type=str, metavar='filename', help="specify the output filename", required=True)
+  parser.add_argument("-o", "--output", dest='OutputFileName', type=str, metavar='filename', help="specify the output filename", required=True)
   parser.add_argument("-v", "--verbose", dest='Verbose', action="store_true", help="increase output messages")
   parser.add_argument("-q", "--quiet", dest='Quiet', action="store_true", help="reduce output messages")
   parser.add_argument("--debug", dest='Debug', type=int, metavar='[0-9]', choices=range(0,10), default=0, help="set debug level")
   parser.add_argument("--aml_filter", dest='AmlFilterStr', type=str, help="specify the AML filter.")
-  parser.add_argument(metavar="input_file", dest='InputFile', type=argparse.FileType('rb'), help="specify the input filename")
+  parser.add_argument(metavar="input_file", dest='InputFile', type=argparse.FileType('r'), help="specify the input filename")
 
   #
   # Parse command line arguments
@@ -49,11 +49,11 @@ if __name__ == '__main__':
   args = parser.parse_args()
 
   if args.Encode:
-    print 'Unsupported'
+    print('Unsupported')
 
   if args.Decode:
-    args.OutputFileName = args.OutputFile
-    args.OutputFile = open(args.OutputFileName, 'wb')
+    args.OutputFileName = os.path.normpath(args.OutputFileName)
+    args.OutputFile = open(args.OutputFileName, 'w')
 
     AmlFilter = args.AmlFilterStr
     filter_pattern = '|'.join(AmlFilter.split(' '))
@@ -69,4 +69,3 @@ if __name__ == '__main__':
             if match_obj is not None:
                 args.OutputFile.write(line)
     args.OutputFile.close()
-
-- 
2.27.0.windows.1


^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [edk2-devel][edk2-platforms][PATCH V1 2/8] WhitleyOpenBoardPkg/AcpiTables: Add ACPI Table definitions
  2022-02-07 19:02 [edk2-devel][edk2-platforms][PATCH V1 0/8] Whitley ACPI Tables Oram, Isaac W
  2022-02-07 19:02 ` [edk2-devel][edk2-platforms][PATCH V1 1/8] MinPlatformPkg/AmlGenOffset: Update for python 3 Oram, Isaac W
@ 2022-02-07 19:02 ` Oram, Isaac W
  2022-02-09  3:20   ` Nate DeSimone
  2022-02-07 19:02 ` [edk2-devel][edk2-platforms][PATCH V1 3/8] WhitleyOpenBoardPkg/AcpiTables: South Cluster ASL Oram, Isaac W
                   ` (5 subsequent siblings)
  7 siblings, 1 reply; 17+ messages in thread
From: Oram, Isaac W @ 2022-02-07 19:02 UTC (permalink / raw)
  To: devel; +Cc: Nate DeSimone, Chasel Chiu

Header files for C structures used to build ACPI tables

Cc: Nate DeSimone <nathaniel.l.desimone@intel.com>
Cc: Chasel Chiu <chasel.chiu@intel.com>
Signed-off-by: Isaac Oram <isaac.w.oram@intel.com>
---
 Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/Bdat.h                     |  91 +++++++++
 Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/Dbg2.h                     |  30 +++
 Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/Facs.h                     |  37 ++++
 Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/Fadt.h                     | 206 ++++++++++++++++++++
 Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/Hmat.h                     |  88 +++++++++
 Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/Hpet.h                     |  43 ++++
 Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/Mcfg.h                     |  58 ++++++
 Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/Migt.h                     |  57 ++++++
 Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/Msars.h                    |  56 ++++++
 Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/Mscis.h                    |  84 ++++++++
 Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/Msct.h                     |  58 ++++++
 Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/Nfit.h                     |  50 +++++
 Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/Pcat.h                     |  45 +++++
 Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/Pmtt.h                     | 120 ++++++++++++
 Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/Sllbis.h                   |  87 +++++++++
 Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/Spcr.h                     |  48 +++++
 Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/Spmi.h                     |  59 ++++++
 Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/WatchdogDescriptionTable.h |  82 ++++++++
 Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/Wddt.h                     |  53 +++++
 Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/Wsmt.h                     |  67 +++++++
 Platform/Intel/WhitleyOpenBoardPkg/PlatformPkg.dec                         |   7 +-
 Silicon/Intel/WhitleySiliconPkg/Include/UncoreCommonIncludes.h             |   8 +
 22 files changed, 1430 insertions(+), 4 deletions(-)

diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/Bdat.h b/Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/Bdat.h
new file mode 100644
index 0000000000..0fb913a6a8
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/Bdat.h
@@ -0,0 +1,91 @@
+/** @file
+  This file describes the contents of the BDAT ACPI.
+
+  @copyright
+  Copyright 1999 - 2019 Intel Corporation. <BR>
+
+  SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _BDAT_H_
+#define _BDAT_H_
+
+//
+// Statements that include other files
+//
+#include <IndustryStandard/Acpi.h>
+
+//
+// Ensure proper structure formats
+//
+#pragma pack(1)
+
+#define EFI_BDAT_TABLE_SIGNATURE          SIGNATURE_32('B','D','A','T')
+
+#define BDAT_PRIMARY_VER    0x0004
+#define BDAT_SECONDARY_VER  0x0000
+
+typedef struct {
+  UINT8   BiosDataSignature[8]; // "BDATHEAD"
+  UINT32  BiosDataStructSize;   // sizeof BDAT_STRUCTURE + sizeof BDAT_MEMORY_DATA_STRUCTURE + sizeof BDAT_RMT_STRUCTURE
+  UINT16  Crc16;                // 16-bit CRC of BDAT_STRUCTURE (calculated with 0 in this field)
+  UINT16  Reserved;
+  UINT16  PrimaryVersion;       // Primary version
+  UINT16  SecondaryVersion;     // Secondary version
+  UINT32  OemOffset;            // Optional offset to OEM-defined structure
+  UINT32  Reserved1;
+  UINT32  Reserved2;
+} BDAT_HEADER_STRUCTURE;
+
+typedef struct bdatSchemaList {
+  UINT16                       SchemaListLength; //Number of Schemas present
+  UINT16                       Reserved;
+  UINT16                       Year;
+  UINT8                        Month;
+  UINT8                        Day;
+  UINT8                        Hour;
+  UINT8                        Minute;
+  UINT8                        Second;
+  UINT8                        Reserved1;
+  //
+  // This is a dynamic region, where Schema list address is filled out.
+  // Each schema location is 32 bits long and complies with BDAT 4.0 version.
+  //
+} BDAT_SCHEMA_LIST_STRUCTURE;
+
+//BDAT Header Struct which contains information all exisitng BDAT Schemas
+typedef struct bdatStruct {
+  BDAT_HEADER_STRUCTURE        BdatHeader;
+  BDAT_SCHEMA_LIST_STRUCTURE   BdatSchemas;
+} BDAT_STRUCTURE;
+
+//
+// BIOS Data ACPI structure
+//
+typedef struct {
+
+  EFI_ACPI_DESCRIPTION_HEADER             Header;
+  EFI_ACPI_6_2_GENERIC_ADDRESS_STRUCTURE  BdatGas;
+
+} EFI_BDAT_ACPI_DESCRIPTION_TABLE;
+
+//
+// BIOS Data Parameter Region Generic Address
+// Information
+//
+#define EFI_BDAT_ACPI_POINTER             0x0
+
+#define ___INTERNAL_CONVERT_TO_STRING___(a) #a
+#define CONVERT_TO_STRING(a) ___INTERNAL_CONVERT_TO_STRING___(a)
+
+//
+// This is copied from Include\Acpi.h
+//
+#define CREATOR_ID_INTEL 0x4C544E49  //"LTNI""INTL"(Intel)
+#define CREATOR_REV_INTEL 0x20090903
+
+#define EFI_ACPI_TABLE_VERSION_ALL  (EFI_ACPI_TABLE_VERSION_1_0B|EFI_ACPI_TABLE_VERSION_2_0|EFI_ACPI_TABLE_VERSION_3_0)
+
+#pragma pack()
+
+#endif
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/Dbg2.h b/Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/Dbg2.h
new file mode 100644
index 0000000000..cfaa9247d8
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/Dbg2.h
@@ -0,0 +1,30 @@
+/** @file
+
+  @copyright
+  Copyright 2019 Intel Corporation. <BR>
+
+  SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _DBG2_H_
+#define _DBG2_H_
+
+//
+// Statements that include other files
+//
+#include <IndustryStandard/DebugPort2Table.h>
+
+#pragma pack(1)
+typedef
+struct {
+  EFI_ACPI_DEBUG_PORT_2_DESCRIPTION_TABLE       Table;
+  EFI_ACPI_DBG2_DEBUG_DEVICE_INFORMATION_STRUCT Entry;
+  EFI_ACPI_6_2_GENERIC_ADDRESS_STRUCTURE        BaseAdressRegister;
+  UINT32                                        AddressSize;
+  CHAR8                                         NamespaceString[2];
+
+} DBG2_DEBUG_TABLE;
+#pragma pack()
+
+
+#endif  //_DBG2_H_
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/Facs.h b/Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/Facs.h
new file mode 100644
index 0000000000..56e32c41f5
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/Facs.h
@@ -0,0 +1,37 @@
+/** @file
+  This file describes the contents of the ACPI Firmware ACPI Control
+  Structure (FACS).  Some additional ACPI values are defined in Acpi1_0.h and
+  Acpi2_0.h
+  All changes to the FACS contents should be done in this file.
+
+  @copyright
+  Copyright 1996 - 2015 Intel Corporation. <BR>
+
+  SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _FACS_H
+#define _FACS_H
+
+//
+// Statements that include other files
+//
+#include <IndustryStandard/Acpi.h>
+
+//
+// FACS Definitions
+//
+#define EFI_ACPI_FIRMWARE_WAKING_VECTOR 0x00000000
+#define EFI_ACPI_GLOBAL_LOCK            0x00000000
+
+//
+// Firmware Control Structure Feature Flags are defined in AcpiX.0.h
+//
+#define EFI_ACPI_FIRMWARE_CONTROL_STRUCTURE_FLAGS 0x00000000
+
+#define EFI_ACPI_X_FIRMWARE_WAKING_VECTOR         0x0000000000000000
+
+#define EFI_ACPI_OSPM_FLAGS                       0x00000000
+
+
+#endif
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/Fadt.h b/Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/Fadt.h
new file mode 100644
index 0000000000..004aac350d
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/Fadt.h
@@ -0,0 +1,206 @@
+/** @file
+  This file describes the contents of the ACPI Fixed ACPI Description Table
+  FADT).  Some additional ACPI values are defined in Acpi1_0.h and Acpi2_0.h.
+  All changes to the FADT contents should be done in this file.
+
+  @copyright
+  Copyright 1996 - 2020 Intel Corporation. <BR>
+
+  SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _FADT_H_
+#define _FADT_H_
+
+//
+// Statements that include other files
+//
+#include <IndustryStandard/Acpi.h>
+#include "Platform.h"
+#include <Library/PcdLib.h>
+
+//
+// FADT Definitions
+//
+#define EFI_ACPI_OEM_FADT_REVISION  0x00000000
+//
+// For ACPI 1.0 supprt
+// Harwich sets this to #define EFI_ACPI_INT_MODEL 0x01
+//
+
+/*
+INT_MODEL Field
+The FADT defines the fixed ACPI information that is needed by the operating system as
+defined in section 5.2.5 of the ACPI 1.0 specification. Currently, this table provides a field
+for INT_MODEL, which was intended to be used to report the interrupt mode of the machine.
+This field is ignored by the Microsoft?Windows?2000 and later operating system because the
+Microsoft Windows 98 operating system only supports programmable interrupt controller (PIC) mode.
+This forces system manufacturers (OEMs) who want to support Windows 98 to enter a "0" in the INT_MODEL field.
+This would then preclude using multiple processors on Windows 2000 and later versions.
+Because the INT_MODEL field in the FADT cannot be dynamically updated while the machine is running,
+it cannot be used to report the interrupt mode, and therefore it is ignored by Windows 98,
+and Windows 2000 and later versions.
+http://www.microsoft.com/whdc/system/CEC/ACPI-MP.mspx
+For Watson Creek we set this to 0 and then dynamically update this to 1 in the DSDT tables _PIC method and GPIC field.
+*/
+#define EFI_ACPI_INT_MODEL            0x0
+
+#define EFI_ACPI_PREFERRED_PM_PROFILE 0x04
+
+#define EFI_ACPI_SCI_INT              0x0009
+#define EFI_ACPI_SMI_CMD              0x0
+
+#define EFI_ACPI_ACPI_ENABLE          0x00
+#define EFI_ACPI_ACPI_DISABLE         0x00
+#define EFI_ACPI_S4_BIOS_REQ          0x00
+#define EFI_ACPI_CST_CNT              0x00
+
+#define EFI_ACPI_PSTATE_CNT           0x00
+#define EFI_ACPI_GPE1_BASE            (EFI_ACPI_GPE1_BLK_BIT_WIDTH / 2)
+#define EFI_ACPI_P_LVL2_LAT           0x0065
+#define EFI_ACPI_P_LVL3_LAT           0x03E9
+//
+// #define EFI_ACPI_FLUSH_SIZE           0x0400
+//
+#define EFI_ACPI_FLUSH_SIZE 0x0000
+//
+// #define EFI_ACPI_FLUSH_STRIDE         0x0010
+//
+#define EFI_ACPI_FLUSH_STRIDE 0x0000
+#define EFI_ACPI_DUTY_OFFSET  0x01
+//
+// #define EFI_ACPI_DUTY_OFFSET          0x00
+//
+#define EFI_ACPI_DUTY_WIDTH 0x00
+
+#define EFI_ACPI_DAY_ALRM   0x0D
+#define EFI_ACPI_MON_ALRM   0x00
+#define EFI_ACPI_CENTURY    0x32
+
+//
+// IA-PC Boot Architecture Flags, see ACPI 2.0 table specification and Acpi6_2.h
+// No legacy KBC and legcay devices other reported in ASL code
+//
+// #define EFI_ACPI_IAPC_BOOT_ARCH (EFI_ACPI_6_2_LEGACY_DEVICES | EFI_ACPI_6_2_8042)
+//
+//#define EFI_ACPI_IAPC_BOOT_ARCH EFI_ACPI_6_2_8042
+#define EFI_ACPI_OS_ASPM_DISABLE        (1 << 4)
+
+#define EFI_ACPI_IAPC_BOOT_ARCH         EFI_ACPI_6_2_8042 | EFI_ACPI_OS_ASPM_DISABLE
+
+//
+// Fixed Feature Flags, see ACPI 6.2 table specification and Acpi6_2.h
+//
+#define EFI_ACPI_FIXED_FEATURE_FLAGS  (EFI_ACPI_6_2_RESET_REG_SUP | \
+                                      EFI_ACPI_6_2_RTC_S4 | \
+                                      EFI_ACPI_6_2_SLP_BUTTON | \
+                                      EFI_ACPI_6_2_WBINVD | \
+                                      EFI_ACPI_6_2_PROC_C1 \
+          )
+
+//
+// PM1A Event Register Block Generic Address Information
+//
+#define EFI_ACPI_PM1A_EVT_BLK_ADDRESS_SPACE_ID  EFI_ACPI_6_2_SYSTEM_IO
+#define EFI_ACPI_PM1A_EVT_BLK_BIT_WIDTH         0x20
+#define EFI_ACPI_PM1A_EVT_BLK_BIT_OFFSET        0x00
+#define EFI_ACPI_PM1A_EVT_BLK_ADDRESS           (FixedPcdGet32 (PcdEfiAcpiPm1aEvtBlkAddress))
+
+//
+// PM1B Event Register Block Generic Address Information
+//
+#define EFI_ACPI_PM1B_EVT_BLK_ADDRESS_SPACE_ID  EFI_ACPI_6_2_SYSTEM_IO
+#define EFI_ACPI_PM1B_EVT_BLK_BIT_WIDTH         0x00
+#define EFI_ACPI_PM1B_EVT_BLK_BIT_OFFSET        0x00
+#define EFI_ACPI_PM1B_EVT_BLK_ADDRESS           0x00000000
+
+//
+// PM1A Control Register Block Generic Address Information
+//
+#define EFI_ACPI_PM1A_CNT_BLK_ADDRESS_SPACE_ID  EFI_ACPI_6_2_SYSTEM_IO
+#define EFI_ACPI_PM1A_CNT_BLK_BIT_WIDTH         0x10
+#define EFI_ACPI_PM1A_CNT_BLK_BIT_OFFSET        0x00
+#define EFI_ACPI_PM1A_CNT_BLK_ADDRESS           (EFI_ACPI_PM1A_EVT_BLK_ADDRESS + 0x04)
+
+//
+// PM1B Control Register Block Generic Address Information
+//
+#define EFI_ACPI_PM1B_CNT_BLK_ADDRESS_SPACE_ID  EFI_ACPI_6_2_SYSTEM_IO
+#define EFI_ACPI_PM1B_CNT_BLK_BIT_WIDTH         0x00
+#define EFI_ACPI_PM1B_CNT_BLK_BIT_OFFSET        0x00
+#define EFI_ACPI_PM1B_CNT_BLK_ADDRESS           0x00
+
+//
+// PM2 Control Register Block Generic Address Information
+//
+#define EFI_ACPI_PM2_CNT_BLK_ADDRESS_SPACE_ID EFI_ACPI_6_2_SYSTEM_IO
+#define EFI_ACPI_PM2_CNT_BLK_BIT_WIDTH        0x08
+#define EFI_ACPI_PM2_CNT_BLK_BIT_OFFSET       0x00
+#define EFI_ACPI_PM2_CNT_BLK_ADDRESS          (EFI_ACPI_PM1A_EVT_BLK_ADDRESS + 0x50)
+
+//
+// Power Management Timer Control Register Block Generic Address
+// Information
+//
+#define EFI_ACPI_PM_TMR_BLK_ADDRESS_SPACE_ID  EFI_ACPI_6_2_SYSTEM_IO
+#define EFI_ACPI_PM_TMR_BLK_BIT_WIDTH         0x20
+#define EFI_ACPI_PM_TMR_BLK_BIT_OFFSET        0x00
+#define EFI_ACPI_PM_TMR_BLK_ADDRESS           (EFI_ACPI_PM1A_EVT_BLK_ADDRESS + 0x08)
+
+//
+// General Purpose Event 0 Register Block Generic Address
+// Information
+//
+#define EFI_ACPI_GPE0_BLK_ADDRESS_SPACE_ID  EFI_ACPI_6_2_SYSTEM_IO
+#define EFI_ACPI_GPE0_BLK_BIT_WIDTH         0x100  // size of R_PCH_ACPI_GPE0_STS_127_96 + R_PCH_ACPI_GPE0_EN_127_96 (2*0x80 = 0x100)
+#define EFI_ACPI_GPE0_BLK_BIT_OFFSET        0x00
+#define EFI_ACPI_GPE0_BLK_ADDRESS           (EFI_ACPI_PM1A_EVT_BLK_ADDRESS + 0x80)
+
+//
+// General Purpose Event 1 Register Block Generic Address
+// Information
+//
+#define EFI_ACPI_GPE1_BLK_ADDRESS_SPACE_ID  EFI_ACPI_6_2_SYSTEM_IO
+#define EFI_ACPI_GPE1_BLK_BIT_WIDTH         0x0
+#define EFI_ACPI_GPE1_BLK_BIT_OFFSET        0x0
+#define EFI_ACPI_GPE1_BLK_ADDRESS           0x0
+//
+// Reset Register Generic Address Information
+//
+#define EFI_ACPI_RESET_REG_ADDRESS_SPACE_ID EFI_ACPI_6_2_SYSTEM_IO
+#define EFI_ACPI_RESET_REG_BIT_WIDTH        0x08
+#define EFI_ACPI_RESET_REG_BIT_OFFSET       0x00
+#define EFI_ACPI_RESET_REG_ADDRESS          0x00000CF9
+#define EFI_ACPI_RESET_VALUE                0x06
+
+//
+// Number of bytes decoded by PM1 event blocks (a and b)
+//
+#define EFI_ACPI_PM1_EVT_LEN  ((EFI_ACPI_PM1A_EVT_BLK_BIT_WIDTH + EFI_ACPI_PM1B_EVT_BLK_BIT_WIDTH) / 8)
+
+//
+// Number of bytes decoded by PM1 control blocks (a and b)
+//
+#define EFI_ACPI_PM1_CNT_LEN  ((EFI_ACPI_PM1A_CNT_BLK_BIT_WIDTH + EFI_ACPI_PM1B_CNT_BLK_BIT_WIDTH) / 8)
+
+//
+// Number of bytes decoded by PM2 control block
+//
+#define EFI_ACPI_PM2_CNT_LEN  (EFI_ACPI_PM2_CNT_BLK_BIT_WIDTH / 8)
+
+//
+// Number of bytes decoded by PM timer block
+//
+#define EFI_ACPI_PM_TMR_LEN (EFI_ACPI_PM_TMR_BLK_BIT_WIDTH / 8)
+
+//
+// Number of bytes decoded by GPE0 block
+//
+#define EFI_ACPI_GPE0_BLK_LEN (EFI_ACPI_GPE0_BLK_BIT_WIDTH / 8)
+
+//
+// Number of bytes decoded by GPE1 block
+//
+#define EFI_ACPI_GPE1_BLK_LEN (EFI_ACPI_GPE1_BLK_BIT_WIDTH / 8)
+
+#endif
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/Hmat.h b/Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/Hmat.h
new file mode 100644
index 0000000000..ad6684acce
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/Hmat.h
@@ -0,0 +1,88 @@
+/** @file
+
+  @copyright
+  Copyright 2016 - 2020 Intel Corporation. <BR>
+
+  SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _HMAT_HMAT_H_
+#define _HMAT_HMAT_H_
+
+#include <IndustryStandard/Acpi.h>
+#include <UncoreCommonIncludes.h>
+#include "Platform.h"
+#include "Msars.h"
+#include "Sllbis.h"
+#include "Mscis.h"
+
+#define EFI_ACPI_HETEROGENEOUS_MEMORY_ATTRIBUTE_TABLE_REVISION 0x01
+#define EFI_ACPI_OEM_HMAT_REVISION  0x00000001
+
+#define EFI_HETEROGENEOUS_MEMORY_ATTRIBUTE_TABLE_SIGNATURE  SIGNATURE_32('H', 'M', 'A', 'T')
+#define MEMORY_SUBSYSTEM_ADDRESS_RANGE_STRUCTURE_TYPE 0
+#define SYSTEM_LOCALITY_LATENCY_BANDWIDTH_INFORMATION_STRUCTURE_TYPE 1
+#define MEMORY_SIDE_CACHE_INFORMATION_STRUCTURE_TYPE 2
+
+#define EFI_ACPI_HMAT_MSARS_COUNT  (MC_MAX_NODE * MAX_CRS_ENTRIES_PER_NODE)
+#define EFI_ACPI_HMAT_LBIS_COUNT   (EFI_ACPI_HMAT_MAX_SLLBIS_DATA_TYPES * MAX_HMAT_MEMORY_HIERACHY_LEVELS)
+#define EFI_ACPI_HMAT_MSCIS_COUNT  (MC_MAX_NODE * MAX_CRS_ENTRIES_PER_NODE)
+
+
+#define HMAT_BW_BASE_UNIT      1024 // 1024 MB/S
+#define HMAT_LATENCY_BASE_UNIT 1    // 1ns
+
+#define HBM_4_NODES_CASE  4
+#define HBM_2_NODES_CASE  2
+#define HBM_1_NODE_CASE   1
+
+//
+// In HBM as Cache mode, Cache Flags are only for Last Level of Cache (Flags = 1), and 1st Level of Cache (Flags = 2).
+// So Flag = 0 should be skipped.
+//
+#define HMAT_HBM_CACHE_FLAG_OFFSET 1
+
+#pragma pack(1)
+typedef enum {
+  TypeFlatMemoryMode        = 1,
+  TypeCacheMemoryMode       = 2,
+  TypeHybridMemoryMode      = 3,
+} LBIS_MEMORY_FLAGS_TYPE;
+
+typedef struct {
+  UINT8   Valid;
+  UINT32  ElementId;
+  UINT64  MemMapIndexMap;
+  UINT8   Cacheable;
+  UINT64  MemorySideCacheSize;
+  UINT16  NumSmbiosHandles;
+  UINT16  SmbiosHandles[MAX_TYPE17_CACHE_DEVICES];
+  UINT8   PhysicalSocketId;
+} MEMORY_DOMAIN_LIST_INFO;
+
+typedef struct {
+  UINT32                   ProcessorDomainNumber;
+  UINT32                   MemoryDomainNumber;
+  UINT16                   ProcessorDomainList [EFI_ACPI_HMAT_NUMBER_OF_PROCESSOR_DOMAINS];
+  MEMORY_DOMAIN_LIST_INFO  MemoryDomainList [EFI_ACPI_HMAT_NUMBER_OF_MEMORY_DOMAINS];
+  UINT8                    SncEnabled;
+  UINT8                    SncNumOfCluster;
+  UINT8                    VirtualNumaEnabled;
+  UINT8                    VirtualNumOfCluster;
+  UINT8                    ProcessorDomainSocketIdList [EFI_ACPI_HMAT_NUMBER_OF_PROCESSOR_DOMAINS];
+} HMAT_PROXIMITY_DOMAIN_DATA_STRUCTURE;
+
+typedef struct {
+  EFI_ACPI_DESCRIPTION_HEADER Header;
+  UINT32 Reserved; // To make the structures 8 byte aligned
+} EFI_ACPI_HETEROGENEOUS_MEMORY_ATTRIBUTE_TABLE_HEADER;
+
+typedef struct {
+  EFI_ACPI_HETEROGENEOUS_MEMORY_ATTRIBUTE_TABLE_HEADER HmatHeader;
+  MEMORY_SUBSYSTEM_ADDRESS_RANGE_STRUCTURE Msars[EFI_ACPI_HMAT_MSARS_COUNT];
+  LATENCY_BANDWIDTH_INFO_STRUCTURE Lbis[EFI_ACPI_HMAT_LBIS_COUNT];
+  MEMORY_SIDE_CACHE_INFORMATION_STRUCTURE MemSideCache[EFI_ACPI_HMAT_MSCIS_COUNT];
+} EFI_ACPI_HETEROGENEOUS_MEMORY_ATTRIBUTE_TABLE;
+#pragma pack()
+
+#endif /* _HMAT_H_ */
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/Hpet.h b/Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/Hpet.h
new file mode 100644
index 0000000000..a3b9ef256a
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/Hpet.h
@@ -0,0 +1,43 @@
+/** @file
+  This file describes the contents of the ACPI High Precision Event Timer Description Table
+  HPET).  Some additional ACPI values are defined in Acpi1_0.h, Acpi2_0.h, and Acpi3_0.h
+  All changes to the HPET contents should be done in this file.
+
+  @copyright
+  Copyright 1999 - 2019 Intel Corporation. <BR>
+
+  SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _HPET_H_
+#define _HPET_H_
+
+//
+// Statements that include other files
+//
+#include <IndustryStandard/Acpi.h>
+#include <IndustryStandard/HighPrecisionEventTimerTable.h>
+
+//
+// HPET Definitions
+//
+#define EFI_ACPI_OEM_HPET_REVISION    0x00000001
+
+#define EFI_ACPI_EVENT_TIMER_BLOCK_ID 0x8086A701
+
+//
+// Event Timer Block Base Address Information
+//
+#define EFI_ACPI_EVENT_TIMER_BLOCK_ADDRESS_SPACE_ID EFI_ACPI_6_2_SYSTEM_MEMORY
+#define EFI_ACPI_EVENT_TIMER_BLOCK_BIT_WIDTH        0x00
+#define EFI_ACPI_EVENT_TIMER_BLOCK_BIT_OFFSET       0x00
+#define EFI_ACPI_EVENT_TIMER_ACCESS_SIZE            0x00
+#define EFI_ACPI_EVENT_TIMER_BLOCK_ADDRESS          0x00000000FED00000
+
+#define EFI_ACPI_HPET_NUMBER                        0x00
+
+#define EFI_ACPI_MIN_CLOCK_TICK                     0x0080
+
+#define EFI_ACPI_HPET_ATTRIBUTES                    0x00
+
+#endif
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/Mcfg.h b/Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/Mcfg.h
new file mode 100644
index 0000000000..7277961baa
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/Mcfg.h
@@ -0,0 +1,58 @@
+/** @file
+  ACPI Memory mapped configuration space base address Description Table
+  implementation, based on PCI Firmware Specification Revision 3.0 final draft,
+  downloadable at http://www.pcisig.com/home
+
+  @copyright
+  Copyright 1999 - 2019 Intel Corporation. <BR>
+
+  SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _MCFG_H_
+#define _MCFG_H_
+
+//
+// Statements that include other files
+//
+#include <IndustryStandard/Acpi.h>
+#include <IndustryStandard/MemoryMappedConfigurationSpaceAccessTable.h>
+#include "Platform.h"
+//
+// "MCFG" Static Resource Affinity Table
+//
+#define EFI_ACPI_6_2_MEMORY_MAPPED_CONFIGURATION_BASE_ADDRESS_TABLE_SIGNATURE 0x4746434D
+
+//
+// MCFG Definitions, see specification for details.
+//
+#define EFI_ACPI_OEM_MCFG_REVISION  0x00000001
+
+//
+// Define the number of each table type.
+// This is where the table layout is modified.
+//
+#define EFI_ACPI_MEMORY_MAPPED_ENHANCED_CONFIGURATION_BASE_ADDRESS_STRUCTURE_COUNT MAX_SOCKET
+
+//
+// MCFG Table definition.  The table must be defined in a platform
+// specific manner.
+//
+//
+// Ensure proper structure formats
+//
+#pragma pack(1)
+
+typedef struct {
+  EFI_ACPI_MEMORY_MAPPED_CONFIGURATION_BASE_ADDRESS_TABLE_HEADER        Header;
+
+#if EFI_ACPI_MEMORY_MAPPED_ENHANCED_CONFIGURATION_BASE_ADDRESS_STRUCTURE_COUNT > 0
+  EFI_ACPI_MEMORY_MAPPED_ENHANCED_CONFIGURATION_SPACE_BASE_ADDRESS_ALLOCATION_STRUCTURE  Segment[
+    EFI_ACPI_MEMORY_MAPPED_ENHANCED_CONFIGURATION_BASE_ADDRESS_STRUCTURE_COUNT];
+#endif
+
+} EFI_ACPI_MEMORY_MAPPED_CONFIGURATION_BASE_ADDRESS_TABLE;
+
+#pragma pack()
+
+#endif // _MCFG_H_
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/Migt.h b/Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/Migt.h
new file mode 100644
index 0000000000..058ae67717
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/Migt.h
@@ -0,0 +1,57 @@
+/** @file
+  This file describes the contents of the MIGT ACPI table.
+
+  @copyright
+  Copyright 1999 - 2019 Intel Corporation. <BR>
+
+  SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _MIGT_H_
+#define _MIGT_H_
+
+//
+// Statements that include other files
+//
+#include <IndustryStandard/Acpi.h>
+
+//
+// MIGT ACPI structure
+//
+typedef struct {
+
+  EFI_ACPI_DESCRIPTION_HEADER             Header;
+  // MIGT Specific Entries
+  EFI_ACPI_6_2_GENERIC_ADDRESS_STRUCTURE  ControlRegister;
+  UINT32                                  ControlRegisterValue;
+  EFI_ACPI_6_2_GENERIC_ADDRESS_STRUCTURE  ActionRegion;
+
+} EFI_MIGT_ACPI_DESCRIPTION_TABLE;
+
+
+//
+// MIGT ACPI Definitions
+//
+#define MIGT_SMI_SERVICE_ID                       0xFD        // Door Bell
+
+#define EFI_MIGT_ACPI_TABLE_SIGNATURE             SIGNATURE_32('M','I','G','T')
+#define EFI_MIGT_ACPI_DESCRIPTION_TABLE_REVISION  0x01
+#define EFI_MIGT_ACPI_OEM_REVISION                0x00000000
+
+//
+// MIGT Control Register Generic Address Information
+//
+#define EFI_MIGT_CR_ACPI_ADDRESS_SPACE_ID         EFI_ACPI_6_2_SYSTEM_IO
+#define EFI_MIGT_CR_ACPI_REGISTER_BIT_WIDTH       0x8
+#define EFI_MIGT_CR_ACPI_REGISTER_BIT_OFFSET      0x0
+#define EFI_MIGT_CR_ACPI_SMI_ADDRESS              0xB2
+
+//
+// MIGT Action Region Generic Address Information
+//
+#define EFI_MIGT_AR_ACPI_ADDRESS_SPACE_ID         EFI_ACPI_6_2_SYSTEM_MEMORY
+#define EFI_MIGT_AR_ACPI_REGISTER_BIT_WIDTH       64
+#define EFI_MIGT_AR_ACPI_REGISTER_BIT_OFFSET      0x0
+#define EFI_MIGT_AR_ACPI_MEMORY_ADDRESS           0x0
+
+#endif
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/Msars.h b/Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/Msars.h
new file mode 100644
index 0000000000..a088d66ea5
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/Msars.h
@@ -0,0 +1,56 @@
+/** @file
+
+  @copyright
+  Copyright 2016 - 2018 Intel Corporation. <BR>
+
+  SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _MSARS_H_
+#define _MSARS_H_
+
+#include <Uefi/UefiBaseType.h>
+
+#pragma pack(1)
+typedef struct {
+  UINT16 ProcessorDomainValid:1;
+  UINT16 MemoryDomainValid:1;
+  UINT16 ReservationHint:1;
+  UINT16 Reserved_15_3:13;
+} MSARS_FLAGS_BITS;
+
+typedef union {
+  UINT16 Value;
+  MSARS_FLAGS_BITS Bits;
+} MSARS_FLAGS;
+
+typedef struct {
+  UINT16 Type;
+  UINT16 Reserved_2_4;
+  UINT32 Length;
+  MSARS_FLAGS Flags;
+  UINT16 Reserved_10_12;
+  UINT32 ProcessorProximityDomain;
+  UINT32 MemoryProximityDomain;
+  UINT32 Reserved_20_24;
+  UINT64 AddrBase; //System Physical Address Range Base
+  UINT64 AddrLength; //System Physical Address Range Length
+} MEMORY_SUBSYSTEM_ADDRESS_RANGE_STRUCTURE;
+#pragma pack()
+
+// MSARS_INIT Macro
+// Used to initialize MEMORY_SUBSYSTEM_ADDRESS_RANGE_STRUCTURE
+#define MSARS_INIT() {                                   \
+  (UINT16) MEMORY_SUBSYSTEM_ADDRESS_RANGE_STRUCTURE_TYPE,     \
+  (UINT16) 0,       \
+  (UINT32) sizeof(MEMORY_SUBSYSTEM_ADDRESS_RANGE_STRUCTURE),  \
+  {(UINT16) 0},     \
+  (UINT16) 0,   \
+  (UINT32) 0,       \
+  (UINT32) 0,       \
+  (UINT32) 0,       \
+  (UINT64) 0,       \
+  (UINT64) 0,       \
+  },
+
+#endif /* _MSARS_H_ */
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/Mscis.h b/Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/Mscis.h
new file mode 100644
index 0000000000..44d80910e2
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/Mscis.h
@@ -0,0 +1,84 @@
+/** @file
+
+  @copyright
+  Copyright 2016 - 2018 Intel Corporation. <BR>
+
+  SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _MSCIS_H_
+#define _MSCIS_H_
+
+#include <Uefi/UefiBaseType.h>
+
+#define EFI_ACPI_HMAT_CACHE_LEVEL_NONE  0
+#define EFI_ACPI_HMAT_ONE_LEVEL_CACHE   1
+#define EFI_ACPI_HMAT_TWO_LEVEL_CACHE   2
+#define EFI_ACPI_HMAT_THREE_LEVEL_CACHE 3
+
+#define EFI_ACPI_HMAT_CACHE_ASSOCIATIVITY_NONE                    0
+#define EFI_ACPI_HMAT_CACHE_ASSOCIATIVITY_DIRECT_MAPPED           1
+#define EFI_ACPI_HMAT_CACHE_ASSOCIATIVITY_COIMPLEX_CACHE_INDEXING 2
+
+#define EFI_ACPI_HMAT_WRITE_POLICY_NONE 0
+#define EFI_ACPI_HMAT_WRITE_POLICY_WB   1
+#define EFI_ACPI_HMAT_WRITE_POLICY_WT   2
+
+#define HBM_CACHE_LINE_SIZE       72
+#define DDR4_CACHE_LINE_SIZE      64
+
+//
+// MAX_CH    = MAX_IMC * MAX_MC_CH
+// MAX_IMC   = Maximum memory controllers per socket
+// MAX_MC_CH = Max number of channels per MC
+// For each channel, 1 DDR can act as 2LM cache. This is the maximum number of cache devices per memory domain
+//
+#define MAX_TYPE17_CACHE_DEVICES  MAX_CH
+
+#pragma pack(1)
+typedef struct {
+  UINT32 TotalCacheLevels:4;
+  UINT32 CacheLevel:4;
+  UINT32 CacheAssociativity:4;
+  UINT32 WritePolicy:4;
+  UINT32 CacheLineSize:16;
+} CACHE_ATTRIBUTES_BITS;
+
+typedef union {
+  UINT32 Data;
+  CACHE_ATTRIBUTES_BITS Bits;
+} CACHE_ATTRIBUTES;
+
+typedef struct {
+  UINT16 Type;
+  UINT16 Reserved_2_4;
+  UINT32 Length;
+  UINT32 MemoryProximityDomain;
+  UINT32 Reserved_12_16;
+  UINT64 MemorySideCacheSize;
+  CACHE_ATTRIBUTES CacheAttributes;
+  UINT16 Reserved_28_30;
+  UINT16 NumSmbiosHandles;
+  UINT16 SmbiosHandles [MAX_TYPE17_CACHE_DEVICES];
+} MEMORY_SIDE_CACHE_INFORMATION_STRUCTURE;
+#pragma pack()
+
+// MSCIS_INIT Macro
+// Used to initialize MEMORY_SIDE_CACHE_INFORMATION_STRUCTURE
+#define MSCIS_INIT() {                                       \
+  (UINT16) MEMORY_SIDE_CACHE_INFORMATION_STRUCTURE_TYPE,     \
+  (UINT16) 0,   \
+  (UINT32) sizeof(MEMORY_SIDE_CACHE_INFORMATION_STRUCTURE),  \
+  (UINT32) 0,   \
+  (UINT32) 0,   \
+  (UINT64) 0,   \
+  {(UINT32) 0},   \
+  (UINT16) 0,   \
+  (UINT16) 0,   \
+  },
+/*
+ SMBIOS handles not used for 2LM.  Will be added for HBM
+  {(UINT16) 0}, \
+  },
+*/
+#endif /* _MSCIS_H_ */
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/Msct.h b/Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/Msct.h
new file mode 100644
index 0000000000..31c6e0f580
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/Msct.h
@@ -0,0 +1,58 @@
+/** @file
+  This file describes the contents of the ACPI Maximum System Characteristics Table (MSCT).
+  Some additional ACPI values are defined in Acpi1_0.h, Acpi2_0.h, and Acpi3_0.h.
+  All changes to the MSCT contents should be done in this file.
+
+  @copyright
+  Copyright 2019 Intel Corporation. <BR>
+
+  SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _MSCT_H_
+#define _MSCT_H_
+
+//
+// Statements that include other files
+//
+#include <IndustryStandard/Acpi.h>
+#include <Platform.h>
+#include <UncoreCommonIncludes.h>
+
+//
+// MSCT Definitions, see specification for details.
+//
+#ifndef EFI_ACPI_6_2_MAXIMUM_SYSTEM_CHARACTERISTICS_TABLE_SIGNATURE
+#define EFI_ACPI_6_2_MAXIMUM_SYSTEM_CHARACTERISTICS_TABLE_SIGNATURE       0x5443534D
+#endif
+#define EFI_ACPI_MAXIMUM_SYSTEM_CHARACTERISTICS_TABLE_REVISION            0x01
+#define EFI_ACPI_OEM_MSCT_REVISION                                        0x00000001
+#define EFI_ACPI_MAXIMUM_PROXIMITY_DOMAIN_INFORMATION_STRUCTURE_REVISION  0x01
+
+
+//
+// MSCT Table definition
+//
+#pragma pack(1)
+
+typedef struct {
+  UINT8   Revision;
+  UINT8   Length;
+  UINT32  ProxDomRangeLow;
+  UINT32  ProxDomRangeHigh;
+  UINT32  MaxProcessorCapacity;
+  UINT64  MaxMemoryCapacity;
+} EFI_ACPI_MAXIMUM_PROXIMITY_DOMAIN_INFORMATION_STRUCTURE;
+
+typedef struct {
+  EFI_ACPI_DESCRIPTION_HEADER                              Header;
+  UINT32                                                   OffsetProxDomInfo;
+  UINT32                                                   MaxNumProxDom;
+  UINT32                                                   MaxNumClockDom;
+  UINT64                                                   MaxPhysicalAddress;
+  EFI_ACPI_MAXIMUM_PROXIMITY_DOMAIN_INFORMATION_STRUCTURE  ProxDomInfoStructure[MAX_SOCKET];
+} EFI_ACPI_MAXIMUM_SYSTEM_CHARACTERISTICS_TABLE;
+
+#pragma pack()
+
+#endif  //_MSCT_H_
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/Nfit.h b/Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/Nfit.h
new file mode 100644
index 0000000000..5ea51b6d59
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/Nfit.h
@@ -0,0 +1,50 @@
+/** @file
+
+  @copyright
+  Copyright 1999 - 2019 Intel Corporation. <BR>
+
+  SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+//
+// The version of NvDimm F/W Interface Table (Nfit) supported has been updated to ASWG-ECR-Draft4-RC6_93.doc
+// This file contains definitions for Acpi side for the Nfit creation and publication of Nfit tables.
+// A BIG NOTE: When ever the NVDIMM_FW_INTERFACE_TABLE defined either here or what is in Nfit.h of CrystalRidge Protocol driver
+// changes, the same changes need to relect in both the files.
+
+#ifndef _NFIT_DEFS_H_
+#define _NFIT_DEFS_H_
+
+#include <IndustryStandard/Acpi62.h>
+
+#define NVDIMM_FW_INTERFACE_TABLE_SIGNATURE EFI_ACPI_6_2_NVDIMM_FIRMWARE_INTERFACE_TABLE_STRUCTURE_SIGNATURE
+#define NVDIMM_FW_INTERFACE_TABLE_REVISION  EFI_ACPI_6_2_NVDIMM_FIRMWARE_INTERFACE_TABLE_REVISION
+
+#define MAX_NFIT_SIZE                       0x18000
+
+
+//
+// NVDIMM Firmware Interface Table struct
+// IMPORTANT NOTE: Num of various sub-table fields of the Nfit has been eliminated in the latest Nfit Spec (0.8k)
+// And also since there is NO memory allocation scheme for Nfit (all globals), Adding a buffer NfitTables with the,
+// max nfit size currently set to 4k. Will need to watch if we will ever overrun this buffer. It is expected that
+// Nfit parser will need to parse the NfitTables field to understand the various other Nfit Tables in this buffer
+// based on the Type and Length field of these tables.
+//
+#pragma pack(1)
+typedef struct _NVDIMM_FW_INT_TBL {
+  UINT32       Signature;                    // 'NFIT' should be the signature for this table
+  UINT32       Length;                       // Length in bytes fir the entire table
+  UINT8        Revision;                     // Revision # of this table, initial is '1'
+  UINT8        Checksum;                     // Entire Table Checksum must sum to 0
+  UINT8        OemID[6];                     // OemID
+  UINT8        OemTblID[8];                  // Should be Manufacturer's Model #
+  UINT32       OemRevision;                  // Oem Revision of for Supplied OEM Table ID
+  UINT32       CreatorID;                    // Vendor ID of the utility that is creating this table
+  UINT32       CreatorRev;                   // Revision of utility that is creating this table
+  UINT32       Reserved;
+  UINT8        NfitTables[MAX_NFIT_SIZE];    // See Description above (IMPORTANT).
+} NVDIMM_FW_INTERFACE_TABLE;
+#pragma pack()
+
+#endif  // _NFIT_DEFS_H_
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/Pcat.h b/Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/Pcat.h
new file mode 100644
index 0000000000..ceb0684f17
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/Pcat.h
@@ -0,0 +1,45 @@
+/** @file
+  Pcat.h
+
+  @copyright
+  Copyright 2014 Intel Corporation. <BR>
+
+  SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _PCAT_DEFS_H_
+#define _PCAT_DEFS_H_
+
+#include <Uefi/UefiBaseType.h>
+
+/// @brief PCAT Signature to put in table header
+#define NVDIMM_PLATFORM_CONFIG_ATTRIBUTE_TABLE_SIGNATURE  SIGNATURE_32('P', 'C', 'A', 'T')
+
+#define NVDIMM_PLATFORM_CONFIG_ATTRIBUTE_TABLE_REVISION   0x11
+
+#define MAX_PCAT_SIZE                                     0x200
+
+typedef struct {
+  UINT32                      Signature;      // 'PCAT' should be the signature for this table
+  UINT32                      Length;         // Length in bytes for the entire table
+  UINT8                       Revision;       // Revision # of this table, initial is '1'
+  UINT8                       Checksum;       // Entire Table Checksum must sum to 0
+  UINT8                       OemID[6];       // OemID
+  UINT8                       OemTblID[8];    // Should be Manufacturer's Model #
+  UINT32                      OemRevision;    // Oem Revision of for Supplied OEM Table ID
+  UINT32                      CreatorID;      // Vendor ID of the utility that is creating this table
+  UINT32                      CreatorRev;     // Revision of utility that is creating this table
+  UINT32                      Reserved;       // Alignement for size modulo 8 = 0
+  UINT8                       PCATTables[MAX_PCAT_SIZE];
+} NVDIMM_PLATFORM_CONFIG_ATTRIBUTE_TABLE, *PNVDIMM_PLATFORM_CONFIG_ATTRIBUTE_TABLE;
+
+/// @brief Layout of SSKU Attribute Extension Table header
+typedef struct {
+  UINT16       Type;                          // Type for Mgmt Info Struct, type should be 3
+  UINT16       Length;                        // Length in Bytes for Entire SSKU Attribute Extension Table size.
+  UINT16       Rsvd;
+  UINT16       VendorID;                      // Vendor ID
+  EFI_GUID     Guid;                          // Intel defined SSKU Attribute Extension Table. guid: F93032E5-B045-40ef-91C8-F02B06AD948D
+} NVDIMM_SSKU_ATTR_EXT_TABLE, *PNVDIMM_SSKU_ATTR_EXT_TABLE;
+
+#endif //_PCAT_DEFS_H_
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/Pmtt.h b/Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/Pmtt.h
new file mode 100644
index 0000000000..923483f2da
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/Pmtt.h
@@ -0,0 +1,120 @@
+/** @file
+
+  @copyright
+  Copyright 2016 - 2018 Intel Corporation. <BR>
+
+  SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _ACPI_PMTT_H_
+#define _ACPI_PMTT_H_
+
+//
+// Includes
+//
+#include <IndustryStandard/Acpi.h>
+#include <IndustryStandard/SmBios.h>
+#include <Platform.h>
+#include <UncoreCommonIncludes.h>
+
+//
+// PMTT Definitions
+//
+#define ACPI_PMTT_TABLE_SIGNATURE     0x54544D50
+#define ACPI_PMTT_TABLE_REVISION      0x02
+#define ACPI_PMTT_OEM_REVISION        1
+
+#define PMTT_TOP_LEVEL_AGGREGATOR_DEVICE            0x0001
+#define PMTT_PHYSICAL_ELEMENT_OF_TOPOLOGY           0x0002
+#define PMTT_AEP_DIMM                               0x0004
+
+#define ACPI_TOP_LEVEL_SOCKET                         0x00
+#define ACPI_TOP_LEVEL_IMC                            0x01
+#define PHYSICAL_COMPONENT_IDENTIFIER_TYPE_DIMM       0x02
+#define ACPI_TOP_LEVEL_VENDOR_SPECIFIC_DEVICE         0xFF
+
+// PMTT GUID variables
+#define PMTT_TYPE_DIE_GUID { 0xA2555053, 0xCDE4, 0x40A5, {0x80, 0x76, 0x00, 0xE3, 0xAB, 0xA6, 0xCA, 0xA7} }
+#define PMTT_TYPE_CHANNEL_GUID { 0x23BF9281, 0xE69c, 0x471F, {0xB2, 0x99, 0xB0, 0x98, 0x2B, 0x2F, 0x55, 0xF9} }
+#define PMTT_TYPE_SLOT_GUID { 0xFDCB2a68, 0xC203, 0x4312, {0xB2, 0x91, 0xB8, 0xE8, 0x62, 0x86, 0xC2, 0xC1} }
+
+typedef struct {
+  UINT8                                     Type;
+  UINT8                                     Rsvd;
+  UINT16                                    Length;
+  UINT16                                    Flag;
+  UINT16                                    Rsvd1;
+  UINT32                                    NumOfMemoryDevices;
+  UINT32                                    SmbiosHandle;
+} ACPI_PMTT_DIMM_DEVICE;
+
+typedef struct {
+  UINT8                                   Type;
+  UINT8                                   Rsvd;
+  UINT16                                  Length;
+  UINT16                                  Flag;
+  UINT16                                  Rsvd1;
+  UINT32                                  NumOfMemoryDevices;
+  GUID                                    TypeUuid;
+  UINT16                                  SlotId;
+  UINT16                                  Rsvd2;
+  ACPI_PMTT_DIMM_DEVICE                   Dimm;
+} ACPI_PMTT_SLOT_DEVICE;
+
+typedef struct {
+  UINT8                                   Type;
+  UINT8                                   Rsvd;
+  UINT16                                  Length;
+  UINT16                                  Flag;
+  UINT16                                  Rsvd1;
+  UINT32                                  NumOfMemoryDevices;
+  GUID                                    TypeUuid;
+  UINT16                                  ChannelId;
+  UINT16                                  Rsvd2;
+  ACPI_PMTT_SLOT_DEVICE                   Slot[MAX_DIMM];
+} ACPI_PMTT_CHANNEL_DEVICE;
+
+typedef struct {
+  UINT8                                     Type;
+  UINT8                                     Rsvd;
+  UINT16                                    Length;
+  UINT16                                    Flag;
+  UINT16                                    Rsvd1;
+  UINT32                                    NumOfMemoryDevices;
+  UINT16                                    ImcId;
+  UINT16                                    Rsvd2;
+  ACPI_PMTT_CHANNEL_DEVICE                  Channel[MAX_MC_CH];
+} ACPI_PMTT_IMC_DEVICE;
+
+typedef struct {
+  UINT8                                   Type;
+  UINT8                                   Rsvd;
+  UINT16                                  Length;
+  UINT16                                  Flag;
+  UINT16                                  Rsvd1;
+  UINT32                                  NumOfMemoryDevices;
+  GUID                                    TypeUuid;
+  UINT16                                  DieId;
+  UINT16                                  Rsvd2;
+  ACPI_PMTT_IMC_DEVICE                    Imc[MAX_IMC];
+} ACPI_PMTT_DIE_DEVICE;
+
+typedef struct {
+  UINT8                                     Type;
+  UINT8                                     Rsvd;
+  UINT16                                    Length;
+  UINT16                                    Flag;
+  UINT16                                    Rsvd1;
+  UINT32                                    NumOfMemoryDevices;
+  UINT16                                    SckIdent;
+  UINT16                                    Rsvd2;
+  ACPI_PMTT_DIE_DEVICE                      Die[MAX_DIE];
+} ACPI_PMTT_SOCKET_DEVICE;
+
+typedef struct {
+  EFI_ACPI_DESCRIPTION_HEADER               Header;
+  UINT32                                    NumOfMemoryDevices;
+  ACPI_PMTT_SOCKET_DEVICE                   Socket[MAX_SOCKET];
+} ACPI_PLATFORM_MEMORY_TOPOLOGY_TABLE;
+
+#endif // _ACPI_PMTT_H_
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/Sllbis.h b/Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/Sllbis.h
new file mode 100644
index 0000000000..c119a0f712
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/Sllbis.h
@@ -0,0 +1,87 @@
+/** @file
+
+  @copyright
+  Copyright 2016 - 2017 Intel Corporation. <BR>
+
+  SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _SLLBIS_H_
+#define _SLLBIS_H_
+
+#include <UncoreCommonIncludes.h>
+
+#define EFI_ACPI_HMAT_NUMBER_OF_PROCESSOR_DOMAINS MC_MAX_NODE
+#define EFI_ACPI_HMAT_NUMBER_OF_MEMORY_DOMAINS    (MC_MAX_NODE * MAX_CRS_ENTRIES_PER_NODE)
+
+#define EFI_ACPI_HMAT_MEMORY_HIERACHY_MEMORY              0
+#define EFI_ACPI_HMAT_MEMORY_HIERACHY_LAST_LEVEL_MEMORY   1
+#define EFI_ACPI_HMAT_MEMORY_HIERACHY_FIRST_LEVEL_MEMORY  2
+#define EFI_ACPI_HMAT_MEMORY_HIERACHY_SECOND_LEVEL_MEMORY 3
+#define EFI_ACPI_HMAT_MEMORY_HIERACHY_THIRD_LEVEL_MEMORY  4
+
+
+#define EFI_ACPI_HMAT_ACCESS_LATENCY           0
+#define EFI_ACPI_HMAT_READ_LATENCY             1
+#define EFI_ACPI_HMAT_WRITE_LATENCY            2
+#define EFI_ACPI_HMAT_ACCESS_BANDWIDTH         3
+#define EFI_ACPI_HMAT_READ_BANDWIDTH           4
+#define EFI_ACPI_HMAT_WRITE_BANDWIDTH          5
+
+#define EFI_ACPI_HMAT_MAX_SLLBIS_DATA_TYPES    4
+#define EFI_ACPI_HMAT_NUMBER_SLLBIS_DATA_TYPES 6
+
+#define EFI_ACPI_HMAT_ELEMENT_BASE_UNIT_VALUE 10
+
+#define MAX_HMAT_MEMORY_HIERACHY_LEVELS      3 // Flat, Cache, and Hybrid
+#define HMAT_PERFORMANCE_UNIFORM_ACCESS      1
+#define HMAT_PERFORMANCE_NONUNIFORM_ACCESS   0
+
+#define EFI_ACPI_HMAT_MEMORY_BW_LATENCY_ATTRIBUTE_LENGTH 4
+#define EFI_ACPI_HMAT_MEMORY_BW_LATENCY_ATTRIBUTE_START_BIT 4
+
+
+#pragma pack(1)
+
+typedef struct {
+  UINT16 Type;
+  UINT16 Reserved_2_4;
+  UINT32 Length;
+  UINT8  Flags;
+  UINT8  DataType;
+  UINT16 Reserved_10_12;
+  UINT32 InitiatorProximityDomainsNumber;
+  UINT32 TargetProximityDomainsNumber;
+  UINT32 Reserved_20_24;
+  UINT64 EntryBaseUnit;
+  UINT32 InitiatorProximityDomainList[EFI_ACPI_HMAT_NUMBER_OF_PROCESSOR_DOMAINS];
+  UINT32 TargetProximityDomainList[EFI_ACPI_HMAT_NUMBER_OF_MEMORY_DOMAINS];
+  UINT16 RelativeDistanceEntry[EFI_ACPI_HMAT_NUMBER_OF_PROCESSOR_DOMAINS][EFI_ACPI_HMAT_NUMBER_OF_MEMORY_DOMAINS];
+} LATENCY_BANDWIDTH_INFO_STRUCTURE;
+#pragma pack()
+
+// LBIS Macros
+// Used to initialize LATENCY_BANDWIDTH_INFO_STRUCTURE
+#define LBIS_START() { \
+  (UINT16) SYSTEM_LOCALITY_LATENCY_BANDWIDTH_INFORMATION_STRUCTURE_TYPE, \
+  (UINT16) 0,         \
+  (UINT32) sizeof(LATENCY_BANDWIDTH_INFO_STRUCTURE), \
+  (UINT8)  0,         \
+  (UINT8)  0,         \
+  (UINT16) 0,         \
+  (UINT32) 0,         \
+  (UINT32) 0,         \
+  (UINT32) 0,         \
+  (UINT64) 0,         \
+  {(UINT32) 0},       \
+  {(UINT32) 0},       \
+  {
+
+#define RELATIVE_DISTANCE() \
+    {(UINT16) 0},
+
+#define LBIS_END() \
+  },               \
+},
+
+#endif /* _SLLBIS_H_ */
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/Spcr.h b/Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/Spcr.h
new file mode 100644
index 0000000000..90ea2c24cb
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/Spcr.h
@@ -0,0 +1,48 @@
+/** @file
+  This file describes the contents of the ACPI Serial Port Console Redirection
+  Table (SPCR).  Some additional ACPI 2.0 values are defined in Acpi2_0.h.
+  All changes to the Spcr contents should be done in this file.
+
+  @copyright
+  Copyright 1999 - 2002 Intel Corporation. <BR>
+
+  SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _SPCR_H_
+#define _SPCR_H_
+
+//
+// SPCR Definitions, see TBD specification for details.
+//
+
+#define EFI_ACPI_OEM_SPCR_REVISION 0x00000000 // TBD
+
+#define EFI_ACPI_INTERFACE_TYPE                     0x00 // full 16550 interface.
+
+//
+// Base Address
+//
+#define EFI_ACPI_BASE_ADDRESS_ADDRESS_SPACE_ID      EFI_ACPI_6_2_SYSTEM_IO
+#define EFI_ACPI_BASE_ADDRESS_BIT_WIDTH             0x08
+#define EFI_ACPI_BASE_ADDRESS_BIT_OFFSET            0x00
+#define EFI_ACPI_BASE_ADDRESS_ADDRESS               0x0000000000000000 // Updated at run time
+
+#define EFI_ACPI_INTERRUPT_TYPE                     0x03 // Dual-8259 and IOAPIC
+#define EFI_ACPI_IRQ                                0x04 // Updated at run time
+#define EFI_ACPI_GLOBAL_SYSTEM_INTERRUPT            0x04 // Updated at run time
+#define EFI_ACPI_BAUD_RATE                          0x07 // 115200
+#define EFI_ACPI_PARITY                             0x00 // No parity
+#define EFI_ACPI_STOP_BITS                          0x00 // 0 stop bit
+#define EFI_ACPI_FLOW_CONTROL                       0x00 // No flow control
+#define EFI_ACPI_TERMINAL_TYPE                      0x03 // ANSI
+#define EFI_ACPI_LANGUAGE                           0x00 // Reserved
+#define EFI_ACPI_PCI_DEVICE_ID                      0xFFFF
+#define EFI_ACPI_PCI_VENDOR_ID                      0xFFFF
+#define EFI_ACPI_PCI_BUS_NUMBER                     0x00
+#define EFI_ACPI_PCI_DEVICE_NUMBER                  0x00
+#define EFI_ACPI_PCI_FUNCTION_NUMBER                0x00
+#define EFI_ACPI_PCI_FLAGS                          0x00000000
+#define EFI_ACPI_PCI_SEGMENT                        0x00
+
+#endif
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/Spmi.h b/Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/Spmi.h
new file mode 100644
index 0000000000..576c390bd6
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/Spmi.h
@@ -0,0 +1,59 @@
+/** @file
+
+  @copyright
+  Copyright 2019 Intel Corporation. <BR>
+
+  SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _SPMI_H_
+#define _SPMI_H_
+
+//
+// Statements that include other files
+//
+#include <IndustryStandard/Acpi.h>
+
+//
+// Spmi Definitions, see specification for details.
+//
+#ifndef EFI_ACPI_6_2_SERVER_PLATFORM_MANAGEMENT_INTERFACE_TABLE_SIGNATURE
+#define EFI_ACPI_6_2_SERVER_PLATFORM_MANAGEMENT_INTERFACE_TABLE_SIGNATURE         0x494D5053
+#endif
+
+#define EFI_ACPI_SERVER_PROCESSOR_MANAGEMENT_INTERFACE_TABLE_REVISION             0x05
+#define EFI_ACPI_OEM_SPMI_REVISION                                                0x00000001
+#define EFI_ACPI_SPMI_SPECIFICATION_REVISION                                      0x0200
+
+
+//
+// SPMI Table definition
+//
+#pragma pack(1)
+
+#define KEYBOARD_CONTROLLER_STYLE          0x01
+#define SYSTEM_IO                          0x01
+#define IPMI_DEFAULT_IO_BASE               0xCA2
+
+typedef struct {
+  EFI_ACPI_DESCRIPTION_HEADER                              Header;
+  UINT8                                                    InterfaceType;                      // 36
+  UINT8                                                    Reserved37;                         // 37
+  UINT16                                                   SpecificationRevision;              // 38 - 39
+  UINT8                                                    InterruptType;                      // 40
+  UINT8                                                    GPE;                                // 41
+  UINT8                                                    Reserved42;                         // 42
+  UINT8                                                    PciDeviceFlag;                      // 43
+  UINT32                                                   GlobalSystemInterrupt;              // 44 - 47
+  EFI_ACPI_6_2_GENERIC_ADDRESS_STRUCTURE                   BaseAddress;                        // 48 - 59
+  UINT8                                                    UidByte1;                           // 60 LSB
+  UINT8                                                    UidByte2;                           // 61
+  UINT8                                                    UidByte3;                           // 62
+  UINT8                                                    UidByte4;                           // 63 MSB
+  UINT8                                                    Reserved64;                         // 64
+} EFI_ACPI_SERVER_PROCESSOR_MANAGEMENT_INTERFACE_TABLE;
+
+
+#pragma pack()
+
+#endif  //_SPMI_H_
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/WatchdogDescriptionTable.h b/Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/WatchdogDescriptionTable.h
new file mode 100644
index 0000000000..fe25f5b4e3
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/WatchdogDescriptionTable.h
@@ -0,0 +1,82 @@
+/** @file
+  ACPI Watchdog Description Table as defined in Intel
+  ICH Family Watchdog Timer (WDT) Application Note (AP-725)
+
+  @copyright
+  Copyright 2019 Intel Corporation. <BR>
+
+  SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _WATCH_DOG_DESCRIPTION_TABLE_H_
+#define _WATCH_DOG_DESCRIPTION_TABLE_H_
+
+//
+// Include files
+//
+#include <IndustryStandard/Acpi.h>
+
+//
+// Ensure proper structure formats
+//
+#pragma pack(1)
+//
+// WDDT structure ACPI 6.2 compliant
+//
+typedef struct {
+  EFI_ACPI_DESCRIPTION_HEADER             Header;
+  UINT16                                  SpecVersion;
+  UINT16                                  TableVersion;
+  UINT16                                  Vid;
+  EFI_ACPI_6_2_GENERIC_ADDRESS_STRUCTURE  BaseAddress;
+  UINT16                                  TimerMaxCount;
+  UINT16                                  TimerMinCount;
+  UINT16                                  TimerCountPeriod;
+  UINT16                                  Status;
+  UINT16                                  Capability;
+} EFI_ACPI_WATCH_DOG_DESCRIPTION_TABLE;
+
+//
+// "WDDT" Watchdog Description Table signatures
+//
+#define EFI_ACPI_WDDT_SIGNATURE 0x54444457
+
+#pragma pack()
+
+//
+// WDDT Revision
+//
+#define EFI_ACPI_WATCHDOG_DESCRIPTION_1_0_TABLE_REVISION  0x01
+
+//
+// WDDT Spec Version
+//
+#define EFI_ACPI_WDDT_SPEC_1_0_VERSION                0x01
+
+//
+// WDDT Description Table Version
+//
+#define EFI_ACPI_WDDT_TABLE_1_0_VERSION               0x01
+
+//
+// WDT Status
+//
+#define EFI_ACPI_WDDT_STATUS_AVAILABLE             0x0001
+#define EFI_ACPI_WDDT_STATUS_ACTIVE                0x0002
+#define EFI_ACPI_WDDT_STATUS_OWNED_BY_BIOS         0x0000
+#define EFI_ACPI_WDDT_STATUS_OWNED_BY_OS           0x0004
+#define EFI_ACPI_WDDT_STATUS_USER_RESET_EVENT      0x0800
+#define EFI_ACPI_WDDT_STATUS_WDT_EVENT             0x1000
+#define EFI_ACPI_WDDT_STATUS_POWER_FAIL_EVENT      0x2000
+#define EFI_ACPI_WDDT_STATUS_UNKNOWN_RESET_EVENT   0x4000
+
+//
+// WDT Capability
+//
+#define EFI_ACPI_WDDT_CAPABILITY_AUTO_RESET            0x0001
+#define EFI_ACPI_WDDT_CAPABILITY_ALERT_SUPPORT         0x0002
+#define EFI_ACPI_WDDT_CAPABILITY_PLATFORM_SHUTDOWN     0x0004
+#define EFI_ACPI_WDDT_CAPABILITY_IMMEDIATE_SHUTDOWN    0x0008
+#define EFI_ACPI_WDDT_CAPABILITY_BIOS_HANDOFF_SUPPORT  0x0010
+
+#endif
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/Wddt.h b/Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/Wddt.h
new file mode 100644
index 0000000000..9ffe2c6e89
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/Wddt.h
@@ -0,0 +1,53 @@
+/** @file
+  This file describes the contents of the ACPI Watchdog Description
+  Table (WDDT).  Some additional ACPI values are defined in Acpi1_0.h and
+  Acpi2_0.h.
+
+  @copyright
+  Copyright 1999 - 2019 Intel Corporation. <BR>
+
+  SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _WDDT_H
+#define _WDDT_H
+
+//
+// Statements that include other files
+//
+#include <IndustryStandard/Acpi.h>
+
+//
+// WDDT Definitions, ACPI 6.2
+//
+#define EFI_ACPI_WDDT_DESCRIPTION_TABLE_REVISION      1
+#define EFI_ACPI_OEM_WDDT_REVISION                    0x00000001
+#define EFI_ACPI_WDDT_SPEC_VERSION                    0x0100
+#define EFI_ACPI_WDDT_TABLE_VERSION                   0x0100
+#define EFI_ACPI_WDDT_TIMER_MAX_COUNT                 0x003f
+#define EFI_ACPI_WDDT_TIMER_MIN_VALUE                 0x0004
+#define EFI_ACPI_WDDT_TIMER_PERIOD_COUNT              600
+//
+// WDDT_STATUS bits
+//
+#define EFI_ACPI_WDDT_STATUS_AVAILABLE            0x0001
+#define EFI_ACPI_WDDT_STATUS_ACTIVE               0x0002
+#define EFI_ACPI_WDDT_STATUS_OWNED_BY_BIOS        0x0000
+#define EFI_ACPI_WDDT_STATUS_OWNED_BY_OS          0x0004
+#define EFI_ACPI_WDDT_STATUS_USER_RESET_EVENT     0x0800
+#define EFI_ACPI_WDDT_STATUS_WDT_EVENT            0x1000
+#define EFI_ACPI_WDDT_STATUS_POWER_FAIL_EVENT     0x2000
+#define EFI_ACPI_WDDT_STATUS_UNKNOWN_RESET_EVENT  0x4000
+
+//
+// WDDT Capability bits
+//
+#define EFI_ACPI_WDDT_CAPABILITY_AUTO_RESET           0x0001
+#define EFI_ACPI_WDDT_CAPABILITY_ALERT_SUPPORT        0x0002
+#define EFI_ACPI_WDDT_CAPABILITY_PLATFORM_SHUTDOWN    0x0004
+#define EFI_ACPI_WDDT_CAPABILITY_IMMEDIATE_SHUTDOWN   0x0008
+#define EFI_ACPI_WDDT_CAPABILITY_BIOS_HANDOFF_SUPPORT 0x0010
+
+#pragma pack()
+
+#endif
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/Wsmt.h b/Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/Wsmt.h
new file mode 100644
index 0000000000..112e162931
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/Wsmt.h
@@ -0,0 +1,67 @@
+/** @file
+
+ @copyright
+  Copyright 2017 - 2020 Intel Corporation.
+
+  SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+
+#ifndef _WSMT_H_
+#define _WSMT_H_
+
+//
+// Statements that include other files
+//
+
+#include <IndustryStandard/Acpi.h>
+
+//
+// signature "WSMT"
+//
+
+#define ACPI_WSMT_SIGNATURE                       0x544D5357
+#define ACPI_WSMT_LENGTH                          40
+#define ACPI_OEM_WSMT_REVISION                    0x00000000
+#define EFI_ACPI_WSMT_REVISION                    0x00000001
+#define WSMT_PROTECTION_FLAG                      (BIT0 | BIT1 | BIT2 )
+
+
+#pragma pack(1)
+
+typedef union {
+  struct {
+    //
+    //BIT0:
+    //If set, expresses that for all synchronous SMM entries,
+    //SMM will validate that input and output buffers lie entirely within the expected fixed memory regions.
+    //
+    UINT32   FixedCommBuffers:1;
+    //
+    //BIT1: COMM_BUFFER_NESTED_PTR_PROTECTION
+    //If set, expresses that for all synchronous SMM entries, SMM will validate that input and
+    //output pointers embedded within the fixed communication buffer only refer to address ranges
+    //that lie entirely within the expected fixed memory regions.
+    //
+    UINT32   CommBufferNestedPointerProtection:1;
+    //
+    //BIT2: SYSTEM_RESOURCE_PROTECTION
+    //Firmware setting this bit is an indication that it will not allow reconfiguration of system resources via non-architectural mechanisms.
+    //
+    UINT32   SystemResourceProtection:1;
+    UINT32   Reserved:29;
+  } Bits;
+  UINT32 Flags;
+} EFI_ACPI_WSMT_PROTECTION_FLAGS;
+
+//
+//  WSMT ACPI table
+//
+typedef struct _ACPI_WINDOWS_SMM_SECURITY_MITIGATIONS_TABLE {
+  EFI_ACPI_DESCRIPTION_HEADER             Header;
+  EFI_ACPI_WSMT_PROTECTION_FLAGS          ProtectionFlags;
+} ACPI_WINDOWS_SMM_SECURITY_MITIGATIONS_TABLE;
+
+#pragma pack()
+
+#endif //_WSMT_H_
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/PlatformPkg.dec b/Platform/Intel/WhitleyOpenBoardPkg/PlatformPkg.dec
index 5e27d9beb4..4d416325ae 100644
--- a/Platform/Intel/WhitleyOpenBoardPkg/PlatformPkg.dec
+++ b/Platform/Intel/WhitleyOpenBoardPkg/PlatformPkg.dec
@@ -16,8 +16,8 @@
   PACKAGE_VERSION                = 0.91
 
 [Includes]
- Include
- Include/Protocol
+  Include
+  Include/Protocol
 
 #TODO: Move these generated temp files into include.
   Uba/BoardInit/Dxe
@@ -159,8 +159,7 @@
 
 [PcdsFixedAtBuild]
 
-#SKX_TODO: add a new GUID, and replace the 'gPlatformTokenSpaceGuid' used here to it, or move these values to the SocketPkg where the GUID is defined
-#          Using a GUID defined in another .DEC file is a violation of the UEFI packaging standards.
+  gPlatformTokenSpaceGuid.PcdEfiAcpiPm1aEvtBlkAddress|0x00000500|UINT32|0x00000031
 
   gCpPlatFlashTokenSpaceGuid.PcdFlashBase|0x00000000 |UINT32|0x3000000E
   gCpPlatFlashTokenSpaceGuid.PcdFlashSize|0x00000000 |UINT32|0x3000000F
diff --git a/Silicon/Intel/WhitleySiliconPkg/Include/UncoreCommonIncludes.h b/Silicon/Intel/WhitleySiliconPkg/Include/UncoreCommonIncludes.h
index 0ea93e9a78..7af4eb72f6 100644
--- a/Silicon/Intel/WhitleySiliconPkg/Include/UncoreCommonIncludes.h
+++ b/Silicon/Intel/WhitleySiliconPkg/Include/UncoreCommonIncludes.h
@@ -80,6 +80,8 @@
 #define MC_MAX_NODE                   (MAX_SOCKET * MAX_IMC)  // Max number of memory nodes
 #endif
 
+#define MAX_CRS_ENTRIES_PER_NODE      8                       // Max number of ranges allowed on a memory node
+
 #ifndef TOTAL_CB3_DEVICES
 #define TOTAL_CB3_DEVICES             64   // IOAT_TOTAL_FUNCS * MAX_SOCKET. Note: this covers up to 8S.
 #endif
@@ -108,4 +110,10 @@
 #define MAX_B2P_MAILBOX_GROUPS    32
 #endif // !MAX_B2P_MAILBOX_GROUPS
 
+//
+// ACPI table information used to initialize tables.
+//
+#define EFI_ACPI_CREATOR_ID       0x4C544E49          // "INTL"
+#define EFI_ACPI_CREATOR_REVISION 0x20091013          // Oct 13 2009
+
 #endif
-- 
2.27.0.windows.1


^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [edk2-devel][edk2-platforms][PATCH V1 3/8] WhitleyOpenBoardPkg/AcpiTables: South Cluster ASL
  2022-02-07 19:02 [edk2-devel][edk2-platforms][PATCH V1 0/8] Whitley ACPI Tables Oram, Isaac W
  2022-02-07 19:02 ` [edk2-devel][edk2-platforms][PATCH V1 1/8] MinPlatformPkg/AmlGenOffset: Update for python 3 Oram, Isaac W
  2022-02-07 19:02 ` [edk2-devel][edk2-platforms][PATCH V1 2/8] WhitleyOpenBoardPkg/AcpiTables: Add ACPI Table definitions Oram, Isaac W
@ 2022-02-07 19:02 ` Oram, Isaac W
  2022-02-09  3:21   ` Nate DeSimone
  2022-02-07 19:02 ` [edk2-devel][edk2-platforms][PATCH V1 4/8] WhitleyOpenBoardPkg/AcpiTables10nm: Add Static ACPI tables Oram, Isaac W
                   ` (4 subsequent siblings)
  7 siblings, 1 reply; 17+ messages in thread
From: Oram, Isaac W @ 2022-02-07 19:02 UTC (permalink / raw)
  To: devel; +Cc: Nate DeSimone, Chasel Chiu

LBG ACPI DSDT content

Cc: Nate DeSimone <nathaniel.l.desimone@intel.com>
Cc: Chasel Chiu <chasel.chiu@intel.com>
Signed-off-by: Isaac Oram <isaac.w.oram@intel.com>
---
 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/Pch.asl           | 833 ++++++++++++++++++++
 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/PchHda.asl        | 307 ++++++++
 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/PchNvs.asl        | 271 +++++++
 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/PchPcie.asl       | 203 +++++
 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/PchSata.asl       |  50 ++
 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/PchXhci.asl       | 558 +++++++++++++
 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP01_ADR.asl      |  15 +
 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP02_ADR.asl      |  15 +
 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP03_ADR.asl      |  15 +
 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP04_ADR.asl      |  15 +
 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP05_ADR.asl      |  15 +
 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP06_ADR.asl      |  15 +
 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP07_ADR.asl      |  15 +
 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP08_ADR.asl      |  15 +
 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP09_ADR.asl      |  15 +
 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP10_ADR.asl      |  15 +
 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP11_ADR.asl      |  15 +
 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP12_ADR.asl      |  15 +
 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP13_ADR.asl      |  15 +
 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP14_ADR.asl      |  15 +
 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP15_ADR.asl      |  15 +
 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP16_ADR.asl      |  15 +
 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP17_ADR.asl      |  15 +
 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP18_ADR.asl      |  15 +
 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP19_ADR.asl      |  15 +
 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP20_ADR.asl      |  15 +
 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/TraceHubDebug.asl | 150 ++++
 Silicon/Intel/WhitleySiliconPkg/SiliconPkg.dec                                        |   1 +
 28 files changed, 2673 insertions(+)

diff --git a/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/Pch.asl b/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/Pch.asl
new file mode 100644
index 0000000000..a8ea35534c
--- /dev/null
+++ b/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/Pch.asl
@@ -0,0 +1,833 @@
+/** @file
+
+  @copyright
+  Copyright 1999 - 2020 Intel Corporation. <BR>
+
+  SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#include <Register/PchRegsPcr.h>
+
+Name (PNVB, 0xFFFF0000)  // PCH NVS Base address
+Name (PNVL, 0xAA55)      // PCH NVS Length
+Include ("PchNvs.asl")
+
+//
+// Trace Hub debug library
+// Include it earlier so the debug function can be used as soon as possible
+//
+Include ("TraceHubDebug.asl")
+
+Name(SPTH,1)
+Name(SPTL,2)
+Method(PCHV) {
+  If(LEqual(PCHS, 1)) { Return (SPTH) } // series=H  -> SPT-H
+  If(LEqual(PCHS, 2)) { Return (SPTL) } // series=LP -> SPT-LP
+  Return (0)
+}
+
+//
+// This PME event (PCH's GPE 6Dh) is received when any PCH internal device with
+// PCI Power Management capabilities on bus 0 asserts the equivalent of the PME# signal.
+//
+Scope(\_GPE) {
+  Method(_L6D, 0, Serialized) {
+    \_SB.PC00.XHCI.GPEH()
+    \_SB.PC00.CAVS.GPEH()
+    \_SB.PC00.GBE1.GPEH()
+  }
+}
+
+Scope (\_SB.PC00) {
+
+  //
+  // PCH reserved resource
+  //
+  Device(PRRE) {
+    Name(_HID,EISAID("PNP0C02")) // motherboard resource
+    Name(_UID,"PCHRESV")
+    Name(_STA,0x3) // device present and decodes its resources, but not to be displayed in OSPM
+
+    Method(_CRS,0,Serialized)
+    {
+      Name(BUF0,ResourceTemplate(){
+        //
+        // PCH RESERVED MMIO RANGE
+        // 0xFD000000 to 0xFE7FFFFF
+        // to skip over address range that might be claimed by the GPIO, Intel Serial IO, Thermal, TraceHub and CIO2 devices
+        // need to split this into 5 ranges
+        // The GPIO COMM0,1,3 and SerialIO ranges will be handled by SIRC device.
+        //
+        Memory32Fixed(ReadWrite,0xFD000000,0x00AC0000) // 0xFD000000 - 0xFDABFFFF
+        // Skip 0xFDAC0000 - 0xFDACFFFF for GPIO_COMM3
+        Memory32Fixed(ReadWrite,0xFDAD0000,0x00010000) // 0xFDAD0000 - 0xFDADFFFF, only cover GPIO_COMM2 range
+        // Skip 0xFDAE0000 - 0xFDAFFFFF for GPIO_COMM0 and GPIO_COMM1
+        Memory32Fixed(ReadWrite,0xFDB00000,0x00500000) // 0xFDB00000 - 0xFDFFFFFF
+        Memory32Fixed(ReadWrite,0xFE000000,0x00010000) // 0xFE000000 - 0xFE00FFFF
+        Memory32Fixed(ReadWrite,0xFE011000,0x0000f000) // 0xFE011000 - 0xFE01FFFF
+        // Skip 0xFE020000 - 0xFE035FFF for Serial IO
+        Memory32Fixed(ReadWrite,0xFE036000,0x00006000) // 0xFE036000 - 0xFE03BFFF
+        // Skip 0xFE03C000 - 0xFE03CFFF for Thermal Device in ACPI mode
+        Memory32Fixed(ReadWrite,0xFE03D000,0x003C3000) // 0xFE03D000 - 0xFE3FFFFF
+        // Skip 0xFE400000 - 0xFE40FFFF for CIO2 in ACPI mode
+        Memory32Fixed(ReadWrite,0xFE410000,0x003F0000) // 0xFE410000 - 0xFE7FFFFF
+      })
+      Return(BUF0)
+    }
+  }
+  Device(IOTR) {
+    //
+    // This device claims IO range reserved for IO traps
+    // to prevent OS from reusing it for other purposes
+    //
+    Name(_HID,EISAID("PNP0C02"))
+    Name(_UID,"IoTraps")
+    Name(BUF0,ResourceTemplate(){
+      Io(Decode16,0x0,0x0,0x1,0xFF,TAG0)
+      Io(Decode16,0x0,0x0,0x1,0xFF,TAG1)
+      Io(Decode16,0x0,0x0,0x1,0xFF,TAG2)
+      Io(Decode16,0x0,0x0,0x1,0xFF,TAG3)
+    })
+    CreateWordField(BUF0,TAG0._MIN,AMI0)
+    CreateWordField(BUF0,TAG0._MAX,AMA0)
+    CreateWordField(BUF0,TAG1._MIN,AMI1)
+    CreateWordField(BUF0,TAG1._MAX,AMA1)
+    CreateWordField(BUF0,TAG2._MIN,AMI2)
+    CreateWordField(BUF0,TAG2._MAX,AMA2)
+    CreateWordField(BUF0,TAG3._MIN,AMI3)
+    CreateWordField(BUF0,TAG3._MAX,AMA3)
+    CreateByteField(BUF0,TAG0._LEN,LEN0)
+    CreateByteField(BUF0,TAG1._LEN,LEN1)
+    CreateByteField(BUF0,TAG2._LEN,LEN2)
+    CreateByteField(BUF0,TAG3._LEN,LEN3)
+    Method(_CRS) {
+      Store(ITA0,AMI0);Store(ITA0,AMA0)
+      Store(ITA1,AMI1);Store(ITA1,AMA1)
+      Store(ITA2,AMI2);Store(ITA2,AMA2)
+      Store(ITA3,AMI3);Store(ITA3,AMA3)
+      if(LNotEqual(ITS0,1)) { Store(0, LEN0) }
+      if(LNotEqual(ITS1,1)) { Store(0, LEN1) }
+      if(LNotEqual(ITS2,1)) { Store(0, LEN2) }
+      if(LNotEqual(ITS3,1)) { Store(0, LEN3) }
+      return (BUF0)
+    }
+  }
+
+
+  //
+  // LPC Bridge - Device 31, Function 0, this is only for PCH register Memory Region declare,
+  // it's better to be declared as early as possible since it's widely used in whole ACPI name space.
+  // Please add any code which needs to reference any register of it after this
+  //
+  Scope (\_SB.PC00.LPC0) {
+    Method(_DSM,4,serialized){if(PCIC(Arg0)) { return(PCID(Arg0,Arg1,Arg2,Arg3)) }; Return(Buffer() {0x00})}
+
+    OperationRegion(LPC, PCI_Config, 0x00, 0x100)
+    Field(LPC, AnyAcc, NoLock, Preserve)
+    {
+      Offset(0x02),
+      CDID, 16,
+      Offset(0x08),
+      CRID,  8,
+      Offset(0x80),
+      IOD0,  8,
+      IOD1,  8,
+      Offset(0xA0),
+      , 9,
+      PRBL,  1,
+      Offset(0xAC),
+      ,      8,
+      ,      8,
+      XUSB,  1,
+      Offset(0xB8),
+          ,  22,
+      GR0B,  2,
+      ,      8,
+      Offset(0xBC),
+      ,      2,
+      GR19,  2,
+      ,     28,
+      Offset(0xDC),
+      ,       2,
+      ESPI,   1,
+    }
+  }
+
+  //
+  // PCH Power Management Controller
+  //
+  Scope(\_SB.PC00.PMC1) {
+    Method(_DSM,4,serialized){if(PCIC(Arg0)) { return(PCID(Arg0,Arg1,Arg2,Arg3)) }; Return(Buffer() {0x00})}
+
+    OperationRegion(PMCB, PCI_Config, 0x00, 0x100)
+    Field(PMCB, AnyAcc, NoLock, Preserve) {
+      VDID, 32,
+      Offset(0x40),
+          , 8,
+      ACBA, 8,
+      Offset(0x48),
+          , 12,
+      PWBA, 20,
+    }
+  }
+
+  //
+  // SMBus Controller - Device 31, Function 4
+  //
+  Device(SBUS) {
+    Name(_ADR,0x001F0004)
+    Method(_DSM,4,serialized){if(PCIC(Arg0)) { return(PCID(Arg0,Arg1,Arg2,Arg3)) }; Return(Buffer() {0x00})}
+  }
+}
+
+Scope(\)
+{
+  //
+  //  PCR Register Access Methods
+  //
+  // PCR Dword Read
+  // arg0: PID
+  // arg1: Offset
+  //
+  Method (PCRR, 2, Serialized) {
+    Add (ShiftLeft (arg0, 16), arg1, Local0)
+    Add (SBRG, Local0, Local0)
+    OperationRegion (PCR0, SystemMemory, Local0, 0x4)
+    Field(PCR0,DWordAcc,Lock,Preserve) {
+      Offset(0x00),
+      DAT0, 32
+    } // End Field PCR0
+    Return (DAT0)
+  } // End Method PCRR
+
+  //
+  // PCR Dword Write
+  // arg0: PID
+  // arg1: Offset
+  // arg2: write data
+  //
+  Method (PCRW, 3, Serialized) {
+    Add (ShiftLeft (arg0, 16), arg1, Local0)
+    Add (SBRG, Local0, Local0)
+    OperationRegion (PCR0, SystemMemory, Local0, 0x4)
+    Field(PCR0,DWordAcc,Lock,Preserve) {
+      Offset(0x00),
+      DAT0, 32
+    } // End Field PCR0
+    Store (arg2, DAT0)
+
+    // read back for PCR back to back limitation
+    OperationRegion (PCR1, SystemMemory, ADD (SBRG, 0x00C73418), 0x4)
+    Field(PCR1,DWordAcc,Lock,Preserve) {
+      Offset(0x00),
+      DAT1, 32
+    } // End Field PCR1
+  } // End Method PCRW
+
+  //
+  // PCR Dword Or
+  // arg0: PID
+  // arg1: Offset
+  // arg2: Or data
+  //
+  Method (PCRO, 3, Serialized) {
+    Store(PCRR(arg0,arg1),Local0)    // Store PCR Read data in Local0
+    Store(Or(Local0,arg2),Local1)    // Or data
+    PCRW(arg0,arg1,Local1)           // Write data back
+  }
+
+  //
+  // PCR Dword And
+  // arg0: PID
+  // arg1: Offset
+  // arg2: And data
+  //
+  Method (PCRA, 3, Serialized) {
+    Store(PCRR(arg0,arg1),Local0)    // Store PCR Read data in Local0
+    Store(And(Local0,arg2),Local1)   // And data
+    PCRW(arg0,arg1,Local1)           // Write data back
+  }
+
+  //
+  // PCR Dword AndThenOr
+  // arg0: PID
+  // arg1: Offset
+  // arg2: And data
+  // arg3: Or data
+  //
+  Method (PCAO, 4, Serialized) {
+    Store(PCRR(arg0,arg1),Local0)           // Store PCR Read data in Local0
+    Store(Or(And(Local0,arg2),arg3),Local1) // AndThenOr
+    PCRW(arg0,arg1,Local1)                  // Write data back
+  }
+
+  Name (PMBV, 0)        // ACPI I/O base address value
+  Method (PMB1, 0) {
+    If (LEqual(PMBV, 0)) {
+      Store (ShiftLeft (\_SB.PC00.PMC1.ACBA, 8), PMBV)
+    }
+    Return (PMBV)
+  }
+
+  Name (PWRV, 0)        // PWRM base address value
+  Method (PWRM, 0) {
+    If (LEqual(PWRV, 0)) {
+      Store (ShiftLeft (\_SB.PC00.PMC1.PWBA, 12), PWRV)
+    }
+    Return (PWRV)
+  }
+
+
+  //
+  // Define PCH ACPIBASE I/O as an ACPI operating region.  The base address
+  // can be found in Device 31, Function 2, Offset 40h.
+  //
+  OperationRegion(PMIO, SystemIo, PMB1, 0x80)
+  Field(PMIO, ByteAcc, NoLock, Preserve) {
+          ,  8,
+      PBSS,  1,       // Power Button Status
+    Offset(0x40),     // General Purpose Event Control
+          ,  17,
+      GPEC,  1        // Software GPE Control
+  }
+  OperationRegion(PMLP, SystemIo, Add(\PMB1,0x80), 0x20)
+  Field(PMLP, ByteAcc, NoLock, Preserve) {
+    Offset(0x10),     // GPE0 Enable
+      ,      8,
+      GE08,  1,
+      ,      8,
+      GE17,  1,
+      ,     17,
+      GE35,  1,
+      ,      9,
+      GE45,  1,
+      ,      2,
+      GE48,  1,
+      ,      2,
+      GE51,  1,
+      ,     76,
+  }
+  Field(PMLP, ByteAcc, NoLock, WriteAsZeros) {
+      Offset(0x00),     // GPE0 Status
+      ,      8,
+      GS08,  1,
+      ,      8,
+      GS17,  1,
+      ,     17,
+      GS35,  1,
+      ,      9,
+      GS45,  1,
+      ,      2,
+      GS48,  1,
+      ,      2,
+      GS51,  1,
+      ,      2,
+      GS54,  1,
+      GS55,  1,
+      ,     42,
+      GS98,  1,
+      ,     29,
+  }
+
+
+
+  //
+  // PWRM register definitions
+  //
+  OperationRegion(PWMR, SystemMemory, \PWRM, 0x800)
+  Field(PWMR, AnyAcc, NoLock, Preserve) {
+    Offset(0x0E0),
+        , 16,
+    DWLE, 1,          // Deep-Sx WLAN Phy Power Enable
+    HWLE, 1,          // Host Wireless LAN Phy Power Enable
+  }
+
+  //
+  //
+  OperationRegion(PMST, SystemMemory, PWRV, 0x80)
+  Field(PMST, DWordAcc, NoLock, Preserve) {
+    Offset(0x18),  // Power Management Configuration Reg 1 (PM_CFG)
+        , 25,      //
+    USBP,  1,      // Allow USB2 PHY Core Power Gating (ALLOW_USB2_CORE_PG)
+    Offset(0x1C),  // PCH Power Management Status (PCH_PM_STS)
+        , 24,      //
+    PMFS,  1,      // PMC Message Full Status (PMC_MSG_FULL_STS)
+    Offset(0x20),  // Message to PMC (MTPMC)
+    MPMC, 32,      // Message to PMC (MTPMC)
+    Offset(0x24),  // PCH Power Management Status (PCH_PM_STS2)
+        , 20,      //
+    UWAB,  1,      // USB2 Workaround Available Bit
+  }
+
+} //end Scope(\)
+
+Scope (\_SB.PC00) {
+  Name(LTRN, 0)
+  Name(OBFN, 0)
+
+  Name(LMSL, 0)
+  Name(LNSL, 0)
+
+  //
+  // LAN Controller - Device 31, Function 6
+  //
+  Scope(\_SB.PC00.GBE1) {
+    Method(_DSM,4,serialized){if(PCIC(Arg0)) { return(PCID(Arg0,Arg1,Arg2,Arg3)) }; Return(Buffer() {0x00})}
+    OperationRegion(GLBA, PCI_Config, 0,0x100)
+    Field(GLBA,AnyAcc,NoLock,Preserve)
+    {
+      DVID, 16,
+      Offset(0xCC),
+          ,  8,
+      PMEE,  1, // PME Enable
+          ,  6,
+      PMES,  1, // PME Status
+    }
+
+    Method(_PRW, 0) { Return(GPRW(0x0D, 4)) }  // can wakeup from S4 state
+
+    Method(_DSW, 3)
+    {
+      Store(Arg0, PMEE)
+    }
+
+    //
+    // GPE handler for GbE, this is part of _Lxx handler for bus 0 PME
+    //
+    Method(GPEH)
+    {
+      If(LEqual(DVID, 0xFFFF)) {
+        Return()
+      }
+      If(LAnd(PMEE, PMES)) {
+        Store(1, PMES) // clear PME Status
+        Notify(GBE1, 0x02)
+      }
+    }
+  } // end "GbE Controller"
+
+} //scope
+
+//
+// xHCI Controller - Device 20, Function 0
+//
+Include("PchXhci.asl")
+
+// xDCI (OTG) Controller is not used in Server
+// Comment out as ifdefs don't work at Trim stage of ASL preparation
+
+Scope(\_SB_.PC00) {
+  //
+  // High Definition Audio Controller - Device 31, Function 3
+  //
+  include("PchHda.asl")
+
+  //
+  // PCIE Root Port #01
+  //
+  Scope(\_SB.PC00.RP01) {
+    //
+    // Pass LTRx to LTRN so PchPcie.asl can be reused for PCIes.
+    //
+    Method(_INI)
+    {
+      Store (LTR1, LTRN)
+      Store (PML1, LMSL)
+      Store (PNL1, LNSL)
+      Store (OBF1, OBFN)
+    }
+    Include("PchPcie.asl")
+    Method(_PRW, 0) { Return(GPRW(0x09, 4)) }  // can wakeup from S4 state
+  } // end "PCIE Root Port #01"
+
+  //
+  // PCIE Root Port #02
+  //
+  Scope(\_SB.PC00.RP02) {
+    //
+    // Pass LTRx to LTRN so PchPcie.asl can be reused for PCIes.
+    //
+    Method(_INI)
+    {
+      Store (LTR2, LTRN)
+      Store (PML2, LMSL)
+      Store (PNL2, LNSL)
+      Store (OBF2, OBFN)
+    }
+    Include("PchPcie.asl")
+    Method(_PRW, 0) { Return(GPRW(0x09, 4)) }  // can wakeup from S4 state
+  } // end "PCIE Root Port #02"
+
+  //
+  // PCIE Root Port #03
+  //
+  Scope(\_SB.PC00.RP03) {
+    //
+    // Pass LTRx to LTRN so PchPcie.asl can be reused for PCIes.
+    //
+    Method(_INI)
+    {
+      Store (LTR3, LTRN)
+      Store (PML3, LMSL)
+      Store (PNL3, LNSL)
+      Store (OBF3, OBFN)
+    }
+    Include("PchPcie.asl")
+    Method(_PRW, 0) { Return(GPRW(0x09, 4)) }  // can wakeup from S4 state
+  } // end "PCIE Root Port #03"
+
+  //
+  // PCIE Root Port #04
+  //
+  Scope(\_SB.PC00.RP04) {
+    //
+    // Pass LTRx to LTRN so PchPcie.asl can be reused for PCIes.
+    //
+    Method(_INI)
+    {
+      Store (LTR4, LTRN)
+      Store (PML4, LMSL)
+      Store (PNL4, LNSL)
+      Store (OBF4, OBFN)
+    }
+    Include("PchPcie.asl")
+    Method(_PRW, 0) { Return(GPRW(0x09, 4)) }  // can wakeup from S4 state
+  } // end "PCIE Root Port #04"
+
+  //
+  // PCIE Root Port #05
+  //
+  Scope(\_SB.PC00.RP05) {
+    //
+    // Pass LTRx to LTRN so PchPcie.asl can be reused for PCIes.
+    //
+    Method(_INI)
+    {
+      Store (LTR5, LTRN)
+      Store (PML5, LMSL)
+      Store (PNL5, LNSL)
+      Store (OBF5, OBFN)
+    }
+    Include("PchPcie.asl")
+    Method(_PRW, 0) { Return(GPRW(0x09, 4)) }  // can wakeup from S4 state
+  } // end "PCIE Root Port #05"
+
+  //
+  // PCIE Root Port #06
+  //
+  Scope(\_SB.PC00.RP06) {
+    //
+    // Pass LTRx to LTRN so PchPcie.asl can be reused for PCIes.
+    //
+    Method(_INI)
+    {
+      Store (LTR6, LTRN)
+      Store (PML6, LMSL)
+      Store (PNL6, LNSL)
+      Store (OBF6, OBFN)
+    }
+    Include("PchPcie.asl")
+    Method(_PRW, 0) { Return(GPRW(0x09, 4)) }  // can wakeup from S4 state
+  } // end "PCIE Root Port #06"
+
+  //
+  // PCIE Root Port #07
+  //
+  Scope(\_SB.PC00.RP07) {
+    //
+    // Pass LTRx to LTRN so PchPcie.asl can be reused for PCIes.
+    //
+    Method(_INI)
+    {
+      Store (LTR7, LTRN)
+      Store (PML7, LMSL)
+      Store (PNL7, LNSL)
+      Store (OBF7, OBFN)
+    }
+    Include("PchPcie.asl")
+    Method(_PRW, 0) { Return(GPRW(0x09, 4)) }  // can wakeup from S4 state
+  } // end "PCIE Root Port #07"
+
+  //
+  // PCIE Root Port #08
+  //
+  Scope(\_SB.PC00.RP08) {
+    //
+    // Pass LTRx to LTRN so PchPcie.asl can be reused for PCIes.
+    //
+    Method(_INI)
+    {
+      Store (LTR8, LTRN)
+      Store (PML8, LMSL)
+      Store (PNL8, LNSL)
+      Store (OBF8, OBFN)
+    }
+    Include("PchPcie.asl")
+    Method(_PRW, 0) { Return(GPRW(0x09, 4)) }  // can wakeup from S4 state
+  } // end "PCIE Root Port #08"
+
+  //
+  // PCIE Root Port #09
+  //
+  Scope(\_SB.PC00.RP09) {
+    //
+    // Pass LTRx to LTRN so PchPcie.asl can be reused for PCIes.
+    //
+    Method(_INI)
+    {
+      Store (LTR9, LTRN)
+      Store (PML9, LMSL)
+      Store (PNL9, LNSL)
+      Store (OBF9, OBFN)
+    }
+    Include("PchPcie.asl")
+    Method(_PRW, 0) { Return(GPRW(0x09, 4)) }  // can wakeup from S4 state
+  } // end "PCIE Root Port #09"
+
+  //
+  // PCIE Root Port #10
+  //
+  Scope(\_SB.PC00.RP10) {
+    //
+    // Pass LTRx to LTRN so PchPcie.asl can be reused for PCIes.
+    //
+    Method(_INI)
+    {
+      Store (LTRA, LTRN)
+      Store (PMLA, LMSL)
+      Store (PNLA, LNSL)
+      Store (OBFA, OBFN)
+    }
+    Include("PchPcie.asl")
+    Method(_PRW, 0) { Return(GPRW(0x09, 4)) }  // can wakeup from S4 state
+  } // end "PCIE Root Port #10"
+
+  //
+  // PCIE Root Port #11
+  //
+  Scope(\_SB.PC00.RP11) {
+    //
+    // Pass LTRx to LTRN so PchPcie.asl can be reused for PCIes.
+    //
+    Method(_INI)
+    {
+      Store (LTRB, LTRN)
+      Store (PMLB, LMSL)
+      Store (PNLB, LNSL)
+      Store (OBFB, OBFN)
+    }
+    Include("PchPcie.asl")
+    Method(_PRW, 0) { Return(GPRW(0x09, 4)) }  // can wakeup from S4 state
+  } // end "PCIE Root Port #11"
+
+  //
+  // PCIE Root Port #12
+  //
+  Scope(\_SB.PC00.RP12) {
+    //
+    // Pass LTRx to LTRN so PchPcie.asl can be reused for PCIes.
+    //
+    Method(_INI)
+    {
+      Store (LTRC, LTRN)
+      Store (PMLC, LMSL)
+      Store (PNLC, LNSL)
+      Store (OBFC, OBFN)
+    }
+    Include("PchPcie.asl")
+    Method(_PRW, 0) { Return(GPRW(0x09, 4)) }  // can wakeup from S4 state
+  } // end "PCIE Root Port #12"
+
+  //
+  // PCIE Root Port #13
+  //
+  Scope(\_SB.PC00.RP13) {
+    //
+    // Pass LTRx to LTRN so PchPcie.asl can be reused for PCIes.
+    //
+    Method(_INI)
+    {
+      Store (LTRD, LTRN)
+      Store (PMLD, LMSL)
+      Store (PNLD, LNSL)
+      Store (OBFD, OBFN)
+    }
+    Include("PchPcie.asl")
+    Method(_PRW, 0) { Return(GPRW(0x09, 4)) }  // can wakeup from S4 state
+  } // end "PCIE Root Port #13"
+
+  //
+  // PCIE Root Port #14
+  //
+  Scope(\_SB.PC00.RP14) {
+    //
+    // Pass LTRx to LTRN so PchPcie.asl can be reused for PCIes.
+    //
+    Method(_INI)
+    {
+      Store (LTRE, LTRN)
+      Store (PMLE, LMSL)
+      Store (PNLE, LNSL)
+      Store (OBFE, OBFN)
+    }
+    Include("PchPcie.asl")
+    Method(_PRW, 0) { Return(GPRW(0x09, 4)) }  // can wakeup from S4 state
+  } // end "PCIE Root Port #14"
+
+  //
+  // PCIE Root Port #15
+  //
+  Scope(\_SB.PC00.RP15) {
+    //
+    // Pass LTRx to LTRN so PchPcie.asl can be reused for PCIes.
+    //
+    Method(_INI)
+    {
+      Store (LTRF, LTRN)
+      Store (PMLF, LMSL)
+      Store (PNLF, LNSL)
+      Store (OBFF, OBFN)
+    }
+    Include("PchPcie.asl")
+    Method(_PRW, 0) { Return(GPRW(0x09, 4)) }  // can wakeup from S4 state
+  } // end "PCIE Root Port #15"
+
+  //
+  // PCIE Root Port #16
+  //
+  Scope(\_SB.PC00.RP16) {
+    //
+    // Pass LTRx to LTRN so PchPcie.asl can be reused for PCIes.
+    //
+    Method(_INI)
+    {
+      Store (LTRG, LTRN)
+      Store (PMLG, LMSL)
+      Store (PNLG, LNSL)
+      Store (OBFG, OBFN)
+    }
+    Include("PchPcie.asl")
+    Method(_PRW, 0) { Return(GPRW(0x09, 4)) }  // can wakeup from S4 state
+  } // end "PCIE Root Port #16"
+
+  //
+  // PCIE Root Port #17
+  //
+  Scope(\_SB.PC00.RP17) {
+    //
+    // Pass LTRx to LTRN so PchPcie.asl can be reused for PCIes.
+    //
+    Method(_INI)
+    {
+      Store (LTRH, LTRN)
+      Store (PMLH, LMSL)
+      Store (PNLH, LNSL)
+      Store (OBFH, OBFN)
+    }
+    Include("PchPcie.asl")
+    Method(_PRW, 0) { Return(GPRW(0x09, 4)) }  // can wakeup from S4 state
+  } // end "PCIE Root Port #17"
+
+  //
+  // PCIE Root Port #18
+  //
+  Scope(\_SB.PC00.RP18) {
+    //
+    // Pass LTRx to LTRN so PchPcie.asl can be reused for PCIes.
+    //
+    Method(_INI)
+    {
+      Store (LTRI, LTRN)
+      Store (PMLI, LMSL)
+      Store (PNLI, LNSL)
+      Store (OBFI, OBFN)
+    }
+    Include("PchPcie.asl")
+    Method(_PRW, 0) { Return(GPRW(0x09, 4)) }  // can wakeup from S4 state
+  } // end "PCIE Root Port #18"
+
+  //
+  // PCIE Root Port #19
+  //
+  Scope(\_SB.PC00.RP19) {
+    //
+    // Pass LTRx to LTRN so PchPcie.asl can be reused for PCIes.
+    //
+    Method(_INI)
+    {
+      Store (LTRJ, LTRN)
+      Store (PMLJ, LMSL)
+      Store (PNLJ, LNSL)
+      Store (OBFJ, OBFN)
+    }
+    Include("PchPcie.asl")
+    Method(_PRW, 0) { Return(GPRW(0x09, 4)) }  // can wakeup from S4 state
+  } // end "PCIE Root Port #19"
+
+  //
+  // PCIE Root Port #20
+  //
+  Scope(\_SB.PC00.RP20) {
+    //
+    // Pass LTRx to LTRN so PchPcie.asl can be reused for PCIes.
+    //
+    Method(_INI)
+    {
+      Store (LTRK, LTRN)
+      Store (PMLK, LMSL)
+      Store (PNLK, LNSL)
+      Store (OBFK, OBFN)
+    }
+    Include("PchPcie.asl")
+    Method(_PRW, 0) { Return(GPRW(0x09, 4)) }  // can wakeup from S4 state
+  } // end "PCIE Root Port #20"
+
+  //
+  // Serial ATA Host Controller - Device 31, Function 2
+  //
+External(\_SB.PC00.SAT0.SDSM, MethodObj)
+
+Scope (\_SB.PC00.SAT1) {
+  Include ("PchSata.asl")
+  Device(PRT6)
+  {
+    Name(_ADR,0x0006FFFF)  // Port 6
+  }
+  Device(PRT7)
+  {
+    Name(_ADR,0x0007FFFF)  // Port 7
+  }
+}
+Scope (\_SB.PC00.SAT2) {
+  Include ("PchSata.asl")
+}
+  //Server does not support CIO Camera I/O
+
+  //
+  // Thermal Device
+  //
+  Scope(\_SB.PC00.TERM) {
+    Name (_HID, "INT3536")
+    Name (_UID, 1)
+      Name (RBUF, ResourceTemplate () {
+        Memory32Fixed (ReadWrite, 0xFE03C000, 0x00001000, BAR0)
+        Interrupt (ResourceConsumer, Level, ActiveLow, Shared, , , IRQ) { 18 }
+      })
+
+      CreateDWordField(RBUF,IRQ._INT,IRQN)
+    Method (_CRS, 0x0, NotSerialized) {
+      Store(TIRQ, IRQN)
+
+      Return (RBUF)
+    }
+
+    Method (_STA, 0x0, NotSerialized)
+    {
+      If(LEqual(TAEN, 0))   { Return(0x0) } // device not enabled in ACPI mode
+      If(LEqual(TIRQ, 0))   { Return(0x0) } // IRQ number not updated
+      Return(0xF)
+    }
+  }
+}
+
+// Comment out as ifdefs don't work at Trim stage of ASL preparation
diff --git a/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/PchHda.asl b/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/PchHda.asl
new file mode 100644
index 0000000000..ab5b5c42dd
--- /dev/null
+++ b/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/PchHda.asl
@@ -0,0 +1,307 @@
+/** @file
+
+  @copyright
+  Copyright 1999 - 2020 Intel Corporation. <BR>
+
+  SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+//
+// Bit Difinitions
+//
+#ifndef BIT0
+#define BIT0                     0x0001
+#define BIT1                     0x0002
+#define BIT2                     0x0004
+#define BIT3                     0x0008
+#define BIT4                     0x0010
+#define BIT5                     0x0020
+#define BIT6                     0x0040
+#define BIT7                     0x0080
+#define BIT8                     0x0100
+#define BIT9                     0x0200
+#endif  //BIT0
+
+//
+// High Definition Audio Controller - Device 31, Function 3
+//
+Scope(\_SB.PC00.CAVS) {
+
+#ifndef  BIT0
+#define  BIT0     0x00000001
+#endif
+#ifndef  BIT1
+#define  BIT1     0x00000002
+#endif
+#ifndef  BIT2
+#define  BIT2     0x00000004
+#endif
+#ifndef  BIT3
+#define  BIT3     0x00000008
+#endif
+#ifndef  BIT4
+#define  BIT4     0x00000010
+#endif
+#ifndef  BIT5
+#define  BIT5     0x00000020
+#endif
+#ifndef  BIT6
+#define  BIT6     0x00000040
+#endif
+#ifndef  BIT7
+#define  BIT7     0x00000080
+#endif
+#ifndef  BIT8
+#define  BIT8     0x00000100
+#endif
+#ifndef  BIT9
+#define  BIT9     0x00000200
+#endif
+#ifndef  BIT10
+#define  BIT10    0x00000400
+#endif
+#ifndef  BIT11
+#define  BIT11    0x00000800
+#endif
+#ifndef  BIT12
+#define  BIT12    0x00001000
+#endif
+#ifndef  BIT13
+#define  BIT13    0x00002000
+#endif
+#ifndef  BIT14
+#define  BIT14    0x00004000
+#endif
+#ifndef  BIT15
+#define  BIT15    0x00008000
+#endif
+#ifndef  BIT16
+#define  BIT16    0x00010000
+#endif
+#ifndef  BIT17
+#define  BIT17    0x00020000
+#endif
+#ifndef  BIT18
+#define  BIT18    0x00040000
+#endif
+#ifndef  BIT19
+#define  BIT19    0x00080000
+#endif
+#ifndef  BIT20
+#define  BIT20    0x00100000
+#endif
+#ifndef  BIT21
+#define  BIT21    0x00200000
+#endif
+#ifndef  BIT22
+#define  BIT22    0x00400000
+#endif
+#ifndef  BIT23
+#define  BIT23    0x00800000
+#endif
+#ifndef  BIT24
+#define  BIT24    0x01000000
+#endif
+#ifndef  BIT25
+#define  BIT25    0x02000000
+#endif
+#ifndef  BIT26
+#define  BIT26    0x04000000
+#endif
+#ifndef  BIT27
+#define  BIT27    0x08000000
+#endif
+#ifndef  BIT28
+#define  BIT28    0x10000000
+#endif
+#ifndef  BIT29
+#define  BIT29    0x20000000
+#endif
+#ifndef  BIT30
+#define  BIT30    0x40000000
+#endif
+#ifndef  BIT31
+#define  BIT31    0x80000000
+#endif
+
+  //
+  // Define a Memory Region that will allow access to the HDA PCI Configuration Space
+  //
+  OperationRegion(HDAR, PCI_Config, 0x00, 0x100)
+  Field(HDAR,WordAcc,NoLock,Preserve) {
+    VDID,32,        // 0x00, VID DID
+    Offset(0x48),   // 0x48, CGCTL - Clock Gating Control
+        ,6,
+    MBCG,1,         // MISCBDCGE [BIT6]
+    Offset(0x54),   // 0x54, Power Management Control and Status Register
+        ,8,
+    PMEE,1,
+        ,6,
+    PMES,1          // PME Status
+  }
+
+  Name(_S0W, 3) // Device can wake itself from D3 in S0
+
+  Method(_DSW, 3) { Store(Arg0, PMEE) } // Device wake enable
+
+
+  Method(_PRW, 0) { Return(GPRW(0x0D, 4)) }  // Can wakeup from S4 state
+
+  // GPE handler for HDA, this is part of _Lxx handler for bus 0 PME
+  Method(GPEH) {
+    If(LEqual(VDID, 0xFFFFFFFF)) {
+      Return()
+    }
+
+    If(LAnd(PMEE, PMES)) {
+      ADBG("HDAS GPEH")
+      Store(1, PMES) // clear PME Status
+      Notify(CAVS, 0x02)
+    }
+  }
+
+  // NHLT Table memory descriptor, returned from _DSM
+  Name(NBUF, ResourceTemplate () {
+    // NHLT table address (_MIN = NHLT 64bit pointer, _MAX = _MIN + _LEN - 1) and length (_LEN)
+    QWordMemory (ResourceConsumer, , MinNotFixed, MaxNotFixed, NonCacheable, ReadOnly,
+                0x1,                // AddressGranularity
+                0x0000000000000000, // AddressMinimum _MIN
+                0x0000000000000000, // AddressMaximum _MAX
+                0x0,
+                0x0,                // RangeLength _LEN
+                , , NHLT, AddressRangeACPI,)
+  })
+
+  Method(AUWA,0,Serialized)
+  {
+    If(LEqual(PCHS, 1)) {
+      If(LEqual(\_SB.PC00.LPC0.CRID, 0x0)) { Return (1) } // Apply to SPT-H A0 stepping (RevID = 0x0)
+    } else {
+    If(LEqual(\_SB.PC00.LPC0.CRID, 0x0)) { Return (1) } // Apply to SPT-LP A0 stepping (RevID = 0x0)
+    If(LEqual(\_SB.PC00.LPC0.CRID, 0x1)) { Return (1) } // Apply to SPT-LP A1 stepping (RevID = 0x1)
+    If(LEqual(\_SB.PC00.LPC0.CRID, 0x9)) { Return (1) } // Apply to SPT-LP A2 stepping (RevID = 0x9)
+    }
+    Return (0)
+  }
+
+  Method(_INI) {
+    // Update resource according to NVS
+    ADBG("HDAS _INI")
+
+    // Set NHLT base address and length
+    CreateQWordField(NBUF, ^NHLT._MIN, NBAS)
+    CreateQWordField(NBUF, ^NHLT._MAX, NMAS)
+    CreateQWordField(NBUF, ^NHLT._LEN, NLEN)
+    Store(NHLA, NBAS)
+    Add(NHLA, Subtract(NHLL, 1), NMAS)
+    Store(NHLL, NLEN)
+
+    If(LEqual(AUWA(), 1)) {
+      Store(0, \_SB.PC00.CAVS.MBCG)
+    }
+  }
+
+  Method(_DSM, 0x4, Serialized, 0, UnknownObj, {BuffObj, IntObj, IntObj, PkgObj}) {
+    // Arg0 - UUID: A69F886E-6CEB-4594-A41F-7B5DCE24C553 (Buffer)
+    // Arg1 - Revision ID: 0x01 (Integer)
+    // Arg2 - Function Index: 0x0 - 0x3 (Integer) - See below for details.
+    // Arg3 - Depends on Function Index - See below for details.
+    // Return - Depends on Function Index - See below for details.
+
+    ADBG("HDAS _DSM")
+
+    if(PCIC(Arg0)) { return(PCID(Arg0,Arg1,Arg2,Arg3)) }
+
+    // Verify UUID
+    If (LEqual(Arg0, ToUUID ("A69F886E-6CEB-4594-A41F-7B5DCE24C553"))) {
+
+          Switch(ToInteger(Arg2)) {
+
+            // Function 0: Function Support Query
+            // Arg2 - Function Index: 0x00 (Integer)
+            // Arg3: Unused
+            // Return: Bitmask of functions supported. (Buffer)
+            Case(0) {
+              // Supports function 0 - 3
+              Return(Buffer(One) { 0x0F })
+            }
+
+            // Function 1: Query Non HD Audio Descriptor Table
+            //                    Used by the Intel Offload Engine Driver to discover the
+            //                    non HD Audio devices supported by the Audio DSP.
+            // Arg2 - Function Index: 0x01 (Integer)
+            // Arg3 - Unused
+            // Return - ACPI Table describing the non HD Audio links and devices supported by the ADSP (ResourceBuffer)
+            Case(1) {
+              ADBG("_DSM Fun 1 NHLT")
+              // NBUF - Memory Resource Descriptor buffer with address and length of NHLT
+              Return(NBUF)
+            }
+
+            // Function 2: Query Feature Mask
+            //                    Used by the Intel Offload Engine Driver to retrieve a bitmask
+            //                    of features allowable on this platform.
+            // Arg2 - Function Index: 0x02 (Integer)
+            // Arg3: Unused
+            // Return: Bitmask of supported features.
+            Case (2) {
+              ADBG("_DSM Fun 2 FMSK")
+              // Bit 0 == '1', WoV is supported, Bit 0 == '0', WoV not supported
+              // Bit 1 == '1', BT Sideband is supported, Bit 1 == '0', BT not supported
+              // Bit 2 == '1', codec based VAD support allowable
+              // Bit 3 - 4 Reserved
+              // Bit 5 == '1', BT Intel HFP SCO is supported
+              // Bit 6 == '1', BT Intel A2DP is supported
+              // Bit 7 == '1', DSP based speech pre-processing disabled
+              // Bit 8 == '1', Windows Voice Activation, Bit 8 == '0', Intel Wake on Voice
+              // Bit 9 - 31 Reserved, shall be set to '0'
+              // ADFM - NVS AudioDSP Feature Bit Mask updated from PchPolicy
+              Return(ADFM)
+            }
+
+            // Function 3: Query Pre/Post Processing Module Support
+            //                    Used by the Intel Offload Engine Driver to determine if a
+            //                    specified PP Module is allowed to be supported on this platform
+            // Arg2 - Function Index: 0x03 (Integer)
+            // Arg3 - UUID: Specifies the UUID of the PP module to check (Buffer)
+            // Return - TRUE if PP Module supported, else FALSE.
+            Case (3) {
+              ADBG("_DSM Fun 3 PPMS")
+              // ADPM - NVS AudioDSP Post-Processing Module Bit Mask updated from PchPolicy: HdaConfig->DspPpModuleMask
+
+              //
+              // Example (to be updated with real GUIDs of supported 3rd party IP):
+              //
+              // 3rd Party DSP Processing Module 1 placeholder (enabled by policy HdaConfig->DspPpModuleMask |= BIT0)
+              // Check PP module with GUID AABBCCDD-EEFF-1122-3344-556677889900
+              // If (LEqual(Arg3, ToUUID ("AABBCCDD-EEFF-1122-3344-556677889900"))){
+              //   Return(And(ADPM, 0x1)) // DspPpModuleMask[BIT0] / ADPM[BIT0] set - supported 3rd Party Processing Module 1(return true)
+              // }
+              //
+              // 3rd Party DSP Processing Module 5 placeholder (enabled by policy HdaConfig->DspPpModuleMask |= BIT5)
+              // Check PP module with GUID 11111111-2222-3333-4444-AABBCCDDEEFF
+              // If (LEqual(Arg3, ToUUID ("11111111-2222-3333-4444-AABBCCDDEEFF"))){
+              //   Return(And(ADPM, 0x20)) // DspPpModuleMask[BIT5] / ADPM[BIT5] set - supported 3rd Party Processing Module 5(return true)
+              // }
+              //
+              // Implement for all supported PP modules
+              //
+              Return(Buffer() {0x00}) // Is not supported
+            }
+
+            Default {
+              // Function not supported (Arg2)
+              ADBG("_DSM Fun NOK")
+              Return(Buffer(One) { 0x00 })
+            }
+          } // Switch(Arg2) End
+    } // If(Arg0, UUID) End
+
+
+    // UUID not supported (Arg0)
+    ADBG("_DSM UUID NOK")
+    //Fix warning: not all control paths return a value
+    Return(Buffer() {0x00})
+  } // _DSM End
+
+} // end "High Definition Audio Controller"
diff --git a/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/PchNvs.asl b/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/PchNvs.asl
new file mode 100644
index 0000000000..bd27ca7342
--- /dev/null
+++ b/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/PchNvs.asl
@@ -0,0 +1,271 @@
+/** @file
+
+  @copyright
+  Copyright 2013 - 2016 Intel Corporation. <BR>
+
+  SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+  //
+  // Define PCH NVS Area operatino region.
+  //
+
+
+
+  OperationRegion(PNVA,SystemMemory,PNVB,PNVL)
+  Field(PNVA,AnyAcc,Lock,Preserve)
+  {
+  Offset(0),      RCRV, 32, // Offset(0),     RC Revision
+  Offset(4),      PCHS, 16, // Offset(4),     PCH Series
+  Offset(6),      PCHG, 16, // Offset(6),     PCH Generation
+  Offset(8),      RPA1, 32, // Offset(8),     Root Port address 1
+  Offset(12),     RPA2, 32, // Offset(12),    Root Port address 2
+  Offset(16),     RPA3, 32, // Offset(16),    Root Port address 3
+  Offset(20),     RPA4, 32, // Offset(20),    Root Port address 4
+  Offset(24),     RPA5, 32, // Offset(24),    Root Port address 5
+  Offset(28),     RPA6, 32, // Offset(28),    Root Port address 6
+  Offset(32),     RPA7, 32, // Offset(32),    Root Port address 7
+  Offset(36),     RPA8, 32, // Offset(36),    Root Port address 8
+  Offset(40),     RPA9, 32, // Offset(40),    Root Port address 9
+  Offset(44),     RPAA, 32, // Offset(44),    Root Port address 10
+  Offset(48),     RPAB, 32, // Offset(48),    Root Port address 11
+  Offset(52),     RPAC, 32, // Offset(52),    Root Port address 12
+  Offset(56),     RPAD, 32, // Offset(56),    Root Port address 13
+  Offset(60),     RPAE, 32, // Offset(60),    Root Port address 14
+  Offset(64),     RPAF, 32, // Offset(64),    Root Port address 15
+  Offset(68),     RPAG, 32, // Offset(68),    Root Port address 16
+  Offset(72),     RPAH, 32, // Offset(72),    Root Port address 17
+  Offset(76),     RPAI, 32, // Offset(76),    Root Port address 18
+  Offset(80),     RPAJ, 32, // Offset(80),    Root Port address 19
+  Offset(84),     RPAK, 32, // Offset(84),    Root Port address 20
+  Offset(88),     NHLA, 64, // Offset(88),    HD-Audio NHLT ACPI address
+  Offset(96),     NHLL, 32, // Offset(96),    HD-Audio NHLT ACPI length
+  Offset(100),    ADFM, 32, // Offset(100),   HD-Audio DSP Feature Mask
+  Offset(104),    SBRG, 32, // Offset(104),   SBREG_BAR
+  Offset(108),    GPEM, 32, // Offset(108),   GPP_X to GPE_DWX mapping
+  Offset(112),    G2L0, 32, // Offset(112),   GPE 2-tier level edged enabled Gpio pads (Group Index 0)
+  Offset(116),    G2L1, 32, // Offset(116),   GPE 2-tier level edged enabled Gpio pads (Group Index 1)
+  Offset(120),    G2L2, 32, // Offset(120),   GPE 2-tier level edged enabled Gpio pads (Group Index 2)
+  Offset(124),    G2L3, 32, // Offset(124),   GPE 2-tier level edged enabled Gpio pads (Group Index 3)
+  Offset(128),    G2L4, 32, // Offset(128),   GPE 2-tier level edged enabled Gpio pads (Group Index 4)
+  Offset(132),    G2L5, 32, // Offset(132),   GPE 2-tier level edged enabled Gpio pads (Group Index 5)
+  Offset(136),    G2L6, 32, // Offset(136),   GPE 2-tier level edged enabled Gpio pads (Group Index 6)
+  Offset(140),    G2L7, 32, // Offset(140),   GPE 2-tier level edged enabled Gpio pads (Group Index 7)
+  Offset(144),    G2L8, 32, // Offset(144),   GPE 2-tier level edged enabled Gpio pads (Group Index 8)
+  Offset(148),    G2L9, 32, // Offset(148),   GPE 2-tier level edged enabled Gpio pads (Group Index 9)
+  Offset(152),    G2LA, 32, // Offset(152),   GPE 2-tier level edged enabled Gpio pads (Group Index 10)
+  Offset(156),    G2LB, 32, // Offset(156),   GPE 2-tier level edged enabled Gpio pads (Group Index 11)
+  Offset(160),    G2LC, 32, // Offset(160),   GPE 2-tier level edged enabled Gpio pads (Groip Index 12)
+
+  Offset(164),    PML1, 16, // Offset(164),   PCIE LTR max snoop Latency 1
+  Offset(166),    PML2, 16, // Offset(166),   PCIE LTR max snoop Latency 2
+  Offset(168),    PML3, 16, // Offset(168),   PCIE LTR max snoop Latency 3
+  Offset(170),    PML4, 16, // Offset(170),   PCIE LTR max snoop Latency 4
+  Offset(172),    PML5, 16, // Offset(172),   PCIE LTR max snoop Latency 5
+  Offset(174),    PML6, 16, // Offset(174),   PCIE LTR max snoop Latency 6
+  Offset(176),    PML7, 16, // Offset(176),   PCIE LTR max snoop Latency 7
+  Offset(178),    PML8, 16, // Offset(178),   PCIE LTR max snoop Latency 8
+  Offset(180),    PML9, 16, // Offset(180),   PCIE LTR max snoop Latency 9
+  Offset(182),    PMLA, 16, // Offset(182),   PCIE LTR max snoop Latency 10
+  Offset(184),    PMLB, 16, // Offset(184),   PCIE LTR max snoop Latency 11
+  Offset(186),    PMLC, 16, // Offset(186),   PCIE LTR max snoop Latency 12
+  Offset(188),    PMLD, 16, // Offset(188),   PCIE LTR max snoop Latency 13
+  Offset(190),    PMLE, 16, // Offset(190),   PCIE LTR max snoop Latency 14
+  Offset(192),    PMLF, 16, // Offset(192),   PCIE LTR max snoop Latency 15
+  Offset(194),    PMLG, 16, // Offset(194),   PCIE LTR max snoop Latency 16
+  Offset(196),    PMLH, 16, // Offset(196),   PCIE LTR max snoop Latency 17
+  Offset(198),    PMLI, 16, // Offset(198),   PCIE LTR max snoop Latency 18
+  Offset(200),    PMLJ, 16, // Offset(200),   PCIE LTR max snoop Latency 19
+  Offset(202),    PMLK, 16, // Offset(202),   PCIE LTR max snoop Latency 20
+  Offset(204),    PNL1, 16, // Offset(204),   PCIE LTR max no snoop Latency 1
+  Offset(206),    PNL2, 16, // Offset(206),   PCIE LTR max no snoop Latency 2
+  Offset(208),    PNL3, 16, // Offset(208),   PCIE LTR max no snoop Latency 3
+  Offset(210),    PNL4, 16, // Offset(210),   PCIE LTR max no snoop Latency 4
+  Offset(212),    PNL5, 16, // Offset(212),   PCIE LTR max no snoop Latency 5
+  Offset(214),    PNL6, 16, // Offset(214),   PCIE LTR max no snoop Latency 6
+  Offset(216),    PNL7, 16, // Offset(216),   PCIE LTR max no snoop Latency 7
+  Offset(218),    PNL8, 16, // Offset(218),   PCIE LTR max no snoop Latency 8
+  Offset(220),    PNL9, 16, // Offset(220),   PCIE LTR max no snoop Latency 9
+  Offset(222),    PNLA, 16, // Offset(222),   PCIE LTR max no snoop Latency 10
+  Offset(224),    PNLB, 16, // Offset(224),   PCIE LTR max no snoop Latency 11
+  Offset(226),    PNLC, 16, // Offset(226),   PCIE LTR max no snoop Latency 12
+  Offset(228),    PNLD, 16, // Offset(228),   PCIE LTR max no snoop Latency 13
+  Offset(230),    PNLE, 16, // Offset(230),   PCIE LTR max no snoop Latency 14
+  Offset(232),    PNLF, 16, // Offset(232),   PCIE LTR max no snoop Latency 15
+  Offset(234),    PNLG, 16, // Offset(234),   PCIE LTR max no snoop Latency 16
+  Offset(236),    PNLH, 16, // Offset(236),   PCIE LTR max no snoop Latency 17
+  Offset(238),    PNLI, 16, // Offset(238),   PCIE LTR max no snoop Latency 18
+  Offset(240),    PNLJ, 16, // Offset(240),   PCIE LTR max no snoop Latency 19
+  Offset(242),    PNLK, 16, // Offset(242),   PCIE LTR max no snoop Latency 20
+  Offset(244),    U0C0, 32, // Offset(244),   SerialIo Hidden UART0 BAR 0
+  Offset(248),    U1C0, 32, // Offset(248),   SerialIo Hidden UART1 BAR 0
+  Offset(252),    ADPM, 32, // Offset(252),   HD-Audio DSP Post-Processing Module Mask
+  Offset(256),    XHPC, 8,  // Offset(256),   Number of HighSpeed ports implemented in XHCI controller
+  Offset(257),    XRPC, 8,  // Offset(257),   Number of USBR ports implemented in XHCI controller
+  Offset(258),    XSPC, 8,  // Offset(258),   Number of SuperSpeed ports implemented in XHCI controller
+  Offset(259),    XSPA, 8,  // Offset(259),   Address of 1st SuperSpeed port
+  Offset(260),    HPTB, 32, // Offset(260),   HPET base address
+  Offset(264),    HPTE, 8,  // Offset(264),   HPET enable
+  //110-bytes large SerialIo block
+  Offset(265),    SMD0, 8,  // Offset(265),   SerialIo controller 0 (sdma) mode (0: disabled, 1: pci, 2: acpi, 3: debug port)
+  Offset(266),    SMD1, 8,  // Offset(266),   SerialIo controller 1 (i2c0) mode (0: disabled, 1: pci, 2: acpi, 3: debug port)
+  Offset(267),    SMD2, 8,  // Offset(267),   SerialIo controller 2 (i2c1) mode (0: disabled, 1: pci, 2: acpi, 3: debug port)
+  Offset(268),    SMD3, 8,  // Offset(268),   SerialIo controller 3 (spi0) mode (0: disabled, 1: pci, 2: acpi, 3: debug port)
+  Offset(269),    SMD4, 8,  // Offset(269),   SerialIo controller 4 (spi1) mode (0: disabled, 1: pci, 2: acpi, 3: debug port)
+  Offset(270),    SMD5, 8,  // Offset(270),   SerialIo controller 5 (ua00) mode (0: disabled, 1: pci, 2: acpi, 3: debug port)
+  Offset(271),    SMD6, 8,  // Offset(271),   SerialIo controller 6 (ua01) mode (0: disabled, 1: pci, 2: acpi, 3: debug port)
+  Offset(272),    SMD7, 8,  // Offset(272),   SerialIo controller 7 (shdc) mode (0: disabled, 1: pci, 2: acpi, 3: debug port)
+  Offset(273),    SMD8, 8,  // Offset(273),   SerialIo controller 8 (shdc) mode (0: disabled, 1: pci, 2: acpi, 3: debug port)
+  Offset(274),    SMD9, 8,  // Offset(274),   SerialIo controller 9 (shdc) mode (0: disabled, 1: pci, 2: acpi, 3: debug port)
+  Offset(275),    SMDA, 8,  // Offset(275),   SerialIo controller A (shdc) mode (0: disabled, 1: pci, 2: acpi, 3: debug port)
+  Offset(276),    SIR0, 8,  // Offset(276),   SerialIo controller 0 (sdma) irq number
+  Offset(277),    SIR1, 8,  // Offset(277),   SerialIo controller 1 (i2c0) irq number
+  Offset(278),    SIR2, 8,  // Offset(278),   SerialIo controller 2 (i2c1) irq number
+  Offset(279),    SIR3, 8,  // Offset(279),   SerialIo controller 3 (spi0) irq number
+  Offset(280),    SIR4, 8,  // Offset(280),   SerialIo controller 4 (spi1) irq number
+  Offset(281),    SIR5, 8,  // Offset(281),   SerialIo controller 5 (ua00) irq number
+  Offset(282),    SIR6, 8,  // Offset(282),   SerialIo controller 6 (ua01) irq number
+  Offset(283),    SIR7, 8,  // Offset(283),   SerialIo controller 7 (shdc) irq number
+  Offset(284),    SIR8, 8,  // Offset(284),   SerialIo controller 8 (shdc) irq number
+  Offset(285),    SIR9, 8,  // Offset(285),   SerialIo controller 9 (shdc) irq number
+  Offset(286),    SIRA, 8,  // Offset(286),   SerialIo controller A (shdc) irq number
+  Offset(287),    SB00, 32, // Offset(287),   SerialIo controller 0 (sdma) BAR0
+  Offset(291),    SB01, 32, // Offset(291),   SerialIo controller 1 (i2c0) BAR0
+  Offset(295),    SB02, 32, // Offset(295),   SerialIo controller 2 (i2c1) BAR0
+  Offset(299),    SB03, 32, // Offset(299),   SerialIo controller 3 (spi0) BAR0
+  Offset(303),    SB04, 32, // Offset(303),   SerialIo controller 4 (spi1) BAR0
+  Offset(307),    SB05, 32, // Offset(307),   SerialIo controller 5 (ua00) BAR0
+  Offset(311),    SB06, 32, // Offset(311),   SerialIo controller 6 (ua01) BAR0
+  Offset(315),    SB07, 32, // Offset(315),   SerialIo controller 7 (shdc) BAR0
+  Offset(319),    SB08, 32, // Offset(319),   SerialIo controller 8 (shdc) BAR0
+  Offset(323),    SB09, 32, // Offset(323),   SerialIo controller 9 (shdc) BAR0
+  Offset(327),    SB0A, 32, // Offset(327),   SerialIo controller A (shdc) BAR0
+  Offset(331),    SB10, 32, // Offset(331),   SerialIo controller 0 (sdma) BAR1
+  Offset(335),    SB11, 32, // Offset(335),   SerialIo controller 1 (i2c0) BAR1
+  Offset(339),    SB12, 32, // Offset(339),   SerialIo controller 2 (i2c1) BAR1
+  Offset(343),    SB13, 32, // Offset(343),   SerialIo controller 3 (spi0) BAR1
+  Offset(347),    SB14, 32, // Offset(347),   SerialIo controller 4 (spi1) BAR1
+  Offset(351),    SB15, 32, // Offset(351),   SerialIo controller 5 (ua00) BAR1
+  Offset(355),    SB16, 32, // Offset(355),   SerialIo controller 6 (ua01) BAR1
+  Offset(359),    SB17, 32, // Offset(359),   SerialIo controller 7 (shdc) BAR1
+  Offset(363),    SB18, 32, // Offset(363),   SerialIo controller 8 (shdc) BAR1
+  Offset(367),    SB19, 32, // Offset(367),   SerialIo controller 9 (shdc) BAR1
+  Offset(371),    SB1A, 32, // Offset(371),   SerialIo controller A (shdc) BAR1
+  //end of SerialIo block
+  Offset(375),    GPEN, 8,  // Offset(375),   GPIO enabled
+  Offset(376),    SGIR, 8,  // Offset(376),   GPIO IRQ
+  Offset(377),    NIT1, 8,  // Offset(377),   RST PCIe Storage Cycle Router#1 Interface Type
+  Offset(378),    NIT2, 8,  // Offset(378),   RST PCIe Storage Cycle Router#2 Interface Type
+  Offset(379),    NIT3, 8,  // Offset(379),   RST PCIe Storage Cycle Router#3 Interface Type
+  Offset(380),    NPM1, 8,  // Offset(380),   RST PCIe Storage Cycle Router#1 Power Management Capability Pointer
+  Offset(381),    NPM2, 8,  // Offset(381),   RST PCIe Storage Cycle Router#2 Power Management Capability Pointer
+  Offset(382),    NPM3, 8,  // Offset(382),   RST PCIe Storage Cycle Router#3 Power Management Capability Pointer
+  Offset(383),    NPC1, 8,  // Offset(383),   RST PCIe Storage Cycle Router#1 PCIe Capabilities Pointer
+  Offset(384),    NPC2, 8,  // Offset(384),   RST PCIe Storage Cycle Router#2 PCIe Capabilities Pointer
+  Offset(385),    NPC3, 8,  // Offset(385),   RST PCIe Storage Cycle Router#3 PCIe Capabilities Pointer
+  Offset(386),    NL11, 16, // Offset(386),   RST PCIe Storage Cycle Router#1 L1SS Capability Pointer
+  Offset(388),    NL12, 16, // Offset(388),   RST PCIe Storage Cycle Router#2 L1SS Capability Pointer
+  Offset(390),    NL13, 16, // Offset(390),   RST PCIe Storage Cycle Router#3 L1SS Capability Pointer
+  Offset(392),    ND21, 8,  // Offset(392),   RST PCIe Storage Cycle Router#1 Endpoint L1SS Control Data2
+  Offset(393),    ND22, 8,  // Offset(393),   RST PCIe Storage Cycle Router#2 Endpoint L1SS Control Data2
+  Offset(394),    ND23, 8,  // Offset(394),   RST PCIe Storage Cycle Router#3 Endpoint L1SS Control Data2
+  Offset(395),    ND11, 32, // Offset(395),   RST PCIe Storage Cycle Router#1 Endpoint L1SS Control Data1
+  Offset(399),    ND12, 32, // Offset(399),   RST PCIe Storage Cycle Router#2 Endpoint L1SS Control Data1
+  Offset(403),    ND13, 32, // Offset(403),   RST PCIe Storage Cycle Router#3 Endpoint L1SS Control Data1
+  Offset(407),    NLR1, 16, // Offset(407),   RST PCIe Storage Cycle Router#1 LTR Capability Pointer
+  Offset(409),    NLR2, 16, // Offset(409),   RST PCIe Storage Cycle Router#2 LTR Capability Pointer
+  Offset(411),    NLR3, 16, // Offset(411),   RST PCIe Storage Cycle Router#3 LTR Capability Pointer
+  Offset(413),    NLD1, 32, // Offset(413),   RST PCIe Storage Cycle Router#1 Endpoint LTR Data
+  Offset(417),    NLD2, 32, // Offset(417),   RST PCIe Storage Cycle Router#2 Endpoint LTR Data
+  Offset(421),    NLD3, 32, // Offset(421),   RST PCIe Storage Cycle Router#3 Endpoint LTR Data
+  Offset(425),    NEA1, 16, // Offset(425),   RST PCIe Storage Cycle Router#1 Endpoint LCTL Data
+  Offset(427),    NEA2, 16, // Offset(427),   RST PCIe Storage Cycle Router#2 Endpoint LCTL Data
+  Offset(429),    NEA3, 16, // Offset(429),   RST PCIe Storage Cycle Router#3 Endpoint LCTL Data
+  Offset(431),    NEB1, 16, // Offset(431),   RST PCIe Storage Cycle Router#1 Endpoint DCTL Data
+  Offset(433),    NEB2, 16, // Offset(433),   RST PCIe Storage Cycle Router#2 Endpoint DCTL Data
+  Offset(435),    NEB3, 16, // Offset(435),   RST PCIe Storage Cycle Router#3 Endpoint DCTL Data
+  Offset(437),    NEC1, 16, // Offset(437),   RST PCIe Storage Cycle Router#1 Endpoint DCTL2 Data
+  Offset(439),    NEC2, 16, // Offset(439),   RST PCIe Storage Cycle Router#2 Endpoint DCTL2 Data
+  Offset(441),    NEC3, 16, // Offset(441),   RST PCIe Storage Cycle Router#3 Endpoint DCTL2 Data
+  Offset(443),    NRA1, 16, // Offset(443),   RST PCIe Storage Cycle Router#1 RootPort DCTL2 Data
+  Offset(445),    NRA2, 16, // Offset(445),   RST PCIe Storage Cycle Router#2 RootPort DCTL2 Data
+  Offset(447),    NRA3, 16, // Offset(447),   RST PCIe Storage Cycle Router#3 RootPort DCTL2 Data
+  Offset(449),    NMB1, 32, // Offset(449),   RST PCIe Storage Cycle Router#1 Endpoint unique MSI-X Table BAR
+  Offset(453),    NMB2, 32, // Offset(453),   RST PCIe Storage Cycle Router#2 Endpoint unique MSI-X Table BAR
+  Offset(457),    NMB3, 32, // Offset(457),   RST PCIe Storage Cycle Router#3 Endpoint unique MSI-X Table BAR
+  Offset(461),    NMV1, 32, // Offset(461),   RST PCIe Storage Cycle Router#1 Endpoint unique MSI-X Table BAR value
+  Offset(465),    NMV2, 32, // Offset(465),   RST PCIe Storage Cycle Router#2 Endpoint unique MSI-X Table BAR value
+  Offset(469),    NMV3, 32, // Offset(469),   RST PCIe Storage Cycle Router#3 Endpoint unique MSI-X Table BAR value
+  Offset(473),    NPB1, 32, // Offset(473),   RST PCIe Storage Cycle Router#1 Endpoint unique MSI-X PBA BAR
+  Offset(477),    NPB2, 32, // Offset(477),   RST PCIe Storage Cycle Router#2 Endpoint unique MSI-X PBA BAR
+  Offset(481),    NPB3, 32, // Offset(481),   RST PCIe Storage Cycle Router#3 Endpoint unique MSI-X PBA BAR
+  Offset(485),    NPV1, 32, // Offset(485),   RST PCIe Storage Cycle Router#1 Endpoint unique MSI-X PBA BAR value
+  Offset(489),    NPV2, 32, // Offset(489),   RST PCIe Storage Cycle Router#2 Endpoint unique MSI-X PBA BAR value
+  Offset(493),    NPV3, 32, // Offset(493),   RST PCIe Storage Cycle Router#3 Endpoint unique MSI-X PBA BAR value
+  Offset(497),        , 8,  // Offset(497),   Flag indicating Exit Boot Service, to inform SMM
+  Offset(498),    SXRB, 32, // Offset(498),   Sx handler reserved MMIO base
+  Offset(502),    SXRS, 32, // Offset(502),   Sx handler reserved MMIO size
+  Offset(506),    CIOE, 8,  // Offset(506),   Cio2 Device Enabled as ACPI device
+  Offset(507),    CIOI, 8,  // Offset(507),   Cio2 Interrupt Number
+  Offset(508),    TAEN, 8,  // Offset(508),   Thermal Device Acpi mode enabled
+  Offset(509),    TIRQ, 8,  // Offset(509),   Thermal Device IRQ number
+  Offset(510),    XWMB, 32, // Offset(510),   XHCI memory base address
+  Offset(514),    EMH4, 8,  // Offset(514),   eMMC HS400 mode enabled
+  Offset(515),    CSKU, 8,  // Offset(515),   CPU SKU
+  Offset(516),    ITA0, 16, // Offset(516),
+  Offset(518),    ITA1, 16, // Offset(518),
+  Offset(520),    ITA2, 16, // Offset(520),
+  Offset(522),    ITA3, 16, // Offset(522),
+  Offset(524),    ITS0, 8,  // Offset(524),
+  Offset(525),    ITS1, 8,  // Offset(525),
+  Offset(526),    ITS2, 8,  // Offset(526),
+  Offset(527),    ITS3, 8,  // Offset(527),
+  Offset(528),    LTR1, 8,  // Offset(528),   Latency Tolerance Reporting Enable
+  Offset(529),    LTR2, 8,  // Offset(529),   Latency Tolerance Reporting Enable
+  Offset(530),    LTR3, 8,  // Offset(530),   Latency Tolerance Reporting Enable
+  Offset(531),    LTR4, 8,  // Offset(531),   Latency Tolerance Reporting Enable
+  Offset(532),    LTR5, 8,  // Offset(532),   Latency Tolerance Reporting Enable
+  Offset(533),    LTR6, 8,  // Offset(533),   Latency Tolerance Reporting Enable
+  Offset(534),    LTR7, 8,  // Offset(534),   Latency Tolerance Reporting Enable
+  Offset(535),    LTR8, 8,  // Offset(535),   Latency Tolerance Reporting Enable
+  Offset(536),    LTR9, 8,  // Offset(536),   Latency Tolerance Reporting Enable
+  Offset(537),    LTRA, 8,  // Offset(537),   Latency Tolerance Reporting Enable
+  Offset(538),    LTRB, 8,  // Offset(538),   Latency Tolerance Reporting Enable
+  Offset(539),    LTRC, 8,  // Offset(539),   Latency Tolerance Reporting Enable
+  Offset(540),    LTRD, 8,  // Offset(540),   Latency Tolerance Reporting Enable
+  Offset(541),    LTRE, 8,  // Offset(541),   Latency Tolerance Reporting Enable
+  Offset(542),    LTRF, 8,  // Offset(542),   Latency Tolerance Reporting Enable
+  Offset(543),    LTRG, 8,  // Offset(543),   Latency Tolerance Reporting Enable
+  Offset(544),    LTRH, 8,  // Offset(544),   Latency Tolerance Reporting Enable
+  Offset(545),    LTRI, 8,  // Offset(545),   Latency Tolerance Reporting Enable
+  Offset(546),    LTRJ, 8,  // Offset(546),   Latency Tolerance Reporting Enable
+  Offset(547),    LTRK, 8,  // Offset(547),   Latency Tolerance Reporting Enable
+  Offset(548),    OBF1, 8,  // Offset(548),   Optimized Buffer Flush and Fill
+  Offset(549),    OBF2, 8,  // Offset(549),   Optimized Buffer Flush and Fill
+  Offset(550),    OBF3, 8,  // Offset(550),   Optimized Buffer Flush and Fill
+  Offset(551),    OBF4, 8,  // Offset(551),   Optimized Buffer Flush and Fill
+  Offset(552),    OBF5, 8,  // Offset(552),   Optimized Buffer Flush and Fill
+  Offset(553),    OBF6, 8,  // Offset(553),   Optimized Buffer Flush and Fill
+  Offset(554),    OBF7, 8,  // Offset(554),   Optimized Buffer Flush and Fill
+  Offset(555),    OBF8, 8,  // Offset(555),   Optimized Buffer Flush and Fill
+  Offset(556),    OBF9, 8,  // Offset(556),   Optimized Buffer Flush and Fill
+  Offset(557),    OBFA, 8,  // Offset(557),   Optimized Buffer Flush and Fill
+  Offset(558),    OBFB, 8,  // Offset(558),   Optimized Buffer Flush and Fill
+  Offset(559),    OBFC, 8,  // Offset(559),   Optimized Buffer Flush and Fill
+  Offset(560),    OBFD, 8,  // Offset(560),   Optimized Buffer Flush and Fill
+  Offset(561),    OBFE, 8,  // Offset(561),   Optimized Buffer Flush and Fill
+  Offset(562),    OBFF, 8,  // Offset(562),   Optimized Buffer Flush and Fill
+  Offset(563),    OBFG, 8,  // Offset(563),   Optimized Buffer Flush and Fill
+  Offset(564),    OBFH, 8,  // Offset(564),   Optimized Buffer Flush and Fill
+  Offset(565),    OBFI, 8,  // Offset(565),   Optimized Buffer Flush and Fill
+  Offset(566),    OBFJ, 8,  // Offset(566),   Optimized Buffer Flush and Fill
+  Offset(567),    OBFK, 8,  // Offset(567),   Optimized Buffer Flush and Fill
+  Offset(568),    ECR1, 8,  // Offset(568),   External Change Request
+  Offset(569),    AG1L, 64, // Offset(569),   HDA PP module custom GUID 1 - first 64bit  [0-63]
+  Offset(577),    AG1H, 64, // Offset(577),   HDA PP module custom GUID 1 - second 64bit [64-127]
+  Offset(585),    AG2L, 64, // Offset(585),   HDA PP module custom GUID 2 - first 64bit  [0-63]
+  Offset(593),    AG2H, 64, // Offset(593),   HDA PP module custom GUID 2 - second 64bit [64-127]
+  Offset(601),    AG3L, 64, // Offset(601),   HDA PP module custom GUID 3 - first 64bit  [0-63]
+  Offset(609),    AG3H, 64, // Offset(609),   HDA PP module custom GUID 3 - second 64bit [64-127]
+  Offset(617),    MCFG, 32  // Offset(617),   PcieMmCfgBaseAddress
+  }
diff --git a/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/PchPcie.asl b/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/PchPcie.asl
new file mode 100644
index 0000000000..21d68c55bc
--- /dev/null
+++ b/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/PchPcie.asl
@@ -0,0 +1,203 @@
+/** @file
+
+  @copyright
+  Copyright 1999 - 2015 Intel Corporation. <BR>
+
+  SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+  OperationRegion(PXCS,PCI_Config,0x00,0x480)
+  Field(PXCS,AnyAcc, NoLock, Preserve)
+  {
+    Offset(0),
+    VDID, 32,
+    Offset(0x50), // LCTL - Link Control Register
+    L0SE, 1,      // 0, L0s Entry Enabled
+    , 3,
+    LDIS, 1,
+    , 3,
+    Offset(0x52), // LSTS - Link Status Register
+    , 13,
+    LASX, 1,      // 0, Link Active Status
+    Offset(0x5A), // SLSTS[7:0] - Slot Status Register
+    ABPX, 1,      // 0, Attention Button Pressed
+    , 2,
+    PDCX, 1,      // 3, Presence Detect Changed
+    , 2,
+    PDSX, 1,      // 6, Presence Detect State
+    , 1,
+    Offset(0x60), // RSTS - Root Status Register
+    , 16,
+    PSPX, 1,      // 16,  PME Status
+    Offset(0xA4),
+    D3HT, 2,      // Power State
+    Offset(0xD8), // MPC - Miscellaneous Port Configuration Register
+    , 30,
+    HPEX, 1,      // 30,  Hot Plug SCI Enable
+    PMEX, 1,      // 31,  Power Management SCI Enable
+    Offset(0xE2), // RPPGEN - Root Port Power Gating Enable
+    , 2,
+    L23E, 1,      // 2,   L23_Rdy Entry Request (L23ER)
+    L23R, 1,       // 3,   L23_Rdy to Detect Transition (L23R2DT)
+    Offset(0x324),
+    , 3,
+    LEDM, 1,       // PCIEDBG.DMIL1EDM
+    Offset(0x420), // Offset 420h: PCIEPMECTL - PCIe PM Extension Control
+    , 30,
+    DPGE, 1,       // PCIEPMECTL[30]: Disabled, Detect and L23_Rdy State PHY Lane Power Gating Enable (DLSULPPGE):
+  }
+  Field(PXCS,AnyAcc, NoLock, WriteAsZeros)
+  {
+    Offset(0xDC), // SMSCS - SMI/SCI Status Register
+    , 30,
+    HPSX, 1,      // 30,  Hot Plug SCI Status
+    PMSX, 1       // 31,  Power Management SCI Status
+  }
+
+
+  Name(LTRV, Package(){0,0,0,0})
+
+  //
+  // _DSM Device Specific Method
+  //
+  // Arg0: UUID Unique function identifier
+  // Arg1: Integer Revision Level
+  // Arg2: Integer Function Index (0 = Return Supported Functions)
+  // Arg3: Package Parameters
+  Method(_DSM, 4, Serialized) {
+    //
+    // Switch based on which unique function identifier was passed in
+    //
+    If (LEqual(Arg0, ToUUID ("E5C937D0-3553-4d7a-9117-EA4D19C3434D"))) {
+      //
+      // _DSM Definitions for Latency Tolerance Reporting
+      //
+      // Arguments:
+      // Arg0: UUID: E5C937D0-3553-4d7a-9117-EA4D19C3434D
+      // Arg1: Revision ID: 2
+      // Arg2: Function Index: 1, 4 or 6
+      // Arg3: Empty Package
+      //
+      // Return:
+      // A Package of four integers corresponding with the LTR encoding defined
+      // in the PCI Express Base Specification, as follows:
+      // Integer 0: Maximum Snoop Latency Scale
+      // Integer 1: Maximum Snoop Latency Value
+      // Integer 2: Maximum No-Snoop Latency Scale
+      // Integer 3: Maximum No-Snoop Latency Value
+      // These values correspond directly to the LTR Extended Capability Structure
+      // fields described in the PCI Express Base Specification.
+      //
+      //
+      // Switch by function index
+      //
+      Switch(ToInteger(Arg2)) {
+        //
+        // Function Index:0
+        // Standard query - A bitmask of functions supported
+        //
+        Case (0) {
+          Name(OPTS,Buffer(2){0,0})
+          CreateBitField(OPTS,0,FUN0)
+          CreateBitField(OPTS,4,FUN4)
+          CreateBitField(OPTS,6,FUN6)
+          CreateBitField(OPTS,8,FUN8)
+          CreateBitField(OPTS,9,FUN9)
+
+          if (LGreaterEqual(Arg1, 2)){ // test Arg1 for Revision ID: 2
+            Store(1,FUN0)
+            if (LTRE){
+              Store(1,Fun6)
+            }
+            if (OBFF){
+              Store(1,Fun4)
+            }
+            if(LEqual(ECR1,1)){
+              if (LGreaterEqual(Arg1, 3)){ // test Arg1 for Revision ID: 3
+                Store(1,Fun8)
+                Store(1,Fun9)
+              }
+            }
+          }
+          Return (OPTS)
+        }
+        //
+        // Function Index: 4
+        //
+        Case(4) {
+          if (LGreaterEqual(Arg1, 2)){ // test Arg1 for Revision ID: 2
+            if (OBFN){
+              Return (Buffer () {0,0,0,0,0,0,0,0,0,0,0,8,0,0,0,0}) // OBFF capable, offset 4[08h]
+            } else {
+              Return (Buffer () {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0})
+            }
+          }
+        }
+        //
+        // Function Index: 6
+        // LTR Extended Capability Structure
+        //
+        Case(6) {
+          if (LGreaterEqual(Arg1, 2)){ // test Arg1 for Revision ID: 2
+            if (LTRN){
+              if (LOr(LEqual(LMSL, 0),LEqual(LNSL, 0)))
+              {
+                if (LEqual (PCHS, SPTH)) {
+                  Store (0x0846, LMSL)
+                  Store (0x0846, LNSL)
+                } elseif (LEqual (PCHS, SPTL)) {
+                  Store (0x1003, LMSL)
+                  Store (0x1003, LNSL)
+                }
+              }
+              Store(And(ShiftRight(LMSL,10),7), Index(LTRV, 0))
+              Store(And(LMSL,0x3FF), Index(LTRV, 1))
+              Store(And(ShiftRight(LNSL,10),7), Index(LTRV, 2))
+              Store(And(LNSL,0x3FF), Index(LTRV, 3))
+
+              Return (LTRV)
+            } else {
+              Return (0)
+            }
+          }
+        }
+        Case(8) { //ECR ACPI additions for FW latency optimizations, DSM for Avoiding Power-On Reset Delay Duplication on Sx Resume
+          if(LEqual(ECR1,1)){
+            if (LGreaterEqual(Arg1, 3)) { // test Arg1 for Revision ID: 3
+              return (1)
+            }
+          }
+        }
+        Case(9) { //ECR ACPI additions for FW latency optimizations, DSM for Specifying Device Readiness Durations
+          if(LEqual(ECR1,1)){
+            if (LGreaterEqual(Arg1, 3)) { // test Arg1 for Revision ID: 3
+              return(Package(5){50000,Ones,Ones,50000,Ones})
+            }
+          }
+        }
+      } // End of switch(Arg2)
+  } // End of if
+    return (Buffer() {0x00})
+  } // End of _DSM
+
+  Device(PXSX)
+  {
+    Name(_ADR, 0x00000000)
+
+    // NOTE:  Any PCIE Hot-Plug dependency for this port is
+    // specific to the CRB.  Please modify the code based on
+    // your platform requirements.
+    Method(_PRW, 0) { Return(GPRW(0x09, 4)) }  // can wakeup from S4 state
+  }
+
+  //
+  // PCI_EXP_STS Handler for PCIE Root Port
+  //
+  Method(HPME,0,Serialized) {
+    If(LAnd(LNotEqual(VDID,0xFFFFFFFF), LEqual(PMSX,1))) { //if port exists and has PME SCI Status set...
+      Notify (PXSX, 0x2) //notify child device; this will cause its driver to clear PME_Status from device
+      Store(1,PMSX) // clear rootport's PME SCI status
+      Store(1,PSPX) // consume one pending PME notification to prevent it from blocking the queue
+    }
+  }
+
diff --git a/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/PchSata.asl b/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/PchSata.asl
new file mode 100644
index 0000000000..4150833906
--- /dev/null
+++ b/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/PchSata.asl
@@ -0,0 +1,50 @@
+/** @file
+
+  @copyright
+  Copyright 2013 - 2020 Intel Corporation. <BR>
+
+  SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#define ROOTPORT_READ           0
+#define ROOTPORT_WRITE          1
+#define ENDPOINT_READ           2
+#define ENDPOINT_WRITE          3
+
+//
+// SDSM is Device Specific Method supporting AHCI DEVSLP
+// It is not guaranteed to be available on every boot
+//
+// move one level up to Pch.asl
+
+    Method(_DSM,4,serialized){
+      if(PCIC(Arg0)) { return(PCID(Arg0,Arg1,Arg2,Arg3)) };
+      if(CondRefOf(\_SB.PC00.SAT0.SDSM)) { return (\_SB.PC00.SAT0.SDSM(Arg0,Arg1,Arg2,Arg3)) };
+      Return(Buffer() {0})
+    }
+
+    Device(PRT0)
+    {
+      Name(_ADR,0x0000FFFF)  // Port 0
+    }
+    Device(PRT1)
+    {
+      Name(_ADR,0x0001FFFF)  // Port 1
+    }
+    Device(PRT2)
+    {
+      Name(_ADR,0x0002FFFF)  // Port 2
+    }
+    Device(PRT3)
+    {
+      Name(_ADR,0x0003FFFF)  // Port 3
+    }
+    Device(PRT4)
+    {
+      Name(_ADR,0x0004FFFF)  // Port 4
+    }
+    Device(PRT5)
+    {
+      Name(_ADR,0x0005FFFF)  // Port 5
+    }
+
diff --git a/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/PchXhci.asl b/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/PchXhci.asl
new file mode 100644
index 0000000000..5b9d7ed57e
--- /dev/null
+++ b/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/PchXhci.asl
@@ -0,0 +1,558 @@
+/** @file
+
+  @copyright
+  Copyright 2010 - 2020 Intel Corporation. <BR>
+
+  SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+External(\_SB.PC00.XHCI.PS0X, MethodObj)
+External(\_SB.PC00.XHCI.PS3X, MethodObj)
+External(\_SB.PC00.XHCI.RHUB.PS0X, MethodObj)
+External(\_SB.PC00.XHCI.RHUB.PS2X, MethodObj)
+External(\_SB.PC00.XHCI.RHUB.PS3X, MethodObj)
+External(\_SB.PC00.XHCI.RHUB.INIR, MethodObj)
+
+
+Scope(\_SB_.PC00.XHCI) {
+
+    OperationRegion(XPRT,PCI_Config,0x00,0x100)
+    Field(XPRT,AnyAcc,NoLock,Preserve)
+    {
+      DVID, 16,
+      Offset(0x74),
+      D0D3,  2,  // 0x74 BIT[1:0]
+          ,  6,
+      PMEE,  1,  // PME Enable
+          ,  6,
+      PMES,  1,  // PME Status
+      Offset(0xA8), // SSCFG Reg for WPTLP
+          , 13,
+      MW13,  1,  // 0xA8 BIT[13]
+      MW14,  1,  // 0xA8 BIT[14]
+          , 17,
+      Offset(0xB0), // SSCFG Reg for LPTLP
+          , 13,
+      MB13,  1,  // 0xB0 BIT[13]
+      MB14,  1,  // 0xB0 BIT[14]
+          , 17,
+      Offset(0xD0),
+      PR2,  32,  // XUSB2PR: xHC USB 2.0 Port Routing Register.
+      PR2M, 32,  // XUSB2PRM: xHC USB 2.0 Port Routing Mask Register.
+      PR3,  32,  // USB3_PSSEN: USB3.0 Port SuperSpeed Enable Register.
+      PR3M, 32   // USB3PRM: USB3.0 Port Routing Mask Register
+    }
+
+    //
+    // Variable to store the maximum D state supported in S0.
+    //
+    Name (XFLT, 0)
+    //
+    // XHCI controller won't go into D3Hot during S0 until _DSM method is evaluated by filter driver.
+    //
+    Method(_DSM,4,serialized){
+      If(PCIC(Arg0)) { return(PCID(Arg0,Arg1,Arg2,Arg3)) }
+      //
+      // Check GUID ac340cb7-e901-45bf-b7e6-2b34ec931e23
+      //
+      If(LEqual(Arg0, Buffer(0x10) { 0xb7, 0x0c, 0x34, 0xac, 0x01, 0xe9, 0xbf, 0x45, 0xb7, 0xe6, 0x2b, 0x34, 0xec, 0x93, 0x1e, 0x23 }))
+      {
+        //
+        // Only Supported value is "0x3"
+        //
+        If(LEqual(Arg1, 0x3))
+        {
+          Store(Arg1,XFLT)
+        }
+      }
+      Return(Buffer() {0})
+    }
+
+    Method(_S3D, 0, NotSerialized)
+    {
+      Return(3)
+    }
+    Method(_S4D, 0, NotSerialized)
+    {
+      Return(3)
+    }
+    Method(_S3W, 0, NotSerialized)
+    {
+      Return(3)
+    }
+    Method(_S4W, 0, NotSerialized)
+    {
+      Return(3)
+    }
+
+    //
+    // Once the filter driver is installed, D3 is allowed.
+    //
+    Method(_S0W, 0x0, NotSerialized)
+    {
+      If(LEqual(XFLT, Zero))
+      {
+        Return(0x0)
+      }
+      Else
+      {
+        Return(0x3)
+      }
+    }
+
+    Method(_PRW, 0)
+    {
+      Return(GPRW(0x6D, 4)) // can wakeup from S4 state
+    }
+
+    Method(_DSW, 3)
+    {
+      Store(Arg0, PMEE)
+    }
+
+    Method(_INI) {
+      // _INI for RTD3 run conditionally if implemented in platform specific code
+      If(CondRefOf(\_SB.PC00.XHCI.RHUB.INIR)) {      // _INI for RTD3
+        \_SB.PC00.XHCI.RHUB.INIR()
+      }
+    }
+
+    //
+    // GPE handler for XHCI, this is part of _Lxx handler for bus 0 PME
+    //
+    Method(GPEH)
+    {
+      If(LEqual(DVID, 0xFFFF)) {
+        Return()
+      }
+      Store(PMES, Local0)
+      Store(1, PMES) // clear PME Status
+      If(LAnd(PMEE, Local0)) {
+        Notify(XHCI, 0x02)
+      }
+    }
+
+    OperationRegion(XHCP, SystemMemory, Add(MCFG, 0xA0000), 0x100)
+    Field(XHCP,AnyAcc,Lock,Preserve)
+    {
+      Offset(0x4),
+      PDBM, 16,
+      Offset(0x10),
+      MEMB, 64
+    }
+
+    //
+    // USRA (USbR port Address), method for calculating address of first USBR port in XHCI controller
+    //
+    Method(USRA,0,Serialized) {
+      If(LEqual(PCHV, SPTH)) { // SPT-H
+        Return (15)
+      } Else {                 // SPT-LP
+        Return (11)
+      }
+    }
+
+    //
+    // SSPA (SuperSpeed Port Address), method for calculating address of first SS port in XHCI controller
+    //
+    Method(SSPA,0,Serialized) {
+      If(LEqual(PCHV, SPTH)) { // SPT-H
+        Return (17)
+      } Else {                 // SPT-LP
+        Return (13)
+      }
+    }
+
+    Name(XRST, Zero)
+
+    Method(_PS0,0,Serialized)
+    {
+
+      If(LEqual(^DVID,0xFFFF))
+      {
+        Return()
+      }
+
+      Store(^MEMB,Local2)         // Save MBAR
+      Store(^PDBM,Local1)         // Save CMD
+
+      And(^PDBM,Not(0x06),^PDBM)  // Clear MSE/BME
+
+      //
+      // Switch to D0
+      //
+      Store(0,^D0D3)
+
+      Store(\XWMB,^MEMB)          // Set MBAR
+      Or(Local1,0x0002,^PDBM)     // Set MSE
+
+      //
+      //
+      //
+
+      And(^PDBM,Not(0x02),^PDBM)  // Clear MSE
+
+      Store(Local2,^MEMB)         // Restore MBAR
+      Store(Local1,^PDBM)         // Restore CMD
+
+      //
+      // Call platform XHC PS0 method if present
+      //
+      If(CondRefOf(\_SB.PC00.XHCI.PS0X))
+      {
+        \_SB.PC00.XHCI.PS0X()
+      }
+        //
+        //
+        If(LAnd(UWAB,LEqual(D0D3,0))) {
+
+          //
+          // If the USB WA Bit is set and any XHCI or XDCI controller is in D0
+          //
+          //
+          // USB2 PHPY Power Gating - SW WA
+          //
+          // 1. BIOS writes a new command to the MTPMC register to cause the PMC to disable power gating
+          Store(1,MPMC)
+
+          // 2. BIOS waits for PCH_PM_STS.MSG_FULL_STS to be 0
+          //      In parallel and in response to the previous command from BIOS, PMC FW will:
+          //         * Make the USB2 force common lane PG match the BIOS policy (common lane PG disallowed)
+          //         * Disable SUS power gating in XHCI
+          //         * Wait for USB2 PHY side_pok to be 1
+          //         * Disable core power gating in USB2 PHY
+          //         * Disable common lane power gating in USB2 PHY (probably not necessary, consider removal)
+          //         * Wait for USB2 SUS restoration status to be set, and do USB2 SUS power gating restoration
+          //         * Get the PHY in the correct state before allowing transition to D0.
+          //        * Clear MSG_FULL_STS
+          //    BIOS sees MSG_FULL_STS clear and exits the method
+          //
+          While(PMFS) {
+            Sleep(10)
+          }
+        } // End If(UWAB)
+
+    }
+
+    Method(_PS3,0,Serialized)
+    {
+
+      If(LEqual(^DVID,0xFFFF))
+      {
+        Return()
+      }
+
+      Store(^MEMB,Local2)         // Save MBAR
+      Store(^PDBM,Local1)         // Save CMD
+
+      And(^PDBM,Not(0x06),^PDBM)  // Clear MSE/BME
+
+      //
+      // Switch back to D0
+      //
+      Store(0,^D0D3)
+
+      Store(\XWMB,^MEMB)          // Set MBAR
+      Or(Local1,0x0002,^PDBM)     // Set MSE
+
+      //
+      //
+      //
+
+      And(^PDBM,Not(0x02),^PDBM)  // Clear MSE
+
+      //
+      // Switch back to D3
+      //
+      Store(3,^D0D3)
+
+      Store(Local2,^MEMB)         // Restore MBAR
+      Store(Local1,^PDBM)         // Restore CMD
+
+      //
+      // Call platform XHC PS3 method if present
+      //
+      If(CondRefOf(\_SB.PC00.XHCI.PS3X))
+      {
+        \_SB.PC00.XHCI.PS3X()
+      }
+        If(LAnd(UWAB,LEqual(D0D3,3))) {
+          //
+          // If the USB WA Bit is set and XHCI is in D3
+          //
+
+          // 1. BIOS writes a new command to the MTPMC register to enable power gating
+          Store(3,MPMC)
+
+          // 2. BIOS waits for PCH_PM_STS.MSG_FULL_STS to be 0
+          //      In parallel and in response to the previous command from BIOS, PMC FW will:
+          //        * Make the USB2 force common lane PG match the BIOS policy (common lane PG allowed)
+          //        * Enable SUS power gating in XHCI
+          //        * Enable core power gating in USB2 PHY
+          //        * Enable common lane power gating in the USB2 PHY
+          //        * Clear MSG_FULL_STS
+          //    BIOS sees MSG_FULL_STS clear and exits the method
+          //
+          While(PMFS) {
+            Sleep(10)
+          }
+        } // End If(UWAB)
+    }
+
+
+    // Apply S3 workaround.
+    // Arguments :
+    //  None
+    // Changes 8090 Bit 10 before S3.
+    //
+    Method(XHCS,0, Serialized) {
+      Store(^MEMB,Local2)         // Save MBAR
+      Store(^PDBM,Local1)         // Save CMD
+
+      And(^PDBM,Not(0x06),^PDBM)  // Clear MSE/BME
+
+      Store(\XWMB,^MEMB)          // Set MBAR
+      Or(Local1,0x0002,^PDBM)     // Set MSE
+
+      OperationRegion(MC11,SystemMemory,\XWMB,0x9000)
+      Field(MC11,DWordAcc,Lock,Preserve)
+      {
+        Offset(0x8090),   //  HC Transfer Manager - TRM
+            ,  10,
+        UCLI,  1,         // CLEAR IN EP
+      }
+
+      Store(0x1,UCLI)
+
+      And(^PDBM,Not(0x02),^PDBM)  // Clear MSE
+
+      Store(Local2,^MEMB)         // Restore MBAR
+      Store(Local1,^PDBM)         // Restore CMD
+
+    }
+
+    //
+    //
+    // Check for XHCI switch UUID
+    //
+    // Arguments:
+    //  Arg0 (Buffer) : UUID
+    //
+    // Returns:
+    //  1: It's valid UUID
+    //  0: Invalid UUID
+    //
+    Method(CUID,1,Serialized) {
+      If(LEqual(Arg0,ToUUID("7c9512a9-1705-4cb4-af7d-506a2423ab71"))) {
+        Return(1)
+      }
+      Return(0)
+    }
+
+    Device(RHUB)
+    {
+      Name(_ADR, Zero)
+
+      // PS0 Method for xHCI Root Hub
+      Method(_PS0,0,Serialized)
+      {
+        If(LEqual(\_SB.PC00.XHCI.DVID,0xFFFF))
+        {
+          Return()
+        }
+        //
+        // Call platform XHC.RHUB PS0 method if present.
+        //
+        If(CondRefOf(\_SB.PC00.XHCI.RHUB.PS0X))
+        {
+          \_SB.PC00.XHCI.RHUB.PS0X()
+        }
+      }
+
+      // PS2 Method for xHCI Root Hub
+      Method(_PS2,0,Serialized)
+      {
+        If(LEqual(\_SB.PC00.XHCI.DVID,0xFFFF))
+        {
+          Return()
+        }
+        //
+        // Call platform XHC.RHUB PS2 method if present.
+        //
+        If(CondRefOf(\_SB.PC00.XHCI.RHUB.PS2X))
+        {
+          \_SB.PC00.XHCI.RHUB.PS2X()
+        }
+      }
+
+      // PS3 Method for xHCI Root Hub
+      Method(_PS3,0,Serialized)
+      {
+        If(LEqual(\_SB.PC00.XHCI.DVID,0xFFFF))
+        {
+          Return()
+        }
+        //
+        // Call platform XHC.RHUB PS3 method if present.
+        //
+        If(CondRefOf(\_SB.PC00.XHCI.RHUB.PS3X))
+        {
+          \_SB.PC00.XHCI.RHUB.PS3X()
+        }
+      }
+
+      //
+      // High Speed Ports (without USBR)
+      //
+      Device(HS01)
+      {
+        Name(_ADR, 0x01)
+      }
+
+      Device(HS02)
+      {
+        Name(_ADR, 0x02)
+      }
+
+      Device(HS03)
+      {
+        Name(_ADR, 0x03)
+      }
+
+      Device(HS04)
+      {
+        Name(_ADR, 0x04)
+      }
+
+      Device(HS05)
+      {
+        Name(_ADR, 0x05)
+      }
+
+      Device(HS06)
+      {
+        Name(_ADR, 0x06)
+      }
+
+      Device(HS07)
+      {
+        Name(_ADR, 0x07)
+      }
+
+      Device(HS08)
+      {
+        Name(_ADR, 0x08)
+      }
+
+      Device(HS09)
+      {
+        Name(_ADR, 0x09)
+      }
+
+      Device(HS10)
+      {
+        Name(_ADR, 0x0A)
+      }
+
+      //
+      // USBR port will be known as USBR instead of HS09 / HS15
+      //
+      Device(USR1)
+      {
+        Method(_ADR) { Return (Add(USRA(),0)) }
+      }
+
+      //
+      // USBR port 2 will be known as USBR instead of xxxx
+      //
+      Device(USR2)
+      {
+        Method(_ADR) { Return (Add(USRA(),1)) }
+      }
+
+      //
+      // Super Speed Ports
+      //
+      Device(SS01)
+      {
+        Method(_ADR) { Return (Add(SSPA(),0)) }
+      }
+
+      Device(SS02)
+      {
+        Method(_ADR) { Return (Add(SSPA(),1)) }
+      }
+
+      Device(SS03)
+      {
+        Method(_ADR) { Return (Add(SSPA(),2)) }
+      }
+
+      Device(SS04)
+      {
+        Method(_ADR) { Return (Add(SSPA(),3)) }
+      }
+
+      Device(SS05)
+      {
+        Method(_ADR) { Return (Add(SSPA(),4)) }
+      }
+
+      Device(SS06)
+      {
+        Method(_ADR) { Return (Add(SSPA(),5)) }
+      }
+
+    } // device rhub
+} //scope
+
+//
+// SPT-H
+//
+
+  Scope(\_SB_.PC00.XHCI.RHUB) {
+
+
+
+    Device(HS11)
+    {
+      Name(_ADR, 0xB)
+    }
+
+
+    Device(HS12)
+    {
+      Name(_ADR, 0xC)
+    }
+
+    Device(HS13)
+    {
+      Name(_ADR, 0xD)
+    }
+
+    Device(HS14)
+    {
+      Name(_ADR, 0xE)
+    }
+
+    Device(SS07)
+    {
+      Method(_ADR) { Return (Add(SSPA(),6)) }
+    }
+
+    Device(SS08)
+    {
+      Method(_ADR) { Return (Add(SSPA(),7)) }
+    }
+
+    Device(SS09)
+    {
+      Method(_ADR) { Return (Add(SSPA(),8)) }
+    }
+
+    Device(SS10)
+    {
+      Method(_ADR) { Return (Add(SSPA(),9)) }
+    }
+
+  } //scope
diff --git a/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP01_ADR.asl b/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP01_ADR.asl
new file mode 100644
index 0000000000..cfacfdbfd4
--- /dev/null
+++ b/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP01_ADR.asl
@@ -0,0 +1,15 @@
+/** @file
+
+  @copyright
+  Copyright 2015 Intel Corporation. <BR>
+
+  SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+Method (_ADR, 0) {
+  If (LNotEqual(RPA1,0)) {
+    Return (RPA1)
+  } Else {
+    Return (0x001C0000)
+  }
+}
diff --git a/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP02_ADR.asl b/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP02_ADR.asl
new file mode 100644
index 0000000000..14d239597c
--- /dev/null
+++ b/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP02_ADR.asl
@@ -0,0 +1,15 @@
+/** @file
+
+  @copyright
+  Copyright 2015 Intel Corporation. <BR>
+
+  SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+Method (_ADR, 0) {
+  If (LNotEqual(RPA2,0)) {
+    Return (RPA2)
+  } Else {
+    Return (0x001C0001)
+  }
+}
diff --git a/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP03_ADR.asl b/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP03_ADR.asl
new file mode 100644
index 0000000000..e116aa3fcf
--- /dev/null
+++ b/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP03_ADR.asl
@@ -0,0 +1,15 @@
+/** @file
+
+  @copyright
+  Copyright 2015 Intel Corporation. <BR>
+
+  SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+Method (_ADR, 0) {
+  If (LNotEqual(RPA3,0)) {
+    Return (RPA3)
+  } Else {
+    Return (0x001C0002)
+  }
+}
diff --git a/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP04_ADR.asl b/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP04_ADR.asl
new file mode 100644
index 0000000000..a89ba41f87
--- /dev/null
+++ b/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP04_ADR.asl
@@ -0,0 +1,15 @@
+/** @file
+
+  @copyright
+  Copyright 2015 Intel Corporation. <BR>
+
+  SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+Method (_ADR, 0) {
+  If (LNotEqual(RPA4,0)) {
+    Return (RPA4)
+  } Else {
+    Return (0x001C0003)
+  }
+}
diff --git a/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP05_ADR.asl b/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP05_ADR.asl
new file mode 100644
index 0000000000..82ac284b8c
--- /dev/null
+++ b/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP05_ADR.asl
@@ -0,0 +1,15 @@
+/** @file
+
+  @copyright
+  Copyright 2015 Intel Corporation. <BR>
+
+  SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+Method (_ADR, 0) {
+  If (LNotEqual(RPA5,0)) {
+    Return (RPA5)
+  } Else {
+    Return (0x001C0004)
+  }
+}
diff --git a/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP06_ADR.asl b/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP06_ADR.asl
new file mode 100644
index 0000000000..153b4b3fce
--- /dev/null
+++ b/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP06_ADR.asl
@@ -0,0 +1,15 @@
+/** @file
+
+  @copyright
+  Copyright 2015 Intel Corporation. <BR>
+
+  SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+Method (_ADR, 0) {
+  If (LNotEqual(RPA6,0)) {
+    Return (RPA6)
+  } Else {
+    Return (0x001C0005)
+  }
+}
diff --git a/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP07_ADR.asl b/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP07_ADR.asl
new file mode 100644
index 0000000000..b8f93ff22b
--- /dev/null
+++ b/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP07_ADR.asl
@@ -0,0 +1,15 @@
+/** @file
+
+  @copyright
+  Copyright 2015 Intel Corporation. <BR>
+
+  SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+Method (_ADR, 0) {
+  If (LNotEqual(RPA7,0)) {
+    Return (RPA7)
+  } Else {
+    Return (0x001C0006)
+  }
+}
diff --git a/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP08_ADR.asl b/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP08_ADR.asl
new file mode 100644
index 0000000000..ad786680b1
--- /dev/null
+++ b/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP08_ADR.asl
@@ -0,0 +1,15 @@
+/** @file
+
+  @copyright
+  Copyright 2015 Intel Corporation. <BR>
+
+  SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+Method (_ADR, 0) {
+  If (LNotEqual(RPA8,0)) {
+    Return (RPA8)
+  } Else {
+    Return (0x001C0007)
+  }
+}
diff --git a/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP09_ADR.asl b/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP09_ADR.asl
new file mode 100644
index 0000000000..8fea09fb6d
--- /dev/null
+++ b/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP09_ADR.asl
@@ -0,0 +1,15 @@
+/** @file
+
+  @copyright
+  Copyright 2015 Intel Corporation. <BR>
+
+  SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+Method (_ADR, 0) {
+  If (LNotEqual(RPA9,0)) {
+    Return (RPA9)
+  } Else {
+    Return (0x001D0000)
+  }
+}
diff --git a/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP10_ADR.asl b/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP10_ADR.asl
new file mode 100644
index 0000000000..e5faa36089
--- /dev/null
+++ b/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP10_ADR.asl
@@ -0,0 +1,15 @@
+/** @file
+
+  @copyright
+  Copyright 2015 Intel Corporation. <BR>
+
+  SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+Method (_ADR, 0) {
+  If (LNotEqual(RPAA,0)) {
+    Return (RPAA)
+  } Else {
+    Return (0x001D0001)
+  }
+}
diff --git a/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP11_ADR.asl b/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP11_ADR.asl
new file mode 100644
index 0000000000..f35101300c
--- /dev/null
+++ b/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP11_ADR.asl
@@ -0,0 +1,15 @@
+/** @file
+
+  @copyright
+  Copyright 2015 Intel Corporation. <BR>
+
+  SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+Method (_ADR, 0) {
+  If (LNotEqual(RPAB,0)) {
+    Return (RPAB)
+  } Else {
+    Return (0x001D0002)
+  }
+}
diff --git a/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP12_ADR.asl b/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP12_ADR.asl
new file mode 100644
index 0000000000..b8b8b305cd
--- /dev/null
+++ b/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP12_ADR.asl
@@ -0,0 +1,15 @@
+/** @file
+
+  @copyright
+  Copyright 2015 Intel Corporation. <BR>
+
+  SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+Method (_ADR, 0) {
+  If (LNotEqual(RPAC,0)) {
+    Return (RPAC)
+  } Else {
+    Return (0x001D0003)
+  }
+}
diff --git a/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP13_ADR.asl b/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP13_ADR.asl
new file mode 100644
index 0000000000..c81ce74af9
--- /dev/null
+++ b/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP13_ADR.asl
@@ -0,0 +1,15 @@
+/** @file
+
+  @copyright
+  Copyright 2015 Intel Corporation. <BR>
+
+  SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+Method (_ADR, 0) {
+  If (LNotEqual(RPAD,0)) {
+    Return (RPAD)
+  } Else {
+    Return (0x001D0004)
+  }
+}
diff --git a/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP14_ADR.asl b/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP14_ADR.asl
new file mode 100644
index 0000000000..3a79d7b90b
--- /dev/null
+++ b/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP14_ADR.asl
@@ -0,0 +1,15 @@
+/** @file
+
+  @copyright
+  Copyright 2015 Intel Corporation. <BR>
+
+  SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+Method (_ADR, 0) {
+  If (LNotEqual(RPAE,0)) {
+    Return (RPAE)
+  } Else {
+    Return (0x001D0005)
+  }
+}
diff --git a/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP15_ADR.asl b/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP15_ADR.asl
new file mode 100644
index 0000000000..6c5e812a02
--- /dev/null
+++ b/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP15_ADR.asl
@@ -0,0 +1,15 @@
+/** @file
+
+  @copyright
+  Copyright 2015 Intel Corporation. <BR>
+
+  SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+Method (_ADR, 0) {
+  If (LNotEqual(RPAF,0)) {
+    Return (RPAF)
+  } Else {
+    Return (0x001D0006)
+  }
+}
diff --git a/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP16_ADR.asl b/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP16_ADR.asl
new file mode 100644
index 0000000000..0099005840
--- /dev/null
+++ b/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP16_ADR.asl
@@ -0,0 +1,15 @@
+/** @file
+
+  @copyright
+  Copyright 2015 Intel Corporation. <BR>
+
+  SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+Method (_ADR, 0) {
+  If (LNotEqual(RPAG,0)) {
+    Return (RPAG)
+  } Else {
+    Return (0x001D0007)
+  }
+}
diff --git a/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP17_ADR.asl b/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP17_ADR.asl
new file mode 100644
index 0000000000..745d5523b0
--- /dev/null
+++ b/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP17_ADR.asl
@@ -0,0 +1,15 @@
+/** @file
+
+  @copyright
+  Copyright 2015 Intel Corporation. <BR>
+
+  SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+Method (_ADR, 0) {
+  If (LNotEqual(RPAH,0)) {
+    Return (RPAH)
+  } Else {
+    Return (0x001B0000)
+  }
+}
diff --git a/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP18_ADR.asl b/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP18_ADR.asl
new file mode 100644
index 0000000000..e32e1ab276
--- /dev/null
+++ b/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP18_ADR.asl
@@ -0,0 +1,15 @@
+/** @file
+
+  @copyright
+  Copyright 2015 Intel Corporation. <BR>
+
+  SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+Method (_ADR, 0) {
+  If (LNotEqual(RPAI,0)) {
+    Return (RPAI)
+  } Else {
+    Return (0x001B0001)
+  }
+}
diff --git a/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP19_ADR.asl b/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP19_ADR.asl
new file mode 100644
index 0000000000..06b8a23ab4
--- /dev/null
+++ b/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP19_ADR.asl
@@ -0,0 +1,15 @@
+/** @file
+
+  @copyright
+  Copyright 2015 Intel Corporation. <BR>
+
+  SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+Method (_ADR, 0) {
+  If (LNotEqual(RPAJ,0)) {
+    Return (RPAJ)
+  } Else {
+    Return (0x001B0002)
+  }
+}
diff --git a/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP20_ADR.asl b/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP20_ADR.asl
new file mode 100644
index 0000000000..baa96d405c
--- /dev/null
+++ b/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP20_ADR.asl
@@ -0,0 +1,15 @@
+/** @file
+
+  @copyright
+  Copyright 2015 Intel Corporation. <BR>
+
+  SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+Method (_ADR, 0) {
+  If (LNotEqual(RPAK,0)) {
+    Return (RPAK)
+  } Else {
+    Return (0x001B0003)
+  }
+}
diff --git a/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/TraceHubDebug.asl b/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/TraceHubDebug.asl
new file mode 100644
index 0000000000..4c1dd36692
--- /dev/null
+++ b/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/TraceHubDebug.asl
@@ -0,0 +1,150 @@
+/** @file
+  Trace Hub debug library for ASL code.
+
+  @copyright
+  Copyright 2015 - 2020 Intel Corporation. <BR>
+
+  SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+External(PTHM, IntObj)
+External(\_SB.PC00.PTHT.THEN, MethodObj, IntObj)
+External(\_SB.PTHH.THEN, MethodObj, IntObj)
+
+Name (THMN, 0x20)  // Master number should align with gSiPkgTokenSpaceGuid.PcdTraceHubDebugLibMaster
+Name (THCN, 0x16)  // Channel number could be different from gSiPkgTokenSpaceGuid.PcdTraceHubDebugLibChannel, 0~80h are available
+
+//
+// @note Only include register definition macros in ASL.
+//       GCC will leak C function definitions in to ASL
+//       code, causing compilation errors in some cases.
+//
+#include <PchReservedResources.h>
+#include <Register/PchRegsTraceHub.h>
+
+Scope(\) {
+  // Trace Hub debug address
+  // This is internal helper runtine of THDS
+  // Arg0 : Master number
+  // Arg1 : Channel number
+  Method (THDA, 2, Serialized) {
+    // Local0 = PCH_TRACE_HUB_SW_BASE_ADDRESS + 0x40 * (V_PCH_TRACE_HUB_MTB_CHLCNT * (Master - V_PCH_TRACE_HUB_MTB_STHMSTR)) + 0x40 * Channel;
+    Store (PCH_TRACE_HUB_SW_BASE_ADDRESS, Local0)
+    Add (Local0, Multiply (0x40, Multiply (V_PCH_TRACE_HUB_MTB_CHLCNT, Subtract (Arg0, V_PCH_TRACE_HUB_MTB_STHMSTR))), Local0)
+    Add (Local0, Multiply (0x40, Arg1), Local0)
+    Return (Local0)
+  }
+
+  // String to raw data
+  // This is internal helper runtine of THDS
+  // Arg0 : string
+  // Arg1 : Index
+  // Arg2 : size
+  Method (STRD, 3, Serialized) {
+    If (LGreater (Add (Arg1, Arg2), SizeOf (Arg0))) {
+      Return (0)
+    }
+    // Local0 is return value
+    // Lccal1 is loop index
+    // Local2 is char of string
+    // Local3 is buffer of string
+    ToBuffer (Arg0, Local3)
+    Store (0, Local0)
+    Store (0, Local1)
+    While (LLess (Local1, Arg2)) {
+      Store (DeRefOf (Index (Local3, Add (Arg1, Local1))), Local2)
+      Add (Local0, ShiftLeft (Local2, Multiply (8, Local1)), Local0)
+      Increment (Local1)
+    }
+    Return (Local0)
+  }
+
+  // Trace Hub debug string
+  // Arg0 : debug string
+  Method (THDS, 1, Serialized) {
+    //
+    // Check if BIOS trace is enabled.
+    //
+    If (LEqual (PTHM, 0)) {
+      Return
+    } ElseIf (LEqual (PTHM, 1)) {
+      If (LNot (\_SB.PC00.PTHT.THEN())) {
+        Return
+      }
+    } ElseIf (LEqual (PTHM, 2)) {
+      If (LNot (\_SB.PTHH.THEN())) {
+        Return
+      }
+    } Else {
+      Return
+    }
+
+    // Local0 is the length of string
+    // Local1 is the debug base address
+    Store (Sizeof (Arg0), Local0)
+    Store (THDA (THMN, THCN), Local1)
+    OperationRegion (THBA, SystemMemory, local1, 0x40)
+    Field (THBA, QWordAcc, NoLock, Preserve) {
+      Offset (0x00),
+      QO00, 64,
+    }
+    Field (THBA, DWordAcc, NoLock, Preserve) {
+      Offset (0x00),
+      DO00, 32,
+      Offset (0x10),
+      DO10, 32,
+      offset (0x30),
+      DO30, 32,
+    }
+    Field (THBA, WordAcc, NoLock, Preserve) {
+      Offset (0x00),
+      WO00, 16,
+    }
+    Field (THBA, ByteAcc, NoLock, Preserve) {
+      Offset (0x00),
+      BO00, 8,
+    }
+
+    // time stamp
+    Store (0x01000242, DO10)
+    // length of string
+    Store (Local0, WO00)
+    // string
+    Store (0, Local6)
+    Store (Local0, Local7)
+    while (LGreaterEqual(Local7, 8)) {
+      Store (STRD (Arg0, Local6, 8), QO00)
+      Add (Local6, 8, Local6)
+      Subtract (Local7, 8, Local7)
+    }
+    If (LGreaterEqual(Local7, 4)) {
+      Store (STRD (Arg0, Local6, 4), DO00)
+      Add (Local6, 4, Local6)
+      Subtract (Local7, 4, Local7)
+    }
+    If (LGreaterEqual(Local7, 2)) {
+      Store (STRD (Arg0, Local6, 2), WO00)
+      Add (Local6, 2, Local6)
+      Subtract (Local7, 2, Local7)
+    }
+    If (LGreaterEqual(Local7, 1)) {
+      Store (STRD (Arg0, Local6, 1), BO00)
+      Add (Local6, 1, Local6)
+      Subtract (Local7, 1, Local7)
+    }
+    // flag
+    Store (0, DO30)
+  }
+
+  // Trace Hub debug Hex string
+  // Arg0 : Integer, buffer
+  Method (THDH, 1, Serialized) {
+    THDS (ToHexString (Arg0))
+  }
+
+  // Trace Hub debug decimal string
+  // Arg0 : Integer, buffer
+  Method (THDD, 1, Serialized) {
+    THDS (ToDecimalString (Arg0))
+  }
+}
diff --git a/Silicon/Intel/WhitleySiliconPkg/SiliconPkg.dec b/Silicon/Intel/WhitleySiliconPkg/SiliconPkg.dec
index c4993cb897..e03ee6d5d8 100644
--- a/Silicon/Intel/WhitleySiliconPkg/SiliconPkg.dec
+++ b/Silicon/Intel/WhitleySiliconPkg/SiliconPkg.dec
@@ -19,6 +19,7 @@
   Security/Include
   Pch/SouthClusterLbg
   Pch/SouthClusterLbg/Include
+  Pch/SouthClusterLbg/AcpiTables/Dsdt
 
   Cpu/Include
 
-- 
2.27.0.windows.1


^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [edk2-devel][edk2-platforms][PATCH V1 4/8] WhitleyOpenBoardPkg/AcpiTables10nm: Add Static ACPI tables
  2022-02-07 19:02 [edk2-devel][edk2-platforms][PATCH V1 0/8] Whitley ACPI Tables Oram, Isaac W
                   ` (2 preceding siblings ...)
  2022-02-07 19:02 ` [edk2-devel][edk2-platforms][PATCH V1 3/8] WhitleyOpenBoardPkg/AcpiTables: South Cluster ASL Oram, Isaac W
@ 2022-02-07 19:02 ` Oram, Isaac W
  2022-02-09  3:21   ` Nate DeSimone
  2022-02-07 19:02 ` [edk2-devel][edk2-platforms][PATCH V1 5/8] WhitleyOpenBoardPkg/AcpiTables10nm: Add DSDT ACPI table Oram, Isaac W
                   ` (3 subsequent siblings)
  7 siblings, 1 reply; 17+ messages in thread
From: Oram, Isaac W @ 2022-02-07 19:02 UTC (permalink / raw)
  To: devel; +Cc: Nate DeSimone, Chasel Chiu

Static ACPI tables for WilsonCityRvp

Cc: Nate DeSimone <nathaniel.l.desimone@intel.com>
Cc: Chasel Chiu <chasel.chiu@intel.com>
Signed-off-by: Isaac Oram <isaac.w.oram@intel.com>
---
 Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Bdat/Bdat.aslc     |  54 ++
 Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/DBG2/DBG2.aslc     |  81 ++
 Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Facs/Facs62.aslc   |  72 ++
 Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Fadt/Fadt62.aslc   | 171 ++++
 Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Hmat/Hmat.aslc     | 972 ++++++++++++++++++++
 Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Hpet/Hpet.aslc     |  61 ++
 Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Mcfg/Mcfg.aslc     |  74 ++
 Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Migt/Migt.aslc     |  68 ++
 Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Msct/Msct.aslc     | 137 +++
 Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/NFIT/Nfit.aslc     |  48 +
 Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/PCAT/Pcat.aslc     |  44 +
 Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Pmtt/Pmtt10nm.aslc | 136 +++
 Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/SPCR/Spcr.aslc     |  89 ++
 Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Spmi/Spmi.aslc     |  53 ++
 Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Wddt/Wddt1.0.aslc  |  74 ++
 Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Wsmt/Wsmt.aslc     |  74 ++
 16 files changed, 2208 insertions(+)

diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Bdat/Bdat.aslc b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Bdat/Bdat.aslc
new file mode 100644
index 0000000000..734f11200f
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Bdat/Bdat.aslc
@@ -0,0 +1,54 @@
+/** @file
+
+  @copyright
+  Copyright 2005 - 2012 Intel Corporation. <BR>
+
+  SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+//
+// Statements that include other files
+//
+#include <Acpi/Bdat.h>
+
+//
+// Bdat Access Handler instance data structure
+//
+STATIC
+EFI_BDAT_ACPI_DESCRIPTION_TABLE mBdatAcpiTable = \
+{
+  {EFI_BDAT_TABLE_SIGNATURE,                   // Signature
+  sizeof (EFI_BDAT_ACPI_DESCRIPTION_TABLE),   // Length
+  0x01,                                       // Revision [01]
+  //
+  // Checksum will be updated during boot
+  //
+  0,                                          // Checksum
+  {' ',                                       // OEM ID
+  ' ',
+  ' ',
+  ' ',
+  ' ',
+  ' '},
+  0,                                          // OEM Table ID
+  0,                                          // OEM Revision [0x00000000]
+  0,                                          // Creator ID
+  0},                                          // Creator Revision
+  {0,                                          // System Memory Address Space ID
+  0,
+  0,
+  0,
+  //
+  // Pointer will be updated during boot
+  //
+  EFI_BDAT_ACPI_POINTER}
+};
+
+VOID*
+ReferenceAcpiTable (
+  VOID
+  )
+
+{
+  return (VOID*)&mBdatAcpiTable;
+}
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/DBG2/DBG2.aslc b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/DBG2/DBG2.aslc
new file mode 100644
index 0000000000..dcad37ac05
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/DBG2/DBG2.aslc
@@ -0,0 +1,81 @@
+/** @file
+
+  @copyright
+  Copyright 1999 - 2019 Intel Corporation. <BR>
+
+  SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+//
+// Statements that include other files
+//
+
+#include <IndustryStandard/DebugPort2Table.h>
+#include <Acpi/Dbg2.h>
+
+
+DBG2_DEBUG_TABLE DBG2 =
+{
+  {
+    {EFI_ACPI_6_2_DEBUG_PORT_2_TABLE_SIGNATURE,
+    sizeof (DBG2_DEBUG_TABLE),
+    0,
+
+    //
+    // Checksum will be updated at runtime
+    //
+    0x00,
+
+    //
+    // It is expected that these values will be programmed at runtime
+    //
+    {' ', ' ', ' ', ' ', ' ', ' '},
+
+    0,
+    0,
+    0,
+    0
+    },
+    //
+    // Beginning of DBG2 specific fields
+    //
+    sizeof(EFI_ACPI_DEBUG_PORT_2_DESCRIPTION_TABLE),
+    1
+  },
+  {
+    EFI_ACPI_DBG2_DEBUG_DEVICE_INFORMATION_STRUCT_REVISION,
+    sizeof(EFI_ACPI_DBG2_DEBUG_DEVICE_INFORMATION_STRUCT),
+    1,
+    2,
+    sizeof(EFI_ACPI_DBG2_DEBUG_DEVICE_INFORMATION_STRUCT) + sizeof(EFI_ACPI_6_2_GENERIC_ADDRESS_STRUCTURE) + 4,
+    0,
+    0,
+    EFI_ACPI_DBG2_PORT_TYPE_SERIAL,
+    EFI_ACPI_DBG2_PORT_SUBTYPE_SERIAL_FULL_16550,
+    {0, 0},
+    sizeof(EFI_ACPI_DBG2_DEBUG_DEVICE_INFORMATION_STRUCT),
+    sizeof(EFI_ACPI_DBG2_DEBUG_DEVICE_INFORMATION_STRUCT) + sizeof(EFI_ACPI_6_2_GENERIC_ADDRESS_STRUCTURE)
+  },
+  {
+    EFI_ACPI_6_2_SYSTEM_IO,
+    16,
+    0,
+    EFI_ACPI_6_2_BYTE,
+    0x3F8
+  },
+  4,
+  "."
+};
+
+VOID*
+ReferenceAcpiTable (
+  VOID
+  )
+
+{
+  //
+  // Reference the table being generated to prevent the optimizer from removing the
+  // data structure from the exeutable
+  //
+  return (VOID*)&DBG2;
+}
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Facs/Facs62.aslc b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Facs/Facs62.aslc
new file mode 100644
index 0000000000..48753f7939
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Facs/Facs62.aslc
@@ -0,0 +1,72 @@
+/** @file
+
+  @copyright
+  Copyright 1996 - 2019 Intel Corporation. <BR>
+
+  SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+//
+// Statements that include other files
+//
+#include <Acpi/Facs.h>
+
+//
+// Firmware ACPI Control Structure
+// Please modify all values in Facs.h only.
+//
+EFI_ACPI_6_2_FIRMWARE_ACPI_CONTROL_STRUCTURE  Facs = {
+  EFI_ACPI_6_2_FIRMWARE_ACPI_CONTROL_STRUCTURE_SIGNATURE,
+  sizeof (EFI_ACPI_6_2_FIRMWARE_ACPI_CONTROL_STRUCTURE),
+  //
+  // Hardware Signature will be updated at runtime
+  //
+  0x00000000,
+
+  EFI_ACPI_FIRMWARE_WAKING_VECTOR,
+  EFI_ACPI_GLOBAL_LOCK,
+  EFI_ACPI_FIRMWARE_CONTROL_STRUCTURE_FLAGS,
+  EFI_ACPI_X_FIRMWARE_WAKING_VECTOR,
+  EFI_ACPI_6_2_FIRMWARE_ACPI_CONTROL_STRUCTURE_VERSION,
+  {EFI_ACPI_RESERVED_BYTE,
+  EFI_ACPI_RESERVED_BYTE,
+  EFI_ACPI_RESERVED_BYTE},
+  EFI_ACPI_OSPM_FLAGS,
+  {EFI_ACPI_RESERVED_BYTE,
+  EFI_ACPI_RESERVED_BYTE,
+  EFI_ACPI_RESERVED_BYTE,
+  EFI_ACPI_RESERVED_BYTE,
+  EFI_ACPI_RESERVED_BYTE,
+  EFI_ACPI_RESERVED_BYTE,
+  EFI_ACPI_RESERVED_BYTE,
+  EFI_ACPI_RESERVED_BYTE,
+  EFI_ACPI_RESERVED_BYTE,
+  EFI_ACPI_RESERVED_BYTE,
+  EFI_ACPI_RESERVED_BYTE,
+  EFI_ACPI_RESERVED_BYTE,
+  EFI_ACPI_RESERVED_BYTE,
+  EFI_ACPI_RESERVED_BYTE,
+  EFI_ACPI_RESERVED_BYTE,
+  EFI_ACPI_RESERVED_BYTE,
+  EFI_ACPI_RESERVED_BYTE,
+  EFI_ACPI_RESERVED_BYTE,
+  EFI_ACPI_RESERVED_BYTE,
+  EFI_ACPI_RESERVED_BYTE,
+  EFI_ACPI_RESERVED_BYTE,
+  EFI_ACPI_RESERVED_BYTE,
+  EFI_ACPI_RESERVED_BYTE,
+  EFI_ACPI_RESERVED_BYTE}
+};
+
+VOID*
+ReferenceAcpiTable (
+  VOID
+  )
+
+{
+  //
+  // Reference the table being generated to prevent the optimizer from removing the
+  // data structure from the exeutable
+  //
+  return (VOID*)&Facs;
+}
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Fadt/Fadt62.aslc b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Fadt/Fadt62.aslc
new file mode 100644
index 0000000000..f37cf0a508
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Fadt/Fadt62.aslc
@@ -0,0 +1,171 @@
+/** @file
+
+  @copyright
+  Copyright 1999 - 2019 Intel Corporation. <BR>
+
+  SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+//
+// Statements that include other files
+//
+
+#include <Acpi/Fadt.h>
+
+//
+// Fixed ACPI Description Table
+// Please modify all values in Fadt.h only.
+//
+EFI_ACPI_6_2_FIXED_ACPI_DESCRIPTION_TABLE Fadt = {
+  {EFI_ACPI_6_2_FIXED_ACPI_DESCRIPTION_TABLE_SIGNATURE,
+  sizeof (EFI_ACPI_6_2_FIXED_ACPI_DESCRIPTION_TABLE),
+  EFI_ACPI_6_2_FIXED_ACPI_DESCRIPTION_TABLE_REVISION,
+  //
+  // Checksum will be updated at runtime
+  //
+  0x00,
+  //
+  // It is expected that these values will be updated at runtime
+  //
+  {' ', ' ', ' ', ' ', ' ', ' '}, // OEMID
+  0, // OEM Table ID
+  EFI_ACPI_OEM_FADT_REVISION,
+  0, // Creator ID
+  0}, // Creator Revision
+  //
+  // These addresses will be updated at runtime
+  //
+  0x00000000, // FIRMWARE_CTRL
+  0x00000000, // DSDT
+  EFI_ACPI_RESERVED_BYTE,
+  EFI_ACPI_PREFERRED_PM_PROFILE,
+  EFI_ACPI_SCI_INT,
+  EFI_ACPI_SMI_CMD,
+  EFI_ACPI_ACPI_ENABLE,
+  EFI_ACPI_ACPI_DISABLE,
+  EFI_ACPI_S4_BIOS_REQ,
+  EFI_ACPI_PSTATE_CNT,
+
+  EFI_ACPI_PM1A_EVT_BLK_ADDRESS,
+  EFI_ACPI_PM1B_EVT_BLK_ADDRESS,
+  EFI_ACPI_PM1A_CNT_BLK_ADDRESS,
+  EFI_ACPI_PM1B_CNT_BLK_ADDRESS,
+  EFI_ACPI_PM2_CNT_BLK_ADDRESS,
+  EFI_ACPI_PM_TMR_BLK_ADDRESS,
+  EFI_ACPI_GPE0_BLK_ADDRESS,
+  EFI_ACPI_GPE1_BLK_ADDRESS,
+  EFI_ACPI_PM1_EVT_LEN,
+  EFI_ACPI_PM1_CNT_LEN,
+  EFI_ACPI_PM2_CNT_LEN,
+  EFI_ACPI_PM_TMR_LEN,
+  EFI_ACPI_GPE0_BLK_LEN,
+  EFI_ACPI_GPE1_BLK_LEN,
+  EFI_ACPI_GPE1_BASE,
+
+  EFI_ACPI_CST_CNT,
+  EFI_ACPI_P_LVL2_LAT,
+  EFI_ACPI_P_LVL3_LAT,
+  EFI_ACPI_FLUSH_SIZE,
+  EFI_ACPI_FLUSH_STRIDE,
+  EFI_ACPI_DUTY_OFFSET,
+  EFI_ACPI_DUTY_WIDTH,
+  EFI_ACPI_DAY_ALRM,
+  EFI_ACPI_MON_ALRM,
+  EFI_ACPI_CENTURY,
+  EFI_ACPI_IAPC_BOOT_ARCH,
+  EFI_ACPI_RESERVED_BYTE,
+  EFI_ACPI_FIXED_FEATURE_FLAGS | EFI_ACPI_6_2_SLP_BUTTON,
+  //
+  // Reset Register Block
+  //
+  {EFI_ACPI_RESET_REG_ADDRESS_SPACE_ID,
+  EFI_ACPI_RESET_REG_BIT_WIDTH,
+  EFI_ACPI_RESET_REG_BIT_OFFSET,
+  EFI_ACPI_6_2_BYTE,
+  EFI_ACPI_RESET_REG_ADDRESS},
+
+  EFI_ACPI_RESET_VALUE,
+  EFI_ACPI_RESERVED_WORD,   // EFI_ACPI_6_2_ARM_BOOT_ARCH
+  EFI_ACPI_6_2_FIXED_ACPI_DESCRIPTION_TABLE_MINOR_REVISION,
+  //
+  // These addresses will be updated at runtime
+  //
+  0x0000000000000000, // X_FIRMWARE_CTRL
+  0x0000000000000000, // X_DSDT
+  //
+  // X_PM1a Event Register Block
+  //
+  {EFI_ACPI_PM1A_EVT_BLK_ADDRESS_SPACE_ID,
+  EFI_ACPI_PM1A_EVT_BLK_BIT_WIDTH,
+  EFI_ACPI_PM1A_EVT_BLK_BIT_OFFSET,
+  EFI_ACPI_6_2_WORD,
+  EFI_ACPI_PM1A_EVT_BLK_ADDRESS},
+  //
+  // X_PM1b Event Register Block
+  //
+  {EFI_ACPI_PM1B_EVT_BLK_ADDRESS_SPACE_ID,
+  EFI_ACPI_PM1B_EVT_BLK_BIT_WIDTH,
+  EFI_ACPI_PM1B_EVT_BLK_BIT_OFFSET,
+  EFI_ACPI_6_2_UNDEFINED,
+  EFI_ACPI_PM1B_EVT_BLK_ADDRESS},
+  //
+  // X_PM1a Control Register Block
+  //
+  {EFI_ACPI_PM1A_CNT_BLK_ADDRESS_SPACE_ID,
+  EFI_ACPI_PM1A_CNT_BLK_BIT_WIDTH,
+  EFI_ACPI_PM1A_CNT_BLK_BIT_OFFSET,
+  EFI_ACPI_6_2_WORD,
+  EFI_ACPI_PM1A_CNT_BLK_ADDRESS},
+  //
+  // X_PM1b Control Register Block
+  //
+  {EFI_ACPI_PM1B_CNT_BLK_ADDRESS_SPACE_ID,
+  EFI_ACPI_PM1B_CNT_BLK_BIT_WIDTH,
+  EFI_ACPI_PM1B_CNT_BLK_BIT_OFFSET,
+  EFI_ACPI_6_2_UNDEFINED,
+  EFI_ACPI_PM1B_CNT_BLK_ADDRESS},
+  //
+  // X_PM2 Control Register Block
+  //
+  {EFI_ACPI_PM2_CNT_BLK_ADDRESS_SPACE_ID,
+  EFI_ACPI_PM2_CNT_BLK_BIT_WIDTH,
+  EFI_ACPI_PM2_CNT_BLK_BIT_OFFSET,
+  EFI_ACPI_6_2_UNDEFINED,
+  EFI_ACPI_PM2_CNT_BLK_ADDRESS},
+  //
+  // X_PM Timer Control Register Block
+  //
+  {EFI_ACPI_PM_TMR_BLK_ADDRESS_SPACE_ID,
+  EFI_ACPI_PM_TMR_BLK_BIT_WIDTH,
+  EFI_ACPI_PM_TMR_BLK_BIT_OFFSET,
+  EFI_ACPI_6_2_DWORD,
+  EFI_ACPI_PM_TMR_BLK_ADDRESS},
+  //
+  // X_General Purpose Event 0 Register Block
+  //
+  {EFI_ACPI_GPE0_BLK_ADDRESS_SPACE_ID,
+  EFI_ACPI_GPE0_BLK_BIT_WIDTH,
+  EFI_ACPI_GPE0_BLK_BIT_OFFSET,
+  EFI_ACPI_6_2_BYTE,
+  EFI_ACPI_GPE0_BLK_ADDRESS},
+  //
+  // X_General Purpose Event 1 Register Block
+  //
+  {EFI_ACPI_GPE1_BLK_ADDRESS_SPACE_ID,
+  EFI_ACPI_GPE1_BLK_BIT_WIDTH,
+  EFI_ACPI_GPE1_BLK_BIT_OFFSET,
+  EFI_ACPI_6_2_UNDEFINED,
+  EFI_ACPI_GPE1_BLK_ADDRESS}
+};
+
+VOID*
+ReferenceAcpiTable (
+  VOID
+  )
+{
+  //
+  // Reference the table being generated to prevent the optimizer from removing the
+  // data structure from the executable.
+  //
+  return (VOID*)&Fadt;
+}
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Hmat/Hmat.aslc b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Hmat/Hmat.aslc
new file mode 100644
index 0000000000..ae6efeaee5
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Hmat/Hmat.aslc
@@ -0,0 +1,972 @@
+/** @file
+
+  @copyright
+  Copyright 2016 - 2018 Intel Corporation. <BR>
+
+  SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+//
+// Statements that include other files
+//
+#include "Acpi/Hmat.h"
+
+EFI_ACPI_HETEROGENEOUS_MEMORY_ATTRIBUTE_TABLE Hmat = {
+  // EFI_ACPI_HETEROGENEOUS_MEMORY_ATTRIBUTE_TABLE_HEADER
+  {
+    // EFI_ACPI_DESCRIPTION_HEADER
+    {
+      EFI_HETEROGENEOUS_MEMORY_ATTRIBUTE_TABLE_SIGNATURE,
+      sizeof (EFI_ACPI_HETEROGENEOUS_MEMORY_ATTRIBUTE_TABLE),
+      EFI_ACPI_HETEROGENEOUS_MEMORY_ATTRIBUTE_TABLE_REVISION,
+      0x00,                             // Checksum, updated at runtime
+      {' ', ' ', ' ', ' ', ' ', ' '},   // OEM ID, programmed at runtime
+      0,
+      EFI_ACPI_OEM_HMAT_REVISION,
+      0,
+      0
+    }, // EFI_ACPI_DESCRIPTION_HEADER
+    (UINT32) 0
+  }, // EFI_ACPI_HETEROGENEOUS_MEMORY_ATTRIBUTE_TABLE_HEADER
+
+  // Beginning of HMAT substructures
+#if EFI_ACPI_HMAT_MSARS_COUNT > 0
+  { // MEMORY_SUBSYSTEM_ADDRESS_RANGE_STRUCTURE[EFI_ACPI_HMAT_MSARS_COUNT]
+    MSARS_INIT()
+    MSARS_INIT()
+    MSARS_INIT()
+    MSARS_INIT()
+    MSARS_INIT()
+    MSARS_INIT()
+    MSARS_INIT()
+    MSARS_INIT()
+#if MC_MAX_NODE > 1
+    MSARS_INIT()
+    MSARS_INIT()
+    MSARS_INIT()
+    MSARS_INIT()
+    MSARS_INIT()
+    MSARS_INIT()
+    MSARS_INIT()
+    MSARS_INIT()
+#endif
+#if MC_MAX_NODE > 2
+    MSARS_INIT()
+    MSARS_INIT()
+    MSARS_INIT()
+    MSARS_INIT()
+    MSARS_INIT()
+    MSARS_INIT()
+    MSARS_INIT()
+    MSARS_INIT()
+#endif
+#if MC_MAX_NODE > 3
+    MSARS_INIT()
+    MSARS_INIT()
+    MSARS_INIT()
+    MSARS_INIT()
+    MSARS_INIT()
+    MSARS_INIT()
+    MSARS_INIT()
+    MSARS_INIT()
+#endif
+#if MC_MAX_NODE > 4
+    MSARS_INIT()
+    MSARS_INIT()
+    MSARS_INIT()
+    MSARS_INIT()
+    MSARS_INIT()
+    MSARS_INIT()
+    MSARS_INIT()
+    MSARS_INIT()
+#endif
+#if MC_MAX_NODE > 5
+    MSARS_INIT()
+    MSARS_INIT()
+    MSARS_INIT()
+    MSARS_INIT()
+    MSARS_INIT()
+    MSARS_INIT()
+    MSARS_INIT()
+    MSARS_INIT()
+#endif
+#if MC_MAX_NODE > 6
+    MSARS_INIT()
+    MSARS_INIT()
+    MSARS_INIT()
+    MSARS_INIT()
+    MSARS_INIT()
+    MSARS_INIT()
+    MSARS_INIT()
+    MSARS_INIT()
+#endif
+#if MC_MAX_NODE > 7
+    MSARS_INIT()
+    MSARS_INIT()
+    MSARS_INIT()
+    MSARS_INIT()
+    MSARS_INIT()
+    MSARS_INIT()
+    MSARS_INIT()
+    MSARS_INIT()
+#endif
+#if MC_MAX_NODE > 8
+    MSARS_INIT()
+    MSARS_INIT()
+    MSARS_INIT()
+    MSARS_INIT()
+    MSARS_INIT()
+    MSARS_INIT()
+    MSARS_INIT()
+    MSARS_INIT()
+#endif
+#if MC_MAX_NODE > 9
+    MSARS_INIT()
+    MSARS_INIT()
+    MSARS_INIT()
+    MSARS_INIT()
+    MSARS_INIT()
+    MSARS_INIT()
+    MSARS_INIT()
+    MSARS_INIT()
+#endif
+#if MC_MAX_NODE > 10
+    MSARS_INIT()
+    MSARS_INIT()
+    MSARS_INIT()
+    MSARS_INIT()
+    MSARS_INIT()
+    MSARS_INIT()
+    MSARS_INIT()
+    MSARS_INIT()
+#endif
+#if MC_MAX_NODE > 11
+    MSARS_INIT()
+    MSARS_INIT()
+    MSARS_INIT()
+    MSARS_INIT()
+    MSARS_INIT()
+    MSARS_INIT()
+    MSARS_INIT()
+    MSARS_INIT()
+#endif
+#if MC_MAX_NODE > 12
+    MSARS_INIT()
+    MSARS_INIT()
+    MSARS_INIT()
+    MSARS_INIT()
+    MSARS_INIT()
+    MSARS_INIT()
+    MSARS_INIT()
+    MSARS_INIT()
+#endif
+#if MC_MAX_NODE > 13
+    MSARS_INIT()
+    MSARS_INIT()
+    MSARS_INIT()
+    MSARS_INIT()
+    MSARS_INIT()
+    MSARS_INIT()
+    MSARS_INIT()
+    MSARS_INIT()
+#endif
+#if MC_MAX_NODE > 14
+    MSARS_INIT()
+    MSARS_INIT()
+    MSARS_INIT()
+    MSARS_INIT()
+    MSARS_INIT()
+    MSARS_INIT()
+    MSARS_INIT()
+    MSARS_INIT()
+#endif
+#if MC_MAX_NODE > 15
+    MSARS_INIT()
+    MSARS_INIT()
+    MSARS_INIT()
+    MSARS_INIT()
+    MSARS_INIT()
+    MSARS_INIT()
+    MSARS_INIT()
+    MSARS_INIT()
+#endif
+  }, // MEMORY_SUBSYSTEM_ADDRESS_RANGE_STRUCTURE[EFI_ACPI_HMAT_MSARS_COUNT]
+#endif
+#if EFI_ACPI_HMAT_LBIS_COUNT > 0
+  { // LATENCY_BANDWIDTH_INFO_STRUCTURE Lbis[EFI_ACPI_HMAT_LBIS_COUNT]
+    LBIS_START()
+    RELATIVE_DISTANCE()
+#if MC_MAX_NODE > 1
+    RELATIVE_DISTANCE()
+#endif
+#if MC_MAX_NODE > 2
+    RELATIVE_DISTANCE()
+#endif
+#if MC_MAX_NODE > 3
+    RELATIVE_DISTANCE()
+#endif
+#if MC_MAX_NODE > 4
+    RELATIVE_DISTANCE()
+#endif
+#if MC_MAX_NODE > 5
+    RELATIVE_DISTANCE()
+#endif
+#if MC_MAX_NODE > 6
+    RELATIVE_DISTANCE()
+#endif
+#if MC_MAX_NODE > 7
+    RELATIVE_DISTANCE()
+#endif
+#if MC_MAX_NODE > 8
+    RELATIVE_DISTANCE()
+#endif
+#if MC_MAX_NODE > 9
+    RELATIVE_DISTANCE()
+#endif
+#if MC_MAX_NODE > 10
+    RELATIVE_DISTANCE()
+#endif
+#if MC_MAX_NODE > 11
+    RELATIVE_DISTANCE()
+#endif
+#if MC_MAX_NODE > 12
+    RELATIVE_DISTANCE()
+#endif
+#if MC_MAX_NODE > 13
+    RELATIVE_DISTANCE()
+#endif
+#if MC_MAX_NODE > 14
+    RELATIVE_DISTANCE()
+#endif
+#if MC_MAX_NODE > 15
+    RELATIVE_DISTANCE()
+#endif
+    LBIS_END()
+#if EFI_ACPI_HMAT_LBIS_COUNT > 1
+    LBIS_START()
+    RELATIVE_DISTANCE()
+#if MC_MAX_NODE > 1
+    RELATIVE_DISTANCE()
+#endif
+#if MC_MAX_NODE > 2
+    RELATIVE_DISTANCE()
+#endif
+#if MC_MAX_NODE > 3
+    RELATIVE_DISTANCE()
+#endif
+#if MC_MAX_NODE > 4
+    RELATIVE_DISTANCE()
+#endif
+#if MC_MAX_NODE > 5
+    RELATIVE_DISTANCE()
+#endif
+#if MC_MAX_NODE > 6
+    RELATIVE_DISTANCE()
+#endif
+#if MC_MAX_NODE > 7
+    RELATIVE_DISTANCE()
+#endif
+#if MC_MAX_NODE > 8
+    RELATIVE_DISTANCE()
+#endif
+#if MC_MAX_NODE > 9
+    RELATIVE_DISTANCE()
+#endif
+#if MC_MAX_NODE > 10
+    RELATIVE_DISTANCE()
+#endif
+#if MC_MAX_NODE > 11
+    RELATIVE_DISTANCE()
+#endif
+#if MC_MAX_NODE > 12
+    RELATIVE_DISTANCE()
+#endif
+#if MC_MAX_NODE > 13
+    RELATIVE_DISTANCE()
+#endif
+#if MC_MAX_NODE > 14
+    RELATIVE_DISTANCE()
+#endif
+#if MC_MAX_NODE > 15
+    RELATIVE_DISTANCE()
+#endif
+    LBIS_END()
+#endif
+#if EFI_ACPI_HMAT_LBIS_COUNT > 2
+    LBIS_START()
+    RELATIVE_DISTANCE()
+#if MC_MAX_NODE > 1
+    RELATIVE_DISTANCE()
+#endif
+#if MC_MAX_NODE > 2
+    RELATIVE_DISTANCE()
+#endif
+#if MC_MAX_NODE > 3
+    RELATIVE_DISTANCE()
+#endif
+#if MC_MAX_NODE > 4
+    RELATIVE_DISTANCE()
+#endif
+#if MC_MAX_NODE > 5
+    RELATIVE_DISTANCE()
+#endif
+#if MC_MAX_NODE > 6
+    RELATIVE_DISTANCE()
+#endif
+#if MC_MAX_NODE > 7
+    RELATIVE_DISTANCE()
+#endif
+#if MC_MAX_NODE > 8
+    RELATIVE_DISTANCE()
+#endif
+#if MC_MAX_NODE > 9
+    RELATIVE_DISTANCE()
+#endif
+#if MC_MAX_NODE > 10
+    RELATIVE_DISTANCE()
+#endif
+#if MC_MAX_NODE > 11
+    RELATIVE_DISTANCE()
+#endif
+#if MC_MAX_NODE > 12
+    RELATIVE_DISTANCE()
+#endif
+#if MC_MAX_NODE > 13
+    RELATIVE_DISTANCE()
+#endif
+#if MC_MAX_NODE > 14
+    RELATIVE_DISTANCE()
+#endif
+#if MC_MAX_NODE > 15
+    RELATIVE_DISTANCE()
+#endif
+    LBIS_END()
+#endif
+#if EFI_ACPI_HMAT_LBIS_COUNT > 3
+    LBIS_START()
+    RELATIVE_DISTANCE()
+#if MC_MAX_NODE > 1
+    RELATIVE_DISTANCE()
+#endif
+#if MC_MAX_NODE > 2
+    RELATIVE_DISTANCE()
+#endif
+#if MC_MAX_NODE > 3
+    RELATIVE_DISTANCE()
+#endif
+#if MC_MAX_NODE > 4
+    RELATIVE_DISTANCE()
+#endif
+#if MC_MAX_NODE > 5
+    RELATIVE_DISTANCE()
+#endif
+#if MC_MAX_NODE > 6
+    RELATIVE_DISTANCE()
+#endif
+#if MC_MAX_NODE > 7
+    RELATIVE_DISTANCE()
+#endif
+#if MC_MAX_NODE > 8
+    RELATIVE_DISTANCE()
+#endif
+#if MC_MAX_NODE > 9
+    RELATIVE_DISTANCE()
+#endif
+#if MC_MAX_NODE > 10
+    RELATIVE_DISTANCE()
+#endif
+#if MC_MAX_NODE > 11
+    RELATIVE_DISTANCE()
+#endif
+#if MC_MAX_NODE > 12
+    RELATIVE_DISTANCE()
+#endif
+#if MC_MAX_NODE > 13
+    RELATIVE_DISTANCE()
+#endif
+#if MC_MAX_NODE > 14
+    RELATIVE_DISTANCE()
+#endif
+#if MC_MAX_NODE > 15
+    RELATIVE_DISTANCE()
+#endif
+    LBIS_END()
+#endif
+#if EFI_ACPI_HMAT_LBIS_COUNT > 4
+    LBIS_START()
+    RELATIVE_DISTANCE()
+#if MC_MAX_NODE > 1
+    RELATIVE_DISTANCE()
+#endif
+#if MC_MAX_NODE > 2
+    RELATIVE_DISTANCE()
+#endif
+#if MC_MAX_NODE > 3
+    RELATIVE_DISTANCE()
+#endif
+#if MC_MAX_NODE > 4
+    RELATIVE_DISTANCE()
+#endif
+#if MC_MAX_NODE > 5
+    RELATIVE_DISTANCE()
+#endif
+#if MC_MAX_NODE > 6
+    RELATIVE_DISTANCE()
+#endif
+#if MC_MAX_NODE > 7
+    RELATIVE_DISTANCE()
+#endif
+#if MC_MAX_NODE > 8
+    RELATIVE_DISTANCE()
+#endif
+#if MC_MAX_NODE > 9
+    RELATIVE_DISTANCE()
+#endif
+#if MC_MAX_NODE > 10
+    RELATIVE_DISTANCE()
+#endif
+#if MC_MAX_NODE > 11
+    RELATIVE_DISTANCE()
+#endif
+#if MC_MAX_NODE > 12
+    RELATIVE_DISTANCE()
+#endif
+#if MC_MAX_NODE > 13
+    RELATIVE_DISTANCE()
+#endif
+#if MC_MAX_NODE > 14
+    RELATIVE_DISTANCE()
+#endif
+#if MC_MAX_NODE > 15
+    RELATIVE_DISTANCE()
+#endif
+    LBIS_END()
+#endif
+#if EFI_ACPI_HMAT_LBIS_COUNT > 5
+    LBIS_START()
+    RELATIVE_DISTANCE()
+#if MC_MAX_NODE > 1
+    RELATIVE_DISTANCE()
+#endif
+#if MC_MAX_NODE > 2
+    RELATIVE_DISTANCE()
+#endif
+#if MC_MAX_NODE > 3
+    RELATIVE_DISTANCE()
+#endif
+#if MC_MAX_NODE > 4
+    RELATIVE_DISTANCE()
+#endif
+#if MC_MAX_NODE > 5
+    RELATIVE_DISTANCE()
+#endif
+#if MC_MAX_NODE > 6
+    RELATIVE_DISTANCE()
+#endif
+#if MC_MAX_NODE > 7
+    RELATIVE_DISTANCE()
+#endif
+#if MC_MAX_NODE > 8
+    RELATIVE_DISTANCE()
+#endif
+#if MC_MAX_NODE > 9
+    RELATIVE_DISTANCE()
+#endif
+#if MC_MAX_NODE > 10
+    RELATIVE_DISTANCE()
+#endif
+#if MC_MAX_NODE > 11
+    RELATIVE_DISTANCE()
+#endif
+#if MC_MAX_NODE > 12
+    RELATIVE_DISTANCE()
+#endif
+#if MC_MAX_NODE > 13
+    RELATIVE_DISTANCE()
+#endif
+#if MC_MAX_NODE > 14
+    RELATIVE_DISTANCE()
+#endif
+#if MC_MAX_NODE > 15
+    RELATIVE_DISTANCE()
+#endif
+    LBIS_END()
+#endif
+#if EFI_ACPI_HMAT_LBIS_COUNT > 6
+    LBIS_START()
+    RELATIVE_DISTANCE()
+#if MC_MAX_NODE > 1
+    RELATIVE_DISTANCE()
+#endif
+#if MC_MAX_NODE > 2
+    RELATIVE_DISTANCE()
+#endif
+#if MC_MAX_NODE > 3
+    RELATIVE_DISTANCE()
+#endif
+#if MC_MAX_NODE > 4
+    RELATIVE_DISTANCE()
+#endif
+#if MC_MAX_NODE > 5
+    RELATIVE_DISTANCE()
+#endif
+#if MC_MAX_NODE > 6
+    RELATIVE_DISTANCE()
+#endif
+#if MC_MAX_NODE > 7
+    RELATIVE_DISTANCE()
+#endif
+#if MC_MAX_NODE > 8
+    RELATIVE_DISTANCE()
+#endif
+#if MC_MAX_NODE > 9
+    RELATIVE_DISTANCE()
+#endif
+#if MC_MAX_NODE > 10
+    RELATIVE_DISTANCE()
+#endif
+#if MC_MAX_NODE > 11
+    RELATIVE_DISTANCE()
+#endif
+#if MC_MAX_NODE > 12
+    RELATIVE_DISTANCE()
+#endif
+#if MC_MAX_NODE > 13
+    RELATIVE_DISTANCE()
+#endif
+#if MC_MAX_NODE > 14
+    RELATIVE_DISTANCE()
+#endif
+#if MC_MAX_NODE > 15
+    RELATIVE_DISTANCE()
+#endif
+    LBIS_END()
+#endif
+#if EFI_ACPI_HMAT_LBIS_COUNT > 7
+    LBIS_START()
+    RELATIVE_DISTANCE()
+#if MC_MAX_NODE > 1
+    RELATIVE_DISTANCE()
+#endif
+#if MC_MAX_NODE > 2
+    RELATIVE_DISTANCE()
+#endif
+#if MC_MAX_NODE > 3
+    RELATIVE_DISTANCE()
+#endif
+#if MC_MAX_NODE > 4
+    RELATIVE_DISTANCE()
+#endif
+#if MC_MAX_NODE > 5
+    RELATIVE_DISTANCE()
+#endif
+#if MC_MAX_NODE > 6
+    RELATIVE_DISTANCE()
+#endif
+#if MC_MAX_NODE > 7
+    RELATIVE_DISTANCE()
+#endif
+#if MC_MAX_NODE > 8
+    RELATIVE_DISTANCE()
+#endif
+#if MC_MAX_NODE > 9
+    RELATIVE_DISTANCE()
+#endif
+#if MC_MAX_NODE > 10
+    RELATIVE_DISTANCE()
+#endif
+#if MC_MAX_NODE > 11
+    RELATIVE_DISTANCE()
+#endif
+#if MC_MAX_NODE > 12
+    RELATIVE_DISTANCE()
+#endif
+#if MC_MAX_NODE > 13
+    RELATIVE_DISTANCE()
+#endif
+#if MC_MAX_NODE > 14
+    RELATIVE_DISTANCE()
+#endif
+#if MC_MAX_NODE > 15
+    RELATIVE_DISTANCE()
+#endif
+    LBIS_END()
+#endif
+#if EFI_ACPI_HMAT_LBIS_COUNT > 8
+    LBIS_START()
+    RELATIVE_DISTANCE()
+#if MC_MAX_NODE > 1
+    RELATIVE_DISTANCE()
+#endif
+#if MC_MAX_NODE > 2
+    RELATIVE_DISTANCE()
+#endif
+#if MC_MAX_NODE > 3
+    RELATIVE_DISTANCE()
+#endif
+#if MC_MAX_NODE > 4
+    RELATIVE_DISTANCE()
+#endif
+#if MC_MAX_NODE > 5
+    RELATIVE_DISTANCE()
+#endif
+#if MC_MAX_NODE > 6
+    RELATIVE_DISTANCE()
+#endif
+#if MC_MAX_NODE > 7
+    RELATIVE_DISTANCE()
+#endif
+#if MC_MAX_NODE > 8
+    RELATIVE_DISTANCE()
+#endif
+#if MC_MAX_NODE > 9
+    RELATIVE_DISTANCE()
+#endif
+#if MC_MAX_NODE > 10
+    RELATIVE_DISTANCE()
+#endif
+#if MC_MAX_NODE > 11
+    RELATIVE_DISTANCE()
+#endif
+#if MC_MAX_NODE > 12
+    RELATIVE_DISTANCE()
+#endif
+#if MC_MAX_NODE > 13
+    RELATIVE_DISTANCE()
+#endif
+#if MC_MAX_NODE > 14
+    RELATIVE_DISTANCE()
+#endif
+#if MC_MAX_NODE > 15
+    RELATIVE_DISTANCE()
+#endif
+    LBIS_END()
+#endif
+#if EFI_ACPI_HMAT_LBIS_COUNT > 9
+    LBIS_START()
+    RELATIVE_DISTANCE()
+#if MC_MAX_NODE > 1
+    RELATIVE_DISTANCE()
+#endif
+#if MC_MAX_NODE > 2
+    RELATIVE_DISTANCE()
+#endif
+#if MC_MAX_NODE > 3
+    RELATIVE_DISTANCE()
+#endif
+#if MC_MAX_NODE > 4
+    RELATIVE_DISTANCE()
+#endif
+#if MC_MAX_NODE > 5
+    RELATIVE_DISTANCE()
+#endif
+#if MC_MAX_NODE > 6
+    RELATIVE_DISTANCE()
+#endif
+#if MC_MAX_NODE > 7
+    RELATIVE_DISTANCE()
+#endif
+#if MC_MAX_NODE > 8
+    RELATIVE_DISTANCE()
+#endif
+#if MC_MAX_NODE > 9
+    RELATIVE_DISTANCE()
+#endif
+#if MC_MAX_NODE > 10
+    RELATIVE_DISTANCE()
+#endif
+#if MC_MAX_NODE > 11
+    RELATIVE_DISTANCE()
+#endif
+#if MC_MAX_NODE > 12
+    RELATIVE_DISTANCE()
+#endif
+#if MC_MAX_NODE > 13
+    RELATIVE_DISTANCE()
+#endif
+#if MC_MAX_NODE > 14
+    RELATIVE_DISTANCE()
+#endif
+#if MC_MAX_NODE > 15
+    RELATIVE_DISTANCE()
+#endif
+    LBIS_END()
+#endif
+#if EFI_ACPI_HMAT_LBIS_COUNT > 10
+    LBIS_START()
+    RELATIVE_DISTANCE()
+#if MC_MAX_NODE > 1
+    RELATIVE_DISTANCE()
+#endif
+#if MC_MAX_NODE > 2
+    RELATIVE_DISTANCE()
+#endif
+#if MC_MAX_NODE > 3
+    RELATIVE_DISTANCE()
+#endif
+#if MC_MAX_NODE > 4
+    RELATIVE_DISTANCE()
+#endif
+#if MC_MAX_NODE > 5
+    RELATIVE_DISTANCE()
+#endif
+#if MC_MAX_NODE > 6
+    RELATIVE_DISTANCE()
+#endif
+#if MC_MAX_NODE > 7
+    RELATIVE_DISTANCE()
+#endif
+#if MC_MAX_NODE > 8
+    RELATIVE_DISTANCE()
+#endif
+#if MC_MAX_NODE > 9
+    RELATIVE_DISTANCE()
+#endif
+#if MC_MAX_NODE > 10
+    RELATIVE_DISTANCE()
+#endif
+#if MC_MAX_NODE > 11
+    RELATIVE_DISTANCE()
+#endif
+#if MC_MAX_NODE > 12
+    RELATIVE_DISTANCE()
+#endif
+#if MC_MAX_NODE > 13
+    RELATIVE_DISTANCE()
+#endif
+#if MC_MAX_NODE > 14
+    RELATIVE_DISTANCE()
+#endif
+#if MC_MAX_NODE > 15
+    RELATIVE_DISTANCE()
+#endif
+    LBIS_END()
+#endif
+#if EFI_ACPI_HMAT_LBIS_COUNT > 11
+    LBIS_START()
+    RELATIVE_DISTANCE()
+#if MC_MAX_NODE > 1
+    RELATIVE_DISTANCE()
+#endif
+#if MC_MAX_NODE > 2
+    RELATIVE_DISTANCE()
+#endif
+#if MC_MAX_NODE > 3
+    RELATIVE_DISTANCE()
+#endif
+#if MC_MAX_NODE > 4
+    RELATIVE_DISTANCE()
+#endif
+#if MC_MAX_NODE > 5
+    RELATIVE_DISTANCE()
+#endif
+#if MC_MAX_NODE > 6
+    RELATIVE_DISTANCE()
+#endif
+#if MC_MAX_NODE > 7
+    RELATIVE_DISTANCE()
+#endif
+#if MC_MAX_NODE > 8
+    RELATIVE_DISTANCE()
+#endif
+#if MC_MAX_NODE > 9
+    RELATIVE_DISTANCE()
+#endif
+#if MC_MAX_NODE > 10
+    RELATIVE_DISTANCE()
+#endif
+#if MC_MAX_NODE > 11
+    RELATIVE_DISTANCE()
+#endif
+#if MC_MAX_NODE > 12
+    RELATIVE_DISTANCE()
+#endif
+#if MC_MAX_NODE > 13
+    RELATIVE_DISTANCE()
+#endif
+#if MC_MAX_NODE > 14
+    RELATIVE_DISTANCE()
+#endif
+#if MC_MAX_NODE > 15
+    RELATIVE_DISTANCE()
+#endif
+    LBIS_END()
+#endif
+  }, // LATENCY_BANDWIDTH_INFO_STRUCTURE Lbis[EFI_ACPI_HMAT_LBIS_COUNT]
+#endif
+#if EFI_ACPI_HMAT_MSCIS_COUNT > 0
+  { // MEMORY_SIDE_CACHE_INFORMATION_STRUCTURE MemSideCache[EFI_ACPI_HMAT_MSCIS_COUNT]
+    MSCIS_INIT()
+    MSCIS_INIT()
+    MSCIS_INIT()
+    MSCIS_INIT()
+    MSCIS_INIT()
+    MSCIS_INIT()
+    MSCIS_INIT()
+    MSCIS_INIT()
+#if MC_MAX_NODE > 1
+    MSCIS_INIT()
+    MSCIS_INIT()
+    MSCIS_INIT()
+    MSCIS_INIT()
+    MSCIS_INIT()
+    MSCIS_INIT()
+    MSCIS_INIT()
+    MSCIS_INIT()
+#endif
+#if MC_MAX_NODE > 2
+    MSCIS_INIT()
+    MSCIS_INIT()
+    MSCIS_INIT()
+    MSCIS_INIT()
+    MSCIS_INIT()
+    MSCIS_INIT()
+    MSCIS_INIT()
+    MSCIS_INIT()
+#endif
+#if MC_MAX_NODE > 3
+    MSCIS_INIT()
+    MSCIS_INIT()
+    MSCIS_INIT()
+    MSCIS_INIT()
+    MSCIS_INIT()
+    MSCIS_INIT()
+    MSCIS_INIT()
+    MSCIS_INIT()
+#endif
+#if MC_MAX_NODE > 4
+    MSCIS_INIT()
+    MSCIS_INIT()
+    MSCIS_INIT()
+    MSCIS_INIT()
+    MSCIS_INIT()
+    MSCIS_INIT()
+    MSCIS_INIT()
+    MSCIS_INIT()
+#endif
+#if MC_MAX_NODE > 5
+    MSCIS_INIT()
+    MSCIS_INIT()
+    MSCIS_INIT()
+    MSCIS_INIT()
+    MSCIS_INIT()
+    MSCIS_INIT()
+    MSCIS_INIT()
+    MSCIS_INIT()
+#endif
+#if MC_MAX_NODE > 6
+    MSCIS_INIT()
+    MSCIS_INIT()
+    MSCIS_INIT()
+    MSCIS_INIT()
+    MSCIS_INIT()
+    MSCIS_INIT()
+    MSCIS_INIT()
+    MSCIS_INIT()
+#endif
+#if MC_MAX_NODE > 7
+    MSCIS_INIT()
+    MSCIS_INIT()
+    MSCIS_INIT()
+    MSCIS_INIT()
+    MSCIS_INIT()
+    MSCIS_INIT()
+    MSCIS_INIT()
+    MSCIS_INIT()
+#endif
+#if MC_MAX_NODE > 8
+    MSCIS_INIT()
+    MSCIS_INIT()
+    MSCIS_INIT()
+    MSCIS_INIT()
+    MSCIS_INIT()
+    MSCIS_INIT()
+    MSCIS_INIT()
+    MSCIS_INIT()
+#endif
+#if MC_MAX_NODE > 9
+    MSCIS_INIT()
+    MSCIS_INIT()
+    MSCIS_INIT()
+    MSCIS_INIT()
+    MSCIS_INIT()
+    MSCIS_INIT()
+    MSCIS_INIT()
+    MSCIS_INIT()
+#endif
+#if MC_MAX_NODE > 10
+    MSCIS_INIT()
+    MSCIS_INIT()
+    MSCIS_INIT()
+    MSCIS_INIT()
+    MSCIS_INIT()
+    MSCIS_INIT()
+    MSCIS_INIT()
+    MSCIS_INIT()
+#endif
+#if MC_MAX_NODE > 11
+    MSCIS_INIT()
+    MSCIS_INIT()
+    MSCIS_INIT()
+    MSCIS_INIT()
+    MSCIS_INIT()
+    MSCIS_INIT()
+    MSCIS_INIT()
+    MSCIS_INIT()
+#endif
+#if MC_MAX_NODE > 12
+    MSCIS_INIT()
+    MSCIS_INIT()
+    MSCIS_INIT()
+    MSCIS_INIT()
+    MSCIS_INIT()
+    MSCIS_INIT()
+    MSCIS_INIT()
+    MSCIS_INIT()
+#endif
+#if MC_MAX_NODE > 13
+    MSCIS_INIT()
+    MSCIS_INIT()
+    MSCIS_INIT()
+    MSCIS_INIT()
+    MSCIS_INIT()
+    MSCIS_INIT()
+    MSCIS_INIT()
+    MSCIS_INIT()
+#endif
+#if MC_MAX_NODE > 14
+    MSCIS_INIT()
+    MSCIS_INIT()
+    MSCIS_INIT()
+    MSCIS_INIT()
+    MSCIS_INIT()
+    MSCIS_INIT()
+    MSCIS_INIT()
+    MSCIS_INIT()
+#endif
+#if MC_MAX_NODE > 15
+    MSCIS_INIT()
+    MSCIS_INIT()
+    MSCIS_INIT()
+    MSCIS_INIT()
+    MSCIS_INIT()
+    MSCIS_INIT()
+    MSCIS_INIT()
+    MSCIS_INIT()
+#endif
+  }, // MEMORY_SIDE_CACHE_INFORMATION_STRUCTURE MemSideCache[EFI_ACPI_HMAT_MSCIS_COUNT]
+#endif
+};
+
+VOID*
+ReferenceAcpiTable (
+  VOID
+  )
+
+{
+  //
+  // Reference the table being generated to prevent the optimizer from removing the
+  // data structure from the executable
+  //
+  return (VOID*)&Hmat;
+}
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Hpet/Hpet.aslc b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Hpet/Hpet.aslc
new file mode 100644
index 0000000000..37b680ad6b
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Hpet/Hpet.aslc
@@ -0,0 +1,61 @@
+/** @file
+
+  @copyright
+  Copyright 2019 Intel Corporation. <BR>
+
+  SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+//
+// Statements that include other files
+//
+#include <Acpi/Hpet.h>
+
+//
+// High Precision Event Timer Table
+// Please modify all values in Hpet.h only.
+//
+EFI_ACPI_HIGH_PRECISION_EVENT_TIMER_TABLE_HEADER  Hpet = {
+  {EFI_ACPI_6_2_HIGH_PRECISION_EVENT_TIMER_TABLE_SIGNATURE,    // Signature
+  sizeof (EFI_ACPI_HIGH_PRECISION_EVENT_TIMER_TABLE_HEADER),  // Length
+  EFI_ACPI_HIGH_PRECISION_EVENT_TIMER_TABLE_REVISION,         // Revision  [01]
+  //
+  // Checksum will be updated at runtime
+  //
+  0x00,                                                       // Checksum
+  //
+  // It is expected that these values will be updated at runtime
+  //
+  {' ',
+  ' ',
+  ' ',
+  ' ',
+  ' ',
+  ' '},
+  0,
+  EFI_ACPI_OEM_HPET_REVISION,                                 // OEM Revision [0x00000001]
+  0,                                                          // Creator ID
+  0},                                                         // Creator Revision
+  EFI_ACPI_EVENT_TIMER_BLOCK_ID,                              // Event Timer Block ID (4B) [0x8086A201]
+  {EFI_ACPI_EVENT_TIMER_BLOCK_ADDRESS_SPACE_ID,               // 2 [EFI_ACPI_6_2_SYSTEM_MEMORY]
+  EFI_ACPI_EVENT_TIMER_BLOCK_BIT_WIDTH,                       // 3 [0x00]
+  EFI_ACPI_EVENT_TIMER_BLOCK_BIT_OFFSET,                      // 4 [0x00]
+  EFI_ACPI_EVENT_TIMER_ACCESS_SIZE,                           // [0x00]
+  EFI_ACPI_EVENT_TIMER_BLOCK_ADDRESS},                        // HPET Block BASE_ADDRESS (12B) [0x00000000FED00000]
+  EFI_ACPI_HPET_NUMBER,                                       // HPET Number [00]
+  EFI_ACPI_MIN_CLOCK_TICK,                                    // Main Counter Minimum Clock tick    [0x0080]
+  EFI_ACPI_HPET_ATTRIBUTES                                    // Page Protection & OEM attribute    [0x00]
+};
+
+VOID*
+ReferenceAcpiTable (
+  VOID
+  )
+
+{
+  //
+  // Reference the table being generated to prevent the optimizer from removing the
+  // data structure from the exeutable
+  //
+  return (VOID*)&Hpet;
+}
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Mcfg/Mcfg.aslc b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Mcfg/Mcfg.aslc
new file mode 100644
index 0000000000..6e9a84aa49
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Mcfg/Mcfg.aslc
@@ -0,0 +1,74 @@
+/** @file
+
+  @copyright
+  Copyright 1999 - 2019 Intel Corporation. <BR>
+
+  SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+//
+// Statements that include other files
+//
+#include <Acpi/Mcfg.h>
+
+//
+// MCFG Table definition
+//
+EFI_ACPI_MEMORY_MAPPED_CONFIGURATION_BASE_ADDRESS_TABLE Mcfg = {
+  {{EFI_ACPI_6_2_MEMORY_MAPPED_CONFIGURATION_BASE_ADDRESS_TABLE_SIGNATURE,
+  sizeof (EFI_ACPI_MEMORY_MAPPED_CONFIGURATION_BASE_ADDRESS_TABLE),
+  EFI_ACPI_MEMORY_MAPPED_CONFIGURATION_SPACE_ACCESS_TABLE_REVISION,
+  //
+  // Checksum will be updated at runtime
+  //
+  0x00,
+  //
+  // It is expected that these values will be programmed at runtime
+  //
+  {' ',
+  ' ',
+  ' ',
+  ' ',
+  ' ',
+  ' '},
+
+  0,
+  EFI_ACPI_OEM_MCFG_REVISION,
+  0,
+  0},
+  //
+  // Beginning of MCFG specific fields
+  //
+  EFI_ACPI_RESERVED_QWORD},
+  //
+  // Sample Memory Mapped Configuration Space Base Address Structure
+  //
+  // 0x0,                                                              // Base Address
+  // 0x0,                                                              // PCI Segment Group Number
+  // 0x0,                                                              // Start Bus Number
+  // 0x0,                                                              // End Bus Number
+  // EFI_ACPI_RESERVED_DWORD,                                          // Reserved
+  //
+  // Memory Mapped Configuration Space Base Address Structure
+  //
+#if EFI_ACPI_MEMORY_MAPPED_ENHANCED_CONFIGURATION_BASE_ADDRESS_STRUCTURE_COUNT > 0
+  {{0x0,                    // Base Address, will be updated by AcpiPlatform
+  0x0,                      // PCI Segment Group Number
+  0x0,                      // Start Bus Number
+  0xff,                     // End Bus Number
+  EFI_ACPI_RESERVED_DWORD}} // Reserved
+#endif // EFI_ACPI_MEMORY_MAPPED_ENHANCED_CONFIGURATION_BASE_ADDRESS_STRUCTURE_COUNT
+};
+
+VOID*
+ReferenceAcpiTable (
+  VOID
+  )
+
+{
+  //
+  // Reference the table being generated to prevent the optimizer from removing the
+  // data structure from the exeutable
+  //
+  return (VOID*)&Mcfg;
+}
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Migt/Migt.aslc b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Migt/Migt.aslc
new file mode 100644
index 0000000000..5efe5afee1
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Migt/Migt.aslc
@@ -0,0 +1,68 @@
+/** @file
+
+  @copyright
+  Copyright 2005 - 2019 Intel Corporation. <BR>
+
+  SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+//
+// Statements that include other files
+//
+#include <Acpi/Migt.h>
+
+//
+// Please modify all values in Migt.h only.
+//
+EFI_MIGT_ACPI_DESCRIPTION_TABLE  Migt = {
+  {EFI_MIGT_ACPI_TABLE_SIGNATURE,              // Signature
+  sizeof (EFI_MIGT_ACPI_DESCRIPTION_TABLE),   // Length
+  EFI_MIGT_ACPI_DESCRIPTION_TABLE_REVISION,   // Revision
+  //
+  // Checksum will be updated at runtime
+  //
+  0x00, // Checksum
+  //
+  // It is expected that these values will be updated at runtime
+  //
+  {' ',
+  ' ',
+  ' ',
+  ' ',
+  ' ',
+  ' '},
+  0,
+  EFI_MIGT_ACPI_OEM_REVISION,                   // OEM Revision
+  0,                                            // Creator ID
+  0},                                            // Creator Revision
+  //
+  // MIGT Speicific Entries
+  // Control Register GAS structure
+  //
+  {EFI_MIGT_CR_ACPI_ADDRESS_SPACE_ID,            // IO Type ID.
+  EFI_MIGT_CR_ACPI_REGISTER_BIT_WIDTH,
+  EFI_MIGT_CR_ACPI_REGISTER_BIT_OFFSET,
+  EFI_ACPI_RESERVED_BYTE,
+  EFI_MIGT_CR_ACPI_SMI_ADDRESS},
+
+  MIGT_SMI_SERVICE_ID,                          // SMI Door Bell
+
+  //
+  // Action Region GAS structure
+  //
+  {EFI_MIGT_AR_ACPI_ADDRESS_SPACE_ID,            // Memory Type ID
+  EFI_MIGT_AR_ACPI_REGISTER_BIT_WIDTH,
+  EFI_MIGT_AR_ACPI_REGISTER_BIT_OFFSET,
+  EFI_ACPI_RESERVED_BYTE,
+  // update during boot
+  EFI_MIGT_AR_ACPI_MEMORY_ADDRESS}
+};
+
+VOID*
+ReferenceAcpiTable (
+  VOID
+  )
+
+{
+  return (VOID*)&Migt;
+}
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Msct/Msct.aslc b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Msct/Msct.aslc
new file mode 100644
index 0000000000..e0e1bebd0a
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Msct/Msct.aslc
@@ -0,0 +1,137 @@
+/** @file
+
+  @copyright
+  Copyright 2019 Intel Corporation. <BR>
+
+  SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+//
+// Statements that include other files
+//
+#include <Acpi/Msct.h>
+
+//
+// Maximum System Characteristics Table definition
+//
+EFI_ACPI_MAXIMUM_SYSTEM_CHARACTERISTICS_TABLE Msct = {
+  {EFI_ACPI_6_2_MAXIMUM_SYSTEM_CHARACTERISTICS_TABLE_SIGNATURE,
+  sizeof (EFI_ACPI_MAXIMUM_SYSTEM_CHARACTERISTICS_TABLE),  // Length
+  EFI_ACPI_MAXIMUM_SYSTEM_CHARACTERISTICS_TABLE_REVISION,  // Revision
+  0x00,                                                    // Checksum will be updated at runtime
+  {'I', 'N', 'T', 'E', 'L', ' '},                           // OemId
+  0,                                                       // OemTableId
+  EFI_ACPI_OEM_MSCT_REVISION,                              // OemRevision
+  EFI_ACPI_CREATOR_ID,                                     // CreaterId
+  EFI_ACPI_CREATOR_REVISION},                              // CreaterRevision
+  //
+  // Beginning of MSCT specific fields
+  //
+  0x00000038,                                              // OffsetProxDomInfo
+  MAX_SOCKET - 1,                                          // MaxNumProxDom
+  0x00000000,                                              // MaxNumClockDom
+  0x0000000000000000,                                      // MaxPhysicalAddress
+  //
+  // Proximity Domain Information Structure 0
+  //
+  {{EFI_ACPI_MAXIMUM_PROXIMITY_DOMAIN_INFORMATION_STRUCTURE_REVISION,  // Revision
+  sizeof (EFI_ACPI_MAXIMUM_PROXIMITY_DOMAIN_INFORMATION_STRUCTURE),    // Length
+  0x00000000,                                                          // ProxDomRangeLow
+  0x00000000,                                                          // ProxDomRangeHigh
+  0x00000000,                                                          // MaxProcessorCapacity
+  0x0000000000000000}                                                  // MaxMemoryCapacity
+
+#if MAX_SOCKET > 1
+  //
+  // Proximity Domain Information Structure 1
+  //
+  ,{EFI_ACPI_MAXIMUM_PROXIMITY_DOMAIN_INFORMATION_STRUCTURE_REVISION,   // Revision
+  sizeof (EFI_ACPI_MAXIMUM_PROXIMITY_DOMAIN_INFORMATION_STRUCTURE),    // Length
+  0x00000000,                                                          // ProxDomRangeLow
+  0x00000000,                                                          // ProxDomRangeHigh
+  0x00000000,                                                          // MaxProcessorCapacity
+  0x0000000000000000}                                                  // MaxMemoryCapacity
+#endif
+
+#if MAX_SOCKET > 2
+  //
+  // Proximity Domain Information Structure 2
+  //
+  ,{EFI_ACPI_MAXIMUM_PROXIMITY_DOMAIN_INFORMATION_STRUCTURE_REVISION,  // Revision
+  sizeof (EFI_ACPI_MAXIMUM_PROXIMITY_DOMAIN_INFORMATION_STRUCTURE),    // Length
+  0x00000000,                                                          // ProxDomRangeLow
+  0x00000000,                                                          // ProxDomRangeHigh
+  0x00000000,                                                          // MaxProcessorCapacity
+  0x0000000000000000}                                                  // MaxMemoryCapacity
+#endif
+
+#if MAX_SOCKET > 3
+  //
+  // Proximity Domain Information Structure 3
+  //
+  ,{EFI_ACPI_MAXIMUM_PROXIMITY_DOMAIN_INFORMATION_STRUCTURE_REVISION,  // Revision
+  sizeof (EFI_ACPI_MAXIMUM_PROXIMITY_DOMAIN_INFORMATION_STRUCTURE),    // Length
+  0x00000000,                                                          // ProxDomRangeLow
+  0x00000000,                                                          // ProxDomRangeHigh
+  0x00000000,                                                          // MaxProcessorCapacity
+  0x0000000000000000}                                                  // MaxMemoryCapacity
+#endif
+
+#if MAX_SOCKET > 4
+  //
+  // Proximity Domain Information Structure 4
+  //
+  ,{EFI_ACPI_MAXIMUM_PROXIMITY_DOMAIN_INFORMATION_STRUCTURE_REVISION,  // Revision
+  sizeof (EFI_ACPI_MAXIMUM_PROXIMITY_DOMAIN_INFORMATION_STRUCTURE),    // Length
+  0x00000000,                                                          // ProxDomRangeLow
+  0x00000000,                                                          // ProxDomRangeHigh
+  0x00000000,                                                          // MaxProcessorCapacity
+  0x0000000000000000}                                                  // MaxMemoryCapacity
+#endif
+
+#if MAX_SOCKET > 5
+  //
+  // Proximity Domain Information Structure 5
+  //
+  ,{EFI_ACPI_MAXIMUM_PROXIMITY_DOMAIN_INFORMATION_STRUCTURE_REVISION,  // Revision
+  sizeof (EFI_ACPI_MAXIMUM_PROXIMITY_DOMAIN_INFORMATION_STRUCTURE),    // Length
+  0x00000000,                                                          // ProxDomRangeLow
+  0x00000000,                                                          // ProxDomRangeHigh
+  0x00000000,                                                          // MaxProcessorCapacity
+  0x0000000000000000}                                                  // MaxMemoryCapacity
+#endif
+
+#if MAX_SOCKET > 6
+  //
+  // Proximity Domain Information Structure 6
+  //
+  ,{EFI_ACPI_MAXIMUM_PROXIMITY_DOMAIN_INFORMATION_STRUCTURE_REVISION,  // Revision
+  sizeof (EFI_ACPI_MAXIMUM_PROXIMITY_DOMAIN_INFORMATION_STRUCTURE),    // Length
+  0x00000000,                                                          // ProxDomRangeLow
+  0x00000000,                                                          // ProxDomRangeHigh
+  0x00000000,                                                          // MaxProcessorCapacity
+  0x0000000000000000}                                                  // MaxMemoryCapacity
+#endif
+
+#if MAX_SOCKET > 7
+  //
+  // Proximity Domain Information Structure 7
+  //
+  ,{EFI_ACPI_MAXIMUM_PROXIMITY_DOMAIN_INFORMATION_STRUCTURE_REVISION,  // Revision
+  sizeof (EFI_ACPI_MAXIMUM_PROXIMITY_DOMAIN_INFORMATION_STRUCTURE),    // Length
+  0x00000000,                                                          // ProxDomRangeLow
+  0x00000000,                                                          // ProxDomRangeHigh
+  0x00000000,                                                          // MaxProcessorCapacity
+  0x0000000000000000}                                                  // MaxMemoryCapacity
+#endif
+  }
+};
+
+VOID*
+ReferenceAcpiTable (
+  VOID
+  )
+
+{
+  return (VOID*)&Msct;
+}
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/NFIT/Nfit.aslc b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/NFIT/Nfit.aslc
new file mode 100644
index 0000000000..389c43ce3c
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/NFIT/Nfit.aslc
@@ -0,0 +1,48 @@
+/** @file
+
+  @copyright
+  Copyright 2015 Intel Corporation. <BR>
+
+  SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+//
+// Statements that include other files
+//
+#include <Acpi/Nfit.h>
+
+//
+// NFIT Table
+// Please modify all values in Nfit.h only.
+//
+NVDIMM_FW_INTERFACE_TABLE  Nfit = {
+  NVDIMM_FW_INTERFACE_TABLE_SIGNATURE,    // Signature
+  sizeof (NVDIMM_FW_INTERFACE_TABLE),     // Length
+  NVDIMM_FW_INTERFACE_TABLE_REVISION,     // Revision  [01]
+  //
+  // Checksum will be updated at runtime
+  //
+  0x00,                                                       // Checksum
+  //
+  // It is expected that these values will be updated at runtime
+  //
+  {' ', // TODO any other static values to be filled in?
+  ' ',
+  ' ',
+  ' ',
+  ' ',
+  ' '}
+};
+
+VOID*
+ReferenceAcpiTable (
+  VOID
+  )
+
+{
+  //
+  // Reference the table being generated to prevent the optimizer from removing the
+  // data structure from the exeutable
+  //
+  return (VOID*)&Nfit;
+}
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/PCAT/Pcat.aslc b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/PCAT/Pcat.aslc
new file mode 100644
index 0000000000..e43c865c64
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/PCAT/Pcat.aslc
@@ -0,0 +1,44 @@
+/** @file
+
+  @copyright
+  Copyright 2015 Intel Corporation. <BR>
+
+  SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+//
+// Statements that include other files
+//
+#include <Acpi/Pcat.h>
+
+//
+// PCAT Table
+// Please modify all values in Pcat.h only.
+//
+NVDIMM_PLATFORM_CONFIG_ATTRIBUTE_TABLE  Pcat = {
+  NVDIMM_PLATFORM_CONFIG_ATTRIBUTE_TABLE_SIGNATURE, // Signature
+  sizeof (NVDIMM_PLATFORM_CONFIG_ATTRIBUTE_TABLE),  // Length
+  NVDIMM_PLATFORM_CONFIG_ATTRIBUTE_TABLE_REVISION,  // Revision
+  //
+  // Checksum will be updated at runtime
+  //
+  0x00,                                              // Checksum
+  //
+  // It is expected that these values will be updated at runtime
+  //
+  {' '}, // TODO any other static values?
+
+};
+
+VOID*
+ReferenceAcpiTable (
+  VOID
+  )
+
+{
+  //
+  // Reference the table being generated to prevent the optimizer from removing the
+  // data structure from the exeutable
+  //
+  return (VOID*)&Pcat;
+}
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Pmtt/Pmtt10nm.aslc b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Pmtt/Pmtt10nm.aslc
new file mode 100644
index 0000000000..a0b4dc2756
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Pmtt/Pmtt10nm.aslc
@@ -0,0 +1,136 @@
+/** @file
+
+  @copyright
+  Copyright 2016 - 2018 Intel Corporation. <BR>
+
+  SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+//
+// Statements that include other files
+//
+#include <Acpi/Pmtt.h>
+//
+// PMTT Table
+//
+#define PHYSICAL_COMP_IDENTIFIER                    \
+  {PHYSICAL_COMPONENT_IDENTIFIER_TYPE_DIMM,         \
+  EFI_ACPI_RESERVED_BYTE,                           \
+  sizeof (ACPI_PMTT_DIMM_DEVICE),                   \
+  0x00000000,                                       \
+  EFI_ACPI_RESERVED_BYTE,                           \
+  0x00000000,                                       \
+  0xFFFFFFFF}
+
+#define SLOT                                                                         \
+  {ACPI_TOP_LEVEL_VENDOR_SPECIFIC_DEVICE,                                            \
+  EFI_ACPI_RESERVED_BYTE,                                                            \
+  sizeof (ACPI_PMTT_SLOT_DEVICE) - sizeof(ACPI_PMTT_DIMM_DEVICE),                    \
+  0x00000000,                                                                        \
+  EFI_ACPI_RESERVED_BYTE,                                                            \
+  0x00000000,                                                                        \
+  PMTT_TYPE_SLOT_GUID,                                                               \
+  0x00000000,                                                                        \
+  EFI_ACPI_RESERVED_BYTE,                                                            \
+  PHYSICAL_COMP_IDENTIFIER}
+
+#define CHANNEL                                                                      \
+  {ACPI_TOP_LEVEL_VENDOR_SPECIFIC_DEVICE,                                            \
+  EFI_ACPI_RESERVED_BYTE,                                                            \
+  sizeof (ACPI_PMTT_CHANNEL_DEVICE) - MAX_DIMM * sizeof(ACPI_PMTT_SLOT_DEVICE),      \
+  0x00000000,                                                                        \
+  EFI_ACPI_RESERVED_BYTE,                                                            \
+  0x00000000,                                                                        \
+  PMTT_TYPE_CHANNEL_GUID,                                                            \
+  0x00000000,                                                                        \
+  EFI_ACPI_RESERVED_BYTE,                                                            \
+  {SLOT,                                                                             \
+  SLOT}                                                                              \
+  }
+
+#define MEM_IMC                                                                      \
+  {ACPI_TOP_LEVEL_IMC,                                                               \
+  EFI_ACPI_RESERVED_BYTE,                                                            \
+  sizeof (ACPI_PMTT_IMC_DEVICE) - MAX_MC_CH * sizeof(ACPI_PMTT_CHANNEL_DEVICE),      \
+  0x00000000,                                                                        \
+  EFI_ACPI_RESERVED_BYTE,                                                            \
+  0x00000000,                                                                        \
+  0x00000000,                                                                        \
+  EFI_ACPI_RESERVED_BYTE,                                                            \
+  {CHANNEL,                                                                          \
+  CHANNEL}                                                                           \
+  }
+
+#define DIE                                                                          \
+  {ACPI_TOP_LEVEL_VENDOR_SPECIFIC_DEVICE,                                            \
+  EFI_ACPI_RESERVED_BYTE,                                                            \
+  sizeof (ACPI_PMTT_DIE_DEVICE) - MAX_IMC * sizeof(ACPI_PMTT_IMC_DEVICE),            \
+  0x00000000,                                                                        \
+  EFI_ACPI_RESERVED_BYTE,                                                            \
+  0x00000000,                                                                        \
+  PMTT_TYPE_DIE_GUID,                                                                \
+  0x00000000,                                                                        \
+  EFI_ACPI_RESERVED_BYTE,                                                            \
+  {MEM_IMC,                                                                          \
+  MEM_IMC,                                                                           \
+  MEM_IMC,                                                                           \
+  MEM_IMC}}
+
+#define SKT_LEVEL                                                                    \
+  {ACPI_TOP_LEVEL_SOCKET,                                                            \
+  EFI_ACPI_RESERVED_BYTE,                                                            \
+  sizeof (ACPI_PMTT_SOCKET_DEVICE) - sizeof(ACPI_PMTT_DIE_DEVICE),                   \
+  0x00000000,                                                                        \
+  EFI_ACPI_RESERVED_BYTE,                                                            \
+  0x00000000,                                                                        \
+  0x00000000,                                                                        \
+  EFI_ACPI_RESERVED_BYTE,                                                            \
+  {DIE}                                                                              \
+  },
+#pragma pack(1)
+
+ACPI_PLATFORM_MEMORY_TOPOLOGY_TABLE mPmttTable = {
+  {ACPI_PMTT_TABLE_SIGNATURE,                         // Signature 'PMTT'
+  sizeof (ACPI_PLATFORM_MEMORY_TOPOLOGY_TABLE),       // Length
+  ACPI_PMTT_TABLE_REVISION,                           // Revision
+  0x00,                                               // CheckSum
+  {'I', 'N', 'T', 'E', 'L', ' '},                     // OemId
+  0,                                                  // OemTableId
+  ACPI_PMTT_OEM_REVISION,                             // OemRevision
+  EFI_ACPI_CREATOR_ID,                                // CreaterId
+  EFI_ACPI_CREATOR_REVISION},                         // CreaterRevision
+  0,                                                  // NumOfMemoryDevices
+  { SKT_LEVEL
+#if  MAX_SOCKET > 1
+  SKT_LEVEL
+#endif
+#if  MAX_SOCKET > 2
+  SKT_LEVEL
+#endif
+#if  MAX_SOCKET > 3
+  SKT_LEVEL
+#endif
+#if  MAX_SOCKET > 4
+  SKT_LEVEL
+#endif
+#if  MAX_SOCKET > 5
+  SKT_LEVEL
+#endif
+#if  MAX_SOCKET > 6
+  SKT_LEVEL
+#endif
+#if  MAX_SOCKET > 7
+  SKT_LEVEL
+#endif
+  }
+};
+
+#pragma pack()
+
+VOID*
+ReferenceAcpiTable (
+  VOID
+  )
+{
+  return (VOID*)&mPmttTable;
+}
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/SPCR/Spcr.aslc b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/SPCR/Spcr.aslc
new file mode 100644
index 0000000000..26603102a2
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/SPCR/Spcr.aslc
@@ -0,0 +1,89 @@
+/** @file
+
+  @copyright
+  Copyright 1999 - 2002 Intel Corporation. <BR>
+
+  SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+//
+// Statements that include other files
+//
+
+#include <IndustryStandard/Acpi.h>
+#include <IndustryStandard/SerialPortConsoleRedirectionTable.h>
+#include <Acpi/Spcr.h>
+
+//
+// Serial Port Console Redirection Table
+// Please modify all values in Spcr.h only.
+//
+
+EFI_ACPI_SERIAL_PORT_CONSOLE_REDIRECTION_TABLE Spcr = {
+  {EFI_ACPI_6_2_SERIAL_PORT_CONSOLE_REDIRECTION_TABLE_SIGNATURE,
+  sizeof (EFI_ACPI_SERIAL_PORT_CONSOLE_REDIRECTION_TABLE),
+  EFI_ACPI_SERIAL_PORT_CONSOLE_REDIRECTION_TABLE_REVISION,
+
+  //
+  // Checksum will be updated at runtime
+  //
+  0x00,
+
+  //
+  // It is expected that these values will be programmed at runtime
+  //
+  {' ', ' ', ' ', ' ', ' ', ' '},
+
+  0,
+  EFI_ACPI_OEM_SPCR_REVISION,
+  0,
+  0},
+
+  //
+  // Beginning of SPCR specific fields
+  //
+  EFI_ACPI_INTERFACE_TYPE,
+  {EFI_ACPI_RESERVED_BYTE,
+  EFI_ACPI_RESERVED_BYTE,
+  EFI_ACPI_RESERVED_BYTE},
+
+  //
+  // Base Address Block
+  //
+  {EFI_ACPI_BASE_ADDRESS_ADDRESS_SPACE_ID,
+  EFI_ACPI_BASE_ADDRESS_BIT_WIDTH,
+  EFI_ACPI_BASE_ADDRESS_BIT_OFFSET,
+  EFI_ACPI_RESERVED_BYTE,
+  EFI_ACPI_BASE_ADDRESS_ADDRESS},
+
+  EFI_ACPI_INTERRUPT_TYPE,
+  EFI_ACPI_IRQ,
+  EFI_ACPI_GLOBAL_SYSTEM_INTERRUPT,
+  EFI_ACPI_BAUD_RATE,
+  EFI_ACPI_PARITY,
+  EFI_ACPI_STOP_BITS,
+  EFI_ACPI_FLOW_CONTROL,
+  EFI_ACPI_TERMINAL_TYPE,
+  EFI_ACPI_LANGUAGE,
+  EFI_ACPI_PCI_DEVICE_ID,
+  EFI_ACPI_PCI_VENDOR_ID,
+  EFI_ACPI_PCI_BUS_NUMBER,
+  EFI_ACPI_PCI_DEVICE_NUMBER,
+  EFI_ACPI_PCI_FUNCTION_NUMBER,
+  EFI_ACPI_PCI_FLAGS,
+  EFI_ACPI_PCI_SEGMENT,
+  EFI_ACPI_RESERVED_DWORD
+};
+
+VOID*
+ReferenceAcpiTable (
+  VOID
+  )
+
+{
+  //
+  // Reference the table being generated to prevent the optimizer from removing the
+  // data structure from the exeutable
+  //
+  return (VOID*)&Spcr;
+}
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Spmi/Spmi.aslc b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Spmi/Spmi.aslc
new file mode 100644
index 0000000000..74855daee4
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Spmi/Spmi.aslc
@@ -0,0 +1,53 @@
+/** @file
+
+  @copyright
+  Copyright 2019 Intel Corporation. <BR>
+
+  SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+//
+// Statements that include other files
+//
+#include <Acpi/Spmi.h>
+
+//
+// Server processor management interface table definition
+//
+EFI_ACPI_SERVER_PROCESSOR_MANAGEMENT_INTERFACE_TABLE Spmi = {
+  {EFI_ACPI_6_2_SERVER_PLATFORM_MANAGEMENT_INTERFACE_TABLE_SIGNATURE,
+  sizeof (EFI_ACPI_SERVER_PROCESSOR_MANAGEMENT_INTERFACE_TABLE),                 // Length
+  EFI_ACPI_SERVER_PROCESSOR_MANAGEMENT_INTERFACE_TABLE_REVISION,                 // Revision
+  0x00,                                                                          // Checksum will be updated at runtime
+  {'I', 'N', 'T', 'E', 'L', ' '},                                                 // OemId
+  0,                                                                             // OemTableId
+  EFI_ACPI_OEM_SPMI_REVISION,                                                    // OemRevision
+  0,                                                                             // CreaterId
+  0},                                                                             // CreaterRevision
+  //
+  // Beginning of Spmi specific fields
+  //
+  0x00,                                                                          // InterfaceType
+  0x01,                                                                          // Reserved37, always 1
+  EFI_ACPI_SPMI_SPECIFICATION_REVISION,                                          // SpecificationRevision
+  0x00,                                                                          // InterruptType
+  0x00,                                                                          // GPE
+  0x00,                                                                          // Reserved42
+  0x00,                                                                          // PciDeviceFlag
+  0x00000000,                                                                    // GlobalSystemInterrupt
+  {0x00, 0x00, 0x00, 0x00, 0x00},                                                // GAS
+  0x00,                                                                          // UidByte1
+  0x00,                                                                          // UidByte2
+  0x00,                                                                          // UidByte3
+  0x00,                                                                          // UidByte4
+  0x00                                                                           // Reserved64
+};
+
+VOID*
+ReferenceAcpiTable (
+  VOID
+  )
+
+{
+  return (VOID*)&Spmi;
+}
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Wddt/Wddt1.0.aslc b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Wddt/Wddt1.0.aslc
new file mode 100644
index 0000000000..fe0db504fd
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Wddt/Wddt1.0.aslc
@@ -0,0 +1,74 @@
+/** @file
+
+  @copyright
+  Copyright 1999 - 2019 Intel Corporation. <BR>
+
+  SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+//
+// Statements that include other files
+//
+#include <Acpi/WatchdogDescriptionTable.h>
+#include <Acpi/Wddt.h>
+
+//
+// Watchdog Description Table , ACPI 6.2 compliant
+//
+EFI_ACPI_WATCH_DOG_DESCRIPTION_TABLE  Wddt = {
+  {EFI_ACPI_WDDT_SIGNATURE,
+  sizeof (EFI_ACPI_WATCH_DOG_DESCRIPTION_TABLE),
+  EFI_ACPI_WDDT_DESCRIPTION_TABLE_REVISION,
+  //
+  // Checksum will be updated at runtime
+  //
+  0x00,
+  //
+  // It is expected that these values will be programmed at runtime
+  //
+  {' ',
+  ' ',
+  ' ',
+  ' ',
+  ' ',
+  ' '},
+  0,
+  0,
+  0,
+  0},
+  //
+  // WDDT specific fields
+  //
+  //
+  // This is LPC bridge VID it must be patched in
+  //
+  0,
+  EFI_ACPI_WDDT_SPEC_VERSION,
+  EFI_ACPI_WDDT_TABLE_VERSION,
+  //
+  // Base Address
+  //
+  {0x01,
+  0xff,
+  0x00,
+  0x00,
+  //
+  // This is AcpiBase(PmBase)+60 and must be patched in
+  //
+  0000},
+  EFI_ACPI_WDDT_TIMER_MAX_COUNT,
+  EFI_ACPI_WDDT_TIMER_MIN_VALUE,
+  EFI_ACPI_WDDT_TIMER_PERIOD_COUNT,
+  EFI_ACPI_WDDT_STATUS_AVAILABLE,
+  00
+
+};
+
+VOID*
+ReferenceAcpiTable (
+  VOID
+  )
+
+{
+  return (VOID*)&Wddt;
+}
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Wsmt/Wsmt.aslc b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Wsmt/Wsmt.aslc
new file mode 100644
index 0000000000..83484b7cd7
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Wsmt/Wsmt.aslc
@@ -0,0 +1,74 @@
+/** @file
+
+ @copyright
+  Copyright 2017 - 2020 Intel Corporation.
+
+  SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+
+   //
+   // Statements that include other files
+   //
+
+#include <Acpi/Wsmt.h>
+
+   //
+   // Windows SMM Security Mitigations Table
+   // Please modify all values in Wsmt.h only.
+   //
+
+ACPI_WINDOWS_SMM_SECURITY_MITIGATIONS_TABLE Wsmt = {
+  //
+  // Header
+  //
+  {
+    ACPI_WSMT_SIGNATURE,
+    ACPI_WSMT_LENGTH,
+    EFI_ACPI_WSMT_REVISION,
+
+    //
+    // Checksum will be updated at runtime
+    //
+    0x00,
+
+    //
+    // It is expected that these values will be updated at runtime
+    //
+    { ' ', ' ', ' ', ' ', ' ', ' ' },
+    0,
+    ACPI_OEM_WSMT_REVISION,
+    0,
+    0
+  },
+  //
+  // Protection Flags
+  //
+  {
+    { 0 }
+  }
+
+};
+
+#if defined (__GNUC__)
+VOID*
+ReferenceAcpiTable (
+ VOID
+ )
+
+{
+ //
+ // Reference the table being generated to prevent the optimizer from removing the
+ // data structure from the executable
+ //
+ return (VOID*)&Wsmt;
+}
+#else
+VOID
+main (
+ VOID
+ )
+
+{
+}
+#endif
-- 
2.27.0.windows.1


^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [edk2-devel][edk2-platforms][PATCH V1 5/8] WhitleyOpenBoardPkg/AcpiTables10nm: Add DSDT ACPI table
  2022-02-07 19:02 [edk2-devel][edk2-platforms][PATCH V1 0/8] Whitley ACPI Tables Oram, Isaac W
                   ` (3 preceding siblings ...)
  2022-02-07 19:02 ` [edk2-devel][edk2-platforms][PATCH V1 4/8] WhitleyOpenBoardPkg/AcpiTables10nm: Add Static ACPI tables Oram, Isaac W
@ 2022-02-07 19:02 ` Oram, Isaac W
  2022-02-09  3:21   ` Nate DeSimone
  2022-02-07 19:02 ` [edk2-devel][edk2-platforms][PATCH V1 6/8] WhitleyOpenBoardPkg/Build: Enable includable build options Oram, Isaac W
                   ` (2 subsequent siblings)
  7 siblings, 1 reply; 17+ messages in thread
From: Oram, Isaac W @ 2022-02-07 19:02 UTC (permalink / raw)
  To: devel; +Cc: Nate DeSimone, Chasel Chiu

DSDT for WilsonCityRvp

Cc: Nate DeSimone <nathaniel.l.desimone@intel.com>
Cc: Chasel Chiu <chasel.chiu@intel.com>
Signed-off-by: Isaac Oram <isaac.w.oram@intel.com>
---
 Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/AcpiTables10nm.inf                    |   48 +
 Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/AMLUPD.asl                       |   20 +
 Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/BiosParameterRegion.asi          |  346 ++
 Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/CommonPlatform10nm.asi           |  205 +
 Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/CpuMemHp.asi                     |  730 +++
 Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/DSDT.asl                         |   61 +
 Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/EPRPPlatform10nm.asl             |   19 +
 Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/FpgaBus00.asi                    |  158 +
 Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/FpgaBus01.asi                    |  158 +
 Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/FpgaBus02.asi                    |  157 +
 Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/FpgaBus03.asi                    |  157 +
 Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/Gpe.asi                          |  137 +
 Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/IioPcieEdpcGpe.asi               |   16 +
 Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/IioPcieEdpcNotify10nm.asi        |  183 +
 Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/IioPcieEdpcOst.asi               |   16 +
 Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/IioPcieHotPlugGpeHandler10nm.asl | 1322 +++++
 Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/IioRootBridge.asi                |  328 ++
 Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/IioRootBridgeIcx.asi             |  270 +
 Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/Mother.asi                       |  164 +
 Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/NvdimmGpe.asi                    |   25 +
 Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/Os.asi                           |   66 +
 Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/PC0010nm.asi                     |  427 ++
 Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/PC0610nmEjd.asi                  |   10 +
 Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/PC1210nmEjd.asi                  |   10 +
 Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/PC1810nmEjd.asi                  |   10 +
 Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/PchApic.asi                      |   18 +
 Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/PcieHp.asi                       |  669 +++
 Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/PcieHpDev.asi                    |   53 +
 Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/PcieNonHpDev.asi                 |   45 +
 Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/Platform.asl                     |   91 +
 Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/PlatformGpe10nm.asi              |  191 +
 Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/PlatformPciTree10nm_EPRP.asi     | 5388 ++++++++++++++++++++
 Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/Sck1Ejd.asi                      |   10 +
 Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/Sck2Ejd.asi                      |   10 +
 Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/Sck3Ejd.asi                      |   10 +
 Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/Sgx.asi                          |  219 +
 Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/Uncore.asi                       |  163 +
 Platform/Intel/WhitleyOpenBoardPkg/PlatformPkg.dsc                                                |    1 +
 Platform/Intel/WhitleyOpenBoardPkg/PlatformPkg.fdf                                                |    1 +
 39 files changed, 11912 insertions(+)

diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/AcpiTables10nm.inf b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/AcpiTables10nm.inf
new file mode 100644
index 0000000000..5480040545
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/AcpiTables10nm.inf
@@ -0,0 +1,48 @@
+## @file
+#
+# @copyright
+# Copyright 2009 - 2022 Intel Corporation. <BR>
+#
+# SPDX-License-Identifier: BSD-2-Clause-Patent
+##
+
+[Defines]
+  INF_VERSION                    = 0x00010005
+  BASE_NAME                      = PlatformAcpiTable
+  FILE_GUID                      = 7E374E25-8E01-4FEE-87F2-390C23C606CD
+  MODULE_TYPE                    = USER_DEFINED
+  VERSION_STRING                 = 1.0
+
+[Sources]
+  Fadt/Fadt62.aslc
+  Facs/Facs62.aslc
+  Dsdt/EPRPPlatform10nm.asl
+  Mcfg/Mcfg.aslc
+  Hpet/Hpet.aslc
+  NFIT/Nfit.aslc
+  PCAT/Pcat.aslc
+
+  SPCR/Spcr.aslc
+  Msct/Msct.aslc
+  Wddt/Wddt1.0.aslc
+  Bdat/Bdat.aslc
+
+  Migt/Migt.aslc
+  DBG2/DBG2.aslc
+  Spmi/Spmi.aslc
+  Pmtt/Pmtt10nm.aslc
+  Hmat/Hmat.aslc
+
+  Wsmt/Wsmt.aslc
+
+[Packages]
+  MdePkg/MdePkg.dec
+  WhitleySiliconPkg/CpRcPkg.dec
+  WhitleySiliconPkg/SiliconPkg.dec
+  WhitleyOpenBoardPkg/PlatformPkg.dec
+
+[FixedPcd]
+  gEfiCpRcPkgTokenSpaceGuid.PcdMaxCpuSocketCount
+  gEfiCpRcPkgTokenSpaceGuid.PcdMaxCpuCoreCount
+  gEfiCpRcPkgTokenSpaceGuid.PcdMaxCpuThreadCount
+  gPlatformTokenSpaceGuid.PcdEfiAcpiPm1aEvtBlkAddress
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/AMLUPD.asl b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/AMLUPD.asl
new file mode 100644
index 0000000000..3b46dd84df
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/AMLUPD.asl
@@ -0,0 +1,20 @@
+/** @file
+  ACPI DSDT table
+
+  @copyright
+  Copyright 2011 - 2014 Intel Corporation. <BR>
+
+  SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+///////////////////////////////////////////////////////////////////////////////////
+//Values are set like this to have ASL compiler reserve enough space for objects
+///////////////////////////////////////////////////////////////////////////////////
+//
+// Available Sleep states
+//
+Name(SS1,0)
+Name(SS2,0)
+Name(SS3,1)
+Name(SS4,1)
+
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/BiosParameterRegion.asi b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/BiosParameterRegion.asi
new file mode 100644
index 0000000000..4e49adc10c
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/BiosParameterRegion.asi
@@ -0,0 +1,346 @@
+/** @file
+
+  @copyright
+  Copyright 2016 - 2020 Intel Corporation. <BR>
+
+  SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+  //
+  // BIOS parameters region left in memory for ASL by POST code, defined as BIOS_ACPI_PARAM in GlobalNvsArea.h.
+  //
+  OperationRegion (PSYS, SystemMemory, 0x30584946, 0x800) // (FIX0 - Patched by ACPI Platform Driver during POST)
+  Field (PSYS, ByteAcc, NoLock, Preserve) {
+    // IOAPIC Start
+    PLAT   ,  32,   // Platform ID
+
+    Offset (0x04),  //
+    APCE   ,   1,   // PCH IOAPIC Enable
+    AP00   ,   1,   // PC00 IOAPIC Enable S0
+    AP01   ,   1,   // PC01 IOAPIC Enable
+    AP02   ,   1,   // PC02 IOAPIC Enable
+    AP03   ,   1,   // PC03 IOAPIC Enable
+    AP04   ,   1,   // PC04 IOAPIC Enable
+    AP05   ,   1,   // PC05 IOAPIC Enable
+    AP06   ,   1,   // PC06 IOAPIC Enable S1
+    AP07   ,   1,   // PC07 IOAPIC Enable
+    AP08   ,   1,   // PC08 IOAPIC Enable
+    AP09   ,   1,   // PC09 IOAPIC Enable
+    AP10   ,   1,   // PC10 IOAPIC Enable
+    AP11   ,   1,   // PC11 IOAPIC Enable
+    AP12   ,   1,   // PC12 IOAPIC Enable S2
+    AP13   ,   1,   // PC13 IOAPIC Enable
+    AP14   ,   1,   // PC14 IOAPIC Enable
+    AP15   ,   1,   // PC15 IOAPIC Enable
+    AP16   ,   1,   // PC16 IOAPIC Enable
+    AP17   ,   1,   // PC17 IOAPIC Enable
+    AP18   ,   1,   // PC18 IOAPIC Enable S3
+    AP19   ,   1,   // PC19 IOAPIC Enable
+    AP20   ,   1,   // PC20 IOAPIC Enable
+    AP21   ,   1,   // PC21 IOAPIC Enable
+    AP22   ,   1,   // PC22 IOAPIC Enable
+    AP23   ,   1,   // PC23 IOAPIC Enable
+    AP24   ,   1,   // PC24 IOAPIC Enable S4
+    AP25   ,   1,   // PC25 IOAPIC Enable
+    AP26   ,   1,   // PC26 IOAPIC Enable
+    AP27   ,   1,   // PC27 IOAPIC Enable
+    AP28   ,   1,   // PC28 IOAPIC Enable
+    AP29   ,   1,   // PC29 IOAPIC Enable
+    AP30   ,   1,   // PC30 IOAPIC Enable S5
+    AP31   ,   1,   // PC31 IOAPIC Enable
+    AP32   ,   1,   // PC32 IOAPIC Enable
+    AP33   ,   1,   // PC33 IOAPIC Enable
+    AP34   ,   1,   // PC34 IOAPIC Enable
+    AP35   ,   1,   // PC35 IOAPIC Enable
+    AP36   ,   1,   // PC36 IOAPIC Enable S6
+    AP37   ,   1,   // PC37 IOAPIC Enable
+    AP38   ,   1,   // PC38 IOAPIC Enable
+    AP39   ,   1,   // PC39 IOAPIC Enable
+    AP40   ,   1,   // PC40 IOAPIC Enable
+    AP41   ,   1,   // PC41 IOAPIC Enable
+    AP42   ,   1,   // PC42 IOAPIC Enable S7
+    AP43   ,   1,   // PC43 IOAPIC Enable
+    AP44   ,   1,   // PC44 IOAPIC Enable
+    AP45   ,   1,   // PC45 IOAPIC Enable
+    AP46   ,   1,   // PC46 IOAPIC Enable
+    AP47   ,   1,   // PC47 IOAPIC Enable
+    RESA   ,  15,
+
+    Offset (0x0C),
+    SKOV   ,   1,   // Override ApicId socket field
+    P119   ,   1,   // PCH IOAPIC 24_119 enabled
+    CPX4   ,   1,   // 1 = CPX4, 0 = CPX6
+    RES0   ,   5,   // Unused
+    // IOAPIC End
+
+    // Power Managment Start
+    Offset (0x0D),
+    TPME   ,  1,    // TPM Enable
+    CSEN   ,  1,    // C State Enable
+    C3EN   ,  1,    // OS C3 Report Enbale
+    C6EN   ,  1,    // C6 Enable
+    C7EN   ,  1,    // C7 Enable
+    MWOS   ,  1,    // MWAIT support Enable
+    PSEN   ,  1,    // P State Enable
+    EMCA   ,  1,    // EMCA Enable
+    Offset (0x0E),
+    HWAL   ,  2,    // PSD HW_ALL Enable
+    KPRS   ,  1,    // KB present Flag
+    MPRS   ,  1,    // Mouse present Flag
+    TSEN   ,  1,    // T State Enable Flag
+    FGTS   ,  1,    // Fine grained T state Flag
+    OSCX   ,  1,    // OS C States
+    RESX   ,  1,    // Unused
+    // Power Management End
+
+    // RAS Start
+    Offset (0x0F),
+    CPHP   ,  8,    // Bit field for determining CPU hotplug event is happening, Update every time CPU Hotpug event is registered as valid
+                    // Bit0 CPU0 O*L Request
+                    // Bit1 CPU1 O*L Request
+                    // Bit2 CPU2 O*L Request
+                    // Bit3 CPU3 O*L Request
+                    // Bit4 CPU4 O*L Request
+                    // Bit5 CPU5 O*L Request
+                    // Bit6 CPU6 O*L Request
+                    // Bit7 CPU7 O*L Request
+    IIOP   ,  8,    // Bit field for determining IIO hotplug event is happening, Update every time IIO Hotpug event is registered as valid
+                    // Bit0 IIO1 O*L Request
+                    // Bit1 IIO2 O*L Request
+                    // Bit2 IIO3 O*L Request
+                    // Bit3-7 Reserved
+    SPB0   , 16,    // Stack Present Bitmask in socket0, what stacks are present for STA method (Patched by ACPI Platform Driver during POST)
+    SPB1   , 16,    // Stack Present Bitmask in socket1, what stacks are present for STA method (Patched by ACPI Platform Driver during POST)
+    SPB2   , 16,    // Stack Present Bitmask in socket2, what stacks are present for STA method (Patched by ACPI Platform Driver during POST)
+    SPB3   , 16,    // Stack Present Bitmask in socket3, what stacks are present for STA method (Patched by ACPI Platform Driver during POST)
+    SPB4   , 16,    // Stack Present Bitmask in socket4, what stacks are present for STA method (Patched by ACPI Platform Driver during POST)
+    SPB5   , 16,    // Stack Present Bitmask in socket5, what stacks are present for STA method (Patched by ACPI Platform Driver during POST)
+    SPB6   , 16,    // Stack Present Bitmask in socket6, what stacks are present for STA method (Patched by ACPI Platform Driver during POST)
+    SPB7   , 16,    // Stack Present Bitmask in socket7, what stacks are present for STA method (Patched by ACPI Platform Driver during POST)
+    PRBM   , 32,    // Processor Bit mask, what sockets are present for STA method, Update every time hotplug event happen and at boot time (Patched by ACPI Platform Driver during POST)
+    CTHC   , 8,     // CPU Core Thread Count
+    P0ID   , 32,    // Processor 0 APIC ID base
+    P1ID   , 32,    // Processor 1 APIC ID base
+    P2ID   , 32,    // Processor 2 APIC ID base
+    P3ID   , 32,    // Processor 3 APIC ID base
+    P4ID   , 32,    // Processor 4 APIC ID base
+    P5ID   , 32,    // Processor 5 APIC ID base
+    P6ID   , 32,    // Processor 6 APIC ID base
+    P7ID   , 32,    // Processor 7 APIC ID base
+    P0BM   , 64,    // Processor 0 Bit mask, what cores (0-63) are present for STA method
+    P1BM   , 64,    // Processor 1 Bit mask, what cores (0-63) are present for STA method
+    P2BM   , 64,    // Processor 2 Bit mask, what cores (0-63) are present for STA method
+    P3BM   , 64,    // Processor 3 Bit mask, what cores (0-63) are present for STA method
+    P4BM   , 64,    // Processor 4 Bit mask, what cores (0-63) are present for STA method
+    P5BM   , 64,    // Processor 5 Bit mask, what cores (0-63) are present for STA method
+    P6BM   , 64,    // Processor 6 Bit mask, what cores (0-63) are present for STA method
+    P7BM   , 64,    // Processor 7 Bit mask, what cores (0-63) are present for STA method
+    P0BH   , 64,    // Processor 0 Bit mask, what cores (64-127) are present for STA method
+    P1BH   , 64,    // Processor 1 Bit mask, what cores (64-127) are present for STA method
+    P2BH   , 64,    // Processor 2 Bit mask, what cores (64-127) are present for STA method
+    P3BH   , 64,    // Processor 3 Bit mask, what cores (64-127) are present for STA method
+    P4BH   , 64,    // Processor 4 Bit mask, what cores (64-127) are present for STA method
+    P5BH   , 64,    // Processor 5 Bit mask, what cores (64-127) are present for STA method
+    P6BH   , 64,    // Processor 6 Bit mask, what cores (64-127) are present for STA method
+    P7BH   , 64,    // Processor 7 Bit mask, what cores (64-127) are present for STA method
+    CFMM   , 32,    // MMCFG Base
+    TSSZ   , 32,    // TSEG Size.
+    SMI0   , 32,    // Parameter0 used for faked SMI request
+    SMI1   , 32,    // Parameter1 used for faked SMI request
+    SMI2   , 32,    // Parameter2 used for faked SMI request
+    SMI3   , 32,    // Parameter3 used for faked SMI request
+    SCI0   , 32,    // Parameter0 used for faked SCI request
+    SCI1   , 32,    // Parameter1 used for faked SCI request
+    SCI2   , 32,    // Parameter2 used for faked SCI request
+    SCI3   , 32,    // Parameter3 used for faked SCI request
+    MADD   , 64,    // Migration ActionRegion GAS address. (Migration support written for 8 CPU socket system. In a 4 socket system, CPU4-7 and MEM8-15 are invalid.)
+    CUU0   , 128,   // CPU0 UUID
+    CUU1   , 128,   // CPU1 UUID
+    CUU2   , 128,   // CPU2 UUID
+    CUU3   , 128,   // CPU3 UUID
+    CUU4   , 128,   // CPU4 UUID
+    CUU5   , 128,   // CPU5 UUID
+    CUU6   , 128,   // CPU6 UUID
+    CUU7   , 128,   // CPU7 UUID
+    CPSP   , 8,     // CPU spare bitmap. 1 == IsSpare.
+    ME00   , 128,   // MEM0 UUID
+    ME01   , 128,   // MEM1 UUID
+    ME10   , 128,   // MEM2 UUID
+    ME11   , 128,   // MEM3 UUID
+    ME20   , 128,   // MEM4 UUID
+    ME21   , 128,   // MEM5 UUID
+    ME30   , 128,   // MEM6 UUID
+    ME31   , 128,   // MEM7 UUID
+    ME40   , 128,   // MEM8 UUID
+    ME41   , 128,   // MEM9 UUID
+    ME50   , 128,   // MEM10 UUID
+    ME51   , 128,   // MEM11 UUID
+    ME60   , 128,   // MEM12 UUID
+    ME61   , 128,   // MEM13 UUID
+    ME70   , 128,   // MEM14 UUID
+    ME71   , 128,   // MEM15 UUID
+    LDIR   , 64,    // L1 Directory Address
+    PRID   , 32,    // Processor ID
+    AHPE   , 8,     // ACPI PCIe hot plug enable.
+    WHEN   , 8,
+    WSCI   , 8,
+    SERR   , 8,     // Propogate SERR
+    PERR   , 8,     // Propogate PERR
+    // RAS End
+
+    // VTD Start
+    DHRD   , 192,   // DHRD
+    ATSR   , 192,   // ATSR
+    RHSA   , 192,   // RHSA
+    // VTD End
+
+    // SR-IOV WA Start
+    WSIC   , 8,
+    WSIS   , 16,
+    WSIB   , 8,
+    WSID   , 8,
+    WSIF   , 8,
+    WSTS   , 8,
+    WHEA   , 8,
+    // SR-IOV WA End
+
+    // BIOS Guard Start
+    BGMA   , 64,    // BIOS Guard Memory Address
+    BGMS   , 8,     // BIOS Guard Memory Size
+    BGIO   , 16,    // BIOS Guard IO Trap Address
+    CNBS   , 8,     // CPU SKU number bit shift
+    // BIOS Guard End
+
+    // USB3 Start
+    XHMD   , 8,     // copy of setup item PchUsb30Mode
+    SBV1   , 8,     // USB Sideband Deferring GPE Vector (HOST_ALERT#1)
+    SBV2   , 8,     // USB Sideband Deferring GPE Vector (HOST_ALERT#2)
+    // USB3 End
+
+    // HWPM Start
+    HWEN   ,  2,    // HWPM State Enable option from setup
+    RES2   ,  1,    // Reserved bit
+    HWPI   ,  1,    // HWP Interrupt
+    RES1   ,  4,    // Reserved bits
+    // HWPM End
+
+    // SGX Start
+    EPCS   ,  8,    // EPC Status
+    ELN0   , 64,    // EPC0 Length
+    ELN1   , 64,    // EPC1 Length
+    ELN2   , 64,    // EPC2 Length
+    ELN3   , 64,    // EPC3 Length
+    ELN4   , 64,    // EPC4 Length
+    ELN5   , 64,    // EPC5 Length
+    ELN6   , 64,    // EPC6 Length
+    ELN7   , 64,    // EPC7 Length
+    EBA0   , 64,    // EPC0 Base Address
+    EBA1   , 64,    // EPC1 Base Address
+    EBA2   , 64,    // EPC2 Base Address
+    EBA3   , 64,    // EPC3 Base Address
+    EBA4   , 64,    // EPC4 Base Address
+    EBA5   , 64,    // EPC5 Base Address
+    EBA6   , 64,    // EPC6 Base Address
+    EBA7   , 64,    // EPC7 Base Address
+    // SGX End
+
+    // PCIe Multi-Seg Start
+    // Stack bus base numbers for up to 14 stacks in up to 8 socket. Name is 'BB<skt><stk>', where <skt> and <stk> are hex.
+    BB00, 8, BB01, 8, BB02, 8, BB03, 8, BB04, 8, BB05, 8, BB06, 8, BB07, 8, BB08, 8, BB09, 8, BB0A, 8, BB0B, 8, BB0C, 8, BB0D, 8,
+    BB10, 8, BB11, 8, BB12, 8, BB13, 8, BB14, 8, BB15, 8, BB16, 8, BB17, 8, BB18, 8, BB19, 8, BB1A, 8, BB1B, 8, BB1C, 8, BB1D, 8,
+    BB20, 8, BB21, 8, BB22, 8, BB23, 8, BB24, 8, BB25, 8, BB26, 8, BB27, 8, BB28, 8, BB29, 8, BB2A, 8, BB2B, 8, BB2C, 8, BB2D, 8,
+    BB30, 8, BB31, 8, BB32, 8, BB33, 8, BB34, 8, BB35, 8, BB36, 8, BB37, 8, BB38, 8, BB39, 8, BB3A, 8, BB3B, 8, BB3C, 8, BB3D, 8,
+    BB40, 8, BB41, 8, BB42, 8, BB43, 8, BB44, 8, BB45, 8, BB46, 8, BB47, 8, BB48, 8, BB49, 8, BB4A, 8, BB4B, 8, BB4C, 8, BB4D, 8,
+    BB50, 8, BB51, 8, BB52, 8, BB53, 8, BB54, 8, BB55, 8, BB56, 8, BB57, 8, BB58, 8, BB59, 8, BB5A, 8, BB5B, 8, BB5C, 8, BB5D, 8,
+    BB60, 8, BB61, 8, BB62, 8, BB63, 8, BB64, 8, BB65, 8, BB66, 8, BB67, 8, BB68, 8, BB69, 8, BB6A, 8, BB6B, 8, BB6C, 8, BB6D, 8,
+    BB70, 8, BB71, 8, BB72, 8, BB73, 8, BB74, 8, BB75, 8, BB76, 8, BB77, 8, BB78, 8, BB79, 8, BB7A, 8, BB7B, 8, BB7C, 8, BB7D, 8,
+
+    SGEN   , 8,     // PCIe_MultiSeg_Support enable/disable
+    SG00   , 8,     // PCI segment ID for socket 0
+    SG01   , 8,     // PCI segment ID for socket 1
+    SG02   , 8,     // PCI segment ID for socket 2
+    SG03   , 8,     // PCI segment ID for socket 3
+    SG04   , 8,     // PCI segment ID for socket 4
+    SG05   , 8,     // PCI segment ID for socket 5
+    SG06   , 8,     // PCI segment ID for socket 6
+    SG07   , 8,     // PCI segment ID for socket 7
+    // PCIe Multi-Seg End
+
+    // Sub-NUMA Cluster support
+    CLOD   , 8,     //  0 - SNC disabled, 2 - SNC enabled with 2 clusters, 4 - SNC enabled with 4 clusters
+
+    // XTU Start
+    XTUB   , 32,
+    XTUS   , 32,
+    XMBA   , 32,
+    DDRF   , 8,
+    RT3S   , 8,
+    RTP0   , 8,
+    RTP3   , 8,
+    // XTU End
+
+    // FPGA Root Port Bus
+    FBB0   , 8,     // FPGA Bus Base for Socket 0
+    FBB1   , 8,     // FPGA Bus Base for Socket 1
+    FBB2   , 8,     // FPGA Bus Base for Socket 2
+    FBB3   , 8,     // FPGA Bus Base for Socket 3
+    FBB4   , 8,     // FPGA Bus Base for Socket 4
+    FBB5   , 8,     // FPGA Bus Base for Socket 5
+    FBB6   , 8,     // FPGA Bus Base for Socket 6
+    FBB7   , 8,     // FPGA Bus Base for Socket 7
+
+    FBL0   , 8,     // FPGA Bus limit for Socket 0
+    FBL1   , 8,     // FPGA Bus limit for Socket 1
+    FBL2   , 8,     // FPGA Bus limit for Socket 2
+    FBL3   , 8,     // FPGA Bus limit for Socket 3
+    FBL4   , 8,     // FPGA Bus limit for Socket 4
+    FBL5   , 8,     // FPGA Bus limit for Socket 5
+    FBL6   , 8,     // FPGA Bus limit for Socket 6
+    FBL7   , 8,     // FPGA Bus limit for Socket 7
+
+    // FPGA present bit
+    P0FB   , 8,     // FPGA present in Socket 0
+    P1FB   , 8,     // FPGA present in Socket 1
+    P2FB   , 8,     // FPGA present in Socket 2
+    P3FB   , 8,     // FPGA present in Socket 3
+    P4FB   , 8,     // FPGA present in Socket 4
+    P5FB   , 8,     // FPGA present in Socket 5
+    P6FB   , 8,     // FPGA present in Socket 6
+    P7FB   , 8,     // FPGA present in Socket 7
+
+    // FPGA Resource Allocation
+    FMB0   , 32,
+    FMB1   , 32,
+    FMB2   , 32,
+    FMB3   , 32,
+    FMB4   , 32,
+    FMB5   , 32,
+    FMB6   , 32,
+    FMB7   , 32,
+
+    FML0   , 32,
+    FML1   , 32,
+    FML2   , 32,
+    FML3   , 32,
+    FML4   , 32,
+    FML5   , 32,
+    FML6   , 32,
+    FML7   , 32,
+
+    // FPGA KTI present bitmap
+    FKPB   , 32,
+    // FPGA Bus for KTI
+    FKB0   , 8,     // FPGA Bus Base for Socket 0 KTI Link
+    FKB1   , 8,     // FPGA Bus Base for Socket 1 KTI Link
+    FKB2   , 8,     // FPGA Bus Base for Socket 2 KTI Link
+    FKB3   , 8,     // FPGA Bus Base for Socket 3 KTI Link
+    FKB4   , 8,     // FPGA Bus Base for Socket 4 KTI Link
+    FKB5   , 8,     // FPGA Bus Base for Socket 5 KTI Link
+    FKB6   , 8,     // FPGA Bus Base for Socket 6 KTI Link
+    FKB7   , 8,     // FPGA Bus Base for Socket 7 KTI Link
+
+    PMBA   , 16,    // ACPI IO Base Address
+    DBGM   , 8,     // Debug Mode Indicator
+    IRPC   , 8,     // IIO PCIe root port PCIe Capability offset
+    ATSC   , 8,     // Flag to indicate if TSC is linked to ART
+  }
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/CommonPlatform10nm.asi b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/CommonPlatform10nm.asi
new file mode 100644
index 0000000000..28a997b102
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/CommonPlatform10nm.asi
@@ -0,0 +1,205 @@
+/** @file
+
+  @copyright
+  Copyright 2016 - 2020 Intel Corporation. <BR>
+
+  SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#include "MaxSocket.h"
+
+  //
+  // External declarations
+  // HECI-1/HECI-2 are in 10nmServerPlatformPkg\Me\Sps\Acpi\SpsNm.asl
+  //
+  External(\_SB.PC00.HEC2.HPTS, MethodObj)
+  External(\_SB.PC00.HEC2.HWAK, MethodObj)
+
+  External(\_SB.OSPC, MethodObj)
+  //
+  // System Sleep States
+  //
+  Name (\_S0,Package (){0,0,0,0})
+  Name (\_S3,Package (){5,0,0,0})   // Name changed to \DS3 if disabled in Setup
+  Name (\_S4,Package (){6,0,0,0})   // Name changed to \DS4 if disabled in Setup
+  Name (\_S5,Package (){7,0,0,0})
+
+  //
+  // Native OS hot plug support, 0->ACPI, 1->OS
+  //
+  Name (\OSHF, 0)
+
+  Name (\HWPS, 0)   // CPC capability from platform _OSC
+
+  //
+  // OS flag
+  //
+  #include "Os.asi"
+
+  //
+  // for determing PIC mode
+  //
+  Name (\PICM,Zero)
+  Method (\_PIC, 1, NotSerialized) {
+    Store(Arg0,\PICM)
+  }
+
+  OperationRegion (DBG0, SystemIO, 0x80, 2)
+  Field (DBG0, ByteAcc,NoLock,Preserve) {
+    IO80, 8,
+    IO81, 8
+  }
+
+  //
+  // Access CMOS range
+  //
+  OperationRegion (ACMS, SystemIO, 0x72, 2)
+  Field ( ACMS, ByteAcc, NoLock, Preserve) {
+    INDX, 8,
+    DATA, 8
+  }
+
+
+  //
+  // BIOS parameter BIOS_ACPI_PARAM
+  //
+  #include "BiosParameterRegion.asi"
+
+  //
+  // SWGPE_CTRL
+  //
+  OperationRegion (GPCT, SystemIO, Add (PMBA, 0x42), 1)
+  Field (GPCT, ByteAcc, NoLock, Preserve) {
+          ,   1,
+    SGPC  ,   1,
+  }
+
+  //
+  // GPE0 Enable
+  //
+  OperationRegion (GPE0, SystemIO, Add (PMBA, 0x9C), 4)
+  Field (GPE0, ByteAcc,NoLock,Preserve) {
+    ,1,
+    GPEH,1,
+    ,7,
+    PCIE,1,
+    ,1,
+    PMEE,1,
+    ,1,
+    PMB0,1,
+    ,18,
+  }
+
+  //
+  // GPE0 Status
+  //
+  OperationRegion (GPES, SystemIO, Add (PMBA, 0x8C), 4)
+  Field (GPES, ByteAcc,NoLock,Preserve) {
+    ,1,
+    GPSH,1,
+    SGPS,1,
+    ,6,
+    PEES,1,
+    ,1,
+    PMES,1,
+    ,1,
+    PMEB,1,
+    ,18,
+  }
+
+  //
+  // System sleep down
+  //
+  Method (_PTS, 1, NotSerialized)
+  {
+    Store (0x72, IO80)  // Sync with EfiPostCode.h
+
+    //
+    // Clear wake event status.
+    //
+    Store(1,PMES)
+    Store(1,PMEB)
+
+    //
+    // Enable SCI and wake event sources.
+    //
+    Store(1,GPEH)
+    Store(1,PCIE)
+    Store(1,PMEE)
+    Store(1,PMB0)
+
+    //
+    // If HECI-2 exist call its prepare-to-sleep handler.
+    // The handler checks whether HECI-2 is enabled.
+    //
+    If (CondRefOf(\_SB.PC00.HEC2.HPTS))
+    {
+      \_SB.PC00.HEC2.HPTS()
+    }
+
+    /// WA for S3 on XHCI
+    \_SB.PC00.XHCI.XHCS()
+  }
+
+
+  //
+  // System Wake up
+  //
+  Method (_WAK, 1, Serialized)
+  {
+    Store (0x73, IO80)  // Sync with EfiPostCode.h
+
+    //
+    // If HECI-2 exist call its wake-up handler.
+    // The handler checks whether HECI-2 is enabled.
+    //
+    If (CondRefOf(\_SB.PC00.HEC2.HWAK))
+    {
+      \_SB.PC00.HEC2.HWAK()
+    }
+
+    //
+    // If waking from S3
+    //
+    If (LEqual(Arg0, 3)) {
+    }
+
+    Return(Package(){0, 0})
+  }
+
+  Scope(\_SB) {
+
+    // Information on CPU and Memory for hotplug SKUs
+    #include "CpuMemHp.asi"
+
+    OperationRegion (IOB2, SystemIO, 0xB2, 2)  //MKF_SMIPORT
+    Field (IOB2, ByteAcc, NoLock, Preserve) {
+      SMIC, 8,                               // SW-SMI ctrl port
+      SMIS, 8,                               // SW-SMI status port
+    }
+
+    Method(_OSC , 4) {
+      Store(Arg3,Local0)
+      CreateDWordField(Local0,4,CPBF)
+      If(LEqual(Arg0, ToUUID("0811B06E-4A27-44F9-8D60-3CBBC22E7B48"))) {
+        //Save Platform OSC HWPM capabilities
+        If(LEqual(And(CPBF, 0x00000040), 0x00000040)) {
+          Store(1,HWPS)
+        }
+      }
+      If (CondRefOf (\_SB.OSPC)) {
+        Return (\_SB.OSPC(Arg0, Arg1, Arg2, Arg3))
+      }
+      Return (Local0)
+    }
+    //
+    // SGX
+    //
+    #include "Sgx.asi"
+    //
+    // Common Hot Plug for PCxx devices
+    //
+    #include "IioRootBridgeIcx.asi"
+  }   // end _SB scope
+
+
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/CpuMemHp.asi b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/CpuMemHp.asi
new file mode 100644
index 0000000000..a0824a30c0
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/CpuMemHp.asi
@@ -0,0 +1,730 @@
+/** @file
+
+  @copyright
+  Copyright 2001 - 2019 Intel Corporation. <BR>
+
+  SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#include "MaxSocket.h"
+
+#define HECI_CMD_CPUHOTPLUG    1
+#define HECI_CMD_CPUHOTREMOVE  2
+
+#define  SIZE_LAPIC_STRUC   8
+#define  LAPIC_TYPE         0
+
+#define  SIZE_X2LAPIC_STRUC   16
+#define  X2LAPIC_TYPE         9
+
+#define  MAK_STR(x)   #x
+
+//
+// This macro creates method that calculates
+// number of active threads for its socket
+//
+#define CPU_THREADS_NUM(socket)                                             \
+  Method(THNU, 0) {                                                         \
+    Store(0, Local0)                                                        \
+    Store(P##socket##BM, Local1)                                            \
+    While (Local1) {                                                        \
+      Add(Local0, And(Local1, 1), Local0)                                   \
+      ShiftRight(Local1, 1, Local1)                                         \
+    }                                                                       \
+    return (Or(ShiftLeft(socket, 8), Local0))                               \
+  }
+
+//
+//set DevName ProcId field and IO to C##thread
+//
+#define  CPU_THREAD_DEV(socket, thread)                                     \
+  Device(C##thread) {                                                       \
+    Name(_HID, "ACPI0007")                                                  \
+    Method (_UID) {                                                         \
+      Return (\_SB.CUID(0x0##socket, 0x##thread))                           \
+    }                                                                       \
+    Method(_PXM) {                                                          \
+      if (LEqual (CLOD, 0)) {                                               \
+        Return(0x0##socket)                                                 \
+      } else {                                                              \
+        Store(DerefOf(Index(\_SB.APT##socket, 0x##thread)), Local0)         \
+        Store(CNBS, Local1)                                                 \
+        Subtract(Local1, 1, Local1)                                         \
+        ShiftRight(Local0, Local1, Local0)                                  \
+        And(Local0, 1, Local0)                                              \
+        Store(0x##socket, Local1)                                           \
+        Multiply(Local1, 2, Local1)                                         \
+        if(LEqual(Local0, 1)) {                                             \
+          Add(Local1, 1, Local1)                                            \
+        }                                                                   \
+        Return(Local1)                                                      \
+      }                                                                     \
+    }                                                                       \
+    Method(_STA) {                                                          \
+      if(LEqual(\_SB.CSTA(0x0##socket, 0x##thread), 0x00)) {                \
+        Return(0x00)                                                        \
+      } else {                                                              \
+        If (LGreaterEqual (\_SB.OSYS, 12)) {                                \
+          Return(0x0F)                                                      \
+        } Else {                                                            \
+          Return(0x0B)                                                      \
+        }                                                                   \
+      }                                                                     \
+    }                                                                       \
+    Method(_MAT) {                                                          \
+      if(SKOV) {                                                            \
+        Return(\_SB.X2AP(0x0##socket, 0x##thread))                          \
+      } else {                                                              \
+      Return(\_SB.LAPC(0x0##socket, 0x##thread))                            \
+      }                                                                     \
+    }                                                                       \
+  }
+
+#define  CPU_SOCKET_DEV(socket)                                             \
+  Device(\_SB.SCK##socket) {                                                \
+    Name (_HID, "ACPI0004")                                                 \
+    Name (_UID, MAK_STR(CPUSCK##socket))                                    \
+    Name (LSTA, 0xff)                                                       \
+    Method(_STA) {                                                          \
+      Store(MAK_STR(CPUSCK##socket), CUU##socket)                           \
+      Store(\_SB.PSTA(0x0##socket), Local0)                                 \
+      And(Local0, 0x03, Local1)                                             \
+      If (LAnd(LNotEqual(LSTA, 0xff), LNotEqual(Local1, LSTA))) {           \
+        If (LEqual(Local1, 0x03)) {                                         \
+          /*\_SB.PC00.HEC2.HPNF(HECI_CMD_CPUHOTPLUG, socket, THNU) TODO: Obsolete with _PUR?*/\
+        } Else {                                                            \
+          /*\_SB.PC00.HEC2.HPNF(HECI_CMD_CPUHOTREMOVE, socket, THNU) TODO: Obsolete with _PUR?*/\
+        }                                                                   \
+      }                                                                     \
+      Store(Local1, LSTA)                                                   \
+      return(Local0)                                                        \
+    }                                                                       \
+                                                                            \
+    CPU_THREADS_NUM(socket)        \
+    CPU_THREAD_DEV (socket, 000)   \
+    CPU_THREAD_DEV (socket, 001)   \
+    CPU_THREAD_DEV (socket, 002)   \
+    CPU_THREAD_DEV (socket, 003)   \
+    CPU_THREAD_DEV (socket, 004)   \
+    CPU_THREAD_DEV (socket, 005)   \
+    CPU_THREAD_DEV (socket, 006)   \
+    CPU_THREAD_DEV (socket, 007)   \
+    CPU_THREAD_DEV (socket, 008)   \
+    CPU_THREAD_DEV (socket, 009)   \
+    CPU_THREAD_DEV (socket, 00A)   \
+    CPU_THREAD_DEV (socket, 00B)   \
+    CPU_THREAD_DEV (socket, 00C)   \
+    CPU_THREAD_DEV (socket, 00D)   \
+    CPU_THREAD_DEV (socket, 00E)   \
+    CPU_THREAD_DEV (socket, 00F)   \
+    CPU_THREAD_DEV (socket, 010)   \
+    CPU_THREAD_DEV (socket, 011)   \
+    CPU_THREAD_DEV (socket, 012)   \
+    CPU_THREAD_DEV (socket, 013)   \
+    CPU_THREAD_DEV (socket, 014)   \
+    CPU_THREAD_DEV (socket, 015)   \
+    CPU_THREAD_DEV (socket, 016)   \
+    CPU_THREAD_DEV (socket, 017)   \
+    CPU_THREAD_DEV (socket, 018)   \
+    CPU_THREAD_DEV (socket, 019)   \
+    CPU_THREAD_DEV (socket, 01A)   \
+    CPU_THREAD_DEV (socket, 01B)   \
+    CPU_THREAD_DEV (socket, 01C)   \
+    CPU_THREAD_DEV (socket, 01D)   \
+    CPU_THREAD_DEV (socket, 01E)   \
+    CPU_THREAD_DEV (socket, 01F)   \
+    CPU_THREAD_DEV (socket, 020)   \
+    CPU_THREAD_DEV (socket, 021)   \
+    CPU_THREAD_DEV (socket, 022)   \
+    CPU_THREAD_DEV (socket, 023)   \
+    CPU_THREAD_DEV (socket, 024)   \
+    CPU_THREAD_DEV (socket, 025)   \
+    CPU_THREAD_DEV (socket, 026)   \
+    CPU_THREAD_DEV (socket, 027)   \
+    CPU_THREAD_DEV (socket, 028)   \
+    CPU_THREAD_DEV (socket, 029)   \
+    CPU_THREAD_DEV (socket, 02A)   \
+    CPU_THREAD_DEV (socket, 02B)   \
+    CPU_THREAD_DEV (socket, 02C)   \
+    CPU_THREAD_DEV (socket, 02D)   \
+    CPU_THREAD_DEV (socket, 02E)   \
+    CPU_THREAD_DEV (socket, 02F)   \
+    CPU_THREAD_DEV (socket, 030)   \
+    CPU_THREAD_DEV (socket, 031)   \
+    CPU_THREAD_DEV (socket, 032)   \
+    CPU_THREAD_DEV (socket, 033)   \
+    CPU_THREAD_DEV (socket, 034)   \
+    CPU_THREAD_DEV (socket, 035)   \
+    CPU_THREAD_DEV (socket, 036)   \
+    CPU_THREAD_DEV (socket, 037)   \
+    CPU_THREAD_DEV (socket, 038)   \
+    CPU_THREAD_DEV (socket, 039)   \
+    CPU_THREAD_DEV (socket, 03A)   \
+    CPU_THREAD_DEV (socket, 03B)   \
+    CPU_THREAD_DEV (socket, 03C)   \
+    CPU_THREAD_DEV (socket, 03D)   \
+    CPU_THREAD_DEV (socket, 03E)   \
+    CPU_THREAD_DEV (socket, 03F)   \
+    CPU_THREAD_DEV (socket, 040)   \
+    CPU_THREAD_DEV (socket, 041)   \
+    CPU_THREAD_DEV (socket, 042)   \
+    CPU_THREAD_DEV (socket, 043)   \
+    CPU_THREAD_DEV (socket, 044)   \
+    CPU_THREAD_DEV (socket, 045)   \
+    CPU_THREAD_DEV (socket, 046)   \
+    CPU_THREAD_DEV (socket, 047)   \
+    CPU_THREAD_DEV (socket, 048)   \
+    CPU_THREAD_DEV (socket, 049)   \
+    CPU_THREAD_DEV (socket, 04A)   \
+    CPU_THREAD_DEV (socket, 04B)   \
+    CPU_THREAD_DEV (socket, 04C)   \
+    CPU_THREAD_DEV (socket, 04D)   \
+    CPU_THREAD_DEV (socket, 04E)   \
+    CPU_THREAD_DEV (socket, 04F)   \
+    CPU_THREAD_DEV (socket, 050)   \
+    CPU_THREAD_DEV (socket, 051)   \
+    CPU_THREAD_DEV (socket, 052)   \
+    CPU_THREAD_DEV (socket, 053)   \
+    CPU_THREAD_DEV (socket, 054)   \
+    CPU_THREAD_DEV (socket, 055)   \
+    CPU_THREAD_DEV (socket, 056)   \
+    CPU_THREAD_DEV (socket, 057)   \
+    CPU_THREAD_DEV (socket, 058)   \
+    CPU_THREAD_DEV (socket, 059)   \
+    CPU_THREAD_DEV (socket, 05A)   \
+    CPU_THREAD_DEV (socket, 05B)   \
+    CPU_THREAD_DEV (socket, 05C)   \
+    CPU_THREAD_DEV (socket, 05D)   \
+    CPU_THREAD_DEV (socket, 05E)   \
+    CPU_THREAD_DEV (socket, 05F)   \
+    CPU_THREAD_DEV (socket, 060)   \
+    CPU_THREAD_DEV (socket, 061)   \
+    CPU_THREAD_DEV (socket, 062)   \
+    CPU_THREAD_DEV (socket, 063)   \
+    CPU_THREAD_DEV (socket, 064)   \
+    CPU_THREAD_DEV (socket, 065)   \
+    CPU_THREAD_DEV (socket, 066)   \
+    CPU_THREAD_DEV (socket, 067)   \
+    CPU_THREAD_DEV (socket, 068)   \
+    CPU_THREAD_DEV (socket, 069)   \
+    CPU_THREAD_DEV (socket, 06A)   \
+    CPU_THREAD_DEV (socket, 06B)   \
+    CPU_THREAD_DEV (socket, 06C)   \
+    CPU_THREAD_DEV (socket, 06D)   \
+    CPU_THREAD_DEV (socket, 06E)   \
+    CPU_THREAD_DEV (socket, 06F)   \
+    CPU_THREAD_DEV (socket, 070)   \
+    CPU_THREAD_DEV (socket, 071)   \
+    CPU_THREAD_DEV (socket, 072)   \
+    CPU_THREAD_DEV (socket, 073)   \
+    CPU_THREAD_DEV (socket, 074)   \
+    CPU_THREAD_DEV (socket, 075)   \
+    CPU_THREAD_DEV (socket, 076)   \
+    CPU_THREAD_DEV (socket, 077)   \
+    CPU_THREAD_DEV (socket, 078)   \
+    CPU_THREAD_DEV (socket, 079)   \
+    CPU_THREAD_DEV (socket, 07A)   \
+    CPU_THREAD_DEV (socket, 07B)   \
+    CPU_THREAD_DEV (socket, 07C)   \
+    CPU_THREAD_DEV (socket, 07D)   \
+    CPU_THREAD_DEV (socket, 07E)   \
+    CPU_THREAD_DEV (socket, 07F)   \
+  }
+
+  Scope(\_SB) {
+
+    //----------------------------------------------------------------
+    //  Method PSTA()
+    //      Return package state
+    //
+    //  Inputs: Arg0 = socket number for which to return the _STA code.
+    //----------------------------------------------------------------
+    Method(PSTA, 1){        // Socket Status
+      ShiftRight(PRBM, Arg0, Local6)
+      And(Local6, 0x1, Local6)
+      if(LEqual(Local6, 0x0)) {
+        Return(0x00)
+      } else {
+        Return(0x0F)
+      }
+    } // End Method PSTA
+
+    //----------------------------------------------------------------
+    // APIC ID Map
+    // Extened APIC ID buffer to support MAX 64 core
+    //----------------------------------------------------------------
+    Name (APT0, Buffer (128) {
+          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+
+          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
+    })
+
+    Name (APT1, Buffer (128) {
+          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+
+          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
+    })
+
+    Name (APT2, Buffer (128) {
+          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+
+          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
+    })
+
+    Name (APT3, Buffer (128) {
+          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+
+          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
+    })
+
+    Name (APT4, Buffer (128) {
+          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+
+          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
+    })
+
+    Name (APT5, Buffer (128) {
+          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+
+          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
+    })
+
+    Name (APT6, Buffer (128) {
+          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+
+          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
+    })
+
+    Name (APT7, Buffer (128) {
+          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+
+          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
+    })
+
+    //----------------------------------------------------------------
+    //  Method TPID()
+    //      Convert the socket and thread index to the actual APIC ID
+    //
+    //  Inputs: Arg0 = socket index
+    //          Arg1 = thread index
+    //----------------------------------------------------------------
+    Method (TPID, 2, NotSerialized) {
+      Store (0x00, Local0)
+      If (LEqual (Arg0, 0x00))
+      {
+        Store (P0ID, Local0)
+        Add (Local0, DerefOf(Index(APT0, Arg1)), Local0)
+      }
+
+      If (LEqual (Arg0, 0x01))
+      {
+        Store (P1ID, Local0)
+        Add (Local0, DerefOf(Index(APT1, Arg1)), Local0)
+      }
+
+      If (LEqual (Arg0, 0x02))
+      {
+        Store (P2ID, Local0)
+        Add (Local0, DerefOf(Index(APT2, Arg1)), Local0)
+      }
+
+      If (LEqual (Arg0, 0x03))
+      {
+        Store (P3ID, Local0)
+        Add (Local0, DerefOf(Index(APT3, Arg1)), Local0)
+      }
+
+      If (LEqual (Arg0, 0x04))
+      {
+        Store (P4ID, Local0)
+        Add (Local0, DerefOf(Index(APT4, Arg1)), Local0)
+      }
+
+      If (LEqual (Arg0, 0x05))
+      {
+        Store (P5ID, Local0)
+        Add (Local0, DerefOf(Index(APT5, Arg1)), Local0)
+      }
+
+      If (LEqual (Arg0, 0x06))
+      {
+        Store (P6ID, Local0)
+        Add (Local0, DerefOf(Index(APT6, Arg1)), Local0)
+      }
+
+      If (LEqual (Arg0, 0x07))
+      {
+        Store (P7ID, Local0)
+        Add (Local0, DerefOf(Index(APT7, Arg1)), Local0)
+      }
+
+      Return (Local0)
+    }
+
+    //----------------------------------------------------------------
+    //  Method CSTA()
+    //      Get current processor state
+    //  Inputs: Arg0 = Socket Number where core belongs
+    //          Arg1 = Thread number for which to return the _STA code
+    //                 (Bit0 - Core Id, BIT1- Thread Id)
+    //----------------------------------------------------------------
+    Method(CSTA, 2){        // Core Status
+      Store(0, Local0)
+      Store(0, Local2)    //for Core#
+
+      //Get ApicId per thread Index from APT#
+      if (LEqual(Arg0, 0x0)) {
+        if(LEqual(P0BM, 0x0)) {
+          Return(0x00)
+        }
+
+        Add (Local2, DerefOf(Index(APT0, Arg1)), Local2)
+        if (LEqual(Local2, 0xFF)) {
+          Return(0x00)
+        }
+        //Processor Bit mask is changed for core# only
+        ShiftRight(Local2, 1, Local2)
+        ShiftRight(P0BM, Local2, Local0)
+      }
+      if (LEqual(Arg0, 0x1)) {
+        if(LEqual(P1BM, 0x0)) {
+          Return(0x00)
+        }
+
+        Add (Local2, DerefOf(Index(APT1, Arg1)), Local2)
+        if (LEqual(Local2, 0xFF)) {
+          Return(0x00)
+        }
+        //Processor Bit mask is changed for core# only
+        ShiftRight(Local2, 1, Local2)
+        ShiftRight(P1BM, Local2, Local0)
+      }
+      if (LEqual(Arg0, 0x2)) {
+        if(LEqual(P2BM, 0x0)) {
+          Return(0x00)
+        }
+
+        Add (Local2, DerefOf(Index(APT2, Arg1)), Local2)
+        if (LEqual(Local2, 0xFF)) {
+          Return(0x00)
+        }
+        //Processor Bit mask is changed for core# only
+        ShiftRight(Local2, 1, Local2)
+        ShiftRight(P2BM, Local2, Local0)
+      }
+      if (LEqual(Arg0, 0x3)) {
+        if(LEqual(P3BM, 0x0)) {
+          Return(0x00)
+        }
+
+        Add (Local2, DerefOf(Index(APT3, Arg1)), Local2)
+        if (LEqual(Local2, 0xFF)) {
+          Return(0x00)
+        }
+        //Processor Bit mask is changed for core# only
+        ShiftRight(Local2, 1, Local2)
+        ShiftRight(P3BM, Local2, Local0)
+      }
+      if (LEqual(Arg0, 0x4)) {
+        if(LEqual(P4BM, 0x0)) {
+          Return(0x00)
+        }
+
+        Add (Local2, DerefOf(Index(APT4, Arg1)), Local2)
+        if (LEqual(Local2, 0xFF)) {
+          Return(0x00)
+        }
+        //Processor Bit mask is changed for core# only
+        ShiftRight(Local2, 1, Local2)
+        ShiftRight(P4BM, Local2, Local0)
+      }
+      if (LEqual(Arg0, 0x5)) {
+        if(LEqual(P5BM, 0x0)) {
+          Return(0x00)
+        }
+
+        Add (Local2, DerefOf(Index(APT5, Arg1)), Local2)
+        if (LEqual(Local2, 0xFF)) {
+          Return(0x00)
+        }
+        //Processor Bit mask is changed for core# only
+        ShiftRight(Local2, 1, Local2)
+        ShiftRight(P5BM, Local2, Local0)
+      }
+      if (LEqual(Arg0, 0x6)) {
+        if(LEqual(P6BM, 0x0)) {
+          Return(0x00)
+        }
+
+        Add (Local2, DerefOf(Index(APT6, Arg1)), Local2)
+        if (LEqual(Local2, 0xFF)) {
+          Return(0x00)
+        }
+        //Processor Bit mask is changed for core# only
+        ShiftRight(Local2, 1, Local2)
+        ShiftRight(P6BM, Local2, Local0)
+      }
+      if (LEqual(Arg0, 0x7)) {
+        if(LEqual(P7BM, 0x0)) {
+          Return(0x00)
+        }
+
+        Add (Local2, DerefOf(Index(APT7, Arg1)), Local2)
+        if (LEqual(Local2, 0xFF)) {
+          Return(0x00)
+        }
+        //Processor Bit mask is changed for core# only
+        ShiftRight(Local2, 1, Local2)
+        ShiftRight(P7BM, Local2, Local0)
+      }
+
+      And(Local0, 0x1, Local0)
+      if(LEqual(Local0, 0x0)) {
+        Return(0x00)
+      } else {
+        Return(0x01)
+      }
+    } // End Method CSTA
+
+    //----------------------------------------------------------------
+    //  Method CUID()
+    //    Return MADT ACPI Processor UID, AcpiProcessorId and _UID
+    //    Should match with AcpiProcessorId in C code
+    //
+    //  Inputs: Arg0 = Socket ID
+    //  Inputs: Arg1 = Thread ID
+    //  Return  _UID
+    //----------------------------------------------------------------+
+    Method (CUID, 2) {
+      Store(ShiftLeft(1, CNBS), Local1)
+      Multiply(Arg0, local1, local1)
+      Add(local1, Arg1, local1)
+
+      Return (Local1)
+    }
+
+    //----------------------------------------------------------------
+    //  Method LAPC()
+    //    Return the _MAT APIC data structure
+    //
+    //  Inputs: Arg0 = Socket ID
+    //  Inputs: Arg1 = Thread ID
+    //          APID = TPID(Arg0, Arg1)
+    //          PUID = Socket ID << CNBS + Thread ID
+    //----------------------------------------------------------------+
+    Method(LAPC, 2,Serialized) {
+
+      Name(APIC, Buffer(SIZE_LAPIC_STRUC) {} ) // initialize a buffer with CRST size
+
+      CreateByteField (APIC, 0x00,  TYPE) // Type
+      CreateByteField (APIC, 0x01,  LLEN) // Length
+      CreateByteField (APIC, 0x02,  PUID) // ACPI Processor ID
+      CreateByteField (APIC, 0x03,  APID) // APIC ID
+      CreateDwordField(APIC, 0x04,  FLAG) // Flags
+
+      Store(LAPIC_TYPE, TYPE)
+      Store(SIZE_LAPIC_STRUC, LLEN)
+
+      // Update APIC ID
+      Store (\_SB.TPID(Arg0, Arg1), APID)
+
+      // Update Flag
+      if(LEqual(\_SB.CSTA(Arg0, Arg1), 0x00)) {
+        Store(0x00, FLAG)
+        Store(0xFF, PUID)
+        Store(0xFF, APID)
+      } else {
+        Store(ShiftLeft(1, CNBS), Local1)
+        Multiply(Arg0, local1, local1)
+        Add(local1, Arg1, local1)
+        Store(local1, PUID)
+
+        //set Enable flag
+        Store(0x01, FLAG)
+      }
+
+      // calculate PROCID based on APICID using same algorithm in AcpiPlatformHook.c
+
+      Return(APIC)
+    }
+
+    Method(X2AP, 2,Serialized) {
+
+      Name(APIC, Buffer(SIZE_X2LAPIC_STRUC) {} ) // initialize a buffer with CRST siz
+
+      CreateByteField (APIC, 0x00,  TYPE) // Type
+      CreateByteField (APIC, 0x01,  LLEN) // Length
+      CreateWordField (APIC, 0x02,  RSVD) // Reserved 2 bytes
+      CreateDwordField(APIC, 0x04,  APID) // APIC ID
+      CreateDwordField(APIC, 0x08,  FLAG) // Flags
+      CreateDwordField(APIC, 0x0C,  PUID) // ACPI Processor UID
+
+      Store(X2LAPIC_TYPE, TYPE)
+      Store(SIZE_X2LAPIC_STRUC, LLEN)
+      Store(0, RSVD)
+
+      // Update APIC ID
+      Store (\_SB.TPID(Arg0, Arg1), APID)
+
+      // Update Flag
+      if(LEqual(\_SB.CSTA(Arg0, Arg1), 0x00)) {
+        Store(0x00, FLAG)
+        Store(0xFFFFFFFF, APID)
+      } else {
+        //ProcId = socket# * MAX_THREADS_PER_SOCKET + thread#
+        Store(ShiftLeft(1, CNBS), Local1)
+        Multiply(Arg0, local1, local1)
+        Add(local1, Arg1, local1)
+        Store(local1, PUID)
+
+        //set Enable flag
+        Store(0x01, FLAG)
+
+      }
+
+      Return(APIC)
+
+    }
+
+    CPU_SOCKET_DEV(0)
+
+#if MAX_SOCKET > 1
+    CPU_SOCKET_DEV(1)
+#endif
+
+#if MAX_SOCKET > 2
+    CPU_SOCKET_DEV(2)
+#endif
+
+#if MAX_SOCKET > 3
+    CPU_SOCKET_DEV(3)
+#endif
+
+#if MAX_SOCKET > 4
+    CPU_SOCKET_DEV(4)
+#endif
+
+#if MAX_SOCKET > 5
+    CPU_SOCKET_DEV(5)
+#endif
+
+#if MAX_SOCKET > 6
+    CPU_SOCKET_DEV(6)
+#endif
+
+#if MAX_SOCKET > 7
+    CPU_SOCKET_DEV(7)
+#endif
+  }
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/DSDT.asl b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/DSDT.asl
new file mode 100644
index 0000000000..b3f96f8ddb
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/DSDT.asl
@@ -0,0 +1,61 @@
+/** @file
+  ACPI DSDT table
+
+  @copyright
+  Copyright 2011 - 2020 Intel Corporation. <BR>
+
+  SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+//
+// @NOTE: This should be read from hardware to reflect
+// real PCI exress base. Currently we do not have such
+// capability so hardcode is used instead.
+//
+#define PCI_EXPRESS_BASE 0x80000000
+
+Scope(\_SB.PC00) {
+
+  //
+  // PCI-specific method's GUID
+  //
+  Name(PCIG, ToUUID("E5C937D0-3553-4d7a-9117-EA4D19C3434D"))
+  //
+  // PCI's _DSM - an attempt at modular _DSM implementation
+  // When writing your own _DSM function that needs to include PCI-specific methods, do this:
+  //
+  // Method(_YOUR_DSM,4){
+  //   if(Lequal(Arg0,PCIG)) { return(PCID(Arg0,Arg1,Arg2,Arg3)) }
+  //   ...continue your _DSM by checking different GUIDs...
+  //   else { return(0) }
+  // }
+  //
+  Method(PCID, 4, Serialized) {
+    If(LEqual(Arg0, PCIG)) {         // PCIE capabilities UUID
+      If(LGreaterEqual(Arg1,3)) {                                              // revision at least 3
+        If(LEqual(Arg2,0)) { Return (Buffer(2){0x01,0x03}) }                   // function 0: list of supported functions
+        If(LEqual(Arg2,8)) { Return (1) }                                      // function 8: Avoiding Power-On Reset Delay Duplication on Sx Resume
+        If(LEqual(Arg2,9)) { Return (Package(5){50000,Ones,Ones,50000,Ones}) } // function 9: Specifying Device Readiness Durations
+      }
+    }
+    return (Buffer(1){0})
+  }
+
+  Method(PCIC,1,Serialized) {
+    If(LEqual(ECR1,1)) {
+      If(LEqual(Arg0, PCIG)) {
+        return (1)
+      }
+    }
+    return (0)
+  }
+
+  //
+  // Get the PCI express base address.
+  // Currently hardcoded.
+  //
+  Method (GPCB) {
+    Return (PCI_EXPRESS_BASE)
+  }
+}
+
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/EPRPPlatform10nm.asl b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/EPRPPlatform10nm.asl
new file mode 100644
index 0000000000..386fbdac59
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/EPRPPlatform10nm.asl
@@ -0,0 +1,19 @@
+/** @file
+
+  @copyright
+  Copyright 2016 - 2020 Intel Corporation. <BR>
+
+  SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+DefinitionBlock ("EPRPPlatform10nm.asl","DSDT",2,"INTEL","EPRP10NM",3)
+{
+  #include "CommonPlatform10nm.asi"
+  #include "PlatformPciTree10nm_EPRP.asi"
+  #include "AMLUPD.asl"
+  #include "DSDT.asl"
+  #include "Pch.asl"       //This is in another package (PchPkg)
+  #include "Platform.asl"
+  #include "PlatformGpe10nm.asi"
+  #include "IioPcieEdpcNotify10nm.asi"
+} // end of DSDT
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/FpgaBus00.asi b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/FpgaBus00.asi
new file mode 100644
index 0000000000..235e60650c
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/FpgaBus00.asi
@@ -0,0 +1,158 @@
+/** @file
+
+  @copyright
+  Copyright 2001 - 2016 Intel Corporation. <BR>
+
+  SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+  Name (SUPP, 0)
+  Name (CTRL, 0)
+
+  Method(_OSC,4) {
+    //
+    // Create DWord-addressable fields from the capabilities Buffer
+    //
+    CreateDWordField(Arg3,0,CDW1)
+    CreateDWordField(Arg3,4,CDW2)
+    If(LGreater(Arg2,2)) {
+      CreateDWordField(Arg3,8,CDW3)
+    }
+
+
+      If (LEqual(Arg0,ToUUID("33DB4D5B-1FF7-401C-9657-7441C03DD766"))) {
+        //
+        // Save Capabilities DWord2 & 3
+        //
+        Store(CDW2,SUPP)
+        Store(CDW3,CTRL)
+
+        //
+        // Only allow native hot plug control if OS supports
+        // * ASPM
+        // * MSI/MSI-X
+        //
+        If (LOr(AHPE, LNotEqual(And(SUPP, 0x16), 0x16))) { // Conditions not met?
+          And(CTRL, 0x1E, CTRL) // Mask bit 0 to deny.
+          Sleep(1000)
+        }
+
+        //
+        // Never allow SHPC (no SHPC controller in system)
+        //
+        And(CTRL, 0x1D, CTRL)
+        //And (CTRL, 0x1C, CTRL)
+
+          If (LNotEqual(Arg1,one)) { // unknown revision
+            Or(CDW1,0x08,CDW1)
+          }
+
+          If(LNotEqual(CDW3,CTRL)) { // capabilities bits were masked
+            Or(CDW1,0x10,CDW1)
+          }
+          //
+          // update DWORD3 in the buffer
+          //
+          Store(CTRL,CDW3)
+          Return(Arg3)
+
+      } Else {
+        //
+        // Just indicate unrecognized UUID
+        // Leave it at that
+        //
+        Or (CDW1,4,CDW1)
+        Store (0xEE, IO80)
+        Return(Arg3)
+      }
+  }
+
+  Method(_STA){
+    // Check if Virtual FPGA is present
+    if(LEqual(P0FB, 0x1)) {
+      // Virtual FPGA present and logically online
+      Return(0x0F)
+    }
+    // Virtual FPGA logically offline
+    Return(0x00)
+
+  } // End Method STA
+
+  Name (RBUF, ResourceTemplate () {
+      WORDBusNumber(          // Bus number resource (0); the bridge produces bus numbers for its subsequent buses
+      ResourceProducer,       // bit 0 of general flags is 1
+      MinFixed,               // Range is fixed
+      MaxFixed,               // Range is fixed
+      PosDecode,              // PosDecode
+      0x0000,                 // Granularity
+      0x0000,                 // Min
+      0x0000,                 // Max
+      0x0000,                 // Translation
+      0x0001,                 // Range Length = Max-Min+1
+      ,
+      ,
+      FBUS
+    )
+
+    DWORDMemory(              // Consumed-and-produced resource(all of memory space)
+      ResourceProducer,       // bit 0 of general flags is 0
+      PosDecode,              // positive Decode
+      MinFixed,               // Range is fixed
+      MaxFixed,               // Range is fixed
+      NonCacheable,
+      ReadWrite,
+      0x00000000,             // Granularity (FIX7 - Patched by ACPI Platform Driver during POST)
+      0x00000000,             // Min (calculated dynamically) (FIX7 - Patched by ACPI Platform Driver during POST)
+      0x00000000,             // Max = 4GB - 1MB  (fwh + fwh alias) (FIX7 - Patched by ACPI Platform Driver during POST)
+      0x00000000,             // Translation
+      0x00000000,             // Range Length (calculated dynamically) (FIX7 - Patched by ACPI Platform Driver during POST)
+                ,
+                ,
+      FPGM                    // DescriptorName populated so iASL outputs offset for it in a .h file
+    )
+
+    DWORDMemory(              // Consumed-and-produced resource(all of memory space)
+      ResourceProducer,       // bit 0 of general flags is 0
+      PosDecode,              // positive Decode
+      MinFixed,               // Range is fixed
+      MaxFixed,               // Range is fixed
+      NonCacheable,
+      ReadWrite,
+      0x00000000,             // Granularity (FIXZ - Patched by ACPI Platform Driver during POST)
+      0x00000000,             // Min (calculated dynamically) (FIXZ - Patched by ACPI Platform Driver during POST)
+      0x00000000,             // Max = 4GB - 1MB  (fwh + fwh alias) (FIXZ - Patched by ACPI Platform Driver during POST)
+      0x00000000,             // Translation
+      0x00000000,             // Range Length (calculated dynamically) (FIXZ - Patched by ACPI Platform Driver during POST)
+                ,
+                ,
+      FIXZ                    // DescriptorName populated so iASL outputs offset for it in a .h file
+    )
+
+  })
+
+  Method(_CRS, 0x0, NotSerialized) {
+    ///
+    /// Patch 32b memory
+    ///
+    CreateDwordField(^RBUF, ^FPGM._MIN, FMN1)
+    CreateDwordField(^RBUF, ^FPGM._MAX, FMX1)
+    CreateDwordField(^RBUF, ^FPGM._LEN, FLN1)
+    Store(FMB0, FMN1)
+    Store(FML0, FMX1)
+    Subtract (FMX1, FMN1, FLN1)
+    Add (FLN1, 1, FLN1)
+
+    ///
+    /// Patch _BBN
+    ///
+    If(LGreater(FBL0, FBB0)) {
+      CreateWordField(^RBUF, ^FBUS._MIN, BMIN)
+      CreateWordField(^RBUF, ^FBUS._MAX, BMAX)
+      CreateWordField(^RBUF, ^FBUS._LEN, BLEN)
+      Store(FBB0, BMIN)
+      Store(FBL0, BMAX)
+      Subtract (BMAX, BMIN, BLEN)
+      Add (BLEN, 1, BLEN)
+    }
+    Return (RBUF)
+  }
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/FpgaBus01.asi b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/FpgaBus01.asi
new file mode 100644
index 0000000000..cecf469c9d
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/FpgaBus01.asi
@@ -0,0 +1,158 @@
+/** @file
+
+  @copyright
+  Copyright 2001 - 2016 Intel Corporation. <BR>
+
+  SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+  Name (SUPP, 0)
+  Name (CTRL, 0)
+
+  Method(_OSC,4) {
+    //
+    // Create DWord-addressable fields from the capabilities Buffer
+    //
+    CreateDWordField(Arg3,0,CDW1)
+    CreateDWordField(Arg3,4,CDW2)
+    If(LGreater(Arg2,2)) {
+      CreateDWordField(Arg3,8,CDW3)
+    }
+
+
+      If (LEqual(Arg0,ToUUID("33DB4D5B-1FF7-401C-9657-7441C03DD766"))) {
+        //
+        // Save Capabilities DWord2 & 3
+        //
+        Store(CDW2,SUPP)
+        Store(CDW3,CTRL)
+
+        //
+        // Only allow native hot plug control if OS supports
+        // * ASPM
+        // * MSI/MSI-X
+        //
+        If (LOr(AHPE, LNotEqual(And(SUPP, 0x16), 0x16))) { // Conditions not met?
+          And(CTRL, 0x1E, CTRL) // Mask bit 0 to deny.
+          Sleep(1000)
+        }
+
+        //
+        // Never allow SHPC (no SHPC controller in system)
+        //
+        And(CTRL, 0x1D, CTRL)
+        //And (CTRL, 0x1C, CTRL)
+
+          If (LNotEqual(Arg1,one)) { // unknown revision
+            Or(CDW1,0x08,CDW1)
+          }
+
+          If(LNotEqual(CDW3,CTRL)) { // capabilities bits were masked
+            Or(CDW1,0x10,CDW1)
+          }
+          //
+          // update DWORD3 in the buffer
+          //
+          Store(CTRL,CDW3)
+          Return(Arg3)
+
+      } Else {
+        //
+        // Just indicate unrecognized UUID
+        // Leave it at that
+        //
+        Or (CDW1,4,CDW1)
+        Store (0xEE, IO80)
+        Return(Arg3)
+      }
+  }
+
+  Method(_STA){
+    // Check if Virtual FPGA is present
+    if(LEqual(P1FB, 0x1)) {
+      // Virtual FPGA present and logically online
+      Return(0x0F)
+    }
+    // Virtual FPGA logically offline
+    Return(0x00)
+
+  } // End Method STA
+
+  Name (RBUF, ResourceTemplate () {
+      WORDBusNumber(          // Bus number resource (0); the bridge produces bus numbers for its subsequent buses
+      ResourceProducer,       // bit 0 of general flags is 1
+      MinFixed,               // Range is fixed
+      MaxFixed,               // Range is fixed
+      PosDecode,              // PosDecode
+      0x0000,                 // Granularity
+      0x0000,                 // Min
+      0x0000,                 // Max
+      0x0000,                 // Translation
+      0x0001,                 // Range Length = Max-Min+1
+      ,
+      ,
+      FBUS
+    )
+
+    DWORDMemory(              // Consumed-and-produced resource(all of memory space)
+      ResourceProducer,       // bit 0 of general flags is 0
+      PosDecode,              // positive Decode
+      MinFixed,               // Range is fixed
+      MaxFixed,               // Range is fixed
+      NonCacheable,
+      ReadWrite,
+      0x00000000,             // Granularity (FIX7 - Patched by ACPI Platform Driver during POST)
+      0x00000000,             // Min (calculated dynamically) (FIX7 - Patched by ACPI Platform Driver during POST)
+      0x00000000,             // Max = 4GB - 1MB  (fwh + fwh alias) (FIX7 - Patched by ACPI Platform Driver during POST)
+      0x00000000,             // Translation
+      0x00000000,             // Range Length (calculated dynamically) (FIX7 - Patched by ACPI Platform Driver during POST)
+                ,
+                ,
+      FPGM                    // DescriptorName populated so iASL outputs offset for it in a .h file
+    )
+
+    DWORDMemory(              // Consumed-and-produced resource(all of memory space)
+      ResourceProducer,       // bit 0 of general flags is 0
+      PosDecode,              // positive Decode
+      MinFixed,               // Range is fixed
+      MaxFixed,               // Range is fixed
+      NonCacheable,
+      ReadWrite,
+      0x00000000,             // Granularity (FIXZ - Patched by ACPI Platform Driver during POST)
+      0x00000000,             // Min (calculated dynamically) (FIXZ - Patched by ACPI Platform Driver during POST)
+      0x00000000,             // Max = 4GB - 1MB  (fwh + fwh alias) (FIXZ - Patched by ACPI Platform Driver during POST)
+      0x00000000,             // Translation
+      0x00000000,             // Range Length (calculated dynamically) (FIXZ - Patched by ACPI Platform Driver during POST)
+                ,
+                ,
+      FIXZ                    // DescriptorName populated so iASL outputs offset for it in a .h file
+
+    )
+  })
+
+  Method(_CRS, 0x0, NotSerialized) {
+    ///
+    /// Patch 32b memory
+    ///
+    CreateDwordField(^RBUF, ^FPGM._MIN, FMN1)
+    CreateDwordField(^RBUF, ^FPGM._MAX, FMX1)
+    CreateDwordField(^RBUF, ^FPGM._LEN, FLN1)
+    Store(FMB1, FMN1)
+    Store(FML1, FMX1)
+    Subtract (FMX1, FMN1, FLN1)
+    Add (FLN1, 1, FLN1)
+
+    ///
+    /// Patch _BBN
+    ///
+    If(LGreater(FBL1, FBB1)) {
+      CreateWordField(^RBUF, ^FBUS._MIN, BMIN)
+      CreateWordField(^RBUF, ^FBUS._MAX, BMAX)
+      CreateWordField(^RBUF, ^FBUS._LEN, BLEN)
+      Store(FBB1, BMIN)
+      Store(FBL1, BMAX)
+      Subtract (BMAX, BMIN, BLEN)
+      Add (BLEN, 1, BLEN)
+    }
+    Return (RBUF)
+  }
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/FpgaBus02.asi b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/FpgaBus02.asi
new file mode 100644
index 0000000000..e4731a63c1
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/FpgaBus02.asi
@@ -0,0 +1,157 @@
+/** @file
+
+  @copyright
+  Copyright 2001 - 2016 Intel Corporation. <BR>
+
+  SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+  Name (SUPP, 0)
+  Name (CTRL, 0)
+
+  Method(_OSC,4) {
+    //
+    // Create DWord-addressable fields from the capabilities Buffer
+    //
+    CreateDWordField(Arg3,0,CDW1)
+    CreateDWordField(Arg3,4,CDW2)
+    If(LGreater(Arg2,2)) {
+      CreateDWordField(Arg3,8,CDW3)
+    }
+
+
+      If (LEqual(Arg0,ToUUID("33DB4D5B-1FF7-401C-9657-7441C03DD766"))) {
+        //
+        // Save Capabilities DWord2 & 3
+        //
+        Store(CDW2,SUPP)
+        Store(CDW3,CTRL)
+
+        //
+        // Only allow native hot plug control if OS supports
+        // * ASPM
+        // * MSI/MSI-X
+        //
+        If (LOr(AHPE, LNotEqual(And(SUPP, 0x16), 0x16))) { // Conditions not met?
+          And(CTRL, 0x1E, CTRL) // Mask bit 0 to deny.
+          Sleep(1000)
+        }
+
+        //
+        // Never allow SHPC (no SHPC controller in system)
+        //
+        And(CTRL, 0x1D, CTRL)
+        //And (CTRL, 0x1C, CTRL)
+
+          If (LNotEqual(Arg1,one)) { // unknown revision
+            Or(CDW1,0x08,CDW1)
+          }
+
+          If(LNotEqual(CDW3,CTRL)) { // capabilities bits were masked
+            Or(CDW1,0x10,CDW1)
+          }
+          //
+          // update DWORD3 in the buffer
+          //
+          Store(CTRL,CDW3)
+          Return(Arg3)
+
+      } Else {
+        //
+        // Just indicate unrecognized UUID
+        // Leave it at that
+        //
+        Or (CDW1,4,CDW1)
+        Store (0xEE, IO80)
+        Return(Arg3)
+      }
+  }
+
+  Method(_STA){
+    // Check if Virtual FPGA is present
+    if(LEqual(P2FB, 0x1)) {
+      // Virtual FPGA present and logically online
+      Return(0x0F)
+    }
+    // Virtual FPGA logically offline
+    Return(0x00)
+
+  } // End Method STA
+
+  Name (RBUF, ResourceTemplate () {
+      WORDBusNumber(          // Bus number resource (0); the bridge produces bus numbers for its subsequent buses
+      ResourceProducer,       // bit 0 of general flags is 1
+      MinFixed,               // Range is fixed
+      MaxFixed,               // Range is fixed
+      PosDecode,              // PosDecode
+      0x0000,                 // Granularity
+      0x0000,                 // Min
+      0x0000,                 // Max
+      0x0000,                 // Translation
+      0x0001,                 // Range Length = Max-Min+1
+      ,
+      ,
+      FBUS
+    )
+
+    DWORDMemory(              // Consumed-and-produced resource(all of memory space)
+      ResourceProducer,       // bit 0 of general flags is 0
+      PosDecode,              // positive Decode
+      MinFixed,               // Range is fixed
+      MaxFixed,               // Range is fixed
+      NonCacheable,
+      ReadWrite,
+      0x00000000,             // Granularity (FIX7 - Patched by ACPI Platform Driver during POST)
+      0x00000000,             // Min (calculated dynamically) (FIX7 - Patched by ACPI Platform Driver during POST)
+      0x00000000,             // Max = 4GB - 1MB  (fwh + fwh alias) (FIX7 - Patched by ACPI Platform Driver during POST)
+      0x00000000,             // Translation
+      0x00000000,             // Range Length (calculated dynamically) (FIX7 - Patched by ACPI Platform Driver during POST)
+                ,
+                ,
+      FPGM                    // DescriptorName populated so iASL outputs offset for it in a .h file
+    )
+
+    DWORDMemory(              // Consumed-and-produced resource(all of memory space)
+      ResourceProducer,       // bit 0 of general flags is 0
+      PosDecode,              // positive Decode
+      MinFixed,               // Range is fixed
+      MaxFixed,               // Range is fixed
+      NonCacheable,
+      ReadWrite,
+      0x00000000,             // Granularity (FIXZ - Patched by ACPI Platform Driver during POST)
+      0x00000000,             // Min (calculated dynamically) (FIXZ - Patched by ACPI Platform Driver during POST)
+      0x00000000,             // Max = 4GB - 1MB  (fwh + fwh alias) (FIXZ - Patched by ACPI Platform Driver during POST)
+      0x00000000,             // Translation
+      0x00000000,             // Range Length (calculated dynamically) (FIXZ - Patched by ACPI Platform Driver during POST)
+                ,
+                ,
+      FIXZ                    // DescriptorName populated so iASL outputs offset for it in a .h file
+    )
+  })
+
+  Method(_CRS, 0x0, NotSerialized) {
+    ///
+    /// Patch 32b memory
+    ///
+    CreateDwordField(^RBUF, ^FPGM._MIN, FMN1)
+    CreateDwordField(^RBUF, ^FPGM._MAX, FMX1)
+    CreateDwordField(^RBUF, ^FPGM._LEN, FLN1)
+    Store(FMB2, FMN1)
+    Store(FML2, FMX1)
+    Subtract (FMX1, FMN1, FLN1)
+    Add (FLN1, 1, FLN1)
+
+    ///
+    /// Patch _BBN
+    ///
+    If(LGreater(FBL2, FBB2)) {
+      CreateWordField(^RBUF, ^FBUS._MIN, BMIN)
+      CreateWordField(^RBUF, ^FBUS._MAX, BMAX)
+      CreateWordField(^RBUF, ^FBUS._LEN, BLEN)
+      Store(FBB2, BMIN)
+      Store(FBL2, BMAX)
+      Subtract (BMAX, BMIN, BLEN)
+      Add (BLEN, 1, BLEN)
+    }
+    Return (RBUF)
+  }
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/FpgaBus03.asi b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/FpgaBus03.asi
new file mode 100644
index 0000000000..51be7989ac
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/FpgaBus03.asi
@@ -0,0 +1,157 @@
+/** @file
+
+  @copyright
+  Copyright 2001 - 2016 Intel Corporation. <BR>
+
+  SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+  Name (SUPP, 0)
+  Name (CTRL, 0)
+
+  Method(_OSC,4) {
+    //
+    // Create DWord-addressable fields from the capabilities Buffer
+    //
+    CreateDWordField(Arg3,0,CDW1)
+    CreateDWordField(Arg3,4,CDW2)
+    If(LGreater(Arg2,2)) {
+      CreateDWordField(Arg3,8,CDW3)
+    }
+
+
+      If (LEqual(Arg0,ToUUID("33DB4D5B-1FF7-401C-9657-7441C03DD766"))) {
+        //
+        // Save Capabilities DWord2 & 3
+        //
+        Store(CDW2,SUPP)
+        Store(CDW3,CTRL)
+
+        //
+        // Only allow native hot plug control if OS supports
+        // * ASPM
+        // * MSI/MSI-X
+        //
+        If (LOr(AHPE, LNotEqual(And(SUPP, 0x16), 0x16))) { // Conditions not met?
+          And(CTRL, 0x1E, CTRL) // Mask bit 0 to deny.
+          Sleep(1000)
+        }
+
+        //
+        // Never allow SHPC (no SHPC controller in system)
+        //
+        And(CTRL, 0x1D, CTRL)
+        //And (CTRL, 0x1C, CTRL)
+
+          If (LNotEqual(Arg1,one)) { // unknown revision
+            Or(CDW1,0x08,CDW1)
+          }
+
+          If(LNotEqual(CDW3,CTRL)) { // capabilities bits were masked
+            Or(CDW1,0x10,CDW1)
+          }
+          //
+          // update DWORD3 in the buffer
+          //
+          Store(CTRL,CDW3)
+          Return(Arg3)
+
+      } Else {
+        //
+        // Just indicate unrecognized UUID
+        // Leave it at that
+        //
+        Or (CDW1,4,CDW1)
+        Store (0xEE, IO80)
+        Return(Arg3)
+      }
+  }
+
+  Method(_STA){
+    // Check if Virtual FPGA is present
+    if(LEqual(P3FB, 0x1)) {
+      // Virtual FPGA present and logically online
+      Return(0x0F)
+    }
+    // Virtual FPGA logically offline
+    Return(0x00)
+
+  } // End Method STA
+
+  Name (RBUF, ResourceTemplate () {
+      WORDBusNumber(          // Bus number resource (0); the bridge produces bus numbers for its subsequent buses
+      ResourceProducer,       // bit 0 of general flags is 1
+      MinFixed,               // Range is fixed
+      MaxFixed,               // Range is fixed
+      PosDecode,              // PosDecode
+      0x0000,                 // Granularity
+      0x0000,                 // Min
+      0x0000,                 // Max
+      0x0000,                 // Translation
+      0x0001,                 // Range Length = Max-Min+1
+      ,
+      ,
+      FBUS
+    )
+
+    DWORDMemory(              // Consumed-and-produced resource(all of memory space)
+      ResourceProducer,       // bit 0 of general flags is 0
+      PosDecode,              // positive Decode
+      MinFixed,               // Range is fixed
+      MaxFixed,               // Range is fixed
+      NonCacheable,
+      ReadWrite,
+      0x00000000,             // Granularity (FIX7 - Patched by ACPI Platform Driver during POST)
+      0x00000000,             // Min (calculated dynamically) (FIX7 - Patched by ACPI Platform Driver during POST)
+      0x00000000,             // Max = 4GB - 1MB  (fwh + fwh alias) (FIX7 - Patched by ACPI Platform Driver during POST)
+      0x00000000,             // Translation
+      0x00000000,             // Range Length (calculated dynamically) (FIX7 - Patched by ACPI Platform Driver during POST)
+                ,
+                ,
+      FPGM                    // DescriptorName populated so iASL outputs offset for it in a .h file
+    )
+
+    DWORDMemory(              // Consumed-and-produced resource(all of memory space)
+      ResourceProducer,       // bit 0 of general flags is 0
+      PosDecode,              // positive Decode
+      MinFixed,               // Range is fixed
+      MaxFixed,               // Range is fixed
+      NonCacheable,
+      ReadWrite,
+      0x00000000,             // Granularity (FIXZ - Patched by ACPI Platform Driver during POST)
+      0x00000000,             // Min (calculated dynamically) (FIXZ - Patched by ACPI Platform Driver during POST)
+      0x00000000,             // Max = 4GB - 1MB  (fwh + fwh alias) (FIXZ - Patched by ACPI Platform Driver during POST)
+      0x00000000,             // Translation
+      0x00000000,             // Range Length (calculated dynamically) (FIXZ - Patched by ACPI Platform Driver during POST)
+                ,
+                ,
+      FIXZ                    // DescriptorName populated so iASL outputs offset for it in a .h file
+    )
+  })
+
+  Method(_CRS, 0x0, NotSerialized) {
+    ///
+    /// Patch 32b memory
+    ///
+    CreateDwordField(^RBUF, ^FPGM._MIN, FMN1)
+    CreateDwordField(^RBUF, ^FPGM._MAX, FMX1)
+    CreateDwordField(^RBUF, ^FPGM._LEN, FLN1)
+    Store(FMB3, FMN1)
+    Store(FML3, FMX1)
+    Subtract (FMX1, FMN1, FLN1)
+    Add (FLN1, 1, FLN1)
+
+    ///
+    /// Patch _BBN
+    ///
+    If(LGreater(FBL3, FBB3)) {
+      CreateWordField(^RBUF, ^FBUS._MIN, BMIN)
+      CreateWordField(^RBUF, ^FBUS._MAX, BMAX)
+      CreateWordField(^RBUF, ^FBUS._LEN, BLEN)
+      Store(FBB3, BMIN)
+      Store(FBL3, BMAX)
+      Subtract (BMAX, BMIN, BLEN)
+      Add (BLEN, 1, BLEN)
+    }
+    Return (RBUF)
+  }
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/Gpe.asi b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/Gpe.asi
new file mode 100644
index 0000000000..d695b13df9
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/Gpe.asi
@@ -0,0 +1,137 @@
+/** @file
+  ACPI DSDT table
+
+@copyright
+  Copyright 2011 - 2018 Intel Corporation.
+
+  SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+  // General Purpose Events.  This Scope handles the Run-time and
+  // Wake-time SCIs.  The specific method called will be determined by
+  // the _Lxx value, where xx equals the bit location in the General
+  // Purpose Event register(s).
+
+
+    //
+    // If the Root Port is enabled, run PCI_EXP_STS handler
+    //
+    If(LNotEqual(\_SB.PC00.RP01.VDID,0xFFFFFFFF))
+    {
+      \_SB.PC00.RP01.HPME()
+      Notify(\_SB.PC00.RP01, 0x02)
+    }
+
+    If(LNotEqual(\_SB.PC00.RP02.VDID,0xFFFFFFFF))
+    {
+      \_SB.PC00.RP02.HPME()
+      Notify(\_SB.PC00.RP02, 0x02)
+    }
+
+    If(LNotEqual(\_SB.PC00.RP03.VDID,0xFFFFFFFF))
+    {
+      \_SB.PC00.RP03.HPME()
+      Notify(\_SB.PC00.RP03, 0x02)
+    }
+
+    If(LNotEqual(\_SB.PC00.RP04.VDID,0xFFFFFFFF))
+    {
+      \_SB.PC00.RP04.HPME()
+      Notify(\_SB.PC00.RP04, 0x02)
+    }
+
+    If(LNotEqual(\_SB.PC00.RP05.VDID,0xFFFFFFFF))
+    {
+      \_SB.PC00.RP05.HPME()
+      Notify(\_SB.PC00.RP05, 0x02)
+    }
+
+    If(LNotEqual(\_SB.PC00.RP06.VDID,0xFFFFFFFF))
+    {
+      \_SB.PC00.RP06.HPME()
+      Notify(\_SB.PC00.RP06, 0x02)
+    }
+
+    If(LNotEqual(\_SB.PC00.RP07.VDID,0xFFFFFFFF))
+    {
+      \_SB.PC00.RP07.HPME()
+      Notify(\_SB.PC00.RP07, 0x02)
+    }
+
+    If(LNotEqual(\_SB.PC00.RP08.VDID,0xFFFFFFFF))
+    {
+      \_SB.PC00.RP08.HPME()
+      Notify(\_SB.PC00.RP08, 0x02)
+    }
+
+    If(LNotEqual(\_SB.PC00.RP09.VDID,0xFFFFFFFF))
+    {
+      \_SB.PC00.RP09.HPME()
+      Notify(\_SB.PC00.RP09, 0x02)
+    }
+
+    If(LNotEqual(\_SB.PC00.RP10.VDID,0xFFFFFFFF))
+    {
+      \_SB.PC00.RP10.HPME()
+      Notify(\_SB.PC00.RP10, 0x02)
+    }
+
+    If(LNotEqual(\_SB.PC00.RP11.VDID,0xFFFFFFFF))
+    {
+      \_SB.PC00.RP11.HPME()
+      Notify(\_SB.PC00.RP11, 0x02)
+    }
+
+    If(LNotEqual(\_SB.PC00.RP12.VDID,0xFFFFFFFF))
+    {
+      \_SB.PC00.RP12.HPME()
+      Notify(\_SB.PC00.RP12, 0x02)
+    }
+
+    If(LNotEqual(\_SB.PC00.RP13.VDID,0xFFFFFFFF))
+    {
+      \_SB.PC00.RP13.HPME()
+      Notify(\_SB.PC00.RP13, 0x02)
+    }
+
+    If(LNotEqual(\_SB.PC00.RP14.VDID,0xFFFFFFFF))
+    {
+      \_SB.PC00.RP14.HPME()
+      Notify(\_SB.PC00.RP14, 0x02)
+    }
+
+    If(LNotEqual(\_SB.PC00.RP15.VDID,0xFFFFFFFF))
+    {
+      \_SB.PC00.RP15.HPME()
+      Notify(\_SB.PC00.RP15, 0x02)
+    }
+
+    If(LNotEqual(\_SB.PC00.RP16.VDID,0xFFFFFFFF))
+    {
+      \_SB.PC00.RP16.HPME()
+      Notify(\_SB.PC00.RP16, 0x02)
+    }
+
+    If(LNotEqual(\_SB.PC00.RP17.VDID,0xFFFFFFFF))
+    {
+      \_SB.PC00.RP17.HPME()
+      Notify(\_SB.PC00.RP17, 0x02)
+    }
+
+    If(LNotEqual(\_SB.PC00.RP18.VDID,0xFFFFFFFF))
+    {
+      \_SB.PC00.RP18.HPME()
+      Notify(\_SB.PC00.RP18, 0x02)
+    }
+
+    If(LNotEqual(\_SB.PC00.RP19.VDID,0xFFFFFFFF))
+    {
+      \_SB.PC00.RP19.HPME()
+      Notify(\_SB.PC00.RP19, 0x02)
+    }
+
+    If(LNotEqual(\_SB.PC00.RP20.VDID,0xFFFFFFFF))
+    {
+      \_SB.PC00.RP20.HPME()
+      Notify(\_SB.PC00.RP20, 0x02)
+    }
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/IioPcieEdpcGpe.asi b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/IioPcieEdpcGpe.asi
new file mode 100644
index 0000000000..7180f6d607
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/IioPcieEdpcGpe.asi
@@ -0,0 +1,16 @@
+/** @file
+
+  @copyright
+  Copyright 2001 - 2019 Intel Corporation. <BR>
+
+  SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+    External(\_SB.EDGH, MethodObj)
+
+    //
+    //  Handle eDPC SWGPE event
+    //
+    If (CondRefOf (\_SB.EDGH))
+    {
+      \_SB.EDGH ()
+    }
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/IioPcieEdpcNotify10nm.asi b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/IioPcieEdpcNotify10nm.asi
new file mode 100644
index 0000000000..78759e32f3
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/IioPcieEdpcNotify10nm.asi
@@ -0,0 +1,183 @@
+/** @file
+
+  @copyright
+  Copyright 2016 - 2019 Intel Corporation. <BR>
+
+  SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+External(\_SB.EDTM, MethodObj)
+External (\_SB.EDNT, FieldUnitObj)
+External (\_SB.EDVD, FieldUnitObj)
+
+#define PCIE_EDPC_NOTIFY(stack, port)                                                  \
+  store (\_SB.stack._SEG, Local0)                                                      \
+  store (\_SB.stack._BBN, Local1)                                                      \
+  store (\_SB.stack.port._ADR, Local2)                                                 \
+  And (Local2, 0xffff, Local3)                                                         \
+  ShiftRight (Local2, 16, Local4)                                                      \
+  If (\_SB.EDTM(Local0, Local1, Local4, Local3)) {                                     \
+    If (\_SB.EDNT) {                                                                   \
+      /*                                                                               \
+       we are going to notify this device, set the valid flag to EDPC_INFO_NOTIFIED    \
+      */                                                                               \
+      store (2, \_SB.EDVD)                                                             \
+      Notify(\_SB.stack.port, 0xf) /*Error Eject*/                                 \
+    } else {                                                                           \
+      /*                                                                               \
+       we are going to notify this device, set the valid flag to EDPC_INFO_NOTIFIED    \
+      */                                                                               \
+      store (2, \_SB.EDVD)                                                             \
+      Notify(\_SB.stack.port, 0)   /*Bus Check*/                                   \
+    }                                                                                  \
+  }
+
+Scope (\_SB) {
+  //
+  // eDPC Notify Method
+  //
+  Method (EDNM, 0) {
+    // PC01 PCI-Ex eDPC
+    // If this is the eDPC event trigger, notify error eject or bus check
+    PCIE_EDPC_NOTIFY(PC01, BR1A)
+    PCIE_EDPC_NOTIFY(PC01, BR1B)
+    PCIE_EDPC_NOTIFY(PC01, BR1C)
+    PCIE_EDPC_NOTIFY(PC01, BR1D)
+
+    // PC02 PCI-Ex eDPC
+    // If this is the eDPC event trigger, notify error eject or bus check
+    PCIE_EDPC_NOTIFY(PC02, BR2A)
+    PCIE_EDPC_NOTIFY(PC02, BR2B)
+    PCIE_EDPC_NOTIFY(PC02, BR2C)
+    PCIE_EDPC_NOTIFY(PC02, BR2D)
+
+    // PC03  PCI-Ex eDPC
+    // If this is the eDPC event trigger, notify error eject or bus check
+    PCIE_EDPC_NOTIFY(PC03, BR3A)
+    PCIE_EDPC_NOTIFY(PC03, BR3B)
+    PCIE_EDPC_NOTIFY(PC03, BR3C)
+    PCIE_EDPC_NOTIFY(PC03, BR3D)
+
+    // PC04  PCI-Ex eDPC
+    // If this is the eDPC event trigger, notify error eject or bus check
+    PCIE_EDPC_NOTIFY(PC04, BR4A)
+    PCIE_EDPC_NOTIFY(PC04, BR4B)
+    PCIE_EDPC_NOTIFY(PC04, BR4C)
+    PCIE_EDPC_NOTIFY(PC04, BR4D)
+
+    // PC05  PCI-Ex eDPC
+    // If this is the eDPC event trigger, notify error eject or bus check
+    PCIE_EDPC_NOTIFY(PC05, BR5A)
+    PCIE_EDPC_NOTIFY(PC05, BR5B)
+    PCIE_EDPC_NOTIFY(PC05, BR5C)
+    PCIE_EDPC_NOTIFY(PC05, BR5D)
+
+  #if MAX_SOCKET > 1
+  // PC07 PCI-Ex eDPC
+  // If this is the eDPC event trigger, notify error eject or bus check
+    PCIE_EDPC_NOTIFY(PC07, QR1A)
+    PCIE_EDPC_NOTIFY(PC07, QR1B)
+    PCIE_EDPC_NOTIFY(PC07, QR1C)
+    PCIE_EDPC_NOTIFY(PC07, QR1D)
+
+    // PC08 Port 2A PCI-Ex eDPC
+    // If this is the eDPC event trigger, notify error eject or bus check
+    PCIE_EDPC_NOTIFY(PC08, QR2A)
+    PCIE_EDPC_NOTIFY(PC08, QR2B)
+    PCIE_EDPC_NOTIFY(PC08, QR2C)
+    PCIE_EDPC_NOTIFY(PC08, QR2D)
+
+    // PC09 PCI-Ex eDPC
+    // If this is the eDPC event trigger, notify error eject or bus check
+    PCIE_EDPC_NOTIFY(PC09, QR3A)
+    PCIE_EDPC_NOTIFY(PC09, QR3B)
+    PCIE_EDPC_NOTIFY(PC09, QR3C)
+    PCIE_EDPC_NOTIFY(PC09, QR3D)
+
+    // PC08 Port 2A PCI-Ex eDPC
+    // If this is the eDPC event trigger, notify error eject or bus check
+    PCIE_EDPC_NOTIFY(PC10, QR4A)
+    PCIE_EDPC_NOTIFY(PC10, QR4B)
+    PCIE_EDPC_NOTIFY(PC10, QR4C)
+    PCIE_EDPC_NOTIFY(PC10, QR4D)
+
+    // PC09 PCI-Ex eDPC
+    // If this is the eDPC event trigger, notify error eject or bus check
+    PCIE_EDPC_NOTIFY(PC11, QR5A)
+    PCIE_EDPC_NOTIFY(PC11, QR5B)
+    PCIE_EDPC_NOTIFY(PC11, QR5C)
+    PCIE_EDPC_NOTIFY(PC11, QR5D)
+  #endif
+  #if MAX_SOCKET > 2
+  // PC13 PCI-Ex eDPC
+  // If this is the eDPC event trigger, notify error eject or bus check
+    PCIE_EDPC_NOTIFY(PC13, RR1A)
+    PCIE_EDPC_NOTIFY(PC13, RR1B)
+    PCIE_EDPC_NOTIFY(PC13, RR1C)
+    PCIE_EDPC_NOTIFY(PC13, RR1D)
+
+    // PC14 PCI-Ex eDPC
+    // If this is the eDPC event trigger, notify error eject or bus check
+    PCIE_EDPC_NOTIFY(PC14, RR2A)
+    PCIE_EDPC_NOTIFY(PC14, RR2B)
+    PCIE_EDPC_NOTIFY(PC14, RR2C)
+    PCIE_EDPC_NOTIFY(PC14, RR2D)
+
+    // PC15 PCI-Ex eDPC
+    // If this is the eDPC event trigger, notify error eject or bus check
+    PCIE_EDPC_NOTIFY(PC15, RR3A)
+    PCIE_EDPC_NOTIFY(PC15, RR3B)
+    PCIE_EDPC_NOTIFY(PC15, RR3C)
+    PCIE_EDPC_NOTIFY(PC15, RR3D)
+
+    // PC16 PCI-Ex eDPC
+    // If this is the eDPC event trigger, notify error eject or bus check
+    PCIE_EDPC_NOTIFY(PC16, RR4A)
+    PCIE_EDPC_NOTIFY(PC16, RR4B)
+    PCIE_EDPC_NOTIFY(PC16, RR4C)
+    PCIE_EDPC_NOTIFY(PC16, RR4D)
+
+    // PC17 PCI-Ex eDPC
+    // If this is the eDPC event trigger, notify error eject or bus check
+    PCIE_EDPC_NOTIFY(PC17, RR5A)
+    PCIE_EDPC_NOTIFY(PC17, RR5B)
+    PCIE_EDPC_NOTIFY(PC17, RR5C)
+    PCIE_EDPC_NOTIFY(PC17, RR5D)
+  #endif
+  #if MAX_SOCKET > 3
+    // PC19 PCI-Ex eDPC
+    // If this is the eDPC event trigger, notify error eject or bus check
+    PCIE_EDPC_NOTIFY(PC19, SR1A)
+    PCIE_EDPC_NOTIFY(PC19, SR1B)
+    PCIE_EDPC_NOTIFY(PC19, SR1C)
+    PCIE_EDPC_NOTIFY(PC19, SR1D)
+
+    // PC20 PCI-Ex eDPC
+    // If this is the eDPC event trigger, notify error eject or bus check
+    PCIE_EDPC_NOTIFY(PC20, SR2A)
+    PCIE_EDPC_NOTIFY(PC20, SR2B)
+    PCIE_EDPC_NOTIFY(PC20, SR2C)
+    PCIE_EDPC_NOTIFY(PC20, SR2D)
+
+    // PC21 PCI-Ex eDPC
+    // If this is the eDPC event trigger, notify error eject or bus check
+    PCIE_EDPC_NOTIFY(PC21, SR3A)
+    PCIE_EDPC_NOTIFY(PC21, SR3B)
+    PCIE_EDPC_NOTIFY(PC21, SR3C)
+    PCIE_EDPC_NOTIFY(PC21, SR3D)
+
+    // PC21 PCI-Ex eDPC
+    // If this is the eDPC event trigger, notify error eject or bus check
+    PCIE_EDPC_NOTIFY(PC22, SR4A)
+    PCIE_EDPC_NOTIFY(PC22, SR4B)
+    PCIE_EDPC_NOTIFY(PC22, SR4C)
+    PCIE_EDPC_NOTIFY(PC22, SR4D)
+
+    // PC22 PCI-Ex eDPC
+    // If this is the eDPC event trigger, notify error eject or bus check
+    PCIE_EDPC_NOTIFY(PC23, SR5A)
+    PCIE_EDPC_NOTIFY(PC23, SR5B)
+    PCIE_EDPC_NOTIFY(PC23, SR5C)
+    PCIE_EDPC_NOTIFY(PC23, SR5D)
+  #endif
+  } //endof the method EDGH
+}
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/IioPcieEdpcOst.asi b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/IioPcieEdpcOst.asi
new file mode 100644
index 0000000000..13c76067c3
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/IioPcieEdpcOst.asi
@@ -0,0 +1,16 @@
+/** @file
+
+  @copyright
+  Copyright 2001 - 2019 Intel Corporation. <BR>
+
+  SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+    External(\_SB.EDOS, MethodObj)
+
+    //
+    //  Handle eDPC _OST
+    //
+    If (CondRefOf (\_SB.EDOS))
+    {
+      \_SB.EDOS (Arg0, Arg1, Arg2)
+    }
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/IioPcieHotPlugGpeHandler10nm.asl b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/IioPcieHotPlugGpeHandler10nm.asl
new file mode 100644
index 0000000000..09ff73e148
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/IioPcieHotPlugGpeHandler10nm.asl
@@ -0,0 +1,1322 @@
+/** @file
+
+  @copyright
+  Copyright 2019 Intel Corporation. <BR>
+
+  SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+  //
+  // Delay introduced as initial delay after entering ACPI hotplug method
+  //
+  Sleep (200)
+  Store (0x01, IO80)
+  Sleep (10)
+  Store (0,Local1)
+
+  // PC00 Port 1A PCI-Ex Hot Plug
+  // If PM_PME event clear INTs and AttnBtnPressed
+ If( LEqual(\_SB.PC01.BR1A.PMEP,1) ) {
+    Store(\_SB.PC01.BR1A.PMEH(1), Local0)
+  } else {
+    Store (\_SB.PC01.BR1A.HPEH(1), Local0)
+  }
+  If(Lnot(LEqual(Local0,0xFF))) {
+    Store(1, Local1)
+    Notify(\_SB.PC01.BR1A, Local0)
+  }
+
+  // PC00 Port 1B PCI-Ex Hot Plug
+  // If PM_PME event clear INTs and AttnBtnPressed
+  If( LEqual(\_SB.PC01.BR1B.PMEP,1) ) {
+    Store(\_SB.PC01.BR1B.PMEH(2), Local0)
+  } else {
+    Store (\_SB.PC01.BR1B.HPEH(2), Local0)
+  }
+  If(Lnot(LEqual(Local0,0xFF))) {
+    Store(2, Local1)
+    Notify(\_SB.PC01.BR1B, Local0)
+  }
+
+  // PC00 Port 1C PCI-Ex Hot Plug
+  // If PM_PME event clear INTs and AttnBtnPressed
+  If( LEqual(\_SB.PC01.BR1C.PMEP,1) ) {
+    Store(\_SB.PC01.BR1C.PMEH(3), Local0)
+  } else {
+    Store (\_SB.PC01.BR1C.HPEH(3), Local0)
+  }
+  If(Lnot(LEqual(Local0,0xFF))) {
+    Store(3, Local1)
+    Notify(\_SB.PC01.BR1C, Local0)
+  }
+
+  // PC00 Port 1D PCI-Ex Hot Plug
+  // If PM_PME event clear INTs and AttnBtnPressed
+  If( LEqual(\_SB.PC01.BR1D.PMEP,1) ) {
+    Store(\_SB.PC01.BR1D.PMEH(4), Local0)
+  } else {
+    Store (\_SB.PC01.BR1D.HPEH(4), Local0)
+  }
+  If(Lnot(LEqual(Local0,0xFF))) {
+    Store(4, Local1)
+    Notify(\_SB.PC01.BR1D, Local0)
+  }
+
+
+ // PC01 Port 2A PCI-Ex Hot Plug
+  If( LEqual(\_SB.PC02.BR2A.PMEP,1) ) {
+    Store(\_SB.PC02.BR2A.PMEH(5), Local0)
+  } else {
+    Store (\_SB.PC02.BR2A.HPEH(5), Local0)
+  }
+  If(Lnot(LEqual(Local0,0xFF))) {
+    Store(5, Local1)
+    Notify(\_SB.PC02.BR2A, Local0)
+  }
+
+  // PC01 Port 2B PCI-Ex Hot Plug
+  // If PM_PME event clear INTs and AttnBtnPressed
+  If( LEqual(\_SB.PC02.BR2B.PMEP,1) ) {
+    Store(\_SB.PC02.BR2B.PMEH(6), Local0)
+  } else {
+    Store (\_SB.PC02.BR2B.HPEH(6), Local0)
+  }
+  If(Lnot(LEqual(Local0,0xFF))) {
+    Store(6, Local1)
+    Notify(\_SB.PC02.BR2B, Local0)
+  }
+
+  // PC01 Port 2C PCI-Ex Hot Plug
+  // If PM_PME event clear INTs and AttnBtnPressed
+  If( LEqual(\_SB.PC02.BR2C.PMEP,1) ) {
+    Store(\_SB.PC02.BR2C.PMEH(7), Local0)
+  } else {
+    Store (\_SB.PC02.BR2C.HPEH(7), Local0)
+  }
+  If(Lnot(LEqual(Local0,0xFF))) {
+    Store(7, Local1)
+    Notify(\_SB.PC02.BR2C, Local0)
+  }
+
+  // PC01 Port 2D PCI-Ex Hot Plug
+  // If PM_PME event clear INTs and AttnBtnPressed
+  If( LEqual(\_SB.PC02.BR2D.PMEP,1) ) {
+    Store(\_SB.PC02.BR2D.PMEH(8), Local0)
+  } else {
+    Store (\_SB.PC02.BR2D.HPEH(8), Local0)
+  }
+  If(Lnot(LEqual(Local0,0xFF))) {
+    Store(8, Local1)
+    Notify(\_SB.PC02.BR2D, Local0)
+  }
+
+  // PC01 Port 3A PCI-Ex Hot Plug
+  // If PM_PME event clear INTs and AttnBtnPressed
+  If( LEqual(\_SB.PC03.BR3A.PMEP,1) ) {
+    Store(\_SB.PC03.BR3A.PMEH(9), Local0)
+  } else {
+    Store (\_SB.PC03.BR3A.HPEH(9), Local0)
+  }
+  If(Lnot(LEqual(Local0,0xFF))) {
+    Store(9, Local1)
+    Notify(\_SB.PC03.BR3A, Local0)
+  }
+
+  // PC01 Port 3B PCI-Ex Hot Plug
+  // If PM_PME event clear INTs and AttnBtnPressed
+  If( LEqual(\_SB.PC03.BR3B.PMEP,1) ) {
+    Store(\_SB.PC03.BR3B.PMEH(10), Local0)
+  } else {
+    Store (\_SB.PC03.BR3B.HPEH(10), Local0)
+  }
+  If(Lnot(LEqual(Local0,0xFF))) {
+    Store(10, Local1)
+    Notify(\_SB.PC03.BR3B, Local0)
+  }
+
+  // PC01 Port 3C PCI-Ex Hot Plug
+  // If PM_PME event clear INTs and AttnBtnPressed
+  If( LEqual(\_SB.PC03.BR3C.PMEP,1) ) {
+    Store(\_SB.PC03.BR3C.PMEH(11), Local0)
+  } else {
+    Store (\_SB.PC03.BR3C.HPEH(11), Local0)
+  }
+  If(Lnot(LEqual(Local0,0xFF))) {
+    Store(11, Local1)
+    Notify(\_SB.PC03.BR3C, Local0)
+  }
+
+  // PC01 Port 3D PCI-Ex Hot Plug
+  // If PM_PME event clear INTs and AttnBtnPressed
+  If( LEqual(\_SB.PC03.BR3D.PMEP,1) ) {
+    Store(\_SB.PC03.BR3D.PMEH(12), Local0)
+  } else {
+    Store (\_SB.PC03.BR3D.HPEH(12), Local0)
+  }
+  If(Lnot(LEqual(Local0,0xFF))) {
+    Store(12, Local1)
+    Notify(\_SB.PC03.BR3D, Local0)
+  }
+
+  // PC02 Port 4A PCI-Ex Hot Plug
+  // If PM_PME event clear INTs and AttnBtnPressed
+  If( LEqual(\_SB.PC04.BR4A.PMEP,1) ) {
+    Store(\_SB.PC04.BR4A.PMEH(13), Local0)
+  } else {
+    Store (\_SB.PC04.BR4A.HPEH(13), Local0)
+  }
+  If(Lnot(LEqual(Local0,0xFF))) {
+    Store(13, Local1)
+    Notify(\_SB.PC04.BR4A, Local0)
+  }
+
+  // PC02 Port 4B PCI-Ex Hot Plug
+  // If PM_PME event clear INTs and AttnBtnPressed
+  If( LEqual(\_SB.PC04.BR4B.PMEP,1) ) {
+    Store(\_SB.PC04.BR4B.PMEH(14), Local0)
+  } else {
+    Store (\_SB.PC04.BR4B.HPEH(14), Local0)
+  }
+  If(Lnot(LEqual(Local0,0xFF))) {
+    Store(14, Local1)
+    Notify(\_SB.PC04.BR4B, Local0)
+  }
+
+  // PC02 Port 4C PCI-Ex Hot Plug
+  // If PM_PME event clear INTs and AttnBtnPressed
+  If( LEqual(\_SB.PC04.BR4C.PMEP,1) ) {
+    Store(\_SB.PC04.BR4C.PMEH(15), Local0)
+  } else {
+    Store (\_SB.PC04.BR4C.HPEH(15), Local0)
+  }
+  If(Lnot(LEqual(Local0,0xFF))) {
+    Store(15, Local1)
+    Notify(\_SB.PC04.BR4C, Local0)
+  }
+
+  // PC02 Port 4D PCI-Ex Hot Plug
+  // If PM_PME event clear INTs and AttnBtnPressed
+  If( LEqual(\_SB.PC04.BR4D.PMEP,1) ) {
+    Store(\_SB.PC04.BR4D.PMEH(16), Local0)
+  } else {
+    Store (\_SB.PC04.BR4D.HPEH(16), Local0)
+  }
+  If(Lnot(LEqual(Local0,0xFF))) {
+    Store(16, Local1)
+    Notify(\_SB.PC04.BR4D, Local0)
+  }
+
+  // PC02 Port 5A PCI-Ex Hot Plug
+  // If PM_PME event clear INTs and AttnBtnPressed
+  If( LEqual(\_SB.PC05.BR5A.PMEP,1) ) {
+    Store(\_SB.PC05.BR5A.PMEH(17), Local0)
+  } else {
+    Store (\_SB.PC05.BR5A.HPEH(17), Local0)
+  }
+  If(Lnot(LEqual(Local0,0xFF))) {
+    Store(17, Local1)
+    Notify(\_SB.PC05.BR5A, Local0)
+  }
+
+  // PC02 Port 5B PCI-Ex Hot Plug
+  // If PM_PME event clear INTs and AttnBtnPressed
+  If( LEqual(\_SB.PC05.BR5B.PMEP,1) ) {
+    Store(\_SB.PC05.BR5B.PMEH(18), Local0)
+  } else {
+    Store (\_SB.PC05.BR5B.HPEH(18), Local0)
+  }
+  If(Lnot(LEqual(Local0,0xFF))) {
+    Store(18, Local1)
+    Notify(\_SB.PC05.BR5B, Local0)
+  }
+
+  // PC02 Port 5C PCI-Ex Hot Plug
+  // If PM_PME event clear INTs and AttnBtnPressed
+  If( LEqual(\_SB.PC05.BR5C.PMEP,1) ) {
+    Store(\_SB.PC05.BR5C.PMEH(19), Local0)
+  } else {
+    Store (\_SB.PC05.BR5C.HPEH(19), Local0)
+  }
+  If(Lnot(LEqual(Local0,0xFF))) {
+    Store(19, Local1)
+    Notify(\_SB.PC05.BR5C, Local0)
+  }
+
+  // PC02 Port 5D PCI-Ex Hot Plug
+  // If PM_PME event clear INTs and AttnBtnPressed
+  If( LEqual(\_SB.PC05.BR5D.PMEP,1) ) {
+    Store(\_SB.PC05.BR5D.PMEH(20), Local0)
+  } else {
+    Store (\_SB.PC05.BR5D.HPEH(20), Local0)
+  }
+  If(Lnot(LEqual(Local0,0xFF))) {
+    Store(20, Local1)
+    Notify(\_SB.PC05.BR5D, Local0)
+  }
+
+#if MAX_SOCKET > 1
+
+
+ // PC06 Port 1A PCI-Ex Hot Plug
+ // If PM_PME event clear INTs and AttnBtnPressed
+ If( LEqual(\_SB.PC07.QR1A.PMEP,1) ) {
+    Store(\_SB.PC07.QR1A.PMEH(1), Local0)
+  } else {
+    Store (\_SB.PC07.QR1A.HPEH(1), Local0)
+  }
+  If(Lnot(LEqual(Local0,0xFF))) {
+    Store(1, Local1)
+    Notify(\_SB.PC07.QR1A, Local0)
+  }
+
+  // PC06 Port 1B PCI-Ex Hot Plug
+  // If PM_PME event clear INTs and AttnBtnPressed
+  If( LEqual(\_SB.PC07.QR1B.PMEP,1) ) {
+    Store(\_SB.PC07.QR1B.PMEH(2), Local0)
+  } else {
+    Store (\_SB.PC07.QR1B.HPEH(2), Local0)
+  }
+  If(Lnot(LEqual(Local0,0xFF))) {
+    Store(2, Local1)
+    Notify(\_SB.PC07.QR1B, Local0)
+  }
+
+  // PC06 Port 1C PCI-Ex Hot Plug
+  // If PM_PME event clear INTs and AttnBtnPressed
+  If( LEqual(\_SB.PC07.QR1C.PMEP,1) ) {
+    Store(\_SB.PC07.QR1C.PMEH(3), Local0)
+  } else {
+    Store (\_SB.PC07.QR1C.HPEH(3), Local0)
+  }
+  If(Lnot(LEqual(Local0,0xFF))) {
+    Store(3, Local1)
+    Notify(\_SB.PC07.QR1C, Local0)
+  }
+
+  // PC06 Port 1D PCI-Ex Hot Plug
+  // If PM_PME event clear INTs and AttnBtnPressed
+  If( LEqual(\_SB.PC07.QR1D.PMEP,1) ) {
+    Store(\_SB.PC07.QR1D.PMEH(4), Local0)
+  } else {
+    Store (\_SB.PC07.QR1D.HPEH(4), Local0)
+  }
+  If(Lnot(LEqual(Local0,0xFF))) {
+    Store(4, Local1)
+    Notify(\_SB.PC07.QR1D, Local0)
+  }
+
+  // PC04 Port 2A PCI-Ex Hot Plug
+  // If PM_PME event clear INTs and AttnBtnPressed
+  If( LEqual(\_SB.PC08.QR2A.PMEP,1) ) {
+    Store(\_SB.PC08.QR2A.PMEH(5), Local0)
+  } else {
+    Store (\_SB.PC08.QR2A.HPEH(5), Local0)
+  }
+  If(Lnot(LEqual(Local0,0xFF))) {
+    Store(5, Local1)
+    Notify(\_SB.PC08.QR2A, Local0)
+  }
+
+  // PC04 Port 2B PCI-Ex Hot Plug
+  // If PM_PME event clear INTs and AttnBtnPressed
+  If( LEqual(\_SB.PC08.QR2B.PMEP,1) ) {
+    Store(\_SB.PC08.QR2B.PMEH(6), Local0)
+  } else {
+    Store (\_SB.PC08.QR2B.HPEH(6), Local0)
+  }
+  If(Lnot(LEqual(Local0,0xFF))) {
+    Store(6, Local1)
+    Notify(\_SB.PC08.QR2B, Local0)
+  }
+
+  // PC04 Port 2C PCI-Ex Hot Plug
+  // If PM_PME event clear INTs and AttnBtnPressed
+  If( LEqual(\_SB.PC08.QR2C.PMEP,1) ) {
+    Store(\_SB.PC08.QR2C.PMEH(7), Local0)
+  } else {
+    Store (\_SB.PC08.QR2C.HPEH(7), Local0)
+  }
+  If(Lnot(LEqual(Local0,0xFF))) {
+    Store(7, Local1)
+    Notify(\_SB.PC08.QR2C, Local0)
+  }
+
+  // PC04 Port 2D PCI-Ex Hot Plug
+  // If PM_PME event clear INTs and AttnBtnPressed
+  If( LEqual(\_SB.PC08.QR2D.PMEP,1) ) {
+    Store(\_SB.PC08.QR2D.PMEH(8), Local0)
+  } else {
+    Store (\_SB.PC08.QR2D.HPEH(8), Local0)
+  }
+  If(Lnot(LEqual(Local0,0xFF))) {
+    Store(8, Local1)
+    Notify(\_SB.PC08.QR2D, Local0)
+  }
+
+  // PC04 Port 3A PCI-Ex Hot Plug
+  // If PM_PME event clear INTs and AttnBtnPressed
+  If( LEqual(\_SB.PC09.QR3A.PMEP,1) ) {
+    Store(\_SB.PC09.QR3A.PMEH(9), Local0)
+  } else {
+    Store (\_SB.PC09.QR3A.HPEH(9), Local0)
+  }
+  If(Lnot(LEqual(Local0,0xFF))) {
+    Store(9, Local1)
+    Notify(\_SB.PC09.QR3A, Local0)
+  }
+
+  // PC04 Port 3B PCI-Ex Hot Plug
+  // If PM_PME event clear INTs and AttnBtnPressed
+  If( LEqual(\_SB.PC09.QR3B.PMEP,1) ) {
+    Store(\_SB.PC09.QR3B.PMEH(10), Local0)
+  } else {
+    Store (\_SB.PC09.QR3B.HPEH(10), Local0)
+  }
+  If(Lnot(LEqual(Local0,0xFF))) {
+    Store(10, Local1)
+    Notify(\_SB.PC09.QR3B, Local0)
+  }
+
+  // PC04 Port 3C PCI-Ex Hot Plug
+  // If PM_PME event clear INTs and AttnBtnPressed
+  If( LEqual(\_SB.PC09.QR3C.PMEP,1) ) {
+    Store(\_SB.PC09.QR3C.PMEH(11), Local0)
+  } else {
+    Store (\_SB.PC09.QR3C.HPEH(11), Local0)
+  }
+  If(Lnot(LEqual(Local0,0xFF))) {
+    Store(11, Local1)
+    Notify(\_SB.PC09.QR3C, Local0)
+  }
+
+  // PC04 Port 3D PCI-Ex Hot Plug
+  // If PM_PME event clear INTs and AttnBtnPressed
+  If( LEqual(\_SB.PC09.QR3D.PMEP,1) ) {
+    Store(\_SB.PC09.QR3D.PMEH(12), Local0)
+  } else {
+    Store (\_SB.PC09.QR3D.HPEH(12), Local0)
+  }
+  If(Lnot(LEqual(Local0,0xFF))) {
+    Store(12, Local1)
+    Notify(\_SB.PC09.QR3D, Local0)
+  }
+
+  // PC10 Port 4A PCI-Ex Hot Plug
+  // If PM_PME event clear INTs and AttnBtnPressed
+  If( LEqual(\_SB.PC10.QR4A.PMEP,1) ) {
+    Store(\_SB.PC10.QR4A.PMEH(13), Local0)
+  } else {
+    Store (\_SB.PC10.QR4A.HPEH(13), Local0)
+  }
+  If(Lnot(LEqual(Local0,0xFF))) {
+    Store(13, Local1)
+    Notify(\_SB.PC10.QR4A, Local0)
+  }
+
+  // PC10 Port 4B PCI-Ex Hot Plug
+  // If PM_PME event clear INTs and AttnBtnPressed
+  If( LEqual(\_SB.PC10.QR4B.PMEP,1) ) {
+    Store(\_SB.PC10.QR4B.PMEH(14), Local0)
+  } else {
+    Store (\_SB.PC10.QR4B.HPEH(14), Local0)
+  }
+  If(Lnot(LEqual(Local0,0xFF))) {
+    Store(14, Local1)
+    Notify(\_SB.PC10.QR4B, Local0)
+  }
+
+  // PC10 Port 4C PCI-Ex Hot Plug
+  // If PM_PME event clear INTs and AttnBtnPressed
+  If( LEqual(\_SB.PC10.QR4C.PMEP,1) ) {
+    Store(\_SB.PC10.QR4C.PMEH(15), Local0)
+  } else {
+    Store (\_SB.PC10.QR4C.HPEH(15), Local0)
+  }
+  If(Lnot(LEqual(Local0,0xFF))) {
+    Store(15, Local1)
+    Notify(\_SB.PC10.QR4C, Local0)
+  }
+
+  // PC10 Port 4D PCI-Ex Hot Plug
+  // If PM_PME event clear INTs and AttnBtnPressed
+  If( LEqual(\_SB.PC10.QR4D.PMEP,1) ) {
+    Store(\_SB.PC10.QR4D.PMEH(16), Local0)
+  } else {
+    Store (\_SB.PC10.QR4D.HPEH(16), Local0)
+  }
+  If(Lnot(LEqual(Local0,0xFF))) {
+    Store(16, Local1)
+    Notify(\_SB.PC10.QR4D, Local0)
+  }
+
+  // PC10 Port 5A PCI-Ex Hot Plug
+  // If PM_PME event clear INTs and AttnBtnPressed
+  If( LEqual(\_SB.PC11.QR5A.PMEP,1) ) {
+    Store(\_SB.PC11.QR5A.PMEH(17), Local0)
+  } else {
+    Store (\_SB.PC11.QR5A.HPEH(17), Local0)
+  }
+  If(Lnot(LEqual(Local0,0xFF))) {
+    Store(17, Local1)
+    Notify(\_SB.PC11.QR5A, Local0)
+  }
+
+  // PC10 Port 5B PCI-Ex Hot Plug
+  // If PM_PME event clear INTs and AttnBtnPressed
+  If( LEqual(\_SB.PC11.QR5B.PMEP,1) ) {
+    Store(\_SB.PC11.QR5B.PMEH(18), Local0)
+  } else {
+    Store (\_SB.PC11.QR5B.HPEH(18), Local0)
+  }
+  If(Lnot(LEqual(Local0,0xFF))) {
+    Store(18, Local1)
+    Notify(\_SB.PC11.QR5B, Local0)
+  }
+
+  // PC10 Port 5C PCI-Ex Hot Plug
+  // If PM_PME event clear INTs and AttnBtnPressed
+  If( LEqual(\_SB.PC11.QR5C.PMEP,1) ) {
+    Store(\_SB.PC11.QR5C.PMEH(19), Local0)
+  } else {
+    Store (\_SB.PC11.QR5C.HPEH(19), Local0)
+  }
+  If(Lnot(LEqual(Local0,0xFF))) {
+    Store(19, Local1)
+    Notify(\_SB.PC11.QR5C, Local0)
+  }
+
+  // PC10 Port 5D PCI-Ex Hot Plug
+  // If PM_PME event clear INTs and AttnBtnPressed
+  If( LEqual(\_SB.PC11.QR5D.PMEP,1) ) {
+    Store(\_SB.PC11.QR5D.PMEH(20), Local0)
+  } else {
+    Store (\_SB.PC11.QR5D.HPEH(20), Local0)
+  }
+  If(Lnot(LEqual(Local0,0xFF))) {
+    Store(20, Local1)
+    Notify(\_SB.PC11.QR5D, Local0)
+  }
+#endif
+#if MAX_SOCKET > 2
+
+ // PC06 Port 1A PCI-Ex Hot Plug
+ // If PM_PME event clear INTs and AttnBtnPressed
+ If( LEqual(\_SB.PC13.RR1A.PMEP,1) ) {
+    Store(\_SB.PC13.RR1A.PMEH(1), Local0)
+  } else {
+    Store (\_SB.PC13.RR1A.HPEH(1), Local0)
+  }
+  If(Lnot(LEqual(Local0,0xFF))) {
+    Store(1, Local1)
+    Notify(\_SB.PC13.RR1A, Local0)
+  }
+
+  // PC06 Port 1B PCI-Ex Hot Plug
+  // If PM_PME event clear INTs and AttnBtnPressed
+  If( LEqual(\_SB.PC13.RR1B.PMEP,1) ) {
+    Store(\_SB.PC13.RR1B.PMEH(2), Local0)
+  } else {
+    Store (\_SB.PC13.RR1B.HPEH(2), Local0)
+  }
+  If(Lnot(LEqual(Local0,0xFF))) {
+    Store(2, Local1)
+    Notify(\_SB.PC13.RR1B, Local0)
+  }
+
+  // PC06 Port 1C PCI-Ex Hot Plug
+  // If PM_PME event clear INTs and AttnBtnPressed
+  If( LEqual(\_SB.PC13.RR1C.PMEP,1) ) {
+    Store(\_SB.PC13.RR1C.PMEH(3), Local0)
+  } else {
+    Store (\_SB.PC13.RR1C.HPEH(3), Local0)
+  }
+  If(Lnot(LEqual(Local0,0xFF))) {
+    Store(3, Local1)
+    Notify(\_SB.PC13.RR1C, Local0)
+  }
+
+  // PC06 Port 1D PCI-Ex Hot Plug
+  // If PM_PME event clear INTs and AttnBtnPressed
+  If( LEqual(\_SB.PC13.RR1D.PMEP,1) ) {
+    Store(\_SB.PC13.RR1D.PMEH(4), Local0)
+  } else {
+    Store (\_SB.PC13.RR1D.HPEH(4), Local0)
+  }
+  If(Lnot(LEqual(Local0,0xFF))) {
+    Store(4, Local1)
+    Notify(\_SB.PC13.RR1D, Local0)
+  }
+
+  // PC07 Port 2A PCI-Ex Hot Plug
+  // If PM_PME event clear INTs and AttnBtnPressed
+  If( LEqual(\_SB.PC14.RR2A.PMEP,1) ) {
+    Store(\_SB.PC14.RR2A.PMEH(5), Local0)
+  } else {
+    Store (\_SB.PC14.RR2A.HPEH(5), Local0)
+  }
+  If(Lnot(LEqual(Local0,0xFF))) {
+    Store(5, Local1)
+    Notify(\_SB.PC14.RR2A, Local0)
+  }
+
+  // PC07 Port 2B PCI-Ex Hot Plug
+  // If PM_PME event clear INTs and AttnBtnPressed
+  If( LEqual(\_SB.PC14.RR2B.PMEP,1) ) {
+    Store(\_SB.PC14.RR2B.PMEH(6), Local0)
+  } else {
+    Store (\_SB.PC14.RR2B.HPEH(6), Local0)
+  }
+  If(Lnot(LEqual(Local0,0xFF))) {
+    Store(6, Local1)
+    Notify(\_SB.PC14.RR2B, Local0)
+  }
+
+  // PC07 Port 2C PCI-Ex Hot Plug
+  // If PM_PME event clear INTs and AttnBtnPressed
+  If( LEqual(\_SB.PC14.RR2C.PMEP,1) ) {
+    Store(\_SB.PC14.RR2C.PMEH(7), Local0)
+  } else {
+    Store (\_SB.PC14.RR2C.HPEH(7), Local0)
+  }
+  If(Lnot(LEqual(Local0,0xFF))) {
+    Store(7, Local1)
+    Notify(\_SB.PC14.RR2C, Local0)
+  }
+
+  // PC07 Port 2D PCI-Ex Hot Plug
+  // If PM_PME event clear INTs and AttnBtnPressed
+  If( LEqual(\_SB.PC14.RR2D.PMEP,1) ) {
+    Store(\_SB.PC14.RR2D.PMEH(8), Local0)
+  } else {
+    Store (\_SB.PC14.RR2D.HPEH(8), Local0)
+  }
+  If(Lnot(LEqual(Local0,0xFF))) {
+    Store(8, Local1)
+    Notify(\_SB.PC14.RR2D, Local0)
+  }
+
+  // PC07 Port 3A PCI-Ex Hot Plug
+  // If PM_PME event clear INTs and AttnBtnPressed
+  If( LEqual(\_SB.PC15.RR3A.PMEP,1) ) {
+    Store(\_SB.PC15.RR3A.PMEH(9), Local0)
+  } else {
+    Store (\_SB.PC15.RR3A.HPEH(9), Local0)
+  }
+  If(Lnot(LEqual(Local0,0xFF))) {
+    Store(9, Local1)
+    Notify(\_SB.PC15.RR3A, Local0)
+  }
+
+  // PC07 Port 3B PCI-Ex Hot Plug
+  // If PM_PME event clear INTs and AttnBtnPressed
+  If( LEqual(\_SB.PC15.RR3B.PMEP,1) ) {
+    Store(\_SB.PC15.RR3B.PMEH(10), Local0)
+  } else {
+    Store (\_SB.PC15.RR3B.HPEH(10), Local0)
+  }
+  If(Lnot(LEqual(Local0,0xFF))) {
+    Store(10, Local1)
+    Notify(\_SB.PC15.RR3B, Local0)
+  }
+
+  // PC07 Port 3C PCI-Ex Hot Plug
+  // If PM_PME event clear INTs and AttnBtnPressed
+  If( LEqual(\_SB.PC15.RR3C.PMEP,1) ) {
+    Store(\_SB.PC15.RR3C.PMEH(11), Local0)
+  } else {
+    Store (\_SB.PC15.RR3C.HPEH(11), Local0)
+  }
+  If(Lnot(LEqual(Local0,0xFF))) {
+    Store(11, Local1)
+    Notify(\_SB.PC15.RR3C, Local0)
+  }
+
+  // PC07 Port 3D PCI-Ex Hot Plug
+  // If PM_PME event clear INTs and AttnBtnPressed
+  If( LEqual(\_SB.PC15.RR3D.PMEP,1) ) {
+    Store(\_SB.PC15.RR3D.PMEH(12), Local0)
+  } else {
+    Store (\_SB.PC15.RR3D.HPEH(12), Local0)
+  }
+  If(Lnot(LEqual(Local0,0xFF))) {
+    Store(12, Local1)
+    Notify(\_SB.PC15.RR3D, Local0)
+  }
+
+  // PC08 Port 4A PCI-Ex Hot Plug
+  // If PM_PME event clear INTs and AttnBtnPressed
+  If( LEqual(\_SB.PC16.RR4A.PMEP,1) ) {
+    Store(\_SB.PC16.RR4A.PMEH(13), Local0)
+  } else {
+    Store (\_SB.PC16.RR4A.HPEH(13), Local0)
+  }
+  If(Lnot(LEqual(Local0,0xFF))) {
+    Store(13, Local1)
+    Notify(\_SB.PC16.RR4A, Local0)
+  }
+
+  // PC08 Port 4B PCI-Ex Hot Plug
+  // If PM_PME event clear INTs and AttnBtnPressed
+  If( LEqual(\_SB.PC16.RR4B.PMEP,1) ) {
+    Store(\_SB.PC16.RR4B.PMEH(14), Local0)
+  } else {
+    Store (\_SB.PC16.RR4B.HPEH(14), Local0)
+  }
+  If(Lnot(LEqual(Local0,0xFF))) {
+    Store(14, Local1)
+    Notify(\_SB.PC16.RR4B, Local0)
+  }
+
+  // PC08 Port 4C PCI-Ex Hot Plug
+  // If PM_PME event clear INTs and AttnBtnPressed
+  If( LEqual(\_SB.PC16.RR4C.PMEP,1) ) {
+    Store(\_SB.PC16.RR4C.PMEH(15), Local0)
+  } else {
+    Store (\_SB.PC16.RR4C.HPEH(15), Local0)
+  }
+  If(Lnot(LEqual(Local0,0xFF))) {
+    Store(15, Local1)
+    Notify(\_SB.PC16.RR4C, Local0)
+  }
+
+  // PC08 Port 4D PCI-Ex Hot Plug
+  // If PM_PME event clear INTs and AttnBtnPressed
+  If( LEqual(\_SB.PC16.RR4D.PMEP,1) ) {
+    Store(\_SB.PC16.RR4D.PMEH(16), Local0)
+  } else {
+    Store (\_SB.PC16.RR4D.HPEH(16), Local0)
+  }
+  If(Lnot(LEqual(Local0,0xFF))) {
+    Store(16, Local1)
+    Notify(\_SB.PC16.RR4D, Local0)
+  }
+
+  // PC08 Port 5A PCI-Ex Hot Plug
+  // If PM_PME event clear INTs and AttnBtnPressed
+  If( LEqual(\_SB.PC17.RR5A.PMEP,1) ) {
+    Store(\_SB.PC17.RR5A.PMEH(17), Local0)
+  } else {
+    Store (\_SB.PC17.RR5A.HPEH(17), Local0)
+  }
+  If(Lnot(LEqual(Local0,0xFF))) {
+    Store(17, Local1)
+    Notify(\_SB.PC17.RR5A, Local0)
+  }
+
+  // PC08 Port 5B PCI-Ex Hot Plug
+  // If PM_PME event clear INTs and AttnBtnPressed
+  If( LEqual(\_SB.PC17.RR5B.PMEP,1) ) {
+    Store(\_SB.PC17.RR5B.PMEH(18), Local0)
+  } else {
+    Store (\_SB.PC17.RR5B.HPEH(18), Local0)
+  }
+  If(Lnot(LEqual(Local0,0xFF))) {
+    Store(18, Local1)
+    Notify(\_SB.PC17.RR5B, Local0)
+  }
+
+  // PC08 Port 5C PCI-Ex Hot Plug
+  // If PM_PME event clear INTs and AttnBtnPressed
+  If( LEqual(\_SB.PC17.RR5C.PMEP,1) ) {
+    Store(\_SB.PC17.RR5C.PMEH(19), Local0)
+  } else {
+    Store (\_SB.PC17.RR5C.HPEH(19), Local0)
+  }
+  If(Lnot(LEqual(Local0,0xFF))) {
+    Store(19, Local1)
+    Notify(\_SB.PC17.RR5C, Local0)
+  }
+
+  // PC08 Port 5D PCI-Ex Hot Plug
+  // If PM_PME event clear INTs and AttnBtnPressed
+  If( LEqual(\_SB.PC17.RR5D.PMEP,1) ) {
+    Store(\_SB.PC17.RR5D.PMEH(20), Local0)
+  } else {
+    Store (\_SB.PC17.RR5D.HPEH(20), Local0)
+  }
+  If(Lnot(LEqual(Local0,0xFF))) {
+    Store(20, Local1)
+    Notify(\_SB.PC17.RR5D, Local0)
+  }
+#endif
+#if MAX_SOCKET > 3
+
+
+  // PC09 Port 1A PCI-Ex Hot Plug
+  // If PM_PME event clear INTs and AttnBtnPressed
+  If( LEqual(\_SB.PC19.SR1A.PMEP,1) ) {
+    Store(\_SB.PC19.SR1A.PMEH(1), Local0)
+  } else {
+    Store (\_SB.PC19.SR1A.HPEH(1), Local0)
+  }
+  If(Lnot(LEqual(Local0,0xFF))) {
+    Store(1, Local1)
+    Notify(\_SB.PC19.SR1A, Local0)
+  }
+
+  // PC09 Port 1B PCI-Ex Hot Plug
+  // If PM_PME event clear INTs and AttnBtnPressed
+  If( LEqual(\_SB.PC19.SR1B.PMEP,1) ) {
+    Store(\_SB.PC19.SR1B.PMEH(2), Local0)
+  } else {
+    Store (\_SB.PC19.SR1B.HPEH(2), Local0)
+  }
+  If(Lnot(LEqual(Local0,0xFF))) {
+    Store(2, Local1)
+    Notify(\_SB.PC19.SR1B, Local0)
+  }
+
+  // PC09 Port 1C PCI-Ex Hot Plug
+  // If PM_PME event clear INTs and AttnBtnPressed
+  If( LEqual(\_SB.PC19.SR1C.PMEP,1) ) {
+    Store(\_SB.PC19.SR1C.PMEH(3), Local0)
+  } else {
+    Store (\_SB.PC19.SR1C.HPEH(3), Local0)
+  }
+  If(Lnot(LEqual(Local0,0xFF))) {
+    Store(3, Local1)
+    Notify(\_SB.PC19.SR1C, Local0)
+  }
+
+  // PC09 Port 1D PCI-Ex Hot Plug
+  // If PM_PME event clear INTs and AttnBtnPressed
+  If( LEqual(\_SB.PC19.SR1D.PMEP,1) ) {
+    Store(\_SB.PC19.SR1D.PMEH(4), Local0)
+  } else {
+    Store (\_SB.PC19.SR1D.HPEH(4), Local0)
+  }
+  If(Lnot(LEqual(Local0,0xFF))) {
+    Store(4, Local1)
+    Notify(\_SB.PC19.SR1D, Local0)
+  }
+
+  // PC10 Port 2A PCI-Ex Hot Plug
+  // If PM_PME event clear INTs and AttnBtnPressed
+  If( LEqual(\_SB.PC20.SR2A.PMEP,1) ) {
+    Store(\_SB.PC20.SR2A.PMEH(5), Local0)
+  } else {
+    Store (\_SB.PC20.SR2A.HPEH(5), Local0)
+  }
+  If(Lnot(LEqual(Local0,0xFF))) {
+    Store(5, Local1)
+    Notify(\_SB.PC20.SR2A, Local0)
+  }
+
+  // PC10 Port 2B PCI-Ex Hot Plug
+  // If PM_PME event clear INTs and AttnBtnPressed
+  If( LEqual(\_SB.PC20.SR2B.PMEP,1) ) {
+    Store(\_SB.PC20.SR2B.PMEH(6), Local0)
+  } else {
+    Store (\_SB.PC20.SR2B.HPEH(6), Local0)
+  }
+  If(Lnot(LEqual(Local0,0xFF))) {
+    Store(6, Local1)
+    Notify(\_SB.PC20.SR2B, Local0)
+  }
+
+  // PC10 Port 2C PCI-Ex Hot Plug
+  // If PM_PME event clear INTs and AttnBtnPressed
+  If( LEqual(\_SB.PC20.SR2C.PMEP,1) ) {
+    Store(\_SB.PC20.SR2C.PMEH(7), Local0)
+  } else {
+    Store (\_SB.PC20.SR2C.HPEH(7), Local0)
+  }
+  If(Lnot(LEqual(Local0,0xFF))) {
+    Store(7, Local1)
+    Notify(\_SB.PC20.SR2C, Local0)
+  }
+
+  // PC10 Port 2D PCI-Ex Hot Plug
+  // If PM_PME event clear INTs and AttnBtnPressed
+  If( LEqual(\_SB.PC20.SR2D.PMEP,1) ) {
+    Store(\_SB.PC20.SR2D.PMEH(8), Local0)
+  } else {
+    Store (\_SB.PC20.SR2D.HPEH(8), Local0)
+  }
+  If(Lnot(LEqual(Local0,0xFF))) {
+    Store(8, Local1)
+    Notify(\_SB.PC20.SR2D, Local0)
+  }
+
+  // PC10 Port 3A PCI-Ex Hot Plug
+  // If PM_PME event clear INTs and AttnBtnPressed
+  If( LEqual(\_SB.PC21.SR3A.PMEP,1) ) {
+    Store(\_SB.PC21.SR3A.PMEH(9), Local0)
+  } else {
+    Store (\_SB.PC21.SR3A.HPEH(9), Local0)
+  }
+  If(Lnot(LEqual(Local0,0xFF))) {
+    Store(9, Local1)
+    Notify(\_SB.PC21.SR3A, Local0)
+  }
+
+  // PC10 Port 3B PCI-Ex Hot Plug
+  // If PM_PME event clear INTs and AttnBtnPressed
+  If( LEqual(\_SB.PC21.SR3B.PMEP,1) ) {
+    Store(\_SB.PC21.SR3B.PMEH(10), Local0)
+  } else {
+    Store (\_SB.PC21.SR3B.HPEH(10), Local0)
+  }
+  If(Lnot(LEqual(Local0,0xFF))) {
+    Store(10, Local1)
+    Notify(\_SB.PC21.SR3B, Local0)
+  }
+
+  // PC10 Port 3C PCI-Ex Hot Plug
+  // If PM_PME event clear INTs and AttnBtnPressed
+  If( LEqual(\_SB.PC21.SR3C.PMEP,1) ) {
+    Store(\_SB.PC21.SR3C.PMEH(11), Local0)
+  } else {
+    Store (\_SB.PC21.SR3C.HPEH(11), Local0)
+  }
+  If(Lnot(LEqual(Local0,0xFF))) {
+    Store(11, Local1)
+    Notify(\_SB.PC21.SR3C, Local0)
+  }
+
+  // PC10 Port 3D PCI-Ex Hot Plug
+  // If PM_PME event clear INTs and AttnBtnPressed
+  If( LEqual(\_SB.PC21.SR3D.PMEP,1) ) {
+    Store(\_SB.PC21.SR3D.PMEH(12), Local0)
+  } else {
+    Store (\_SB.PC21.SR3D.HPEH(12), Local0)
+  }
+  If(Lnot(LEqual(Local0,0xFF))) {
+    Store(12, Local1)
+    Notify(\_SB.PC21.SR3D, Local0)
+  }
+
+  // PC11 Port 4A PCI-Ex Hot Plug
+  // If PM_PME event clear INTs and AttnBtnPressed
+  If( LEqual(\_SB.PC22.SR4A.PMEP,1) ) {
+    Store(\_SB.PC22.SR4A.PMEH(13), Local0)
+  } else {
+    Store (\_SB.PC22.SR4A.HPEH(13), Local0)
+  }
+  If(Lnot(LEqual(Local0,0xFF))) {
+    Store(13, Local1)
+    Notify(\_SB.PC22.SR4A, Local0)
+  }
+
+  // PC11 Port 4B PCI-Ex Hot Plug
+  // If PM_PME event clear INTs and AttnBtnPressed
+  If( LEqual(\_SB.PC22.SR4B.PMEP,1) ) {
+    Store(\_SB.PC22.SR4B.PMEH(14), Local0)
+  } else {
+    Store (\_SB.PC22.SR4B.HPEH(14), Local0)
+  }
+  If(Lnot(LEqual(Local0,0xFF))) {
+    Store(14, Local1)
+    Notify(\_SB.PC22.SR4B, Local0)
+  }
+
+  // PC11 Port 4C PCI-Ex Hot Plug
+  // If PM_PME event clear INTs and AttnBtnPressed
+  If( LEqual(\_SB.PC22.SR4C.PMEP,1) ) {
+    Store(\_SB.PC22.SR4C.PMEH(15), Local0)
+  } else {
+    Store (\_SB.PC22.SR4C.HPEH(15), Local0)
+  }
+  If(Lnot(LEqual(Local0,0xFF))) {
+    Store(15, Local1)
+    Notify(\_SB.PC22.SR4C, Local0)
+  }
+
+  // PC11 Port 4D PCI-Ex Hot Plug
+  // If PM_PME event clear INTs and AttnBtnPressed
+  If( LEqual(\_SB.PC22.SR4D.PMEP,1) ) {
+    Store(\_SB.PC22.SR4D.PMEH(16), Local0)
+  } else {
+    Store (\_SB.PC22.SR4D.HPEH(16), Local0)
+  }
+  If(Lnot(LEqual(Local0,0xFF))) {
+    Store(16, Local1)
+    Notify(\_SB.PC22.SR4D, Local0)
+  }
+
+  // PC11 Port 5A PCI-Ex Hot Plug
+  // If PM_PME event clear INTs and AttnBtnPressed
+  If( LEqual(\_SB.PC23.SR5A.PMEP,1) ) {
+    Store(\_SB.PC23.SR5A.PMEH(17), Local0)
+  } else {
+    Store (\_SB.PC23.SR5A.HPEH(17), Local0)
+  }
+  If(Lnot(LEqual(Local0,0xFF))) {
+    Store(17, Local1)
+    Notify(\_SB.PC23.SR5A, Local0)
+  }
+
+  // PC11 Port 5B PCI-Ex Hot Plug
+  // If PM_PME event clear INTs and AttnBtnPressed
+  If( LEqual(\_SB.PC23.SR5B.PMEP,1) ) {
+    Store(\_SB.PC23.SR5B.PMEH(18), Local0)
+  } else {
+    Store (\_SB.PC23.SR5B.HPEH(18), Local0)
+  }
+  If(Lnot(LEqual(Local0,0xFF))) {
+    Store(18, Local1)
+    Notify(\_SB.PC23.SR5B, Local0)
+  }
+
+  // PC11 Port 5C PCI-Ex Hot Plug
+  // If PM_PME event clear INTs and AttnBtnPressed
+  If( LEqual(\_SB.PC23.SR5C.PMEP,1) ) {
+    Store(\_SB.PC23.SR5C.PMEH(19), Local0)
+  } else {
+    Store (\_SB.PC23.SR5C.HPEH(19), Local0)
+  }
+  If(Lnot(LEqual(Local0,0xFF))) {
+    Store(19, Local1)
+    Notify(\_SB.PC23.SR5C, Local0)
+  }
+
+  // PC11 Port 5D PCI-Ex Hot Plug
+  // If PM_PME event clear INTs and AttnBtnPressed
+  If( LEqual(\_SB.PC23.SR5D.PMEP,1) ) {
+    Store(\_SB.PC23.SR5D.PMEH(20), Local0)
+  } else {
+    Store (\_SB.PC23.SR5D.HPEH(20), Local0)
+  }
+  If(Lnot(LEqual(Local0,0xFF))) {
+    Store(20, Local1)
+    Notify(\_SB.PC23.SR5D, Local0)
+  }
+#endif
+
+  //If a hotplug event was serviced check if this was generated by PM_PME
+  If (Lnot (LEqual(Local0, 0))) {
+    //Clear the status bit 16 of PMEStatus
+    //Clear the PME Pending bit 17 of PMEStatus
+    If( LEqual(Local1, 1)) {
+      Store(1, \_SB.PC01.BR1A.PMES)
+      Store(1, \_SB.PC01.BR1A.PMEP)
+    }
+    If( LEqual(Local1, 2)) {
+      Store(1, \_SB.PC01.BR1B.PMES)
+      Store(1, \_SB.PC01.BR1B.PMEP)
+    }
+    If( LEqual(Local1, 3)) {
+      Store(1, \_SB.PC01.BR1C.PMES)
+      Store(1, \_SB.PC01.BR1C.PMEP)
+    }
+    If( LEqual(Local1, 4)) {
+      Store(1, \_SB.PC01.BR1D.PMES)
+      Store(1, \_SB.PC01.BR1D.PMEP)
+    }
+
+    If( LEqual(Local1, 5)) {
+      Store(1, \_SB.PC02.BR2A.PMES)
+      Store(1, \_SB.PC02.BR2A.PMEP)
+    }
+    If( LEqual(Local1, 6)) {
+      Store(1, \_SB.PC02.BR2B.PMES)
+      Store(1, \_SB.PC02.BR2B.PMEP)
+    }
+    If( LEqual(Local1, 7)) {
+      Store(1, \_SB.PC02.BR2C.PMES)
+      Store(1, \_SB.PC02.BR2C.PMEP)
+    }
+    If( LEqual(Local1, 8)) {
+      Store(1, \_SB.PC02.BR2D.PMES)
+      Store(1, \_SB.PC02.BR2D.PMEP)
+    }
+    If( LEqual(Local1, 9)) {
+      Store(1, \_SB.PC03.BR3A.PMES)
+      Store(1, \_SB.PC03.BR3A.PMEP)
+    }
+    If( LEqual(Local1, 10)) {
+      Store(1, \_SB.PC03.BR3B.PMES)
+      Store(1, \_SB.PC03.BR3B.PMEP)
+    }
+    If( LEqual(Local1, 11)) {
+      Store(1, \_SB.PC03.BR3C.PMES)
+      Store(1, \_SB.PC03.BR3C.PMEP)
+    }
+    If( LEqual(Local1, 12)) {
+      Store(1, \_SB.PC03.BR3D.PMES)
+      Store(1, \_SB.PC03.BR3D.PMEP)
+    }
+    If( LEqual(Local1, 13)) {
+      Store(1, \_SB.PC04.BR4A.PMES)
+      Store(1, \_SB.PC04.BR4A.PMEP)
+    }
+    If( LEqual(Local1, 14)) {
+      Store(1, \_SB.PC04.BR4B.PMES)
+      Store(1, \_SB.PC04.BR4B.PMEP)
+    }
+    If( LEqual(Local1, 15)) {
+      Store(1, \_SB.PC04.BR4C.PMES)
+      Store(1, \_SB.PC04.BR4C.PMEP)
+    }
+    If( LEqual(Local1, 16)) {
+      Store(1, \_SB.PC04.BR4D.PMES)
+      Store(1, \_SB.PC04.BR4D.PMEP)
+    }
+    If( LEqual(Local1, 17)) {
+      Store(1, \_SB.PC05.BR5A.PMES)
+      Store(1, \_SB.PC05.BR5A.PMEP)
+    }
+    If( LEqual(Local1, 18)) {
+      Store(1, \_SB.PC05.BR5B.PMES)
+      Store(1, \_SB.PC05.BR5B.PMEP)
+    }
+    If( LEqual(Local1, 19)) {
+      Store(1, \_SB.PC05.BR5C.PMES)
+      Store(1, \_SB.PC05.BR5C.PMEP)
+    }
+    If( LEqual(Local1, 20)) {
+      Store(1, \_SB.PC05.BR5D.PMES)
+      Store(1, \_SB.PC05.BR5D.PMEP)
+    }
+
+#if MAX_SOCKET > 1
+    If( LEqual(Local1, 1)) {
+      Store(1, \_SB.PC07.QR1A.PMES)
+      Store(1, \_SB.PC07.QR1A.PMEP)
+    }
+    If( LEqual(Local1, 2)) {
+      Store(1, \_SB.PC07.QR1B.PMES)
+      Store(1, \_SB.PC07.QR1B.PMEP)
+    }
+    If( LEqual(Local1, 3)) {
+      Store(1, \_SB.PC07.QR1C.PMES)
+      Store(1, \_SB.PC07.QR1C.PMEP)
+    }
+    If( LEqual(Local1, 4)) {
+      Store(1, \_SB.PC07.QR1D.PMES)
+      Store(1, \_SB.PC07.QR1D.PMEP)
+    }
+    If( LEqual(Local1, 5)) {
+      Store(1, \_SB.PC08.QR2A.PMES)
+      Store(1, \_SB.PC08.QR2A.PMEP)
+    }
+    If( LEqual(Local1, 6)) {
+      Store(1, \_SB.PC08.QR2B.PMES)
+      Store(1, \_SB.PC08.QR2B.PMEP)
+    }
+    If( LEqual(Local1, 7)) {
+      Store(1, \_SB.PC08.QR2C.PMES)
+      Store(1, \_SB.PC08.QR2C.PMEP)
+    }
+    If( LEqual(Local1, 8)) {
+      Store(1, \_SB.PC08.QR2D.PMES)
+      Store(1, \_SB.PC08.QR2D.PMEP)
+    }
+    If( LEqual(Local1, 9)) {
+      Store(1, \_SB.PC09.QR3A.PMES)
+      Store(1, \_SB.PC09.QR3A.PMEP)
+    }
+    If( LEqual(Local1, 10)) {
+      Store(1, \_SB.PC09.QR3B.PMES)
+      Store(1, \_SB.PC09.QR3B.PMEP)
+    }
+    If( LEqual(Local1, 11)) {
+      Store(1, \_SB.PC09.QR3C.PMES)
+      Store(1, \_SB.PC09.QR3C.PMEP)
+    }
+    If( LEqual(Local1, 12)) {
+      Store(1, \_SB.PC09.QR3D.PMES)
+      Store(1, \_SB.PC09.QR3D.PMEP)
+    }
+    If( LEqual(Local1, 13)) {
+      Store(1, \_SB.PC10.QR4A.PMES)
+      Store(1, \_SB.PC10.QR4A.PMEP)
+    }
+    If( LEqual(Local1, 14)) {
+      Store(1, \_SB.PC10.QR4B.PMES)
+      Store(1, \_SB.PC10.QR4B.PMEP)
+    }
+    If( LEqual(Local1, 15)) {
+      Store(1, \_SB.PC10.QR4C.PMES)
+      Store(1, \_SB.PC10.QR4C.PMEP)
+    }
+    If( LEqual(Local1, 16)) {
+      Store(1, \_SB.PC10.QR4D.PMES)
+      Store(1, \_SB.PC10.QR4D.PMEP)
+    }
+    If( LEqual(Local1, 17)) {
+      Store(1, \_SB.PC11.QR5A.PMES)
+      Store(1, \_SB.PC11.QR5A.PMEP)
+    }
+    If( LEqual(Local1, 18)) {
+      Store(1, \_SB.PC11.QR5B.PMES)
+      Store(1, \_SB.PC11.QR5B.PMEP)
+    }
+    If( LEqual(Local1, 19)) {
+      Store(1, \_SB.PC11.QR5C.PMES)
+      Store(1, \_SB.PC11.QR5C.PMEP)
+    }
+    If( LEqual(Local1, 20)) {
+      Store(1, \_SB.PC11.QR5D.PMES)
+      Store(1, \_SB.PC11.QR5D.PMEP)
+    }
+#endif
+#if MAX_SOCKET > 2
+
+    If( LEqual(Local1, 1)) {
+      Store(1, \_SB.PC13.RR1A.PMES)
+      Store(1, \_SB.PC13.RR1A.PMEP)
+    }
+    If( LEqual(Local1, 2)) {
+      Store(1, \_SB.PC13.RR1B.PMES)
+      Store(1, \_SB.PC13.RR1B.PMEP)
+    }
+    If( LEqual(Local1, 3)) {
+      Store(1, \_SB.PC13.RR1C.PMES)
+      Store(1, \_SB.PC13.RR1C.PMEP)
+    }
+    If( LEqual(Local1, 4)) {
+      Store(1, \_SB.PC13.RR1D.PMES)
+      Store(1, \_SB.PC13.RR1D.PMEP)
+    }
+    If( LEqual(Local1, 5)) {
+      Store(1, \_SB.PC14.RR2A.PMES)
+      Store(1, \_SB.PC14.RR2A.PMEP)
+    }
+    If( LEqual(Local1, 6)) {
+      Store(1, \_SB.PC14.RR2B.PMES)
+      Store(1, \_SB.PC14.RR2B.PMEP)
+    }
+    If( LEqual(Local1, 7)) {
+      Store(1, \_SB.PC14.RR2C.PMES)
+      Store(1, \_SB.PC14.RR2C.PMEP)
+    }
+    If( LEqual(Local1, 8)) {
+      Store(1, \_SB.PC14.RR2D.PMES)
+      Store(1, \_SB.PC14.RR2D.PMEP)
+    }
+    If( LEqual(Local1, 9)) {
+      Store(1, \_SB.PC15.RR3A.PMES)
+      Store(1, \_SB.PC15.RR3A.PMEP)
+    }
+    If( LEqual(Local1, 10)) {
+      Store(1, \_SB.PC15.RR3B.PMES)
+      Store(1, \_SB.PC15.RR3B.PMEP)
+    }
+    If( LEqual(Local1, 11)) {
+      Store(1, \_SB.PC15.RR3C.PMES)
+      Store(1, \_SB.PC15.RR3C.PMEP)
+    }
+    If( LEqual(Local1, 12)) {
+      Store(1, \_SB.PC15.RR3D.PMES)
+      Store(1, \_SB.PC15.RR3D.PMEP)
+    }
+    If( LEqual(Local1, 13)) {
+      Store(1, \_SB.PC16.RR4A.PMES)
+      Store(1, \_SB.PC16.RR4A.PMEP)
+    }
+    If( LEqual(Local1, 14)) {
+      Store(1, \_SB.PC16.RR4B.PMES)
+      Store(1, \_SB.PC16.RR4B.PMEP)
+    }
+    If( LEqual(Local1, 15)) {
+      Store(1, \_SB.PC16.RR4C.PMES)
+      Store(1, \_SB.PC16.RR4C.PMEP)
+    }
+    If( LEqual(Local1, 16)) {
+      Store(1, \_SB.PC16.RR4D.PMES)
+      Store(1, \_SB.PC16.RR4D.PMEP)
+    }
+    If( LEqual(Local1, 17)) {
+      Store(1, \_SB.PC17.RR5A.PMES)
+      Store(1, \_SB.PC17.RR5A.PMEP)
+    }
+    If( LEqual(Local1, 18)) {
+      Store(1, \_SB.PC17.RR5B.PMES)
+      Store(1, \_SB.PC17.RR5B.PMEP)
+    }
+    If( LEqual(Local1, 19)) {
+      Store(1, \_SB.PC17.RR5C.PMES)
+      Store(1, \_SB.PC17.RR5C.PMEP)
+    }
+    If( LEqual(Local1, 20)) {
+      Store(1, \_SB.PC17.RR5D.PMES)
+      Store(1, \_SB.PC17.RR5D.PMEP)
+    }
+#endif
+#if MAX_SOCKET > 3
+
+    If( LEqual(Local1, 1)) {
+      Store(1, \_SB.PC19.SR1A.PMES)
+      Store(1, \_SB.PC19.SR1A.PMEP)
+    }
+    If( LEqual(Local1, 2)) {
+      Store(1, \_SB.PC19.SR1B.PMES)
+      Store(1, \_SB.PC19.SR1B.PMEP)
+    }
+    If( LEqual(Local1, 3)) {
+      Store(1, \_SB.PC19.SR1C.PMES)
+      Store(1, \_SB.PC19.SR1C.PMEP)
+    }
+    If( LEqual(Local1, 4)) {
+      Store(1, \_SB.PC19.SR1D.PMES)
+      Store(1, \_SB.PC19.SR1D.PMEP)
+    }
+    If( LEqual(Local1, 5)) {
+      Store(1, \_SB.PC20.SR2A.PMES)
+      Store(1, \_SB.PC20.SR2A.PMEP)
+    }
+    If( LEqual(Local1, 6)) {
+      Store(1, \_SB.PC20.SR2B.PMES)
+      Store(1, \_SB.PC20.SR2B.PMEP)
+    }
+    If( LEqual(Local1, 7)) {
+      Store(1, \_SB.PC20.SR2C.PMES)
+      Store(1, \_SB.PC20.SR2C.PMEP)
+    }
+    If( LEqual(Local1, 8)) {
+      Store(1, \_SB.PC20.SR2D.PMES)
+      Store(1, \_SB.PC20.SR2D.PMEP)
+    }
+    If( LEqual(Local1, 9)) {
+      Store(1, \_SB.PC21.SR3A.PMES)
+      Store(1, \_SB.PC21.SR3A.PMEP)
+    }
+    If( LEqual(Local1, 10)) {
+      Store(1, \_SB.PC21.SR3B.PMES)
+      Store(1, \_SB.PC21.SR3B.PMEP)
+    }
+    If( LEqual(Local1, 11)) {
+      Store(1, \_SB.PC21.SR3C.PMES)
+      Store(1, \_SB.PC21.SR3C.PMEP)
+    }
+    If( LEqual(Local1, 12)) {
+      Store(1, \_SB.PC21.SR3D.PMES)
+      Store(1, \_SB.PC21.SR3D.PMEP)
+    }
+    If( LEqual(Local1, 13)) {
+      Store(1, \_SB.PC22.SR4A.PMES)
+      Store(1, \_SB.PC22.SR4A.PMEP)
+    }
+    If( LEqual(Local1, 14)) {
+      Store(1, \_SB.PC22.SR4B.PMES)
+      Store(1, \_SB.PC22.SR4B.PMEP)
+    }
+    If( LEqual(Local1, 15)) {
+      Store(1, \_SB.PC22.SR4C.PMES)
+      Store(1, \_SB.PC22.SR4C.PMEP)
+    }
+    If( LEqual(Local1, 16)) {
+      Store(1, \_SB.PC22.SR4D.PMES)
+      Store(1, \_SB.PC22.SR4D.PMEP)
+    }
+    If( LEqual(Local1, 17)) {
+      Store(1, \_SB.PC23.SR5A.PMES)
+      Store(1, \_SB.PC23.SR5A.PMEP)
+    }
+    If( LEqual(Local1, 18)) {
+      Store(1, \_SB.PC23.SR5B.PMES)
+      Store(1, \_SB.PC23.SR5B.PMEP)
+    }
+    If( LEqual(Local1, 19)) {
+      Store(1, \_SB.PC23.SR5C.PMES)
+      Store(1, \_SB.PC23.SR5C.PMEP)
+    }
+    If( LEqual(Local1, 20)) {
+      Store(1, \_SB.PC23.SR5D.PMES)
+      Store(1, \_SB.PC23.SR5D.PMEP)
+    }
+#endif
+    Store(0x01,PEES)               //Clear bit 9 of Status
+    Store(0x00,PMEE)               //Clear bit 9 of GPE0_EN
+  }
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/IioRootBridge.asi b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/IioRootBridge.asi
new file mode 100644
index 0000000000..3126e29de7
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/IioRootBridge.asi
@@ -0,0 +1,328 @@
+/** @file
+
+  @copyright
+  Copyright 2008 - 2020 Intel Corporation. <BR>
+
+  SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+  External (DBGM, FieldUnitObj)
+  Name (SUPP, 0)
+  Name (CTRL, 0)
+
+  //
+  // _BBN is ACPI method called by OS to read PCI base bus number for IIO stack.
+  //
+  Method(_BBN, 0, NotSerialized)
+  {
+    Return(CONCATENATE3(BB, SOCKET, STACK))
+  }
+
+  //
+  // _PXM is ACPI method called by OS to read Proximity Domain (aka NUMA Node) where IIO stack belongs to.
+  // Without SNC (Sub-NUMA Cluster) proximity domain is socket. If two SNC domains are enabled report
+  // PCI stacks 0..2 in the first SNC domain of a socket, and upper stacks in the second SNC domain in this socket.
+  // If four SNC domains are enabled report stacks 0,1 in first domain; stack 2 in second; 3,4 in third;
+  // and upper stacks in the fourth SNC domain in this socket.
+  //
+  Method(_PXM, 0, NotSerialized)
+  {
+    Store(SOCKET, Local0)
+    Switch (ToInteger(CLOD)) { // CLOD contains the number of SNC domains per socekt
+      Case (2) {
+        Multiply(Local0, CLOD, Local0)
+#if   STACK > 2
+        Add(Local0, 1, Local0)
+#endif
+      }
+      Case (4) {
+        Multiply(Local0, CLOD, Local0)
+#if   STACK > 3
+        Add(Local0, 3, Local0)
+#elif STACK > 2
+        Add(Local0, 2, Local0)
+#elif STACK > 0
+        Add(Local0, 1, Local0)
+#endif
+      }
+    }
+    Return(Local0)
+  }
+
+  //
+  // _SEG is ACPI method called by OS to read PCI segment of IIO stack.
+  //
+  Method(_SEG, 0, NotSerialized)
+  {
+    Return(CONCATENATE2(SG0, SOCKET))
+  }
+
+  //
+  // _STA is ACPI method called by OS to read status of ACPI device, IIO stack in this case.
+  //
+  Method(_STA, 0, NotSerialized)
+  { //
+    // Check in processor present bitmap (PRBM) if processor is present, then
+    // in stack present bitmap of given processor (SPBx) if stack is present.
+    //
+    ShiftLeft(1, SOCKET, Local0)
+    If (And(PRBM, Local0)) {
+
+      ShiftLeft(1, CONCATENATE2(0x,STACK), Local1)
+      if (And(CONCATENATE2(SPB, SOCKET), Local1)) {
+        Return(0x0F)
+      }
+    }
+    Return(0x00)
+  }
+
+  Method(_OSC, 4)
+  {
+      //
+      // Create DWord-addressable fields from the capabilities Buffer
+      //
+      CreateDWordField(Arg3,0,CDW1)
+      If (LEqual(Arg0,ToUUID("33DB4D5B-1FF7-401C-9657-7441C03DD766"))) {
+
+        //
+        // Create DWord-addressable fields from the capabilities Buffer
+        //
+        CreateDWordField(Arg3,4,CDW2)
+
+        //
+        // Fill 3rd capability DWORD only if the count is greater than 2.
+        //
+        If(LGreater(Arg2,2)) {
+          CreateDWordField(Arg3,8,CDW3)
+        }
+
+        //
+        // Save Capabilities DWord2 & 3
+        //
+        Store(CDW2,SUPP)
+        Store(CDW3,CTRL)
+
+        //
+        // Only allow native hot plug control if OS supports
+        // * MSI/MSI-X
+        //
+        If (LOr(AHPE, LNotEqual(And(SUPP, 0x10), 0x10))) { // Conditions not met?
+          And(CTRL, Not(1), CTRL) // Mask bit 0 to deny.
+          Sleep(1000)
+        }
+
+        //
+        // Never allow SHPC (no SHPC controller in system), Mask bit 1
+        //
+        And(CTRL, Not(2), CTRL)
+
+
+        //
+        // Select Native PCIe AER/eDPC handling from OS or Firmware First model
+        //
+        If (CondRefOf (\_SB.OSNC))
+        {
+          //in case OS has AER capability.
+          If (LEqual ( And(CTRL, 8), 8)) {
+
+            //in case OS support multiple segment.
+            If (And (SUPP, 8)) {
+              If (CondRefof (^_SEG))
+              {
+                Store (^_SEG, Local0)
+              } Else {
+                Store (0, Local0)
+              }
+            } Else {
+              Store (0, Local0)
+            }
+
+            Store (^_BBN, Local1)
+
+            // if BIOS allows OS take. Do nothing.
+            If (\_SB.OSNC(Local0, Local1, SUPP, CTRL)) {
+
+            } Else {
+              And (CTRL, Not(0x88), CTRL)
+            }
+          } Else {
+            And (CTRL, Not(0x88), CTRL)
+          }
+        } Else {
+          //
+          //Disable Native PCIe AER/eDPC handling from OS, AER is bit3, eDPC is bit7
+          //
+          And (CTRL, Not(0x88), CTRL)
+        }
+
+        If (Not(And(CDW1,1))) { // Query Flag Clear?
+          //
+          // Disable GPEs for Features granted native control
+          //
+          If (And(CTRL, 0x01)) { // Native Hot plug control granted?
+            \_SB.OSCM (_UID)
+            Store (0x01, GPSH)                // Clear Hotplug SCI Enable in GPE0
+          }
+        }
+
+        If (LNotEqual(Arg1,one)) { // unknown revision
+          Or(CDW1,0x08,CDW1)
+        }
+
+        If(LNotEqual(CDW3,CTRL)) { // capabilities bits were masked
+          Or(CDW1,0x10,CDW1)
+        }
+        //
+        // update DWORD3 in the buffer
+        //
+        Store(CTRL,CDW3)
+        Return(Arg3)
+
+      } Else {
+        //
+        // Just indicate unrecognized UUID
+        // Leave it at that
+        //
+        Or (CDW1,4,CDW1)
+        if(LEqual(DBGM, 0x01)){
+          Store (0xEE, IO80)
+        }
+        Return(Arg3)
+      }
+  } // End _OSC
+
+  Name(RBRS, ResourceTemplate() {
+    //RESOURCE_CHUNK1_OFF
+    WORDBusNumber(            //Bus number resource (0); the bridge produces bus numbers for its subsequent buses
+      ResourceProducer,       // bit 0 of general flags is 1
+      MinFixed,               // Range is fixed
+      MaxFixed,               // Range is fixed
+      PosDecode,              // PosDecode
+      0x0000,                 // Granularity (FIX1 - Patched by ACPI Platform Driver during POST)
+      0x0000,                 // Min         (FIX1 - Patched by ACPI Platform Driver during POST)
+      0x0000,                 // Max         (FIX1 - Patched by ACPI Platform Driver during POST)
+      0x0000,                 // Translation
+      0x0001,                 // Range Length = Max-Min+1 (FIX1 - Patched by ACPI Platform Driver during POST)
+            ,
+            ,
+      FIX1                    // DescriptorName populated so iASL outputs offset for it in a .h file
+    )
+
+    //: Off board video card not detected in device manager when it is connected to CPU
+    //RESOURCE_CHUNK5_OFF
+    DWORDMEMORY(              // descriptor for video RAM on video card
+      ResourceProducer,       // bit 0 of general flags is 0
+      PosDecode,
+      MinFixed,               // Range is fixed
+      MaxFixed,               // Range is Fixed
+      Cacheable,
+      ReadWrite,
+      0x00000000,             // Granularity  (FIX5 - Patched by ACPI Platform Driver during POST)
+      0x00000000,             // Min          (FIX5 - Patched by ACPI Platform Driver during POST)
+      0x00000000,             // Max          (FIX5 - Patched by ACPI Platform Driver during POST)
+      0x00000000,             // Translation
+      0x00000000,             // Range Length (FIX5 - Patched by ACPI Platform Driver during POST)
+                ,
+                ,
+      FIX5                    // DescriptorName populated so iASL outputs offset for it in a .h file
+    )
+
+    //RESOURCE_CHUNK2_OFF
+    WORDIO(                   //Consumed-and-produced resource (all I/O above CFF)
+      ResourceProducer,       // bit 0 of general flags is 0
+      MinFixed,               // Range is fixed
+      MaxFixed,               // Range is fixed
+      PosDecode,
+      EntireRange,
+      0x0000,                 // Granularity (FIX2 - Patched by ACPI Platform Driver during POST)
+      0x0000,                 // Min         (FIX2 - Patched by ACPI Platform Driver during POST)
+      0x0000,                 // Max         (FIX2 - Patched by ACPI Platform Driver during POST)
+      0x0000,                 // Translation
+      0x0001,                 // Range Length = Max-Min+1 (FIX2 - Patched by ACPI Platform Driver during POST)
+            ,
+            ,
+      FIX2                    // DescriptorName populated so iASL outputs offset for it in a .h file
+    )
+
+    //Off board video card not detected in device manager when it is connected to CPU
+    //Descriptor for IO space of the video card.
+    WORDIO(                   // Consumed-and-produced resource (all I/O below CF8)
+      ResourceProducer,       // bit 0 of general flags is 0
+      MinFixed,               // Range is fixed
+      MaxFixed,               // Range is fixed
+      PosDecode,
+      EntireRange,
+      0x0000,                 // Granularity (FIX6 - Patched by ACPI Platform Driver during POST)
+      0x0000,                 // Min         (FIX6 - Patched by ACPI Platform Driver during POST)
+      0x0000,                 // Max         (FIX6 - Patched by ACPI Platform Driver during POST)
+      0x0000,                 // Translation
+      0x0000,                 // Range Length
+            ,
+            ,
+      FIX6                    // DescriptorName populated so iASL outputs offset for it in a .h file
+    )
+
+    //Off board video card not detected in device manager when it is connected to CPU
+    //Descriptor for IO space of the video card.
+    WORDIO(                   // Consumed-and-produced resource (all I/O below CF8)
+      ResourceProducer,       // bit 0 of general flags is 0
+      MinFixed,               // Range is fixed
+      MaxFixed,               // Range is fixed
+      PosDecode,
+      EntireRange,
+      0x0000,                 // Granularity (FIX7 - Patched by ACPI Platform Driver during POST)
+      0x0000,                 // Min         (FIX7 - Patched by ACPI Platform Driver during POST)
+      0x0000,                 // Max         (FIX7 - Patched by ACPI Platform Driver during POST)
+      0x0000,                 // Translation
+      0x0000,                 // Range Length
+            ,
+            ,
+      FIX7                    // DescriptorName populated so iASL outputs offset for it in a .h file
+    )
+
+    //
+    // PCI RESOURCE_32bit
+    //
+    DWORDMemory(              // Consumed-and-produced resource(all of memory space)
+      ResourceProducer,       // bit 0 of general flags is 0
+      PosDecode,              // positive Decode
+      MinFixed,               // Range is fixed
+      MaxFixed,               // Range is fixed
+      NonCacheable,
+      ReadWrite,
+      0x00000000,             // Granularity (FIX3 - Patched by ACPI Platform Driver during POST)
+      0x00000000,             // Min (calculated dynamically) (FIX3 - Patched by ACPI Platform Driver during POST)
+      0x00000000,             // Max = 4GB - 1MB  (fwh + fwh alias) (FIX3 - Patched by ACPI Platform Driver during POST)
+      0x00000000,             // Translation
+      0x00000000,             // Range Length (calculated dynamically) (FIX3 - Patched by ACPI Platform Driver during POST)
+                ,
+                ,
+      FIX3                    // DescriptorName populated so iASL outputs offset for it in a .h file
+    )
+
+    //
+    // PCI RESOURCE_64bit
+    //
+    QWORDMemory(              // Consumed-and-produced resource(all of memory space)
+      ResourceProducer,       // bit 0 of general flags is 0
+      PosDecode,              // positive Decode
+      MinFixed,               // Range is fixed
+      MaxFixed,               // Range is fixed
+      NonCacheable,
+      ReadWrite,
+      0x00000000000,          // Granularity (FIX4 - Patched by ACPI Platform Driver during POST)
+      0x00000000000,          // Min (calculated dynamically) (FIX4 - Patched by ACPI Platform Driver during POST)
+      0x00000000000,          // Max = 4GB - 1MB  (fwh + fwh alias) (FIX4 - Patched by ACPI Platform Driver during POST)
+      0x00000000000,          // Translation
+      0x00000000000,          // Range Length (calculated dynamically) (FIX4 - Patched by ACPI Platform Driver during POST)
+                   ,
+                   ,
+      FIX4                    // DescriptorName populated so iASL outputs offset for it in a .h file
+    )
+  }) // end of PRXX Buffer
+
+    // Current resource template return
+  Method(_CRS, 0x0, NotSerialized)
+  {
+    Return(RBRS)
+  }
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/IioRootBridgeIcx.asi b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/IioRootBridgeIcx.asi
new file mode 100644
index 0000000000..1dc42a9ca8
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/IioRootBridgeIcx.asi
@@ -0,0 +1,270 @@
+/** @file
+
+  @copyright
+  Copyright 2008 - 2020 Intel Corporation. <BR>
+
+  SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#include "MaxSocket.h"
+
+    Method(OSCM, 1) {
+
+     if (LEqual(Arg0, 1)) {  // PC01
+        \_SB.PC01.BR1A.OSHP ()
+        \_SB.PC01.BR1B.OSHP ()
+        \_SB.PC01.BR1C.OSHP ()
+        \_SB.PC01.BR1D.OSHP ()
+      }
+     if (LEqual(Arg0, 2)) {  // PC01
+        \_SB.PC02.BR2A.OSHP ()
+        \_SB.PC02.BR2B.OSHP ()
+        \_SB.PC02.BR2C.OSHP ()
+        \_SB.PC02.BR2D.OSHP ()
+      }
+    if (LEqual(Arg0, 3)) {  // PC02
+        \_SB.PC03.BR3A.OSHP ()
+        \_SB.PC03.BR3B.OSHP ()
+        \_SB.PC03.BR3C.OSHP ()
+        \_SB.PC03.BR3D.OSHP ()
+      }
+    if (LEqual(Arg0, 4)) {  // PC02
+        \_SB.PC04.BR4A.OSHP ()
+        \_SB.PC04.BR4B.OSHP ()
+        \_SB.PC04.BR4C.OSHP ()
+        \_SB.PC04.BR4D.OSHP ()
+      }
+    if (LEqual(Arg0, 5)) {  // PC01
+        \_SB.PC05.BR5A.OSHP ()
+        \_SB.PC05.BR5B.OSHP ()
+        \_SB.PC05.BR5C.OSHP ()
+        \_SB.PC05.BR5D.OSHP ()
+      }
+
+#if MAX_SOCKET > 1
+      if (LEqual(Arg0, 7)) {  // PC07
+        \_SB.PC07.QR1A.OSHP ()
+        \_SB.PC07.QR1B.OSHP ()
+        \_SB.PC07.QR1C.OSHP ()
+        \_SB.PC07.QR1D.OSHP ()
+      }
+      if (LEqual(Arg0, 8)) {  // PC08
+        \_SB.PC08.QR2A.OSHP ()
+        \_SB.PC08.QR2B.OSHP ()
+        \_SB.PC08.QR2C.OSHP ()
+        \_SB.PC08.QR2D.OSHP ()
+
+      }
+      if (LEqual(Arg0, 9)) {  // PC09
+        \_SB.PC09.QR3A.OSHP ()
+        \_SB.PC09.QR3B.OSHP ()
+        \_SB.PC09.QR3C.OSHP ()
+        \_SB.PC09.QR3D.OSHP ()
+
+      }
+      if (LEqual(Arg0, 10)) {  // PC10
+
+        \_SB.PC10.QR4A.OSHP ()
+        \_SB.PC10.QR4B.OSHP ()
+        \_SB.PC10.QR4C.OSHP ()
+        \_SB.PC10.QR4D.OSHP ()
+
+      }
+      if (LEqual(Arg0, 11)) {  // PC11
+        \_SB.PC11.QR5A.OSHP ()
+        \_SB.PC11.QR5B.OSHP ()
+        \_SB.PC11.QR5C.OSHP ()
+        \_SB.PC11.QR5D.OSHP ()
+      }
+
+#endif
+
+#if MAX_SOCKET > 2
+      if (LEqual(Arg0, 13)) {  // PC13
+        \_SB.PC13.RR1A.OSHP ()
+        \_SB.PC13.RR1B.OSHP ()
+        \_SB.PC13.RR1C.OSHP ()
+        \_SB.PC13.RR1D.OSHP ()
+      }
+      if (LEqual(Arg0, 14)) {  // PC14
+        \_SB.PC14.RR2A.OSHP ()
+        \_SB.PC14.RR2B.OSHP ()
+        \_SB.PC14.RR2C.OSHP ()
+        \_SB.PC14.RR2D.OSHP ()
+
+      }
+      if (LEqual(Arg0, 15)) {  // PC15
+        \_SB.PC15.RR3A.OSHP ()
+        \_SB.PC15.RR3B.OSHP ()
+        \_SB.PC15.RR3C.OSHP ()
+        \_SB.PC15.RR3D.OSHP ()
+
+      }
+      if (LEqual(Arg0, 16)) {  // PC16
+
+        \_SB.PC16.RR4A.OSHP ()
+        \_SB.PC16.RR4B.OSHP ()
+        \_SB.PC16.RR4C.OSHP ()
+        \_SB.PC16.RR4D.OSHP ()
+
+      }
+      if (LEqual(Arg0, 17)) {  // PC17
+        \_SB.PC17.RR5A.OSHP ()
+        \_SB.PC17.RR5B.OSHP ()
+        \_SB.PC17.RR5C.OSHP ()
+        \_SB.PC17.RR5D.OSHP ()
+      }
+
+#endif
+
+
+#if MAX_SOCKET > 3
+      if (LEqual(Arg0, 19)) {  // PC19
+        \_SB.PC19.SR1A.OSHP ()
+        \_SB.PC19.SR1B.OSHP ()
+        \_SB.PC19.SR1C.OSHP ()
+        \_SB.PC19.SR1D.OSHP ()
+      }
+      if (LEqual(Arg0, 20)) {  // PC20
+        \_SB.PC20.SR2A.OSHP ()
+        \_SB.PC20.SR2B.OSHP ()
+        \_SB.PC20.SR2C.OSHP ()
+        \_SB.PC20.SR2D.OSHP ()
+
+      }
+      if (LEqual(Arg0, 21)) {  // PC21
+        \_SB.PC21.SR3A.OSHP ()
+        \_SB.PC21.SR3B.OSHP ()
+        \_SB.PC21.SR3C.OSHP ()
+        \_SB.PC21.SR3D.OSHP ()
+
+      }
+      if (LEqual(Arg0, 22)) {  // PC22
+
+        \_SB.PC22.SR4A.OSHP ()
+        \_SB.PC22.SR4B.OSHP ()
+        \_SB.PC22.SR4C.OSHP ()
+        \_SB.PC22.SR4D.OSHP ()
+
+      }
+      if (LEqual(Arg0, 23)) {  // PC23
+        \_SB.PC23.SR5A.OSHP ()
+        \_SB.PC23.SR5B.OSHP ()
+        \_SB.PC23.SR5C.OSHP ()
+        \_SB.PC23.SR5D.OSHP ()
+      }
+
+#endif
+#if MAX_SOCKET > 4
+      if (LEqual(Arg0,25)) {  // PC12
+        \_SB.PC25.CR1A.OSHP ()
+        \_SB.PC25.CR1B.OSHP ()
+        \_SB.PC25.CR1C.OSHP ()
+        \_SB.PC25.CR1D.OSHP ()
+      }
+      if (LEqual(Arg0,26)) {  // PC13
+        \_SB.PC26.CR2A.OSHP ()
+        \_SB.PC26.CR2B.OSHP ()
+        \_SB.PC26.CR2C.OSHP ()
+        \_SB.PC26.CR2D.OSHP ()
+
+      }
+     if (LEqual(Arg0,27)) {  // PC12
+        \_SB.PC27.CR3A.OSHP ()
+        \_SB.PC27.CR3B.OSHP ()
+        \_SB.PC27.CR3C.OSHP ()
+        \_SB.PC27.CR3D.OSHP ()
+      }
+      if (LEqual(Arg0,28)) {  // PC13
+        \_SB.PC28.CR4A.OSHP ()
+        \_SB.PC28.CR4B.OSHP ()
+        \_SB.PC28.CR4C.OSHP ()
+        \_SB.PC28.CR4D.OSHP ()
+      }
+      if (LEqual(Arg0,29)) {  // PC14
+        \_SB.PC29.CR5A.OSHP ()
+        \_SB.PC29.CR5B.OSHP ()
+        \_SB.PC29.CR5C.OSHP ()
+        \_SB.PC29.CR5D.OSHP ()
+      }
+#endif
+#if MAX_SOCKET > 5
+      if (LEqual(Arg0,31)) {  // PC15
+        \_SB.PC31.TR1A.OSHP ()
+        \_SB.PC31.TR1B.OSHP ()
+        \_SB.PC31.TR1C.OSHP ()
+        \_SB.PC31.TR1D.OSHP ()
+      }
+      if (LEqual(Arg0,32)) {  // PC16
+        \_SB.PC32.TR2A.OSHP ()
+        \_SB.PC32.TR2B.OSHP ()
+        \_SB.PC32.TR2C.OSHP ()
+        \_SB.PC32.TR2D.OSHP ()
+
+      }
+      if (LEqual(Arg0,33)) {  // PC15
+        \_SB.PC33.TR3A.OSHP ()
+        \_SB.PC33.TR3B.OSHP ()
+        \_SB.PC33.TR3C.OSHP ()
+        \_SB.PC33.TR3D.OSHP ()
+      }
+      if (LEqual(Arg0,34)) {  // PC16
+        \_SB.PC34.TR4A.OSHP ()
+        \_SB.PC34.TR4B.OSHP ()
+        \_SB.PC34.TR4C.OSHP ()
+        \_SB.PC34.TR4D.OSHP ()
+      }
+      if (LEqual(Arg0,35)) {  // PC17
+        \_SB.PC35.TR5A.OSHP ()
+        \_SB.PC35.TR5B.OSHP ()
+        \_SB.PC35.TR5C.OSHP ()
+        \_SB.PC35.TR5D.OSHP ()
+      }
+#endif
+#if MAX_SOCKET > 6
+      if (LEqual(Arg0,37)) {  // PC37
+        \_SB.PC37.UR1A.OSHP ()
+        \_SB.PC37.UR1B.OSHP ()
+        \_SB.PC37.UR1C.OSHP ()
+        \_SB.PC37.UR1D.OSHP ()
+      }
+      if (LEqual(Arg0,38)) {  // PC38
+        \_SB.PC38.UR2A.OSHP ()
+        \_SB.PC38.UR2B.OSHP ()
+        \_SB.PC38.UR2C.OSHP ()
+        \_SB.PC38.UR2D.OSHP ()
+
+      }
+      if (LEqual(Arg0,39)) {  // PC39
+        \_SB.PC39.UR3A.OSHP ()
+        \_SB.PC39.UR3B.OSHP ()
+        \_SB.PC39.UR3C.OSHP ()
+        \_SB.PC39.UR3D.OSHP ()
+      }
+      if (LEqual(Arg0,40)) {  // PC40
+        \_SB.PC40.UR4A.OSHP ()
+        \_SB.PC40.UR4B.OSHP ()
+        \_SB.PC40.UR4C.OSHP ()
+        \_SB.PC40.UR4D.OSHP ()
+      }
+      if (LEqual(Arg0,41)) {  // PC41
+
+        \_SB.PC41.UR5A.OSHP ()
+        \_SB.PC41.UR5B.OSHP ()
+        \_SB.PC41.UR5C.OSHP ()
+        \_SB.PC41.UR5D.OSHP ()
+      }
+#endif
+#if MAX_SOCKET > 7
+      if (LEqual(Arg0,43)) {  // PC43
+        \_SB.PC43.VR1A.OSHP ()
+        \_SB.PC43.VR1B.OSHP ()
+        \_SB.PC43.VR1C.OSHP ()
+        \_SB.PC43.VR1D.OSHP ()
+      }
+      if (LEqual(Arg0,44)) {  // PC44
+      }
+      if (LEqual(Arg0,45)) {  // PC45
+      }
+#endif
+    } // end of OSCM
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/Mother.asi b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/Mother.asi
new file mode 100644
index 0000000000..90dbfabcbe
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/Mother.asi
@@ -0,0 +1,164 @@
+/** @file
+
+  @copyright
+  Copyright 2001 - 2020 Intel Corporation. <BR>
+
+  SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+Device (DMAC) {
+  Name (_HID, EISAID("PNP0200"))
+  Name (_CRS,ResourceTemplate() {
+    IO(Decode16, 0x0, 0x0, 0, 0x10)
+    IO(Decode16, 0x81, 0x81, 0, 0x3)
+    IO(Decode16, 0x87, 0x87, 0, 0x1)
+    IO(Decode16, 0x89, 0x89, 0, 0x3)
+    IO(Decode16, 0x8f, 0x8f, 0, 0x1)
+    IO(Decode16, 0xc0, 0xc0, 0, 0x20)
+    DMA(Compatibility,NotBusMaster,Transfer8) {4}
+  })
+}
+
+Device (RTC) {
+  Name (_HID,EISAID("PNP0B00"))
+  Name (_CRS,ResourceTemplate() {
+    IO(Decode16,0x70,0x70,0x01,0x02)
+    IO(Decode16,0x72,0x72,0x01,0x02)
+    IO(Decode16,0x74,0x74,0x01,0x04)
+    IRQNoFlags(){8}
+  })
+}
+
+Device (PIC) {
+  Name (_HID,EISAID("PNP0000"))
+  Name (_CRS,ResourceTemplate() {
+    IO(Decode16,0x20,0x20,0x01,0x1E)        // length of 1Eh includes all aliases
+    IO(Decode16,0xA0,0xA0,0x01,0x1E)
+    IO(Decode16,0x4D0,0x4D0,0x01,0x02)
+  })
+}
+
+Device (FPU) {
+  Name (_HID,EISAID("PNP0C04"))
+  Name (_CRS,ResourceTemplate() {
+    IO(Decode16,0xF0,0xF0,0x01,0x1)
+    IRQNoFlags(){13}
+  })
+}
+
+Device(TMR)
+{
+  Name(_HID,EISAID("PNP0100"))
+
+  Name(_CRS,ResourceTemplate() {
+    IO(Decode16,0x40,0x40,0x01,0x04)
+    IO(Decode16,0x50,0x50,0x01,0x04)        // alias
+    IRQNoFlags(){0}
+  })
+}
+
+Device (SPKR) {
+  Name (_HID,EISAID("PNP0800"))
+  Name (_CRS,ResourceTemplate() {
+    IO(Decode16,0x61,0x61,0x01,0x01)
+  })
+}
+
+//
+// all "PNP0C02" devices- pieces that don't fit anywhere else
+//
+Device(XTRA) {
+  Name(_HID,EISAID("PNP0C02"))        // Generic motherboard devices
+  Name(_CRS,
+    ResourceTemplate() {
+      IO(Decode16,0x500,0x500,0x01,0xFF)                  // ACPI base
+      IO(Decode16,0x400,0x400,0x01,0x20)                  // PM IO, ICH5
+
+      //
+      // Resource conflict with COM Port
+      //
+      //IO(Decode16,0x680,0x680,0x01,0x80)                  // Runtime registers, National SIO
+      IO(Decode16,0x10,0x10,0x01,0x10)
+      IO(Decode16,0x80,0x80,0x01,0x01)
+      IO(Decode16,0x84,0x84,0x01,0x03)
+      IO(Decode16,0x88,0x88,0x01,0x01)
+      IO(Decode16,0x8c,0x8c,0x01,0x03)
+      IO(Decode16,0x90,0x90,0x01,0x10)
+      //
+      // Pilot Mail Box decode range
+      //
+      IO(Decode16,0x600,0x600,0x01,0x20)
+      //
+      // BMC KCS decode range
+      //
+      IO(Decode16,0xCA0,0xCA0,0x01,0x2)
+      IO(Decode16,0xCA4,0xCA4,0x01,0x3)
+
+      //IO Descriptor added for range 2F8-2FF for S501706
+      //IO(Decode16,0x2F8,0x2F8,0x01,0x08)
+      //IO(Decode16,0x60,0x60,0x01,0x01)
+      //IO(Decode16,0x64,0x64,0x01,0x01)
+
+      //
+      // FLASH range
+      //
+      Memory32Fixed (ReadOnly, 0xFF000000, 0x1000000) //16MB as per IIO spec
+
+    }
+  )
+}
+
+//
+// High Performance Event Timer (HPET)
+//
+Device (HPET) {
+  Name (_HID, EisaId ("PNP0103"))
+
+  Method (_STA, 0, NotSerialized) {
+    If (\HPTE) {
+      Return (0x0F)
+    } Else {
+      Return (0x00)
+    }
+  }
+
+  Name (CRS0, ResourceTemplate () {
+    Memory32Fixed (ReadWrite, 0xFED00000, 0x00000400)
+  })
+
+  Name (CRS1, ResourceTemplate () {
+    Memory32Fixed (ReadWrite, 0xFED01000, 0x00000400)
+  })
+
+  Name (CRS2, ResourceTemplate () {
+    Memory32Fixed (ReadWrite, 0xFED02000, 0x00000400)
+  })
+
+  Name (CRS3, ResourceTemplate () {
+    Memory32Fixed (ReadWrite, 0xFED03000, 0x00000400)
+  })
+
+  //
+  // Owning control method can't be re-entrant, so _CRS must be Serialized
+  //
+  Method (_CRS, 0, Serialized) {
+    Switch (ToInteger(\HPTB)) {
+      Case (0xFED00000) {
+        Return (CRS0)
+      }
+
+      Case (0xFED01000) {
+        Return (CRS1)
+      }
+
+      Case (0xFED02000) {
+        Return (CRS2)
+      }
+
+      Case (0xFED03000) {
+        Return (CRS3)
+      }
+    }
+    Return (CRS0)
+  }
+}
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/NvdimmGpe.asi b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/NvdimmGpe.asi
new file mode 100644
index 0000000000..f0c44e67c1
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/NvdimmGpe.asi
@@ -0,0 +1,25 @@
+/** @file
+
+  @copyright
+  Copyright 2001 - 2019 Intel Corporation. <BR>
+
+  SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+Method (NNPR, 0) // NTPR == NoTify PRe
+{
+    External (\_SB.NVDR.NTPR, MethodObj)
+    Store(Package () {}, Local0)
+    if (CondRefOf (\_SB.NVDR.NTPR)) {
+        Store (\_SB.NVDR.NTPR (), Local0)  // Local0 == Opaque Package
+    }
+    Return (Local0)
+}
+
+Method (NNDO, 1) // Nvdimm Notify DO
+{
+    External (\_SB.NVDR.NTDO, MethodObj)
+    if (CondRefOf (\_SB.NVDR.NTDO)) {
+        \_SB.NVDR.NTDO (Arg0)
+    }
+}
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/Os.asi b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/Os.asi
new file mode 100644
index 0000000000..e2d5fcc78f
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/Os.asi
@@ -0,0 +1,66 @@
+/** @file
+
+  @copyright
+  Copyright 2017-2020 Intel Corporation. <BR>
+
+  SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+Scope (\_SB) {
+
+  Name (XCNT, 0)
+  Name (OSYS, 0)   // Global variable for type of OS.
+
+  Method (_INI) {
+
+    If (CondRefOf (_OSI)) {
+      If (\_OSI ("Windows 2012")) {
+        Store (13, OSYS)      // Windows Server 2012 & Windows 8
+      }
+
+      If (\_OSI ("Windows 2013")) {
+        Store (14, OSYS)      // Windows Server 2012 R2 & Windows 8.1
+      }
+
+      If (\_OSI ("Windows 2015")) {
+        Store (15, OSYS)      // Windows 10
+      }
+      //
+      // Check Linux also
+      //
+
+      If (\_OSI ("FreeBSD")) {
+        Store (2, OSYS)
+      }
+
+      If (\_OSI ("HP-UX")) {
+        Store (3, OSYS)
+      }
+
+      If (\_OSI ("OpenVMS")) {
+        Store (4, OSYS)
+      }
+
+      //
+      // Running WinSvr2012, Win8, or later?
+      //
+      If (LGreaterEqual (\_SB.OSYS, 13)) {
+        //
+        // It is Svr2012 or Win8
+        // Call xHCI device to switch USB ports over
+        //  unless it has been done already
+        //
+        If (LEqual (XCNT, 0)) {
+          if(LEqual(DBGM, 0x01)){
+            Store (0x84, IO80)
+          }
+          Increment (XCNT)
+        }
+      } Else {
+        if(LEqual(DBGM, 0x01)){
+          Store (\_SB.OSYS, IO80)
+        }
+      }
+    }
+  } // End Method (_INI)
+} // End Scope (_SB)
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/PC0010nm.asi b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/PC0010nm.asi
new file mode 100644
index 0000000000..9f24076ef5
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/PC0010nm.asi
@@ -0,0 +1,427 @@
+/** @file
+
+  @copyright
+  Copyright 2016 - 2019 Intel Corporation. <BR>
+
+  SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+  External (DBGM, FieldUnitObj)
+
+  Name (SUPP, 0)
+  Name (CTRL, 0)
+
+  //
+  // _BBN is ACPI method called by OS to read PCI base bus number for IIO stack.
+  //
+  Method(_BBN, 0, NotSerialized)
+  {
+    Return(BB00)
+  }
+
+  //
+  // _PXM is ACPI method called by OS to read Proximity Domain of IIO stack.
+  //
+  Method(_PXM, 0, NotSerialized)
+  {
+    Return(0)
+  }
+
+  //
+  // _SEG is ACPI method called by OS to read PCI segment of IIO stack.
+  //
+  Method(_SEG, 0, NotSerialized)
+  {
+    Return(SG00)
+  }
+
+  Method(_OSC,4) {
+    //
+    // Create DWord-addressable fields from the capabilities Buffer
+    //
+    CreateDWordField(Arg3,0,CDW1)
+    If (LEqual(Arg0,ToUUID("33DB4D5B-1FF7-401C-9657-7441C03DD766"))) {
+        //
+        // Create DWord-addressable fields from the capabilities Buffer
+        //
+        CreateDWordField(Arg3,4,CDW2)
+
+        //
+        // Fill 3rd capability DWORD only if the count is greater than 2.
+        //
+        If(LGreater(Arg2,2)) {
+          CreateDWordField(Arg3,8,CDW3)
+        }
+
+        //
+        // Save Capabilities DWord2 & 3
+        //
+        Store(CDW2,SUPP)
+        Store(CDW3,CTRL)
+
+        //
+        // Never allow SHPC (no SHPC controller in system)
+        //
+        And(CTRL, 0x1D, CTRL)
+
+        //
+        // Select Native PCIe AER/eDPC handling from OS or Firmware First model
+        //
+        If (CondRefOf (\_SB.OSNC))
+        {
+          //in case OS has AER capability.
+          If (LEqual ( And(CTRL, 8), 8)) {
+
+            //in case OS support multiple segment.
+            If (And (SUPP, 8)) {
+              If (CondRefof (^_SEG))
+              {
+                Store (^_SEG, Local0)
+              } Else {
+                Store (0, Local0)
+              }
+            } Else {
+              Store (0, Local0)
+            }
+
+            Store (^_BBN, Local1)
+
+            // if BIOS allows OS take. Do nothing.
+            If (\_SB.OSNC(Local0, Local1, SUPP, CTRL)) {
+
+            } Else {
+              And (CTRL, Not(0x88), CTRL)
+            }
+          } Else {
+            And (CTRL, Not(0x88), CTRL)
+          }
+        } Else {
+          //
+          //Disable Native PCIe AER/eDPC handling from OS, AER is bit3, eDPC is bit7
+          //
+          And (CTRL, Not(0x88), CTRL)
+        }
+
+        If (Not(And(CDW1,1))) { // Query Flag Clear?
+          //
+          // Disable GPEs for Features granted native control
+          //
+          If (And(CTRL, 0x01)) { // Native Hot plug control granted?
+           if(LEqual(DBGM, 0x01)){
+             Store (0xE3, IO80)
+           }
+            \_SB.PC01.BR1A.OSHP ()
+            \_SB.PC01.BR1B.OSHP ()
+            \_SB.PC01.BR1C.OSHP ()
+            \_SB.PC01.BR1D.OSHP ()
+
+            Store (0x01, GPSH)                // Clear Hotplug SCI Enable in GPE0
+          }
+        }
+
+        If (LNotEqual(Arg1,one)) { // unknown revision
+          Or(CDW1,0x08,CDW1)
+        }
+
+        If(LNotEqual(CDW3,CTRL)) { // capabilities bits were masked
+          Or(CDW1,0x10,CDW1)
+        }
+        //
+        // update DWORD3 in the buffer
+        //
+        Store(CTRL,CDW3)
+          Return(Arg3)
+
+      } Else {
+        //
+        // Just indicate unrecognized UUID
+        // Leave it at that
+        //
+        Or (CDW1,4,CDW1)
+        if(LEqual(DBGM, 0x01)){
+          Store (0xEE, IO80)
+        }
+        Return(Arg3)
+      }
+  } // End _OSC
+
+#include "PchApic.asi"
+
+
+#define RESOURCE_CHUNK1_OFF     0
+#define RESOURCE_CHUNK2_OFF    16   //(RESOURCE_CHUNK1_OFF + 16)
+#define RESOURCE_CHUNK3_OFF    24   //(RESOURCE_CHUNK2_OFF +  8)
+#define RESOURCE_CHUNK4_OFF    40   //(RESOURCE_CHUNK3_OFF + 16)
+#define RESOURCE_CHUNK5_OFF    56   //(RESOURCE_CHUNK4_OFF + 16)
+#define RESOURCE_CHUNK6_OFF    82   //(RESOURCE_CHUNK5_OFF + 26)
+#define RESOURCE_CHUNK7_OFF   108   //(RESOURCE_CHUNK6_OFF + 26)
+
+#define PciResourceStart       Local0
+#define PciResourceLen         Local1
+
+  Name(P0RS, ResourceTemplate() {
+    //RESOURCE_CHUNK1_OFF
+    WORDBusNumber(            // Bus number resource (0); the bridge produces bus numbers for its subsequent buses
+      ResourceProducer,       // bit 0 of general flags is 1
+      MinFixed,               // Range is fixed
+      MaxFixed,               // Range is fixed
+      PosDecode,              // PosDecode
+      0x0000,                 // Granularity (FIX1 - Patched by ACPI Platform Driver during POST)
+      0x0000,                 // Min         (FIX1 - Patched by ACPI Platform Driver during POST)
+      0x0000,                 // Max         (FIX1 - Patched by ACPI Platform Driver during POST)
+      0x0000,                 // Translation
+      0x0001,                 // Range Length = Max-Min+1 (FIX1 - Patched by ACPI Platform Driver during POST)
+            ,
+            ,
+      FIX1                    // DescriptorName populated so iASL outputs offset for it in a .h file
+    )
+
+    //RESOURCE_CHUNK2_OFF
+    IO(                       // Consumed resource (CF8-CFF)
+      Decode16,
+      0x0cf8,
+      0xcf8,
+      1,
+      8
+    )
+
+    //RESOURCE_CHUNK3_OFF
+    WORDIO(                   // Consumed-and-produced resource (all I/O below CF8)
+      ResourceProducer,       // bit 0 of general flags is 0
+      MinFixed,               // Range is fixed
+      MaxFixed,               // Range is fixed
+      PosDecode,
+      EntireRange,
+      0x0000,                 // Granularity
+      0x0000,                 // Min
+      0x0cf7,                 // Max
+      0x0000,                 // Translation
+      0x0cf8                  // Range Length
+   )
+
+    //RESOURCE_CHUNK4_OFF
+    WORDIO(                   // Consumed-and-produced resource (all I/O above CFF)
+      ResourceProducer,       // bit 0 of general flags is 0
+      MinFixed,               // Range is fixed
+      MaxFixed,               // Range is fixed
+      PosDecode,
+      EntireRange,
+      0x0000,                 // Granularity  (FIX2 - Patched by ACPI Platform Driver during POST)
+      0x0000,                 // Min          (FIX2 - Patched by ACPI Platform Driver during POST)
+      0x0000,                 // Max          (FIX2 - Patched by ACPI Platform Driver during POST)
+      0x0000,                 // Translation
+      0x0001,                 // Range Length (FIX2 - Patched by ACPI Platform Driver during POST)
+            ,
+            ,
+      FIX2                    // DescriptorName populated so iASL outputs offset for it in a .h file
+    )
+
+    //RESOURCE_CHUNK5_OFF
+    DWORDMEMORY(              // descriptor for video RAM on video card
+      ResourceProducer,       // bit 0 of general flags is 0
+      PosDecode,
+      MinFixed,               // Range is fixed
+      MaxFixed,               // Range is Fixed
+      Cacheable,
+      ReadWrite,
+      0x00000000,             // Granularity  (FIX5 - Patched by ACPI Platform Driver during POST)
+      0x00000000,             // Min          (FIX5 - Patched by ACPI Platform Driver during POST)
+      0x00000000,             // Max          (FIX5 - Patched by ACPI Platform Driver during POST)
+      0x00000000,             // Translation
+      0x00000000,             // Range Length (FIX5 - Patched by ACPI Platform Driver during POST)
+                ,
+    ,
+      FIX5      // Descriptor Name
+    )
+
+    //RESOURCE_CHUNK6_OFF
+    DWORDMEMORY(              // descriptor for Shadow RAM
+      ResourceProducer,       // bit 0 of general flags is 0
+      PosDecode,
+      MinFixed,               // Range is fixed
+      MaxFixed,               // Range is Fixed
+      Cacheable,
+      ReadWrite,
+      0x00000000,             // Granularity
+      0x00000000,             // Min (calculated dynamically)
+      0x00000000,             // Max (calculated dynamically)
+      0x00000000,             // Translation
+      0x00000000,             // Range Length (calculated dynamically)
+                ,
+                ,
+      SRAM                    // DescriptorName populated so iASL doesn't flag 0 value fields and no tag as error
+    )
+/*
+    //RESOURCE_TPM
+    DWORDMemory(              // Consumed-and-produced resource(all of memory space)
+      ResourceProducer,       // bit 0 of general flags is 0
+      PosDecode,              // positive Decode
+      MinFixed,               // Range is fixed
+      MaxFixed,               // Range is fixed
+      NonCacheable,
+      ReadWrite,
+      0x00000000,             // Granularity
+      0xFED40000,             // Min (calculated dynamically)
+      0xFEDFFFFF,             // Max = 4GB - 1MB  (fwh + fwh alias...)
+      0x00000000,             // Translation
+      0x000C0000              // Range Length (calculated dynamically)
+    )
+*/
+   DWordMemory(ResourceProducer,PosDecode,MinFixed,MaxFixed,NonCacheable,
+        ReadWrite,0x00,0xFE010000,0xFE010FFF,0x00,0x1000)
+
+    //
+    // PCI RESOURCE_32bit
+    //
+    DWORDMemory(              // Consumed-and-produced resource(all of memory space)
+      ResourceProducer,       // bit 0 of general flags is 0
+      PosDecode,              // positive Decode
+      MinFixed,               // Range is fixed
+      MaxFixed,               // Range is fixed
+      NonCacheable,
+      ReadWrite,
+      0x00000000,             // Granularity (FIX3 - Patched by ACPI Platform Driver during POST)
+      0x00000000,             // Min (calculated dynamically) (FIX3 - Patched by ACPI Platform Driver during POST)
+      0x00000000,             // Max = 4GB - 1MB  (fwh + fwh alias) (FIX3 - Patched by ACPI Platform Driver during POST)
+      0x00000000,             // Translation
+      0x00000000,             // Range Length (calculated dynamically) (FIX3 - Patched by ACPI Platform Driver during POST)
+                ,
+                ,
+      FIX3                    // DescriptorName populated so iASL outputs offset for it in a .h file
+    )
+
+    //
+    // PCI RESOURCE_64bit
+    //
+    QWORDMemory(              // Consumed-and-produced resource(all of memory space)
+      ResourceProducer,       // bit 0 of general flags is 0
+      PosDecode,              // positive Decode
+      MinFixed,               // Range is fixed
+      MaxFixed,               // Range is fixed
+      NonCacheable,
+      ReadWrite,
+      0x00000000000,          // Granularity (FIX4 - Patched by ACPI Platform Driver during POST)
+      0x00000000000,          // Min (calculated dynamically) (FIX4 - Patched by ACPI Platform Driver during POST)
+      0x00000000000,          // Max = 4GB - 1MB  (fwh + fwh alias) (FIX4 - Patched by ACPI Platform Driver during POST)
+      0x00000000000,          // Translation
+      0x00000000000,          // Range Length (calculated dynamically) (FIX4 - Patched by ACPI Platform Driver during POST)
+                   ,
+                   ,
+      FIX4                    // DescriptorName populated so iASL outputs offset for it in a .h file
+    )
+  }) // end of P0RS Buffer
+
+  OperationRegion(TMEM, PCI_Config, 0x00, 0x100)
+  Field(TMEM, ByteAcc, NoLock, Preserve) {
+    Offset(0x40),
+    , 4,
+    BSEG, 4,
+    PAMS, 48,
+    Offset(0x52),
+    DIM0, 4,
+    DIM1, 4,
+    , 8,
+    DIM2, 4,
+  }
+
+  Name(MTBL, Package(0x10) {
+    0x0,
+    0x20,
+    0x20,
+    0x30,
+    0x40,
+    0x40,
+    0x60,
+    0x80,
+    0x80,
+    0x80,
+    0x80,
+    0xc0,
+    0x100,
+    0x100,
+    0x100,
+    0x200
+  })
+
+  Name(ERNG, Package(0xd) {
+    0xc0000,
+    0xc4000,
+    0xc8000,
+    0xcc000,
+    0xd0000,
+    0xd4000,
+    0xd8000,
+    0xdc000,
+    0xe0000,
+    0xe4000,
+    0xe8000,
+    0xec000,
+    0xf0000
+  })
+
+  Name(PAMB, Buffer(0x7) {
+  })
+
+  Method(EROM, 0x0, NotSerialized) {
+    CreateDWordField(P0RS, ^SRAM._MIN, RMIN) // Do not reference hard-coded address
+    CreateDWordField(P0RS, ^SRAM._MAX, RMAX) // Do not reference hard-coded address
+    CreateDWordField(P0RS, ^SRAM._LEN, RLEN) // Do not reference hard-coded address
+    CreateByteField(PAMB, 0x6, BREG)
+    Store(PAMS, PAMB)
+    Store(BSEG, BREG)
+    Store(0x0, RMIN)
+    Store(0x0, RMAX)
+    Store(0x0, RLEN)
+    Store(0x0, Local0)
+    While(LLess(Local0, 0xd))
+    {
+      ShiftRight(Local0, 0x1, Local1)
+      Store(DerefOf(Index(PAMB, Local1, )), Local2)
+      If(And(Local0, 0x1, ))
+      {
+          ShiftRight(Local2, 0x4, Local2)
+      }
+      And(Local2, 0x3, Local2)
+      If(RMIN)
+      {
+        If(Local2)
+        {
+          Add(DerefOf(Index(ERNG, Local0, )), 0x3fff, RMAX)
+          If(LEqual(RMAX, 0xf3fff))
+          {
+            Store(0xfffff, RMAX)
+          }
+          Subtract(RMAX, RMIN, RLEN)
+          Increment(RLEN)
+        }
+        Else
+        {
+          Store(0xc, Local0)
+        }
+      }
+      Else
+      {
+        If(Local2)
+        {
+          Store(DerefOf(Index(ERNG, Local0, )), RMIN)
+          Add(DerefOf(Index(ERNG, Local0, )), 0x3fff, RMAX)
+          If(LEqual(RMAX, 0xf3fff))
+          {
+            Store(0xfffff, RMAX)
+          }
+          Subtract(RMAX, RMIN, RLEN)
+          Increment(RLEN)
+        }
+        Else
+        {
+        }
+      }
+      Increment(Local0)
+    }
+  }
+
+  // Current resource template return
+  Method(_CRS, 0x0, NotSerialized) {
+    EROM()
+    Return(P0RS)
+  }
+
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/PC0610nmEjd.asi b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/PC0610nmEjd.asi
new file mode 100644
index 0000000000..966cd82640
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/PC0610nmEjd.asi
@@ -0,0 +1,10 @@
+/** @file
+
+  @copyright
+  Copyright 2016 - 0610 Intel Corporation. <BR>
+
+  SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+  // Eject device if PC06 is removed.
+  Name(_EJD,"\\_SB.PC06")   // Dependent on PC18
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/PC1210nmEjd.asi b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/PC1210nmEjd.asi
new file mode 100644
index 0000000000..6c210da62d
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/PC1210nmEjd.asi
@@ -0,0 +1,10 @@
+/** @file
+
+  @copyright
+  Copyright 2016 - 2018 Intel Corporation. <BR>
+
+  SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+  // Eject device if PC12 is removed.
+  Name(_EJD,"\\_SB.PC12")   // Dependent on PC18
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/PC1810nmEjd.asi b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/PC1810nmEjd.asi
new file mode 100644
index 0000000000..7b6aa91cd5
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/PC1810nmEjd.asi
@@ -0,0 +1,10 @@
+/** @file
+
+  @copyright
+  Copyright 2016 - 2018 Intel Corporation. <BR>
+
+  SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+  // Eject device if PC18 is removed.
+  Name(_EJD,"\\_SB.PC18")   // Dependent on PC18
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/PchApic.asi b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/PchApic.asi
new file mode 100644
index 0000000000..e76063647e
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/PchApic.asi
@@ -0,0 +1,18 @@
+/** @file
+
+  @copyright
+  Copyright 2001 - 2012 Intel Corporation. <BR>
+
+  SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+Device(APIC) {
+  Name (_HID,EISAID("PNP0003"))        // APIC resources
+  Name (_CRS, ResourceTemplate() {
+    //
+    // APIC range(0xFEC0_0000 to 0xFECF_FFFF)
+    //
+    Memory32Fixed (ReadOnly, 0xFEC00000, 0x100000) // IO APIC
+    }
+  )
+}
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/PcieHp.asi b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/PcieHp.asi
new file mode 100644
index 0000000000..64484e5402
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/PcieHp.asi
@@ -0,0 +1,669 @@
+/** @file
+
+  @copyright
+  Copyright 2007 - 2020 Intel Corporation. <BR>
+
+  SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+  External (DBGM, FieldUnitObj)
+
+  Method (_INI, 0, NotSerialized)
+  {
+  }
+
+  Name(_HPP, Package(){0x08, 0x40, SERR, PERR})
+
+  //
+  // begin hotplug code
+  //
+  Name(SHPC, 0x40)            // Slot Hot-plug Capable
+
+  Name(SPDS, 0x040)           // Slot Presence Detect State
+
+  Name(MRLS, 0x0)             // MRL Closed, Standby Power to slot is on
+  Name(CCOM, 0x010)           // Command Complete
+  Name(SPDC, 0x08)            // Slot Presence Detect Changes
+  Name(MRLC, 0x04)            // Slot MRL Changed
+  Name(SPFD, 0x02)            // Slot Power Fault Detected
+  Name(SABP, 0x01)            // Slot Attention Button Pressed
+
+  Name(SPOF, 0x10)            // Slot  Power Off
+  Name(SPON, 0x0F)            // Slot  Power On Mask
+
+  Name(ALMK, 0x1C)            // Slot Atten. LED Mask
+  Name(ALON, 0x01)            // Slot Atten. LED On
+  Name(ALBL, 0x02)            // Slot Atten LED Blink
+  Name(ALOF, 0x03)            // Slot Atten LED Off
+
+  Name(PLMK, 0x13)            // Slot Pwr. LED Mask
+  Name(PLON, 0x04)            // Slot Pwr. LED On
+  Name(PLBL, 0x08)            // Slot Pwr. LED Blink
+  Name(PLOF, 0x0C)            // Slot Pwr. LED Off
+
+  //;*************************************
+  //;   Bit 3 = Presence Detect Event
+  //;   Bit 2 = MRL Sensor Event
+  //;   Bit 1 = PWR Fault Event
+  //;   Bit 0 = Attention Button Event
+  //;*************************************
+  Name(HPEV, 0xF)             // Possible interrupt events (all)
+
+  //;************************************************************************;
+  //; PCIe Slot Capabilities Register
+  //;    Bit - 31-5  -  Not used
+  //;    Bit -   4   -  Power Indicator Present.
+  //;    Bit -   3   -  Attention Indicator Present.
+  //;    Bit -   2   -  MRL Sensor Present.
+  //;    Bit -   1   -  Power Controller Present.
+  //;    Bit -   0   -  Attention Button Present.
+  //;
+  //; PCIe Slot control Register
+  //;    Bit -  10   -  PWR Control Disable
+  //;    Bit - 9:8   -  Attn Indicator
+  //;    Bit - 7:6   -  PWR Indicator
+  //;    Bit -   5   -  Hot-Plug Interrupt Event Enable
+  //;    Bit -   4   -  Command Complete Interrupt enable
+  //;    Bit -   3   -  Presence Detect Changed Interrupt enable
+  //;    Bit -   2   -  MRL Sensor Changed Interrupt enable
+  //;    Bit -   1   -  PwrFault Detect Interrupt enable
+  //;    Bit -   0   -  Attention Button Pressed Interrupt Enable
+  //;
+  //; PCIe Slot Status Registers
+  //;    Bit -   6   -  Presence Detect State.
+  //;    Bit -   5   -  MRL Sensor State.
+  //;    Bit -   4   -  Command Completed.
+  //;
+  //;    RWC Status Bits
+  //;
+  //;    Bit -   3   -  Presence Detect Changed.
+  //;    Bit -   2   -  MRL Sensor Changed.
+  //;    Bit -   1   -  Power Fault Detected.
+  //;    Bit -   0   -  Attention Button Pressed.
+  //;************************************************************************;
+  OperationRegion (PXCP, PCI_Config, IRPC, 0x40)
+  Field (PXCP, ByteAcc, NoLock, Preserve) {
+    Offset (0x10),            // Link Control Register
+    , 4,
+    LDIS, 1,                  // Link Disable bit4.
+    , 11,
+    Offset (0x14),            // PCI Slot Capabilities Register
+    ATBP, 1,                  // Attention Button Present
+    , 1,
+    MRSP, 1,                  // MRL Sensor Present
+    ATIP, 1,                  // Attention Indicator Present
+    PWIP, 1,                  // Power Indicator Present
+    , 14,
+    PSNM, 13,                 // Physical Slot Number
+    Offset (0x18),            // Slot Control Register
+    ABIE, 1,                  // Attention Button Pressed Interrupt Enable
+    PFIE, 1,                  // Power Fault Detected Interrupt Enable
+    MSIE, 1,                  // MRL Sensor Changed Interrupt Enable
+    PDIE, 1,                  // Presence Detect Changed Interrupt Enable.
+    CCIE, 1,                  // Command Complete Interrupt Enable.
+    HPIE, 1,                  // Hot-plug Interrupt Enable.
+    SCTL, 5,                  // Attn/Power indicator and Power controller.
+    , 5,
+    Offset (0x1A),            // Slot Status Register
+    SSTS, 7,                  // The status bits in Slot Status Reg
+    , 1,
+    Offset (0x20),            // Root Status Register
+    , 16,
+    PMES, 1,                  // PME Status bit 16
+    PMEP, 1,                  // PME Pending bit 17
+    , 14
+  }
+
+  //
+  // These Methods replace the bit field definitions in PPA8
+  //  that were bit fields within SCTL
+  //
+  Method (ATID, 0) {
+    Return (And (SCTL, 0x03))
+  }
+
+  Method (PWID, 0) {
+    Return (ShiftRight (And (SCTL, 0x0C), 2))
+  }
+
+  Method (PWCC, 0) {
+    Return (ShiftRight (And (SCTL, 0x10), 4))
+  }
+
+  //
+  // These methods replace the bit fields definitions in PPA8
+  //  that were bit fields within SSTS
+  //
+  Method (ABPS, 1) {
+    If (LEqual (Arg0, 1)) {
+      Or (SSTS, 0x01, SSTS)
+    }
+    Return (And (SSTS, 0x01))
+  }
+
+  Method (PFDS, 1) {
+    If (LEqual (Arg0, 1)) {
+      Or (SSTS, 0x02, SSTS)
+    }
+    Return (ShiftRight (And (SSTS, 0x02), 1))
+  }
+
+  Method (MSCS, 1) {
+    If (LEqual (Arg0, 1)) {
+      Or (SSTS, 0x04, SSTS)
+    }
+    Return (ShiftRight (And (SSTS, 0x04), 2))
+  }
+
+  Method (PDCS, 1) {
+    If (LEqual (Arg0, 1)) {
+      Or (SSTS, 0x08, SSTS)
+    }
+    Return (ShiftRight (And (SSTS, 0x08), 3))
+  }
+
+  Method (CMCS, 1) {
+    If (LEqual (Arg0, 1)) {
+      Or (SSTS, 0x10, SSTS)
+    }
+    Return (ShiftRight (And (SSTS, 0x10), 4))
+  }
+
+  Method (MSSC, 1) {
+    If (LEqual (Arg0, 1)) {
+      Or (SSTS, 0x20, SSTS)
+    }
+    Return (ShiftRight (And (SSTS, 0x20), 5))
+  }
+
+  Method (PRDS, 1) {
+    If (LEqual (Arg0, 1)) {
+      Or (SSTS, 0x40, SSTS)
+    }
+    Return (ShiftRight (And (SSTS, 0x40), 6))
+  }
+
+
+  //;************************************************************************;
+  //; This OSHP (Operating System Hot Plug) method is provided for each HPC
+  //; which is controlled by ACPI. This method disables ACPI access to the
+  //; HPC and restores the normal System Interrupt and Wakeup Signal
+  //; connection.
+  //;************************************************************************;
+  Method(OSHP) {              // OS call to unhook Legacy ASL PCI-Express HP code.
+    Store(SSTS, Local0)       // Clear any status (RW1C)
+    Store(Local0, SSTS)       // (use write thru Local to avoid iasl warning 'Duplicate value in list ^  (Source is the same as Target)')
+  }
+
+  //;************************************************************************;
+  //; Hot Plug Controller Command Method
+  //;
+  //; Input: Arg0 - Command to issue
+  //;
+  //;************************************************************************;
+  Method(HPCC,1) {
+    Store(SCTL, Local0)           // get current command state
+    Store(0,    Local1)           // reset the timeout value
+    If(LNotEqual(Arg0, Local0)) { // see if state is different
+      Store(Arg0, SCTL)           // Update the Slot Control
+      While(LAnd (LNot(CMCS(0)), LNotEqual(100, Local1))) { // spin while CMD complete bit is not set,
+                                                            // check for timeout to avoid dead loop
+        if(LEqual(DBGM, 0x01)){
+          Store(0xFB, IO80)
+        }
+        Sleep(2)                  // allow processor time slice
+        Add(Local1, 2, Local1)
+      }
+      CMCS(1)                     // Clear the command complete status
+    }
+  }
+
+  //;************************************************************************;
+  //; Attention Indicator Command
+  //;
+  //; Input: Arg0 - Command to issue
+  //;               1 = ON
+  //;               2 = Blink
+  //;               3 = OFF
+  //;************************************************************************;
+  Method(ATCM,1) {
+    Store(SCTL, Local0)           // Get Slot Control
+    And(Local0, ALMK, Local0)     // Mask the Attention Indicator Bits
+    If(LEqual(Arg0, 0x1)){        // Attenion indicator "ON?"
+      Or(Local0, ALON, Local0)    // Set the Attention Indicator to "ON"
+    }
+    If(LEqual(Arg0, 0x2)){        // Attenion indicator "BLINK?"
+      Or(Local0, ALBL, Local0)    // Set the Attention Indicator to "BLINK"
+    }
+    If(LEqual(Arg0, 0x3)){        // Attenion indicator "OFF?"
+      Or(Local0, ALOF, Local0)    // Set the Attention Indicator to "OFF"
+    }
+    HPCC(Local0)
+  }
+
+  //;************************************************************************;
+  //; Power Indicator Command
+  //;
+  //; Input: Arg0 - Command to issue
+  //;               1 = ON
+  //;               2 = Blink
+  //;               3 = OFF
+  //;************************************************************************;
+  Method(PWCM,1){
+    Store(SCTL, Local0)           // Get Slot Control
+    And(Local0, PLMK, Local0)     // Mask the Power Indicator Bits
+    If(LEqual(Arg0, 0x1)){        // Power indicator "ON?"
+      Or(Local0, PLON, Local0)    // Set the Power Indicator to "ON"
+    }
+    If(LEqual(Arg0, 0x2)){        // Power indicator "BLINK?"
+      Or(Local0, PLBL, Local0)    // Set the Power Indicator to "BLINK"
+    }
+    If(LEqual(Arg0, 0x3)){        // Power indicator "OFF?"
+      Or(Local0, PLOF, Local0)    // Set the Power Indicator to "OFF"
+    }
+    HPCC(Local0)
+  }
+
+  //;************************************************************************;
+  //; Power Slot Command
+  //;
+  //; Input: Arg0 - Command to issue
+  //;               1 = Slot Power ON
+  //;               2 = Slot Power Off
+  //;************************************************************************;
+  Method(PWSL,1){
+    Store(SCTL, Local0)           // Get Slot Control
+    If(Arg0){                     // Power Slot "ON" Arg0 = 1
+      And(Local0, SPON, Local0)   // Turns the Power "ON"
+    } Else {                      // Power Slot "OFF"
+      Or(Local0, SPOF, Local0)    // Turns the Power "OFF"
+    }
+    HPCC(Local0)
+  }
+
+  //;************************************************************************;
+  //; _OST Methods to indicate that the device Eject/insert request is
+  //; pending, OS could not complete it
+  //;
+  //; Input: Arg0 - Value used in Notify to OS
+  //;               0x00 - card insert
+  //;               0x03 - card eject
+  //;        Arg1 - status of Notify
+  //;               0 - success
+  //;               0x80 - Ejection not supported by OSPM
+  //;               0x81 - Device in use
+  //;               0x82 - Device Busy
+  //;               0x84 - Ejection in progress-pending
+  //;************************************************************************;
+  Method(_OST,3,Serialized) {
+    Switch(And(Arg0,0xFF)) {      // Mask to retain low byte
+      Case(0x03) {                // Ejection Request
+        Switch(ToInteger(Arg1)) {
+          Case(Package() {0x80, 0x81, 0x82, 0x83}) {
+            //
+            // Ejection Failure for some reason
+            //
+            If (Lnot(PWCC())) {     // if slot is powered
+              PWCM(0x1)           // Set PowerIndicator to ON
+              Store(0x1,ABIE)     // Set AttnBtn Interrupt ON
+            }
+          }
+        }
+      }
+    }
+    #include "IioPcieEdpcOst.asi"
+  } // End _OST
+
+  //
+  // _DSM Device Specific Method
+  //
+  // Arg0: UUID Unique function identifier
+  // Arg1: Integer Revision Level
+  // Arg2: Integer Function Index (0 = Return Supported Functions)
+  // Arg3: Package Parameters
+  Method(_DSM, 4, Serialized) {
+    //
+    // Switch based on which unique function identifier was passed in
+    //
+    If (LEqual(Arg0, ToUUID ("E5C937D0-3553-4d7a-9117-EA4D19C3434D"))) {
+      //
+      // _DSM Definitions for Latency Tolerance Reporting
+      //
+      // Arguments:
+      // Arg0: UUID: E5C937D0-3553-4d7a-9117-EA4D19C3434D
+      // Arg1: Revision ID: 3
+      // Arg2: Function Index: 0, c, d
+      // Arg3: Empty Package
+      //
+      // Switch by function index
+      //
+      Switch(ToInteger(Arg2)) {
+        //
+        // Function Index:0
+        // Standard query - A bitmask of functions supported
+        //
+        Case (0) {
+          Name(OPTS, Buffer(2) {0, 0})
+          CreateBitField(OPTS, 0, FUN0)
+          CreateBitField(OPTS, 12, FUNC)
+          CreateBitField(OPTS, 13, FUND)
+
+          Store(1, FUN0)
+          Store(1, FUNC)
+          Store(1, FUND)
+          Return(OPTS)
+        }
+        //
+        // Function Index: C
+        // Downstream Port Containment Hint
+        //
+        Case(12) {
+            Return(1)
+        }
+
+        //
+        // Function Index: D
+        // Downstream Port Containment Device Location
+        //
+        Case(13) {
+          Name(DLOC, Buffer(2){0, 0})
+          CreateField(DLOC, 0, 3, DFUN)
+          CreateField(DLOC, 3, 5, DDEV)
+          CreateField(DLOC, 8, 8, DBUS)
+          Store(_BBN, DBUS)
+          store(_ADR, Local2)
+          And(Local2, 0xffff, Local3)
+          ShiftRight (Local2, 16, Local4)
+          Store(Local4, DDEV)
+          Store(Local3, DFUN)
+          Return(ToInteger(DLOC))
+        }
+
+      } // End of switch(Arg2)
+    } // End of if
+    return (Buffer() {0x00})
+  } // End of _DSM
+
+  //;************************************************************************;
+  //; Eject Control Methods to indicate that the device is hot-ejectable and
+  //; should "eject" the device.
+  //;
+  //;
+  //;************************************************************************;
+  Method(EJ0L){
+    if(LEqual(DBGM, 0x01)){
+      Store(0xFF, IO80)
+    }
+    Store(SCTL, Local0)             // Get IIO Port Control state
+    if( LNot( LEqual( ATID(), 1))) {  // Check if Attention LED is not solid "ON"
+      And(Local0, ALMK, Local0)     //  Mask the Attention Indicator Bits
+      Or(Local0, ALBL, Local0)      //  Set the Attention Indicator to blink
+    }
+    HPCC(Local0)                    // issue command
+
+    Store(SCTL, Local0)             // Get IIO Port Control state
+    Or(Local0, SPOF, Local0)        // Set the Power Controller Control to Power Off
+    HPCC(Local0)
+
+    Store(SCTL, Local0)             // Get IIO Port Control state
+    Or(Local0, PLOF, Local0)        // Set the Power Indicator to Off.
+    HPCC(Local0)
+
+    Store(SCTL, Local0)             // Get IIO Port Control state
+    Or(Local0, ALOF, Local0)        // Set the Attntion LED to Off.
+    HPCC(Local0)
+
+  }  // End of EJ0L
+
+  //;************************************************************************;
+  //; PM_PME Wake Handler for All Slots
+  //;
+  //; Input: Arg0 - Slot Numnber
+  //;
+  //;************************************************************************;
+  Method(PMEH,1){                   // Handler for PCI-E PM_PME Wake Event/Interupt (GPI xxh)
+    If(And(HPEV, SSTS)){            // Check for Hot-Plug Events
+      If(ABPS(0)) {
+        if(LEqual(DBGM, 0x01)){
+          if(LEqual(DBGM, 0x01)){
+            Store (Arg0, IO80)          // Send slot number to Port 80
+          }
+        }
+        ABPS(1)                     // Clear the interrupt status
+        Sleep(200)                  // delay 200ms
+      }
+    }
+    Return (0xff)                   // Indicate that this controller did not interrupt
+  }  // End of Method PMEH
+
+  //;************************************************************************;
+  //; Hot-Plug Handler for All Slots.
+  //;
+  //; Input: Arg0 - Slot Number
+  //;
+  //;************************************************************************;
+  Method(HPEH,1){                   // Handler for PCI-E Hot-Plug Event/Interupt (GPI xxh)
+    if(LEqual(DBGM, 0x01)){
+      Store(0xFE, IO80)
+    }
+    Sleep(100)
+    Store(0,CCIE)                   // Disable command interrupt
+    If(And(HPEV, SSTS)){            // Check for Hot-Plug Events
+      if(LEqual(DBGM, 0x01)){
+        Store(0xFD, IO80)
+      }
+      Sleep(10)
+      if(LEqual(DBGM, 0x01)){
+        Store (Arg0, IO80)            // Send slot number to Port 80
+      }
+      Sleep(10)
+      Store(PPXH(), Local0)         // Call Hot plug Interrupt Handler
+      Return(Local0)                // Return PPXH information
+    }
+    Else{
+      Return (0xff)                 // Indicate that this controller did not interrupt
+    }
+    if(LEqual(DBGM, 0x01)){
+      Store(0xFC, IO80)
+    }
+    Sleep(10)
+  }  // End of Method HPEH
+
+  //;************************************************************************;
+  //; Interrut Event Handler
+  //;
+  //;
+  //;************************************************************************;
+  Method(PPXH){                       // Hot plug Interrupt Handler
+    //
+    // Check for the Atention Button Press, Slot Empty/Presence, Power Controller Control.
+    //
+    Sleep(200)                        // HW Workaround for AttentionButton Status to stabilise
+    If(ABPS(0)) {                     // Check if Attention Button Pressed
+      If(LNot(PRDS(0))) {             // See if nothing installed (no card in slot)
+        Store(0x1, LDIS)              // Disable the Link associated with PCI-E port
+        PWSL(0x0)                     // make sure Power is Off
+        PWCM(0x3)                     // Set Power Indicator to "OFF"
+        //
+        // Check for MRL here and set attn indicator accordingly
+        //
+        If(LEqual(MSSC(0),MRLS)) {    // Standby power is on - MRL closed
+          ATCM(0x2)                   // Set Attention Indicator to "BLINK"
+        } else {                      // Standby power is off - MRL open
+         ATCM(0x3)                    // set attention indicator "OFF"
+        }
+        Store(0x0, ABIE)              // set Attention Button Interrupt to disable
+        ABPS(1)                       // Clear the interrupt status
+        Sleep(200)                    // delay 200ms
+        Return(0xff)                  // Attn Button pressed without card in slot. Do nothing
+      }
+      //
+      // Card is present in slot so....
+      //
+      Store(0x0, ABIE)                // set Attention Button Interrupt to disable
+                                      // Attn Btn Interrupt has to be enabled only after an insert oprn
+      ABPS(1)                         // Clear the interrupt status
+      Sleep(200)                      // delay 200ms
+      //
+      // Check for MRL here - only if SPWR is OFF blink AttnInd and retun 0xff
+      //
+      //If(LNot(LEqual(MSSC()),MRLS))) { // Standby power is off
+      //   PWSL(0x0)                    // make sure Power is Off
+      //   PWCM(0x3)                    // Set Power Indicator to "OFF"
+      //   ATCM(0x2)                    // Set Attention Indicator to "BLINK"
+      //   Return(0xff)                 // Attn Button pressed with card in slot, but MRL open. Do nothing
+      //}
+      //Card Present, if StandbyPwr is ON proceed as below with Eject Sequence
+      If(PWCC()) {                      // Slot not Powered
+        PWCM(0x3)                     // Set Power Indicator to "OFF"
+        ATCM(0x2)                     // Set Attention Indicator to "BLINK"
+        Return(0xff)                  // Attn Button pressed with card in slot, MRL closed, Slot not powered. Do nothing
+      } Else {                        // See if Slot is already Powered
+        PWCM(0x2)                     // Set power Indicator to BLINK
+        Sleep(600)                    // Wait 100ms
+        Store(600, Local0)            // set 5 second accumulator to 0
+        ABPS(1)                       // Clear the interrupt status
+        Sleep(200)                    // delay 200ms
+        While(LNot(ABPS(0))) {           // check for someone pressing Attention
+          Sleep(200)                  // Wait 200ms
+          Add(Local0, 200, Local0)
+          If(LEqual(5000, Local0)) {  // heck if 5sec has passed without pressing attnetion btn
+            ABPS(1)                   // Clear the interrupt status
+            Sleep(200)                // delay 200ms
+            Return (0x3)              // continue with Eject request
+          }
+        }
+        PWCM(0x1)                     // Set power Indicator baCK "ON"
+        ABPS(1)                       // Clear the Attention status
+        Sleep(200)                    // delay 200ms
+        Store(0x1, ABIE)              // set Attention Button Interrupt to enable
+        Return (0xff)                 // do nothing and abort
+      }
+    }  // End if for the Attention Button Hot Plug Interrupt.
+
+    If(PFDS(0)) {                     // Check if Power Fault Detected
+      PFDS(1)                         // Clear the Power Fault Status
+      PWSL(0x0)                       // set Power Off
+      PWCM(0x3)                       // set power indicator to OFF
+      ATCM(0x1)                       // set attention indicator "ON"
+      Store(0x1, LDIS)                // Disable the Link associated with PCI-E port
+      Return(0x03)            // Eject request.
+    }  // End if for the Power Fault Interrupt.
+
+    If(MSCS(0)) {                     // Check interrupt caused by the MRL Sensor
+      MSCS(1)                         // Clear the MRL Status
+      If(LEqual(MSSC(0),MRLS)) {      // Standby power is on - MRL closed
+        If(PRDS(0)) {                 // Card is Present
+
+        ATCM(0x3)                     // Set Attention Indicator to off
+        PWCM(0x2)                     // Set Power Indicator to Blink
+        Sleep(600)                    // Wait 100ms
+        Store(600, Local0)            // set 5 second accumulator to 0
+        ABPS(1)                       // Clear the interrupt status
+        While(LNot(ABPS(0))) {           // check for someone pressing Attention
+          Sleep(200)                  // Wait 200ms
+          Add(Local0, 200, Local0)
+          If(LEqual(5000, Local0)) {  // Check if 5 sec elapsed
+            Store(0x1, ABIE)          // Enable Attention button interrupt
+            ATCM(0x3)                 // set attention indicator "OFF"
+            Store(0x0, LDIS)          // Enable the Link associated with PCI-E port
+            PWSL(0x1)                 // Power the Slot
+            Sleep(500)                // Wait for .5 Sec for the Power to Stabilize.
+            // Check for the Power Fault Detection
+            If(LNot(PFDS(0))) {                 // No Power Fault
+              PWCM(0x1)                         // Set Power Indicator to "ON"
+              // Or(LVLS, 0x000010000, LVLS)    // Enable the Device 4 Slot Clock (GPIO16)
+              // Notify the OS to load the Driver for the card
+              Store(0x00, Local1)
+              Store(0x1, ABIE)                  // Enable Attention button interrupt
+            } Else {                            // Power Fault present
+              PWSL(0x0)                         // set Slot Power Off
+              PWCM(0x3)                         // set power indicator to OFF
+              ATCM(0x1)                         // set attention indicator "ON"
+              Store(0x1, LDIS)                  // Disable the Link associated with PCI-E port
+              // And (LVLS, 0x0FFFEFFFF, LVLS)  // Disable the Device 4 Slot Clock (GPIO16)
+              Store(0x03, Local1)               // Eject request.
+            }                                   // End if for the Slot Power Fault
+              ABPS(1)                           // Clear the Attention status
+              Sleep(200)                        // delay 200ms
+              Return(Local1)
+            }
+          }
+          //
+          // someone pressed Attention Button
+          //
+          ABPS(1)                   // Clear the Attention status
+          Sleep(200)                // delay 200ms
+          PWSL(0x0)                 // Set Slot Power off
+          PWCM(0x3)                 // Set Power Indicator back to "OFF"
+          ATCM(02)                  // Set Attention Indicator to "BLINK"
+          Store(0x1, LDIS)          // Disable the Link associated with PCI-E port
+          Return(0xff)              // leave it off
+          // End of Insert sequence
+        }
+        //MRL is closed, Card is not present
+        PWSL(0x0)                   // Set Slot Power off
+        PWCM(0x3)                   // Set Power Indicator back to "OFF"
+        ATCM(02)                    // Set Attention Indicator to "BLINK"
+        Store(0x1, LDIS)            // Disable the Link associated with PCI-E port
+        Return(0xff)                // leave it off
+      } Else {                      // MRL is open i.e Stdby power is turned off
+        If(PRDS(0)) {               //card present MRL switched off
+          ATCM(0x2)                 // Set Attention Indicator to "BLINK"
+          If(Lnot(PWCC())) {        // If slot is powered
+            // This event is not supported and someone has opened the MRL and dumped the power
+            //  on the slot with possible pending transactions. This could hose the OS.
+            // Try to Notify the OS to unload the drivers.
+            PWSL(0x0)               // Set Slot Power off
+            PWCM(0x3)               // Set Power Indicator back to "OFF"
+            Store(0x1, LDIS)        // Disable the Link associated with PCI-E port
+            Return(0x03)            // Eject request.
+          } Else {                  // Slot not powered, MRL is opened, card still in slot - Eject not fully complete
+            Return(0xFF)
+          }
+        }
+        //no card present and Stdby power switched off, turn AI off
+        ATCM(0x3)                   // Set Attention Indicator to "OFF"
+        Return(0xff)                // leave it off
+      }                             // End of MRL switch open/close state
+    }                               // End of MRL Sensor State Change
+
+    If(PDCS(0)) {                   // Check if Presence Detect Changed Status
+      PDCS(1)                       // Clear the Presence Detect Changed Status
+      If(LNot(PRDS(0))) {           // Slot is Empty
+        PWSL(0x0)                   // Set Slot Power "OFF"
+        PWCM(0x3)                   // set power indicator to "OFF"
+        If(LEqual(MSSC(0),MRLS)) {  // If Standby power is on
+          ATCM(0x2)                 // Set Attention Indicator to "Blink"
+        } else {
+          ATCM(0x3)                 // Set Attention Indicator to "OFF"
+        }
+        Store(0x1, LDIS)            // Disable the Link associated with PCI-E port
+        Return(0xFF)                // Do nothing
+      } Else {                      // Slot Card is inserted
+        // Irrespective of MRL state, do the following
+        Store(0x0, LDIS)            // Enable the Link associated with PCI-E port
+        PWSL(0x1)                   // Set Slot Power ON
+        Sleep(500)                  // Wait for .5 Sec for the Power to Stabilize.
+        If(LNot(PFDS(0))) {         // No Power Fault
+          PWCM(0x1)                 // Set Power Indicator to "ON"
+          Store(0x00, Local1)
+          Store(0x1, ABIE)          // Enable Attention button interrupt
+          ATCM(0x3)                 // Set Attention Indicator to "OFF"
+        } Else {                    // Power Fault present
+          PWSL(0x0)                 // set Slot Power Off
+          PWCM(0x3)                 // set power indicator to OFF
+          ATCM(0x1)                 // set attention indicator "ON"
+          Store(0x1, LDIS)          // Disable the Link associated with PCI-E port
+          Store(0x03, Local1)       // Eject request.
+        }                           // End if for the Slot Power Fault
+        ABPS(1)                     // Clear the Attention status
+        Sleep(200)                  // delay 200ms
+        Return(Local1)
+      }
+    }  // End if for the Presence Detect Changed Hot Plug Interrupt.
+    Return(0xff)    // should not get here, but do device check if it does.
+  }  // End of method PP5H
+  //
+  // End of hotplug code
+  //
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/PcieHpDev.asi b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/PcieHpDev.asi
new file mode 100644
index 0000000000..ce48d3800a
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/PcieHpDev.asi
@@ -0,0 +1,53 @@
+/** @file
+
+  @copyright
+  Copyright 2001 - 2019 Intel Corporation. <BR>
+
+  SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+  Method(SNUM, 0, Serialized) {
+    Store(PSNM, Local0)
+    Return(Local0)
+  }
+
+  Device(H000) {
+    Name(_ADR, 0x00000000)
+    Method(_SUN, 0) { Return(SNUM) } // Slot User Number
+    Method(_EJ0, 1) { EJ0L() }   // Remove all power from the slot
+  }
+  Device(H001) {
+    Name(_ADR, 0x00000001)
+    Method(_SUN, 0) { Return(SNUM) } // Slot User Number
+    Method(_EJ0, 1) { EJ0L() }   // Remove all power from the slot
+  }
+  Device(H002) {
+    Name(_ADR, 0x00000002)
+    Method(_SUN, 0) { Return(SNUM) } // Slot User Number
+    Method(_EJ0, 1) { EJ0L() }   // Remove all power from the slot
+  }
+  Device(H003) {
+    Name(_ADR, 0x00000003)
+    Method(_SUN, 0) { Return(SNUM) } // Slot User Number
+    Method(_EJ0, 1) { EJ0L() }   // Remove all power from the slot
+  }
+  Device(H004) {
+    Name(_ADR, 0x00000004)
+    Method(_SUN, 0) { Return(SNUM) } // Slot User Number
+    Method(_EJ0, 1) { EJ0L() }   // Remove all power from the slot
+  }
+  Device(H005) {
+    Name(_ADR, 0x00000005)
+    Method(_SUN, 0) { Return(SNUM) } // Slot User Number
+    Method(_EJ0, 1) { EJ0L() }   // Remove all power from the slot
+  }
+  Device(H006) {
+    Name(_ADR, 0x00000006)
+    Method(_SUN, 0) { Return(SNUM) } // Slot User Number
+    Method(_EJ0, 1) { EJ0L() }   // Remove all power from the slot
+  }
+  Device(H007) {
+    Name(_ADR, 0x00000007)
+    Method(_SUN, 0) { Return(SNUM) } // Slot User Number
+    Method(_EJ0, 1) { EJ0L() }   // Remove all power from the slot
+  }
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/PcieNonHpDev.asi b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/PcieNonHpDev.asi
new file mode 100644
index 0000000000..44872cefd4
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/PcieNonHpDev.asi
@@ -0,0 +1,45 @@
+/** @file
+
+  @copyright
+  Copyright 2001 - 2019 Intel Corporation. <BR>
+
+  SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+  Method(SNUM, 0, Serialized) {
+    Store(PSNM, Local0)
+    Return(Local0)
+  }
+
+  Device(H000) {
+    Name(_ADR, 0x00000000)
+    Method(_SUN, 0) { Return(SNUM) } // Slot User Number
+  }
+  Device(H001) {
+    Name(_ADR, 0x00000001)
+    Method(_SUN, 0) { Return(SNUM) } // Slot User Number
+  }
+  Device(H002) {
+    Name(_ADR, 0x00000002)
+    Method(_SUN, 0) { Return(SNUM) } // Slot User Number
+  }
+  Device(H003) {
+    Name(_ADR, 0x00000003)
+    Method(_SUN, 0) { Return(SNUM) } // Slot User Number
+  }
+  Device(H004) {
+    Name(_ADR, 0x00000004)
+    Method(_SUN, 0) { Return(SNUM) } // Slot User Number
+  }
+  Device(H005) {
+    Name(_ADR, 0x00000005)
+    Method(_SUN, 0) { Return(SNUM) } // Slot User Number
+  }
+  Device(H006) {
+    Name(_ADR, 0x00000006)
+    Method(_SUN, 0) { Return(SNUM) } // Slot User Number
+  }
+  Device(H007) {
+    Name(_ADR, 0x00000007)
+    Method(_SUN, 0) { Return(SNUM) } // Slot User Number
+  }
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/Platform.asl b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/Platform.asl
new file mode 100644
index 0000000000..bd33a63efc
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/Platform.asl
@@ -0,0 +1,91 @@
+/** @file
+  ACPI DSDT table
+
+  @copyright
+  Copyright 2011 - 2019 Intel Corporation. <BR>
+
+  SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+//
+// Port from client
+//
+
+//
+// Original file line: 91
+//
+
+
+  External (\_SB.OSNC, MethodObj)
+
+
+
+//
+// Original file line: 163
+//
+
+Method(ADBG,1,Serialized)
+{
+  Return(0)
+}
+
+//
+// Original file line: 1460
+//
+Scope (\)
+{
+  //
+  // Global Name, returns current Interrupt controller mode;
+  // updated from _PIC control method
+  //
+
+  //
+  // Procedure: GPRW
+  //
+  // Description: Generic Wake up Control Method ("Big brother")
+  //              to detect the Max Sleep State available in ASL Name scope
+  //              and Return the Package compatible with _PRW format.
+  // Input: Arg0 =  bit offset within GPE register space device event will be triggered to.
+  //        Arg1 =  Max Sleep state, device can resume the System from.
+  //                If Arg1 = 0, Update Arg1 with Max _Sx state enabled in the System.
+  // Output:  _PRW package
+  //
+  Name(PRWP, Package(){Zero, Zero})   // _PRW Package
+
+  Method(GPRW, 2)
+  {
+    Store(Arg0, Index(PRWP, 0))             // copy GPE#
+    //
+    // SS1-SS4 - enabled in BIOS Setup Sleep states
+    //
+    Store(ShiftLeft(SS1,1),Local0)          // S1 ?
+    Or(Local0,ShiftLeft(SS2,2),Local0)      // S2 ?
+    Or(Local0,ShiftLeft(SS3,3),Local0)      // S3 ?
+    Or(Local0,ShiftLeft(SS4,4),Local0)      // S4 ?
+    //
+    // Local0 has a bit mask of enabled Sx(1 based)
+    // bit mask of enabled in BIOS Setup Sleep states(1 based)
+    //
+    If(And(ShiftLeft(1, Arg1), Local0))
+    {
+      //
+      // Requested wake up value (Arg1) is present in Sx list of available Sleep states
+      //
+      Store(Arg1, Index(PRWP, 1))           // copy Sx#
+    }
+    Else
+    {
+      //
+      // Not available -> match Wake up value to the higher Sx state
+      //
+      ShiftRight(Local0, 1, Local0)
+      // If(LOr(LEqual(OSFL, 1), LEqual(OSFL, 2))) {  // ??? Win9x
+      // FindSetLeftBit(Local0, Index(PRWP,1))  // Arg1 == Max Sx
+      // } Else {           // ??? Win2k / XP
+     FindSetLeftBit(Local0, Index(PRWP,1))  // Arg1 == Min Sx
+      // }
+    }
+
+    Return(PRWP)
+  }
+}
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/PlatformGpe10nm.asi b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/PlatformGpe10nm.asi
new file mode 100644
index 0000000000..4faa4cbaea
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/PlatformGpe10nm.asi
@@ -0,0 +1,191 @@
+/** @file
+
+  @copyright
+  Copyright 2017 - 2020 Intel Corporation. <BR>
+
+  SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#include "MaxSocket.h"
+External(\_SB.WERR, DeviceObj)
+
+//  General Purpose Event
+
+Scope (\_GPE) {
+
+  // Based on Socket ID to be notified, evaluate appropriate devices.
+  Method(NTFC, 2){
+    If(And(Arg0, 0x01)){
+      Notify(\_SB.SCK0, Arg1)
+    }
+
+#if MAX_SOCKET > 1
+    If(And(Arg0, 0x02)){
+      Notify(\_SB.SCK1, Arg1)
+    }
+#endif
+
+#if MAX_SOCKET > 2
+    If(And(Arg0, 0x04)){
+      Notify(\_SB.SCK2, Arg1)
+    }
+#endif
+
+#if MAX_SOCKET > 3
+    If(And(Arg0, 0x08)){
+      Notify(\_SB.SCK3, Arg1)
+    }
+#endif
+
+#if MAX_SOCKET > 4
+    If(And(Arg0, 0x10)){
+      Notify(\_SB.SCK4, Arg1)
+    }
+#endif
+
+#if MAX_SOCKET > 5
+    If(And(Arg0, 0x20)){
+      Notify(\_SB.SCK5, Arg1)
+    }
+#endif
+
+#if MAX_SOCKET > 6
+    If(And(Arg0, 0x40)){
+      Notify(\_SB.SCK6, Arg1)
+    }
+#endif
+
+#if MAX_SOCKET > 7
+    If(And(Arg0, 0x80)){
+      Notify(\_SB.SCK7, Arg1)
+    }
+#endif
+  } //End Method NTFC
+#if 0
+  Method(NTFM, 2){
+
+    // Based on Memory Board ID to be notified, evaluate appropriate devices.
+    If(And(Arg0, 0x01)){
+      Notify(\_SB.SCK0.M000, Arg1)
+    }
+    If(And(Arg0, 0x02)){
+      Notify(\_SB.SCK0.M001, Arg1)
+    }
+#if MAX_SOCKET > 1
+    If(And(Arg0, 0x04)){
+      Notify(\_SB.SCK1.M000, Arg1)
+    }
+    If(And(Arg0, 0x08)){
+      Notify(\_SB.SCK1.M001, Arg1)
+    }
+#endif
+#if MAX_SOCKET > 2
+    If(And(Arg0, 0x10)){
+      Notify(\_SB.SCK2.M000, Arg1)
+    }
+    If(And(Arg0, 0x20)){
+      Notify(\_SB.SCK2.M001, Arg1)
+    }
+#endif
+#if MAX_SOCKET > 3
+    If(And(Arg0, 0x40)){
+      Notify(\_SB.SCK3.M000, Arg1)
+    }
+    If(And(Arg0, 0x80)){
+      Notify(\_SB.SCK3.M001, Arg1)
+    }
+#endif
+
+  } // End Method NTFM
+#endif
+
+  Method(NTFI, 2){
+#if MAX_SOCKET > 1
+    If(And(Arg0, 0x01)){
+      Notify(\_SB.PC06, Arg1)
+      Notify(\_SB.PC07, Arg1)
+      Notify(\_SB.PC08, Arg1)
+      Notify(\_SB.PC09, Arg1)
+      Notify(\_SB.PC10, Arg1)
+      Notify(\_SB.PC11, Arg1)
+
+    }
+#endif
+#if MAX_SOCKET > 2
+    If(And(Arg0, 0x02)){
+      Notify(\_SB.PC12, Arg1)
+      Notify(\_SB.PC13, Arg1)
+      Notify(\_SB.PC14, Arg1)
+      Notify(\_SB.PC15, Arg1)
+      Notify(\_SB.PC16, Arg1)
+      Notify(\_SB.PC17, Arg1)
+    }
+#endif
+#if MAX_SOCKET > 3
+    If(And(Arg0, 0x04)){
+      Notify(\_SB.PC18, Arg1)
+      Notify(\_SB.PC19, Arg1)
+      Notify(\_SB.PC20, Arg1)
+      Notify(\_SB.PC21, Arg1)
+      Notify(\_SB.PC22, Arg1)
+      Notify(\_SB.PC23, Arg1)
+    }
+#endif
+  } //End Method NTFI
+
+  // Tell OS to run thru the new status of this device (Software SCI generated from SMM for all Hot plug events)
+  Method (_L62, 0x0, NotSerialized) {
+    if(LEqual(SCI0, 3)) { // Device ejection (Invoked with _EJ0 method called)
+      //NTFM  (SCI1, 3)
+      NTFC  (SCI2, 3)
+      Store (0, SCI0)
+    } ElseIf (LEqual(SCI0, 1)) { // Device check (OS can still reject online request based on resources and capability)
+      NTFC (CPHP, 0)
+      NTFI (IIOP, 0)
+      Store (0, CPHP)
+      Store (0, IIOP)
+      Store (0, SCI0)
+    }
+
+    #include "NvdimmGpe.asi"
+
+    // Retrieve leaf and root notification data pre SWGPE clear
+    Store (NNPR (), Local0)
+
+    Store (0, GPEC)
+
+    if(LEqual(WSCI, 0x1)) {
+      Store(0, WSCI)
+      if(LEqual(DBGM, 0x01)){
+        Store (0x4A, IO80)
+      }
+      If (CondRefOf (\_SB.WERR)) {
+        Notify (\_SB.WERR, 0x80)
+      }
+    }
+
+    // Perform NVDIMM leaf and root notifications with notification data updated post SWGPE clear
+    NNDO (Local0)
+
+    ///
+    /// Handle HWP SCI event
+    ///
+    //#include "HwpLvt.asi"
+
+    //
+    //  Handle eDPC SWGPE event
+    //
+    #include "IioPcieEdpcGpe.asi"
+  }
+
+  // PME supported for Slots, use GPE 9 for PME
+  // Hot plug on all slots for now, change later.
+  // Slot numbers on silk screen might be different than the port number, currently use port numbers.
+  //
+  // IIO PCI_E Slot Hotplug GPE Event
+  //
+  Method (_L61, 0, NotSerialized) {
+    #include "IioPcieHotPlugGpeHandler10nm.asl"
+  }// end of _L61 GPE Method
+
+}// end of _GPE scope
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/PlatformPciTree10nm_EPRP.asi b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/PlatformPciTree10nm_EPRP.asi
new file mode 100644
index 0000000000..2ad0a32d25
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/PlatformPciTree10nm_EPRP.asi
@@ -0,0 +1,5388 @@
+/** @file
+  @copyright
+  Copyright 2005 - 2020 Intel Corporation. <BR>
+
+  SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#include <MaxSocket.h>
+
+#ifndef CONCATENATE2
+#define CONCATENATE2_(a, b) a ## b
+#define CONCATENATE2(a, b)  CONCATENATE2_(a, b)
+#endif
+#ifndef CONCATENATE3
+#define CONCATENATE3_(a, b, c) a ## b ## c
+#define CONCATENATE3(a, b, c) CONCATENATE3_(a, b, c)
+#endif
+
+Scope (\_SB) {
+
+    Name (AR00, Package() {
+        // [IIM0]: IIOMISC on PC00
+        Package() { 0x0000FFFF, 0, 0, 16 },
+        Package() { 0x0000FFFF, 1, 0, 17 },
+        Package() { 0x0000FFFF, 2, 0, 18 },
+        Package() { 0x0000FFFF, 3, 0, 19 },
+        // [CB0A]: CB3DMA on PC00
+        // [CB0E]: CB3DMA on PC00
+        Package() { 0x0001FFFF, 0, 0, 17 },
+        // [CB0B]: CB3DMA on PC00
+        // [CB0F]: CB3DMA on PC00
+        Package() { 0x0001FFFF, 1, 0, 18 },
+        // [CB0C]: CB3DMA on PC00
+        // [CB0G]: CB3DMA on PC00
+        Package() { 0x0001FFFF, 2, 0, 19 },
+        // [CB0D]: CB3DMA on PC00
+        // [CB0H]: CB3DMA on PC00
+        Package() { 0x0001FFFF, 3, 0, 16 },
+        // [MSM1] MSM
+        Package() { 0x0002FFFF, 0, 0, 18 },
+        // [PMON] PMON MSM
+        Package() { 0x0002FFFF, 1, 0, 19 },
+        Package() { 0x0002FFFF, 2, 0, 16 },
+        // [NRPK]: NorthPeak
+        Package() { 0x0002FFFF, 3, 0, 17 },
+        // [DMI0]: Legacy PCI Express Port 0 on PC00
+        Package() { 0x0003FFFF, 0, 0, 19 },
+        // [IHC1]: IE HECI #1
+        // [IHC3]: IE HECI #3
+        Package() { 0x0010FFFF, 0, 0, 16 },
+        // [IHC2]: IE HECI #2
+        Package() { 0x0010FFFF, 1, 0, 17 },
+        // [IIDR]: IE IDE-Redirection (IDE-R)
+        Package() { 0x0010FFFF, 2, 0, 18 },
+        // [IMKT]: IE Keyboard and Text (KT) Redirection
+        Package() { 0x0010FFFF, 3, 0, 19 },
+        // [SAT2]: sSATA Host controller on PCH
+        // [MRO0]: MROM 0 function
+        // [MRO1]: MROM 1 function
+        Package() { 0x0011FFFF, 0, 0, 17 },
+        Package() { 0x0011FFFF, 1, 0, 18 },
+        Package() { 0x0011FFFF, 2, 0, 19 },
+        Package() { 0x0011FFFF, 3, 0, 16 },
+        // [XHCI]: xHCI controller 1 on PCH
+        Package() { 0x0014FFFF, 0, 0, 16 },
+        Package() { 0x0014FFFF, 1, 0, 17 },
+        // [TERM]: Thermal Subsystem on PCH
+        Package() { 0x0014FFFF, 2, 0, 18 },
+        Package() { 0x0014FFFF, 3, 0, 19 },
+        // [HEC1]: ME HECI #1 on PCH
+        // [HEC3]: ME HECI #3 on PCH
+        Package() { 0x0016FFFF, 0, 0, 18 },
+        // [HEC2]: ME HECI #2 on PCH
+        Package() { 0x0016FFFF, 1, 0, 19 },
+        // [IDER]: ME IDE redirect on PCH
+        Package() { 0x0016FFFF, 2, 0, 16 },
+        // [MEKT]: MEKT on PCH
+        Package() { 0x0016FFFF, 3, 0, 17 },
+        // [SAT1]: SATA controller 1 on PCH
+        Package() { 0x0017FFFF, 0, 0, 19 },
+        // [RP17]: PCIE PCH Root Port #17
+        Package() { 0x001BFFFF, 0, 0, 19 },
+        // [RP18]: PCIE PCH Root Port #18
+        Package() { 0x001BFFFF, 1, 0, 16 },
+        // [RP19]: PCIE PCH Root Port #19
+        Package() { 0x001BFFFF, 2, 0, 17 },
+        // [RP20]: PCIE PCH Root Port #20
+        Package() { 0x001BFFFF, 3, 0, 18 },
+        // [RP01]: PCIE PCH Root Port #1
+        // [RP05]: PCIE PCH Root Port #5
+        Package() { 0x001CFFFF, 0, 0, 16 },
+        // [RP02]: PCIE PCH Root Port #2
+        // [RP06]: PCIE PCH Root Port #6
+        Package() { 0x001CFFFF, 1, 0, 17 },
+        // [RP03]: PCIE PCH Root Port #3
+        // [RP07]: PCIE PCH Root Port #7
+        Package() { 0x001CFFFF, 2, 0, 18 },
+        // [RP04]: PCIE PCH Root Port #4
+        // [RP08]: PCIE PCH Root Port #8
+        Package() { 0x001CFFFF, 3, 0, 19 },
+        // [RP09]: PCIE PCH Root Port #9
+        // [RP13]: PCIE PCH Root Port #13
+        Package() { 0x001DFFFF, 0, 0, 17 },
+        // [RP10]: PCIE PCH Root Port #10
+        // [RP14]: PCIE PCH Root Port #14
+        Package() { 0x001DFFFF, 1, 0, 18 },
+        // [RP11]: PCIE PCH Root Port #11
+        // [RP15]: PCIE PCH Root Port #15
+        Package() { 0x001DFFFF, 2, 0, 19 },
+        // [RP12]: PCIE PCH Root Port #12
+        // [RP16]: PCIE PCH Root Port #16
+        Package() { 0x001DFFFF, 3, 0, 16 },
+        // [P2SB]: P2SB
+        // [PMC1]: Power Management Controller on PCH
+        // [CAVS]: HD Audio Subsystem Controller on PCH
+        // [SMBS]: SMBus controller on PCH
+        // [GBE1]: GbE Controller on PCH
+        // [TRHB]: Intel Trace Hub on PCH
+        Package() { 0x001FFFFF, 3, 0, 19 },
+        Package() { 0x001FFFFF, 2, 0, 18 },
+        Package() { 0x001FFFFF, 1, 0, 17 },
+        Package() { 0x001FFFFF, 0, 0, 16 },
+    })
+
+    Name (AR01, Package() {
+        // [SLTH]: PCIE PCH Slot #17
+        Package() { 0x0000FFFF, 0, 0, 16 },
+        Package() { 0x0000FFFF, 1, 0, 17 },
+        Package() { 0x0000FFFF, 2, 0, 18 },
+        Package() { 0x0000FFFF, 3, 0, 19 },
+    })
+
+    Name (AR02, Package() {
+        // [SLTI]: PCIE PCH Slot #18
+        Package() { 0x0000FFFF, 0, 0, 17 },
+        Package() { 0x0000FFFF, 1, 0, 18 },
+        Package() { 0x0000FFFF, 2, 0, 19 },
+        Package() { 0x0000FFFF, 3, 0, 16 },
+    })
+
+    Name (AR03, Package() {
+        // [SLTJ]: PCIE PCH Slot #19
+        Package() { 0x0000FFFF, 0, 0, 18 },
+        Package() { 0x0000FFFF, 1, 0, 19 },
+        Package() { 0x0000FFFF, 2, 0, 16 },
+        Package() { 0x0000FFFF, 3, 0, 17 },
+    })
+
+    Name (AR04, Package() {
+        // [SLTK]: PCIE PCH Slot #20
+        Package() { 0x0000FFFF, 0, 0, 19 },
+        Package() { 0x0000FFFF, 1, 0, 16 },
+        Package() { 0x0000FFFF, 2, 0, 17 },
+        Package() { 0x0000FFFF, 3, 0, 18 },
+    })
+
+    Name (AR05, Package() {
+        // [SLT1]: PCIE PCH Slot #1
+        Package() { 0x0000FFFF, 0, 0, 16 },
+        Package() { 0x0000FFFF, 1, 0, 17 },
+        Package() { 0x0000FFFF, 2, 0, 18 },
+        Package() { 0x0000FFFF, 3, 0, 19 },
+    })
+
+    Name (AR06, Package() {
+        // [SLT2]: PCIE PCH Slot #2
+        Package() { 0x0000FFFF, 0, 0, 17 },
+        Package() { 0x0000FFFF, 1, 0, 18 },
+        Package() { 0x0000FFFF, 2, 0, 19 },
+        Package() { 0x0000FFFF, 3, 0, 16 },
+    })
+
+    Name (AR07, Package() {
+        // [SLT3]: PCIE PCH Slot #3
+        Package() { 0x0000FFFF, 0, 0, 18 },
+        Package() { 0x0000FFFF, 1, 0, 19 },
+        Package() { 0x0000FFFF, 2, 0, 16 },
+        Package() { 0x0000FFFF, 3, 0, 17 },
+    })
+
+    Name (AR08, Package() {
+        // [SLT4]: PCIE PCH Slot #4
+        Package() { 0x0000FFFF, 0, 0, 19 },
+        Package() { 0x0000FFFF, 1, 0, 16 },
+        Package() { 0x0000FFFF, 2, 0, 17 },
+        Package() { 0x0000FFFF, 3, 0, 18 },
+    })
+
+    Name (AR09, Package() {
+        // [SLT5]: PCIE PCH Slot #5
+        Package() { 0x0000FFFF, 0, 0, 16 },
+        Package() { 0x0000FFFF, 1, 0, 17 },
+        Package() { 0x0000FFFF, 2, 0, 18 },
+        Package() { 0x0000FFFF, 3, 0, 19 },
+    })
+
+    Name (AR0A, Package() {
+        // [SLT6]: PCIE PCH Slot #6
+        Package() { 0x0000FFFF, 0, 0, 17 },
+        Package() { 0x0000FFFF, 1, 0, 18 },
+        Package() { 0x0000FFFF, 2, 0, 19 },
+        Package() { 0x0000FFFF, 3, 0, 16 },
+    })
+
+    Name (AR0B, Package() {
+        // [SLT7]: PCIE PCH Slot #7
+        Package() { 0x0000FFFF, 0, 0, 18 },
+        Package() { 0x0000FFFF, 1, 0, 19 },
+        Package() { 0x0000FFFF, 2, 0, 16 },
+        Package() { 0x0000FFFF, 3, 0, 17 },
+    })
+
+    Name (AR0C, Package() {
+        // [SLT8]: PCIE PCH Slot #8
+        Package() { 0x0000FFFF, 0, 0, 19 },
+        Package() { 0x0000FFFF, 1, 0, 16 },
+        Package() { 0x0000FFFF, 2, 0, 17 },
+        Package() { 0x0000FFFF, 3, 0, 18 },
+    })
+
+    Name (AR0D, Package() {
+        // [SLT9]: PCIE PCH Slot #9
+        Package() { 0x0000FFFF, 0, 0, 16 },
+        Package() { 0x0000FFFF, 1, 0, 17 },
+        Package() { 0x0000FFFF, 2, 0, 18 },
+        Package() { 0x0000FFFF, 3, 0, 19 },
+    })
+
+    Name (AR0E, Package() {
+        // [SLTA]: PCIE PCH Slot #10
+        Package() { 0x0000FFFF, 0, 0, 17 },
+        Package() { 0x0000FFFF, 1, 0, 18 },
+        Package() { 0x0000FFFF, 2, 0, 19 },
+        Package() { 0x0000FFFF, 3, 0, 16 },
+    })
+
+    Name (AR0F, Package() {
+        // [SLTB]: PCIE PCH Slot #11
+        Package() { 0x0000FFFF, 0, 0, 18 },
+        Package() { 0x0000FFFF, 1, 0, 19 },
+        Package() { 0x0000FFFF, 2, 0, 16 },
+        Package() { 0x0000FFFF, 3, 0, 17 },
+    })
+
+    Name (AR10, Package() {
+        // [SLTC]: PCIE PCH Slot #12
+        Package() { 0x0000FFFF, 0, 0, 19 },
+        Package() { 0x0000FFFF, 1, 0, 16 },
+        Package() { 0x0000FFFF, 2, 0, 17 },
+        Package() { 0x0000FFFF, 3, 0, 18 },
+    })
+
+    Name (AR11, Package() {
+        // [SLTD]: PCIE PCH Slot #13
+        Package() { 0x0000FFFF, 0, 0, 16 },
+        Package() { 0x0000FFFF, 1, 0, 17 },
+        Package() { 0x0000FFFF, 2, 0, 18 },
+        Package() { 0x0000FFFF, 3, 0, 19 },
+    })
+
+    Name (AR12, Package() {
+        // [SLTE]: PCIE PCH Slot #14
+        Package() { 0x0000FFFF, 0, 0, 17 },
+        Package() { 0x0000FFFF, 1, 0, 18 },
+        Package() { 0x0000FFFF, 2, 0, 19 },
+        Package() { 0x0000FFFF, 3, 0, 16 },
+    })
+
+    Name (AR13, Package() {
+        // [SLTF]: PCIE PCH Slot #15
+        Package() { 0x0000FFFF, 0, 0, 18 },
+        Package() { 0x0000FFFF, 1, 0, 19 },
+        Package() { 0x0000FFFF, 2, 0, 16 },
+        Package() { 0x0000FFFF, 3, 0, 17 },
+    })
+
+    Name (AR14, Package() {
+        // [SLTG]: PCIE PCH Slot #16
+        Package() { 0x0000FFFF, 0, 0, 19 },
+        Package() { 0x0000FFFF, 1, 0, 16 },
+        Package() { 0x0000FFFF, 2, 0, 17 },
+        Package() { 0x0000FFFF, 3, 0, 18 },
+    })
+
+    Name (AR15, Package() {
+        // [BR1A]: PCI Express Port 1A on PC01
+        Package() { 0x0002FFFF, 0, 0, 18 },
+        Package() { 0x0002FFFF, 1, 0, 19 },
+        Package() { 0x0002FFFF, 2, 0, 16 },
+        Package() { 0x0002FFFF, 3, 0, 17 },
+        // [BR1B]: PCI Express Port 1B on PC01
+        Package() { 0x0003FFFF, 0, 0, 19 },
+        Package() { 0x0003FFFF, 1, 0, 16 },
+        Package() { 0x0003FFFF, 2, 0, 17 },
+        Package() { 0x0003FFFF, 3, 0, 18 },
+        // [BR1C]: PCI Express Port 1C on PC01
+        Package() { 0x0004FFFF, 0, 0, 16 },
+        Package() { 0x0004FFFF, 1, 0, 17 },
+        Package() { 0x0004FFFF, 2, 0, 18 },
+        Package() { 0x0004FFFF, 3, 0, 19 },
+        // [BR1D]: PCI Express Port 1D on PC01
+        Package() { 0x0005FFFF, 0, 0, 17 },
+        Package() { 0x0005FFFF, 1, 0, 18 },
+        Package() { 0x0005FFFF, 2, 0, 19 },
+        Package() { 0x0005FFFF, 3, 0, 16 },
+    })
+
+    Name (AR16, Package() {
+        // [SL01]: PCI Express Slot 1 on 1A on PC01
+        Package() { 0x0000FFFF, 0, 0, 18 },
+        Package() { 0x0000FFFF, 1, 0, 19 },
+        Package() { 0x0000FFFF, 2, 0, 16 },
+        Package() { 0x0000FFFF, 3, 0, 17 },
+    })
+
+    Name (AR17, Package() {
+        // [SL02]: PCI Express Slot 2 on 1B on PC01
+        Package() { 0x0000FFFF, 0, 0, 19 },
+        Package() { 0x0000FFFF, 1, 0, 16 },
+        Package() { 0x0000FFFF, 2, 0, 17 },
+        Package() { 0x0000FFFF, 3, 0, 18 },
+    })
+
+    Name (AR18, Package() {
+        // [SL03]: PCI Express Slot 3 on 1C on PC01
+        Package() { 0x0000FFFF, 0, 0, 16 },
+        Package() { 0x0000FFFF, 1, 0, 17 },
+        Package() { 0x0000FFFF, 2, 0, 18 },
+        Package() { 0x0000FFFF, 3, 0, 19 },
+    })
+
+    Name (AR19, Package() {
+        // [SL04]: PCI Express Slot 4 on 1D on PC01
+        Package() { 0x0000FFFF, 0, 0, 17 },
+        Package() { 0x0000FFFF, 1, 0, 18 },
+        Package() { 0x0000FFFF, 2, 0, 19 },
+        Package() { 0x0000FFFF, 3, 0, 16 },
+    })
+
+    Name (AR1A, Package() {
+        // [BR2A]: PCI Express Port 2A on PC02
+        Package() { 0x0002FFFF, 0, 0, 18 },
+        Package() { 0x0002FFFF, 1, 0, 19 },
+        Package() { 0x0002FFFF, 2, 0, 16 },
+        Package() { 0x0002FFFF, 3, 0, 17 },
+        // [BR2B]: PCI Express Port 2B on PC02
+        Package() { 0x0003FFFF, 0, 0, 19 },
+        Package() { 0x0003FFFF, 1, 0, 16 },
+        Package() { 0x0003FFFF, 2, 0, 17 },
+        Package() { 0x0003FFFF, 3, 0, 18 },
+        // [BR2C]: PCI Express Port 2C on PC02
+        Package() { 0x0004FFFF, 0, 0, 16 },
+        Package() { 0x0004FFFF, 1, 0, 17 },
+        Package() { 0x0004FFFF, 2, 0, 18 },
+        Package() { 0x0004FFFF, 3, 0, 19 },
+        // [BR2D]: PCI Express Port 2D on PC02
+        Package() { 0x0005FFFF, 0, 0, 17 },
+        Package() { 0x0005FFFF, 1, 0, 18 },
+        Package() { 0x0005FFFF, 2, 0, 19 },
+        Package() { 0x0005FFFF, 3, 0, 16 },
+    })
+
+    Name (AR1B, Package() {
+        // [SL05]: PCI Express Slot 5 on 2A on PC02
+        // [EPCU]: EVA PCIe Uplink
+        Package() { 0x0000FFFF, 0, 0, 18 },
+        Package() { 0x0000FFFF, 1, 0, 19 },
+        Package() { 0x0000FFFF, 2, 0, 16 },
+        Package() { 0x0000FFFF, 3, 0, 17 },
+    })
+
+    Name (AR1C, Package() {
+        // [VSP0]: EVA Virtual Switch Port 0
+        Package() { 0x0000FFFF, 0, 0, 18 },
+        Package() { 0x0000FFFF, 1, 0, 19 },
+        Package() { 0x0000FFFF, 2, 0, 16 },
+        Package() { 0x0000FFFF, 3, 0, 17 },
+        // [VSP1]: EVA Virtual Switch Port 1
+        Package() { 0x0001FFFF, 0, 0, 19 },
+        // [VSP2]: EVA Virtual Switch Port 2
+        Package() { 0x0002FFFF, 0, 0, 16 },
+        // [VSP3]: EVA Virtual Switch Port 3
+        Package() { 0x0003FFFF, 0, 0, 17 },
+    })
+
+    Name (AR1D, Package() {
+        // [CPM0]: EVA CPM0
+        Package() { 0x0000FFFF, 0, 0, 16 },
+    })
+
+    Name (AR1E, Package() {
+        // [CPM1]: EVA CPM1
+        Package() { 0x0000FFFF, 0, 0, 16 },
+    })
+
+    Name (AR1F, Package() {
+        // [CPM2]: EVA CPM2
+        Package() { 0x0000FFFF, 0, 0, 16 },
+    })
+
+    Name (AR20, Package() {
+        // [SL06]: PCI Express Slot 6 on 2B on PC02
+        Package() { 0x0000FFFF, 0, 0, 19 },
+        Package() { 0x0000FFFF, 1, 0, 16 },
+        Package() { 0x0000FFFF, 2, 0, 17 },
+        Package() { 0x0000FFFF, 3, 0, 18 },
+    })
+
+    Name (AR21, Package() {
+        // [SL07]: PCI Express Slot 7 on 2C on PC02
+        Package() { 0x0000FFFF, 0, 0, 16 },
+        Package() { 0x0000FFFF, 1, 0, 17 },
+        Package() { 0x0000FFFF, 2, 0, 18 },
+        Package() { 0x0000FFFF, 3, 0, 19 },
+    })
+
+    Name (AR22, Package() {
+        // [SL08]: PCI Express Slot 8 on 2D on PC02
+        Package() { 0x0000FFFF, 0, 0, 17 },
+        Package() { 0x0000FFFF, 1, 0, 18 },
+        Package() { 0x0000FFFF, 2, 0, 19 },
+        Package() { 0x0000FFFF, 3, 0, 16 },
+    })
+
+    Name (AR23, Package() {
+        // [BR3A]: PCI Express Port 3A on PC03
+        Package() { 0x0002FFFF, 0, 0, 18 },
+        Package() { 0x0002FFFF, 1, 0, 19 },
+        Package() { 0x0002FFFF, 2, 0, 16 },
+        Package() { 0x0002FFFF, 3, 0, 17 },
+        // [BR3B]: PCI Express Port 3B on PC03
+        Package() { 0x0003FFFF, 0, 0, 19 },
+        Package() { 0x0003FFFF, 1, 0, 16 },
+        Package() { 0x0003FFFF, 2, 0, 17 },
+        Package() { 0x0003FFFF, 3, 0, 18 },
+        // [BR3C]: PCI Express Port 3C on PC03
+        Package() { 0x0004FFFF, 0, 0, 16 },
+        Package() { 0x0004FFFF, 1, 0, 17 },
+        Package() { 0x0004FFFF, 2, 0, 18 },
+        Package() { 0x0004FFFF, 3, 0, 19 },
+        // [BR3D]: PCI Express Port 3D on PC03
+        Package() { 0x0005FFFF, 0, 0, 17 },
+        Package() { 0x0005FFFF, 1, 0, 18 },
+        Package() { 0x0005FFFF, 2, 0, 19 },
+        Package() { 0x0005FFFF, 3, 0, 16 },
+    })
+
+    Name (AR24, Package() {
+        // [SL09]: PCI Express Slot 9 on 3A on PC03
+        Package() { 0x0000FFFF, 0, 0, 18 },
+        Package() { 0x0000FFFF, 1, 0, 19 },
+        Package() { 0x0000FFFF, 2, 0, 16 },
+        Package() { 0x0000FFFF, 3, 0, 17 },
+    })
+
+    Name (AR25, Package() {
+        // [SL0A]: PCI Express Slot 10 on 3B on PC03
+        Package() { 0x0000FFFF, 0, 0, 19 },
+        Package() { 0x0000FFFF, 1, 0, 16 },
+        Package() { 0x0000FFFF, 2, 0, 17 },
+        Package() { 0x0000FFFF, 3, 0, 18 },
+    })
+
+    Name (AR26, Package() {
+        // [SL0B]: PCI Express Slot 11 on 3C on PC03
+        Package() { 0x0000FFFF, 0, 0, 16 },
+        Package() { 0x0000FFFF, 1, 0, 17 },
+        Package() { 0x0000FFFF, 2, 0, 18 },
+        Package() { 0x0000FFFF, 3, 0, 19 },
+    })
+
+    Name (AR27, Package() {
+        // [SL0C]: PCI Express Slot 12 on 3D on PC03
+        Package() { 0x0000FFFF, 0, 0, 17 },
+        Package() { 0x0000FFFF, 1, 0, 18 },
+        Package() { 0x0000FFFF, 2, 0, 19 },
+        Package() { 0x0000FFFF, 3, 0, 16 },
+    })
+
+    Name (AR28, Package() {
+        // [BR4A]: PCI Express Port 4A on PC04
+        Package() { 0x0002FFFF, 0, 0, 18 },
+        Package() { 0x0002FFFF, 1, 0, 19 },
+        Package() { 0x0002FFFF, 2, 0, 16 },
+        Package() { 0x0002FFFF, 3, 0, 17 },
+        // [BR4B]: PCI Express Port 4B on PC04
+        Package() { 0x0003FFFF, 0, 0, 19 },
+        Package() { 0x0003FFFF, 1, 0, 16 },
+        Package() { 0x0003FFFF, 2, 0, 17 },
+        Package() { 0x0003FFFF, 3, 0, 18 },
+        // [BR4C]: PCI Express Port 4C on PC04
+        Package() { 0x0004FFFF, 0, 0, 16 },
+        Package() { 0x0004FFFF, 1, 0, 17 },
+        Package() { 0x0004FFFF, 2, 0, 18 },
+        Package() { 0x0004FFFF, 3, 0, 19 },
+        // [BR4D]: PCI Express Port 4D on PC04
+        Package() { 0x0005FFFF, 0, 0, 17 },
+        Package() { 0x0005FFFF, 1, 0, 18 },
+        Package() { 0x0005FFFF, 2, 0, 19 },
+        Package() { 0x0005FFFF, 3, 0, 16 },
+    })
+
+    Name (AR29, Package() {
+        // [SL0D]: PCI Express Slot 13 on 4A on PC04
+        Package() { 0x0000FFFF, 0, 0, 18 },
+        Package() { 0x0000FFFF, 1, 0, 19 },
+        Package() { 0x0000FFFF, 2, 0, 16 },
+        Package() { 0x0000FFFF, 3, 0, 17 },
+    })
+
+    Name (AR2A, Package() {
+        // [SL0E]: PCI Express Slot 14 on 4B on PC04
+        Package() { 0x0000FFFF, 0, 0, 19 },
+        Package() { 0x0000FFFF, 1, 0, 16 },
+        Package() { 0x0000FFFF, 2, 0, 17 },
+        Package() { 0x0000FFFF, 3, 0, 18 },
+    })
+
+    Name (AR2B, Package() {
+        // [SL0F]: PCI Express Slot 15 on 4C on PC04
+        Package() { 0x0000FFFF, 0, 0, 16 },
+        Package() { 0x0000FFFF, 1, 0, 17 },
+        Package() { 0x0000FFFF, 2, 0, 18 },
+        Package() { 0x0000FFFF, 3, 0, 19 },
+    })
+
+    Name (AR2C, Package() {
+        // [SL10]: PCI Express Slot 16 on 4D on PC04
+        Package() { 0x0000FFFF, 0, 0, 17 },
+        Package() { 0x0000FFFF, 1, 0, 18 },
+        Package() { 0x0000FFFF, 2, 0, 19 },
+        Package() { 0x0000FFFF, 3, 0, 16 },
+    })
+
+    Name (AR2D, Package() {
+        // [BR5A]: PCI Express Port 5A on PC05
+        Package() { 0x0002FFFF, 0, 0, 18 },
+        Package() { 0x0002FFFF, 1, 0, 19 },
+        Package() { 0x0002FFFF, 2, 0, 16 },
+        Package() { 0x0002FFFF, 3, 0, 17 },
+        // [BR5B]: PCI Express Port 5B on PC05
+        Package() { 0x0003FFFF, 0, 0, 19 },
+        Package() { 0x0003FFFF, 1, 0, 16 },
+        Package() { 0x0003FFFF, 2, 0, 17 },
+        Package() { 0x0003FFFF, 3, 0, 18 },
+        // [BR5C]: PCI Express Port 5C on PC05
+        Package() { 0x0004FFFF, 0, 0, 16 },
+        Package() { 0x0004FFFF, 1, 0, 17 },
+        Package() { 0x0004FFFF, 2, 0, 18 },
+        Package() { 0x0004FFFF, 3, 0, 19 },
+        // [BR5D]: PCI Express Port 5D on PC05
+        Package() { 0x0005FFFF, 0, 0, 17 },
+        Package() { 0x0005FFFF, 1, 0, 18 },
+        Package() { 0x0005FFFF, 2, 0, 19 },
+        Package() { 0x0005FFFF, 3, 0, 16 },
+    })
+
+    Name (AR2E, Package() {
+        // [SL11]: PCI Express Slot 17 on 5A on PC05
+        Package() { 0x0000FFFF, 0, 0, 18 },
+        Package() { 0x0000FFFF, 1, 0, 19 },
+        Package() { 0x0000FFFF, 2, 0, 16 },
+        Package() { 0x0000FFFF, 3, 0, 17 },
+    })
+
+    Name (AR2F, Package() {
+        // [SL12]: PCI Express Slot 18 on 5B on PC05
+        Package() { 0x0000FFFF, 0, 0, 19 },
+        Package() { 0x0000FFFF, 1, 0, 16 },
+        Package() { 0x0000FFFF, 2, 0, 17 },
+        Package() { 0x0000FFFF, 3, 0, 18 },
+    })
+
+    Name (AR30, Package() {
+        // [SL13]: PCI Express Slot 19 on 5C on PC05
+        Package() { 0x0000FFFF, 0, 0, 16 },
+        Package() { 0x0000FFFF, 1, 0, 17 },
+        Package() { 0x0000FFFF, 2, 0, 18 },
+        Package() { 0x0000FFFF, 3, 0, 19 },
+    })
+
+    Name (AR31, Package() {
+        // [SL14]: PCI Express Slot 20 on 5D on PC05
+        Package() { 0x0000FFFF, 0, 0, 17 },
+        Package() { 0x0000FFFF, 1, 0, 18 },
+        Package() { 0x0000FFFF, 2, 0, 19 },
+        Package() { 0x0000FFFF, 3, 0, 16 },
+    })
+
+    Name (AR32, Package() {
+        // [UBX0]: Uncore 0 UBOX Device
+        Package() { 0x0000FFFF, 0, 0, 16 },
+        Package() { 0x0000FFFF, 1, 0, 17 },
+        Package() { 0x0000FFFF, 2, 0, 18 },
+        Package() { 0x0000FFFF, 3, 0, 19 },
+        // [UP00]: Uncore 0 Misc 2 UPI 0-7 Device
+        Package() { 0x0002FFFF, 0, 0, 16 },
+        Package() { 0x0002FFFF, 1, 0, 17 },
+        Package() { 0x0002FFFF, 2, 0, 18 },
+        Package() { 0x0002FFFF, 3, 0, 19 },
+        // [UP01]: Unocre 0 Misc 1 UPI 0-7 Device
+        Package() { 0x0003FFFF, 0, 0, 16 },
+        Package() { 0x0003FFFF, 1, 0, 17 },
+        Package() { 0x0003FFFF, 2, 0, 18 },
+        Package() { 0x0003FFFF, 3, 0, 19 },
+        // [M2U0]: Uncore 0 M2UPI0 Device
+        Package() { 0x0005FFFF, 0, 0, 16 },
+        Package() { 0x0005FFFF, 1, 0, 17 },
+        Package() { 0x0005FFFF, 2, 0, 18 },
+        Package() { 0x0005FFFF, 3, 0, 19 },
+        // [M2U1]: Uncore 0 M2UPI1 Device
+        Package() { 0x0006FFFF, 0, 0, 16 },
+        Package() { 0x0006FFFF, 1, 0, 17 },
+        Package() { 0x0006FFFF, 2, 0, 18 },
+        Package() { 0x0006FFFF, 3, 0, 19 },
+        // [M2U2]: Uncore 0 M2UPI2 Device
+        Package() { 0x0007FFFF, 0, 0, 16 },
+        Package() { 0x0007FFFF, 1, 0, 17 },
+        Package() { 0x0007FFFF, 2, 0, 18 },
+        Package() { 0x0007FFFF, 3, 0, 19 },
+        // [CSM0]: Uncore 0 CHASIS_SMBUS Devices
+        Package() { 0x000BFFFF, 0, 0, 16 },
+        Package() { 0x000BFFFF, 1, 0, 17 },
+        Package() { 0x000BFFFF, 2, 0, 18 },
+        Package() { 0x000BFFFF, 3, 0, 19 },
+        // [M2M0]: Uncore 0 MS2MEM_SCF_MS2MEM0 Device
+        Package() { 0x000CFFFF, 0, 0, 16 },
+        Package() { 0x000CFFFF, 1, 0, 17 },
+        Package() { 0x000CFFFF, 2, 0, 18 },
+        Package() { 0x000CFFFF, 3, 0, 19 },
+        // [M2M1]: Uncore 0 MS2MEM_SCF_MS2MEM1 Device
+        Package() { 0x000DFFFF, 0, 0, 16 },
+        Package() { 0x000DFFFF, 1, 0, 17 },
+        Package() { 0x000DFFFF, 2, 0, 18 },
+        Package() { 0x000DFFFF, 3, 0, 19 },
+        // [MCD0]: Uncore 0 MCDDR0 Device
+        Package() { 0x001AFFFF, 0, 0, 16 },
+        Package() { 0x001AFFFF, 1, 0, 17 },
+        Package() { 0x001AFFFF, 2, 0, 18 },
+        Package() { 0x001AFFFF, 3, 0, 19 },
+        // [MCD1]: Uncore 0 MCDDR1 Device
+        Package() { 0x001BFFFF, 0, 0, 16 },
+        Package() { 0x001BFFFF, 1, 0, 17 },
+        Package() { 0x001BFFFF, 2, 0, 18 },
+        Package() { 0x001BFFFF, 3, 0, 19 },
+    })
+
+    Name (AR33, Package() {
+        // [CHA0]: Uncore 1 GRP1_CHA0-7 Device
+        Package() { 0x0000FFFF, 0, 0, 16 },
+        Package() { 0x0000FFFF, 1, 0, 17 },
+        Package() { 0x0000FFFF, 2, 0, 18 },
+        Package() { 0x0000FFFF, 3, 0, 19 },
+        // [CHA1]: Uncore 1 GRP1_CHA8-15 Device
+        Package() { 0x0001FFFF, 0, 0, 16 },
+        Package() { 0x0001FFFF, 1, 0, 17 },
+        Package() { 0x0001FFFF, 2, 0, 18 },
+        Package() { 0x0001FFFF, 3, 0, 19 },
+        // [CHA2]: Uncore 1 GRP1_CHA16-23 Device
+        Package() { 0x0002FFFF, 0, 0, 16 },
+        Package() { 0x0002FFFF, 1, 0, 17 },
+        Package() { 0x0002FFFF, 2, 0, 18 },
+        Package() { 0x0002FFFF, 3, 0, 19 },
+        // [CHA3]: Uncore 1 GRP1_CHAU24-31 Device
+        Package() { 0x0003FFFF, 0, 0, 16 },
+        Package() { 0x0003FFFF, 1, 0, 17 },
+        Package() { 0x0003FFFF, 2, 0, 18 },
+        Package() { 0x0003FFFF, 3, 0, 19 },
+        // [CHA4]: Uncore 1 GRP1_CHA32-33 Device
+        Package() { 0x0004FFFF, 0, 0, 16 },
+        Package() { 0x0004FFFF, 1, 0, 17 },
+        Package() { 0x0004FFFF, 2, 0, 18 },
+        Package() { 0x0004FFFF, 3, 0, 19 },
+        // [CHA5]: Uncore 1 GRP0_CHA0-7 Device
+        Package() { 0x000AFFFF, 0, 0, 16 },
+        Package() { 0x000AFFFF, 1, 0, 17 },
+        Package() { 0x000AFFFF, 2, 0, 18 },
+        Package() { 0x000AFFFF, 3, 0, 19 },
+        // [CHA8]: Uncore 1 GRP0_CHA24-31 Device
+        Package() { 0x000DFFFF, 0, 0, 16 },
+        Package() { 0x000DFFFF, 1, 0, 17 },
+        Package() { 0x000DFFFF, 2, 0, 18 },
+        Package() { 0x000DFFFF, 3, 0, 19 },
+        // [CHA9]: Uncore 1 GRP0_CHA32-33 Device
+        Package() { 0x000EFFFF, 0, 0, 16 },
+        Package() { 0x000EFFFF, 1, 0, 17 },
+        Package() { 0x000EFFFF, 2, 0, 18 },
+        Package() { 0x000EFFFF, 3, 0, 19 },
+        // [CHA6]: Uncore 1 GRP0_CHA8-15 Device
+        Package() { 0x00B0FFFF, 0, 0, 16 },
+        Package() { 0x00B0FFFF, 1, 0, 17 },
+        Package() { 0x00B0FFFF, 2, 0, 18 },
+        Package() { 0x00B0FFFF, 3, 0, 19 },
+        // [CHA7]: Uncore 1 GRP0_CHA16-23 Device
+        Package() { 0x000CFFFF, 0, 0, 16 },
+        Package() { 0x000CFFFF, 1, 0, 17 },
+        Package() { 0x000CFFFF, 2, 0, 18 },
+        Package() { 0x000CFFFF, 3, 0, 19 },
+        // [CA00]: Uncore 1 CHAALL0-1 Device
+        Package() { 0x001DFFFF, 0, 0, 16 },
+        Package() { 0x001DFFFF, 1, 0, 17 },
+        Package() { 0x001DFFFF, 2, 0, 18 },
+        Package() { 0x001DFFFF, 3, 0, 19 },
+        // [PUC0]: Uncore 1 CHASIS_PUINT0-7 Device
+        Package() { 0x001EFFFF, 0, 0, 16 },
+        Package() { 0x001EFFFF, 1, 0, 17 },
+        Package() { 0x001EFFFF, 2, 0, 18 },
+        Package() { 0x001EFFFF, 3, 0, 19 },
+        // [GN30]: Uncore 1 Gen3Phy Device
+        Package() { 0x001FFFFF, 0, 0, 16 },
+        Package() { 0x001FFFFF, 1, 0, 17 },
+        Package() { 0x001FFFFF, 2, 0, 18 },
+        Package() { 0x001FFFFF, 3, 0, 19 },
+    })
+#if MAX_SOCKET > 1
+    Name (AR34, Package() {
+        // [IIM1]: IIOMISC on PC06
+        Package() { 0x0000FFFF, 0, 0, 16 },
+        Package() { 0x0000FFFF, 1, 0, 17 },
+        Package() { 0x0000FFFF, 2, 0, 18 },
+        Package() { 0x0000FFFF, 3, 0, 19 },
+        // [CB1A]: CB3DMA on PC06
+        // [CB1E]: CB3DMA on PC06
+        Package() { 0x0001FFFF, 0, 0, 16 },
+        // [CB1B]: CB3DMA on PC06
+        // [CB1F]: CB3DMA on PC06
+        Package() { 0x0001FFFF, 1, 0, 17 },
+        // [CB1C]: CB3DMA on PC06
+        // [CB1G]: CB3DMA on PC06
+        Package() { 0x0001FFFF, 2, 0, 18 },
+        // [CB1D]: CB3DMA on PC06
+        // [CB1H]: CB3DMA on PC06
+        Package() { 0x0001FFFF, 3, 0, 19 },
+        // NorthPeak
+        Package() { 0x0002FFFF, 0, 0, 18 },
+    })
+
+    Name (AR35, Package() {
+        // [QR1A]: PCI Express Port 1A on PC07
+        Package() { 0x0002FFFF, 0, 0, 18 },
+        Package() { 0x0002FFFF, 1, 0, 19 },
+        Package() { 0x0002FFFF, 2, 0, 16 },
+        Package() { 0x0002FFFF, 3, 0, 17 },
+        // [QR1B]: PCI Express Port 1B on PC07
+        Package() { 0x0003FFFF, 0, 0, 19 },
+        Package() { 0x0003FFFF, 1, 0, 16 },
+        Package() { 0x0003FFFF, 2, 0, 17 },
+        Package() { 0x0003FFFF, 3, 0, 18 },
+        // [QR1C]: PCI Express Port 1C on PC07
+        Package() { 0x0004FFFF, 0, 0, 16 },
+        Package() { 0x0004FFFF, 1, 0, 17 },
+        Package() { 0x0004FFFF, 2, 0, 18 },
+        Package() { 0x0004FFFF, 3, 0, 19 },
+        // [QR1D]: PCI Express Port 1D on PC07
+        Package() { 0x0005FFFF, 0, 0, 17 },
+        Package() { 0x0005FFFF, 1, 0, 18 },
+        Package() { 0x0005FFFF, 2, 0, 19 },
+        Package() { 0x0005FFFF, 3, 0, 16 },
+    })
+
+    Name (AR36, Package() {
+        // [SL16]: PCI Express Slot 22 on 1A on PC07
+        Package() { 0x0000FFFF, 0, 0, 18 },
+        Package() { 0x0000FFFF, 1, 0, 19 },
+        Package() { 0x0000FFFF, 2, 0, 16 },
+        Package() { 0x0000FFFF, 3, 0, 17 },
+    })
+
+    Name (AR37, Package() {
+        // [SL17]: PCI Express Slot 23 on 1B on PC07
+        Package() { 0x0000FFFF, 0, 0, 19 },
+        Package() { 0x0000FFFF, 1, 0, 16 },
+        Package() { 0x0000FFFF, 2, 0, 17 },
+        Package() { 0x0000FFFF, 3, 0, 18 },
+    })
+
+    Name (AR38, Package() {
+        // [SL18]: PCI Express Slot 24 on 1C on PC07
+        Package() { 0x0000FFFF, 0, 0, 16 },
+        Package() { 0x0000FFFF, 1, 0, 17 },
+        Package() { 0x0000FFFF, 2, 0, 18 },
+        Package() { 0x0000FFFF, 3, 0, 19 },
+    })
+
+    Name (AR39, Package() {
+        // [SL19]: PCI Express Slot 25 on 1D on PC07
+        Package() { 0x0000FFFF, 0, 0, 17 },
+        Package() { 0x0000FFFF, 1, 0, 18 },
+        Package() { 0x0000FFFF, 2, 0, 19 },
+        Package() { 0x0000FFFF, 3, 0, 16 },
+    })
+
+    Name (AR3A, Package() {
+        // [QR2A]: PCI Express Port 2A on PC08
+        Package() { 0x0002FFFF, 0, 0, 18 },
+        Package() { 0x0002FFFF, 1, 0, 19 },
+        Package() { 0x0002FFFF, 2, 0, 16 },
+        Package() { 0x0002FFFF, 3, 0, 17 },
+        // [QR2B]: PCI Express Port 2B on PC08
+        Package() { 0x0003FFFF, 0, 0, 19 },
+        Package() { 0x0003FFFF, 1, 0, 16 },
+        Package() { 0x0003FFFF, 2, 0, 17 },
+        Package() { 0x0003FFFF, 3, 0, 18 },
+        // [QR2C]: PCI Express Port 2C on PC08
+        Package() { 0x0004FFFF, 0, 0, 16 },
+        Package() { 0x0004FFFF, 1, 0, 17 },
+        Package() { 0x0004FFFF, 2, 0, 18 },
+        Package() { 0x0004FFFF, 3, 0, 19 },
+        // [QR2D]: PCI Express Port 2D on PC08
+        Package() { 0x0005FFFF, 0, 0, 17 },
+        Package() { 0x0005FFFF, 1, 0, 18 },
+        Package() { 0x0005FFFF, 2, 0, 19 },
+        Package() { 0x0005FFFF, 3, 0, 16 },
+    })
+
+    Name (AR3B, Package() {
+        // [SL1A]: PCI Express Slot 26 on 2A on PC08
+        Package() { 0x0000FFFF, 0, 0, 18 },
+        Package() { 0x0000FFFF, 1, 0, 19 },
+        Package() { 0x0000FFFF, 2, 0, 16 },
+        Package() { 0x0000FFFF, 3, 0, 17 },
+    })
+
+    Name (AR3C, Package() {
+        // [SL1B]: PCI Express Slot 27 on 2B on PC08
+        Package() { 0x0000FFFF, 0, 0, 19 },
+        Package() { 0x0000FFFF, 1, 0, 16 },
+        Package() { 0x0000FFFF, 2, 0, 17 },
+        Package() { 0x0000FFFF, 3, 0, 18 },
+    })
+
+    Name (AR3D, Package() {
+        // [SL1C]: PCI Express Slot 28 on 2C on PC08
+        Package() { 0x0000FFFF, 0, 0, 16 },
+        Package() { 0x0000FFFF, 1, 0, 17 },
+        Package() { 0x0000FFFF, 2, 0, 18 },
+        Package() { 0x0000FFFF, 3, 0, 19 },
+    })
+
+    Name (AR3E, Package() {
+        // [SL1D]: PCI Express Slot 29 on 2D on PC08
+        Package() { 0x0000FFFF, 0, 0, 17 },
+        Package() { 0x0000FFFF, 1, 0, 18 },
+        Package() { 0x0000FFFF, 2, 0, 19 },
+        Package() { 0x0000FFFF, 3, 0, 16 },
+    })
+
+    Name (AR3F, Package() {
+        // [QR3A]: PCI Express Port 3A on PC09
+        Package() { 0x0002FFFF, 0, 0, 18 },
+        Package() { 0x0002FFFF, 1, 0, 19 },
+        Package() { 0x0002FFFF, 2, 0, 16 },
+        Package() { 0x0002FFFF, 3, 0, 17 },
+        // [QR3B]: PCI Express Port 3B on PC09
+        Package() { 0x0003FFFF, 0, 0, 19 },
+        Package() { 0x0003FFFF, 1, 0, 16 },
+        Package() { 0x0003FFFF, 2, 0, 17 },
+        Package() { 0x0003FFFF, 3, 0, 18 },
+        // [QR3C]: PCI Express Port 3C on PC09
+        Package() { 0x0004FFFF, 0, 0, 16 },
+        Package() { 0x0004FFFF, 1, 0, 17 },
+        Package() { 0x0004FFFF, 2, 0, 18 },
+        Package() { 0x0004FFFF, 3, 0, 19 },
+        // [QR3D]: PCI Express Port 3D on PC09
+        Package() { 0x0005FFFF, 0, 0, 17 },
+        Package() { 0x0005FFFF, 1, 0, 18 },
+        Package() { 0x0005FFFF, 2, 0, 19 },
+        Package() { 0x0005FFFF, 3, 0, 16 },
+    })
+
+    Name (AR40, Package() {
+        // [SL1E]: PCI Express Slot 30 on 3A on PC09
+        Package() { 0x0000FFFF, 0, 0, 18 },
+        Package() { 0x0000FFFF, 1, 0, 19 },
+        Package() { 0x0000FFFF, 2, 0, 16 },
+        Package() { 0x0000FFFF, 3, 0, 17 },
+    })
+
+    Name (AR41, Package() {
+        // [SL1F]: PCI Express Slot 31 on 3B on PC09
+        Package() { 0x0000FFFF, 0, 0, 19 },
+        Package() { 0x0000FFFF, 1, 0, 16 },
+        Package() { 0x0000FFFF, 2, 0, 17 },
+        Package() { 0x0000FFFF, 3, 0, 18 },
+    })
+
+    Name (AR42, Package() {
+        // [SL20]: PCI Express Slot 32 on 3C on PC09
+        Package() { 0x0000FFFF, 0, 0, 16 },
+        Package() { 0x0000FFFF, 1, 0, 17 },
+        Package() { 0x0000FFFF, 2, 0, 18 },
+        Package() { 0x0000FFFF, 3, 0, 19 },
+    })
+
+    Name (AR43, Package() {
+        // [SL21]: PCI Express Slot 33 on 3D on PC09
+        Package() { 0x0000FFFF, 0, 0, 17 },
+        Package() { 0x0000FFFF, 1, 0, 18 },
+        Package() { 0x0000FFFF, 2, 0, 19 },
+        Package() { 0x0000FFFF, 3, 0, 16 },
+    })
+
+    Name (AR44, Package() {
+        // [QR4A]: PCI Express Port 4A on PC10
+        Package() { 0x0002FFFF, 0, 0, 18 },
+        Package() { 0x0002FFFF, 1, 0, 19 },
+        Package() { 0x0002FFFF, 2, 0, 16 },
+        Package() { 0x0002FFFF, 3, 0, 17 },
+        // [QR4B]: PCI Express Port 4B on PC10
+        Package() { 0x0003FFFF, 0, 0, 19 },
+        Package() { 0x0003FFFF, 1, 0, 16 },
+        Package() { 0x0003FFFF, 2, 0, 17 },
+        Package() { 0x0003FFFF, 3, 0, 18 },
+        // [QR4C]: PCI Express Port 4C on PC10
+        Package() { 0x0004FFFF, 0, 0, 16 },
+        Package() { 0x0004FFFF, 1, 0, 17 },
+        Package() { 0x0004FFFF, 2, 0, 18 },
+        Package() { 0x0004FFFF, 3, 0, 19 },
+        // [QR4D]: PCI Express Port 4D on PC10
+        Package() { 0x0005FFFF, 0, 0, 17 },
+        Package() { 0x0005FFFF, 1, 0, 18 },
+        Package() { 0x0005FFFF, 2, 0, 19 },
+        Package() { 0x0005FFFF, 3, 0, 16 },
+    })
+
+    Name (AR45, Package() {
+        // [SL22]: PCI Express Slot 34 on 4A on PC10
+        Package() { 0x0000FFFF, 0, 0, 18 },
+        Package() { 0x0000FFFF, 1, 0, 19 },
+        Package() { 0x0000FFFF, 2, 0, 16 },
+        Package() { 0x0000FFFF, 3, 0, 17 },
+    })
+
+    Name (AR46, Package() {
+        // [SL23]: PCI Express Slot 35 on 4B on PC10
+        Package() { 0x0000FFFF, 0, 0, 19 },
+        Package() { 0x0000FFFF, 1, 0, 16 },
+        Package() { 0x0000FFFF, 2, 0, 17 },
+        Package() { 0x0000FFFF, 3, 0, 18 },
+    })
+
+    Name (AR47, Package() {
+        // [SL24]: PCI Express Slot 36 on 4C on PC10
+        Package() { 0x0000FFFF, 0, 0, 16 },
+        Package() { 0x0000FFFF, 1, 0, 17 },
+        Package() { 0x0000FFFF, 2, 0, 18 },
+        Package() { 0x0000FFFF, 3, 0, 19 },
+    })
+
+    Name (AR48, Package() {
+        // [SL25]: PCI Express Slot 37 on 4D on PC10
+        Package() { 0x0000FFFF, 0, 0, 17 },
+        Package() { 0x0000FFFF, 1, 0, 18 },
+        Package() { 0x0000FFFF, 2, 0, 19 },
+        Package() { 0x0000FFFF, 3, 0, 16 },
+    })
+
+    Name (AR49, Package() {
+        // [QR5A]: PCI Express Port 5A on PC11
+        Package() { 0x0002FFFF, 0, 0, 18 },
+        Package() { 0x0002FFFF, 1, 0, 19 },
+        Package() { 0x0002FFFF, 2, 0, 16 },
+        Package() { 0x0002FFFF, 3, 0, 17 },
+        // [QR5B]: PCI Express Port 5B on PC11
+        Package() { 0x0003FFFF, 0, 0, 19 },
+        Package() { 0x0003FFFF, 1, 0, 16 },
+        Package() { 0x0003FFFF, 2, 0, 17 },
+        Package() { 0x0003FFFF, 3, 0, 18 },
+        // [QR5C]: PCI Express Port 5C on PC11
+        Package() { 0x0004FFFF, 0, 0, 16 },
+        Package() { 0x0004FFFF, 1, 0, 17 },
+        Package() { 0x0004FFFF, 2, 0, 18 },
+        Package() { 0x0004FFFF, 3, 0, 19 },
+        // [QR5D]: PCI Express Port 5D on PC11
+        Package() { 0x0005FFFF, 0, 0, 17 },
+        Package() { 0x0005FFFF, 1, 0, 18 },
+        Package() { 0x0005FFFF, 2, 0, 19 },
+        Package() { 0x0005FFFF, 3, 0, 16 },
+    })
+
+    Name (AR4A, Package() {
+        // [SL26]: PCI Express Slot 38 on 5A on PC11
+        Package() { 0x0000FFFF, 0, 0, 18 },
+        Package() { 0x0000FFFF, 1, 0, 19 },
+        Package() { 0x0000FFFF, 2, 0, 16 },
+        Package() { 0x0000FFFF, 3, 0, 17 },
+    })
+
+    Name (AR4B, Package() {
+        // [SL27]: PCI Express Slot 39 on 5B on PC11
+        Package() { 0x0000FFFF, 0, 0, 19 },
+        Package() { 0x0000FFFF, 1, 0, 16 },
+        Package() { 0x0000FFFF, 2, 0, 17 },
+        Package() { 0x0000FFFF, 3, 0, 18 },
+    })
+
+    Name (AR4C, Package() {
+        // [SL28]: PCI Express Slot 40 on 5C on PC11
+        Package() { 0x0000FFFF, 0, 0, 16 },
+        Package() { 0x0000FFFF, 1, 0, 17 },
+        Package() { 0x0000FFFF, 2, 0, 18 },
+        Package() { 0x0000FFFF, 3, 0, 19 },
+    })
+
+    Name (AR4D, Package() {
+        // [SL29]: PCI Express Slot 41 on 5D on PC11
+        Package() { 0x0000FFFF, 0, 0, 17 },
+        Package() { 0x0000FFFF, 1, 0, 18 },
+        Package() { 0x0000FFFF, 2, 0, 19 },
+        Package() { 0x0000FFFF, 3, 0, 16 },
+    })
+
+    Name (AR4E, Package() {
+        // [UBX1]: Uncore 2 UBOX Device
+        Package() { 0x0000FFFF, 0, 0, 16 },
+        Package() { 0x0000FFFF, 1, 0, 17 },
+        Package() { 0x0000FFFF, 2, 0, 18 },
+        Package() { 0x0000FFFF, 3, 0, 19 },
+        // [UP02]: Uncore 2 Misc 2 UPI 0-7 Device
+        Package() { 0x0002FFFF, 0, 0, 16 },
+        Package() { 0x0002FFFF, 1, 0, 17 },
+        Package() { 0x0002FFFF, 2, 0, 18 },
+        Package() { 0x0002FFFF, 3, 0, 19 },
+        // [UP03]: Uncore 2 Misc 1 UPI 0-7 Device
+        Package() { 0x0003FFFF, 0, 0, 16 },
+        Package() { 0x0003FFFF, 1, 0, 17 },
+        Package() { 0x0003FFFF, 2, 0, 18 },
+        Package() { 0x0003FFFF, 3, 0, 19 },
+        // [M2U3]: Uncore 2 M2UPI0 Device
+        Package() { 0x0005FFFF, 0, 0, 16 },
+        Package() { 0x0005FFFF, 1, 0, 17 },
+        Package() { 0x0005FFFF, 2, 0, 18 },
+        Package() { 0x0005FFFF, 3, 0, 19 },
+        // [M2U4]: Uncore 2 M2UPI1 Device
+        Package() { 0x0006FFFF, 0, 0, 16 },
+        Package() { 0x0006FFFF, 1, 0, 17 },
+        Package() { 0x0006FFFF, 2, 0, 18 },
+        Package() { 0x0006FFFF, 3, 0, 19 },
+        // [M2U5]: Uncore 2 M2UPI2 Device
+        Package() { 0x0007FFFF, 0, 0, 16 },
+        Package() { 0x0007FFFF, 1, 0, 17 },
+        Package() { 0x0007FFFF, 2, 0, 18 },
+        Package() { 0x0007FFFF, 3, 0, 19 },
+        // [CSM1]: Uncore 2 CHASIS_SMBUS Devices
+        Package() { 0x000BFFFF, 0, 0, 16 },
+        Package() { 0x000BFFFF, 1, 0, 17 },
+        Package() { 0x000BFFFF, 2, 0, 18 },
+        Package() { 0x000BFFFF, 3, 0, 19 },
+        // [M2M2]: Uncore 2 MS2MEM_SCF_MS2MEM0 Device
+        Package() { 0x000CFFFF, 0, 0, 16 },
+        Package() { 0x000CFFFF, 1, 0, 17 },
+        Package() { 0x000CFFFF, 2, 0, 18 },
+        Package() { 0x000CFFFF, 3, 0, 19 },
+        // [M2M3]: Uncore 2 MS2MEM_SCF_MS2MEM1 Device
+        Package() { 0x000DFFFF, 0, 0, 16 },
+        Package() { 0x000DFFFF, 1, 0, 17 },
+        Package() { 0x000DFFFF, 2, 0, 18 },
+        Package() { 0x000DFFFF, 3, 0, 19 },
+        // [MCD2]: Uncore 2 MCDDR0 Device
+        Package() { 0x001AFFFF, 0, 0, 16 },
+        Package() { 0x001AFFFF, 1, 0, 17 },
+        Package() { 0x001AFFFF, 2, 0, 18 },
+        Package() { 0x001AFFFF, 3, 0, 19 },
+        // [MCD3]: Uncore 2 MCDDR1 Device
+        Package() { 0x001BFFFF, 0, 0, 16 },
+        Package() { 0x001BFFFF, 1, 0, 17 },
+        Package() { 0x001BFFFF, 2, 0, 18 },
+        Package() { 0x001BFFFF, 3, 0, 19 },
+    })
+
+    Name (AR4F, Package() {
+        // [DHA0]: Uncore 3 GRP1_CHA0-7 Device
+        Package() { 0x0000FFFF, 0, 0, 16 },
+        Package() { 0x0000FFFF, 1, 0, 17 },
+        Package() { 0x0000FFFF, 2, 0, 18 },
+        Package() { 0x0000FFFF, 3, 0, 19 },
+        // [DHA1]: Uncore 3 GRP1_CHA8-15 Device
+        Package() { 0x0001FFFF, 0, 0, 16 },
+        Package() { 0x0001FFFF, 1, 0, 17 },
+        Package() { 0x0001FFFF, 2, 0, 18 },
+        Package() { 0x0001FFFF, 3, 0, 19 },
+        // [DHA2]: Uncore 3 GRP1_CHA16-23 Device
+        Package() { 0x0002FFFF, 0, 0, 16 },
+        Package() { 0x0002FFFF, 1, 0, 17 },
+        Package() { 0x0002FFFF, 2, 0, 18 },
+        Package() { 0x0002FFFF, 3, 0, 19 },
+        // [DHA3]: Uncore 3 GRP1_CHAU24-31 Device
+        Package() { 0x0003FFFF, 0, 0, 16 },
+        Package() { 0x0003FFFF, 1, 0, 17 },
+        Package() { 0x0003FFFF, 2, 0, 18 },
+        Package() { 0x0003FFFF, 3, 0, 19 },
+        // [DHA4]: Uncore 3 GRP1_CHA32-33 Device
+        Package() { 0x0004FFFF, 0, 0, 16 },
+        Package() { 0x0004FFFF, 1, 0, 17 },
+        Package() { 0x0004FFFF, 2, 0, 18 },
+        Package() { 0x0004FFFF, 3, 0, 19 },
+        // [DHA5]: Uncore 3 GRP0_CHA0-7 Device
+        Package() { 0x000AFFFF, 0, 0, 16 },
+        Package() { 0x000AFFFF, 1, 0, 17 },
+        Package() { 0x000AFFFF, 2, 0, 18 },
+        Package() { 0x000AFFFF, 3, 0, 19 },
+        // [DHA8]: Uncore 3 GRP0_CHA24-31 Device
+        Package() { 0x000DFFFF, 0, 0, 16 },
+        Package() { 0x000DFFFF, 1, 0, 17 },
+        Package() { 0x000DFFFF, 2, 0, 18 },
+        Package() { 0x000DFFFF, 3, 0, 19 },
+        // [DHA9]: Uncore 3 GRP0_CHA32-33 Device
+        Package() { 0x000EFFFF, 0, 0, 16 },
+        Package() { 0x000EFFFF, 1, 0, 17 },
+        Package() { 0x000EFFFF, 2, 0, 18 },
+        Package() { 0x000EFFFF, 3, 0, 19 },
+        // [DHA6]: Uncore 3 GRP0_CHA8-15 Device
+        Package() { 0x00B0FFFF, 0, 0, 16 },
+        Package() { 0x00B0FFFF, 1, 0, 17 },
+        Package() { 0x00B0FFFF, 2, 0, 18 },
+        Package() { 0x00B0FFFF, 3, 0, 19 },
+        // [DHA7]: Uncore 3 GRP0_CHA16-23 Device
+        Package() { 0x000CFFFF, 0, 0, 16 },
+        Package() { 0x000CFFFF, 1, 0, 17 },
+        Package() { 0x000CFFFF, 2, 0, 18 },
+        Package() { 0x000CFFFF, 3, 0, 19 },
+        // [CA01]: Uncore 3 CHAALL0-1 Device
+        Package() { 0x001DFFFF, 0, 0, 16 },
+        Package() { 0x001DFFFF, 1, 0, 17 },
+        Package() { 0x001DFFFF, 2, 0, 18 },
+        Package() { 0x001DFFFF, 3, 0, 19 },
+        // [PUC1]: Uncore 3 CHASIS_PUINT0-7 Device
+        Package() { 0x001EFFFF, 0, 0, 16 },
+        Package() { 0x001EFFFF, 1, 0, 17 },
+        Package() { 0x001EFFFF, 2, 0, 18 },
+        Package() { 0x001EFFFF, 3, 0, 19 },
+        // [GN31]: Uncore 3 Gen3Phy Device
+        Package() { 0x001FFFFF, 0, 0, 16 },
+        Package() { 0x001FFFFF, 1, 0, 17 },
+        Package() { 0x001FFFFF, 2, 0, 18 },
+        Package() { 0x001FFFFF, 3, 0, 19 },
+    })
+#endif
+
+#if MAX_SOCKET > 2
+    Name (AR50, Package() {
+        // [IIM2]: IIOMISC on PC12
+        Package() { 0x0000FFFF, 0, 0, 16 },
+        Package() { 0x0000FFFF, 1, 0, 17 },
+        Package() { 0x0000FFFF, 2, 0, 18 },
+        Package() { 0x0000FFFF, 3, 0, 19 },
+        // [CB2A]: CB3DMA on PC12
+        // [CB2E]: CB3DMA on PC12
+        Package() { 0x0001FFFF, 0, 0, 16 },
+        // [CB2B]: CB3DMA on PC12
+        // [CB2F]: CB3DMA on PC12
+        Package() { 0x0001FFFF, 1, 0, 17 },
+        // [CB2C]: CB3DMA on PC12
+        // [CB2G]: CB3DMA on PC12
+        Package() { 0x0001FFFF, 2, 0, 18 },
+        // [CB2D]: CB3DMA on PC12
+        // [CB2H]: CB3DMA on PC12
+        Package() { 0x0001FFFF, 3, 0, 19 },
+        // NorthPeak
+        Package() { 0x0002FFFF, 0, 0, 18 },
+    })
+
+    Name (AR51, Package() {
+        // [RR1A]: PCI Express Port 1A on PC13
+        Package() { 0x0002FFFF, 0, 0, 18 },
+        Package() { 0x0002FFFF, 1, 0, 19 },
+        Package() { 0x0002FFFF, 2, 0, 16 },
+        Package() { 0x0002FFFF, 3, 0, 17 },
+        // [RR1B]: PCI Express Port 1B on PC13
+        Package() { 0x0003FFFF, 0, 0, 19 },
+        Package() { 0x0003FFFF, 1, 0, 16 },
+        Package() { 0x0003FFFF, 2, 0, 17 },
+        Package() { 0x0003FFFF, 3, 0, 18 },
+        // [RR1C]: PCI Express Port 1C on PC13
+        Package() { 0x0004FFFF, 0, 0, 16 },
+        Package() { 0x0004FFFF, 1, 0, 17 },
+        Package() { 0x0004FFFF, 2, 0, 18 },
+        Package() { 0x0004FFFF, 3, 0, 19 },
+        // [RR1D]: PCI Express Port 1D on PC13
+        Package() { 0x0005FFFF, 0, 0, 17 },
+        Package() { 0x0005FFFF, 1, 0, 18 },
+        Package() { 0x0005FFFF, 2, 0, 19 },
+        Package() { 0x0005FFFF, 3, 0, 16 },
+    })
+
+    Name (AR52, Package() {
+        // [SL2B]: PCI Express Slot 43 on 1A on PC13
+        Package() { 0x0000FFFF, 0, 0, 18 },
+        Package() { 0x0000FFFF, 1, 0, 19 },
+        Package() { 0x0000FFFF, 2, 0, 16 },
+        Package() { 0x0000FFFF, 3, 0, 17 },
+    })
+
+    Name (AR53, Package() {
+        // [SL2C]: PCI Express Slot 44 on 1B on PC13
+        Package() { 0x0000FFFF, 0, 0, 19 },
+        Package() { 0x0000FFFF, 1, 0, 16 },
+        Package() { 0x0000FFFF, 2, 0, 17 },
+        Package() { 0x0000FFFF, 3, 0, 18 },
+    })
+
+    Name (AR54, Package() {
+        // [SL2D]: PCI Express Slot 45 on 1C on PC13
+        Package() { 0x0000FFFF, 0, 0, 16 },
+        Package() { 0x0000FFFF, 1, 0, 17 },
+        Package() { 0x0000FFFF, 2, 0, 18 },
+        Package() { 0x0000FFFF, 3, 0, 19 },
+    })
+
+    Name (AR55, Package() {
+        // [SL2E]: PCI Express Slot 46 on 1D on PC13
+        Package() { 0x0000FFFF, 0, 0, 17 },
+        Package() { 0x0000FFFF, 1, 0, 18 },
+        Package() { 0x0000FFFF, 2, 0, 19 },
+        Package() { 0x0000FFFF, 3, 0, 16 },
+    })
+
+    Name (AR56, Package() {
+        // [RR2A]: PCI Express Port 2A on PC14
+        Package() { 0x0002FFFF, 0, 0, 18 },
+        Package() { 0x0002FFFF, 1, 0, 19 },
+        Package() { 0x0002FFFF, 2, 0, 16 },
+        Package() { 0x0002FFFF, 3, 0, 17 },
+        // [RR2B]: PCI Express Port 2B on PC14
+        Package() { 0x0003FFFF, 0, 0, 19 },
+        Package() { 0x0003FFFF, 1, 0, 16 },
+        Package() { 0x0003FFFF, 2, 0, 17 },
+        Package() { 0x0003FFFF, 3, 0, 18 },
+        // [RR2C]: PCI Express Port 2C on PC14
+        Package() { 0x0004FFFF, 0, 0, 16 },
+        Package() { 0x0004FFFF, 1, 0, 17 },
+        Package() { 0x0004FFFF, 2, 0, 18 },
+        Package() { 0x0004FFFF, 3, 0, 19 },
+        // [RR2D]: PCI Express Port 2D on PC14
+        Package() { 0x0005FFFF, 0, 0, 17 },
+        Package() { 0x0005FFFF, 1, 0, 18 },
+        Package() { 0x0005FFFF, 2, 0, 19 },
+        Package() { 0x0005FFFF, 3, 0, 16 },
+    })
+
+    Name (AR57, Package() {
+        // [SL2F]: PCI Express Slot 47 on 2A on PC14
+        Package() { 0x0000FFFF, 0, 0, 18 },
+        Package() { 0x0000FFFF, 1, 0, 19 },
+        Package() { 0x0000FFFF, 2, 0, 16 },
+        Package() { 0x0000FFFF, 3, 0, 17 },
+    })
+
+    Name (AR58, Package() {
+        // [SL30]: PCI Express Slot 48 on 2B on PC14
+        Package() { 0x0000FFFF, 0, 0, 19 },
+        Package() { 0x0000FFFF, 1, 0, 16 },
+        Package() { 0x0000FFFF, 2, 0, 17 },
+        Package() { 0x0000FFFF, 3, 0, 18 },
+    })
+
+    Name (AR59, Package() {
+        // [SL31]: PCI Express Slot 49 on 2C on PC14
+        Package() { 0x0000FFFF, 0, 0, 16 },
+        Package() { 0x0000FFFF, 1, 0, 17 },
+        Package() { 0x0000FFFF, 2, 0, 18 },
+        Package() { 0x0000FFFF, 3, 0, 19 },
+    })
+
+    Name (AR5A, Package() {
+        // [SL32]: PCI Express Slot 50 on 2D on PC14
+        Package() { 0x0000FFFF, 0, 0, 17 },
+        Package() { 0x0000FFFF, 1, 0, 18 },
+        Package() { 0x0000FFFF, 2, 0, 19 },
+        Package() { 0x0000FFFF, 3, 0, 16 },
+    })
+
+    Name (AR5B, Package() {
+        // [RR3A]: PCI Express Port 3A on PC15
+        Package() { 0x0002FFFF, 0, 0, 18 },
+        Package() { 0x0002FFFF, 1, 0, 19 },
+        Package() { 0x0002FFFF, 2, 0, 16 },
+        Package() { 0x0002FFFF, 3, 0, 17 },
+        // [RR3B]: PCI Express Port 3B on PC15
+        Package() { 0x0003FFFF, 0, 0, 19 },
+        Package() { 0x0003FFFF, 1, 0, 16 },
+        Package() { 0x0003FFFF, 2, 0, 17 },
+        Package() { 0x0003FFFF, 3, 0, 18 },
+        // [RR3C]: PCI Express Port 3C on PC15
+        Package() { 0x0004FFFF, 0, 0, 16 },
+        Package() { 0x0004FFFF, 1, 0, 17 },
+        Package() { 0x0004FFFF, 2, 0, 18 },
+        Package() { 0x0004FFFF, 3, 0, 19 },
+        // [RR3D]: PCI Express Port 3D on PC15
+        Package() { 0x0005FFFF, 0, 0, 17 },
+        Package() { 0x0005FFFF, 1, 0, 18 },
+        Package() { 0x0005FFFF, 2, 0, 19 },
+        Package() { 0x0005FFFF, 3, 0, 16 },
+    })
+
+    Name (AR5C, Package() {
+        // [SL33]: PCI Express Slot 51 on 3A on PC15
+        Package() { 0x0000FFFF, 0, 0, 18 },
+        Package() { 0x0000FFFF, 1, 0, 19 },
+        Package() { 0x0000FFFF, 2, 0, 16 },
+        Package() { 0x0000FFFF, 3, 0, 17 },
+    })
+
+    Name (AR5D, Package() {
+        // [SL34]: PCI Express Slot 52 on 3B on PC15
+        Package() { 0x0000FFFF, 0, 0, 19 },
+        Package() { 0x0000FFFF, 1, 0, 16 },
+        Package() { 0x0000FFFF, 2, 0, 17 },
+        Package() { 0x0000FFFF, 3, 0, 18 },
+    })
+
+    Name (AR5E, Package() {
+        // [SL35]: PCI Express Slot 53 on 3C on PC15
+        Package() { 0x0000FFFF, 0, 0, 16 },
+        Package() { 0x0000FFFF, 1, 0, 17 },
+        Package() { 0x0000FFFF, 2, 0, 18 },
+        Package() { 0x0000FFFF, 3, 0, 19 },
+    })
+
+    Name (AR5F, Package() {
+        // [SL36]: PCI Express Slot 54 on 3D on PC15
+        Package() { 0x0000FFFF, 0, 0, 17 },
+        Package() { 0x0000FFFF, 1, 0, 18 },
+        Package() { 0x0000FFFF, 2, 0, 19 },
+        Package() { 0x0000FFFF, 3, 0, 16 },
+    })
+
+    Name (AR60, Package() {
+        // [RR4A]: PCI Express Port 4A on PC16
+        Package() { 0x0002FFFF, 0, 0, 18 },
+        Package() { 0x0002FFFF, 1, 0, 19 },
+        Package() { 0x0002FFFF, 2, 0, 16 },
+        Package() { 0x0002FFFF, 3, 0, 17 },
+        // [RR4B]: PCI Express Port 4B on PC16
+        Package() { 0x0003FFFF, 0, 0, 19 },
+        Package() { 0x0003FFFF, 1, 0, 16 },
+        Package() { 0x0003FFFF, 2, 0, 17 },
+        Package() { 0x0003FFFF, 3, 0, 18 },
+        // [RR4C]: PCI Express Port 4C on PC16
+        Package() { 0x0004FFFF, 0, 0, 16 },
+        Package() { 0x0004FFFF, 1, 0, 17 },
+        Package() { 0x0004FFFF, 2, 0, 18 },
+        Package() { 0x0004FFFF, 3, 0, 19 },
+        // [RR4D]: PCI Express Port 4D on PC16
+        Package() { 0x0005FFFF, 0, 0, 17 },
+        Package() { 0x0005FFFF, 1, 0, 18 },
+        Package() { 0x0005FFFF, 2, 0, 19 },
+        Package() { 0x0005FFFF, 3, 0, 16 },
+    })
+
+    Name (AR61, Package() {
+        // [SL37]: PCI Express Slot 55 on 4A on PC16
+        Package() { 0x0000FFFF, 0, 0, 18 },
+        Package() { 0x0000FFFF, 1, 0, 19 },
+        Package() { 0x0000FFFF, 2, 0, 16 },
+        Package() { 0x0000FFFF, 3, 0, 17 },
+    })
+
+    Name (AR62, Package() {
+        // [SL38]: PCI Express Slot 56 on 4B on PC16
+        Package() { 0x0000FFFF, 0, 0, 19 },
+        Package() { 0x0000FFFF, 1, 0, 16 },
+        Package() { 0x0000FFFF, 2, 0, 17 },
+        Package() { 0x0000FFFF, 3, 0, 18 },
+    })
+
+    Name (AR63, Package() {
+        // [SL39]: PCI Express Slot 57 on 4C on PC16
+        Package() { 0x0000FFFF, 0, 0, 16 },
+        Package() { 0x0000FFFF, 1, 0, 17 },
+        Package() { 0x0000FFFF, 2, 0, 18 },
+        Package() { 0x0000FFFF, 3, 0, 19 },
+    })
+
+    Name (AR64, Package() {
+        // [SL3A]: PCI Express Slot 58 on 4D on PC16
+        Package() { 0x0000FFFF, 0, 0, 17 },
+        Package() { 0x0000FFFF, 1, 0, 18 },
+        Package() { 0x0000FFFF, 2, 0, 19 },
+        Package() { 0x0000FFFF, 3, 0, 16 },
+    })
+
+    Name (AR65, Package() {
+        // [RR5A]: PCI Express Port 5A on PC17
+        Package() { 0x0002FFFF, 0, 0, 18 },
+        Package() { 0x0002FFFF, 1, 0, 19 },
+        Package() { 0x0002FFFF, 2, 0, 16 },
+        Package() { 0x0002FFFF, 3, 0, 17 },
+        // [RR5B]: PCI Express Port 5B on PC17
+        Package() { 0x0003FFFF, 0, 0, 19 },
+        Package() { 0x0003FFFF, 1, 0, 16 },
+        Package() { 0x0003FFFF, 2, 0, 17 },
+        Package() { 0x0003FFFF, 3, 0, 18 },
+        // [RR5C]: PCI Express Port 5C on PC17
+        Package() { 0x0004FFFF, 0, 0, 16 },
+        Package() { 0x0004FFFF, 1, 0, 17 },
+        Package() { 0x0004FFFF, 2, 0, 18 },
+        Package() { 0x0004FFFF, 3, 0, 19 },
+        // [RR5D]: PCI Express Port 5D on PC17
+        Package() { 0x0005FFFF, 0, 0, 17 },
+        Package() { 0x0005FFFF, 1, 0, 18 },
+        Package() { 0x0005FFFF, 2, 0, 19 },
+        Package() { 0x0005FFFF, 3, 0, 16 },
+    })
+
+    Name (AR66, Package() {
+        // [SL3B]: PCI Express Slot 59 on 5A on PC17
+        Package() { 0x0000FFFF, 0, 0, 18 },
+        Package() { 0x0000FFFF, 1, 0, 19 },
+        Package() { 0x0000FFFF, 2, 0, 16 },
+        Package() { 0x0000FFFF, 3, 0, 17 },
+    })
+
+    Name (AR67, Package() {
+        // [SL3C]: PCI Express Slot 60 on 5B on PC17
+        Package() { 0x0000FFFF, 0, 0, 19 },
+        Package() { 0x0000FFFF, 1, 0, 16 },
+        Package() { 0x0000FFFF, 2, 0, 17 },
+        Package() { 0x0000FFFF, 3, 0, 18 },
+    })
+
+    Name (AR68, Package() {
+        // [SL3D]: PCI Express Slot 61 on 5C on PC17
+        Package() { 0x0000FFFF, 0, 0, 16 },
+        Package() { 0x0000FFFF, 1, 0, 17 },
+        Package() { 0x0000FFFF, 2, 0, 18 },
+        Package() { 0x0000FFFF, 3, 0, 19 },
+    })
+
+    Name (AR69, Package() {
+        // [SL3E]: PCI Express Slot 62 on 5D on PC17
+        Package() { 0x0000FFFF, 0, 0, 17 },
+        Package() { 0x0000FFFF, 1, 0, 18 },
+        Package() { 0x0000FFFF, 2, 0, 19 },
+        Package() { 0x0000FFFF, 3, 0, 16 },
+    })
+
+    Name (AR6A, Package() {
+        // [UBX2]: Uncore 4 UBOX Device
+        Package() { 0x0000FFFF, 0, 0, 16 },
+        Package() { 0x0000FFFF, 1, 0, 17 },
+        Package() { 0x0000FFFF, 2, 0, 18 },
+        Package() { 0x0000FFFF, 3, 0, 19 },
+        // [UP04]: Uncore 4 Misc 2 UPI 0-7 Device
+        Package() { 0x0002FFFF, 0, 0, 16 },
+        Package() { 0x0002FFFF, 1, 0, 17 },
+        Package() { 0x0002FFFF, 2, 0, 18 },
+        Package() { 0x0002FFFF, 3, 0, 19 },
+        // [UP05]: Uncore 4 Misc 1 UPI 0-7 Device
+        Package() { 0x0003FFFF, 0, 0, 16 },
+        Package() { 0x0003FFFF, 1, 0, 17 },
+        Package() { 0x0003FFFF, 2, 0, 18 },
+        Package() { 0x0003FFFF, 3, 0, 19 },
+        // [M2U6]: Uncore 4 M2UPI Device
+        Package() { 0x0005FFFF, 0, 0, 16 },
+        Package() { 0x0005FFFF, 1, 0, 17 },
+        Package() { 0x0005FFFF, 2, 0, 18 },
+        Package() { 0x0005FFFF, 3, 0, 19 },
+        // [M2U7]: Uncore 4 M2UPI Device
+        Package() { 0x0006FFFF, 0, 0, 16 },
+        Package() { 0x0006FFFF, 1, 0, 17 },
+        Package() { 0x0006FFFF, 2, 0, 18 },
+        Package() { 0x0006FFFF, 3, 0, 19 },
+        // [M2U8]: Uncore 4 M2UPI Device
+        Package() { 0x0007FFFF, 0, 0, 16 },
+        Package() { 0x0007FFFF, 1, 0, 17 },
+        Package() { 0x0007FFFF, 2, 0, 18 },
+        Package() { 0x0007FFFF, 3, 0, 19 },
+        // [CSM2]: Uncore 4 CHASIS_SMBUS Devices
+        Package() { 0x000BFFFF, 0, 0, 16 },
+        Package() { 0x000BFFFF, 1, 0, 17 },
+        Package() { 0x000BFFFF, 2, 0, 18 },
+        Package() { 0x000BFFFF, 3, 0, 19 },
+        // [M2M4]: Uncore 4 MS2MEM_SCF_MS2MEM0 Device
+        Package() { 0x000CFFFF, 0, 0, 16 },
+        Package() { 0x000CFFFF, 1, 0, 17 },
+        Package() { 0x000CFFFF, 2, 0, 18 },
+        Package() { 0x000CFFFF, 3, 0, 19 },
+        // [M2M5]: Uncore 4 MS2MEM_SCF_MS2MEM1 Device
+        Package() { 0x000DFFFF, 0, 0, 16 },
+        Package() { 0x000DFFFF, 1, 0, 17 },
+        Package() { 0x000DFFFF, 2, 0, 18 },
+        Package() { 0x000DFFFF, 3, 0, 19 },
+        // [MCD4]: Uncore 4 MCDDR0 Device
+        Package() { 0x001AFFFF, 0, 0, 16 },
+        Package() { 0x001AFFFF, 1, 0, 17 },
+        Package() { 0x001AFFFF, 2, 0, 18 },
+        Package() { 0x001AFFFF, 3, 0, 19 },
+        // [MCD5]: Uncore 4 MCDDR1 Device
+        Package() { 0x001BFFFF, 0, 0, 16 },
+        Package() { 0x001BFFFF, 1, 0, 17 },
+        Package() { 0x001BFFFF, 2, 0, 18 },
+        Package() { 0x001BFFFF, 3, 0, 19 },
+    })
+
+    Name (AR6B, Package() {
+        // [EHA0]: Uncore 5 GRP1_CHA0-7 Device
+        Package() { 0x0000FFFF, 0, 0, 16 },
+        Package() { 0x0000FFFF, 1, 0, 17 },
+        Package() { 0x0000FFFF, 2, 0, 18 },
+        Package() { 0x0000FFFF, 3, 0, 19 },
+        // [EHA1]: Uncore 5 GRP1_CHA8-15 Device
+        Package() { 0x0001FFFF, 0, 0, 16 },
+        Package() { 0x0001FFFF, 1, 0, 17 },
+        Package() { 0x0001FFFF, 2, 0, 18 },
+        Package() { 0x0001FFFF, 3, 0, 19 },
+        // [EHA2]: Uncore 5 GRP1_CHA16-23 Device
+        Package() { 0x0002FFFF, 0, 0, 16 },
+        Package() { 0x0002FFFF, 1, 0, 17 },
+        Package() { 0x0002FFFF, 2, 0, 18 },
+        Package() { 0x0002FFFF, 3, 0, 19 },
+        // [EHA3]: Uncore 5 GRP1_CHAU24-31 Device
+        Package() { 0x0003FFFF, 0, 0, 16 },
+        Package() { 0x0003FFFF, 1, 0, 17 },
+        Package() { 0x0003FFFF, 2, 0, 18 },
+        Package() { 0x0003FFFF, 3, 0, 19 },
+        // [EHA4]: Uncore 5 GRP1_CHA32-33 Device
+        Package() { 0x0004FFFF, 0, 0, 16 },
+        Package() { 0x0004FFFF, 1, 0, 17 },
+        Package() { 0x0004FFFF, 2, 0, 18 },
+        Package() { 0x0004FFFF, 3, 0, 19 },
+        // [EHA5]: Uncore 5 GRP0_CHA0-7 Device
+        Package() { 0x000AFFFF, 0, 0, 16 },
+        Package() { 0x000AFFFF, 1, 0, 17 },
+        Package() { 0x000AFFFF, 2, 0, 18 },
+        Package() { 0x000AFFFF, 3, 0, 19 },
+        // [EHA8]: Uncore 5 GRP0_CHA24-31 Device
+        Package() { 0x000DFFFF, 0, 0, 16 },
+        Package() { 0x000DFFFF, 1, 0, 17 },
+        Package() { 0x000DFFFF, 2, 0, 18 },
+        Package() { 0x000DFFFF, 3, 0, 19 },
+        // [EHA9]: Uncore 5 GRP0_CHA32-33 Device
+        Package() { 0x000EFFFF, 0, 0, 16 },
+        Package() { 0x000EFFFF, 1, 0, 17 },
+        Package() { 0x000EFFFF, 2, 0, 18 },
+        Package() { 0x000EFFFF, 3, 0, 19 },
+        // [EHA6]: Uncore 5 GRP0_CHA8-15 Device
+        Package() { 0x00B0FFFF, 0, 0, 16 },
+        Package() { 0x00B0FFFF, 1, 0, 17 },
+        Package() { 0x00B0FFFF, 2, 0, 18 },
+        Package() { 0x00B0FFFF, 3, 0, 19 },
+        // [EHA7]: Uncore 5 GRP0_CHA16-23 Device
+        Package() { 0x000CFFFF, 0, 0, 16 },
+        Package() { 0x000CFFFF, 1, 0, 17 },
+        Package() { 0x000CFFFF, 2, 0, 18 },
+        Package() { 0x000CFFFF, 3, 0, 19 },
+        // [CA02]: Uncore 5 CHAALL0-1 Device
+        Package() { 0x001DFFFF, 0, 0, 16 },
+        Package() { 0x001DFFFF, 1, 0, 17 },
+        Package() { 0x001DFFFF, 2, 0, 18 },
+        Package() { 0x001DFFFF, 3, 0, 19 },
+        // [PUC2]: Uncore 5 CHASIS_PUINT0-7 Device
+        Package() { 0x001EFFFF, 0, 0, 16 },
+        Package() { 0x001EFFFF, 1, 0, 17 },
+        Package() { 0x001EFFFF, 2, 0, 18 },
+        Package() { 0x001EFFFF, 3, 0, 19 },
+        // [GN32]: Uncore 5 Gen3Phy Device
+        Package() { 0x001FFFFF, 0, 0, 16 },
+        Package() { 0x001FFFFF, 1, 0, 17 },
+        Package() { 0x001FFFFF, 2, 0, 18 },
+        Package() { 0x001FFFFF, 3, 0, 19 },
+    })
+#endif
+
+#if MAX_SOCKET > 3
+    Name (AR6C, Package() {
+        // [IIM3]: IIOMISC on PC18
+        Package() { 0x0000FFFF, 0, 0, 16 },
+        Package() { 0x0000FFFF, 1, 0, 17 },
+        Package() { 0x0000FFFF, 2, 0, 18 },
+        Package() { 0x0000FFFF, 3, 0, 19 },
+        // [CB3A]: CB3DMA on PC18
+        // [CB3E]: CB3DMA on PC18
+        Package() { 0x0001FFFF, 0, 0, 16 },
+        // [CB3B]: CB3DMA on PC18
+        // [CB3F]: CB3DMA on PC18
+        Package() { 0x0001FFFF, 1, 0, 17 },
+        // [CB3C]: CB3DMA on PC18
+        // [CB3G]: CB3DMA on PC18
+        Package() { 0x0001FFFF, 2, 0, 18 },
+        // [CB3D]: CB3DMA on PC18
+        // [CB3H]: CB3DMA on PC18
+        Package() { 0x0001FFFF, 3, 0, 19 },
+        // NorthPeak
+        Package() { 0x0002FFFF, 0, 0, 18 },
+    })
+
+    Name (AR6D, Package() {
+        // [SR1A]: PCI Express Port 1A on PC19
+        Package() { 0x0002FFFF, 0, 0, 18 },
+        Package() { 0x0002FFFF, 1, 0, 19 },
+        Package() { 0x0002FFFF, 2, 0, 16 },
+        Package() { 0x0002FFFF, 3, 0, 17 },
+        // [SR1B]: PCI Express Port 1B on PC19
+        Package() { 0x0003FFFF, 0, 0, 19 },
+        Package() { 0x0003FFFF, 1, 0, 16 },
+        Package() { 0x0003FFFF, 2, 0, 17 },
+        Package() { 0x0003FFFF, 3, 0, 18 },
+        // [SR1C]: PCI Express Port 1C on PC19
+        Package() { 0x0004FFFF, 0, 0, 16 },
+        Package() { 0x0004FFFF, 1, 0, 17 },
+        Package() { 0x0004FFFF, 2, 0, 18 },
+        Package() { 0x0004FFFF, 3, 0, 19 },
+        // [SR1D]: PCI Express Port 1D on PC19
+        Package() { 0x0005FFFF, 0, 0, 17 },
+        Package() { 0x0005FFFF, 1, 0, 18 },
+        Package() { 0x0005FFFF, 2, 0, 19 },
+        Package() { 0x0005FFFF, 3, 0, 16 },
+    })
+
+    Name (AR6E, Package() {
+        // [SL40]: PCI Express Slot 64 on 1A on PC19
+        Package() { 0x0000FFFF, 0, 0, 18 },
+        Package() { 0x0000FFFF, 1, 0, 19 },
+        Package() { 0x0000FFFF, 2, 0, 16 },
+        Package() { 0x0000FFFF, 3, 0, 17 },
+    })
+
+    Name (AR6F, Package() {
+        // [SL41]: PCI Express Slot 65 on 1B on  PC19
+        Package() { 0x0000FFFF, 0, 0, 19 },
+        Package() { 0x0000FFFF, 1, 0, 16 },
+        Package() { 0x0000FFFF, 2, 0, 17 },
+        Package() { 0x0000FFFF, 3, 0, 18 },
+    })
+
+    Name (AR70, Package() {
+        // [SL42]: PCI Express Slot 66 on 1C on  PC19
+        Package() { 0x0000FFFF, 0, 0, 16 },
+        Package() { 0x0000FFFF, 1, 0, 17 },
+        Package() { 0x0000FFFF, 2, 0, 18 },
+        Package() { 0x0000FFFF, 3, 0, 19 },
+    })
+
+    Name (AR71, Package() {
+        // [SL43]: PCI Express Slot 67 on 1D on  PC19
+        Package() { 0x0000FFFF, 0, 0, 17 },
+        Package() { 0x0000FFFF, 1, 0, 18 },
+        Package() { 0x0000FFFF, 2, 0, 19 },
+        Package() { 0x0000FFFF, 3, 0, 16 },
+    })
+
+    Name (AR72, Package() {
+        // [SR2A]: PCI Express Port 2A on  PC20
+        Package() { 0x0002FFFF, 0, 0, 18 },
+        Package() { 0x0002FFFF, 1, 0, 19 },
+        Package() { 0x0002FFFF, 2, 0, 16 },
+        Package() { 0x0002FFFF, 3, 0, 17 },
+        // [SR2B]: PCI Express Port 2B on PC20
+        Package() { 0x0003FFFF, 0, 0, 19 },
+        Package() { 0x0003FFFF, 1, 0, 16 },
+        Package() { 0x0003FFFF, 2, 0, 17 },
+        Package() { 0x0003FFFF, 3, 0, 18 },
+        // [SR2C]: PCI Express Port 2C on PC20
+        Package() { 0x0004FFFF, 0, 0, 16 },
+        Package() { 0x0004FFFF, 1, 0, 17 },
+        Package() { 0x0004FFFF, 2, 0, 18 },
+        Package() { 0x0004FFFF, 3, 0, 19 },
+        // [SR2D]: PCI Express Port 2D on PC20
+        Package() { 0x0005FFFF, 0, 0, 17 },
+        Package() { 0x0005FFFF, 1, 0, 18 },
+        Package() { 0x0005FFFF, 2, 0, 19 },
+        Package() { 0x0005FFFF, 3, 0, 16 },
+    })
+
+    Name (AR73, Package() {
+        // [SL44]: PCI Express Slot 68 on 2A on PC20
+        Package() { 0x0000FFFF, 0, 0, 18 },
+        Package() { 0x0000FFFF, 1, 0, 19 },
+        Package() { 0x0000FFFF, 2, 0, 16 },
+        Package() { 0x0000FFFF, 3, 0, 17 },
+    })
+
+    Name (AR74, Package() {
+        // [SL45]: PCI Express Slot 69 on 2B on PC20
+        Package() { 0x0000FFFF, 0, 0, 19 },
+        Package() { 0x0000FFFF, 1, 0, 16 },
+        Package() { 0x0000FFFF, 2, 0, 17 },
+        Package() { 0x0000FFFF, 3, 0, 18 },
+    })
+
+    Name (AR75, Package() {
+        // [SL46]: PCI Express Slot 70 on 2C on PC20
+        Package() { 0x0000FFFF, 0, 0, 16 },
+        Package() { 0x0000FFFF, 1, 0, 17 },
+        Package() { 0x0000FFFF, 2, 0, 18 },
+        Package() { 0x0000FFFF, 3, 0, 19 },
+    })
+
+    Name (AR76, Package() {
+        // [SL47]: PCI Express Slot 71 on 2D on PC20
+        Package() { 0x0000FFFF, 0, 0, 17 },
+        Package() { 0x0000FFFF, 1, 0, 18 },
+        Package() { 0x0000FFFF, 2, 0, 19 },
+        Package() { 0x0000FFFF, 3, 0, 16 },
+    })
+
+    Name (AR77, Package() {
+        // [SR3A]: PCI Express Port 3A on PC21
+        Package() { 0x0002FFFF, 0, 0, 18 },
+        Package() { 0x0002FFFF, 1, 0, 19 },
+        Package() { 0x0002FFFF, 2, 0, 16 },
+        Package() { 0x0002FFFF, 3, 0, 17 },
+        // [SR3B]: PCI Express Port 3B on PC21
+        Package() { 0x0003FFFF, 0, 0, 19 },
+        Package() { 0x0003FFFF, 1, 0, 16 },
+        Package() { 0x0003FFFF, 2, 0, 17 },
+        Package() { 0x0003FFFF, 3, 0, 18 },
+        // [SR3C]: PCI Express Port 3C on PC21
+        Package() { 0x0004FFFF, 0, 0, 16 },
+        Package() { 0x0004FFFF, 1, 0, 17 },
+        Package() { 0x0004FFFF, 2, 0, 18 },
+        Package() { 0x0004FFFF, 3, 0, 19 },
+        // [SR3D]: PCI Express Port 3D on PC21
+        Package() { 0x0005FFFF, 0, 0, 17 },
+        Package() { 0x0005FFFF, 1, 0, 18 },
+        Package() { 0x0005FFFF, 2, 0, 19 },
+        Package() { 0x0005FFFF, 3, 0, 16 },
+    })
+
+    Name (AR78, Package() {
+        // [SL48]: PCI Express Slot 72 on 3A on PC21
+        Package() { 0x0000FFFF, 0, 0, 18 },
+        Package() { 0x0000FFFF, 1, 0, 19 },
+        Package() { 0x0000FFFF, 2, 0, 16 },
+        Package() { 0x0000FFFF, 3, 0, 17 },
+    })
+
+    Name (AR79, Package() {
+        // [SL49]: PCI Express Slot 73 on 3B on PC21
+        Package() { 0x0000FFFF, 0, 0, 19 },
+        Package() { 0x0000FFFF, 1, 0, 16 },
+        Package() { 0x0000FFFF, 2, 0, 17 },
+        Package() { 0x0000FFFF, 3, 0, 18 },
+    })
+
+    Name (AR7A, Package() {
+        // [SL4A]: PCI Express Slot 74 on 3C on PC21
+        Package() { 0x0000FFFF, 0, 0, 16 },
+        Package() { 0x0000FFFF, 1, 0, 17 },
+        Package() { 0x0000FFFF, 2, 0, 18 },
+        Package() { 0x0000FFFF, 3, 0, 19 },
+    })
+
+    Name (AR7B, Package() {
+        // [SL4B]: PCI Express Slot 75 on 3D on PC21
+        Package() { 0x0000FFFF, 0, 0, 17 },
+        Package() { 0x0000FFFF, 1, 0, 18 },
+        Package() { 0x0000FFFF, 2, 0, 19 },
+        Package() { 0x0000FFFF, 3, 0, 16 },
+    })
+
+    Name (AR7C, Package() {
+        // [SR4A]: PCI Express Port 4A on PC22
+        Package() { 0x0002FFFF, 0, 0, 18 },
+        Package() { 0x0002FFFF, 1, 0, 19 },
+        Package() { 0x0002FFFF, 2, 0, 16 },
+        Package() { 0x0002FFFF, 3, 0, 17 },
+        // [SR4B]: PCI Express Port 4B on PC22
+        Package() { 0x0003FFFF, 0, 0, 19 },
+        Package() { 0x0003FFFF, 1, 0, 16 },
+        Package() { 0x0003FFFF, 2, 0, 17 },
+        Package() { 0x0003FFFF, 3, 0, 18 },
+        // [SR4C]: PCI Express Port 4C on PC22
+        Package() { 0x0004FFFF, 0, 0, 16 },
+        Package() { 0x0004FFFF, 1, 0, 17 },
+        Package() { 0x0004FFFF, 2, 0, 18 },
+        Package() { 0x0004FFFF, 3, 0, 19 },
+        // [SR4D]: PCI Express Port 4D on PC22
+        Package() { 0x0005FFFF, 0, 0, 17 },
+        Package() { 0x0005FFFF, 1, 0, 18 },
+        Package() { 0x0005FFFF, 2, 0, 19 },
+        Package() { 0x0005FFFF, 3, 0, 16 },
+    })
+
+    Name (AR7D, Package() {
+        // [SL4C]: PCI Express Slot 76 on 4A on PC22
+        Package() { 0x0000FFFF, 0, 0, 18 },
+        Package() { 0x0000FFFF, 1, 0, 19 },
+        Package() { 0x0000FFFF, 2, 0, 16 },
+        Package() { 0x0000FFFF, 3, 0, 17 },
+    })
+
+    Name (AR7E, Package() {
+        // [SL4D]: PCI Express Slot 77 on 4B on PC22
+        Package() { 0x0000FFFF, 0, 0, 19 },
+        Package() { 0x0000FFFF, 1, 0, 16 },
+        Package() { 0x0000FFFF, 2, 0, 17 },
+        Package() { 0x0000FFFF, 3, 0, 18 },
+    })
+
+    Name (AR7F, Package() {
+        // [SL4D]: PCI Express Slot 78 on 4C on PC22
+        Package() { 0x0000FFFF, 0, 0, 16 },
+        Package() { 0x0000FFFF, 1, 0, 17 },
+        Package() { 0x0000FFFF, 2, 0, 18 },
+        Package() { 0x0000FFFF, 3, 0, 19 },
+    })
+
+    Name (AR80, Package() {
+        // [SL4E]: PCI Express Slot 79 on 4D on PC22
+        Package() { 0x0000FFFF, 0, 0, 17 },
+        Package() { 0x0000FFFF, 1, 0, 18 },
+        Package() { 0x0000FFFF, 2, 0, 19 },
+        Package() { 0x0000FFFF, 3, 0, 16 },
+    })
+
+    Name (AR81, Package() {
+        // [SR5A]: PCI Express Port 5A on PC23
+        Package() { 0x0002FFFF, 0, 0, 18 },
+        Package() { 0x0002FFFF, 1, 0, 19 },
+        Package() { 0x0002FFFF, 2, 0, 16 },
+        Package() { 0x0002FFFF, 3, 0, 17 },
+        // [SR5B]: PCI Express Port 5B on PC23
+        Package() { 0x0003FFFF, 0, 0, 19 },
+        Package() { 0x0003FFFF, 1, 0, 16 },
+        Package() { 0x0003FFFF, 2, 0, 17 },
+        Package() { 0x0003FFFF, 3, 0, 18 },
+        // [SR5C]: PCI Express Port 5C on PC23
+        Package() { 0x0004FFFF, 0, 0, 16 },
+        Package() { 0x0004FFFF, 1, 0, 17 },
+        Package() { 0x0004FFFF, 2, 0, 18 },
+        Package() { 0x0004FFFF, 3, 0, 19 },
+        // [SR5D]: PCI Express Port 5D on PC23
+        Package() { 0x0005FFFF, 0, 0, 17 },
+        Package() { 0x0005FFFF, 1, 0, 18 },
+        Package() { 0x0005FFFF, 2, 0, 19 },
+        Package() { 0x0005FFFF, 3, 0, 16 },
+    })
+
+    Name (AR82, Package() {
+        // [SL4F]: PCI Express Slot 80 on 5A on PC23
+        Package() { 0x0000FFFF, 0, 0, 18 },
+        Package() { 0x0000FFFF, 1, 0, 19 },
+        Package() { 0x0000FFFF, 2, 0, 16 },
+        Package() { 0x0000FFFF, 3, 0, 17 },
+    })
+
+    Name (AR83, Package() {
+        // [SL50]: PCI Express Slot 81 on 5B on PC23
+        Package() { 0x0000FFFF, 0, 0, 19 },
+        Package() { 0x0000FFFF, 1, 0, 16 },
+        Package() { 0x0000FFFF, 2, 0, 17 },
+        Package() { 0x0000FFFF, 3, 0, 18 },
+    })
+
+    Name (AR84, Package() {
+        // [SL51]: PCI Express Slot 82 on 5C on PC23
+        Package() { 0x0000FFFF, 0, 0, 16 },
+        Package() { 0x0000FFFF, 1, 0, 17 },
+        Package() { 0x0000FFFF, 2, 0, 18 },
+        Package() { 0x0000FFFF, 3, 0, 19 },
+    })
+
+    Name (AR85, Package() {
+        // [SL52]: PCI Express Slot 83 on 5D on PC23
+        Package() { 0x0000FFFF, 0, 0, 17 },
+        Package() { 0x0000FFFF, 1, 0, 18 },
+        Package() { 0x0000FFFF, 2, 0, 19 },
+        Package() { 0x0000FFFF, 3, 0, 16 },
+    })
+
+    Name (AR86, Package() {
+        // [UBX3]: Uncore 6 UBOX Device
+        Package() { 0x0000FFFF, 0, 0, 16 },
+        Package() { 0x0000FFFF, 1, 0, 17 },
+        Package() { 0x0000FFFF, 2, 0, 18 },
+        Package() { 0x0000FFFF, 3, 0, 19 },
+        // [UP06]: Uncore 6 Misc 2 UPI 0-7 Device
+        Package() { 0x0002FFFF, 0, 0, 16 },
+        Package() { 0x0002FFFF, 1, 0, 17 },
+        Package() { 0x0002FFFF, 2, 0, 18 },
+        Package() { 0x0002FFFF, 3, 0, 19 },
+        // [UP07]: Uncore 6 Misc 1 UPI 0-7 Device
+        Package() { 0x0003FFFF, 0, 0, 16 },
+        Package() { 0x0003FFFF, 1, 0, 17 },
+        Package() { 0x0003FFFF, 2, 0, 18 },
+        Package() { 0x0003FFFF, 3, 0, 19 },
+        // [M2U9]: Uncore 6 M2UPI0 Device
+        Package() { 0x0005FFFF, 0, 0, 16 },
+        Package() { 0x0005FFFF, 1, 0, 17 },
+        Package() { 0x0005FFFF, 2, 0, 18 },
+        Package() { 0x0005FFFF, 3, 0, 19 },
+        // [M2UA]: Uncore 6 M2UPI1 Device
+        Package() { 0x0006FFFF, 0, 0, 16 },
+        Package() { 0x0006FFFF, 1, 0, 17 },
+        Package() { 0x0006FFFF, 2, 0, 18 },
+        Package() { 0x0006FFFF, 3, 0, 19 },
+        // [M2UB]: Uncore 6 M2UPI2 Device
+        Package() { 0x0007FFFF, 0, 0, 16 },
+        Package() { 0x0007FFFF, 1, 0, 17 },
+        Package() { 0x0007FFFF, 2, 0, 18 },
+        Package() { 0x0007FFFF, 3, 0, 19 },
+        // [CSM3]: Uncore 6 CHASIS_SMBUS Devices
+        Package() { 0x000BFFFF, 0, 0, 16 },
+        Package() { 0x000BFFFF, 1, 0, 17 },
+        Package() { 0x000BFFFF, 2, 0, 18 },
+        Package() { 0x000BFFFF, 3, 0, 19 },
+        // [M2M6]: Uncore 6 MS2MEM_SCF_MS2MEM0 Device
+        Package() { 0x000CFFFF, 0, 0, 16 },
+        Package() { 0x000CFFFF, 1, 0, 17 },
+        Package() { 0x000CFFFF, 2, 0, 18 },
+        Package() { 0x000CFFFF, 3, 0, 19 },
+        // [M2M7]: Uncore 6 MS2MEM_SCF_MS2MEM1 Device
+        Package() { 0x000DFFFF, 0, 0, 16 },
+        Package() { 0x000DFFFF, 1, 0, 17 },
+        Package() { 0x000DFFFF, 2, 0, 18 },
+        Package() { 0x000DFFFF, 3, 0, 19 },
+        // [MCD6]: Uncore 6 MCDDR0 Device
+        Package() { 0x001AFFFF, 0, 0, 16 },
+        Package() { 0x001AFFFF, 1, 0, 17 },
+        Package() { 0x001AFFFF, 2, 0, 18 },
+        Package() { 0x001AFFFF, 3, 0, 19 },
+        // [MCD7]: Uncore 6 MCDDR1 Device
+        Package() { 0x001BFFFF, 0, 0, 16 },
+        Package() { 0x001BFFFF, 1, 0, 17 },
+        Package() { 0x001BFFFF, 2, 0, 18 },
+        Package() { 0x001BFFFF, 3, 0, 19 },
+    })
+
+    Name (AR87, Package() {
+        // [FHA0]: Uncore 7 GRP1_CHA0-7 Device
+        Package() { 0x0000FFFF, 0, 0, 16 },
+        Package() { 0x0000FFFF, 1, 0, 17 },
+        Package() { 0x0000FFFF, 2, 0, 18 },
+        Package() { 0x0000FFFF, 3, 0, 19 },
+        // [FHA1]: Uncore 7 GRP1_CHA8-15 Device
+        Package() { 0x0001FFFF, 0, 0, 16 },
+        Package() { 0x0001FFFF, 1, 0, 17 },
+        Package() { 0x0001FFFF, 2, 0, 18 },
+        Package() { 0x0001FFFF, 3, 0, 19 },
+        // [FHA2]: Uncore 7 GRP1_CHA16-23 Device
+        Package() { 0x0002FFFF, 0, 0, 16 },
+        Package() { 0x0002FFFF, 1, 0, 17 },
+        Package() { 0x0002FFFF, 2, 0, 18 },
+        Package() { 0x0002FFFF, 3, 0, 19 },
+        // [FHA3]: Uncore 7 GRP1_CHAU24-31 Device
+        Package() { 0x0003FFFF, 0, 0, 16 },
+        Package() { 0x0003FFFF, 1, 0, 17 },
+        Package() { 0x0003FFFF, 2, 0, 18 },
+        Package() { 0x0003FFFF, 3, 0, 19 },
+        // [FHA4]: Uncore 7 GRP1_CHA32-33 Device
+        Package() { 0x0004FFFF, 0, 0, 16 },
+        Package() { 0x0004FFFF, 1, 0, 17 },
+        Package() { 0x0004FFFF, 2, 0, 18 },
+        Package() { 0x0004FFFF, 3, 0, 19 },
+        // [FHA5]: Uncore 7 GRP0_CHA0-7 Device
+        Package() { 0x000AFFFF, 0, 0, 16 },
+        Package() { 0x000AFFFF, 1, 0, 17 },
+        Package() { 0x000AFFFF, 2, 0, 18 },
+        Package() { 0x000AFFFF, 3, 0, 19 },
+        // [FHA8]: Uncore 7 GRP0_CHA24-31 Device
+        Package() { 0x000DFFFF, 0, 0, 16 },
+        Package() { 0x000DFFFF, 1, 0, 17 },
+        Package() { 0x000DFFFF, 2, 0, 18 },
+        Package() { 0x000DFFFF, 3, 0, 19 },
+        // [FHA9]: Uncore 7 GRP0_CHA32-33 Device
+        Package() { 0x000EFFFF, 0, 0, 16 },
+        Package() { 0x000EFFFF, 1, 0, 17 },
+        Package() { 0x000EFFFF, 2, 0, 18 },
+        Package() { 0x000EFFFF, 3, 0, 19 },
+        // [FHA6]: Uncore 7 GRP0_CHA8-15 Device
+        Package() { 0x00B0FFFF, 0, 0, 16 },
+        Package() { 0x00B0FFFF, 1, 0, 17 },
+        Package() { 0x00B0FFFF, 2, 0, 18 },
+        Package() { 0x00B0FFFF, 3, 0, 19 },
+        // [FHA7]: Uncore 7 GRP0_CHA16-23 Device
+        Package() { 0x000CFFFF, 0, 0, 16 },
+        Package() { 0x000CFFFF, 1, 0, 17 },
+        Package() { 0x000CFFFF, 2, 0, 18 },
+        Package() { 0x000CFFFF, 3, 0, 19 },
+        // [CA03]: Uncore 7 CHAALL0-1 Device
+        Package() { 0x001DFFFF, 0, 0, 16 },
+        Package() { 0x001DFFFF, 1, 0, 17 },
+        Package() { 0x001DFFFF, 2, 0, 18 },
+        Package() { 0x001DFFFF, 3, 0, 19 },
+        // [PUC3]: Uncore 7 CHASIS_PUINT0-7 Device
+        Package() { 0x001EFFFF, 0, 0, 16 },
+        Package() { 0x001EFFFF, 1, 0, 17 },
+        Package() { 0x001EFFFF, 2, 0, 18 },
+        Package() { 0x001EFFFF, 3, 0, 19 },
+        // [GN33]: Uncore 7 Gen3Phy Device
+        Package() { 0x001FFFFF, 0, 0, 16 },
+        Package() { 0x001FFFFF, 1, 0, 17 },
+        Package() { 0x001FFFFF, 2, 0, 18 },
+        Package() { 0x001FFFFF, 3, 0, 19 },
+    })
+#endif
+    Name (AR88, Package() {
+        // [FPG0]: FPGA Device
+        Package() { 0x0000FFFF, 0, 0, 16 },
+    })
+
+#if MAX_SOCKET > 1
+    Name (AR89, Package() {
+        // [FPG1]: FPGA Device
+        Package() { 0x0000FFFF, 1, 0, 17 },
+    })
+#endif
+
+#if MAX_SOCKET > 2
+    Name (AR8A, Package() {
+        // [FPG2]: FPGA Device
+        Package() { 0x0000FFFF, 2, 0, 18 },
+    })
+#endif
+
+#if MAX_SOCKET > 3
+    Name (AR8B, Package() {
+        // [FPG3]: FPGA Device
+        Package() { 0x0000FFFF, 3, 0, 19 },
+    })
+#endif
+    //
+    // Socket 0 Root bridge (Stack 0)
+    //
+#undef SOCKET
+#undef STACK
+#define SOCKET 0
+#define STACK  0
+    Device (PC00) {
+        Name   (_HID, EISAID("PNP0A08"))
+        Name   (_CID, EISAID("PNP0A03"))
+        Name   (_UID, 0x00)
+
+        //
+        // _PRT is ACPI method called by OS to read PCI Routing Table.
+        //
+        Method (_PRT, 0)
+        {
+          Return (AR00)
+        }
+
+        #include "PC0010nm.asi"
+
+        // IIOMISC on PC00
+        Device (IIM0) {
+            Name   (_ADR, 0x00000000)
+        }
+
+        // CB3DMA on PC00
+        Device (CB0A) {
+            Name   (_ADR, 0x00010000)
+        }
+
+        // CB3DMA on PC00
+        Device (CB0B) {
+            Name   (_ADR, 0x00010001)
+        }
+
+        // CB3DMA on PC00
+        Device (CB0C) {
+            Name   (_ADR, 0x00010002)
+        }
+
+        // CB3DMA on PC00
+        Device (CB0D) {
+            Name   (_ADR, 0x00010003)
+        }
+
+        // CB3DMA on PC00
+        Device (CB0E) {
+            Name   (_ADR, 0x00010004)
+        }
+
+        // CB3DMA on PC00
+        Device (CB0F) {
+            Name   (_ADR, 0x00010005)
+        }
+
+        // CB3DMA on PC00
+        Device (CB0G) {
+            Name   (_ADR, 0x00010006)
+        }
+
+        // CB3DMA on PC00
+        Device (CB0H) {
+            Name   (_ADR, 0x00010007)
+        }
+
+        // MSM on PC00
+        Device (MSM1) {
+            Name   (_ADR, 0x00020000)
+        }
+
+        // PMON MSM on PC00
+        Device (PMON) {
+            Name   (_ADR, 0x00020001)
+        }
+
+        // NorthPeak on PC00
+        Device (NRPK) {
+            Name   (_ADR, 0x00020004)
+        }
+
+        // Legacy PCI Express Port 0 on PC00
+        Device (DMI0) {
+            Name   (_ADR, 0x00030000)
+        }
+
+        // IE HECI #1
+        Device (IHC1) {
+            Name   (_ADR, 0x00100000)
+        }
+
+        // IE HECI #2
+        Device (IHC2) {
+            Name   (_ADR, 0x00100001)
+        }
+
+        // IE IDE-Redirection (IDE-R)
+        Device (IIDR) {
+            Name   (_ADR, 0x00100002)
+        }
+
+        // IE Keyboard and Text (KT) Redirection
+        Device (IMKT) {
+            Name   (_ADR, 0x00100003)
+        }
+
+        // IE HECI #3
+        Device (IHC3) {
+            Name   (_ADR, 0x00100004)
+        }
+
+        // MROM 0 function function
+        Device (MRO0) {
+            Name   (_ADR, 0x00110000)
+        }
+
+        // MROM 1 function function
+        Device (MRO1) {
+            Name   (_ADR, 0x00110001)
+        }
+
+        // sSATA Host controller on PCH
+        Device (SAT2) {
+            Name   (_ADR, 0x00110005)
+        }
+
+        // xHCI controller 1 on PCH
+        Device (XHCI) {
+            Name   (_ADR, 0x00140000)
+        }
+
+        // Thermal Subsystem on PCH
+        Device (TERM) {
+            Name   (_ADR, 0x00140002)
+        }
+
+        // ME HECI #1 on PCH
+        Device (HEC1) {
+            Name   (_ADR, 0x00160000)
+        }
+
+        // ME HECI #2 on PCH
+        Device (HEC2) {
+            Name   (_ADR, 0x00160001)
+        }
+
+        // ME IDE redirect on PCH
+        Device (IDER) {
+            Name   (_ADR, 0x00160002)
+        }
+
+        // MEKT on PCH
+        Device (MEKT) {
+            Name   (_ADR, 0x00160003)
+        }
+
+        // ME HECI #3 on PCH
+        Device (HEC3) {
+            Name   (_ADR, 0x00160004)
+        }
+
+        // SATA controller 1 on PCH
+        Device (SAT1) {
+            Name   (_ADR, 0x00170000)
+        }
+
+        // PCIE PCH Root Port #17
+        Device (RP17) {
+            #include "RP17_ADR.asl"
+            Method (_PRT, 0) {
+
+                Return (AR01)
+            }
+
+            // PCIE PCH Slot #17
+            Device (SLTH) {
+                Name   (_ADR, 0x00000000)
+            }
+        }
+
+        // PCIE PCH Root Port #18
+        Device (RP18) {
+            #include "RP18_ADR.asl"
+            Method (_PRT, 0) {
+
+                Return (AR02)
+            }
+
+            // PCIE PCH Slot #18
+            Device (SLTI) {
+                Name   (_ADR, 0x00000000)
+            }
+        }
+
+        // PCIE PCH Root Port #19
+        Device (RP19) {
+            #include "RP19_ADR.asl"
+            Method (_PRT, 0) {
+
+                Return (AR03)
+            }
+
+            // PCIE PCH Slot #19
+            Device (SLTJ) {
+                Name   (_ADR, 0x00000000)
+            }
+        }
+
+        // PCIE PCH Root Port #20
+        Device (RP20) {
+            #include "RP20_ADR.asl"
+            Method (_PRT, 0) {
+
+                Return (AR04)
+            }
+
+            // PCIE PCH Slot #20
+            Device (SLTK) {
+                Name   (_ADR, 0x00000000)
+            }
+        }
+
+        // PCIE PCH Root Port #1
+        Device (RP01) {
+            #include "RP01_ADR.asl"
+            Method (_PRT, 0) {
+
+                Return (AR05)
+            }
+        }
+
+        // PCIE PCH Root Port #2
+        Device (RP02) {
+            #include "RP02_ADR.asl"
+            Method (_PRT, 0) {
+
+                Return (AR06)
+            }
+        }
+
+        // PCIE PCH Root Port #3
+        Device (RP03) {
+            #include "RP03_ADR.asl"
+            Method (_PRT, 0) {
+
+                Return (AR07)
+            }
+        }
+
+        // PCIE PCH Root Port #4
+        Device (RP04) {
+            #include "RP04_ADR.asl"
+            Method (_PRT, 0) {
+
+                Return (AR08)
+            }
+        }
+
+        // PCIE PCH Root Port #5
+        Device (RP05) {
+            #include "RP05_ADR.asl"
+            Method (_PRT, 0) {
+
+                Return (AR09)
+            }
+        }
+
+        // PCIE PCH Root Port #6
+        Device (RP06) {
+            #include "RP06_ADR.asl"
+            Method (_PRT, 0) {
+
+                Return (AR0A)
+            }
+        }
+
+        // PCIE PCH Root Port #7
+        Device (RP07) {
+            #include "RP07_ADR.asl"
+            Method (_PRT, 0) {
+
+                Return (AR0B)
+            }
+        }
+
+        // PCIE PCH Root Port #8
+        Device (RP08) {
+            #include "RP08_ADR.asl"
+            Method (_PRT, 0) {
+
+                Return (AR0C)
+            }
+        }
+
+        // PCIE PCH Root Port #9
+        Device (RP09) {
+            #include "RP09_ADR.asl"
+            Method (_PRT, 0) {
+
+                Return (AR0D)
+            }
+
+            // PCIE PCH Slot #9
+            Device (SLT9) {
+                Name   (_ADR, 0x00000000)
+            }
+        }
+
+        // PCIE PCH Root Port #10
+        Device (RP10) {
+            #include "RP10_ADR.asl"
+            Method (_PRT, 0) {
+
+                Return (AR0E)
+            }
+
+            // PCIE PCH Slot #10
+            Device (SLTA) {
+                Name   (_ADR, 0x00000000)
+            }
+        }
+
+        // PCIE PCH Root Port #11
+        Device (RP11) {
+            #include "RP11_ADR.asl"
+            Method (_PRT, 0) {
+
+                Return (AR0F)
+            }
+
+            // PCIE PCH Slot #11
+            Device (SLTB) {
+                Name   (_ADR, 0x00000000)
+            }
+        }
+
+        // PCIE PCH Root Port #12
+        Device (RP12) {
+            #include "RP12_ADR.asl"
+            Method (_PRT, 0) {
+
+                Return (AR10)
+            }
+
+            // PCIE PCH Slot #12
+            Device (SLTC) {
+                Name   (_ADR, 0x00000000)
+            }
+        }
+
+        // PCIE PCH Root Port #13
+        Device (RP13) {
+            #include "RP13_ADR.asl"
+            Method (_PRT, 0) {
+
+                Return (AR11)
+            }
+
+            // PCIE PCH Slot #13
+            Device (SLTD) {
+                Name   (_ADR, 0x00000000)
+            }
+        }
+
+        // PCIE PCH Root Port #14
+        Device (RP14) {
+            #include "RP14_ADR.asl"
+            Method (_PRT, 0) {
+
+                Return (AR12)
+            }
+
+            // PCIE PCH Slot #14
+            Device (SLTE) {
+                Name   (_ADR, 0x00000000)
+            }
+        }
+
+        // PCIE PCH Root Port #15
+        Device (RP15) {
+            #include "RP15_ADR.asl"
+            Method (_PRT, 0) {
+
+                Return (AR13)
+            }
+
+            // PCIE PCH Slot #15
+            Device (SLTF) {
+                Name   (_ADR, 0x00000000)
+            }
+        }
+
+        // PCIE PCH Root Port #16
+        Device (RP16) {
+            #include "RP16_ADR.asl"
+            Method (_PRT, 0) {
+
+                Return (AR14)
+            }
+
+            // PCIE PCH Slot #16
+            Device (SLTG) {
+                Name   (_ADR, 0x00000000)
+            }
+        }
+
+        // ISA Bridge on PCH
+        Device (LPC0) {
+            Name   (_ADR, 0x001F0000)
+
+            #include "Mother.asi"
+        }
+
+        // P2SB
+        Device (P2SB) {
+            Name   (_ADR, 0x001F0001)
+        }
+
+        // Power Management Controller on PCH
+        Device (PMC1) {
+            Name   (_ADR, 0x001F0002)
+        }
+
+        // HD Audio Subsystem Controller on PCH
+        Device (CAVS) {
+            Name   (_ADR, 0x001F0003)
+        }
+
+        // SMBus controller on PCH
+        Device (SMBS) {
+            Name   (_ADR, 0x001F0004)
+        }
+
+        // SPI controller on PCH
+        Device (SPIC) {
+            Name   (_ADR, 0x001F0005)
+        }
+
+        // GbE Controller on PCH
+        Device (GBE1) {
+            Name   (_ADR, 0x001F0006)
+        }
+
+        // Intel Trace Hub on PCH
+        Device (TRHB) {
+            Name   (_ADR, 0x001F0007)
+        }
+    }
+
+    // Socket 0 Root bridge (Stack 1)
+    //
+#undef SOCKET
+#undef STACK
+#define SOCKET 0
+#define STACK  1
+    Device (PC01) {
+        Name   (_HID, EISAID("PNP0A08"))
+        Name   (_CID, EISAID("PNP0A03"))
+        Name   (_UID, 0x01)
+
+        //
+        // _PRT is ACPI method called by OS to read PCI Routing Table.
+        //
+        Method (_PRT, 0)
+        {
+          Return (AR15)
+        }
+
+        #include "IioRootBridge.asi"
+
+        // PCI Express Port 1A on PC01
+        Device (BR1A) {
+            Name   (_ADR, 0x00020000)
+            Method (_PRW, 0) {
+                Return (Package (0x02) {0x09, 0x04})
+            }
+            Method (_PRT, 0) {
+
+                Return (AR16)
+            }
+
+            #include "PcieHp.asi"
+            #include "PcieNonHpDev.asi"
+        }
+
+        // PCI Express Port 1B on PC01
+        Device (BR1B) {
+            Name   (_ADR, 0x00030000)
+            Method (_PRW, 0) {
+                Return (Package (0x02) {0x09, 0x04})
+            }
+            Method (_PRT, 0) {
+
+                Return (AR17)
+            }
+
+            #include "PcieHp.asi"
+            #include "PcieNonHpDev.asi"
+        }
+
+        // PCI Express Port 1C on PC01
+        Device (BR1C) {
+            Name   (_ADR, 0x00040000)
+            Method (_PRW, 0) {
+                Return (Package (0x02) {0x09, 0x04})
+            }
+            Method (_PRT, 0) {
+
+                Return (AR18)
+            }
+
+            #include "PcieHp.asi"
+            #include "PcieNonHpDev.asi"
+        }
+
+        // PCI Express Port 1D on PC01
+        Device (BR1D) {
+            Name   (_ADR, 0x00050000)
+            Method (_PRW, 0) {
+                Return (Package (0x02) {0x09, 0x04})
+            }
+            Method (_PRT, 0) {
+
+                Return (AR19)
+            }
+
+            #include "PcieHp.asi"
+            #include "PcieNonHpDev.asi"
+        }
+    }
+
+    // Socket 0 Root bridge (Stack 2)
+    //
+#undef SOCKET
+#undef STACK
+#define SOCKET 0
+#define STACK  2
+    Device (PC02) {
+        Name   (_HID, EISAID("PNP0A08"))
+        Name   (_CID, EISAID("PNP0A03"))
+        Name   (_UID, 0x02)
+
+        //
+        // _PRT is ACPI method called by OS to read PCI Routing Table.
+        //
+        Method (_PRT, 0)
+        {
+          Return (AR1A)
+        }
+
+        #include "IioRootBridge.asi"
+
+        // PCI Express Port 2A on PC02
+        Device (BR2A) {
+            Name   (_ADR, 0x00020000)
+            Method (_PRW, 0) {
+                Return (Package (0x02) {0x09, 0x04})
+            }
+            Method (_PRT, 0) {
+
+                Return (AR1B)
+            }
+
+            #include "PcieHp.asi"
+            #include "PcieNonHpDev.asi"
+
+            // EVA PCIe Uplink
+            Device (EPCU) {
+                Name   (_ADR, 0x00000000)
+                Method (_PRW, 0) {
+                    Return (Package (0x02) {0x0B, 0x00})
+                }
+                Method (_PRT, 0) {
+
+                    Return (AR1C)
+                }
+
+                // EVA Virtual Switch Port 0
+                Device (VSP0) {
+                    Name   (_ADR, 0x00000000)
+                    Method (_PRW, 0) {
+                        Return (Package (0x02) {0x0B, 0x00})
+                    }
+                    Method (_PRT, 0) {
+
+                        Return (AR1D)
+                    }
+
+                    // EVA CPM0
+                    Device (CPM0) {
+                        Name   (_ADR, 0x00000000)
+                    }
+                }
+
+                // EVA Virtual Switch Port 1
+                Device (VSP1) {
+                    Name   (_ADR, 0x00010000)
+                    Method (_PRW, 0) {
+                        Return (Package (0x02) {0x0B, 0x00})
+                    }
+                    Method (_PRT, 0) {
+
+                        Return (AR1E)
+                    }
+
+                    // EVA CPM1
+                    Device (CPM1) {
+                        Name   (_ADR, 0x00000000)
+                    }
+                }
+
+                // EVA Virtual Switch Port 2
+                Device (VSP2) {
+                    Name   (_ADR, 0x00020000)
+                    Method (_PRW, 0) {
+                        Return (Package (0x02) {0x0B, 0x00})
+                    }
+                    Method (_PRT, 0) {
+
+                        Return (AR1F)
+                    }
+
+                    // EVA CPM2
+                    Device (CPM2) {
+                        Name   (_ADR, 0x00000000)
+                    }
+                }
+
+                // EVA Virtual Switch Port 3
+                Device (VSP3) {
+                    Name   (_ADR, 0x00030000)
+                    Method (_PRW, 0) {
+                        Return (Package (0x02) {0x0B, 0x00})
+                    }
+                }
+            }
+        }
+
+        // PCI Express Port 2B on PC02
+        Device (BR2B) {
+            Name   (_ADR, 0x00030000)
+            Method (_PRW, 0) {
+                Return (Package (0x02) {0x09, 0x04})
+            }
+            Method (_PRT, 0) {
+
+                Return (AR20)
+            }
+
+            #include "PcieHp.asi"
+            #include "PcieNonHpDev.asi"
+        }
+
+        // PCI Express Port 2C on PC02
+        Device (BR2C) {
+            Name   (_ADR, 0x00040000)
+            Method (_PRW, 0) {
+                Return (Package (0x02) {0x09, 0x04})
+            }
+            Method (_PRT, 0) {
+
+                Return (AR21)
+            }
+
+            #include "PcieHp.asi"
+            #include "PcieNonHpDev.asi"
+        }
+
+        // PCI Express Port 2D on PC02
+        Device (BR2D) {
+            Name   (_ADR, 0x00050000)
+            Method (_PRW, 0) {
+                Return (Package (0x02) {0x09, 0x04})
+            }
+            Method (_PRT, 0) {
+
+                Return (AR22)
+            }
+
+            #include "PcieHp.asi"
+            #include "PcieNonHpDev.asi"
+        }
+    }
+
+    // Socket 0 Root bridge (Stack 3)
+    //
+#undef SOCKET
+#undef STACK
+#define SOCKET 0
+#define STACK  3
+    Device (PC03) {
+        Name   (_HID, EISAID("PNP0A08"))
+        Name   (_CID, EISAID("PNP0A03"))
+        Name   (_UID, 0x03)
+
+        //
+        // _PRT is ACPI method called by OS to read PCI Routing Table.
+        //
+        Method (_PRT, 0)
+        {
+          Return (AR23)
+        }
+
+        #include "IioRootBridge.asi"
+
+        // PCI Express Port 3A on PC03
+        Device (BR3A) {
+            Name   (_ADR, 0x00020000)
+            Method (_PRW, 0) {
+                Return (Package (0x02) {0x09, 0x04})
+            }
+            Method (_PRT, 0) {
+
+                Return (AR24)
+            }
+
+            #include "PcieHp.asi"
+            #include "PcieNonHpDev.asi"
+        }
+
+        // PCI Express Port 3B on PC03
+        Device (BR3B) {
+            Name   (_ADR, 0x00030000)
+            Method (_PRW, 0) {
+                Return (Package (0x02) {0x09, 0x04})
+            }
+            Method (_PRT, 0) {
+
+                Return (AR25)
+            }
+
+            #include "PcieHp.asi"
+            #include "PcieNonHpDev.asi"
+        }
+
+        // PCI Express Port 3C on PC03
+        Device (BR3C) {
+            Name   (_ADR, 0x00040000)
+            Method (_PRW, 0) {
+                Return (Package (0x02) {0x09, 0x04})
+            }
+            Method (_PRT, 0) {
+
+                Return (AR26)
+            }
+
+            #include "PcieHp.asi"
+            #include "PcieNonHpDev.asi"
+        }
+
+        // PCI Express Port 3D on PC03
+        Device (BR3D) {
+            Name   (_ADR, 0x00050000)
+            Method (_PRW, 0) {
+                Return (Package (0x02) {0x09, 0x04})
+            }
+            Method (_PRT, 0) {
+
+                Return (AR27)
+            }
+
+            #include "PcieHp.asi"
+            #include "PcieNonHpDev.asi"
+        }
+    }
+
+    // Socket 0 Root bridge (Stack 4)
+    //
+#undef SOCKET
+#undef STACK
+#define SOCKET 0
+#define STACK  4
+    Device (PC04) {
+        Name   (_HID, EISAID("PNP0A08"))
+        Name   (_CID, EISAID("PNP0A03"))
+        Name   (_UID, 0x04)
+
+        //
+        // _PRT is ACPI method called by OS to read PCI Routing Table.
+        //
+        Method (_PRT, 0)
+        {
+            Return (AR28)
+        }
+
+        #include "IioRootBridge.asi"
+
+        // PCI Express Port 4A on PC04
+        Device (BR4A) {
+            Name   (_ADR, 0x00020000)
+            Method (_PRW, 0) {
+                Return (Package (0x02) {0x09, 0x04})
+            }
+            Method (_PRT, 0) {
+
+                Return (AR29)
+            }
+
+            #include "PcieHp.asi"
+            #include "PcieHpDev.asi"
+        }
+
+        // PCI Express Port 4B on PC04
+        Device (BR4B) {
+            Name   (_ADR, 0x00030000)
+            Method (_PRW, 0) {
+                Return (Package (0x02) {0x09, 0x04})
+            }
+            Method (_PRT, 0) {
+
+                Return (AR2A)
+            }
+
+            #include "PcieHp.asi"
+            #include "PcieNonHpDev.asi"
+        }
+
+        // PCI Express Port 4C on PC04
+        Device (BR4C) {
+            Name   (_ADR, 0x00040000)
+            Method (_PRW, 0) {
+                Return (Package (0x02) {0x09, 0x04})
+            }
+            Method (_PRT, 0) {
+
+                Return (AR2B)
+            }
+
+            #include "PcieHp.asi"
+            #include "PcieNonHpDev.asi"
+        }
+
+        // PCI Express Port 4D on PC04
+        Device (BR4D) {
+            Name   (_ADR, 0x00050000)
+            Method (_PRW, 0) {
+                Return (Package (0x02) {0x09, 0x04})
+            }
+            Method (_PRT, 0) {
+
+                Return (AR2C)
+            }
+
+            #include "PcieHp.asi"
+            #include "PcieNonHpDev.asi"
+        }
+    }
+
+    // Socket 0 Root bridge (Stack 5)
+    //
+#undef SOCKET
+#undef STACK
+#define SOCKET 0
+#define STACK  5
+    Device (PC05) {
+        Name   (_HID, EISAID("PNP0A08"))
+        Name   (_CID, EISAID("PNP0A03"))
+        Name   (_UID, 0x05)
+
+        //
+        // _PRT is ACPI method called by OS to read PCI Routing Table.
+        //
+        Method (_PRT, 0)
+        {
+          Return (AR2D)
+        }
+
+        #include "IioRootBridge.asi"
+
+        // PCI Express Port 5A on PC05
+        Device (BR5A) {
+            Name   (_ADR, 0x00020000)
+            Method (_PRW, 0) {
+                Return (Package (0x02) {0x09, 0x04})
+            }
+            Method (_PRT, 0) {
+
+                Return (AR2E)
+            }
+
+            #include "PcieHp.asi"
+            #include "PcieNonHpDev.asi"
+        }
+
+        // PCI Express Port 5B on PC05
+        Device (BR5B) {
+            Name   (_ADR, 0x00030000)
+            Method (_PRW, 0) {
+                Return (Package (0x02) {0x09, 0x04})
+            }
+            Method (_PRT, 0) {
+
+                Return (AR2F)
+            }
+
+            #include "PcieHp.asi"
+            #include "PcieNonHpDev.asi"
+        }
+
+        // PCI Express Port 5C on PC05
+        Device (BR5C) {
+            Name   (_ADR, 0x00040000)
+            Method (_PRW, 0) {
+                Return (Package (0x02) {0x09, 0x04})
+            }
+            Method (_PRT, 0) {
+
+                Return (AR30)
+            }
+
+            #include "PcieHp.asi"
+            #include "PcieNonHpDev.asi"
+        }
+
+        // PCI Express Port 5D on PC05
+        Device (BR5D) {
+            Name   (_ADR, 0x00050000)
+            Method (_PRW, 0) {
+                Return (Package (0x02) {0x09, 0x04})
+            }
+            Method (_PRT, 0) {
+
+                Return (AR31)
+            }
+
+            #include "PcieHp.asi"
+            #include "PcieNonHpDev.asi"
+        }
+    }
+
+    // Socket 0 Uncore 0
+    //
+#undef SOCKET
+#undef STACK
+#define SOCKET 0
+#define STACK  6
+    Device (CONCATENATE3(UC, SOCKET, STACK)) {
+        Name   (_HID, EISAID("PNP0A03"))
+        Name   (_UID, 0x32)
+
+        //
+        // _PRT is ACPI method called by OS to read PCI Routing Table.
+        //
+        Method (_PRT, 0)
+        {
+          Return (AR32)
+        }
+
+        #include "Uncore.asi"
+
+        // Uncore 0 UBOX Device
+        Device (UBX0) {
+            Name   (_ADR, 0x00000000)
+        }
+
+        // Uncore 0 Misc 2 UPI 0-7 Device
+        Device (UP00) {
+            Name   (_ADR, 0x00020000)
+        }
+
+        // Unocre 0 Misc 1 UPI 0-7 Device
+        Device (UP01) {
+            Name   (_ADR, 0x00030000)
+        }
+
+        // Uncore 0 M2UPI0 Device
+        Device (M2U0) {
+            Name   (_ADR, 0x00050000)
+        }
+
+        // Uncore 0 M2UPI1 Device
+        Device (M2U1) {
+            Name   (_ADR, 0x00060000)
+        }
+
+        // Uncore 0 M2UPI2 Device
+        Device (M2U2) {
+            Name   (_ADR, 0x00070000)
+        }
+
+        // Uncore 0 CHASIS_SMBUS Devices
+        Device (CSM0) {
+            Name   (_ADR, 0x000B0000)
+        }
+
+        // Uncore 0 MS2MEM_SCF_MS2MEM0 Device
+        Device (M2M0) {
+            Name   (_ADR, 0x000C0000)
+        }
+
+        // Uncore 0 MS2MEM_SCF_MS2MEM1 Device
+        Device (M2M1) {
+            Name   (_ADR, 0x000D0000)
+        }
+
+        // Uncore 0 MCDDR0 Device
+        Device (MCD0) {
+            Name   (_ADR, 0x001A0000)
+        }
+
+        // Uncore 0 MCDDR1 Device
+        Device (MCD1) {
+            Name   (_ADR, 0x001B0000)
+        }
+    }
+
+    // Socket 0 Uncore 1
+    //
+#undef SOCKET
+#undef STACK
+#define SOCKET 0
+#define STACK  7
+    Device (CONCATENATE3(UC, SOCKET, STACK)) {
+        Name   (_HID, EISAID("PNP0A03"))
+        Name   (_UID, 0x33)
+
+        //
+        // _PRT is ACPI method called by OS to read PCI Routing Table.
+        //
+        Method (_PRT, 0)
+        {
+          Return (AR33)
+        }
+
+        #include "Uncore.asi"
+
+        // Uncore 1 GRP1_CHA0-7 Device
+        Device (CHA0) {
+            Name   (_ADR, 0x00000000)
+        }
+
+        // Uncore 1 GRP1_CHA8-15 Device
+        Device (CHA1) {
+            Name   (_ADR, 0x00010000)
+        }
+
+        // Uncore 1 GRP1_CHA16-23 Device
+        Device (CHA2) {
+            Name   (_ADR, 0x00020000)
+        }
+
+        // Uncore 1 GRP1_CHAU24-31 Device
+        Device (CHA3) {
+            Name   (_ADR, 0x00030000)
+        }
+
+        // Uncore 1 GRP1_CHA32-33 Device
+        Device (CHA4) {
+            Name   (_ADR, 0x00040000)
+        }
+
+        // Uncore 1 GRP0_CHA0-7 Device
+        Device (CHA5) {
+            Name   (_ADR, 0x000A0000)
+        }
+
+        // Uncore 1 GRP0_CHA24-31 Device
+        Device (CHA8) {
+            Name   (_ADR, 0x000D0000)
+        }
+
+        // Uncore 1 GRP0_CHA32-33 Device
+        Device (CHA9) {
+            Name   (_ADR, 0x000E0000)
+        }
+
+        // Uncore 1 GRP0_CHA8-15 Device
+        Device (CHA6) {
+            Name   (_ADR, 0x00B00000)
+        }
+
+        // Uncore 1 GRP0_CHA16-23 Device
+        Device (CHA7) {
+            Name   (_ADR, 0x000C0000)
+        }
+
+        // Uncore 1 CHAALL0-1 Device
+        Device (CA00) {
+            Name   (_ADR, 0x001D0000)
+        }
+
+        // Uncore 1 CHASIS_PUINT0-7 Device
+        Device (PUC0) {
+            Name   (_ADR, 0x001E0000)
+        }
+
+        // Uncore 1 Gen3Phy Device
+        Device (GN30) {
+            Name   (_ADR, 0x001F0000)
+        }
+    }
+
+#if MAX_SOCKET > 1
+    //
+    // Socket 1 Root bridge (Stack 0)
+    //
+#undef SOCKET
+#undef STACK
+#define SOCKET 1
+#define STACK  0
+    Device (PC06) {
+        Name   (_HID, EISAID("PNP0A08"))
+        Name   (_CID, EISAID("PNP0A03"))
+        Name   (_UID, 0x06)
+
+        //
+        // _PRT is ACPI method called by OS to read PCI Routing Table.
+        //
+        Method (_PRT, 0)
+        {
+          Return (AR34)
+        }
+
+        #include "IioRootBridge.asi"
+        #include "Sck1Ejd.asi"
+
+        // IIOMISC on PC06
+        Device (IIM1) {
+            Name   (_ADR, 0x00000000)
+        }
+
+        // CB3DMA on PC06
+        Device (CB1A) {
+            Name   (_ADR, 0x00010000)
+        }
+
+        // CB3DMA on PC06
+        Device (CB1B) {
+            Name   (_ADR, 0x00010001)
+        }
+
+        // CB3DMA on PC06
+        Device (CB1C) {
+            Name   (_ADR, 0x00010002)
+        }
+
+        // CB3DMA on PC06
+        Device (CB1D) {
+            Name   (_ADR, 0x00010003)
+        }
+
+        // CB3DMA on PC06
+        Device (CB1E) {
+            Name   (_ADR, 0x00010004)
+        }
+
+        // CB3DMA on PC06
+        Device (CB1F) {
+            Name   (_ADR, 0x00010005)
+        }
+
+        // CB3DMA on PC06
+        Device (CB1G) {
+            Name   (_ADR, 0x00010006)
+        }
+
+        // CB3DMA on PC06
+        Device (CB1H) {
+            Name   (_ADR, 0x00010007)
+        }
+    }
+
+    // Socket 1 Root bridge (Stack 1)
+    //
+#undef SOCKET
+#undef STACK
+#define SOCKET 1
+#define STACK  1
+    Device (PC07) {
+        Name   (_HID, EISAID("PNP0A08"))
+        Name   (_CID, EISAID("PNP0A03"))
+        Name   (_UID, 0x07)
+
+        //
+        // _PRT is ACPI method called by OS to read PCI Routing Table.
+        //
+        Method (_PRT, 0)
+        {
+          Return (AR35)
+        }
+
+        #include "IioRootBridge.asi"
+        #include "Sck1Ejd.asi"
+
+        // PCI Express Port 1A on PC07
+        Device (QR1A) {
+            Name   (_ADR, 0x00020000)
+            Method (_PRW, 0) {
+                Return (Package (0x02) {0x09, 0x04})
+            }
+            Method (_PRT, 0) {
+
+                Return (AR36)
+            }
+
+            #include "PcieHp.asi"
+            #include "PcieHpDev.asi"
+            #include "PC0610nmEjd.asi"
+        }
+
+        // PCI Express Port 1B on PC07
+        Device (QR1B) {
+            Name   (_ADR, 0x00030000)
+            Method (_PRW, 0) {
+                Return (Package (0x02) {0x09, 0x04})
+            }
+            Method (_PRT, 0) {
+
+                Return (AR37)
+            }
+
+            #include "PcieHp.asi"
+            #include "PcieHpDev.asi"
+            #include "PC0610nmEjd.asi"
+        }
+
+        // PCI Express Port 1C on PC07
+        Device (QR1C) {
+            Name   (_ADR, 0x00040000)
+            Method (_PRW, 0) {
+                Return (Package (0x02) {0x09, 0x04})
+            }
+            Method (_PRT, 0) {
+
+                Return (AR38)
+            }
+
+            #include "PcieHp.asi"
+            #include "PcieHpDev.asi"
+            #include "PC0610nmEjd.asi"
+        }
+
+        // PCI Express Port 1D on PC07
+        Device (QR1D) {
+            Name   (_ADR, 0x00050000)
+            Method (_PRW, 0) {
+                Return (Package (0x02) {0x09, 0x04})
+            }
+            Method (_PRT, 0) {
+
+                Return (AR39)
+            }
+
+            #include "PcieHp.asi"
+            #include "PcieHpDev.asi"
+            #include "PC0610nmEjd.asi"
+        }
+    }
+
+    // Socket 1 Root bridge (Stack 2)
+    //
+#undef SOCKET
+#undef STACK
+#define SOCKET 1
+#define STACK  2
+    Device (PC08) {
+        Name   (_HID, EISAID("PNP0A08"))
+        Name   (_CID, EISAID("PNP0A03"))
+        Name   (_UID, 0x08)
+
+        //
+        // _PRT is ACPI method called by OS to read PCI Routing Table.
+        //
+        Method (_PRT, 0)
+        {
+          Return (AR3A)
+        }
+
+        #include "IioRootBridge.asi"
+        #include "Sck1Ejd.asi"
+
+        // PCI Express Port 2A on PC08
+        Device (QR2A) {
+            Name   (_ADR, 0x00020000)
+            Method (_PRW, 0) {
+                Return (Package (0x02) {0x09, 0x04})
+            }
+            Method (_PRT, 0) {
+
+                Return (AR3B)
+            }
+
+            #include "PcieHp.asi"
+            #include "PcieHpDev.asi"
+            #include "PC0610nmEjd.asi"
+        }
+
+        // PCI Express Port 2B on PC08
+        Device (QR2B) {
+            Name   (_ADR, 0x00030000)
+            Method (_PRW, 0) {
+                Return (Package (0x02) {0x09, 0x04})
+            }
+            Method (_PRT, 0) {
+
+                Return (AR3C)
+            }
+
+            #include "PcieHp.asi"
+            #include "PcieHpDev.asi"
+            #include "PC0610nmEjd.asi"
+        }
+
+        // PCI Express Port 2C on PC08
+        Device (QR2C) {
+            Name   (_ADR, 0x00040000)
+            Method (_PRW, 0) {
+                Return (Package (0x02) {0x09, 0x04})
+            }
+            Method (_PRT, 0) {
+
+                Return (AR3D)
+            }
+
+            #include "PcieHp.asi"
+            #include "PcieHpDev.asi"
+            #include "PC0610nmEjd.asi"
+        }
+
+        // PCI Express Port 2D on PC08
+        Device (QR2D) {
+            Name   (_ADR, 0x00050000)
+            Method (_PRW, 0) {
+                Return (Package (0x02) {0x09, 0x04})
+            }
+            Method (_PRT, 0) {
+
+                Return (AR3E)
+            }
+
+            #include "PcieHp.asi"
+            #include "PcieHpDev.asi"
+            #include "PC0610nmEjd.asi"
+        }
+    }
+
+    // Socket 1 Root bridge (Stack 3)
+    //
+#undef SOCKET
+#undef STACK
+#define SOCKET 1
+#define STACK  3
+    Device (PC09) {
+        Name   (_HID, EISAID("PNP0A08"))
+        Name   (_CID, EISAID("PNP0A03"))
+        Name   (_UID, 0x09)
+
+        //
+        // _PRT is ACPI method called by OS to read PCI Routing Table.
+        //
+        Method (_PRT, 0)
+        {
+          Return (AR3F)
+        }
+
+        #include "IioRootBridge.asi"
+        #include "Sck1Ejd.asi"
+
+        // PCI Express Port 3A on PC09
+        Device (QR3A) {
+            Name   (_ADR, 0x00020000)
+            Method (_PRW, 0) {
+                Return (Package (0x02) {0x09, 0x04})
+            }
+            Method (_PRT, 0) {
+
+                Return (AR40)
+            }
+
+            #include "PcieHp.asi"
+            #include "PcieHpDev.asi"
+            #include "PC0610nmEjd.asi"
+        }
+
+        // PCI Express Port 3B on PC09
+        Device (QR3B) {
+            Name   (_ADR, 0x00030000)
+            Method (_PRW, 0) {
+                Return (Package (0x02) {0x09, 0x04})
+            }
+            Method (_PRT, 0) {
+
+                Return (AR41)
+            }
+
+            #include "PcieHp.asi"
+            #include "PcieHpDev.asi"
+            #include "PC0610nmEjd.asi"
+        }
+
+        // PCI Express Port 3C on PC09
+        Device (QR3C) {
+            Name   (_ADR, 0x00040000)
+            Method (_PRW, 0) {
+                Return (Package (0x02) {0x09, 0x04})
+            }
+            Method (_PRT, 0) {
+
+                Return (AR42)
+            }
+
+            #include "PcieHp.asi"
+            #include "PcieHpDev.asi"
+            #include "PC0610nmEjd.asi"
+        }
+
+        // PCI Express Port 3D on PC09
+        Device (QR3D) {
+            Name   (_ADR, 0x00050000)
+            Method (_PRW, 0) {
+                Return (Package (0x02) {0x09, 0x04})
+            }
+            Method (_PRT, 0) {
+
+                Return (AR43)
+            }
+
+            #include "PcieHp.asi"
+            #include "PcieHpDev.asi"
+            #include "PC0610nmEjd.asi"
+        }
+    }
+
+    // Socket 1 Root bridge (Stack 4)
+    //
+#undef SOCKET
+#undef STACK
+#define SOCKET 1
+#define STACK  4
+    Device (PC10) {
+        Name   (_HID, EISAID("PNP0A08"))
+        Name   (_CID, EISAID("PNP0A03"))
+        Name   (_UID, 0x0A)
+
+        //
+        // _PRT is ACPI method called by OS to read PCI Routing Table.
+        //
+        Method (_PRT, 0)
+        {
+          Return (AR44)
+        }
+
+        #include "IioRootBridge.asi"
+        #include "Sck1Ejd.asi"
+
+        // PCI Express Port 4A on PC10
+        Device (QR4A) {
+            Name   (_ADR, 0x00020000)
+            Method (_PRW, 0) {
+                Return (Package (0x02) {0x09, 0x04})
+            }
+            Method (_PRT, 0) {
+
+                Return (AR45)
+            }
+
+            #include "PcieHp.asi"
+            #include "PcieHpDev.asi"
+            #include "PC0610nmEjd.asi"
+        }
+
+        // PCI Express Port 4B on PC10
+        Device (QR4B) {
+            Name   (_ADR, 0x00030000)
+            Method (_PRW, 0) {
+                Return (Package (0x02) {0x09, 0x04})
+            }
+            Method (_PRT, 0) {
+
+                Return (AR46)
+            }
+
+            #include "PcieHp.asi"
+            #include "PcieHpDev.asi"
+            #include "PC0610nmEjd.asi"
+        }
+
+        // PCI Express Port 4C on PC10
+        Device (QR4C) {
+            Name   (_ADR, 0x00040000)
+            Method (_PRW, 0) {
+                Return (Package (0x02) {0x09, 0x04})
+            }
+            Method (_PRT, 0) {
+
+                Return (AR47)
+            }
+
+            #include "PcieHp.asi"
+            #include "PcieHpDev.asi"
+            #include "PC0610nmEjd.asi"
+        }
+
+        // PCI Express Port 4D on PC10
+        Device (QR4D) {
+            Name   (_ADR, 0x00050000)
+            Method (_PRW, 0) {
+                Return (Package (0x02) {0x09, 0x04})
+            }
+            Method (_PRT, 0) {
+
+                Return (AR48)
+            }
+
+            #include "PcieHp.asi"
+            #include "PcieHpDev.asi"
+            #include "PC0610nmEjd.asi"
+        }
+    }
+
+    // Socket 1 Root bridge (Stack 5)
+    //
+#undef SOCKET
+#undef STACK
+#define SOCKET 1
+#define STACK  5
+    Device (PC11) {
+        Name   (_HID, EISAID("PNP0A08"))
+        Name   (_CID, EISAID("PNP0A03"))
+        Name   (_UID, 0x0B)
+
+        //
+        // _PRT is ACPI method called by OS to read PCI Routing Table.
+        //
+        Method (_PRT, 0)
+        {
+          Return (AR49)
+        }
+
+        #include "IioRootBridge.asi"
+        #include "Sck1Ejd.asi"
+
+        // PCI Express Port 5A on PC11
+        Device (QR5A) {
+            Name   (_ADR, 0x00020000)
+            Method (_PRW, 0) {
+                Return (Package (0x02) {0x09, 0x04})
+            }
+            Method (_PRT, 0) {
+
+                Return (AR4A)
+            }
+
+            #include "PcieHp.asi"
+            #include "PcieHpDev.asi"
+            #include "PC0610nmEjd.asi"
+        }
+
+        // PCI Express Port 5B on PC11
+        Device (QR5B) {
+            Name   (_ADR, 0x00030000)
+            Method (_PRW, 0) {
+                Return (Package (0x02) {0x09, 0x04})
+            }
+            Method (_PRT, 0) {
+
+                Return (AR4B)
+            }
+
+            #include "PcieHp.asi"
+            #include "PcieHpDev.asi"
+            #include "PC0610nmEjd.asi"
+        }
+
+        // PCI Express Port 5C on PC11
+        Device (QR5C) {
+            Name   (_ADR, 0x00040000)
+            Method (_PRW, 0) {
+                Return (Package (0x02) {0x09, 0x04})
+            }
+            Method (_PRT, 0) {
+
+                Return (AR4C)
+            }
+
+            #include "PcieHp.asi"
+            #include "PcieHpDev.asi"
+            #include "PC0610nmEjd.asi"
+        }
+
+        // PCI Express Port 5D on PC11
+        Device (QR5D) {
+            Name   (_ADR, 0x00050000)
+            Method (_PRW, 0) {
+                Return (Package (0x02) {0x09, 0x04})
+            }
+            Method (_PRT, 0) {
+
+                Return (AR4D)
+            }
+
+            #include "PcieHp.asi"
+            #include "PcieHpDev.asi"
+            #include "PC0610nmEjd.asi"
+        }
+    }
+
+    // Socket 1 Uncore 0
+    //
+#undef SOCKET
+#undef STACK
+#define SOCKET 1
+#define STACK  6
+    Device (CONCATENATE3(UC, SOCKET, STACK)) {
+        Name   (_HID, EISAID("PNP0A03"))
+        Name   (_UID, 0x34)
+
+        //
+        // _PRT is ACPI method called by OS to read PCI Routing Table.
+        //
+        Method (_PRT, 0)
+        {
+          Return (AR4E)
+        }
+
+        #include "Uncore.asi"
+
+        // Uncore 2 UBOX Device
+        Device (UBX1) {
+            Name   (_ADR, 0x00000000)
+        }
+
+        // Uncore 2 Misc 2 UPI 0-7 Device
+        Device (UP02) {
+            Name   (_ADR, 0x00020000)
+        }
+
+        // Uncore 2 Misc 1 UPI 0-7 Device
+        Device (UP03) {
+            Name   (_ADR, 0x00030000)
+        }
+
+        // Uncore 2 M2UPI0 Device
+        Device (M2U3) {
+            Name   (_ADR, 0x00050000)
+        }
+
+        // Uncore 2 M2UPI1 Device
+        Device (M2U4) {
+            Name   (_ADR, 0x00060000)
+        }
+
+        // Uncore 2 M2UPI2 Device
+        Device (M2U5) {
+            Name   (_ADR, 0x00070000)
+        }
+
+        // Uncore 2 CHASIS_SMBUS Devices
+        Device (CSM1) {
+            Name   (_ADR, 0x000B0000)
+        }
+
+        // Uncore 2 MS2MEM_SCF_MS2MEM0 Device
+        Device (M2M2) {
+            Name   (_ADR, 0x000C0000)
+        }
+
+        // Uncore 2 MS2MEM_SCF_MS2MEM1 Device
+        Device (M2M3) {
+            Name   (_ADR, 0x000D0000)
+        }
+
+        // Uncore 2 MCDDR0 Device
+        Device (MCD2) {
+            Name   (_ADR, 0x001A0000)
+        }
+
+        // Uncore 2 MCDDR1 Device
+        Device (MCD3) {
+            Name   (_ADR, 0x001B0000)
+        }
+    }
+
+    // Socket 1 Uncore 1
+    //
+#undef SOCKET
+#undef STACK
+#define SOCKET 1
+#define STACK  7
+    Device (CONCATENATE3(UC, SOCKET, STACK)) {
+        Name   (_HID, EISAID("PNP0A03"))
+        Name   (_UID, 0x35)
+
+        //
+        // _PRT is ACPI method called by OS to read PCI Routing Table.
+        //
+        Method (_PRT, 0)
+        {
+          Return (AR4F)
+        }
+
+        #include "Uncore.asi"
+
+        // Uncore 3 GRP1_CHA0-7 Device
+        Device (DHA0) {
+            Name   (_ADR, 0x00000000)
+        }
+
+        // Uncore 3 GRP1_CHA8-15 Device
+        Device (DHA1) {
+            Name   (_ADR, 0x00010000)
+        }
+
+        // Uncore 3 GRP1_CHA16-23 Device
+        Device (DHA2) {
+            Name   (_ADR, 0x00020000)
+        }
+
+        // Uncore 3 GRP1_CHAU24-31 Device
+        Device (DHA3) {
+            Name   (_ADR, 0x00030000)
+        }
+
+        // Uncore 3 GRP1_CHA32-33 Device
+        Device (DHA4) {
+            Name   (_ADR, 0x00040000)
+        }
+
+        // Uncore 3 GRP0_CHA0-7 Device
+        Device (DHA5) {
+            Name   (_ADR, 0x000A0000)
+        }
+
+        // Uncore 3 GRP0_CHA24-31 Device
+        Device (DHA8) {
+            Name   (_ADR, 0x000D0000)
+        }
+
+        // Uncore 3 GRP0_CHA32-33 Device
+        Device (DHA9) {
+            Name   (_ADR, 0x000E0000)
+        }
+
+        // Uncore 3 GRP0_CHA8-15 Device
+        Device (DHA6) {
+            Name   (_ADR, 0x00B00000)
+        }
+
+        // Uncore 3 GRP0_CHA16-23 Device
+        Device (DHA7) {
+            Name   (_ADR, 0x000C0000)
+        }
+
+        // Uncore 3 CHAALL0-1 Device
+        Device (CA01) {
+            Name   (_ADR, 0x001D0000)
+        }
+
+        // Uncore 3 CHASIS_PUINT0-7 Device
+        Device (PUC1) {
+            Name   (_ADR, 0x001E0000)
+        }
+
+        // Uncore 3 Gen3Phy Device
+        Device (GN31) {
+            Name   (_ADR, 0x001F0000)
+        }
+    }
+#endif
+
+#if MAX_SOCKET > 2
+    // Socket 2 Root bridge (Stack 0)
+    //
+#undef SOCKET
+#undef STACK
+#define SOCKET 2
+#define STACK  0
+    Device (PC12) {
+        Name   (_HID, EISAID("PNP0A08"))
+        Name   (_CID, EISAID("PNP0A03"))
+        Name   (_UID, 0x0C)
+
+        //
+        // _PRT is ACPI method called by OS to read PCI Routing Table.
+        //
+        Method (_PRT, 0)
+        {
+          Return (AR50)
+        }
+
+        #include "IioRootBridge.asi"
+        #include "Sck2Ejd.asi"
+
+        // IIOMISC on PC12
+        Device (IIM2) {
+            Name   (_ADR, 0x00000000)
+        }
+
+        // CB3DMA on PC12
+        Device (CB2A) {
+            Name   (_ADR, 0x00010000)
+        }
+
+        // CB3DMA on PC12
+        Device (CB2B) {
+            Name   (_ADR, 0x00010001)
+        }
+
+        // CB3DMA on PC12
+        Device (CB2C) {
+            Name   (_ADR, 0x00010002)
+        }
+
+        // CB3DMA on PC12
+        Device (CB2D) {
+            Name   (_ADR, 0x00010003)
+        }
+
+        // CB3DMA on PC12
+        Device (CB2E) {
+            Name   (_ADR, 0x00010004)
+        }
+
+        // CB3DMA on PC12
+        Device (CB2F) {
+            Name   (_ADR, 0x00010005)
+        }
+
+        // CB3DMA on PC12
+        Device (CB2G) {
+            Name   (_ADR, 0x00010006)
+        }
+
+        // CB3DMA on PC12
+        Device (CB2H) {
+            Name   (_ADR, 0x00010007)
+        }
+    }
+
+    // Socket 2 Root bridge (Stack 1)
+    //
+#undef SOCKET
+#undef STACK
+#define SOCKET 2
+#define STACK  1
+    Device (PC13) {
+        Name   (_HID, EISAID("PNP0A08"))
+        Name   (_CID, EISAID("PNP0A03"))
+        Name   (_UID, 0x0D)
+
+        //
+        // _PRT is ACPI method called by OS to read PCI Routing Table.
+        //
+        Method (_PRT, 0)
+        {
+          Return (AR51)
+        }
+
+        #include "IioRootBridge.asi"
+        #include "Sck2Ejd.asi"
+
+        // PCI Express Port 1A on PC13
+        Device (RR1A) {
+            Name   (_ADR, 0x00020000)
+            Method (_PRW, 0) {
+                Return (Package (0x02) {0x09, 0x04})
+            }
+            Method (_PRT, 0) {
+
+                Return (AR52)
+            }
+
+            #include "PcieHp.asi"
+            #include "PcieHpDev.asi"
+            #include "PC1210nmEjd.asi"
+        }
+
+        // PCI Express Port 1B on PC13
+        Device (RR1B) {
+            Name   (_ADR, 0x00030000)
+            Method (_PRW, 0) {
+                Return (Package (0x02) {0x09, 0x04})
+            }
+            Method (_PRT, 0) {
+
+                Return (AR53)
+            }
+
+            #include "PcieHp.asi"
+            #include "PcieHpDev.asi"
+            #include "PC1210nmEjd.asi"
+        }
+
+        // PCI Express Port 1C on PC13
+        Device (RR1C) {
+            Name   (_ADR, 0x00040000)
+            Method (_PRW, 0) {
+                Return (Package (0x02) {0x09, 0x04})
+            }
+            Method (_PRT, 0) {
+
+                Return (AR54)
+            }
+
+            #include "PcieHp.asi"
+            #include "PcieHpDev.asi"
+            #include "PC1210nmEjd.asi"
+        }
+
+        // PCI Express Port 1D on PC13
+        Device (RR1D) {
+            Name   (_ADR, 0x00050000)
+            Method (_PRW, 0) {
+                Return (Package (0x02) {0x09, 0x04})
+            }
+            Method (_PRT, 0) {
+
+                Return (AR55)
+            }
+
+            #include "PcieHp.asi"
+            #include "PcieHpDev.asi"
+            #include "PC1210nmEjd.asi"
+        }
+    }
+
+    // Socket 2 Root bridge (Stack 2)
+    //
+#undef SOCKET
+#undef STACK
+#define SOCKET 2
+#define STACK  2
+    Device (PC14) {
+        Name   (_HID, EISAID("PNP0A08"))
+        Name   (_CID, EISAID("PNP0A03"))
+        Name   (_UID, 0x0E)
+
+        //
+        // _PRT is ACPI method called by OS to read PCI Routing Table.
+        //
+        Method (_PRT, 0)
+        {
+          Return (AR56)
+        }
+
+        #include "IioRootBridge.asi"
+        #include "Sck2Ejd.asi"
+
+        // PCI Express Port 2A on PC14
+        Device (RR2A) {
+            Name   (_ADR, 0x00020000)
+            Method (_PRW, 0) {
+                Return (Package (0x02) {0x09, 0x04})
+            }
+            Method (_PRT, 0) {
+
+                Return (AR57)
+            }
+
+            #include "PcieHp.asi"
+            #include "PcieHpDev.asi"
+            #include "PC1210nmEjd.asi"
+        }
+
+        // PCI Express Port 2B on PC14
+        Device (RR2B) {
+            Name   (_ADR, 0x00030000)
+            Method (_PRW, 0) {
+                Return (Package (0x02) {0x09, 0x04})
+            }
+            Method (_PRT, 0) {
+
+                Return (AR58)
+            }
+
+            #include "PcieHp.asi"
+            #include "PcieHpDev.asi"
+            #include "PC1210nmEjd.asi"
+        }
+
+        // PCI Express Port 2C on PC14
+        Device (RR2C) {
+            Name   (_ADR, 0x00040000)
+            Method (_PRW, 0) {
+                Return (Package (0x02) {0x09, 0x04})
+            }
+            Method (_PRT, 0) {
+
+                Return (AR59)
+            }
+
+            #include "PcieHp.asi"
+            #include "PcieHpDev.asi"
+            #include "PC1210nmEjd.asi"
+        }
+
+        // PCI Express Port 2D on PC14
+        Device (RR2D) {
+            Name   (_ADR, 0x00050000)
+            Method (_PRW, 0) {
+                Return (Package (0x02) {0x09, 0x04})
+            }
+            Method (_PRT, 0) {
+
+                Return (AR5A)
+            }
+
+            #include "PcieHp.asi"
+            #include "PcieHpDev.asi"
+            #include "PC1210nmEjd.asi"
+        }
+    }
+
+    // Socket 2 Root bridge (Stack 3)
+    //
+#undef SOCKET
+#undef STACK
+#define SOCKET 2
+#define STACK  3
+    Device (PC15) {
+        Name   (_HID, EISAID("PNP0A08"))
+        Name   (_CID, EISAID("PNP0A03"))
+        Name   (_UID, 0x0F)
+
+        //
+        // _PRT is ACPI method called by OS to read PCI Routing Table.
+        //
+        Method (_PRT, 0)
+        {
+          Return (AR5B)
+        }
+
+        #include "IioRootBridge.asi"
+        #include "Sck2Ejd.asi"
+
+        // PCI Express Port 3A on PC15
+        Device (RR3A) {
+            Name   (_ADR, 0x00020000)
+            Method (_PRW, 0) {
+                Return (Package (0x02) {0x09, 0x04})
+            }
+            Method (_PRT, 0) {
+
+                Return (AR5C)
+            }
+
+            #include "PcieHp.asi"
+            #include "PcieHpDev.asi"
+            #include "PC1210nmEjd.asi"
+        }
+
+        // PCI Express Port 3B on PC15
+        Device (RR3B) {
+            Name   (_ADR, 0x00030000)
+            Method (_PRW, 0) {
+                Return (Package (0x02) {0x09, 0x04})
+            }
+            Method (_PRT, 0) {
+
+                Return (AR5D)
+            }
+
+            #include "PcieHp.asi"
+            #include "PcieHpDev.asi"
+            #include "PC1210nmEjd.asi"
+        }
+
+        // PCI Express Port 3C on PC15
+        Device (RR3C) {
+            Name   (_ADR, 0x00040000)
+            Method (_PRW, 0) {
+                Return (Package (0x02) {0x09, 0x04})
+            }
+            Method (_PRT, 0) {
+
+                Return (AR5E)
+            }
+
+            #include "PcieHp.asi"
+            #include "PcieHpDev.asi"
+            #include "PC1210nmEjd.asi"
+        }
+
+        // PCI Express Port 3D on PC15
+        Device (RR3D) {
+            Name   (_ADR, 0x00050000)
+            Method (_PRW, 0) {
+                Return (Package (0x02) {0x09, 0x04})
+            }
+            Method (_PRT, 0) {
+
+                Return (AR5F)
+            }
+
+            #include "PcieHp.asi"
+            #include "PcieHpDev.asi"
+            #include "PC1210nmEjd.asi"
+        }
+    }
+
+    // Socket 2 Root bridge (Stack 4)
+    //
+#undef SOCKET
+#undef STACK
+#define SOCKET 2
+#define STACK  4
+    Device (PC16) {
+        Name   (_HID, EISAID("PNP0A08"))
+        Name   (_CID, EISAID("PNP0A03"))
+        Name   (_UID, 0x10)
+
+        //
+        // _PRT is ACPI method called by OS to read PCI Routing Table.
+        //
+        Method (_PRT, 0)
+        {
+          Return (AR60)
+        }
+
+        #include "IioRootBridge.asi"
+        #include "Sck2Ejd.asi"
+
+        // PCI Express Port 4A on PC16
+        Device (RR4A) {
+            Name   (_ADR, 0x00020000)
+            Method (_PRW, 0) {
+                Return (Package (0x02) {0x09, 0x04})
+            }
+            Method (_PRT, 0) {
+
+                Return (AR61)
+            }
+
+            #include "PcieHp.asi"
+            #include "PcieHpDev.asi"
+            #include "PC1210nmEjd.asi"
+        }
+
+        // PCI Express Port 4B on PC16
+        Device (RR4B) {
+            Name   (_ADR, 0x00030000)
+            Method (_PRW, 0) {
+                Return (Package (0x02) {0x09, 0x04})
+            }
+            Method (_PRT, 0) {
+
+                Return (AR62)
+            }
+
+            #include "PcieHp.asi"
+            #include "PcieHpDev.asi"
+            #include "PC1210nmEjd.asi"
+        }
+
+        // PCI Express Port 4C on PC16
+        Device (RR4C) {
+            Name   (_ADR, 0x00040000)
+            Method (_PRW, 0) {
+                Return (Package (0x02) {0x09, 0x04})
+            }
+            Method (_PRT, 0) {
+
+                Return (AR63)
+            }
+
+            #include "PcieHp.asi"
+            #include "PcieHpDev.asi"
+            #include "PC1210nmEjd.asi"
+        }
+
+        // PCI Express Port 4D on PC16
+        Device (RR4D) {
+            Name   (_ADR, 0x00050000)
+            Method (_PRW, 0) {
+                Return (Package (0x02) {0x09, 0x04})
+            }
+            Method (_PRT, 0) {
+
+                Return (AR64)
+            }
+
+            #include "PcieHp.asi"
+            #include "PcieHpDev.asi"
+            #include "PC1210nmEjd.asi"
+        }
+    }
+
+    // Socket 2 Root bridge (Stack 5)
+    //
+#undef SOCKET
+#undef STACK
+#define SOCKET 2
+#define STACK  5
+    Device (PC17) {
+        Name   (_HID, EISAID("PNP0A08"))
+        Name   (_CID, EISAID("PNP0A03"))
+        Name   (_UID, 0x11)
+
+        //
+        // _PRT is ACPI method called by OS to read PCI Routing Table.
+        //
+        Method (_PRT, 0)
+        {
+          Return (AR65)
+        }
+
+        #include "IioRootBridge.asi"
+        #include "Sck2Ejd.asi"
+
+        // PCI Express Port 5A on PC17
+        Device (RR5A) {
+            Name   (_ADR, 0x00020000)
+            Method (_PRW, 0) {
+                Return (Package (0x02) {0x09, 0x04})
+            }
+            Method (_PRT, 0) {
+
+                Return (AR66)
+            }
+
+            #include "PcieHp.asi"
+            #include "PcieHpDev.asi"
+            #include "PC1210nmEjd.asi"
+        }
+
+        // PCI Express Port 5B on PC17
+        Device (RR5B) {
+            Name   (_ADR, 0x00030000)
+            Method (_PRW, 0) {
+                Return (Package (0x02) {0x09, 0x04})
+            }
+            Method (_PRT, 0) {
+
+                Return (AR67)
+            }
+
+            #include "PcieHp.asi"
+            #include "PcieHpDev.asi"
+            #include "PC1210nmEjd.asi"
+        }
+
+        // PCI Express Port 5C on PC17
+        Device (RR5C) {
+            Name   (_ADR, 0x00040000)
+            Method (_PRW, 0) {
+                Return (Package (0x02) {0x09, 0x04})
+            }
+            Method (_PRT, 0) {
+
+                Return (AR68)
+            }
+
+            #include "PcieHp.asi"
+            #include "PcieHpDev.asi"
+            #include "PC1210nmEjd.asi"
+        }
+
+        // PCI Express Port 5D on PC17
+        Device (RR5D) {
+            Name   (_ADR, 0x00050000)
+            Method (_PRW, 0) {
+                Return (Package (0x02) {0x09, 0x04})
+            }
+            Method (_PRT, 0) {
+
+                Return (AR69)
+            }
+
+            #include "PcieHp.asi"
+            #include "PcieHpDev.asi"
+            #include "PC1210nmEjd.asi"
+        }
+    }
+
+    // Socket 2 Uncore 0
+    //
+#undef SOCKET
+#undef STACK
+#define SOCKET 2
+#define STACK  6
+    Device (CONCATENATE3(UC, SOCKET, STACK)) {
+        Name   (_HID, EISAID("PNP0A03"))
+        Name   (_UID, 0x36)
+
+        //
+        // _PRT is ACPI method called by OS to read PCI Routing Table.
+        //
+        Method (_PRT, 0)
+        {
+          Return (AR6A)
+        }
+
+        #include "Uncore.asi"
+
+        // Uncore 4 UBOX Device
+        Device (UBX2) {
+            Name   (_ADR, 0x00000000)
+        }
+
+        // Uncore 4 Misc 2 UPI 0-7 Device
+        Device (UP04) {
+            Name   (_ADR, 0x00020000)
+        }
+
+        // Uncore 4 Misc 1 UPI 0-7 Device
+        Device (UP05) {
+            Name   (_ADR, 0x00030000)
+        }
+
+        // Uncore 4 M2UPI Device
+        Device (M2U6) {
+            Name   (_ADR, 0x00050000)
+        }
+
+        // Uncore 4 M2UPI Device
+        Device (M2U7) {
+            Name   (_ADR, 0x00060000)
+        }
+
+        // Uncore 4 M2UPI Device
+        Device (M2U8) {
+            Name   (_ADR, 0x00070000)
+        }
+
+        // Uncore 4 CHASIS_SMBUS Devices
+        Device (CSM2) {
+            Name   (_ADR, 0x000B0000)
+        }
+
+        // Uncore 4 MS2MEM_SCF_MS2MEM0 Device
+        Device (M2M4) {
+            Name   (_ADR, 0x000C0000)
+        }
+
+        // Uncore 4 MS2MEM_SCF_MS2MEM1 Device
+        Device (M2M5) {
+            Name   (_ADR, 0x000D0000)
+        }
+
+        // Uncore 4 MCDDR0 Device
+        Device (MCD4) {
+            Name   (_ADR, 0x001A0000)
+        }
+
+        // Uncore 4 MCDDR1 Device
+        Device (MCD5) {
+            Name   (_ADR, 0x001B0000)
+        }
+    }
+
+    // Socket 2 Uncore 1
+    //
+#undef SOCKET
+#undef STACK
+#define SOCKET 2
+#define STACK  7
+    Device (CONCATENATE3(UC, SOCKET, STACK)) {
+        Name   (_HID, EISAID("PNP0A03"))
+        Name   (_UID, 0x37)
+
+        //
+        // _PRT is ACPI method called by OS to read PCI Routing Table.
+        //
+        Method (_PRT, 0)
+        {
+          Return (AR6B)
+        }
+
+        #include "Uncore.asi"
+
+        // Uncore 5 GRP1_CHA0-7 Device
+        Device (EHA0) {
+            Name   (_ADR, 0x00000000)
+        }
+
+        // Uncore 5 GRP1_CHA8-15 Device
+        Device (EHA1) {
+            Name   (_ADR, 0x00010000)
+        }
+
+        // Uncore 5 GRP1_CHA16-23 Device
+        Device (EHA2) {
+            Name   (_ADR, 0x00020000)
+        }
+
+        // Uncore 5 GRP1_CHAU24-31 Device
+        Device (EHA3) {
+            Name   (_ADR, 0x00030000)
+        }
+
+        // Uncore 5 GRP1_CHA32-33 Device
+        Device (EHA4) {
+            Name   (_ADR, 0x00040000)
+        }
+
+        // Uncore 5 GRP0_CHA0-7 Device
+        Device (EHA5) {
+            Name   (_ADR, 0x000A0000)
+        }
+
+        // Uncore 5 GRP0_CHA24-31 Device
+        Device (EHA8) {
+            Name   (_ADR, 0x000D0000)
+        }
+
+        // Uncore 5 GRP0_CHA32-33 Device
+        Device (EHA9) {
+            Name   (_ADR, 0x000E0000)
+        }
+
+        // Uncore 5 GRP0_CHA8-15 Device
+        Device (EHA6) {
+            Name   (_ADR, 0x00B00000)
+        }
+
+        // Uncore 5 GRP0_CHA16-23 Device
+        Device (EHA7) {
+            Name   (_ADR, 0x000C0000)
+        }
+
+        // Uncore 5 CHAALL0-1 Device
+        Device (CA02) {
+            Name   (_ADR, 0x001D0000)
+        }
+
+        // Uncore 5 CHASIS_PUINT0-7 Device
+        Device (PUC2) {
+            Name   (_ADR, 0x001E0000)
+        }
+
+        // Uncore 5 Gen3Phy Device
+        Device (GN32) {
+            Name   (_ADR, 0x001F0000)
+        }
+    }
+#endif
+
+#if MAX_SOCKET > 3
+    // Socket 3 Root bridge (Stack 0)
+    //
+#undef SOCKET
+#undef STACK
+#define SOCKET 3
+#define STACK  0
+    Device (PC18) {
+        Name   (_HID, EISAID("PNP0A08"))
+        Name   (_CID, EISAID("PNP0A03"))
+        Name   (_UID, 0x12)
+
+        //
+        // _PRT is ACPI method called by OS to read PCI Routing Table.
+        //
+        Method (_PRT, 0)
+        {
+          Return (AR6C)
+        }
+
+        #include "IioRootBridge.asi"
+        #include "Sck3Ejd.asi"
+
+        // IIOMISC on PC18
+        Device (IIM3) {
+            Name   (_ADR, 0x00000000)
+        }
+
+        // CB3DMA on PC18
+        Device (CB3A) {
+            Name   (_ADR, 0x00010000)
+        }
+
+        // CB3DMA on PC18
+        Device (CB3B) {
+            Name   (_ADR, 0x00010001)
+        }
+
+        // CB3DMA on PC18
+        Device (CB3C) {
+            Name   (_ADR, 0x00010002)
+        }
+
+        // CB3DMA on PC18
+        Device (CB3D) {
+            Name   (_ADR, 0x00010003)
+        }
+
+        // CB3DMA on PC18
+        Device (CB3E) {
+            Name   (_ADR, 0x00010004)
+        }
+
+        // CB3DMA on PC18
+        Device (CB3F) {
+            Name   (_ADR, 0x00010005)
+        }
+
+        // CB3DMA on PC18
+        Device (CB3G) {
+            Name   (_ADR, 0x00010006)
+        }
+
+        // CB3DMA on PC18
+        Device (CB3H) {
+            Name   (_ADR, 0x00010007)
+        }
+    }
+
+    // Socket 3 Root bridge (Stack 1)
+    //
+#undef SOCKET
+#undef STACK
+#define SOCKET 3
+#define STACK  1
+    Device (PC19) {
+        Name   (_HID, EISAID("PNP0A08"))
+        Name   (_CID, EISAID("PNP0A03"))
+        Name   (_UID, 0x13)
+
+        //
+        // _PRT is ACPI method called by OS to read PCI Routing Table.
+        //
+        Method (_PRT, 0)
+        {
+          Return (AR6D)
+        }
+
+        #include "IioRootBridge.asi"
+        #include "Sck3Ejd.asi"
+
+        // PCI Express Port 1A on PC19
+        Device (SR1A) {
+            Name   (_ADR, 0x00020000)
+            Method (_PRW, 0) {
+                Return (Package (0x02) {0x09, 0x04})
+            }
+            Method (_PRT, 0) {
+
+                Return (AR6E)
+            }
+
+            #include "PcieHp.asi"
+            #include "PcieHpDev.asi"
+            #include "PC1810nmEjd.asi"
+        }
+
+        // PCI Express Port 1B on PC19
+        Device (SR1B) {
+            Name   (_ADR, 0x00030000)
+            Method (_PRW, 0) {
+                Return (Package (0x02) {0x09, 0x04})
+            }
+            Method (_PRT, 0) {
+
+                Return (AR6F)
+            }
+
+            #include "PcieHp.asi"
+            #include "PcieHpDev.asi"
+            #include "PC1810nmEjd.asi"
+        }
+
+        // PCI Express Port 1C on PC19
+        Device (SR1C) {
+            Name   (_ADR, 0x00040000)
+            Method (_PRW, 0) {
+                Return (Package (0x02) {0x09, 0x04})
+            }
+            Method (_PRT, 0) {
+
+                Return (AR70)
+            }
+
+            #include "PcieHp.asi"
+            #include "PcieHpDev.asi"
+            #include "PC1810nmEjd.asi"
+        }
+
+        // PCI Express Port 1D on PC19
+        Device (SR1D) {
+            Name   (_ADR, 0x00050000)
+            Method (_PRW, 0) {
+                Return (Package (0x02) {0x09, 0x04})
+            }
+            Method (_PRT, 0) {
+
+                Return (AR71)
+            }
+
+            #include "PcieHp.asi"
+            #include "PcieHpDev.asi"
+            #include "PC1810nmEjd.asi"
+        }
+    }
+
+    // Socket 3 Root bridge (Stack 2)
+    //
+#undef SOCKET
+#undef STACK
+#define SOCKET 3
+#define STACK  2
+    Device (PC20) {
+        Name   (_HID, EISAID("PNP0A08"))
+        Name   (_CID, EISAID("PNP0A03"))
+        Name   (_UID, 0x14)
+
+        //
+        // _PRT is ACPI method called by OS to read PCI Routing Table.
+        //
+        Method (_PRT, 0)
+        {
+          Return (AR72)
+        }
+
+        #include "IioRootBridge.asi"
+        #include "Sck3Ejd.asi"
+
+        // PCI Express Port 2A on  PC20
+        Device (SR2A) {
+            Name   (_ADR, 0x00020000)
+            Method (_PRW, 0) {
+                Return (Package (0x02) {0x09, 0x04})
+            }
+            Method (_PRT, 0) {
+
+                Return (AR73)
+            }
+
+            #include "PcieHp.asi"
+            #include "PcieHpDev.asi"
+            #include "PC1810nmEjd.asi"
+        }
+
+        // PCI Express Port 2B on PC20
+        Device (SR2B) {
+            Name   (_ADR, 0x00030000)
+            Method (_PRW, 0) {
+                Return (Package (0x02) {0x09, 0x04})
+            }
+            Method (_PRT, 0) {
+
+                Return (AR74)
+            }
+
+            #include "PcieHp.asi"
+            #include "PcieHpDev.asi"
+            #include "PC1810nmEjd.asi"
+        }
+
+        // PCI Express Port 2C on PC20
+        Device (SR2C) {
+            Name   (_ADR, 0x00040000)
+            Method (_PRW, 0) {
+                Return (Package (0x02) {0x09, 0x04})
+            }
+            Method (_PRT, 0) {
+
+                Return (AR75)
+            }
+
+            #include "PcieHp.asi"
+            #include "PcieHpDev.asi"
+            #include "PC1810nmEjd.asi"
+        }
+
+        // PCI Express Port 2D on PC20
+        Device (SR2D) {
+            Name   (_ADR, 0x00050000)
+            Method (_PRW, 0) {
+                Return (Package (0x02) {0x09, 0x04})
+            }
+            Method (_PRT, 0) {
+
+                Return (AR76)
+            }
+
+            #include "PcieHp.asi"
+            #include "PcieHpDev.asi"
+            #include "PC1810nmEjd.asi"
+        }
+    }
+
+    // Socket 3 Root bridge (Stack 3)
+    //
+#undef SOCKET
+#undef STACK
+#define SOCKET 3
+#define STACK  3
+    Device (PC21) {
+        Name   (_HID, EISAID("PNP0A08"))
+        Name   (_CID, EISAID("PNP0A03"))
+        Name   (_UID, 0x15)
+
+        //
+        // _PRT is ACPI method called by OS to read PCI Routing Table.
+        //
+        Method (_PRT, 0)
+        {
+          Return (AR77)
+        }
+
+        #include "IioRootBridge.asi"
+        #include "Sck3Ejd.asi"
+
+        // PCI Express Port 3A on PC21
+        Device (SR3A) {
+            Name   (_ADR, 0x00020000)
+            Method (_PRW, 0) {
+                Return (Package (0x02) {0x09, 0x04})
+            }
+            Method (_PRT, 0) {
+
+                Return (AR78)
+            }
+
+            #include "PcieHp.asi"
+            #include "PcieHpDev.asi"
+            #include "PC1810nmEjd.asi"
+        }
+
+        // PCI Express Port 3B on PC21
+        Device (SR3B) {
+            Name   (_ADR, 0x00030000)
+            Method (_PRW, 0) {
+                Return (Package (0x02) {0x09, 0x04})
+            }
+            Method (_PRT, 0) {
+
+                Return (AR79)
+            }
+
+            #include "PcieHp.asi"
+            #include "PcieHpDev.asi"
+            #include "PC1810nmEjd.asi"
+        }
+
+        // PCI Express Port 3C on PC21
+        Device (SR3C) {
+            Name   (_ADR, 0x00040000)
+            Method (_PRW, 0) {
+                Return (Package (0x02) {0x09, 0x04})
+            }
+            Method (_PRT, 0) {
+
+                Return (AR7A)
+            }
+
+            #include "PcieHp.asi"
+            #include "PcieHpDev.asi"
+            #include "PC1810nmEjd.asi"
+        }
+
+        // PCI Express Port 3D on PC21
+        Device (SR3D) {
+            Name   (_ADR, 0x00050000)
+            Method (_PRW, 0) {
+                Return (Package (0x02) {0x09, 0x04})
+            }
+            Method (_PRT, 0) {
+
+                Return (AR7B)
+            }
+
+            #include "PcieHp.asi"
+            #include "PcieHpDev.asi"
+            #include "PC1810nmEjd.asi"
+        }
+    }
+
+    // Socket 3 Root bridge (Stack 4)
+    //
+#undef SOCKET
+#undef STACK
+#define SOCKET 3
+#define STACK  4
+    Device (PC22) {
+        Name   (_HID, EISAID("PNP0A08"))
+        Name   (_CID, EISAID("PNP0A03"))
+        Name   (_UID, 0x16)
+
+        //
+        // _PRT is ACPI method called by OS to read PCI Routing Table.
+        //
+        Method (_PRT, 0)
+        {
+          Return (AR7C)
+        }
+
+        #include "IioRootBridge.asi"
+        #include "Sck3Ejd.asi"
+
+        // PCI Express Port 4A on PC22
+        Device (SR4A) {
+            Name   (_ADR, 0x00020000)
+            Method (_PRW, 0) {
+                Return (Package (0x02) {0x09, 0x04})
+            }
+            Method (_PRT, 0) {
+
+                Return (AR7D)
+            }
+
+            #include "PcieHp.asi"
+            #include "PcieHpDev.asi"
+            #include "PC1810nmEjd.asi"
+        }
+
+        // PCI Express Port 4B on PC22
+        Device (SR4B) {
+            Name   (_ADR, 0x00030000)
+            Method (_PRW, 0) {
+                Return (Package (0x02) {0x09, 0x04})
+            }
+            Method (_PRT, 0) {
+
+                Return (AR7E)
+            }
+
+            #include "PcieHp.asi"
+            #include "PcieHpDev.asi"
+            #include "PC1810nmEjd.asi"
+        }
+
+        // PCI Express Port 4C on PC22
+        Device (SR4C) {
+            Name   (_ADR, 0x00040000)
+            Method (_PRW, 0) {
+                Return (Package (0x02) {0x09, 0x04})
+            }
+            Method (_PRT, 0) {
+
+                Return (AR7F)
+            }
+
+            #include "PcieHp.asi"
+            #include "PcieHpDev.asi"
+            #include "PC1810nmEjd.asi"
+        }
+
+        // PCI Express Port 4D on PC22
+        Device (SR4D) {
+            Name   (_ADR, 0x00050000)
+            Method (_PRW, 0) {
+                Return (Package (0x02) {0x09, 0x04})
+            }
+            Method (_PRT, 0) {
+
+                Return (AR80)
+            }
+
+            #include "PcieHp.asi"
+            #include "PcieHpDev.asi"
+            #include "PC1810nmEjd.asi"
+        }
+    }
+
+    // Socket 3 Root bridge (Stack 5)
+    //
+#undef SOCKET
+#undef STACK
+#define SOCKET 3
+#define STACK  5
+    Device (PC23) {
+        Name   (_HID, EISAID("PNP0A08"))
+        Name   (_CID, EISAID("PNP0A03"))
+        Name   (_UID, 0x17)
+
+        //
+        // _PRT is ACPI method called by OS to read PCI Routing Table.
+        //
+        Method (_PRT, 0)
+        {
+          Return (AR81)
+        }
+
+        #include "IioRootBridge.asi"
+        #include "Sck3Ejd.asi"
+
+        // PCI Express Port 5A on PC23
+        Device (SR5A) {
+            Name   (_ADR, 0x00020000)
+            Method (_PRW, 0) {
+                Return (Package (0x02) {0x09, 0x04})
+            }
+            Method (_PRT, 0) {
+
+                Return (AR82)
+            }
+
+            #include "PcieHp.asi"
+            #include "PcieHpDev.asi"
+            #include "PC1810nmEjd.asi"
+        }
+
+        // PCI Express Port 5B on PC23
+        Device (SR5B) {
+            Name   (_ADR, 0x00030000)
+            Method (_PRW, 0) {
+                Return (Package (0x02) {0x09, 0x04})
+            }
+            Method (_PRT, 0) {
+
+                Return (AR83)
+            }
+
+            #include "PcieHp.asi"
+            #include "PcieHpDev.asi"
+            #include "PC1810nmEjd.asi"
+        }
+
+        // PCI Express Port 5C on PC23
+        Device (SR5C) {
+            Name   (_ADR, 0x00040000)
+            Method (_PRW, 0) {
+                Return (Package (0x02) {0x09, 0x04})
+            }
+            Method (_PRT, 0) {
+
+                Return (AR84)
+            }
+
+            #include "PcieHp.asi"
+            #include "PcieHpDev.asi"
+            #include "PC1810nmEjd.asi"
+        }
+
+        // PCI Express Port 5D on PC23
+        Device (SR5D) {
+            Name   (_ADR, 0x00050000)
+            Method (_PRW, 0) {
+                Return (Package (0x02) {0x09, 0x04})
+            }
+            Method (_PRT, 0) {
+
+                Return (AR85)
+            }
+
+            #include "PcieHp.asi"
+            #include "PcieHpDev.asi"
+            #include "PC1810nmEjd.asi"
+        }
+    }
+
+    // Socket 3 Uncore 0
+    //
+#undef SOCKET
+#undef STACK
+#define SOCKET 3
+#define STACK  6
+    Device (CONCATENATE3(UC, SOCKET, STACK)) {
+        Name   (_HID, EISAID("PNP0A03"))
+        Name   (_UID, 0x38)
+
+        //
+        // _PRT is ACPI method called by OS to read PCI Routing Table.
+        //
+        Method (_PRT, 0)
+        {
+          Return (AR86)
+        }
+
+        #include "Uncore.asi"
+
+        // Uncore 6 UBOX Device
+        Device (UBX3) {
+            Name   (_ADR, 0x00000000)
+        }
+
+        // Uncore 6 Misc 2 UPI 0-7 Device
+        Device (UP06) {
+            Name   (_ADR, 0x00020000)
+        }
+
+        // Uncore 6 Misc 1 UPI 0-7 Device
+        Device (UP07) {
+            Name   (_ADR, 0x00030000)
+        }
+
+        // Uncore 6 M2UPI0 Device
+        Device (M2U9) {
+            Name   (_ADR, 0x00050000)
+        }
+
+        // Uncore 6 M2UPI1 Device
+        Device (M2UA) {
+            Name   (_ADR, 0x00060000)
+        }
+
+        // Uncore 6 M2UPI2 Device
+        Device (M2UB) {
+            Name   (_ADR, 0x00070000)
+        }
+
+        // Uncore 6 CHASIS_SMBUS Devices
+        Device (CSM3) {
+            Name   (_ADR, 0x000B0000)
+        }
+
+        // Uncore 6 MS2MEM_SCF_MS2MEM0 Device
+        Device (M2M6) {
+            Name   (_ADR, 0x000C0000)
+        }
+
+        // Uncore 6 MS2MEM_SCF_MS2MEM1 Device
+        Device (M2M7) {
+            Name   (_ADR, 0x000D0000)
+        }
+
+        // Uncore 6 MCDDR0 Device
+        Device (MCD6) {
+            Name   (_ADR, 0x001A0000)
+        }
+
+        // Uncore 6 MCDDR1 Device
+        Device (MCD7) {
+            Name   (_ADR, 0x001B0000)
+        }
+    }
+
+    // Socket 3 Uncore 1
+    //
+#undef SOCKET
+#undef STACK
+#define SOCKET 3
+#define STACK  7
+    Device (CONCATENATE3(UC, SOCKET, STACK)) {
+        Name   (_HID, EISAID("PNP0A03"))
+        Name   (_UID, 0x39)
+
+        //
+        // _PRT is ACPI method called by OS to read PCI Routing Table.
+        //
+        Method (_PRT, 0)
+        {
+          Return (AR87)
+        }
+
+        #include "Uncore.asi"
+
+        // Uncore 7 GRP1_CHA0-7 Device
+        Device (FHA0) {
+            Name   (_ADR, 0x00000000)
+        }
+
+        // Uncore 7 GRP1_CHA8-15 Device
+        Device (FHA1) {
+            Name   (_ADR, 0x00010000)
+        }
+
+        // Uncore 7 GRP1_CHA16-23 Device
+        Device (FHA2) {
+            Name   (_ADR, 0x00020000)
+        }
+
+        // Uncore 7 GRP1_CHAU24-31 Device
+        Device (FHA3) {
+            Name   (_ADR, 0x00030000)
+        }
+
+        // Uncore 7 GRP1_CHA32-33 Device
+        Device (FHA4) {
+            Name   (_ADR, 0x00040000)
+        }
+
+        // Uncore 7 GRP0_CHA0-7 Device
+        Device (FHA5) {
+            Name   (_ADR, 0x000A0000)
+        }
+
+        // Uncore 7 GRP0_CHA24-31 Device
+        Device (FHA8) {
+            Name   (_ADR, 0x000D0000)
+        }
+
+        // Uncore 7 GRP0_CHA32-33 Device
+        Device (FHA9) {
+            Name   (_ADR, 0x000E0000)
+        }
+
+        // Uncore 7 GRP0_CHA8-15 Device
+        Device (FHA6) {
+            Name   (_ADR, 0x00B00000)
+        }
+
+        // Uncore 7 GRP0_CHA16-23 Device
+        Device (FHA7) {
+            Name   (_ADR, 0x000C0000)
+        }
+
+        // Uncore 7 CHAALL0-1 Device
+        Device (CA03) {
+            Name   (_ADR, 0x001D0000)
+        }
+
+        // Uncore 7 CHASIS_PUINT0-7 Device
+        Device (PUC3) {
+            Name   (_ADR, 0x001E0000)
+        }
+
+        // Uncore 7 Gen3Phy Device
+        Device (GN33) {
+            Name   (_ADR, 0x001F0000)
+        }
+    }
+#endif
+
+    // Virtual FPGA Bridge on Socket 0
+    Device (VFP0) {
+        Name   (_HID, EISAID("PNP0A08"))
+        Name   (_CID, EISAID("PNP0A03"))
+        Name   (_UID, 0x18)
+        Method (_BBN, 0, NotSerialized) {
+            return (FBB0)
+        }
+
+        Method (_PRT, 0) {
+
+            Return (AR88)
+        }
+
+        #include "FpgaBus00.asi"
+
+        // FPGA Device
+        Device (FPG0) {
+            Name   (_ADR, 0x00000000)
+        }
+    }
+#if MAX_SOCKET > 1
+
+    // Virtual FPGA Bridge on Socket 1
+    Device (VFP1) {
+        Name   (_HID, EISAID("PNP0A08"))
+        Name   (_CID, EISAID("PNP0A03"))
+        Name   (_UID, 0x19)
+        Method (_BBN, 0, NotSerialized) {
+            return (FBB1)
+        }
+
+        Method (_PRT, 0) {
+
+            Return (AR89)
+        }
+
+        #include "FpgaBus01.asi"
+
+        // FPGA Device
+        Device (FPG1) {
+            Name   (_ADR, 0x00000000)
+        }
+    }
+#endif
+
+#if MAX_SOCKET > 2
+    // Virtual FPGA Bridge on Socket 2
+    Device (VFP2) {
+        Name   (_HID, EISAID("PNP0A08"))
+        Name   (_CID, EISAID("PNP0A03"))
+        Name   (_UID, 0x1A)
+        Method (_BBN, 0, NotSerialized) {
+            return (FBB2)
+        }
+
+        Method (_PRT, 0) {
+
+            Return (AR8A)
+        }
+
+        #include "FpgaBus02.asi"
+
+        // FPGA Device
+        Device (FPG2) {
+            Name   (_ADR, 0x00000000)
+        }
+    }
+#endif
+
+#if MAX_SOCKET > 3
+    // Virtual FPGA Bridge on Socket 3
+    Device (VFP3) {
+        Name   (_HID, EISAID("PNP0A08"))
+        Name   (_CID, EISAID("PNP0A03"))
+        Name   (_UID, 0x1B)
+        Method (_BBN, 0, NotSerialized) {
+            return (FBB3)
+        }
+
+        Method (_PRT, 0) {
+
+            Return (AR8B)
+        }
+
+        #include "FpgaBus03.asi"
+
+        // FPGA Device
+        Device (FPG3) {
+            Name   (_ADR, 0x00000000)
+        }
+    }
+#endif
+}
+
+Scope (\_GPE) {
+    // [BR1A]: PCI Express Port 1A on PC01
+    // [BR1B]: PCI Express Port 1B on PC01
+    // [BR1C]: PCI Express Port 1C on PC01
+    // [BR1D]: PCI Express Port 1D on PC01
+    // [BR2A]: PCI Express Port 2A on PC02
+    // [BR2B]: PCI Express Port 2B on PC02
+    // [BR2C]: PCI Express Port 2C on PC02
+    // [BR2D]: PCI Express Port 2D on PC02
+    // [BR3A]: PCI Express Port 3A on PC03
+    // [BR3B]: PCI Express Port 3B on PC03
+    // [BR3C]: PCI Express Port 3C on PC03
+    // [BR3D]: PCI Express Port 3D on PC03
+    // [BR4A]: PCI Express Port 4A on PC04
+    // [BR4B]: PCI Express Port 4B on PC04
+    // [BR4C]: PCI Express Port 4C on PC04
+    // [BR4D]: PCI Express Port 4D on PC04
+    // [BR5A]: PCI Express Port 5A on PC05
+    // [BR5B]: PCI Express Port 5B on PC05
+    // [BR5C]: PCI Express Port 5C on PC05
+    // [BR5D]: PCI Express Port 5D on PC05
+    // [QR1A]: PCI Express Port 1A on PC07
+    // [QR1B]: PCI Express Port 1B on PC07
+    // [QR1C]: PCI Express Port 1C on PC07
+    // [QR1D]: PCI Express Port 1D on PC07
+    // [QR2A]: PCI Express Port 2A on PC08
+    // [QR2B]: PCI Express Port 2B on PC08
+    // [QR2C]: PCI Express Port 2C on PC08
+    // [QR2D]: PCI Express Port 2D on PC08
+    // [QR3A]: PCI Express Port 3A on PC09
+    // [QR3B]: PCI Express Port 3B on PC09
+    // [QR3C]: PCI Express Port 3C on PC09
+    // [QR3D]: PCI Express Port 3D on PC09
+    // [QR4A]: PCI Express Port 4A on PC10
+    // [QR4B]: PCI Express Port 4B on PC10
+    // [QR4C]: PCI Express Port 4C on PC10
+    // [QR4D]: PCI Express Port 4D on PC10
+    // [QR5A]: PCI Express Port 5A on PC11
+    // [QR5B]: PCI Express Port 5B on PC11
+    // [QR5C]: PCI Express Port 5C on PC11
+    // [QR5D]: PCI Express Port 5D on PC11
+    // [RR1A]: PCI Express Port 1A on PC13
+    // [RR1B]: PCI Express Port 1B on PC13
+    // [RR1C]: PCI Express Port 1C on PC13
+    // [RR1D]: PCI Express Port 1D on PC13
+    // [RR2A]: PCI Express Port 2A on PC14
+    // [RR2B]: PCI Express Port 2B on PC14
+    // [RR2C]: PCI Express Port 2C on PC14
+    // [RR2D]: PCI Express Port 2D on PC14
+    // [RR3A]: PCI Express Port 3A on PC15
+    // [RR3B]: PCI Express Port 3B on PC15
+    // [RR3C]: PCI Express Port 3C on PC15
+    // [RR3D]: PCI Express Port 3D on PC15
+    // [RR4A]: PCI Express Port 4A on PC16
+    // [RR4B]: PCI Express Port 4B on PC16
+    // [RR4C]: PCI Express Port 4C on PC16
+    // [RR4D]: PCI Express Port 4D on PC16
+    // [RR5A]: PCI Express Port 5A on PC17
+    // [RR5B]: PCI Express Port 5B on PC17
+    // [RR5C]: PCI Express Port 5C on PC17
+    // [RR5D]: PCI Express Port 5D on PC17
+    // [SR1A]: PCI Express Port 1A on PC19
+    // [SR1B]: PCI Express Port 1B on PC19
+    // [SR1C]: PCI Express Port 1C on PC19
+    // [SR1D]: PCI Express Port 1D on PC19
+    // [SR2A]: PCI Express Port 2A on  PC20
+    // [SR2B]: PCI Express Port 2B on PC20
+    // [SR2C]: PCI Express Port 2C on PC20
+    // [SR2D]: PCI Express Port 2D on PC20
+    // [SR3A]: PCI Express Port 3A on PC21
+    // [SR3B]: PCI Express Port 3B on PC21
+    // [SR3C]: PCI Express Port 3C on PC21
+    // [SR3D]: PCI Express Port 3D on PC21
+    // [SR4A]: PCI Express Port 4A on PC22
+    // [SR4B]: PCI Express Port 4B on PC22
+    // [SR4C]: PCI Express Port 4C on PC22
+    // [SR4D]: PCI Express Port 4D on PC22
+    // [SR5A]: PCI Express Port 5A on PC23
+    // [SR5B]: PCI Express Port 5B on PC23
+    // [SR5C]: PCI Express Port 5C on PC23
+    // [SR5D]: PCI Express Port 5D on PC23
+    Method (_L09, 0x0, NotSerialized) {
+        #include "Gpe.asi"
+        Notify (\_SB.PC01.BR1A, 0x02)
+        Notify (\_SB.PC01.BR1B, 0x02)
+        Notify (\_SB.PC01.BR1C, 0x02)
+        Notify (\_SB.PC01.BR1D, 0x02)
+        Notify (\_SB.PC02.BR2A, 0x02)
+        Notify (\_SB.PC02.BR2B, 0x02)
+        Notify (\_SB.PC02.BR2C, 0x02)
+        Notify (\_SB.PC02.BR2D, 0x02)
+        Notify (\_SB.PC03.BR3A, 0x02)
+        Notify (\_SB.PC03.BR3B, 0x02)
+        Notify (\_SB.PC03.BR3C, 0x02)
+        Notify (\_SB.PC03.BR3D, 0x02)
+        Notify (\_SB.PC04.BR4A, 0x02)
+        Notify (\_SB.PC04.BR4B, 0x02)
+        Notify (\_SB.PC04.BR4C, 0x02)
+        Notify (\_SB.PC04.BR4D, 0x02)
+        Notify (\_SB.PC05.BR5A, 0x02)
+        Notify (\_SB.PC05.BR5B, 0x02)
+        Notify (\_SB.PC05.BR5C, 0x02)
+        Notify (\_SB.PC05.BR5D, 0x02)
+#if MAX_SOCKET > 1
+        Notify (\_SB.PC07.QR1A, 0x02)
+        Notify (\_SB.PC07.QR1B, 0x02)
+        Notify (\_SB.PC07.QR1C, 0x02)
+        Notify (\_SB.PC07.QR1D, 0x02)
+        Notify (\_SB.PC08.QR2A, 0x02)
+        Notify (\_SB.PC08.QR2B, 0x02)
+        Notify (\_SB.PC08.QR2C, 0x02)
+        Notify (\_SB.PC08.QR2D, 0x02)
+        Notify (\_SB.PC09.QR3A, 0x02)
+        Notify (\_SB.PC09.QR3B, 0x02)
+        Notify (\_SB.PC09.QR3C, 0x02)
+        Notify (\_SB.PC09.QR3D, 0x02)
+        Notify (\_SB.PC10.QR4A, 0x02)
+        Notify (\_SB.PC10.QR4B, 0x02)
+        Notify (\_SB.PC10.QR4C, 0x02)
+        Notify (\_SB.PC10.QR4D, 0x02)
+        Notify (\_SB.PC11.QR5A, 0x02)
+        Notify (\_SB.PC11.QR5B, 0x02)
+        Notify (\_SB.PC11.QR5C, 0x02)
+        Notify (\_SB.PC11.QR5D, 0x02)
+#endif
+#if MAX_SOCKET > 2
+        Notify (\_SB.PC13.RR1A, 0x02)
+        Notify (\_SB.PC13.RR1B, 0x02)
+        Notify (\_SB.PC13.RR1C, 0x02)
+        Notify (\_SB.PC13.RR1D, 0x02)
+        Notify (\_SB.PC14.RR2A, 0x02)
+        Notify (\_SB.PC14.RR2B, 0x02)
+        Notify (\_SB.PC14.RR2C, 0x02)
+        Notify (\_SB.PC14.RR2D, 0x02)
+        Notify (\_SB.PC15.RR3A, 0x02)
+        Notify (\_SB.PC15.RR3B, 0x02)
+        Notify (\_SB.PC15.RR3C, 0x02)
+        Notify (\_SB.PC15.RR3D, 0x02)
+        Notify (\_SB.PC16.RR4A, 0x02)
+        Notify (\_SB.PC16.RR4B, 0x02)
+        Notify (\_SB.PC16.RR4C, 0x02)
+        Notify (\_SB.PC16.RR4D, 0x02)
+        Notify (\_SB.PC17.RR5A, 0x02)
+        Notify (\_SB.PC17.RR5B, 0x02)
+        Notify (\_SB.PC17.RR5C, 0x02)
+        Notify (\_SB.PC17.RR5D, 0x02)
+#endif
+#if MAX_SOCKET > 3
+        Notify (\_SB.PC19.SR1A, 0x02)
+        Notify (\_SB.PC19.SR1B, 0x02)
+        Notify (\_SB.PC19.SR1C, 0x02)
+        Notify (\_SB.PC19.SR1D, 0x02)
+        Notify (\_SB.PC20.SR2A, 0x02)
+        Notify (\_SB.PC20.SR2B, 0x02)
+        Notify (\_SB.PC20.SR2C, 0x02)
+        Notify (\_SB.PC20.SR2D, 0x02)
+        Notify (\_SB.PC21.SR3A, 0x02)
+        Notify (\_SB.PC21.SR3B, 0x02)
+        Notify (\_SB.PC21.SR3C, 0x02)
+        Notify (\_SB.PC21.SR3D, 0x02)
+        Notify (\_SB.PC22.SR4A, 0x02)
+        Notify (\_SB.PC22.SR4B, 0x02)
+        Notify (\_SB.PC22.SR4C, 0x02)
+        Notify (\_SB.PC22.SR4D, 0x02)
+        Notify (\_SB.PC23.SR5A, 0x02)
+        Notify (\_SB.PC23.SR5B, 0x02)
+        Notify (\_SB.PC23.SR5C, 0x02)
+        Notify (\_SB.PC23.SR5D, 0x02)
+#endif
+    }
+
+    // [EPCU]: EVA PCIe Uplink
+    // [VSP0]: EVA Virtual Switch Port 0
+    // [VSP1]: EVA Virtual Switch Port 1
+    // [VSP2]: EVA Virtual Switch Port 2
+    // [VSP3]: EVA Virtual Switch Port 3
+    Method (_L0B, 0x0, NotSerialized) {
+        Notify (\_SB.PC02.BR2A.EPCU, 0x02)
+        Notify (\_SB.PC02.BR2A.EPCU.VSP0, 0x02)
+        Notify (\_SB.PC02.BR2A.EPCU.VSP1, 0x02)
+        Notify (\_SB.PC02.BR2A.EPCU.VSP2, 0x02)
+        Notify (\_SB.PC02.BR2A.EPCU.VSP3, 0x02)
+    }
+}
+
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/Sck1Ejd.asi b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/Sck1Ejd.asi
new file mode 100644
index 0000000000..5c5c5fbade
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/Sck1Ejd.asi
@@ -0,0 +1,10 @@
+/** @file
+
+  @copyright
+  Copyright 2001 - 2012 Intel Corporation. <BR>
+
+  SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+  // Eject device if SCK1 is removed.
+  Name(_EJD,"\\_SB.SCK1")   // Dependent on SCK1
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/Sck2Ejd.asi b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/Sck2Ejd.asi
new file mode 100644
index 0000000000..f8b0cd107d
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/Sck2Ejd.asi
@@ -0,0 +1,10 @@
+/** @file
+
+  @copyright
+  Copyright 2001 - 2012 Intel Corporation. <BR>
+
+  SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+  // Eject device if SCK2 is removed.
+  Name(_EJD,"\\_SB.SCK2")   // Dependent on SCK2
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/Sck3Ejd.asi b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/Sck3Ejd.asi
new file mode 100644
index 0000000000..175d5d871b
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/Sck3Ejd.asi
@@ -0,0 +1,10 @@
+/** @file
+
+  @copyright
+  Copyright 2001 - 2012 Intel Corporation. <BR>
+
+  SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+  // Eject device if SCK3 is removed.
+  Name(_EJD,"\\_SB.SCK3")   // Dependent on SCK3
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/Sgx.asi b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/Sgx.asi
new file mode 100644
index 0000000000..d6a1e5da71
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/Sgx.asi
@@ -0,0 +1,219 @@
+/** @file
+
+  @copyright
+  Copyright 2007 - 2017 Intel Corporation. <BR>
+
+  SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+Device (EPC) {
+  Name (_HID, EISAID ("INT0E0C"))
+  Name (_STR, Unicode ("Enclave Page Cache 1.0"))
+  Name (_MLS, Package () {Package (2) { "en", Unicode ("Enclave Page Cache 1.0")}})
+
+  Name (RBUF, ResourceTemplate () {
+    QWordMemory (
+      ResourceConsumer,    // ResourceUsage
+      PosDecode,           // Decode               _DEC
+      MinNotFixed,         // IsMinFixed           _MIF
+      MaxNotFixed,         // IsMaxFixed           _MAF
+      NonCacheable,        // Cacheable            _MEM
+      ReadWrite,           // ReadAndWrite         _RW
+      0,                   // AddressGranularity   _GRA
+      0,                   // AddressMinimum       _MIN  <= To be patched in Runtime
+      0,                   // AddressMaximum       _MAX  <= To be patched in Runtime
+      0,                   // AddressTranslation   _TRA
+      0,                   // RangeLength          _LEN  <= To be patched in Runtime
+      ,                    // ResourceSourceIndex
+      ,                    // ResourceSource
+      EPC0                 // DescriptorName
+      )
+    QWordMemory (
+      ResourceConsumer,    // ResourceUsage
+      PosDecode,           // Decode               _DEC
+      MinNotFixed,         // IsMinFixed           _MIF
+      MaxNotFixed,         // IsMaxFixed           _MAF
+      NonCacheable,        // Cacheable            _MEM
+      ReadWrite,           // ReadAndWrite         _RW
+      0,                   // AddressGranularity   _GRA
+      0,                   // AddressMinimum       _MIN  <= To be patched in Runtime
+      0,                   // AddressMaximum       _MAX  <= To be patched in Runtime
+      0,                   // AddressTranslation   _TRA
+      0,                   // RangeLength          _LEN  <= To be patched in Runtime
+      ,                    // ResourceSourceIndex
+      ,                    // ResourceSource
+      EPC1                 // DescriptorName
+      )
+    QWordMemory (
+      ResourceConsumer,    // ResourceUsage
+      PosDecode,           // Decode               _DEC
+      MinNotFixed,         // IsMinFixed           _MIF
+      MaxNotFixed,         // IsMaxFixed           _MAF
+      NonCacheable,        // Cacheable            _MEM
+      ReadWrite,           // ReadAndWrite         _RW
+      0,                   // AddressGranularity   _GRA
+      0,                   // AddressMinimum       _MIN  <= To be patched in Runtime
+      0,                   // AddressMaximum       _MAX  <= To be patched in Runtime
+      0,                   // AddressTranslation   _TRA
+      0,                   // RangeLength          _LEN  <= To be patched in Runtime
+      ,                    // ResourceSourceIndex
+      ,                    // ResourceSource
+      EPC2                 // DescriptorName
+      )
+    QWordMemory (
+      ResourceConsumer,    // ResourceUsage
+      PosDecode,           // Decode               _DEC
+      MinNotFixed,         // IsMinFixed           _MIF
+      MaxNotFixed,         // IsMaxFixed           _MAF
+      NonCacheable,        // Cacheable            _MEM
+      ReadWrite,           // ReadAndWrite         _RW
+      0,                   // AddressGranularity   _GRA
+      0,                   // AddressMinimum       _MIN  <= To be patched in Runtime
+      0,                   // AddressMaximum       _MAX  <= To be patched in Runtime
+      0,                   // AddressTranslation   _TRA
+      0,                   // RangeLength          _LEN  <= To be patched in Runtime
+      ,                    // ResourceSourceIndex
+      ,                    // ResourceSource
+      EPC3                 // DescriptorName
+      )
+    QWordMemory (
+      ResourceConsumer,    // ResourceUsage
+      PosDecode,           // Decode               _DEC
+      MinNotFixed,         // IsMinFixed           _MIF
+      MaxNotFixed,         // IsMaxFixed           _MAF
+      NonCacheable,        // Cacheable            _MEM
+      ReadWrite,           // ReadAndWrite         _RW
+      0,                   // AddressGranularity   _GRA
+      0,                   // AddressMinimum       _MIN  <= To be patched in Runtime
+      0,                   // AddressMaximum       _MAX  <= To be patched in Runtime
+      0,                   // AddressTranslation   _TRA
+      0,                   // RangeLength          _LEN  <= To be patched in Runtime
+      ,                    // ResourceSourceIndex
+      ,                    // ResourceSource
+      EPC4                 // DescriptorName
+      )
+    QWordMemory (
+      ResourceConsumer,    // ResourceUsage
+      PosDecode,           // Decode               _DEC
+      MinNotFixed,         // IsMinFixed           _MIF
+      MaxNotFixed,         // IsMaxFixed           _MAF
+      NonCacheable,        // Cacheable            _MEM
+      ReadWrite,           // ReadAndWrite         _RW
+      0,                   // AddressGranularity   _GRA
+      0,                   // AddressMinimum       _MIN  <= To be patched in Runtime
+      0,                   // AddressMaximum       _MAX  <= To be patched in Runtime
+      0,                   // AddressTranslation   _TRA
+      0,                   // RangeLength          _LEN  <= To be patched in Runtime
+      ,                    // ResourceSourceIndex
+      ,                    // ResourceSource
+      EPC5                 // DescriptorName
+      )
+    QWordMemory (
+      ResourceConsumer,    // ResourceUsage
+      PosDecode,           // Decode               _DEC
+      MinNotFixed,         // IsMinFixed           _MIF
+      MaxNotFixed,         // IsMaxFixed           _MAF
+      NonCacheable,        // Cacheable            _MEM
+      ReadWrite,           // ReadAndWrite         _RW
+      0,                   // AddressGranularity   _GRA
+      0,                   // AddressMinimum       _MIN  <= To be patched in Runtime
+      0,                   // AddressMaximum       _MAX  <= To be patched in Runtime
+      0,                   // AddressTranslation   _TRA
+      0,                   // RangeLength          _LEN  <= To be patched in Runtime
+      ,                    // ResourceSourceIndex
+      ,                    // ResourceSource
+      EPC6                 // DescriptorName
+      )
+    QWordMemory (
+      ResourceConsumer,    // ResourceUsage
+      PosDecode,           // Decode               _DEC
+      MinNotFixed,         // IsMinFixed           _MIF
+      MaxNotFixed,         // IsMaxFixed           _MAF
+      NonCacheable,        // Cacheable            _MEM
+      ReadWrite,           // ReadAndWrite         _RW
+      0,                   // AddressGranularity   _GRA
+      0,                   // AddressMinimum       _MIN  <= To be patched in Runtime
+      0,                   // AddressMaximum       _MAX  <= To be patched in Runtime
+      0,                   // AddressTranslation   _TRA
+      0,                   // RangeLength          _LEN  <= To be patched in Runtime
+      ,                    // ResourceSourceIndex
+      ,                    // ResourceSource
+      EPC7                 // DescriptorName
+      )
+    })
+
+  Method (_CRS, 0x0, NotSerialized) {
+    If (LNotEqual (EBA0, 0)) {
+      CreateQwordField (RBUF, ^EPC0._MIN, MIN0)
+      CreateQwordField (RBUF, ^EPC0._MAX, MAX0)
+      CreateQwordField (RBUF, ^EPC0._LEN, LEN0)
+      Store (EBA0, MIN0)
+      Store (ELN0, LEN0)
+      Subtract (Add (EBA0, ELN0), 1, MAX0)
+    }
+    If (LNotEqual (EBA1, 0)) {
+      CreateQwordField (RBUF, ^EPC1._MIN, MIN1)
+      CreateQwordField (RBUF, ^EPC1._MAX, MAX1)
+      CreateQwordField (RBUF, ^EPC1._LEN, LEN1)
+      Store (EBA1, MIN1)
+      Store (ELN1, LEN1)
+      Subtract (Add (EBA1, ELN1), 1, MAX1)
+    }
+    If (LNotEqual (EBA2, 0)) {
+      CreateQwordField (RBUF, ^EPC2._MIN, MIN2)
+      CreateQwordField (RBUF, ^EPC2._MAX, MAX2)
+      CreateQwordField (RBUF, ^EPC2._LEN, LEN2)
+      Store (EBA2, MIN2)
+      Store (ELN2, LEN2)
+      Subtract (Add (EBA2, ELN2), 1, MAX2)
+    }
+    If (LNotEqual (EBA3, 0)) {
+      CreateQwordField (RBUF, ^EPC3._MIN, MIN3)
+      CreateQwordField (RBUF, ^EPC3._MAX, MAX3)
+      CreateQwordField (RBUF, ^EPC3._LEN, LEN3)
+      Store (EBA3, MIN3)
+      Store (ELN3, LEN3)
+      Subtract (Add (EBA3, ELN3), 1, MAX3)
+    }
+    If (LNotEqual (EBA4, 0)) {
+      CreateQwordField (RBUF, ^EPC4._MIN, MIN4)
+      CreateQwordField (RBUF, ^EPC4._MAX, MAX4)
+      CreateQwordField (RBUF, ^EPC4._LEN, LEN4)
+      Store (EBA4, MIN4)
+      Store (ELN4, LEN4)
+      Subtract (Add (EBA4, ELN4), 1, MAX4)
+    }
+    If (LNotEqual (EBA5, 0)) {
+      CreateQwordField (RBUF, ^EPC5._MIN, MIN5)
+      CreateQwordField (RBUF, ^EPC5._MAX, MAX5)
+      CreateQwordField (RBUF, ^EPC5._LEN, LEN5)
+      Store (EBA5, MIN5)
+      Store (ELN5, LEN5)
+      Subtract (Add (EBA5, ELN5), 1, MAX5)
+    }
+    If (LNotEqual (EBA6, 0)) {
+      CreateQwordField (RBUF, ^EPC6._MIN, MIN6)
+      CreateQwordField (RBUF, ^EPC6._MAX, MAX6)
+      CreateQwordField (RBUF, ^EPC6._LEN, LEN6)
+      Store (EBA6, MIN6)
+      Store (ELN6, LEN6)
+      Subtract (Add (EBA6, ELN6), 1, MAX6)
+    }
+    If (LNotEqual (EBA7, 0)) {
+      CreateQwordField (RBUF, ^EPC7._MIN, MIN7)
+      CreateQwordField (RBUF, ^EPC7._MAX, MAX7)
+      CreateQwordField (RBUF, ^EPC7._LEN, LEN7)
+      Store (EBA7, MIN7)
+      Store (ELN7, LEN7)
+      Subtract (Add (EBA7, ELN7), 1, MAX7)
+    }
+    Return (RBUF)
+  }
+
+  Method (_STA, 0x0, NotSerialized) {
+    If (LNotEqual (EPCS, 0)) {
+      Return (0xF)
+    }
+    Return (0x0)
+  }
+} // end EPC Device
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/Uncore.asi b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/Uncore.asi
new file mode 100644
index 0000000000..bfda78432c
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/Uncore.asi
@@ -0,0 +1,163 @@
+/** @file
+
+  @copyright
+  Copyright 2016 - 2020 Intel Corporation. <BR>
+
+  SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+  //
+  // _BBN is ACPI method called by OS to read PCI base bus number for IIO stack.
+  //
+  Method(_BBN, 0, NotSerialized)
+  {
+    Return(CONCATENATE3(BB, SOCKET, STACK))
+  }
+
+  //
+  // _PXM is ACPI method called by OS to read Proximity Domain (aka NUMA Node) where IIO stack belongs to.
+  //
+  Method(_PXM, 0, NotSerialized)
+  {
+    Store(SOCKET, Local0)
+    If (CLOD) {
+      //
+      // If Sub-NUMA Cluster (SNC) enabled report PCI in the first of SNC domains of a socket,
+      // so multiplicate socket number by the number of SNC domains.
+      //
+      Multiply(Local0, CLOD, Local0)
+    }
+    Return(Local0)
+  }
+
+  //
+  // _SEG is ACPI method called by OS to read PCI segment of IIO stack.
+  //
+  Method(_SEG, 0, NotSerialized)
+  {
+    Return(CONCATENATE2(SG0, SOCKET))
+  }
+
+  //
+  // _STA is a ACPI method called by OS to read status of ACPI device, IIO stack in this case.
+  //
+  Method(_STA, 0, NotSerialized)
+  { //
+    // Check in processor present bitmap (PRBM) if processor is present, then
+    // in stack present bitmap of given processor (SPBx) if stack is present.
+    //
+    ShiftLeft(1, SOCKET, Local0)
+    If (And(PRBM, Local0)) {
+
+      ShiftLeft(1, CONCATENATE2(0x,STACK), Local1)
+      if (And(CONCATENATE2(SPB, SOCKET), Local1)) {
+        Return(0x0F)
+      }
+    }
+    Return(0x00)
+  }
+
+  External (DBGM, FieldUnitObj)
+  Name (SUPP, 0)
+  Name (CTRL, 0)
+
+  Method(_OSC,4) {
+      //
+      // Create DWord-addressable fields from the capabilities Buffer
+      //
+      CreateDWordField(Arg3,0,CDW1)
+      If (LEqual(Arg0,ToUUID("33DB4D5B-1FF7-401C-9657-7441C03DD766"))) {
+
+        //
+        // Create DWord-addressable fields from the capabilities Buffer
+        //
+        CreateDWordField(Arg3,4,CDW2)
+
+        //
+        // Fill 3rd capability DWORD only if the count is greater than 2.
+        //
+        If(LGreater(Arg2,2)) {
+          CreateDWordField(Arg3,8,CDW3)
+        }
+
+        //
+        // Save Capabilities DWord2 & 3
+        //
+        Store(CDW2,SUPP)
+        Store(CDW3,CTRL)
+
+        //
+        // Only allow native hot plug control if OS supports
+        // * ASPM
+        // * MSI/MSI-X
+        //
+        If (LOr(AHPE, LNotEqual(And(SUPP, 0x16), 0x16))) { // Conditions not met?
+          And(CTRL, 0x1E, CTRL) // Mask bit 0 to deny.
+          Sleep(1000)
+        }
+
+        //
+        // Never allow SHPC (no SHPC controller in system)
+        //
+        And(CTRL, 0x1D, CTRL)
+        //
+        // Disable Native PCIe AER handling from OS so that it uses Firmware First model in WHEA
+        //
+        And (CTRL, 0x17, CTRL)
+        If (Not(And(CDW1,1))) { // Query Flag Clear?
+          //
+          // Disable GPEs for Features granted native control
+          //
+          If (And(CTRL, 0x01)) { // Native Hot plug control granted?
+            Store (0x01, GPSH)                // Clear Hotplug SCI Enable in GPE0
+          }
+        }
+
+        If (LNotEqual(Arg1,one)) { // unknown revision
+          Or(CDW1,0x08,CDW1)
+        }
+
+        If(LNotEqual(CDW3,CTRL)) { // capabilities bits were masked
+          Or(CDW1,0x10,CDW1)
+        }
+        //
+        // update DWORD3 in the buffer
+        //
+        Store(CTRL,CDW3)
+        Return(Arg3)
+
+      } Else {
+        //
+        // Just indicate unrecognized UUID
+        // Leave it at that
+        //
+        Or (CDW1,4,CDW1)
+        if(LEqual(DBGM, 0x01)){
+          Store (0xEE, IO80)
+        }
+        Return(Arg3)
+      }
+  } // End _OSC
+
+  Name (UNRS, ResourceTemplate() {
+      WORDBusNumber (     // Bus number resource (0); the bridge produces bus numbers for its subsequent buses
+        ResourceProducer, // bit 0 of general flags is 1
+        MinFixed,         // Range is fixed
+        MaxFixed,         // Range is fixed
+        PosDecode,        // PosDecode
+        0x0000,           // Granularity (FIX9 - Patched by ACPI Platform Driver during POST)
+        0x0000,           // Min         (FIX9 - Patched by ACPI Platform Driver during POST)
+        0x0000,           // Max         (FIX9 - Patched by ACPI Platform Driver during POST)
+        0x0000,           // Translation
+        0x0001,           // Range Length = Max-Min+1 (FIX9 - Patched by ACPI Platform Driver during POST)
+              ,
+              ,
+        FIX9              // DescriptorName populated so iASL outputs offset for it in a .h file
+      )
+  })
+
+    // Current resource template return
+  Method(_CRS, 0x0, NotSerialized)
+  {
+    Return(UNRS)
+  }
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/PlatformPkg.dsc b/Platform/Intel/WhitleyOpenBoardPkg/PlatformPkg.dsc
index 42680254d1..9c2b8a1048 100644
--- a/Platform/Intel/WhitleyOpenBoardPkg/PlatformPkg.dsc
+++ b/Platform/Intel/WhitleyOpenBoardPkg/PlatformPkg.dsc
@@ -805,6 +805,7 @@
 
   $(RP_PKG)/Features/Pci/Dxe/PciPlatform/PciPlatform.inf
 
+  $(RP_PKG)/Features/Acpi/AcpiTables/AcpiTables10nm.inf
   $(RP_PKG)/Features/AcpiVtd/AcpiVtd.inf
 
   $(PLATFORM_PKG)/Acpi/AcpiSmm/AcpiSmm.inf
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/PlatformPkg.fdf b/Platform/Intel/WhitleyOpenBoardPkg/PlatformPkg.fdf
index 45460570d9..ca3514b8ba 100644
--- a/Platform/Intel/WhitleyOpenBoardPkg/PlatformPkg.fdf
+++ b/Platform/Intel/WhitleyOpenBoardPkg/PlatformPkg.fdf
@@ -671,6 +671,7 @@ SET gMinPlatformPkgTokenSpaceGuid.PcdFlashAreaSize         = 0x01000000
   INF  BoardModulePkg/LegacySioDxe/LegacySioDxe.inf
   INF  MdeModulePkg/Universal/Console/TerminalDxe/TerminalDxe.inf
 
+  INF  RuleOverride = ACPITABLE WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/AcpiTables10nm.inf
   INF  WhitleyOpenBoardPkg/Features/AcpiVtd/AcpiVtd.inf
   INF  MinPlatformPkg/Acpi/AcpiSmm/AcpiSmm.inf
 
-- 
2.27.0.windows.1


^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [edk2-devel][edk2-platforms][PATCH V1 6/8] WhitleyOpenBoardPkg/Build: Enable includable build options
  2022-02-07 19:02 [edk2-devel][edk2-platforms][PATCH V1 0/8] Whitley ACPI Tables Oram, Isaac W
                   ` (4 preceding siblings ...)
  2022-02-07 19:02 ` [edk2-devel][edk2-platforms][PATCH V1 5/8] WhitleyOpenBoardPkg/AcpiTables10nm: Add DSDT ACPI table Oram, Isaac W
@ 2022-02-07 19:02 ` Oram, Isaac W
  2022-02-09  3:21   ` Nate DeSimone
  2022-02-07 19:02 ` [edk2-devel][edk2-platforms][PATCH V1 7/8] WhitleyOpenBoardPkg/WilsonCityRvp: Generate AML offset table Oram, Isaac W
  2022-02-07 19:02 ` [edk2-devel][edk2-platforms][PATCH V1 8/8] WhitleyOpenBoardPkg/StaticSkuDataDxe: Add open source driver Oram, Isaac W
  7 siblings, 1 reply; 17+ messages in thread
From: Oram, Isaac W @ 2022-02-07 19:02 UTC (permalink / raw)
  To: devel; +Cc: Nate DeSimone, Chasel Chiu

Separate the [BuildOptions] sections of the DSC to facilitate
multiple DSC builds for prebuilding.

Cc: Nate DeSimone <nathaniel.l.desimone@intel.com>
Cc: Chasel Chiu <chasel.chiu@intel.com>
Signed-off-by: Isaac Oram <isaac.w.oram@intel.com>
---
 Platform/Intel/WhitleyOpenBoardPkg/Include/Dsc/BuildOptions.dsc | 151 ++++++++++++++++++++
 Platform/Intel/WhitleyOpenBoardPkg/PlatformPkg.dsc              | 147 +------------------
 2 files changed, 152 insertions(+), 146 deletions(-)

diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Include/Dsc/BuildOptions.dsc b/Platform/Intel/WhitleyOpenBoardPkg/Include/Dsc/BuildOptions.dsc
new file mode 100644
index 0000000000..d806521abf
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Include/Dsc/BuildOptions.dsc
@@ -0,0 +1,151 @@
+## @file
+# Includable build options
+#
+# @copyright
+# Copyright (C) 2008 Intel Corporation.
+#
+# SPDX-License-Identifier: BSD-2-Clause-Patent
+##
+
+[BuildOptions.Common.EDKII]
+# Append build options for EDK and EDKII drivers (= is Append, == is Replace)
+!if $(CRB_FLAG_ENABLE) == TRUE
+  DEFINE CRB_EDKII_BUILD_OPTIONS = -D CRB_FLAG
+!else
+  DEFINE CRB_EDKII_BUILD_OPTIONS =
+!endif
+
+!if $(DEBUG_FLAGS_ENABLE) == TRUE
+  DEFINE EDKII_DEBUG_BUILD_OPTIONS = -D DEBUG_CODE_BLOCK=1 -D PLATFORM_VARIABLE_ATTRIBUTES=0x3
+!else
+  DEFINE EDKII_DEBUG_BUILD_OPTIONS = -D SILENT_MODE -D PLATFORM_VARIABLE_ATTRIBUTES=0x3
+!endif
+
+!if $(SPARING_SCRATCHPAD_ENABLE) == TRUE
+  DEFINE SPARING_SCRATCHPAD_OPTION = -D SPARING_SCRATCHPAD_SUPPORT
+!else
+  DEFINE SPARING_SCRATCHPAD_OPTIONS =
+!endif
+
+!if $(SCRATCHPAD_DEBUG) == TRUE
+  DEFINE SCRATCHPAD_DEBUG_OPTION = -D SCRATCHPAD_DEBUG
+!else
+  DEFINE SCRATCHPAD_DEBUG_OPTION =
+!endif
+
+!if $(PCH_SERVER_BIOS_ENABLE) == TRUE
+  DEFINE PCH_BUILD_OPTION = -DPCH_SERVER_BIOS_FLAG=1
+!else
+  DEFINE PCH_BUILD_OPTION =
+!endif
+
+!if $(SERVER_BIOS_ENABLE) == TRUE
+  DEFINE SERVER_BUILD_OPTION = -DSERVER_BIOS_FLAG=1
+!else
+  DEFINE SERVER_BUILD_OPTION =
+!endif
+
+DEFINE SC_PATH = -D SC_PATH="Pch/SouthClusterLbg"
+
+DEFINE ME_PATH = -D ME_PATH="Me/MeSps.4"
+
+DEFINE IE_PATH = -D IE_PATH="Ie/v1"
+
+DEFINE NVDIMM_OPTIONS =
+
+!if $(CPUTARGET) == "ICX"
+  DEFINE CPU_TYPE_OPTIONS  = -D ICX_HOST -D A0_HOST -D B0_HOST
+!elseif $(CPUTARGET) == "CPX"
+  DEFINE CPU_TYPE_OPTIONS  = -D SKX_HOST -D CLX_HOST -D CPX_HOST -D A0_HOST -D B0_HOST
+!endif
+
+DEFINE MAX_SOCKET_CORE_THREAD_OPTIONS = -D MAX_SOCKET=$(MAX_SOCKET) -D MAX_CORE=$(MAX_CORE) -D MAX_THREAD=$(MAX_THREAD)
+
+DEFINE MRC_OPTIONS = -D LRDIMM_SUPPORT -D DDRT_SUPPORT
+
+!if $(CPU_SKX_ONLY_SUPPORT) == FALSE
+  DEFINE MAX_IMC_CH_OPTIONS = -D MAX_IMC=4 -D MAX_MC_CH=2
+!else
+  DEFINE MAX_IMC_CH_OPTIONS = -D MAX_IMC=2 -D MAX_MC_CH=3
+!endif
+
+DEFINE MAX_SAD_RULE_OPTION = -D MAX_SAD_RULES=24 -D MAX_DRAM_CLUSTERS=1
+
+DEFINE LT_BUILD_OPTIONS = -D LT_FLAG
+
+DEFINE FSP_BUILD_OPTIONS = -D FSP_DISPATCH_MODE_ENABLE=1
+
+#
+# MAX_KTI_PORTS needs to be updated based on the silicon type
+#
+!if $(CPUTARGET) == "CPX"
+  DEFINE KTI_OPTIONS = -D MAX_KTI_PORTS=6
+!else
+  DEFINE KTI_OPTIONS = -D MAX_KTI_PORTS=3
+!endif
+
+DEFINE IIO_STACK_OPTIONS = -D MAX_IIO_STACK=6 -D MAX_LOGIC_IIO_STACK=8
+
+DEFINE PCH_BIOS_BUILD_OPTIONS = $(PCH_BUILD_OPTION) $(SC_PATH) $(SERVER_BUILD_OPTION)
+
+DEFINE EDKII_DSC_FEATURE_BUILD_OPTIONS = $(CRB_EDKII_BUILD_OPTIONS) $(EDKII_DEBUG_BUILD_OPTIONS) $(PCH_BIOS_BUILD_OPTIONS) $(PCH_PKG_OPTIONS) $(MAX_SOCKET_CORE_THREAD_OPTIONS) $(MAX_IMC_CH_OPTIONS) $(MAX_SAD_RULE_OPTION) $(KTI_OPTIONS) $(IIO_STACK_OPTIONS) $(LT_BUILD_OPTIONS) $(SECURITY_OPTIONS) $(SPARING_SCRATCHPAD_OPTION) $(SCRATCHPAD_DEBUG_OPTION) $(NVDIMM_OPTIONS) -D EFI_PCI_IOV_SUPPORT -D WHEA_SUPPORT $(CPU_TYPE_OPTIONS) -D MMCFG_BASE_ADDRESS=0x80000000 -D DISABLE_NEW_DEPRECATED_INTERFACES $(MRC_OPTIONS) $(FSP_BUILD_OPTIONS)
+
+DEFINE IE_OPTIONS = $(IE_PATH) -DIE_SUPPORT=0
+
+!if $(LINUX_GCC_BUILD) == TRUE
+  DEFINE EDK2_LINUX_BUILD_OPTIONS = -D EDK2_CTE_BUILD
+!else
+  DEFINE EDK2_LINUX_BUILD_OPTIONS =
+!endif
+
+DEFINE EDKII_DSC_FEATURE_BUILD_OPTIONS = $(EDKII_DSC_FEATURE_BUILD_OPTIONS) $(EDK2_LINUX_BUILD_OPTIONS) $(IE_OPTIONS)
+
+DEFINE ME_OPTIONS = -DSPS_VERSION=4 $(ME_PATH)
+
+DEFINE ASPEED_ENABLE_BUILD_OPTIONS = -D ASPEED_ENABLE -D ESPI_ENABLE
+
+DEFINE EDKII_DSC_FEATURE_BUILD_OPTIONS = $(EDKII_DSC_FEATURE_BUILD_OPTIONS) $(ME_OPTIONS) $(ASPEED_ENABLE_BUILD_OPTIONS)
+
+  MSFT:*_*_*_CC_FLAGS= $(EDKII_DSC_FEATURE_BUILD_OPTIONS) /wd4819
+  GCC:*_*_*_CC_FLAGS= $(EDKII_DSC_FEATURE_BUILD_OPTIONS)
+  *_*_*_VFRPP_FLAGS = $(EDKII_DSC_FEATURE_BUILD_OPTIONS)
+  *_*_*_APP_FLAGS   = $(EDKII_DSC_FEATURE_BUILD_OPTIONS)
+  *_*_*_PP_FLAGS    = $(EDKII_DSC_FEATURE_BUILD_OPTIONS)
+  *_*_*_ASLPP_FLAGS = $(EDKII_DSC_FEATURE_BUILD_OPTIONS)
+  *_*_*_ASLCC_FLAGS = $(EDKII_DSC_FEATURE_BUILD_OPTIONS)
+
+
+#
+# Enable source level debugging for RELEASE build
+#
+!if $(TARGET) == "RELEASE"
+  DEFINE EDKII_RELEASE_SRCDBG_ASM_BUILD_OPTIONS   =
+  DEFINE EDKII_RELEASE_SRCDBG_CC_BUILD_OPTIONS    =
+  DEFINE EDKII_RELEASE_SRCDBG_DLINK_BUILD_OPTIONS =
+
+  MSFT:*_*_*_ASM_FLAGS   = $(EDKII_RELEASE_SRCDBG_ASM_BUILD_OPTIONS) /Zi
+  MSFT:*_*_*_CC_FLAGS    = $(EDKII_RELEASE_SRCDBG_CC_BUILD_OPTIONS) /Z7
+  MSFT:*_*_*_DLINK_FLAGS = $(EDKII_RELEASE_SRCDBG_DLINK_BUILD_OPTIONS) /DEBUG
+  GCC:*_*_*_ASM_FLAGS    = $(EDKII_RELEASE_SRCDBG_ASM_BUILD_OPTIONS)
+  GCC:*_*_*_CC_FLAGS     = $(EDKII_RELEASE_SRCDBG_CC_BUILD_OPTIONS)
+  GCC:*_*_*_DLINK_FLAGS  = $(EDKII_RELEASE_SRCDBG_DLINK_BUILD_OPTIONS)
+!endif
+
+#
+# Override the VFR compile flags to speed the build time
+#
+
+*_*_*_VFR_FLAGS                     ==  -n
+
+#
+# add to the build options for DXE/SMM drivers to remove the log message:
+# !!!!!!!!  InsertImageRecord - Section Alignment(0x20) is not 4K  !!!!!!!!
+#
+[BuildOptions.common.EDKII.DXE_RUNTIME_DRIVER, BuildOptions.common.EDKII.DXE_SMM_DRIVER, BuildOptions.common.EDKII.SMM_CORE]
+   MSFT:*_*_*_DLINK_FLAGS = /ALIGN:4096
+
+[BuildOptions]
+  GCC:*_GCC5_*_CC_FLAGS = -Wno-overflow -Wno-discarded-qualifiers -Wno-unused-variable -Wno-unused-but-set-variable -Wno-incompatible-pointer-types -mabi=ms
+  GCC:*_GCC5_IA32_DLINK_FLAGS = -z common-page-size=0x20 -z muldefs
+  GCC:*_GCC5_X64_DLINK_FLAGS  = -z common-page-size=0x20 -z muldefs
+  MSFT:*_*_*_CC_FLAGS = /FAsc
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/PlatformPkg.dsc b/Platform/Intel/WhitleyOpenBoardPkg/PlatformPkg.dsc
index 9c2b8a1048..e78a104004 100644
--- a/Platform/Intel/WhitleyOpenBoardPkg/PlatformPkg.dsc
+++ b/Platform/Intel/WhitleyOpenBoardPkg/PlatformPkg.dsc
@@ -867,149 +867,4 @@
 #                        module style (EDK or EDKII) specified in [Components] section.
 #
 ###################################################################################################
-[BuildOptions.Common.EDKII]
-# Append build options for EDK and EDKII drivers (= is Append, == is Replace)
-!if $(CRB_FLAG_ENABLE) == TRUE
-  DEFINE CRB_EDKII_BUILD_OPTIONS = -D CRB_FLAG
-!else
-  DEFINE CRB_EDKII_BUILD_OPTIONS =
-!endif
-
-!if $(DEBUG_FLAGS_ENABLE) == TRUE
-  DEFINE EDKII_DEBUG_BUILD_OPTIONS = -D DEBUG_CODE_BLOCK=1 -D PLATFORM_VARIABLE_ATTRIBUTES=0x3
-!else
-  DEFINE EDKII_DEBUG_BUILD_OPTIONS = -D SILENT_MODE -D PLATFORM_VARIABLE_ATTRIBUTES=0x3
-!endif
-
-!if $(SPARING_SCRATCHPAD_ENABLE) == TRUE
-  DEFINE SPARING_SCRATCHPAD_OPTION = -D SPARING_SCRATCHPAD_SUPPORT
-!else
-  DEFINE SPARING_SCRATCHPAD_OPTIONS =
-!endif
-
-!if $(SCRATCHPAD_DEBUG) == TRUE
-  DEFINE SCRATCHPAD_DEBUG_OPTION = -D SCRATCHPAD_DEBUG
-!else
-  DEFINE SCRATCHPAD_DEBUG_OPTION =
-!endif
-
-!if $(PCH_SERVER_BIOS_ENABLE) == TRUE
-  DEFINE PCH_BUILD_OPTION = -DPCH_SERVER_BIOS_FLAG=1
-!else
-  DEFINE PCH_BUILD_OPTION =
-!endif
-
-!if $(SERVER_BIOS_ENABLE) == TRUE
-  DEFINE SERVER_BUILD_OPTION = -DSERVER_BIOS_FLAG=1
-!else
-  DEFINE SERVER_BUILD_OPTION =
-!endif
-
-DEFINE SC_PATH = -D SC_PATH="Pch/SouthClusterLbg"
-
-DEFINE ME_PATH = -D ME_PATH="Me/MeSps.4"
-
-DEFINE IE_PATH = -D IE_PATH="Ie/v1"
-
-DEFINE NVDIMM_OPTIONS =
-
-!if $(CPUTARGET) == "ICX"
-  DEFINE CPU_TYPE_OPTIONS  = -D ICX_HOST -D A0_HOST -D B0_HOST
-!elseif $(CPUTARGET) == "CPX"
-  DEFINE CPU_TYPE_OPTIONS  = -D SKX_HOST -D CLX_HOST -D CPX_HOST -D A0_HOST -D B0_HOST
-!endif
-
-DEFINE MAX_SOCKET_CORE_THREAD_OPTIONS = -D MAX_SOCKET=$(MAX_SOCKET) -D MAX_CORE=$(MAX_CORE) -D MAX_THREAD=$(MAX_THREAD)
-
-DEFINE MRC_OPTIONS = -D LRDIMM_SUPPORT -D DDRT_SUPPORT
-
-!if $(CPU_SKX_ONLY_SUPPORT) == FALSE
-  DEFINE MAX_IMC_CH_OPTIONS = -D MAX_IMC=4 -D MAX_MC_CH=2
-!else
-  DEFINE MAX_IMC_CH_OPTIONS = -D MAX_IMC=2 -D MAX_MC_CH=3
-!endif
-
-DEFINE MAX_SAD_RULE_OPTION = -D MAX_SAD_RULES=24 -D MAX_DRAM_CLUSTERS=1
-
-DEFINE LT_BUILD_OPTIONS = -D LT_FLAG
-
-DEFINE FSP_BUILD_OPTIONS = -D FSP_DISPATCH_MODE_ENABLE=1
-
-#
-# MAX_KTI_PORTS needs to be updated based on the silicon type
-#
-!if $(CPUTARGET) == "CPX"
-  DEFINE KTI_OPTIONS = -D MAX_KTI_PORTS=6
-!else
-  DEFINE KTI_OPTIONS = -D MAX_KTI_PORTS=3
-!endif
-
-DEFINE IIO_STACK_OPTIONS = -D MAX_IIO_STACK=6 -D MAX_LOGIC_IIO_STACK=8
-
-DEFINE PCH_BIOS_BUILD_OPTIONS = $(PCH_BUILD_OPTION) $(SC_PATH) $(SERVER_BUILD_OPTION)
-
-DEFINE EDKII_DSC_FEATURE_BUILD_OPTIONS = $(CRB_EDKII_BUILD_OPTIONS) $(EDKII_DEBUG_BUILD_OPTIONS) $(PCH_BIOS_BUILD_OPTIONS) $(PCH_PKG_OPTIONS) $(MAX_SOCKET_CORE_THREAD_OPTIONS) $(MAX_IMC_CH_OPTIONS) $(MAX_SAD_RULE_OPTION) $(KTI_OPTIONS) $(IIO_STACK_OPTIONS) $(LT_BUILD_OPTIONS) $(SECURITY_OPTIONS) $(SPARING_SCRATCHPAD_OPTION) $(SCRATCHPAD_DEBUG_OPTION) $(NVDIMM_OPTIONS) -D EFI_PCI_IOV_SUPPORT -D WHEA_SUPPORT $(CPU_TYPE_OPTIONS) -D MMCFG_BASE_ADDRESS=0x80000000 -D DISABLE_NEW_DEPRECATED_INTERFACES $(MRC_OPTIONS) $(FSP_BUILD_OPTIONS)
-
-DEFINE IE_OPTIONS = $(IE_PATH) -DIE_SUPPORT=0
-
-!if $(LINUX_GCC_BUILD) == TRUE
-  DEFINE EDK2_LINUX_BUILD_OPTIONS = -D EDK2_CTE_BUILD
-!else
-  DEFINE EDK2_LINUX_BUILD_OPTIONS =
-!endif
-
-DEFINE EDKII_DSC_FEATURE_BUILD_OPTIONS = $(EDKII_DSC_FEATURE_BUILD_OPTIONS) $(EDK2_LINUX_BUILD_OPTIONS) $(IE_OPTIONS)
-
-DEFINE ME_OPTIONS = -DSPS_VERSION=4 $(ME_PATH)
-
-DEFINE ASPEED_ENABLE_BUILD_OPTIONS = -D ASPEED_ENABLE -D ESPI_ENABLE
-
-DEFINE EDKII_DSC_FEATURE_BUILD_OPTIONS = $(EDKII_DSC_FEATURE_BUILD_OPTIONS) $(ME_OPTIONS) $(ASPEED_ENABLE_BUILD_OPTIONS)
-
-  MSFT:*_*_*_CC_FLAGS= $(EDKII_DSC_FEATURE_BUILD_OPTIONS) /wd4819
-  GCC:*_*_*_CC_FLAGS= $(EDKII_DSC_FEATURE_BUILD_OPTIONS)
-  *_*_*_VFRPP_FLAGS = $(EDKII_DSC_FEATURE_BUILD_OPTIONS)
-  *_*_*_APP_FLAGS   = $(EDKII_DSC_FEATURE_BUILD_OPTIONS)
-  *_*_*_PP_FLAGS    = $(EDKII_DSC_FEATURE_BUILD_OPTIONS)
-  *_*_*_ASLPP_FLAGS = $(EDKII_DSC_FEATURE_BUILD_OPTIONS)
-  *_*_*_ASLCC_FLAGS = $(EDKII_DSC_FEATURE_BUILD_OPTIONS)
-
-
-#
-# Enable source level debugging for RELEASE build
-#
-!if $(TARGET) == "RELEASE"
-  DEFINE EDKII_RELEASE_SRCDBG_ASM_BUILD_OPTIONS   =
-  DEFINE EDKII_RELEASE_SRCDBG_CC_BUILD_OPTIONS    =
-  DEFINE EDKII_RELEASE_SRCDBG_DLINK_BUILD_OPTIONS =
-
-  MSFT:*_*_*_ASM_FLAGS   = $(EDKII_RELEASE_SRCDBG_ASM_BUILD_OPTIONS) /Zi
-  MSFT:*_*_*_CC_FLAGS    = $(EDKII_RELEASE_SRCDBG_CC_BUILD_OPTIONS) /Z7
-  MSFT:*_*_*_DLINK_FLAGS = $(EDKII_RELEASE_SRCDBG_DLINK_BUILD_OPTIONS) /DEBUG
-  GCC:*_*_*_ASM_FLAGS    = $(EDKII_RELEASE_SRCDBG_ASM_BUILD_OPTIONS)
-  GCC:*_*_*_CC_FLAGS     = $(EDKII_RELEASE_SRCDBG_CC_BUILD_OPTIONS)
-  GCC:*_*_*_DLINK_FLAGS  = $(EDKII_RELEASE_SRCDBG_DLINK_BUILD_OPTIONS)
-!endif
-
-#
-# Override ASL Compiler parameters in tools_def.template.
-#
-  *_*_*_ASL_FLAGS == -vr -we -oi
-#
-# Override the VFR compile flags to speed the build time
-#
-
-*_*_*_VFR_FLAGS                     ==  -n
-
-#
-# add to the build options for DXE/SMM drivers to remove the log message:
-# !!!!!!!!  InsertImageRecord - Section Alignment(0x20) is not 4K  !!!!!!!!
-#
-[BuildOptions.common.EDKII.DXE_RUNTIME_DRIVER, BuildOptions.common.EDKII.DXE_SMM_DRIVER, BuildOptions.common.EDKII.SMM_CORE]
-   MSFT:*_*_*_DLINK_FLAGS = /ALIGN:4096
-
-[BuildOptions]
-  GCC:*_GCC5_*_CC_FLAGS = -Wno-overflow -Wno-discarded-qualifiers -Wno-unused-variable -Wno-unused-but-set-variable -Wno-incompatible-pointer-types -mabi=ms
-  GCC:*_GCC5_IA32_DLINK_FLAGS = -z common-page-size=0x20 -z muldefs
-  GCC:*_GCC5_X64_DLINK_FLAGS  = -z common-page-size=0x20 -z muldefs
-  MSFT:*_*_*_CC_FLAGS = /FAsc
+!include $(RP_PKG)/Include/Dsc/BuildOptions.dsc
-- 
2.27.0.windows.1


^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [edk2-devel][edk2-platforms][PATCH V1 7/8] WhitleyOpenBoardPkg/WilsonCityRvp: Generate AML offset table
  2022-02-07 19:02 [edk2-devel][edk2-platforms][PATCH V1 0/8] Whitley ACPI Tables Oram, Isaac W
                   ` (5 preceding siblings ...)
  2022-02-07 19:02 ` [edk2-devel][edk2-platforms][PATCH V1 6/8] WhitleyOpenBoardPkg/Build: Enable includable build options Oram, Isaac W
@ 2022-02-07 19:02 ` Oram, Isaac W
  2022-02-09  3:21   ` Nate DeSimone
  2022-02-07 19:02 ` [edk2-devel][edk2-platforms][PATCH V1 8/8] WhitleyOpenBoardPkg/StaticSkuDataDxe: Add open source driver Oram, Isaac W
  7 siblings, 1 reply; 17+ messages in thread
From: Oram, Isaac W @ 2022-02-07 19:02 UTC (permalink / raw)
  To: devel; +Cc: Nate DeSimone, Chasel Chiu

Add PreBuild step to generate the AML offset table for the
ACPI tables.

Cc: Nate DeSimone <nathaniel.l.desimone@intel.com>
Cc: Chasel Chiu <chasel.chiu@intel.com>
Signed-off-by: Isaac Oram <isaac.w.oram@intel.com>
---
 Platform/Intel/.gitignore                                                  |  2 +
 Platform/Intel/WhitleyOpenBoardPkg/WilsonCityRvp/AmlOffsets.dsc            | 41 +++++++++++++
 Platform/Intel/WhitleyOpenBoardPkg/WilsonCityRvp/AmlOffsets/AmlOffsets.inf | 26 ++++++++
 Platform/Intel/WhitleyOpenBoardPkg/WilsonCityRvp/build_board.py            | 63 ++++++++++++++++++++
 Platform/Intel/WhitleyOpenBoardPkg/WilsonCityRvp/build_config.cfg          | 15 +++++
 5 files changed, 147 insertions(+)

diff --git a/Platform/Intel/.gitignore b/Platform/Intel/.gitignore
new file mode 100644
index 0000000000..548fee5bea
--- /dev/null
+++ b/Platform/Intel/.gitignore
@@ -0,0 +1,2 @@
+WhitleyOpenBoardPkg/Uba/UbaMain/StaticSkuDataDxe/AmlOffsetTable.c
+__init__.py
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/WilsonCityRvp/AmlOffsets.dsc b/Platform/Intel/WhitleyOpenBoardPkg/WilsonCityRvp/AmlOffsets.dsc
new file mode 100644
index 0000000000..2e5ebf432a
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/WilsonCityRvp/AmlOffsets.dsc
@@ -0,0 +1,41 @@
+## @file
+# Build file for generating AML offset table
+#
+# @copyright
+# Copyright (C) 2021 Intel Corporation.
+#
+# SPDX-License-Identifier: BSD-2-Clause-Patent
+##
+
+[Defines]
+  PLATFORM_NAME                       = $(RP_PKG)
+  PLATFORM_GUID                       = D7EAF54D-C9B9-4075-89F0-71943DBCFA61
+  PLATFORM_VERSION                    = 0.1
+  DSC_SPECIFICATION                   = 0x00010005
+  OUTPUT_DIRECTORY                    = Build/$(RP_PKG)
+  SUPPORTED_ARCHITECTURES             = IA32|X64
+  BUILD_TARGETS                       = DEBUG|RELEASE
+  PLATFORM_SI_PACKAGE                 = ClientOneSiliconPkg
+  DEFINE      PLATFORM_SI_BIN_PACKAGE = WhitleySiliconBinPkg
+  PEI_ARCH                            = IA32
+  DXE_ARCH                            = X64
+
+!if $(CPUTARGET) == "CPX"
+  DEFINE FSP_BIN_PKG            = CedarIslandFspBinPkg
+  DEFINE IIO_INSTANCE           = Skx
+!elseif $(CPUTARGET) == "ICX"
+  DEFINE FSP_BIN_PKG            = WhitleyFspBinPkg
+  DEFINE IIO_INSTANCE           = Icx
+!else
+  DEFINE IIO_INSTANCE           = UnknownCpu
+!endif
+
+  #
+  # Platform On/Off features are defined here
+  #
+  !include $(RP_PKG)/PlatformPkgConfig.dsc
+
+[Components.X64]
+  $(RP_PKG)/WilsonCityRvp/AmlOffsets/AmlOffsets.inf
+
+!include $(RP_PKG)/Include/Dsc/BuildOptions.dsc
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/WilsonCityRvp/AmlOffsets/AmlOffsets.inf b/Platform/Intel/WhitleyOpenBoardPkg/WilsonCityRvp/AmlOffsets/AmlOffsets.inf
new file mode 100644
index 0000000000..8945f372e3
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/WilsonCityRvp/AmlOffsets/AmlOffsets.inf
@@ -0,0 +1,26 @@
+## @file
+# Generate AML offset table EPRPPlatform10nm.offset.h via edk2 build
+#
+# @copyright
+# Copyright (C) 2022 Intel Corporation.
+#
+# SPDX-License-Identifier: BSD-2-Clause-Patent
+##
+
+[Defines]
+  INF_VERSION                    = 0x00010005
+  BASE_NAME                      = AmlOffsets
+  FILE_GUID                      = d7641589-753a-44c5-91c2-bd09686205c6
+  MODULE_TYPE                    = USER_DEFINED
+  VERSION_STRING                 = 1.0
+
+[Sources]
+  WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/EPRPPlatform10nm.asl
+
+[Packages]
+  MdePkg/MdePkg.dec
+  WhitleySiliconPkg/SiliconPkg.dec
+
+[BuildOptions]
+  # add -vr and -so to generate offset.h
+  *_*_*_ASL_FLAGS = -oi -vr -so
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/WilsonCityRvp/build_board.py b/Platform/Intel/WhitleyOpenBoardPkg/WilsonCityRvp/build_board.py
index a0c31e4558..5f625f5f92 100644
--- a/Platform/Intel/WhitleyOpenBoardPkg/WilsonCityRvp/build_board.py
+++ b/Platform/Intel/WhitleyOpenBoardPkg/WilsonCityRvp/build_board.py
@@ -23,6 +23,7 @@ def pre_build_ex(config, functions):
     :returns: nothing
     """
     print("pre_build_ex")
+
     config["BUILD_DIR_PATH"] = os.path.join(config["WORKSPACE"],
                                             'Build',
                                             config["PLATFORM_BOARD_PACKAGE"],
@@ -53,6 +54,68 @@ def pre_build_ex(config, functions):
 
     if config.get("API_MODE_FSP_WRAPPER_BUILD", "FALSE") == "TRUE":
         raise ValueError("FSP API Mode is currently unsupported on Ice Lake Xeon Scalable")
+
+    # Build the ACPI AML offset table *.offset.h
+    print("Info: re-generating PlatformOffset header files")
+
+    execute_script = functions.get("execute_script")
+
+    command = ["build", "-D", "MAX_SOCKET=" + config["MAX_SOCKET"]]
+
+    if config["EXT_BUILD_FLAGS"] and config["EXT_BUILD_FLAGS"] != "":
+        ext_build_flags = config["EXT_BUILD_FLAGS"].split(" ")
+        ext_build_flags = [x.strip() for x in ext_build_flags]
+        ext_build_flags = [x for x in ext_build_flags if x != ""]
+        command.extend(ext_build_flags)
+
+    aml_offsets_split = os.path.split(os.path.normpath(config["AML_OFFSETS_PATH"]))
+    command.append("-p")
+    command.append(os.path.normpath(config["AML_OFFSETS_PATH"]) + '.dsc')
+    command.append("-m")
+    command.append(os.path.join(aml_offsets_split[0], aml_offsets_split[1], aml_offsets_split[1] + '.inf'))
+    command.append("-y")
+    command.append(os.path.join(config["WORKSPACE"], "PreBuildReport.txt"))
+    command.append("--log=" + os.path.join(config["WORKSPACE"], "PreBuild.log"))
+
+    _, _, _, code = execute_script(command, config)
+    if code != 0:
+        print(" ".join(command))
+        print("Error re-generating PlatformOffset header files")
+        sys.exit(1)
+
+    # Build AmlGenOffset command to consume the *.offset.h and produce AmlOffsetTable.c for StaticSkuDataDxe use.
+
+    # Get destination path and filename from config
+    relative_file_path = os.path.normpath(config["STRIPPED_AML_OFFSETS_FILE_PATH"])     # get path relative to Platform/Intel
+    out_file_path = os.path.join(config["WORKSPACE_PLATFORM"], relative_file_path)      # full path to output file
+    out_file_dir = os.path.dirname(out_file_path)                                       # remove filename
+
+    out_file_root_ext = os.path.splitext(os.path.basename(out_file_path))               # root and extension of output file
+
+    # Get relative path for the generated offset.h file
+    relative_dsdt_file_path = os.path.normpath(config["DSDT_TABLE_FILE_PATH"])          # path relative to Platform/Intel
+    dsdt_file_root_ext = os.path.splitext(os.path.basename(relative_dsdt_file_path))    # root and extension of generated offset.h file
+
+    # Generate output directory if it doesn't exist
+    if not os.path.exists(out_file_dir):
+        os.mkdir(out_file_dir)
+
+    command = ["python",
+               os.path.join(config["MIN_PACKAGE_TOOLS"], "AmlGenOffset", "AmlGenOffset.py"),
+               "-d", "--aml_filter", config["AML_FILTER"],
+               "-o", out_file_path,
+               os.path.join(config["BUILD_X64"], aml_offsets_split[0], aml_offsets_split[1], aml_offsets_split[1], "OUTPUT", os.path.dirname(relative_dsdt_file_path), dsdt_file_root_ext[0] + ".offset.h")]
+
+    # execute the command
+    _, _, _, code = execute_script(command, config)
+    if code != 0:
+        print(" ".join(command))
+        print("Error re-generating PlatformOffset header files")
+        sys.exit(1)
+
+    print("GenOffset done")
+
+
     return None
 
 def _merge_files(files, ofile):
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/WilsonCityRvp/build_config.cfg b/Platform/Intel/WhitleyOpenBoardPkg/WilsonCityRvp/build_config.cfg
index 1676c08813..4cc9496153 100644
--- a/Platform/Intel/WhitleyOpenBoardPkg/WilsonCityRvp/build_config.cfg
+++ b/Platform/Intel/WhitleyOpenBoardPkg/WilsonCityRvp/build_config.cfg
@@ -34,3 +34,18 @@ FSP_BINARY_BUILD = FALSE
 FSP_TEST_RELEASE = FALSE
 SECURE_BOOT_ENABLE = FALSE
 BIOS_INFO_GUID = 4A4CA1C6-871C-45BB-8801-6910A7AA5807
+
+#
+# AML offset table generation configuration options
+# All paths should use / and be relative to edk2-platforms/Platform/Intel
+#
+# AML_FILTER                      - AML filter is used to strip out unused AML offset data
+# AML_OFFSETS_PATH                - Path to INF file that builds AML offsets C source file
+#   The directory name, DSC file name, INF file name, and BASE_NAME must match identically
+# DSDT_TABLE_FILE_PATH            - Path to DSDT ASL file for the board
+# STRIPPED_AML_OFFSETS_FILE_PATH  - Target AML offset data file consumed by UBA driver
+#
+AML_FILTER = \"PSYS\" .\.DRVT\" .\.FIX[0-9,A-Z] BBI[0] BBU[0] CRCM BAR0 .\.CCT[0-9A-Z]\" .\.CFH[0-9A-Z]\" .\.FXCD\" .\.FXST\" .\.FXIN\" .\.FXOU\" .\.FXBS\" .\.FXFH\" .\.CENA\" .\.DRVT\" .\.CFIS\" {NULL };
+AML_OFFSETS_PATH = WhitleyOpenBoardPkg/WilsonCityRvp/AmlOffsets
+DSDT_TABLE_FILE_PATH = WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/EPRPPlatform10nm.asl
+STRIPPED_AML_OFFSETS_FILE_PATH = WhitleyOpenBoardPkg/Uba/UbaMain/StaticSkuDataDxe/AmlOffsetTable.c
-- 
2.27.0.windows.1


^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [edk2-devel][edk2-platforms][PATCH V1 8/8] WhitleyOpenBoardPkg/StaticSkuDataDxe: Add open source driver
  2022-02-07 19:02 [edk2-devel][edk2-platforms][PATCH V1 0/8] Whitley ACPI Tables Oram, Isaac W
                   ` (6 preceding siblings ...)
  2022-02-07 19:02 ` [edk2-devel][edk2-platforms][PATCH V1 7/8] WhitleyOpenBoardPkg/WilsonCityRvp: Generate AML offset table Oram, Isaac W
@ 2022-02-07 19:02 ` Oram, Isaac W
  2022-02-09  3:20   ` Nate DeSimone
  7 siblings, 1 reply; 17+ messages in thread
From: Oram, Isaac W @ 2022-02-07 19:02 UTC (permalink / raw)
  To: devel; +Cc: Nate DeSimone, Chasel Chiu

This driver provides data for boards patching AML, PIRQ, and MP tables.

Cc: Nate DeSimone <nathaniel.l.desimone@intel.com>
Cc: Chasel Chiu <chasel.chiu@intel.com>
Signed-off-by: Isaac Oram <isaac.w.oram@intel.com>
---
 Platform/Intel/WhitleyOpenBoardPkg/Include/Library/UbaMpTableUpdateLib.h                    |  41 ++++++++
 Platform/Intel/WhitleyOpenBoardPkg/Include/Library/UbaPirqUpdateLib.h                       |  42 ++++++++
 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaDxeRpBoards.fdf                                   |   5 +
 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/StaticSkuDataDxe/AcpiStaticData.c            |  54 ++++++++++
 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/StaticSkuDataDxe/DeviceDataInstall.c         | 100 ++++++++++++++++++
 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/StaticSkuDataDxe/PlatformDeviceDataSRP10nm.c | 110 ++++++++++++++++++++
 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/StaticSkuDataDxe/Readme.md                   |  19 ++++
 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/StaticSkuDataDxe/StaticSkuDataDxe.c          |  60 +++++++++++
 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/StaticSkuDataDxe/StaticSkuDataDxe.h          |  41 ++++++++
 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/StaticSkuDataDxe/StaticSkuDataDxe.inf        |  59 +++++++++++
 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaRpBoards.dsc                                      |   5 +
 11 files changed, 536 insertions(+)

diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Include/Library/UbaMpTableUpdateLib.h b/Platform/Intel/WhitleyOpenBoardPkg/Include/Library/UbaMpTableUpdateLib.h
new file mode 100644
index 0000000000..5aedaf62be
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Include/Library/UbaMpTableUpdateLib.h
@@ -0,0 +1,41 @@
+/** @file
+  UBA Mp table Update Library Header File.
+
+  @copyright
+  Copyright 2008 - 2015 Intel Corporation. <BR>
+
+  SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _UBA_MP_TABLE_UPDATE_LIB_H
+#define _UBA_MP_TABLE_UPDATE_LIB_H
+
+#include <Base.h>
+#include <Uefi.h>
+
+#include <PlatDevData.h>
+
+#define PLATFORM_MP_TABLE_UPDATE_SIGNATURE  SIGNATURE_32 ('U', 'M', 'P', 'T')
+#define PLATFORM_MP_TABLE_UPDATE_VERSION    0x01
+
+// {0FF8A1CF-A0AB-4ac0-BFC9-34A78F68DD8A}
+#define   PLATFORM_MP_TABLE_CONFIG_DATA_GUID \
+{ 0xff8a1cf, 0xa0ab, 0x4ac0, { 0xbf, 0xc9, 0x34, 0xa7, 0x8f, 0x68, 0xdd, 0x8a } };
+
+
+typedef struct {
+  UINT32                  Signature;
+  UINT32                  Version;
+
+  DEVICE_DATA             *DeviceDataPtr;
+
+} PLATFORM_MP_UPDATE_TABLE;
+
+EFI_STATUS
+PlatformGetMpTableDataPointer (
+  IN  DEVICE_DATA                       **DeviceData
+);
+
+STATIC  EFI_GUID gPlatformMpTableConfigDataGuid =PLATFORM_MP_TABLE_CONFIG_DATA_GUID;
+
+#endif //_UBA_MP_TABLE_UPDATE_LIB_H
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Include/Library/UbaPirqUpdateLib.h b/Platform/Intel/WhitleyOpenBoardPkg/Include/Library/UbaPirqUpdateLib.h
new file mode 100644
index 0000000000..4261b7b74f
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Include/Library/UbaPirqUpdateLib.h
@@ -0,0 +1,42 @@
+/** @file
+  UBA PirqData Update Library Header File.
+
+  @copyright
+  Copyright 2008 - 2014 Intel Corporation. <BR>
+
+  SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _UBA_PIRQ_UPDATE_LIB_H
+#define _UBA_PIRQ_UPDATE_LIB_H
+
+#include <Base.h>
+#include <Uefi.h>
+
+#include <PlatPirqData.h>
+
+#define PLATFORM_PIRQ_UPDATE_SIGNATURE  SIGNATURE_32 ('P', 'I', 'R', 'Q')
+#define PLATFORM_PIRQ_UPDATE_VERSION    0x01
+
+
+// {4C1F48A5-C976-4d90-9F03-8E9B1C327FCF}
+#define   PLATFORM_PIRQ_CONFIG_DATA_GUID \
+{ 0x4c1f48a5, 0xc976, 0x4d90, { 0x9f, 0x3, 0x8e, 0x9b, 0x1c, 0x32, 0x7f, 0xcf } }
+
+
+typedef struct {
+  UINT32                  Signature;
+  UINT32                  Version;
+
+  PLATFORM_PIRQ_DATA      *PirqDataPtr;
+
+} PLATFORM_PIRQ_UPDATE_TABLE;
+
+EFI_STATUS
+PlatformGetPirqDataPointer (
+  IN  PLATFORM_PIRQ_DATA                **PirqData
+);
+
+STATIC  EFI_GUID gPlatformPirqConfigDataGuid = PLATFORM_PIRQ_CONFIG_DATA_GUID;
+
+#endif //_UBA_PIRQ_UPDATE_LIB_H
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaDxeRpBoards.fdf b/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaDxeRpBoards.fdf
index fcf147885f..7c182db5df 100644
--- a/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaDxeRpBoards.fdf
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaDxeRpBoards.fdf
@@ -7,6 +7,11 @@
 # SPDX-License-Identifier: BSD-2-Clause-Patent
 ##
 
+#
+# Currently shared by all platforms
+#
+INF  $(RP_PKG)/Uba/UbaMain/StaticSkuDataDxe/StaticSkuDataDxe.inf
+
 #
 # Platform TypeWilsonCityRP
 #
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/StaticSkuDataDxe/AcpiStaticData.c b/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/StaticSkuDataDxe/AcpiStaticData.c
new file mode 100644
index 0000000000..c658b9fd28
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/StaticSkuDataDxe/AcpiStaticData.c
@@ -0,0 +1,54 @@
+/** @file
+  ACPI static data update.
+
+  @copyright
+  Copyright 2013 - 2022 Intel Corporation. <BR>
+
+  SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#include "StaticSkuDataDxe.h"
+#include <Library/UbaAcpiUpdateLib.h>
+
+#include "AmlOffsetTable.c" // Generated in PreBuild step
+
+#include <Library/HobLib.h>
+#include <Guid/PlatformInfo.h>
+
+ACPI_FIX_UPDATE_TABLE  FixupTableUpdate10nm =
+{
+  PLATFORM_ACPI_FIX_UPDATE_SIGNATURE,
+  PLATFORM_ACPI_FIX_UPDATE_VERSION,
+  &DSDT_EPRP10NM_OffsetTable
+};
+
+EFI_STATUS
+InstallAcpiFixupTableData (
+  IN UBA_CONFIG_DATABASE_PROTOCOL    *UbaConfigProtocol
+  )
+{
+  EFI_STATUS                            Status = EFI_SUCCESS;
+  EFI_HOB_GUID_TYPE                     *GuidHob;
+  EFI_PLATFORM_INFO                     *PlatformInfo;
+  ACPI_FIX_UPDATE_TABLE                 *PtrTable;
+  UINT32                                TableSize;
+
+  GuidHob = GetFirstGuidHob (&gEfiPlatformInfoGuid);
+  ASSERT (GuidHob != NULL);
+  if (GuidHob == NULL) {
+    return EFI_NOT_FOUND;
+  }
+  PlatformInfo = GET_GUID_HOB_DATA (GuidHob);
+
+  PtrTable = &FixupTableUpdate10nm;
+  TableSize = sizeof(FixupTableUpdate10nm);
+  DEBUG ((DEBUG_INFO, "UBA: Loading Acpi table for ICX\n"));
+
+  Status = UbaConfigProtocol->AddData (
+                                UbaConfigProtocol,
+                                &gPlatformAcpiFixTableGuid,
+                                PtrTable,
+                                TableSize
+                                );
+  return Status;
+}
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/StaticSkuDataDxe/DeviceDataInstall.c b/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/StaticSkuDataDxe/DeviceDataInstall.c
new file mode 100644
index 0000000000..dc49390cb2
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/StaticSkuDataDxe/DeviceDataInstall.c
@@ -0,0 +1,100 @@
+/** @file
+  Device data installation.
+
+  @copyright
+  Copyright 2014 - 2022 Intel Corporation. <BR>
+
+  SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#include "StaticSkuDataDxe.h"
+
+#include <Library/UbaPirqUpdateLib.h>
+#include <Library/UbaMpTableUpdateLib.h>
+
+#include <PlatPirqData.h>
+#include <PlatDevData.h>
+
+#include <Library/HobLib.h>
+#include <Guid/PlatformInfo.h>
+
+extern PLATFORM_PIRQ_DATA    mPlatformPirqDataPlatformSRP10nm;
+
+PLATFORM_PIRQ_UPDATE_TABLE  PirqUpdate10nm =
+{
+  PLATFORM_PIRQ_UPDATE_SIGNATURE,
+  PLATFORM_PIRQ_UPDATE_VERSION,
+  &mPlatformPirqDataPlatformSRP10nm
+};
+
+EFI_STATUS
+InstallPirqData (
+  IN UBA_CONFIG_DATABASE_PROTOCOL    *UbaConfigProtocol
+  )
+{
+  EFI_STATUS                            Status = EFI_SUCCESS;
+  PLATFORM_PIRQ_UPDATE_TABLE            *PtrTable;
+  UINT32                                TableSize;
+  EFI_HOB_GUID_TYPE                     *GuidHob;
+  EFI_PLATFORM_INFO                     *PlatformInfo;
+
+  GuidHob = GetFirstGuidHob (&gEfiPlatformInfoGuid);
+  ASSERT (GuidHob != NULL);
+  if (GuidHob == NULL) {
+    return EFI_NOT_FOUND;
+  }
+  PlatformInfo = GET_GUID_HOB_DATA (GuidHob);
+
+  PtrTable = &PirqUpdate10nm;
+  TableSize = sizeof(PirqUpdate10nm);
+  DEBUG ((DEBUG_ERROR, "UBA: Loading Pirqupdate table for ICX\n"));
+
+  Status = UbaConfigProtocol->AddData (
+                                UbaConfigProtocol,
+                                &gPlatformPirqConfigDataGuid,
+                                PtrTable,
+                                TableSize
+                                );
+  return Status;
+}
+
+extern DEVICE_DATA           mDeviceDataPlatformSRP10nm;
+
+PLATFORM_MP_UPDATE_TABLE  MpTableUpdate10nm =
+{
+  PLATFORM_MP_TABLE_UPDATE_SIGNATURE,
+  PLATFORM_MP_TABLE_UPDATE_VERSION,
+  &mDeviceDataPlatformSRP10nm
+};
+
+EFI_STATUS
+InstallMpTableData (
+  IN UBA_CONFIG_DATABASE_PROTOCOL    *UbaConfigProtocol
+  )
+{
+  EFI_STATUS                            Status = EFI_SUCCESS;
+  PLATFORM_MP_UPDATE_TABLE              *PtrTable;
+  UINT32                                TableSize;
+  EFI_HOB_GUID_TYPE                     *GuidHob;
+  EFI_PLATFORM_INFO                     *PlatformInfo;
+
+  GuidHob = GetFirstGuidHob (&gEfiPlatformInfoGuid);
+  ASSERT (GuidHob != NULL);
+  if (GuidHob == NULL) {
+    return EFI_NOT_FOUND;
+  }
+  PlatformInfo = GET_GUID_HOB_DATA (GuidHob);
+
+  PtrTable = &MpTableUpdate10nm;
+  TableSize = sizeof(MpTableUpdate10nm);
+  DEBUG ((DEBUG_ERROR, "UBA: Loading MpTableupdate table for ICX\n"));
+
+  Status = UbaConfigProtocol->AddData (
+                                UbaConfigProtocol,
+                                &gPlatformMpTableConfigDataGuid,
+                                PtrTable,
+                                TableSize
+                                );
+
+  return Status;
+}
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/StaticSkuDataDxe/PlatformDeviceDataSRP10nm.c b/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/StaticSkuDataDxe/PlatformDeviceDataSRP10nm.c
new file mode 100644
index 0000000000..ed9f80734c
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/StaticSkuDataDxe/PlatformDeviceDataSRP10nm.c
@@ -0,0 +1,110 @@
+/** @file
+
+  @copyright
+  Copyright 2017 - 2018 Intel Corporation. <BR>
+
+  SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#include <PlatPirqData.h>
+#include <PlatDevData.h>
+#include <IndustryStandard/LegacyBiosMpTable.h>
+
+#ifndef V_INTEL_VID
+#define V_INTEL_VID               0x8086
+#endif // #ifndef V_INTEL_VID
+
+//
+// Describes Local APICs' connections.
+//
+STATIC DEVICE_DATA_HW_LOCAL_INT      DeviceDataHwLocalInt1[] = {
+  {
+    {{0},{{0xFF,0},{0xFF,0},{0xFF,0}}},
+    0x00,
+    0xff,
+    0x00,
+    EfiLegacyMpTableEntryLocalIntTypeExtInt,
+    EfiLegacyMpTableEntryLocalIntFlagsPolaritySpec,
+    EfiLegacyMpTableEntryLocalIntFlagsTriggerSpec
+  },
+  {
+    {{0},{{0xFF,0},{0xFF,0},{0xFF,0}}},
+    0x00,
+    0xff,
+    0x01,
+    EfiLegacyMpTableEntryLocalIntTypeInt,
+    EfiLegacyMpTableEntryLocalIntFlagsPolaritySpec,
+    EfiLegacyMpTableEntryLocalIntFlagsTriggerSpec
+  },
+};
+
+//
+// Describes system's address space mapping, specific to the system.
+//
+STATIC DEVICE_DATA_HW_ADDR_SPACE_MAPPING DeviceDataHwAddrSpace1[] = {
+  //
+  // Legacy IO addresses.
+  //
+  { {0}, EfiLegacyMpTableEntryExtSysAddrSpaceMappingIo,       0x0000,     0x1000    },
+};
+
+//
+// IRQ priority
+//
+STATIC EFI_LEGACY_IRQ_PRIORITY_TABLE_ENTRY  IrqPriorityTable1[] = {
+  {11, 0},
+  {10, 0},
+  {9,  0},
+  {5,  0},
+  {0,  0},
+  {0,  0},
+  {0,  0}
+};
+
+//
+// Note : UpdateBusNumbers updates the bus numeber
+//
+STATIC EFI_LEGACY_PIRQ_TABLE  PirqTableHead1 [] = {
+  {
+    {
+      EFI_PIRQ_TABLE_SIGNATURE,
+      00,
+      01,
+      0000,
+      00,
+      00,
+      0000,
+      V_INTEL_VID,
+      30,
+      00000000,
+      {00,
+      00,
+      00,
+      00,
+      00,
+      00,
+      00,
+      00,
+      00,
+      00,
+      00},
+      00
+    }
+  }
+};
+
+//
+// Instantiation of the system device data.
+//
+DEVICE_DATA           mDeviceDataPlatformSRP10nm = {
+  DeviceDataHwLocalInt1,   sizeof (DeviceDataHwLocalInt1) / sizeof (DeviceDataHwLocalInt1[0]),
+  DeviceDataHwAddrSpace1,  sizeof (DeviceDataHwAddrSpace1)/ sizeof (DeviceDataHwAddrSpace1[0])
+};
+
+//
+// Instantiation of platform PIRQ data.
+//
+PLATFORM_PIRQ_DATA    mPlatformPirqDataPlatformSRP10nm = {
+  IrqPriorityTable1,    sizeof(IrqPriorityTable1) / sizeof(IrqPriorityTable1[0]),
+  PirqTableHead1,       sizeof(PirqTableHead1) / sizeof(PirqTableHead1[0])
+};
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/StaticSkuDataDxe/Readme.md b/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/StaticSkuDataDxe/Readme.md
new file mode 100644
index 0000000000..2138810db4
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/StaticSkuDataDxe/Readme.md
@@ -0,0 +1,19 @@
+# **Generating ACPI AML Offset table**
+
+The StaticSkuDataDxe driver includes AmlOffsetTable.c which contains the AML offset table.  This Readme captures the build process for this file.
+
+edk2-platforms/Platform/Intel/WhitleyOpenBoardPkg/WilsonCityRvp/build_board.py drives the build since ACPI tables are expected to be board specific.
+
+The AmlOffsetTable.c file is generated in two key steps:
+1. Generate the *Dsdt*.offsets.h where *Dsdt* is the DSDT ASL file name specific for this build. For WilsonCityRvp:
+   * The DSDT is WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/EPRPPlatform10nm.asl
+   * The generated file is Build/WhitleyOpenBoardPkg/DEBUG_VS2015x86/X64/WhitleyOpenBoardPkg/WilsonCityRvp/AmlOffsets/AmlOffsets/OUTPUT/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/EPRPPlatform10nm.offset.h
+   * These are customized in the build_config.cfg file
+2. Generat the AmlOffsetTable.c using the AmlGenOffset.py script from the MinPlatformPkg. For WilsonCityRvp:
+   * Script is at edk2-platforms/Platform/Intel/MinPlatformPkg/Tools/AmlGenOffset/AmlGenOffset.py
+   * Input is Build/WhitleyOpenBoardPkg/DEBUG_VS2015x86/X64/WhitleyOpenBoardPkg/WilsonCityRvp/AmlOffsets/AmlOffsets/OUTPUT/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/EPRPPlatform10nm.offset.h
+   * Output is edk2-platforms/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/StaticSkuDataDxe/AmlOffsetTable.c
+
+Common Issues:
+* The same iasl compiler version must be used to build the AML offset table and to build the DSDT.
+* The Board/*AmlOffsets*.dsc file name, Board/*AmlOffsets* directory name, Board/AmlOffsets/*AmlOffsets*.inf file name, and the BASE_NAME in *AmlOffsets*.inf must all match exactly.
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/StaticSkuDataDxe/StaticSkuDataDxe.c b/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/StaticSkuDataDxe/StaticSkuDataDxe.c
new file mode 100644
index 0000000000..c4f0102f59
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/StaticSkuDataDxe/StaticSkuDataDxe.c
@@ -0,0 +1,60 @@
+/** @file
+  UBA static sku data update dxe driver.
+
+  @copyright
+  Copyright 2013 - 2014 Intel Corporation. <BR>
+
+  SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#include "StaticSkuDataDxe.h"
+
+/**
+  The Driver Entry Point.
+
+  The function is the driver Entry point.
+
+  @param ImageHandle   A handle for the image that is initializing this driver
+  @param SystemTable   A pointer to the EFI system table
+
+  @retval EFI_SUCCESS:              Driver initialized successfully
+  @retval EFI_LOAD_ERROR:           Failed to Initialize or has been loaded
+  @retval EFI_OUT_OF_RESOURCES      Could not allocate needed resources
+
+**/
+EFI_STATUS
+EFIAPI
+StaticSkuConfigDataDxeEntry (
+  IN EFI_HANDLE                            ImageHandle,
+  IN EFI_SYSTEM_TABLE                      *SystemTable
+)
+{
+  EFI_STATUS                              Status;
+  UBA_CONFIG_DATABASE_PROTOCOL      *UbaConfigProtocol = NULL;
+
+  Status = gBS->LocateProtocol (
+                  &gUbaConfigDatabaseProtocolGuid,
+                  NULL,
+                  &UbaConfigProtocol
+                  );
+  if (EFI_ERROR(Status)) {
+    return Status;
+  }
+
+  Status = InstallMpTableData (UbaConfigProtocol);
+  if (EFI_ERROR(Status)) {
+    return Status;
+  }
+
+  Status = InstallPirqData (UbaConfigProtocol);
+  if (EFI_ERROR(Status)) {
+    return Status;
+  }
+
+  Status = InstallAcpiFixupTableData (UbaConfigProtocol);
+  if (EFI_ERROR(Status)) {
+    return Status;
+  }
+
+  return Status;
+}
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/StaticSkuDataDxe/StaticSkuDataDxe.h b/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/StaticSkuDataDxe/StaticSkuDataDxe.h
new file mode 100644
index 0000000000..e54191d4f7
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/StaticSkuDataDxe/StaticSkuDataDxe.h
@@ -0,0 +1,41 @@
+/** @file
+  UBA static sku data update dxe driver.
+
+  @copyright
+  Copyright 2013 - 2022 Intel Corporation. <BR>
+
+  SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _STATIC_SKU_DATA_DXE_H_
+#define _STATIC_SKU_DATA_DXE_H_
+
+#include <Base.h>
+#include <Uefi.h>
+
+#include <Library/UefiDriverEntryPoint.h>
+#include <Library/UefiBootServicesTableLib.h>
+#include <Library/DebugLib.h>
+#include <Library/BaseLib.h>
+#include <Library/BaseMemoryLib.h>
+#include <Library/MemoryAllocationLib.h>
+#include <Library/IoLib.h>
+#include <UncoreCommonIncludes.h>
+#include <Protocol/UbaCfgDb.h>
+
+EFI_STATUS
+InstallMpTableData (
+  IN UBA_CONFIG_DATABASE_PROTOCOL    *UbaConfigProtocol
+);
+
+EFI_STATUS
+InstallPirqData (
+  IN UBA_CONFIG_DATABASE_PROTOCOL    *UbaConfigProtocol
+);
+
+EFI_STATUS
+InstallAcpiFixupTableData (
+  IN UBA_CONFIG_DATABASE_PROTOCOL    *UbaConfigProtocol
+);
+
+#endif // _STATIC_SKU_DATA_DXE_H_
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/StaticSkuDataDxe/StaticSkuDataDxe.inf b/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/StaticSkuDataDxe/StaticSkuDataDxe.inf
new file mode 100644
index 0000000000..97a1931c84
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/StaticSkuDataDxe/StaticSkuDataDxe.inf
@@ -0,0 +1,59 @@
+## @file
+# Static Board Data DXE Driver.
+#
+# @copyright
+# Copyright 2018 - 2022 Intel Corporation. <BR>
+#
+# SPDX-License-Identifier: BSD-2-Clause-Patent
+##
+
+[Defines]
+  INF_VERSION                    = 0x00010005
+  BASE_NAME                      = StaticSkuDataDxeBaseline
+  FILE_GUID                      = 2C03C058-4305-7829-7E84-C7B3D6232F42
+  MODULE_TYPE                    = DXE_DRIVER
+  VERSION_STRING                 = 1.0
+
+  ENTRY_POINT                    = StaticSkuConfigDataDxeEntry
+
+#
+# The following information is for reference only and not required by the build tools.
+#
+#  VALID_ARCHITECTURES           = x64
+#
+
+[Sources]
+  StaticSkuDataDxe.c
+  StaticSkuDataDxe.h
+  DeviceDataInstall.c
+  PlatformDeviceDataSRP10nm.c
+  AcpiStaticData.c
+
+[Packages]
+  MdePkg/MdePkg.dec
+  MdeModulePkg/MdeModulePkg.dec
+  WhitleySiliconPkg/SiliconPkg.dec
+  WhitleySiliconPkg/CpRcPkg.dec
+  WhitleyOpenBoardPkg/PlatformPkg.dec
+
+[LibraryClasses]
+  BaseLib
+  BaseMemoryLib
+  MemoryAllocationLib
+  UefiBootServicesTableLib
+  UefiDriverEntryPoint
+  UefiLib
+  DebugLib
+  IoLib
+  HobLib
+
+[Guids]
+  gEfiPlatformInfoGuid
+
+[Protocols]
+  gUbaConfigDatabaseProtocolGuid
+
+[Depex]
+  gEfiPlatformTypeWilsonCitySMTProtocolGuid OR
+  gEfiPlatformTypeWilsonCityRPProtocolGuid  OR
+  gEfiPlatformTypeJunctionCityProtocolGuid
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaRpBoards.dsc b/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaRpBoards.dsc
index f37093bccd..48b26de427 100644
--- a/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaRpBoards.dsc
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaRpBoards.dsc
@@ -30,6 +30,11 @@ $(RP_PKG)/Uba/BoardInit/Pei/BoardInitPei.inf {
 }
 
 [Components.X64]
+#
+# Currently shared by all platforms
+#
+$(RP_PKG)/Uba/UbaMain/StaticSkuDataDxe/StaticSkuDataDxe.inf
+
 #
 # Platform TypeWilsonCityRP
 #
-- 
2.27.0.windows.1


^ permalink raw reply related	[flat|nested] 17+ messages in thread

* Re: [edk2-devel][edk2-platforms][PATCH V1 8/8] WhitleyOpenBoardPkg/StaticSkuDataDxe: Add open source driver
  2022-02-07 19:02 ` [edk2-devel][edk2-platforms][PATCH V1 8/8] WhitleyOpenBoardPkg/StaticSkuDataDxe: Add open source driver Oram, Isaac W
@ 2022-02-09  3:20   ` Nate DeSimone
  0 siblings, 0 replies; 17+ messages in thread
From: Nate DeSimone @ 2022-02-09  3:20 UTC (permalink / raw)
  To: Oram, Isaac W, devel@edk2.groups.io; +Cc: Chiu, Chasel

Hi Isaac,

Please see feedback inline.

There is a minor typo in Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/StaticSkuDataDxe/Readme.md. "Generat" should be "Generate". This can be fixed during the commit process, no need to send a V2 patch series.

Reviewed-by: Nate DeSimone <nathaniel.l.desimone@intel.com>

Thanks,
Nate

> -----Original Message-----
> From: Oram, Isaac W <isaac.w.oram@intel.com>
> Sent: Monday, February 7, 2022 11:03 AM
> To: devel@edk2.groups.io
> Cc: Desimone, Nathaniel L <nathaniel.l.desimone@intel.com>; Chiu, Chasel
> <chasel.chiu@intel.com>
> Subject: [edk2-devel][edk2-platforms][PATCH V1 8/8]
> WhitleyOpenBoardPkg/StaticSkuDataDxe: Add open source driver
> 
> This driver provides data for boards patching AML, PIRQ, and MP tables.
> 
> Cc: Nate DeSimone <nathaniel.l.desimone@intel.com>
> Cc: Chasel Chiu <chasel.chiu@intel.com>
> Signed-off-by: Isaac Oram <isaac.w.oram@intel.com>
> ---
>  Platform/Intel/WhitleyOpenBoardPkg/Include/Library/UbaMpTableUpdateLib.h                    |  41 ++++++++
>  Platform/Intel/WhitleyOpenBoardPkg/Include/Library/UbaPirqUpdateLib.h                       |  42 ++++++++
>  Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaDxeRpBoards.fdf                                   |   5 +
>  Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/StaticSkuDataDxe/AcpiStaticData.c            |  54 ++++++++++
>  Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/StaticSkuDataDxe/DeviceDataInstall.c         | 100 ++++++++++++++++++
>  Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/StaticSkuDataDxe/PlatformDeviceDataSRP10nm.c | 110 ++++++++++++++++++++
>  Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/StaticSkuDataDxe/Readme.md                   |  19 ++++
>  Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/StaticSkuDataDxe/StaticSkuDataDxe.c          |  60 +++++++++++
>  Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/StaticSkuDataDxe/StaticSkuDataDxe.h          |  41 ++++++++
>  Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/StaticSkuDataDxe/StaticSkuDataDxe.inf        |  59 +++++++++++
>  Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaRpBoards.dsc                                      |   5 +
>  11 files changed, 536 insertions(+)
> 
> diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Include/Library/UbaMpTableUpdateLib.h b/Platform/Intel/WhitleyOpenBoardPkg/Include/Library/UbaMpTableUpdateLib.h
> new file mode 100644
> index 0000000000..5aedaf62be
> --- /dev/null
> +++ b/Platform/Intel/WhitleyOpenBoardPkg/Include/Library/UbaMpTableUpdateLib.h
> @@ -0,0 +1,41 @@
> +/** @file
> +  UBA Mp table Update Library Header File.
> +
> +  @copyright
> +  Copyright 2008 - 2015 Intel Corporation. <BR>
> +
> +  SPDX-License-Identifier: BSD-2-Clause-Patent
> +**/
> +
> +#ifndef _UBA_MP_TABLE_UPDATE_LIB_H
> +#define _UBA_MP_TABLE_UPDATE_LIB_H
> +
> +#include <Base.h>
> +#include <Uefi.h>
> +
> +#include <PlatDevData.h>
> +
> +#define PLATFORM_MP_TABLE_UPDATE_SIGNATURE  SIGNATURE_32 ('U', 'M', 'P', 'T')
> +#define PLATFORM_MP_TABLE_UPDATE_VERSION    0x01
> +
> +// {0FF8A1CF-A0AB-4ac0-BFC9-34A78F68DD8A}
> +#define   PLATFORM_MP_TABLE_CONFIG_DATA_GUID \
> +{ 0xff8a1cf, 0xa0ab, 0x4ac0, { 0xbf, 0xc9, 0x34, 0xa7, 0x8f, 0x68, 0xdd, 0x8a } };
> +
> +
> +typedef struct {
> +  UINT32                  Signature;
> +  UINT32                  Version;
> +
> +  DEVICE_DATA             *DeviceDataPtr;
> +
> +} PLATFORM_MP_UPDATE_TABLE;
> +
> +EFI_STATUS
> +PlatformGetMpTableDataPointer (
> +  IN  DEVICE_DATA                       **DeviceData
> +);
> +
> +STATIC  EFI_GUID gPlatformMpTableConfigDataGuid =PLATFORM_MP_TABLE_CONFIG_DATA_GUID;
> +
> +#endif //_UBA_MP_TABLE_UPDATE_LIB_H
> diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Include/Library/UbaPirqUpdateLib.h b/Platform/Intel/WhitleyOpenBoardPkg/Include/Library/UbaPirqUpdateLib.h
> new file mode 100644
> index 0000000000..4261b7b74f
> --- /dev/null
> +++ b/Platform/Intel/WhitleyOpenBoardPkg/Include/Library/UbaPirqUpdateLib.h
> @@ -0,0 +1,42 @@
> +/** @file
> +  UBA PirqData Update Library Header File.
> +
> +  @copyright
> +  Copyright 2008 - 2014 Intel Corporation. <BR>
> +
> +  SPDX-License-Identifier: BSD-2-Clause-Patent
> +**/
> +
> +#ifndef _UBA_PIRQ_UPDATE_LIB_H
> +#define _UBA_PIRQ_UPDATE_LIB_H
> +
> +#include <Base.h>
> +#include <Uefi.h>
> +
> +#include <PlatPirqData.h>
> +
> +#define PLATFORM_PIRQ_UPDATE_SIGNATURE  SIGNATURE_32 ('P', 'I', 'R', 'Q')
> +#define PLATFORM_PIRQ_UPDATE_VERSION    0x01
> +
> +
> +// {4C1F48A5-C976-4d90-9F03-8E9B1C327FCF}
> +#define   PLATFORM_PIRQ_CONFIG_DATA_GUID \
> +{ 0x4c1f48a5, 0xc976, 0x4d90, { 0x9f, 0x3, 0x8e, 0x9b, 0x1c, 0x32, 0x7f, 0xcf } }
> +
> +
> +typedef struct {
> +  UINT32                  Signature;
> +  UINT32                  Version;
> +
> +  PLATFORM_PIRQ_DATA      *PirqDataPtr;
> +
> +} PLATFORM_PIRQ_UPDATE_TABLE;
> +
> +EFI_STATUS
> +PlatformGetPirqDataPointer (
> +  IN  PLATFORM_PIRQ_DATA                **PirqData
> +);
> +
> +STATIC  EFI_GUID gPlatformPirqConfigDataGuid = PLATFORM_PIRQ_CONFIG_DATA_GUID;
> +
> +#endif //_UBA_PIRQ_UPDATE_LIB_H
> diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaDxeRpBoards.fdf b/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaDxeRpBoards.fdf
> index fcf147885f..7c182db5df 100644
> --- a/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaDxeRpBoards.fdf
> +++ b/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaDxeRpBoards.fdf
> @@ -7,6 +7,11 @@
>  # SPDX-License-Identifier: BSD-2-Clause-Patent
>  ##
>  
> +#
> +# Currently shared by all platforms
> +#
> +INF  $(RP_PKG)/Uba/UbaMain/StaticSkuDataDxe/StaticSkuDataDxe.inf
> +
>  #
>  # Platform TypeWilsonCityRP
>  #
> diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/StaticSkuDataDxe/AcpiStaticData.c b/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/StaticSkuDataDxe/AcpiStaticData.c
> new file mode 100644
> index 0000000000..c658b9fd28
> --- /dev/null
> +++ b/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/StaticSkuDataDxe/AcpiStaticData.c
> @@ -0,0 +1,54 @@
> +/** @file
> +  ACPI static data update.
> +
> +  @copyright
> +  Copyright 2013 - 2022 Intel Corporation. <BR>
> +
> +  SPDX-License-Identifier: BSD-2-Clause-Patent
> +**/
> +
> +#include "StaticSkuDataDxe.h"
> +#include <Library/UbaAcpiUpdateLib.h>
> +
> +#include "AmlOffsetTable.c" // Generated in PreBuild step
> +
> +#include <Library/HobLib.h>
> +#include <Guid/PlatformInfo.h>
> +
> +ACPI_FIX_UPDATE_TABLE  FixupTableUpdate10nm =
> +{
> +  PLATFORM_ACPI_FIX_UPDATE_SIGNATURE,
> +  PLATFORM_ACPI_FIX_UPDATE_VERSION,
> +  &DSDT_EPRP10NM_OffsetTable
> +};
> +
> +EFI_STATUS
> +InstallAcpiFixupTableData (
> +  IN UBA_CONFIG_DATABASE_PROTOCOL    *UbaConfigProtocol
> +  )
> +{
> +  EFI_STATUS                            Status = EFI_SUCCESS;
> +  EFI_HOB_GUID_TYPE                     *GuidHob;
> +  EFI_PLATFORM_INFO                     *PlatformInfo;
> +  ACPI_FIX_UPDATE_TABLE                 *PtrTable;
> +  UINT32                                TableSize;
> +
> +  GuidHob = GetFirstGuidHob (&gEfiPlatformInfoGuid);
> +  ASSERT (GuidHob != NULL);
> +  if (GuidHob == NULL) {
> +    return EFI_NOT_FOUND;
> +  }
> +  PlatformInfo = GET_GUID_HOB_DATA (GuidHob);
> +
> +  PtrTable = &FixupTableUpdate10nm;
> +  TableSize = sizeof(FixupTableUpdate10nm);
> +  DEBUG ((DEBUG_INFO, "UBA: Loading Acpi table for ICX\n"));
> +
> +  Status = UbaConfigProtocol->AddData (
> +                                UbaConfigProtocol,
> +                                &gPlatformAcpiFixTableGuid,
> +                                PtrTable,
> +                                TableSize
> +                                );
> +  return Status;
> +}
> diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/StaticSkuDataDxe/DeviceDataInstall.c b/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/StaticSkuDataDxe/DeviceDataInstall.c
> new file mode 100644
> index 0000000000..dc49390cb2
> --- /dev/null
> +++ b/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/StaticSkuDataDxe/DeviceDataInstall.c
> @@ -0,0 +1,100 @@
> +/** @file
> +  Device data installation.
> +
> +  @copyright
> +  Copyright 2014 - 2022 Intel Corporation. <BR>
> +
> +  SPDX-License-Identifier: BSD-2-Clause-Patent
> +**/
> +
> +#include "StaticSkuDataDxe.h"
> +
> +#include <Library/UbaPirqUpdateLib.h>
> +#include <Library/UbaMpTableUpdateLib.h>
> +
> +#include <PlatPirqData.h>
> +#include <PlatDevData.h>
> +
> +#include <Library/HobLib.h>
> +#include <Guid/PlatformInfo.h>
> +
> +extern PLATFORM_PIRQ_DATA    mPlatformPirqDataPlatformSRP10nm;
> +
> +PLATFORM_PIRQ_UPDATE_TABLE  PirqUpdate10nm =
> +{
> +  PLATFORM_PIRQ_UPDATE_SIGNATURE,
> +  PLATFORM_PIRQ_UPDATE_VERSION,
> +  &mPlatformPirqDataPlatformSRP10nm
> +};
> +
> +EFI_STATUS
> +InstallPirqData (
> +  IN UBA_CONFIG_DATABASE_PROTOCOL    *UbaConfigProtocol
> +  )
> +{
> +  EFI_STATUS                            Status = EFI_SUCCESS;
> +  PLATFORM_PIRQ_UPDATE_TABLE            *PtrTable;
> +  UINT32                                TableSize;
> +  EFI_HOB_GUID_TYPE                     *GuidHob;
> +  EFI_PLATFORM_INFO                     *PlatformInfo;
> +
> +  GuidHob = GetFirstGuidHob (&gEfiPlatformInfoGuid);
> +  ASSERT (GuidHob != NULL);
> +  if (GuidHob == NULL) {
> +    return EFI_NOT_FOUND;
> +  }
> +  PlatformInfo = GET_GUID_HOB_DATA (GuidHob);
> +
> +  PtrTable = &PirqUpdate10nm;
> +  TableSize = sizeof(PirqUpdate10nm);
> +  DEBUG ((DEBUG_ERROR, "UBA: Loading Pirqupdate table for ICX\n"));
> +
> +  Status = UbaConfigProtocol->AddData (
> +                                UbaConfigProtocol,
> +                                &gPlatformPirqConfigDataGuid,
> +                                PtrTable,
> +                                TableSize
> +                                );
> +  return Status;
> +}
> +
> +extern DEVICE_DATA           mDeviceDataPlatformSRP10nm;
> +
> +PLATFORM_MP_UPDATE_TABLE  MpTableUpdate10nm =
> +{
> +  PLATFORM_MP_TABLE_UPDATE_SIGNATURE,
> +  PLATFORM_MP_TABLE_UPDATE_VERSION,
> +  &mDeviceDataPlatformSRP10nm
> +};
> +
> +EFI_STATUS
> +InstallMpTableData (
> +  IN UBA_CONFIG_DATABASE_PROTOCOL    *UbaConfigProtocol
> +  )
> +{
> +  EFI_STATUS                            Status = EFI_SUCCESS;
> +  PLATFORM_MP_UPDATE_TABLE              *PtrTable;
> +  UINT32                                TableSize;
> +  EFI_HOB_GUID_TYPE                     *GuidHob;
> +  EFI_PLATFORM_INFO                     *PlatformInfo;
> +
> +  GuidHob = GetFirstGuidHob (&gEfiPlatformInfoGuid);
> +  ASSERT (GuidHob != NULL);
> +  if (GuidHob == NULL) {
> +    return EFI_NOT_FOUND;
> +  }
> +  PlatformInfo = GET_GUID_HOB_DATA (GuidHob);
> +
> +  PtrTable = &MpTableUpdate10nm;
> +  TableSize = sizeof(MpTableUpdate10nm);
> +  DEBUG ((DEBUG_ERROR, "UBA: Loading MpTableupdate table for ICX\n"));
> +
> +  Status = UbaConfigProtocol->AddData (
> +                                UbaConfigProtocol,
> +                                &gPlatformMpTableConfigDataGuid,
> +                                PtrTable,
> +                                TableSize
> +                                );
> +
> +  return Status;
> +}
> diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/StaticSkuDataDxe/PlatformDeviceDataSRP10nm.c b/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/StaticSkuDataDxe/PlatformDeviceDataSRP10nm.c
> new file mode 100644
> index 0000000000..ed9f80734c
> --- /dev/null
> +++ b/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/StaticSkuDataDxe/PlatformDeviceDataSRP10nm.c
> @@ -0,0 +1,110 @@
> +/** @file
> +
> +  @copyright
> +  Copyright 2017 - 2018 Intel Corporation. <BR>
> +
> +  SPDX-License-Identifier: BSD-2-Clause-Patent
> +**/
> +
> +#include <PlatPirqData.h>
> +#include <PlatDevData.h>
> +#include <IndustryStandard/LegacyBiosMpTable.h>
> +
> +#ifndef V_INTEL_VID
> +#define V_INTEL_VID               0x8086
> +#endif // #ifndef V_INTEL_VID
> +
> +//
> +// Describes Local APICs' connections.
> +//
> +STATIC DEVICE_DATA_HW_LOCAL_INT      DeviceDataHwLocalInt1[] = {
> +  {
> +    {{0},{{0xFF,0},{0xFF,0},{0xFF,0}}},
> +    0x00,
> +    0xff,
> +    0x00,
> +    EfiLegacyMpTableEntryLocalIntTypeExtInt,
> +    EfiLegacyMpTableEntryLocalIntFlagsPolaritySpec,
> +    EfiLegacyMpTableEntryLocalIntFlagsTriggerSpec
> +  },
> +  {
> +    {{0},{{0xFF,0},{0xFF,0},{0xFF,0}}},
> +    0x00,
> +    0xff,
> +    0x01,
> +    EfiLegacyMpTableEntryLocalIntTypeInt,
> +    EfiLegacyMpTableEntryLocalIntFlagsPolaritySpec,
> +    EfiLegacyMpTableEntryLocalIntFlagsTriggerSpec
> +  },
> +};
> +
> +//
> +// Describes system's address space mapping, specific to the system.
> +//
> +STATIC DEVICE_DATA_HW_ADDR_SPACE_MAPPING DeviceDataHwAddrSpace1[] = {
> +  //
> +  // Legacy IO addresses.
> +  //
> +  { {0}, EfiLegacyMpTableEntryExtSysAddrSpaceMappingIo,       0x0000,     0x1000    },
> +};
> +
> +//
> +// IRQ priority
> +//
> +STATIC EFI_LEGACY_IRQ_PRIORITY_TABLE_ENTRY  IrqPriorityTable1[] = {
> +  {11, 0},
> +  {10, 0},
> +  {9,  0},
> +  {5,  0},
> +  {0,  0},
> +  {0,  0},
> +  {0,  0}
> +};
> +
> +//
> +// Note : UpdateBusNumbers updates the bus numeber
> +//
> +STATIC EFI_LEGACY_PIRQ_TABLE  PirqTableHead1 [] = {
> +  {
> +    {
> +      EFI_PIRQ_TABLE_SIGNATURE,
> +      00,
> +      01,
> +      0000,
> +      00,
> +      00,
> +      0000,
> +      V_INTEL_VID,
> +      30,
> +      00000000,
> +      {00,
> +      00,
> +      00,
> +      00,
> +      00,
> +      00,
> +      00,
> +      00,
> +      00,
> +      00,
> +      00},
> +      00
> +    }
> +  }
> +};
> +
> +//
> +// Instantiation of the system device data.
> +//
> +DEVICE_DATA           mDeviceDataPlatformSRP10nm = {
> +  DeviceDataHwLocalInt1,   sizeof (DeviceDataHwLocalInt1) / sizeof (DeviceDataHwLocalInt1[0]),
> +  DeviceDataHwAddrSpace1,  sizeof (DeviceDataHwAddrSpace1)/ sizeof (DeviceDataHwAddrSpace1[0])
> +};
> +
> +//
> +// Instantiation of platform PIRQ data.
> +//
> +PLATFORM_PIRQ_DATA    mPlatformPirqDataPlatformSRP10nm = {
> +  IrqPriorityTable1,    sizeof(IrqPriorityTable1) / sizeof(IrqPriorityTable1[0]),
> +  PirqTableHead1,       sizeof(PirqTableHead1) / sizeof(PirqTableHead1[0])
> +};
> diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/StaticSkuDataDxe/Readme.md b/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/StaticSkuDataDxe/Readme.md
> new file mode 100644
> index 0000000000..2138810db4
> --- /dev/null
> +++ b/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/StaticSkuDataDxe/Readme.md
> @@ -0,0 +1,19 @@
> +# **Generating ACPI AML Offset table**
> +
> +The StaticSkuDataDxe driver includes AmlOffsetTable.c which contains the AML offset table.  This Readme captures the build process for this file.
> +
> +edk2-platforms/Platform/Intel/WhitleyOpenBoardPkg/WilsonCityRvp/build_board.py drives the build since ACPI tables are expected to be board specific.
> +
> +The AmlOffsetTable.c file is generated in two key steps:
> +1. Generate the *Dsdt*.offsets.h where *Dsdt* is the DSDT ASL file name specific for this build. For WilsonCityRvp:
> +   * The DSDT is WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/EPRPPlatform10nm.asl
> +   * The generated file is Build/WhitleyOpenBoardPkg/DEBUG_VS2015x86/X64/WhitleyOpenBoardPkg/WilsonCityRvp/AmlOffsets/AmlOffsets/OUTPUT/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/EPRPPlatform10nm.offset.h
> +   * These are customized in the build_config.cfg file
> +2. Generat the AmlOffsetTable.c using the AmlGenOffset.py script from the MinPlatformPkg. For WilsonCityRvp:

Typo here. "Generat" should be "Generate".

> +   * Script is at edk2-platforms/Platform/Intel/MinPlatformPkg/Tools/AmlGenOffset/AmlGenOffset.py
> +   * Input is Build/WhitleyOpenBoardPkg/DEBUG_VS2015x86/X64/WhitleyOpenBoardPkg/WilsonCityRvp/AmlOffsets/AmlOffsets/OUTPUT/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/EPRPPlatform10nm.offset.h
> +   * Output is edk2-platforms/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/StaticSkuDataDxe/AmlOffsetTable.c
> +
> +Common Issues:
> +* The same iasl compiler version must be used to build the AML offset table and to build the DSDT.
> +* The Board/*AmlOffsets*.dsc file name, Board/*AmlOffsets* directory name, Board/AmlOffsets/*AmlOffsets*.inf file name, and the BASE_NAME in *AmlOffsets*.inf must all match exactly.
> diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/StaticSkuDataDxe/StaticSkuDataDxe.c b/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/StaticSkuDataDxe/StaticSkuDataDxe.c
> new file mode 100644
> index 0000000000..c4f0102f59
> --- /dev/null
> +++ b/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/StaticSkuDataDxe/StaticSkuDataDxe.c
> @@ -0,0 +1,60 @@
> +/** @file
> +  UBA static sku data update dxe driver.
> +
> +  @copyright
> +  Copyright 2013 - 2014 Intel Corporation. <BR>
> +
> +  SPDX-License-Identifier: BSD-2-Clause-Patent
> +**/
> +
> +#include "StaticSkuDataDxe.h"
> +
> +/**
> +  The Driver Entry Point.
> +
> +  The function is the driver Entry point.
> +
> +  @param ImageHandle   A handle for the image that is initializing this driver
> +  @param SystemTable   A pointer to the EFI system table
> +
> +  @retval EFI_SUCCESS:              Driver initialized successfully
> +  @retval EFI_LOAD_ERROR:           Failed to Initialize or has been loaded
> +  @retval EFI_OUT_OF_RESOURCES      Could not allocate needed resources
> +
> +**/
> +EFI_STATUS
> +EFIAPI
> +StaticSkuConfigDataDxeEntry (
> +  IN EFI_HANDLE                            ImageHandle,
> +  IN EFI_SYSTEM_TABLE                      *SystemTable
> +)
> +{
> +  EFI_STATUS                              Status;
> +  UBA_CONFIG_DATABASE_PROTOCOL      *UbaConfigProtocol = NULL;
> +
> +  Status = gBS->LocateProtocol (
> +                  &gUbaConfigDatabaseProtocolGuid,
> +                  NULL,
> +                  &UbaConfigProtocol
> +                  );
> +  if (EFI_ERROR(Status)) {
> +    return Status;
> +  }
> +
> +  Status = InstallMpTableData (UbaConfigProtocol);
> +  if (EFI_ERROR(Status)) {
> +    return Status;
> +  }
> +
> +  Status = InstallPirqData (UbaConfigProtocol);
> +  if (EFI_ERROR(Status)) {
> +    return Status;
> +  }
> +
> +  Status = InstallAcpiFixupTableData (UbaConfigProtocol);
> +  if (EFI_ERROR(Status)) {
> +    return Status;
> +  }
> +
> +  return Status;
> +}
> diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/StaticSkuDataDxe/StaticSkuDataDxe.h b/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/StaticSkuDataDxe/StaticSkuDataDxe.h
> new file mode 100644
> index 0000000000..e54191d4f7
> --- /dev/null
> +++ b/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/StaticSkuDataDxe/StaticSkuDataDxe.h
> @@ -0,0 +1,41 @@
> +/** @file
> +  UBA static sku data update dxe driver.
> +
> +  @copyright
> +  Copyright 2013 - 2022 Intel Corporation. <BR>
> +
> +  SPDX-License-Identifier: BSD-2-Clause-Patent
> +**/
> +
> +#ifndef _STATIC_SKU_DATA_DXE_H_
> +#define _STATIC_SKU_DATA_DXE_H_
> +
> +#include <Base.h>
> +#include <Uefi.h>
> +
> +#include <Library/UefiDriverEntryPoint.h>
> +#include <Library/UefiBootServicesTableLib.h>
> +#include <Library/DebugLib.h>
> +#include <Library/BaseLib.h>
> +#include <Library/BaseMemoryLib.h>
> +#include <Library/MemoryAllocationLib.h>
> +#include <Library/IoLib.h>
> +#include <UncoreCommonIncludes.h>
> +#include <Protocol/UbaCfgDb.h>
> +
> +EFI_STATUS
> +InstallMpTableData (
> +  IN UBA_CONFIG_DATABASE_PROTOCOL    *UbaConfigProtocol
> +);
> +
> +EFI_STATUS
> +InstallPirqData (
> +  IN UBA_CONFIG_DATABASE_PROTOCOL    *UbaConfigProtocol
> +);
> +
> +EFI_STATUS
> +InstallAcpiFixupTableData (
> +  IN UBA_CONFIG_DATABASE_PROTOCOL    *UbaConfigProtocol
> +);
> +
> +#endif // _STATIC_SKU_DATA_DXE_H_
> diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/StaticSkuDataDxe/StaticSkuDataDxe.inf b/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/StaticSkuDataDxe/StaticSkuDataDxe.inf
> new file mode 100644
> index 0000000000..97a1931c84
> --- /dev/null
> +++ b/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/StaticSkuDataDxe/StaticSkuDataDxe.inf
> @@ -0,0 +1,59 @@
> +## @file
> +# Static Board Data DXE Driver.
> +#
> +# @copyright
> +# Copyright 2018 - 2022 Intel Corporation. <BR>
> +#
> +# SPDX-License-Identifier: BSD-2-Clause-Patent
> +##
> +
> +[Defines]
> +  INF_VERSION                    = 0x00010005
> +  BASE_NAME                      = StaticSkuDataDxeBaseline
> +  FILE_GUID                      = 2C03C058-4305-7829-7E84-C7B3D6232F42
> +  MODULE_TYPE                    = DXE_DRIVER
> +  VERSION_STRING                 = 1.0
> +
> +  ENTRY_POINT                    = StaticSkuConfigDataDxeEntry
> +
> +#
> +# The following information is for reference only and not required by the build tools.
> +#
> +#  VALID_ARCHITECTURES           = x64
> +#
> +
> +[Sources]
> +  StaticSkuDataDxe.c
> +  StaticSkuDataDxe.h
> +  DeviceDataInstall.c
> +  PlatformDeviceDataSRP10nm.c
> +  AcpiStaticData.c
> +
> +[Packages]
> +  MdePkg/MdePkg.dec
> +  MdeModulePkg/MdeModulePkg.dec
> +  WhitleySiliconPkg/SiliconPkg.dec
> +  WhitleySiliconPkg/CpRcPkg.dec
> +  WhitleyOpenBoardPkg/PlatformPkg.dec
> +
> +[LibraryClasses]
> +  BaseLib
> +  BaseMemoryLib
> +  MemoryAllocationLib
> +  UefiBootServicesTableLib
> +  UefiDriverEntryPoint
> +  UefiLib
> +  DebugLib
> +  IoLib
> +  HobLib
> +
> +[Guids]
> +  gEfiPlatformInfoGuid
> +
> +[Protocols]
> +  gUbaConfigDatabaseProtocolGuid
> +
> +[Depex]
> +  gEfiPlatformTypeWilsonCitySMTProtocolGuid OR
> +  gEfiPlatformTypeWilsonCityRPProtocolGuid  OR
> +  gEfiPlatformTypeJunctionCityProtocolGuid
> diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaRpBoards.dsc b/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaRpBoards.dsc
> index f37093bccd..48b26de427 100644
> --- a/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaRpBoards.dsc
> +++ b/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaRpBoards.dsc
> @@ -30,6 +30,11 @@ $(RP_PKG)/Uba/BoardInit/Pei/BoardInitPei.inf {
>  }
>  
>  [Components.X64]
> +#
> +# Currently shared by all platforms
> +#
> +$(RP_PKG)/Uba/UbaMain/StaticSkuDataDxe/StaticSkuDataDxe.inf
> +
>  #
>  # Platform TypeWilsonCityRP
>  #
> -- 
> 2.27.0.windows.1

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [edk2-devel][edk2-platforms][PATCH V1 1/8] MinPlatformPkg/AmlGenOffset: Update for python 3
  2022-02-07 19:02 ` [edk2-devel][edk2-platforms][PATCH V1 1/8] MinPlatformPkg/AmlGenOffset: Update for python 3 Oram, Isaac W
@ 2022-02-09  3:20   ` Nate DeSimone
  0 siblings, 0 replies; 17+ messages in thread
From: Nate DeSimone @ 2022-02-09  3:20 UTC (permalink / raw)
  To: Oram, Isaac W, devel@edk2.groups.io; +Cc: Chiu, Chasel, Gao, Liming, Dong, Eric

Reviewed-by: Nate DeSimone <nathaniel.l.desimone@intel.com>

> -----Original Message-----
> From: Oram, Isaac W <isaac.w.oram@intel.com>
> Sent: Monday, February 7, 2022 11:03 AM
> To: devel@edk2.groups.io
> Cc: Chiu, Chasel <chasel.chiu@intel.com>; Desimone, Nathaniel L
> <nathaniel.l.desimone@intel.com>; Gao, Liming
> <gaoliming@byosoft.com.cn>; Dong, Eric <eric.dong@intel.com>
> Subject: [edk2-devel][edk2-platforms][PATCH V1 1/8]
> MinPlatformPkg/AmlGenOffset: Update for python 3
> 
> Update for library changes.
> Remove version.
> Changed to not open files as bytes.
> 
> Cc: Chasel Chiu <chasel.chiu@intel.com>
> Cc: Nate DeSimone <nathaniel.l.desimone@intel.com>
> Cc: Liming Gao <gaoliming@byosoft.com.cn>
> Cc: Eric Dong <eric.dong@intel.com>
> Signed-off-by: Isaac Oram <isaac.w.oram@intel.com>
> ---
>  Platform/Intel/MinPlatformPkg/Tools/AmlGenOffset/AmlGenOffset.py | 13
> ++++++-------
>  1 file changed, 6 insertions(+), 7 deletions(-)
> 
> diff --git
> a/Platform/Intel/MinPlatformPkg/Tools/AmlGenOffset/AmlGenOffset.py
> b/Platform/Intel/MinPlatformPkg/Tools/AmlGenOffset/AmlGenOffset.py
> index e13ca06471..4799eee1a9 100644
> --- a/Platform/Intel/MinPlatformPkg/Tools/AmlGenOffset/AmlGenOffset.py
> +++
> b/Platform/Intel/MinPlatformPkg/Tools/AmlGenOffset/AmlGenOffset.py
> @@ -32,16 +32,16 @@ if __name__ == '__main__':
>    #
>    # Create command line argument parser object
>    #
> -  parser = argparse.ArgumentParser(prog=__prog__, version=__version__,
> usage=__usage__, description=__copyright__, conflict_handler='resolve')
> +  parser = argparse.ArgumentParser(prog=__prog__, usage=__usage__,
> + description=__copyright__, conflict_handler='resolve')
>    group = parser.add_mutually_exclusive_group(required=True)
>    group.add_argument("-e", action="store_true", dest='Encode',
> help='encode file')
>    group.add_argument("-d", action="store_true", dest='Decode',
> help='decode file')
> -  parser.add_argument("-o", "--output", dest='OutputFile', type=str,
> metavar='filename', help="specify the output filename", required=True)
> +  parser.add_argument("-o", "--output", dest='OutputFileName',
> + type=str, metavar='filename', help="specify the output filename",
> + required=True)
>    parser.add_argument("-v", "--verbose", dest='Verbose',
> action="store_true", help="increase output messages")
>    parser.add_argument("-q", "--quiet", dest='Quiet', action="store_true",
> help="reduce output messages")
>    parser.add_argument("--debug", dest='Debug', type=int, metavar='[0-9]',
> choices=range(0,10), default=0, help="set debug level")
>    parser.add_argument("--aml_filter", dest='AmlFilterStr', type=str,
> help="specify the AML filter.")
> -  parser.add_argument(metavar="input_file", dest='InputFile',
> type=argparse.FileType('rb'), help="specify the input filename")
> +  parser.add_argument(metavar="input_file", dest='InputFile',
> + type=argparse.FileType('r'), help="specify the input filename")
> 
>    #
>    # Parse command line arguments
> @@ -49,11 +49,11 @@ if __name__ == '__main__':
>    args = parser.parse_args()
> 
>    if args.Encode:
> -    print 'Unsupported'
> +    print('Unsupported')
> 
>    if args.Decode:
> -    args.OutputFileName = args.OutputFile
> -    args.OutputFile = open(args.OutputFileName, 'wb')
> +    args.OutputFileName = os.path.normpath(args.OutputFileName)
> +    args.OutputFile = open(args.OutputFileName, 'w')
> 
>      AmlFilter = args.AmlFilterStr
>      filter_pattern = '|'.join(AmlFilter.split(' ')) @@ -69,4 +69,3 @@ if
> __name__ == '__main__':
>              if match_obj is not None:
>                  args.OutputFile.write(line)
>      args.OutputFile.close()
> -
> --
> 2.27.0.windows.1


^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [edk2-devel][edk2-platforms][PATCH V1 2/8] WhitleyOpenBoardPkg/AcpiTables: Add ACPI Table definitions
  2022-02-07 19:02 ` [edk2-devel][edk2-platforms][PATCH V1 2/8] WhitleyOpenBoardPkg/AcpiTables: Add ACPI Table definitions Oram, Isaac W
@ 2022-02-09  3:20   ` Nate DeSimone
  0 siblings, 0 replies; 17+ messages in thread
From: Nate DeSimone @ 2022-02-09  3:20 UTC (permalink / raw)
  To: Oram, Isaac W, devel@edk2.groups.io; +Cc: Chiu, Chasel

Reviewed-by: Nate DeSimone <nathaniel.l.desimone@intel.com>

> -----Original Message-----
> From: Oram, Isaac W <isaac.w.oram@intel.com>
> Sent: Monday, February 7, 2022 11:03 AM
> To: devel@edk2.groups.io
> Cc: Desimone, Nathaniel L <nathaniel.l.desimone@intel.com>; Chiu, Chasel
> <chasel.chiu@intel.com>
> Subject: [edk2-devel][edk2-platforms][PATCH V1 2/8]
> WhitleyOpenBoardPkg/AcpiTables: Add ACPI Table definitions
> 
> Header files for C structures used to build ACPI tables
> 
> Cc: Nate DeSimone <nathaniel.l.desimone@intel.com>
> Cc: Chasel Chiu <chasel.chiu@intel.com>
> Signed-off-by: Isaac Oram <isaac.w.oram@intel.com>
> ---
>  Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/Bdat.h                     |  91
> +++++++++
>  Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/Dbg2.h                     |  30
> +++
>  Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/Facs.h                     |  37
> ++++
>  Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/Fadt.h                     | 206
> ++++++++++++++++++++
>  Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/Hmat.h                     |  88
> +++++++++
>  Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/Hpet.h                     |  43
> ++++
>  Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/Mcfg.h                     |  58
> ++++++
>  Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/Migt.h                     |  57
> ++++++
>  Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/Msars.h                    |  56
> ++++++
>  Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/Mscis.h                    |  84
> ++++++++
>  Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/Msct.h                     |  58
> ++++++
>  Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/Nfit.h                     |  50
> +++++
>  Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/Pcat.h                     |  45
> +++++
>  Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/Pmtt.h                     | 120
> ++++++++++++
>  Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/Sllbis.h                   |  87
> +++++++++
>  Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/Spcr.h                     |  48
> +++++
>  Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/Spmi.h                     |  59
> ++++++
> 
> Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/WatchdogDescriptionTa
> ble.h |  82 ++++++++
>  Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/Wddt.h                     |  53
> +++++
>  Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/Wsmt.h                     |  67
> +++++++
>  Platform/Intel/WhitleyOpenBoardPkg/PlatformPkg.dec                         |   7 +-
>  Silicon/Intel/WhitleySiliconPkg/Include/UncoreCommonIncludes.h             |
> 8 +
>  22 files changed, 1430 insertions(+), 4 deletions(-)
> 
> diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/Bdat.h
> b/Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/Bdat.h
> new file mode 100644
> index 0000000000..0fb913a6a8
> --- /dev/null
> +++ b/Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/Bdat.h
> @@ -0,0 +1,91 @@
> +/** @file
> +  This file describes the contents of the BDAT ACPI.
> +
> +  @copyright
> +  Copyright 1999 - 2019 Intel Corporation. <BR>
> +
> +  SPDX-License-Identifier: BSD-2-Clause-Patent
> +**/
> +
> +#ifndef _BDAT_H_
> +#define _BDAT_H_
> +
> +//
> +// Statements that include other files
> +//
> +#include <IndustryStandard/Acpi.h>
> +
> +//
> +// Ensure proper structure formats
> +//
> +#pragma pack(1)
> +
> +#define EFI_BDAT_TABLE_SIGNATURE          SIGNATURE_32('B','D','A','T')
> +
> +#define BDAT_PRIMARY_VER    0x0004
> +#define BDAT_SECONDARY_VER  0x0000
> +
> +typedef struct {
> +  UINT8   BiosDataSignature[8]; // "BDATHEAD"
> +  UINT32  BiosDataStructSize;   // sizeof BDAT_STRUCTURE + sizeof
> BDAT_MEMORY_DATA_STRUCTURE + sizeof BDAT_RMT_STRUCTURE
> +  UINT16  Crc16;                // 16-bit CRC of BDAT_STRUCTURE (calculated with 0
> in this field)
> +  UINT16  Reserved;
> +  UINT16  PrimaryVersion;       // Primary version
> +  UINT16  SecondaryVersion;     // Secondary version
> +  UINT32  OemOffset;            // Optional offset to OEM-defined structure
> +  UINT32  Reserved1;
> +  UINT32  Reserved2;
> +} BDAT_HEADER_STRUCTURE;
> +
> +typedef struct bdatSchemaList {
> +  UINT16                       SchemaListLength; //Number of Schemas present
> +  UINT16                       Reserved;
> +  UINT16                       Year;
> +  UINT8                        Month;
> +  UINT8                        Day;
> +  UINT8                        Hour;
> +  UINT8                        Minute;
> +  UINT8                        Second;
> +  UINT8                        Reserved1;
> +  //
> +  // This is a dynamic region, where Schema list address is filled out.
> +  // Each schema location is 32 bits long and complies with BDAT 4.0 version.
> +  //
> +} BDAT_SCHEMA_LIST_STRUCTURE;
> +
> +//BDAT Header Struct which contains information all exisitng BDAT Schemas
> +typedef struct bdatStruct {
> +  BDAT_HEADER_STRUCTURE        BdatHeader;
> +  BDAT_SCHEMA_LIST_STRUCTURE   BdatSchemas;
> +} BDAT_STRUCTURE;
> +
> +//
> +// BIOS Data ACPI structure
> +//
> +typedef struct {
> +
> +  EFI_ACPI_DESCRIPTION_HEADER             Header;
> +  EFI_ACPI_6_2_GENERIC_ADDRESS_STRUCTURE  BdatGas;
> +
> +} EFI_BDAT_ACPI_DESCRIPTION_TABLE;
> +
> +//
> +// BIOS Data Parameter Region Generic Address
> +// Information
> +//
> +#define EFI_BDAT_ACPI_POINTER             0x0
> +
> +#define ___INTERNAL_CONVERT_TO_STRING___(a) #a
> +#define CONVERT_TO_STRING(a)
> ___INTERNAL_CONVERT_TO_STRING___(a)
> +
> +//
> +// This is copied from Include\Acpi.h
> +//
> +#define CREATOR_ID_INTEL 0x4C544E49  //"LTNI""INTL"(Intel)
> +#define CREATOR_REV_INTEL 0x20090903
> +
> +#define EFI_ACPI_TABLE_VERSION_ALL
> (EFI_ACPI_TABLE_VERSION_1_0B|EFI_ACPI_TABLE_VERSION_2_0|EFI_ACPI
> _TABLE_VERSION_3_0)
> +
> +#pragma pack()
> +
> +#endif
> diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/Dbg2.h
> b/Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/Dbg2.h
> new file mode 100644
> index 0000000000..cfaa9247d8
> --- /dev/null
> +++ b/Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/Dbg2.h
> @@ -0,0 +1,30 @@
> +/** @file
> +
> +  @copyright
> +  Copyright 2019 Intel Corporation. <BR>
> +
> +  SPDX-License-Identifier: BSD-2-Clause-Patent
> +**/
> +
> +#ifndef _DBG2_H_
> +#define _DBG2_H_
> +
> +//
> +// Statements that include other files
> +//
> +#include <IndustryStandard/DebugPort2Table.h>
> +
> +#pragma pack(1)
> +typedef
> +struct {
> +  EFI_ACPI_DEBUG_PORT_2_DESCRIPTION_TABLE       Table;
> +  EFI_ACPI_DBG2_DEBUG_DEVICE_INFORMATION_STRUCT Entry;
> +  EFI_ACPI_6_2_GENERIC_ADDRESS_STRUCTURE        BaseAdressRegister;
> +  UINT32                                        AddressSize;
> +  CHAR8                                         NamespaceString[2];
> +
> +} DBG2_DEBUG_TABLE;
> +#pragma pack()
> +
> +
> +#endif  //_DBG2_H_
> diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/Facs.h
> b/Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/Facs.h
> new file mode 100644
> index 0000000000..56e32c41f5
> --- /dev/null
> +++ b/Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/Facs.h
> @@ -0,0 +1,37 @@
> +/** @file
> +  This file describes the contents of the ACPI Firmware ACPI Control
> +  Structure (FACS).  Some additional ACPI values are defined in Acpi1_0.h
> and
> +  Acpi2_0.h
> +  All changes to the FACS contents should be done in this file.
> +
> +  @copyright
> +  Copyright 1996 - 2015 Intel Corporation. <BR>
> +
> +  SPDX-License-Identifier: BSD-2-Clause-Patent
> +**/
> +
> +#ifndef _FACS_H
> +#define _FACS_H
> +
> +//
> +// Statements that include other files
> +//
> +#include <IndustryStandard/Acpi.h>
> +
> +//
> +// FACS Definitions
> +//
> +#define EFI_ACPI_FIRMWARE_WAKING_VECTOR 0x00000000
> +#define EFI_ACPI_GLOBAL_LOCK            0x00000000
> +
> +//
> +// Firmware Control Structure Feature Flags are defined in AcpiX.0.h
> +//
> +#define EFI_ACPI_FIRMWARE_CONTROL_STRUCTURE_FLAGS 0x00000000
> +
> +#define EFI_ACPI_X_FIRMWARE_WAKING_VECTOR
> 0x0000000000000000
> +
> +#define EFI_ACPI_OSPM_FLAGS                       0x00000000
> +
> +
> +#endif
> diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/Fadt.h
> b/Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/Fadt.h
> new file mode 100644
> index 0000000000..004aac350d
> --- /dev/null
> +++ b/Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/Fadt.h
> @@ -0,0 +1,206 @@
> +/** @file
> +  This file describes the contents of the ACPI Fixed ACPI Description Table
> +  FADT).  Some additional ACPI values are defined in Acpi1_0.h and
> Acpi2_0.h.
> +  All changes to the FADT contents should be done in this file.
> +
> +  @copyright
> +  Copyright 1996 - 2020 Intel Corporation. <BR>
> +
> +  SPDX-License-Identifier: BSD-2-Clause-Patent
> +**/
> +
> +#ifndef _FADT_H_
> +#define _FADT_H_
> +
> +//
> +// Statements that include other files
> +//
> +#include <IndustryStandard/Acpi.h>
> +#include "Platform.h"
> +#include <Library/PcdLib.h>
> +
> +//
> +// FADT Definitions
> +//
> +#define EFI_ACPI_OEM_FADT_REVISION  0x00000000
> +//
> +// For ACPI 1.0 supprt
> +// Harwich sets this to #define EFI_ACPI_INT_MODEL 0x01
> +//
> +
> +/*
> +INT_MODEL Field
> +The FADT defines the fixed ACPI information that is needed by the
> operating system as
> +defined in section 5.2.5 of the ACPI 1.0 specification. Currently, this table
> provides a field
> +for INT_MODEL, which was intended to be used to report the interrupt
> mode of the machine.
> +This field is ignored by the Microsoft?Windows?2000 and later operating
> system because the
> +Microsoft Windows 98 operating system only supports programmable
> interrupt controller (PIC) mode.
> +This forces system manufacturers (OEMs) who want to support Windows 98
> to enter a "0" in the INT_MODEL field.
> +This would then preclude using multiple processors on Windows 2000 and
> later versions.
> +Because the INT_MODEL field in the FADT cannot be dynamically updated
> while the machine is running,
> +it cannot be used to report the interrupt mode, and therefore it is ignored
> by Windows 98,
> +and Windows 2000 and later versions.
> +http://www.microsoft.com/whdc/system/CEC/ACPI-MP.mspx
> +For Watson Creek we set this to 0 and then dynamically update this to 1 in
> the DSDT tables _PIC method and GPIC field.
> +*/
> +#define EFI_ACPI_INT_MODEL            0x0
> +
> +#define EFI_ACPI_PREFERRED_PM_PROFILE 0x04
> +
> +#define EFI_ACPI_SCI_INT              0x0009
> +#define EFI_ACPI_SMI_CMD              0x0
> +
> +#define EFI_ACPI_ACPI_ENABLE          0x00
> +#define EFI_ACPI_ACPI_DISABLE         0x00
> +#define EFI_ACPI_S4_BIOS_REQ          0x00
> +#define EFI_ACPI_CST_CNT              0x00
> +
> +#define EFI_ACPI_PSTATE_CNT           0x00
> +#define EFI_ACPI_GPE1_BASE            (EFI_ACPI_GPE1_BLK_BIT_WIDTH / 2)
> +#define EFI_ACPI_P_LVL2_LAT           0x0065
> +#define EFI_ACPI_P_LVL3_LAT           0x03E9
> +//
> +// #define EFI_ACPI_FLUSH_SIZE           0x0400
> +//
> +#define EFI_ACPI_FLUSH_SIZE 0x0000
> +//
> +// #define EFI_ACPI_FLUSH_STRIDE         0x0010
> +//
> +#define EFI_ACPI_FLUSH_STRIDE 0x0000
> +#define EFI_ACPI_DUTY_OFFSET  0x01
> +//
> +// #define EFI_ACPI_DUTY_OFFSET          0x00
> +//
> +#define EFI_ACPI_DUTY_WIDTH 0x00
> +
> +#define EFI_ACPI_DAY_ALRM   0x0D
> +#define EFI_ACPI_MON_ALRM   0x00
> +#define EFI_ACPI_CENTURY    0x32
> +
> +//
> +// IA-PC Boot Architecture Flags, see ACPI 2.0 table specification and
> Acpi6_2.h
> +// No legacy KBC and legcay devices other reported in ASL code
> +//
> +// #define EFI_ACPI_IAPC_BOOT_ARCH (EFI_ACPI_6_2_LEGACY_DEVICES |
> EFI_ACPI_6_2_8042)
> +//
> +//#define EFI_ACPI_IAPC_BOOT_ARCH EFI_ACPI_6_2_8042
> +#define EFI_ACPI_OS_ASPM_DISABLE        (1 << 4)
> +
> +#define EFI_ACPI_IAPC_BOOT_ARCH         EFI_ACPI_6_2_8042 |
> EFI_ACPI_OS_ASPM_DISABLE
> +
> +//
> +// Fixed Feature Flags, see ACPI 6.2 table specification and Acpi6_2.h
> +//
> +#define EFI_ACPI_FIXED_FEATURE_FLAGS
> (EFI_ACPI_6_2_RESET_REG_SUP | \
> +                                      EFI_ACPI_6_2_RTC_S4 | \
> +                                      EFI_ACPI_6_2_SLP_BUTTON | \
> +                                      EFI_ACPI_6_2_WBINVD | \
> +                                      EFI_ACPI_6_2_PROC_C1 \
> +          )
> +
> +//
> +// PM1A Event Register Block Generic Address Information
> +//
> +#define EFI_ACPI_PM1A_EVT_BLK_ADDRESS_SPACE_ID
> EFI_ACPI_6_2_SYSTEM_IO
> +#define EFI_ACPI_PM1A_EVT_BLK_BIT_WIDTH         0x20
> +#define EFI_ACPI_PM1A_EVT_BLK_BIT_OFFSET        0x00
> +#define EFI_ACPI_PM1A_EVT_BLK_ADDRESS           (FixedPcdGet32
> (PcdEfiAcpiPm1aEvtBlkAddress))
> +
> +//
> +// PM1B Event Register Block Generic Address Information
> +//
> +#define EFI_ACPI_PM1B_EVT_BLK_ADDRESS_SPACE_ID
> EFI_ACPI_6_2_SYSTEM_IO
> +#define EFI_ACPI_PM1B_EVT_BLK_BIT_WIDTH         0x00
> +#define EFI_ACPI_PM1B_EVT_BLK_BIT_OFFSET        0x00
> +#define EFI_ACPI_PM1B_EVT_BLK_ADDRESS           0x00000000
> +
> +//
> +// PM1A Control Register Block Generic Address Information
> +//
> +#define EFI_ACPI_PM1A_CNT_BLK_ADDRESS_SPACE_ID
> EFI_ACPI_6_2_SYSTEM_IO
> +#define EFI_ACPI_PM1A_CNT_BLK_BIT_WIDTH         0x10
> +#define EFI_ACPI_PM1A_CNT_BLK_BIT_OFFSET        0x00
> +#define EFI_ACPI_PM1A_CNT_BLK_ADDRESS
> (EFI_ACPI_PM1A_EVT_BLK_ADDRESS + 0x04)
> +
> +//
> +// PM1B Control Register Block Generic Address Information
> +//
> +#define EFI_ACPI_PM1B_CNT_BLK_ADDRESS_SPACE_ID
> EFI_ACPI_6_2_SYSTEM_IO
> +#define EFI_ACPI_PM1B_CNT_BLK_BIT_WIDTH         0x00
> +#define EFI_ACPI_PM1B_CNT_BLK_BIT_OFFSET        0x00
> +#define EFI_ACPI_PM1B_CNT_BLK_ADDRESS           0x00
> +
> +//
> +// PM2 Control Register Block Generic Address Information
> +//
> +#define EFI_ACPI_PM2_CNT_BLK_ADDRESS_SPACE_ID
> EFI_ACPI_6_2_SYSTEM_IO
> +#define EFI_ACPI_PM2_CNT_BLK_BIT_WIDTH        0x08
> +#define EFI_ACPI_PM2_CNT_BLK_BIT_OFFSET       0x00
> +#define EFI_ACPI_PM2_CNT_BLK_ADDRESS
> (EFI_ACPI_PM1A_EVT_BLK_ADDRESS + 0x50)
> +
> +//
> +// Power Management Timer Control Register Block Generic Address
> +// Information
> +//
> +#define EFI_ACPI_PM_TMR_BLK_ADDRESS_SPACE_ID
> EFI_ACPI_6_2_SYSTEM_IO
> +#define EFI_ACPI_PM_TMR_BLK_BIT_WIDTH         0x20
> +#define EFI_ACPI_PM_TMR_BLK_BIT_OFFSET        0x00
> +#define EFI_ACPI_PM_TMR_BLK_ADDRESS
> (EFI_ACPI_PM1A_EVT_BLK_ADDRESS + 0x08)
> +
> +//
> +// General Purpose Event 0 Register Block Generic Address
> +// Information
> +//
> +#define EFI_ACPI_GPE0_BLK_ADDRESS_SPACE_ID
> EFI_ACPI_6_2_SYSTEM_IO
> +#define EFI_ACPI_GPE0_BLK_BIT_WIDTH         0x100  // size of
> R_PCH_ACPI_GPE0_STS_127_96 + R_PCH_ACPI_GPE0_EN_127_96 (2*0x80 =
> 0x100)
> +#define EFI_ACPI_GPE0_BLK_BIT_OFFSET        0x00
> +#define EFI_ACPI_GPE0_BLK_ADDRESS
> (EFI_ACPI_PM1A_EVT_BLK_ADDRESS + 0x80)
> +
> +//
> +// General Purpose Event 1 Register Block Generic Address
> +// Information
> +//
> +#define EFI_ACPI_GPE1_BLK_ADDRESS_SPACE_ID
> EFI_ACPI_6_2_SYSTEM_IO
> +#define EFI_ACPI_GPE1_BLK_BIT_WIDTH         0x0
> +#define EFI_ACPI_GPE1_BLK_BIT_OFFSET        0x0
> +#define EFI_ACPI_GPE1_BLK_ADDRESS           0x0
> +//
> +// Reset Register Generic Address Information
> +//
> +#define EFI_ACPI_RESET_REG_ADDRESS_SPACE_ID
> EFI_ACPI_6_2_SYSTEM_IO
> +#define EFI_ACPI_RESET_REG_BIT_WIDTH        0x08
> +#define EFI_ACPI_RESET_REG_BIT_OFFSET       0x00
> +#define EFI_ACPI_RESET_REG_ADDRESS          0x00000CF9
> +#define EFI_ACPI_RESET_VALUE                0x06
> +
> +//
> +// Number of bytes decoded by PM1 event blocks (a and b)
> +//
> +#define EFI_ACPI_PM1_EVT_LEN  ((EFI_ACPI_PM1A_EVT_BLK_BIT_WIDTH
> + EFI_ACPI_PM1B_EVT_BLK_BIT_WIDTH) / 8)
> +
> +//
> +// Number of bytes decoded by PM1 control blocks (a and b)
> +//
> +#define EFI_ACPI_PM1_CNT_LEN  ((EFI_ACPI_PM1A_CNT_BLK_BIT_WIDTH
> + EFI_ACPI_PM1B_CNT_BLK_BIT_WIDTH) / 8)
> +
> +//
> +// Number of bytes decoded by PM2 control block
> +//
> +#define EFI_ACPI_PM2_CNT_LEN  (EFI_ACPI_PM2_CNT_BLK_BIT_WIDTH /
> 8)
> +
> +//
> +// Number of bytes decoded by PM timer block
> +//
> +#define EFI_ACPI_PM_TMR_LEN (EFI_ACPI_PM_TMR_BLK_BIT_WIDTH / 8)
> +
> +//
> +// Number of bytes decoded by GPE0 block
> +//
> +#define EFI_ACPI_GPE0_BLK_LEN (EFI_ACPI_GPE0_BLK_BIT_WIDTH / 8)
> +
> +//
> +// Number of bytes decoded by GPE1 block
> +//
> +#define EFI_ACPI_GPE1_BLK_LEN (EFI_ACPI_GPE1_BLK_BIT_WIDTH / 8)
> +
> +#endif
> diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/Hmat.h
> b/Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/Hmat.h
> new file mode 100644
> index 0000000000..ad6684acce
> --- /dev/null
> +++ b/Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/Hmat.h
> @@ -0,0 +1,88 @@
> +/** @file
> +
> +  @copyright
> +  Copyright 2016 - 2020 Intel Corporation. <BR>
> +
> +  SPDX-License-Identifier: BSD-2-Clause-Patent
> +**/
> +
> +#ifndef _HMAT_HMAT_H_
> +#define _HMAT_HMAT_H_
> +
> +#include <IndustryStandard/Acpi.h>
> +#include <UncoreCommonIncludes.h>
> +#include "Platform.h"
> +#include "Msars.h"
> +#include "Sllbis.h"
> +#include "Mscis.h"
> +
> +#define
> EFI_ACPI_HETEROGENEOUS_MEMORY_ATTRIBUTE_TABLE_REVISION 0x01
> +#define EFI_ACPI_OEM_HMAT_REVISION  0x00000001
> +
> +#define EFI_HETEROGENEOUS_MEMORY_ATTRIBUTE_TABLE_SIGNATURE
> SIGNATURE_32('H', 'M', 'A', 'T')
> +#define MEMORY_SUBSYSTEM_ADDRESS_RANGE_STRUCTURE_TYPE 0
> +#define
> SYSTEM_LOCALITY_LATENCY_BANDWIDTH_INFORMATION_STRUCTURE_TY
> PE 1
> +#define MEMORY_SIDE_CACHE_INFORMATION_STRUCTURE_TYPE 2
> +
> +#define EFI_ACPI_HMAT_MSARS_COUNT  (MC_MAX_NODE *
> MAX_CRS_ENTRIES_PER_NODE)
> +#define EFI_ACPI_HMAT_LBIS_COUNT
> (EFI_ACPI_HMAT_MAX_SLLBIS_DATA_TYPES *
> MAX_HMAT_MEMORY_HIERACHY_LEVELS)
> +#define EFI_ACPI_HMAT_MSCIS_COUNT  (MC_MAX_NODE *
> MAX_CRS_ENTRIES_PER_NODE)
> +
> +
> +#define HMAT_BW_BASE_UNIT      1024 // 1024 MB/S
> +#define HMAT_LATENCY_BASE_UNIT 1    // 1ns
> +
> +#define HBM_4_NODES_CASE  4
> +#define HBM_2_NODES_CASE  2
> +#define HBM_1_NODE_CASE   1
> +
> +//
> +// In HBM as Cache mode, Cache Flags are only for Last Level of Cache (Flags
> = 1), and 1st Level of Cache (Flags = 2).
> +// So Flag = 0 should be skipped.
> +//
> +#define HMAT_HBM_CACHE_FLAG_OFFSET 1
> +
> +#pragma pack(1)
> +typedef enum {
> +  TypeFlatMemoryMode        = 1,
> +  TypeCacheMemoryMode       = 2,
> +  TypeHybridMemoryMode      = 3,
> +} LBIS_MEMORY_FLAGS_TYPE;
> +
> +typedef struct {
> +  UINT8   Valid;
> +  UINT32  ElementId;
> +  UINT64  MemMapIndexMap;
> +  UINT8   Cacheable;
> +  UINT64  MemorySideCacheSize;
> +  UINT16  NumSmbiosHandles;
> +  UINT16  SmbiosHandles[MAX_TYPE17_CACHE_DEVICES];
> +  UINT8   PhysicalSocketId;
> +} MEMORY_DOMAIN_LIST_INFO;
> +
> +typedef struct {
> +  UINT32                   ProcessorDomainNumber;
> +  UINT32                   MemoryDomainNumber;
> +  UINT16                   ProcessorDomainList
> [EFI_ACPI_HMAT_NUMBER_OF_PROCESSOR_DOMAINS];
> +  MEMORY_DOMAIN_LIST_INFO  MemoryDomainList
> [EFI_ACPI_HMAT_NUMBER_OF_MEMORY_DOMAINS];
> +  UINT8                    SncEnabled;
> +  UINT8                    SncNumOfCluster;
> +  UINT8                    VirtualNumaEnabled;
> +  UINT8                    VirtualNumOfCluster;
> +  UINT8                    ProcessorDomainSocketIdList
> [EFI_ACPI_HMAT_NUMBER_OF_PROCESSOR_DOMAINS];
> +} HMAT_PROXIMITY_DOMAIN_DATA_STRUCTURE;
> +
> +typedef struct {
> +  EFI_ACPI_DESCRIPTION_HEADER Header;
> +  UINT32 Reserved; // To make the structures 8 byte aligned
> +} EFI_ACPI_HETEROGENEOUS_MEMORY_ATTRIBUTE_TABLE_HEADER;
> +
> +typedef struct {
> +  EFI_ACPI_HETEROGENEOUS_MEMORY_ATTRIBUTE_TABLE_HEADER
> HmatHeader;
> +  MEMORY_SUBSYSTEM_ADDRESS_RANGE_STRUCTURE
> Msars[EFI_ACPI_HMAT_MSARS_COUNT];
> +  LATENCY_BANDWIDTH_INFO_STRUCTURE
> Lbis[EFI_ACPI_HMAT_LBIS_COUNT];
> +  MEMORY_SIDE_CACHE_INFORMATION_STRUCTURE
> MemSideCache[EFI_ACPI_HMAT_MSCIS_COUNT];
> +} EFI_ACPI_HETEROGENEOUS_MEMORY_ATTRIBUTE_TABLE;
> +#pragma pack()
> +
> +#endif /* _HMAT_H_ */
> diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/Hpet.h
> b/Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/Hpet.h
> new file mode 100644
> index 0000000000..a3b9ef256a
> --- /dev/null
> +++ b/Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/Hpet.h
> @@ -0,0 +1,43 @@
> +/** @file
> +  This file describes the contents of the ACPI High Precision Event Timer
> Description Table
> +  HPET).  Some additional ACPI values are defined in Acpi1_0.h, Acpi2_0.h,
> and Acpi3_0.h
> +  All changes to the HPET contents should be done in this file.
> +
> +  @copyright
> +  Copyright 1999 - 2019 Intel Corporation. <BR>
> +
> +  SPDX-License-Identifier: BSD-2-Clause-Patent
> +**/
> +
> +#ifndef _HPET_H_
> +#define _HPET_H_
> +
> +//
> +// Statements that include other files
> +//
> +#include <IndustryStandard/Acpi.h>
> +#include <IndustryStandard/HighPrecisionEventTimerTable.h>
> +
> +//
> +// HPET Definitions
> +//
> +#define EFI_ACPI_OEM_HPET_REVISION    0x00000001
> +
> +#define EFI_ACPI_EVENT_TIMER_BLOCK_ID 0x8086A701
> +
> +//
> +// Event Timer Block Base Address Information
> +//
> +#define EFI_ACPI_EVENT_TIMER_BLOCK_ADDRESS_SPACE_ID
> EFI_ACPI_6_2_SYSTEM_MEMORY
> +#define EFI_ACPI_EVENT_TIMER_BLOCK_BIT_WIDTH        0x00
> +#define EFI_ACPI_EVENT_TIMER_BLOCK_BIT_OFFSET       0x00
> +#define EFI_ACPI_EVENT_TIMER_ACCESS_SIZE            0x00
> +#define EFI_ACPI_EVENT_TIMER_BLOCK_ADDRESS
> 0x00000000FED00000
> +
> +#define EFI_ACPI_HPET_NUMBER                        0x00
> +
> +#define EFI_ACPI_MIN_CLOCK_TICK                     0x0080
> +
> +#define EFI_ACPI_HPET_ATTRIBUTES                    0x00
> +
> +#endif
> diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/Mcfg.h
> b/Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/Mcfg.h
> new file mode 100644
> index 0000000000..7277961baa
> --- /dev/null
> +++ b/Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/Mcfg.h
> @@ -0,0 +1,58 @@
> +/** @file
> +  ACPI Memory mapped configuration space base address Description Table
> +  implementation, based on PCI Firmware Specification Revision 3.0 final
> draft,
> +  downloadable at http://www.pcisig.com/home
> +
> +  @copyright
> +  Copyright 1999 - 2019 Intel Corporation. <BR>
> +
> +  SPDX-License-Identifier: BSD-2-Clause-Patent
> +**/
> +
> +#ifndef _MCFG_H_
> +#define _MCFG_H_
> +
> +//
> +// Statements that include other files
> +//
> +#include <IndustryStandard/Acpi.h>
> +#include
> <IndustryStandard/MemoryMappedConfigurationSpaceAccessTable.h>
> +#include "Platform.h"
> +//
> +// "MCFG" Static Resource Affinity Table
> +//
> +#define
> EFI_ACPI_6_2_MEMORY_MAPPED_CONFIGURATION_BASE_ADDRESS_TABL
> E_SIGNATURE 0x4746434D
> +
> +//
> +// MCFG Definitions, see specification for details.
> +//
> +#define EFI_ACPI_OEM_MCFG_REVISION  0x00000001
> +
> +//
> +// Define the number of each table type.
> +// This is where the table layout is modified.
> +//
> +#define
> EFI_ACPI_MEMORY_MAPPED_ENHANCED_CONFIGURATION_BASE_ADDRE
> SS_STRUCTURE_COUNT MAX_SOCKET
> +
> +//
> +// MCFG Table definition.  The table must be defined in a platform
> +// specific manner.
> +//
> +//
> +// Ensure proper structure formats
> +//
> +#pragma pack(1)
> +
> +typedef struct {
> +
> EFI_ACPI_MEMORY_MAPPED_CONFIGURATION_BASE_ADDRESS_TABLE_HE
> ADER        Header;
> +
> +#if
> EFI_ACPI_MEMORY_MAPPED_ENHANCED_CONFIGURATION_BASE_ADDRE
> SS_STRUCTURE_COUNT > 0
> +
> EFI_ACPI_MEMORY_MAPPED_ENHANCED_CONFIGURATION_SPACE_BASE_
> ADDRESS_ALLOCATION_STRUCTURE  Segment[
> +
> EFI_ACPI_MEMORY_MAPPED_ENHANCED_CONFIGURATION_BASE_ADDRE
> SS_STRUCTURE_COUNT];
> +#endif
> +
> +} EFI_ACPI_MEMORY_MAPPED_CONFIGURATION_BASE_ADDRESS_TABLE;
> +
> +#pragma pack()
> +
> +#endif // _MCFG_H_
> diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/Migt.h
> b/Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/Migt.h
> new file mode 100644
> index 0000000000..058ae67717
> --- /dev/null
> +++ b/Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/Migt.h
> @@ -0,0 +1,57 @@
> +/** @file
> +  This file describes the contents of the MIGT ACPI table.
> +
> +  @copyright
> +  Copyright 1999 - 2019 Intel Corporation. <BR>
> +
> +  SPDX-License-Identifier: BSD-2-Clause-Patent
> +**/
> +
> +#ifndef _MIGT_H_
> +#define _MIGT_H_
> +
> +//
> +// Statements that include other files
> +//
> +#include <IndustryStandard/Acpi.h>
> +
> +//
> +// MIGT ACPI structure
> +//
> +typedef struct {
> +
> +  EFI_ACPI_DESCRIPTION_HEADER             Header;
> +  // MIGT Specific Entries
> +  EFI_ACPI_6_2_GENERIC_ADDRESS_STRUCTURE  ControlRegister;
> +  UINT32                                  ControlRegisterValue;
> +  EFI_ACPI_6_2_GENERIC_ADDRESS_STRUCTURE  ActionRegion;
> +
> +} EFI_MIGT_ACPI_DESCRIPTION_TABLE;
> +
> +
> +//
> +// MIGT ACPI Definitions
> +//
> +#define MIGT_SMI_SERVICE_ID                       0xFD        // Door Bell
> +
> +#define EFI_MIGT_ACPI_TABLE_SIGNATURE
> SIGNATURE_32('M','I','G','T')
> +#define EFI_MIGT_ACPI_DESCRIPTION_TABLE_REVISION  0x01
> +#define EFI_MIGT_ACPI_OEM_REVISION                0x00000000
> +
> +//
> +// MIGT Control Register Generic Address Information
> +//
> +#define EFI_MIGT_CR_ACPI_ADDRESS_SPACE_ID
> EFI_ACPI_6_2_SYSTEM_IO
> +#define EFI_MIGT_CR_ACPI_REGISTER_BIT_WIDTH       0x8
> +#define EFI_MIGT_CR_ACPI_REGISTER_BIT_OFFSET      0x0
> +#define EFI_MIGT_CR_ACPI_SMI_ADDRESS              0xB2
> +
> +//
> +// MIGT Action Region Generic Address Information
> +//
> +#define EFI_MIGT_AR_ACPI_ADDRESS_SPACE_ID
> EFI_ACPI_6_2_SYSTEM_MEMORY
> +#define EFI_MIGT_AR_ACPI_REGISTER_BIT_WIDTH       64
> +#define EFI_MIGT_AR_ACPI_REGISTER_BIT_OFFSET      0x0
> +#define EFI_MIGT_AR_ACPI_MEMORY_ADDRESS           0x0
> +
> +#endif
> diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/Msars.h
> b/Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/Msars.h
> new file mode 100644
> index 0000000000..a088d66ea5
> --- /dev/null
> +++ b/Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/Msars.h
> @@ -0,0 +1,56 @@
> +/** @file
> +
> +  @copyright
> +  Copyright 2016 - 2018 Intel Corporation. <BR>
> +
> +  SPDX-License-Identifier: BSD-2-Clause-Patent
> +**/
> +
> +#ifndef _MSARS_H_
> +#define _MSARS_H_
> +
> +#include <Uefi/UefiBaseType.h>
> +
> +#pragma pack(1)
> +typedef struct {
> +  UINT16 ProcessorDomainValid:1;
> +  UINT16 MemoryDomainValid:1;
> +  UINT16 ReservationHint:1;
> +  UINT16 Reserved_15_3:13;
> +} MSARS_FLAGS_BITS;
> +
> +typedef union {
> +  UINT16 Value;
> +  MSARS_FLAGS_BITS Bits;
> +} MSARS_FLAGS;
> +
> +typedef struct {
> +  UINT16 Type;
> +  UINT16 Reserved_2_4;
> +  UINT32 Length;
> +  MSARS_FLAGS Flags;
> +  UINT16 Reserved_10_12;
> +  UINT32 ProcessorProximityDomain;
> +  UINT32 MemoryProximityDomain;
> +  UINT32 Reserved_20_24;
> +  UINT64 AddrBase; //System Physical Address Range Base
> +  UINT64 AddrLength; //System Physical Address Range Length
> +} MEMORY_SUBSYSTEM_ADDRESS_RANGE_STRUCTURE;
> +#pragma pack()
> +
> +// MSARS_INIT Macro
> +// Used to initialize MEMORY_SUBSYSTEM_ADDRESS_RANGE_STRUCTURE
> +#define MSARS_INIT() {                                   \
> +  (UINT16) MEMORY_SUBSYSTEM_ADDRESS_RANGE_STRUCTURE_TYPE,     \
> +  (UINT16) 0,       \
> +  (UINT32) sizeof(MEMORY_SUBSYSTEM_ADDRESS_RANGE_STRUCTURE),  \
> +  {(UINT16) 0},     \
> +  (UINT16) 0,   \
> +  (UINT32) 0,       \
> +  (UINT32) 0,       \
> +  (UINT32) 0,       \
> +  (UINT64) 0,       \
> +  (UINT64) 0,       \
> +  },
> +
> +#endif /* _MSARS_H_ */
> diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/Mscis.h
> b/Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/Mscis.h
> new file mode 100644
> index 0000000000..44d80910e2
> --- /dev/null
> +++ b/Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/Mscis.h
> @@ -0,0 +1,84 @@
> +/** @file
> +
> +  @copyright
> +  Copyright 2016 - 2018 Intel Corporation. <BR>
> +
> +  SPDX-License-Identifier: BSD-2-Clause-Patent
> +**/
> +
> +#ifndef _MSCIS_H_
> +#define _MSCIS_H_
> +
> +#include <Uefi/UefiBaseType.h>
> +
> +#define EFI_ACPI_HMAT_CACHE_LEVEL_NONE  0
> +#define EFI_ACPI_HMAT_ONE_LEVEL_CACHE   1
> +#define EFI_ACPI_HMAT_TWO_LEVEL_CACHE   2
> +#define EFI_ACPI_HMAT_THREE_LEVEL_CACHE 3
> +
> +#define EFI_ACPI_HMAT_CACHE_ASSOCIATIVITY_NONE                    0
> +#define EFI_ACPI_HMAT_CACHE_ASSOCIATIVITY_DIRECT_MAPPED           1
> +#define
> EFI_ACPI_HMAT_CACHE_ASSOCIATIVITY_COIMPLEX_CACHE_INDEXING 2
> +
> +#define EFI_ACPI_HMAT_WRITE_POLICY_NONE 0
> +#define EFI_ACPI_HMAT_WRITE_POLICY_WB   1
> +#define EFI_ACPI_HMAT_WRITE_POLICY_WT   2
> +
> +#define HBM_CACHE_LINE_SIZE       72
> +#define DDR4_CACHE_LINE_SIZE      64
> +
> +//
> +// MAX_CH    = MAX_IMC * MAX_MC_CH
> +// MAX_IMC   = Maximum memory controllers per socket
> +// MAX_MC_CH = Max number of channels per MC
> +// For each channel, 1 DDR can act as 2LM cache. This is the maximum
> number of cache devices per memory domain
> +//
> +#define MAX_TYPE17_CACHE_DEVICES  MAX_CH
> +
> +#pragma pack(1)
> +typedef struct {
> +  UINT32 TotalCacheLevels:4;
> +  UINT32 CacheLevel:4;
> +  UINT32 CacheAssociativity:4;
> +  UINT32 WritePolicy:4;
> +  UINT32 CacheLineSize:16;
> +} CACHE_ATTRIBUTES_BITS;
> +
> +typedef union {
> +  UINT32 Data;
> +  CACHE_ATTRIBUTES_BITS Bits;
> +} CACHE_ATTRIBUTES;
> +
> +typedef struct {
> +  UINT16 Type;
> +  UINT16 Reserved_2_4;
> +  UINT32 Length;
> +  UINT32 MemoryProximityDomain;
> +  UINT32 Reserved_12_16;
> +  UINT64 MemorySideCacheSize;
> +  CACHE_ATTRIBUTES CacheAttributes;
> +  UINT16 Reserved_28_30;
> +  UINT16 NumSmbiosHandles;
> +  UINT16 SmbiosHandles [MAX_TYPE17_CACHE_DEVICES];
> +} MEMORY_SIDE_CACHE_INFORMATION_STRUCTURE;
> +#pragma pack()
> +
> +// MSCIS_INIT Macro
> +// Used to initialize MEMORY_SIDE_CACHE_INFORMATION_STRUCTURE
> +#define MSCIS_INIT() {                                       \
> +  (UINT16) MEMORY_SIDE_CACHE_INFORMATION_STRUCTURE_TYPE,     \
> +  (UINT16) 0,   \
> +  (UINT32) sizeof(MEMORY_SIDE_CACHE_INFORMATION_STRUCTURE),  \
> +  (UINT32) 0,   \
> +  (UINT32) 0,   \
> +  (UINT64) 0,   \
> +  {(UINT32) 0},   \
> +  (UINT16) 0,   \
> +  (UINT16) 0,   \
> +  },
> +/*
> + SMBIOS handles not used for 2LM.  Will be added for HBM
> +  {(UINT16) 0}, \
> +  },
> +*/
> +#endif /* _MSCIS_H_ */
> diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/Msct.h
> b/Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/Msct.h
> new file mode 100644
> index 0000000000..31c6e0f580
> --- /dev/null
> +++ b/Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/Msct.h
> @@ -0,0 +1,58 @@
> +/** @file
> +  This file describes the contents of the ACPI Maximum System
> Characteristics Table (MSCT).
> +  Some additional ACPI values are defined in Acpi1_0.h, Acpi2_0.h, and
> Acpi3_0.h.
> +  All changes to the MSCT contents should be done in this file.
> +
> +  @copyright
> +  Copyright 2019 Intel Corporation. <BR>
> +
> +  SPDX-License-Identifier: BSD-2-Clause-Patent
> +**/
> +
> +#ifndef _MSCT_H_
> +#define _MSCT_H_
> +
> +//
> +// Statements that include other files
> +//
> +#include <IndustryStandard/Acpi.h>
> +#include <Platform.h>
> +#include <UncoreCommonIncludes.h>
> +
> +//
> +// MSCT Definitions, see specification for details.
> +//
> +#ifndef
> EFI_ACPI_6_2_MAXIMUM_SYSTEM_CHARACTERISTICS_TABLE_SIGNATURE
> +#define
> EFI_ACPI_6_2_MAXIMUM_SYSTEM_CHARACTERISTICS_TABLE_SIGNATURE
> 0x5443534D
> +#endif
> +#define
> EFI_ACPI_MAXIMUM_SYSTEM_CHARACTERISTICS_TABLE_REVISION
> 0x01
> +#define EFI_ACPI_OEM_MSCT_REVISION                                        0x00000001
> +#define
> EFI_ACPI_MAXIMUM_PROXIMITY_DOMAIN_INFORMATION_STRUCTURE_R
> EVISION  0x01
> +
> +
> +//
> +// MSCT Table definition
> +//
> +#pragma pack(1)
> +
> +typedef struct {
> +  UINT8   Revision;
> +  UINT8   Length;
> +  UINT32  ProxDomRangeLow;
> +  UINT32  ProxDomRangeHigh;
> +  UINT32  MaxProcessorCapacity;
> +  UINT64  MaxMemoryCapacity;
> +}
> EFI_ACPI_MAXIMUM_PROXIMITY_DOMAIN_INFORMATION_STRUCTURE;
> +
> +typedef struct {
> +  EFI_ACPI_DESCRIPTION_HEADER                              Header;
> +  UINT32                                                   OffsetProxDomInfo;
> +  UINT32                                                   MaxNumProxDom;
> +  UINT32                                                   MaxNumClockDom;
> +  UINT64                                                   MaxPhysicalAddress;
> +  EFI_ACPI_MAXIMUM_PROXIMITY_DOMAIN_INFORMATION_STRUCTURE
> ProxDomInfoStructure[MAX_SOCKET];
> +} EFI_ACPI_MAXIMUM_SYSTEM_CHARACTERISTICS_TABLE;
> +
> +#pragma pack()
> +
> +#endif  //_MSCT_H_
> diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/Nfit.h
> b/Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/Nfit.h
> new file mode 100644
> index 0000000000..5ea51b6d59
> --- /dev/null
> +++ b/Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/Nfit.h
> @@ -0,0 +1,50 @@
> +/** @file
> +
> +  @copyright
> +  Copyright 1999 - 2019 Intel Corporation. <BR>
> +
> +  SPDX-License-Identifier: BSD-2-Clause-Patent
> +**/
> +
> +//
> +// The version of NvDimm F/W Interface Table (Nfit) supported has been
> updated to ASWG-ECR-Draft4-RC6_93.doc
> +// This file contains definitions for Acpi side for the Nfit creation and
> publication of Nfit tables.
> +// A BIG NOTE: When ever the NVDIMM_FW_INTERFACE_TABLE defined
> either here or what is in Nfit.h of CrystalRidge Protocol driver
> +// changes, the same changes need to relect in both the files.
> +
> +#ifndef _NFIT_DEFS_H_
> +#define _NFIT_DEFS_H_
> +
> +#include <IndustryStandard/Acpi62.h>
> +
> +#define NVDIMM_FW_INTERFACE_TABLE_SIGNATURE
> EFI_ACPI_6_2_NVDIMM_FIRMWARE_INTERFACE_TABLE_STRUCTURE_SIGN
> ATURE
> +#define NVDIMM_FW_INTERFACE_TABLE_REVISION
> EFI_ACPI_6_2_NVDIMM_FIRMWARE_INTERFACE_TABLE_REVISION
> +
> +#define MAX_NFIT_SIZE                       0x18000
> +
> +
> +//
> +// NVDIMM Firmware Interface Table struct
> +// IMPORTANT NOTE: Num of various sub-table fields of the Nfit has been
> eliminated in the latest Nfit Spec (0.8k)
> +// And also since there is NO memory allocation scheme for Nfit (all globals),
> Adding a buffer NfitTables with the,
> +// max nfit size currently set to 4k. Will need to watch if we will ever
> overrun this buffer. It is expected that
> +// Nfit parser will need to parse the NfitTables field to understand the
> various other Nfit Tables in this buffer
> +// based on the Type and Length field of these tables.
> +//
> +#pragma pack(1)
> +typedef struct _NVDIMM_FW_INT_TBL {
> +  UINT32       Signature;                    // 'NFIT' should be the signature for this
> table
> +  UINT32       Length;                       // Length in bytes fir the entire table
> +  UINT8        Revision;                     // Revision # of this table, initial is '1'
> +  UINT8        Checksum;                     // Entire Table Checksum must sum to 0
> +  UINT8        OemID[6];                     // OemID
> +  UINT8        OemTblID[8];                  // Should be Manufacturer's Model #
> +  UINT32       OemRevision;                  // Oem Revision of for Supplied OEM
> Table ID
> +  UINT32       CreatorID;                    // Vendor ID of the utility that is creating
> this table
> +  UINT32       CreatorRev;                   // Revision of utility that is creating this
> table
> +  UINT32       Reserved;
> +  UINT8        NfitTables[MAX_NFIT_SIZE];    // See Description above
> (IMPORTANT).
> +} NVDIMM_FW_INTERFACE_TABLE;
> +#pragma pack()
> +
> +#endif  // _NFIT_DEFS_H_
> diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/Pcat.h
> b/Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/Pcat.h
> new file mode 100644
> index 0000000000..ceb0684f17
> --- /dev/null
> +++ b/Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/Pcat.h
> @@ -0,0 +1,45 @@
> +/** @file
> +  Pcat.h
> +
> +  @copyright
> +  Copyright 2014 Intel Corporation. <BR>
> +
> +  SPDX-License-Identifier: BSD-2-Clause-Patent
> +**/
> +
> +#ifndef _PCAT_DEFS_H_
> +#define _PCAT_DEFS_H_
> +
> +#include <Uefi/UefiBaseType.h>
> +
> +/// @brief PCAT Signature to put in table header
> +#define NVDIMM_PLATFORM_CONFIG_ATTRIBUTE_TABLE_SIGNATURE
> SIGNATURE_32('P', 'C', 'A', 'T')
> +
> +#define NVDIMM_PLATFORM_CONFIG_ATTRIBUTE_TABLE_REVISION
> 0x11
> +
> +#define MAX_PCAT_SIZE                                     0x200
> +
> +typedef struct {
> +  UINT32                      Signature;      // 'PCAT' should be the signature for this
> table
> +  UINT32                      Length;         // Length in bytes for the entire table
> +  UINT8                       Revision;       // Revision # of this table, initial is '1'
> +  UINT8                       Checksum;       // Entire Table Checksum must sum to 0
> +  UINT8                       OemID[6];       // OemID
> +  UINT8                       OemTblID[8];    // Should be Manufacturer's Model #
> +  UINT32                      OemRevision;    // Oem Revision of for Supplied OEM
> Table ID
> +  UINT32                      CreatorID;      // Vendor ID of the utility that is creating
> this table
> +  UINT32                      CreatorRev;     // Revision of utility that is creating this
> table
> +  UINT32                      Reserved;       // Alignement for size modulo 8 = 0
> +  UINT8                       PCATTables[MAX_PCAT_SIZE];
> +} NVDIMM_PLATFORM_CONFIG_ATTRIBUTE_TABLE,
> *PNVDIMM_PLATFORM_CONFIG_ATTRIBUTE_TABLE;
> +
> +/// @brief Layout of SSKU Attribute Extension Table header
> +typedef struct {
> +  UINT16       Type;                          // Type for Mgmt Info Struct, type should be
> 3
> +  UINT16       Length;                        // Length in Bytes for Entire SSKU Attribute
> Extension Table size.
> +  UINT16       Rsvd;
> +  UINT16       VendorID;                      // Vendor ID
> +  EFI_GUID     Guid;                          // Intel defined SSKU Attribute Extension
> Table. guid: F93032E5-B045-40ef-91C8-F02B06AD948D
> +} NVDIMM_SSKU_ATTR_EXT_TABLE, *PNVDIMM_SSKU_ATTR_EXT_TABLE;
> +
> +#endif //_PCAT_DEFS_H_
> diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/Pmtt.h
> b/Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/Pmtt.h
> new file mode 100644
> index 0000000000..923483f2da
> --- /dev/null
> +++ b/Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/Pmtt.h
> @@ -0,0 +1,120 @@
> +/** @file
> +
> +  @copyright
> +  Copyright 2016 - 2018 Intel Corporation. <BR>
> +
> +  SPDX-License-Identifier: BSD-2-Clause-Patent
> +**/
> +
> +#ifndef _ACPI_PMTT_H_
> +#define _ACPI_PMTT_H_
> +
> +//
> +// Includes
> +//
> +#include <IndustryStandard/Acpi.h>
> +#include <IndustryStandard/SmBios.h>
> +#include <Platform.h>
> +#include <UncoreCommonIncludes.h>
> +
> +//
> +// PMTT Definitions
> +//
> +#define ACPI_PMTT_TABLE_SIGNATURE     0x54544D50
> +#define ACPI_PMTT_TABLE_REVISION      0x02
> +#define ACPI_PMTT_OEM_REVISION        1
> +
> +#define PMTT_TOP_LEVEL_AGGREGATOR_DEVICE            0x0001
> +#define PMTT_PHYSICAL_ELEMENT_OF_TOPOLOGY           0x0002
> +#define PMTT_AEP_DIMM                               0x0004
> +
> +#define ACPI_TOP_LEVEL_SOCKET                         0x00
> +#define ACPI_TOP_LEVEL_IMC                            0x01
> +#define PHYSICAL_COMPONENT_IDENTIFIER_TYPE_DIMM       0x02
> +#define ACPI_TOP_LEVEL_VENDOR_SPECIFIC_DEVICE         0xFF
> +
> +// PMTT GUID variables
> +#define PMTT_TYPE_DIE_GUID { 0xA2555053, 0xCDE4, 0x40A5, {0x80, 0x76,
> 0x00, 0xE3, 0xAB, 0xA6, 0xCA, 0xA7} }
> +#define PMTT_TYPE_CHANNEL_GUID { 0x23BF9281, 0xE69c, 0x471F, {0xB2,
> 0x99, 0xB0, 0x98, 0x2B, 0x2F, 0x55, 0xF9} }
> +#define PMTT_TYPE_SLOT_GUID { 0xFDCB2a68, 0xC203, 0x4312, {0xB2,
> 0x91, 0xB8, 0xE8, 0x62, 0x86, 0xC2, 0xC1} }
> +
> +typedef struct {
> +  UINT8                                     Type;
> +  UINT8                                     Rsvd;
> +  UINT16                                    Length;
> +  UINT16                                    Flag;
> +  UINT16                                    Rsvd1;
> +  UINT32                                    NumOfMemoryDevices;
> +  UINT32                                    SmbiosHandle;
> +} ACPI_PMTT_DIMM_DEVICE;
> +
> +typedef struct {
> +  UINT8                                   Type;
> +  UINT8                                   Rsvd;
> +  UINT16                                  Length;
> +  UINT16                                  Flag;
> +  UINT16                                  Rsvd1;
> +  UINT32                                  NumOfMemoryDevices;
> +  GUID                                    TypeUuid;
> +  UINT16                                  SlotId;
> +  UINT16                                  Rsvd2;
> +  ACPI_PMTT_DIMM_DEVICE                   Dimm;
> +} ACPI_PMTT_SLOT_DEVICE;
> +
> +typedef struct {
> +  UINT8                                   Type;
> +  UINT8                                   Rsvd;
> +  UINT16                                  Length;
> +  UINT16                                  Flag;
> +  UINT16                                  Rsvd1;
> +  UINT32                                  NumOfMemoryDevices;
> +  GUID                                    TypeUuid;
> +  UINT16                                  ChannelId;
> +  UINT16                                  Rsvd2;
> +  ACPI_PMTT_SLOT_DEVICE                   Slot[MAX_DIMM];
> +} ACPI_PMTT_CHANNEL_DEVICE;
> +
> +typedef struct {
> +  UINT8                                     Type;
> +  UINT8                                     Rsvd;
> +  UINT16                                    Length;
> +  UINT16                                    Flag;
> +  UINT16                                    Rsvd1;
> +  UINT32                                    NumOfMemoryDevices;
> +  UINT16                                    ImcId;
> +  UINT16                                    Rsvd2;
> +  ACPI_PMTT_CHANNEL_DEVICE                  Channel[MAX_MC_CH];
> +} ACPI_PMTT_IMC_DEVICE;
> +
> +typedef struct {
> +  UINT8                                   Type;
> +  UINT8                                   Rsvd;
> +  UINT16                                  Length;
> +  UINT16                                  Flag;
> +  UINT16                                  Rsvd1;
> +  UINT32                                  NumOfMemoryDevices;
> +  GUID                                    TypeUuid;
> +  UINT16                                  DieId;
> +  UINT16                                  Rsvd2;
> +  ACPI_PMTT_IMC_DEVICE                    Imc[MAX_IMC];
> +} ACPI_PMTT_DIE_DEVICE;
> +
> +typedef struct {
> +  UINT8                                     Type;
> +  UINT8                                     Rsvd;
> +  UINT16                                    Length;
> +  UINT16                                    Flag;
> +  UINT16                                    Rsvd1;
> +  UINT32                                    NumOfMemoryDevices;
> +  UINT16                                    SckIdent;
> +  UINT16                                    Rsvd2;
> +  ACPI_PMTT_DIE_DEVICE                      Die[MAX_DIE];
> +} ACPI_PMTT_SOCKET_DEVICE;
> +
> +typedef struct {
> +  EFI_ACPI_DESCRIPTION_HEADER               Header;
> +  UINT32                                    NumOfMemoryDevices;
> +  ACPI_PMTT_SOCKET_DEVICE                   Socket[MAX_SOCKET];
> +} ACPI_PLATFORM_MEMORY_TOPOLOGY_TABLE;
> +
> +#endif // _ACPI_PMTT_H_
> diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/Sllbis.h
> b/Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/Sllbis.h
> new file mode 100644
> index 0000000000..c119a0f712
> --- /dev/null
> +++ b/Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/Sllbis.h
> @@ -0,0 +1,87 @@
> +/** @file
> +
> +  @copyright
> +  Copyright 2016 - 2017 Intel Corporation. <BR>
> +
> +  SPDX-License-Identifier: BSD-2-Clause-Patent
> +**/
> +
> +#ifndef _SLLBIS_H_
> +#define _SLLBIS_H_
> +
> +#include <UncoreCommonIncludes.h>
> +
> +#define EFI_ACPI_HMAT_NUMBER_OF_PROCESSOR_DOMAINS
> MC_MAX_NODE
> +#define EFI_ACPI_HMAT_NUMBER_OF_MEMORY_DOMAINS
> (MC_MAX_NODE * MAX_CRS_ENTRIES_PER_NODE)
> +
> +#define EFI_ACPI_HMAT_MEMORY_HIERACHY_MEMORY              0
> +#define EFI_ACPI_HMAT_MEMORY_HIERACHY_LAST_LEVEL_MEMORY   1
> +#define EFI_ACPI_HMAT_MEMORY_HIERACHY_FIRST_LEVEL_MEMORY  2
> +#define EFI_ACPI_HMAT_MEMORY_HIERACHY_SECOND_LEVEL_MEMORY
> 3
> +#define EFI_ACPI_HMAT_MEMORY_HIERACHY_THIRD_LEVEL_MEMORY  4
> +
> +
> +#define EFI_ACPI_HMAT_ACCESS_LATENCY           0
> +#define EFI_ACPI_HMAT_READ_LATENCY             1
> +#define EFI_ACPI_HMAT_WRITE_LATENCY            2
> +#define EFI_ACPI_HMAT_ACCESS_BANDWIDTH         3
> +#define EFI_ACPI_HMAT_READ_BANDWIDTH           4
> +#define EFI_ACPI_HMAT_WRITE_BANDWIDTH          5
> +
> +#define EFI_ACPI_HMAT_MAX_SLLBIS_DATA_TYPES    4
> +#define EFI_ACPI_HMAT_NUMBER_SLLBIS_DATA_TYPES 6
> +
> +#define EFI_ACPI_HMAT_ELEMENT_BASE_UNIT_VALUE 10
> +
> +#define MAX_HMAT_MEMORY_HIERACHY_LEVELS      3 // Flat, Cache, and
> Hybrid
> +#define HMAT_PERFORMANCE_UNIFORM_ACCESS      1
> +#define HMAT_PERFORMANCE_NONUNIFORM_ACCESS   0
> +
> +#define EFI_ACPI_HMAT_MEMORY_BW_LATENCY_ATTRIBUTE_LENGTH 4
> +#define EFI_ACPI_HMAT_MEMORY_BW_LATENCY_ATTRIBUTE_START_BIT
> 4
> +
> +
> +#pragma pack(1)
> +
> +typedef struct {
> +  UINT16 Type;
> +  UINT16 Reserved_2_4;
> +  UINT32 Length;
> +  UINT8  Flags;
> +  UINT8  DataType;
> +  UINT16 Reserved_10_12;
> +  UINT32 InitiatorProximityDomainsNumber;
> +  UINT32 TargetProximityDomainsNumber;
> +  UINT32 Reserved_20_24;
> +  UINT64 EntryBaseUnit;
> +  UINT32
> InitiatorProximityDomainList[EFI_ACPI_HMAT_NUMBER_OF_PROCESSOR_D
> OMAINS];
> +  UINT32
> TargetProximityDomainList[EFI_ACPI_HMAT_NUMBER_OF_MEMORY_DOM
> AINS];
> +  UINT16
> RelativeDistanceEntry[EFI_ACPI_HMAT_NUMBER_OF_PROCESSOR_DOMAI
> NS][EFI_ACPI_HMAT_NUMBER_OF_MEMORY_DOMAINS];
> +} LATENCY_BANDWIDTH_INFO_STRUCTURE;
> +#pragma pack()
> +
> +// LBIS Macros
> +// Used to initialize LATENCY_BANDWIDTH_INFO_STRUCTURE
> +#define LBIS_START() { \
> +  (UINT16)
> SYSTEM_LOCALITY_LATENCY_BANDWIDTH_INFORMATION_STRUCTURE_TY
> PE, \
> +  (UINT16) 0,         \
> +  (UINT32) sizeof(LATENCY_BANDWIDTH_INFO_STRUCTURE), \
> +  (UINT8)  0,         \
> +  (UINT8)  0,         \
> +  (UINT16) 0,         \
> +  (UINT32) 0,         \
> +  (UINT32) 0,         \
> +  (UINT32) 0,         \
> +  (UINT64) 0,         \
> +  {(UINT32) 0},       \
> +  {(UINT32) 0},       \
> +  {
> +
> +#define RELATIVE_DISTANCE() \
> +    {(UINT16) 0},
> +
> +#define LBIS_END() \
> +  },               \
> +},
> +
> +#endif /* _SLLBIS_H_ */
> diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/Spcr.h
> b/Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/Spcr.h
> new file mode 100644
> index 0000000000..90ea2c24cb
> --- /dev/null
> +++ b/Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/Spcr.h
> @@ -0,0 +1,48 @@
> +/** @file
> +  This file describes the contents of the ACPI Serial Port Console Redirection
> +  Table (SPCR).  Some additional ACPI 2.0 values are defined in Acpi2_0.h.
> +  All changes to the Spcr contents should be done in this file.
> +
> +  @copyright
> +  Copyright 1999 - 2002 Intel Corporation. <BR>
> +
> +  SPDX-License-Identifier: BSD-2-Clause-Patent
> +**/
> +
> +#ifndef _SPCR_H_
> +#define _SPCR_H_
> +
> +//
> +// SPCR Definitions, see TBD specification for details.
> +//
> +
> +#define EFI_ACPI_OEM_SPCR_REVISION 0x00000000 // TBD
> +
> +#define EFI_ACPI_INTERFACE_TYPE                     0x00 // full 16550 interface.
> +
> +//
> +// Base Address
> +//
> +#define EFI_ACPI_BASE_ADDRESS_ADDRESS_SPACE_ID
> EFI_ACPI_6_2_SYSTEM_IO
> +#define EFI_ACPI_BASE_ADDRESS_BIT_WIDTH             0x08
> +#define EFI_ACPI_BASE_ADDRESS_BIT_OFFSET            0x00
> +#define EFI_ACPI_BASE_ADDRESS_ADDRESS               0x0000000000000000 //
> Updated at run time
> +
> +#define EFI_ACPI_INTERRUPT_TYPE                     0x03 // Dual-8259 and IOAPIC
> +#define EFI_ACPI_IRQ                                0x04 // Updated at run time
> +#define EFI_ACPI_GLOBAL_SYSTEM_INTERRUPT            0x04 // Updated at
> run time
> +#define EFI_ACPI_BAUD_RATE                          0x07 // 115200
> +#define EFI_ACPI_PARITY                             0x00 // No parity
> +#define EFI_ACPI_STOP_BITS                          0x00 // 0 stop bit
> +#define EFI_ACPI_FLOW_CONTROL                       0x00 // No flow control
> +#define EFI_ACPI_TERMINAL_TYPE                      0x03 // ANSI
> +#define EFI_ACPI_LANGUAGE                           0x00 // Reserved
> +#define EFI_ACPI_PCI_DEVICE_ID                      0xFFFF
> +#define EFI_ACPI_PCI_VENDOR_ID                      0xFFFF
> +#define EFI_ACPI_PCI_BUS_NUMBER                     0x00
> +#define EFI_ACPI_PCI_DEVICE_NUMBER                  0x00
> +#define EFI_ACPI_PCI_FUNCTION_NUMBER                0x00
> +#define EFI_ACPI_PCI_FLAGS                          0x00000000
> +#define EFI_ACPI_PCI_SEGMENT                        0x00
> +
> +#endif
> diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/Spmi.h
> b/Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/Spmi.h
> new file mode 100644
> index 0000000000..576c390bd6
> --- /dev/null
> +++ b/Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/Spmi.h
> @@ -0,0 +1,59 @@
> +/** @file
> +
> +  @copyright
> +  Copyright 2019 Intel Corporation. <BR>
> +
> +  SPDX-License-Identifier: BSD-2-Clause-Patent
> +**/
> +
> +#ifndef _SPMI_H_
> +#define _SPMI_H_
> +
> +//
> +// Statements that include other files
> +//
> +#include <IndustryStandard/Acpi.h>
> +
> +//
> +// Spmi Definitions, see specification for details.
> +//
> +#ifndef
> EFI_ACPI_6_2_SERVER_PLATFORM_MANAGEMENT_INTERFACE_TABLE_SIG
> NATURE
> +#define
> EFI_ACPI_6_2_SERVER_PLATFORM_MANAGEMENT_INTERFACE_TABLE_SIG
> NATURE         0x494D5053
> +#endif
> +
> +#define
> EFI_ACPI_SERVER_PROCESSOR_MANAGEMENT_INTERFACE_TABLE_REVISIO
> N             0x05
> +#define EFI_ACPI_OEM_SPMI_REVISION
> 0x00000001
> +#define EFI_ACPI_SPMI_SPECIFICATION_REVISION
> 0x0200
> +
> +
> +//
> +// SPMI Table definition
> +//
> +#pragma pack(1)
> +
> +#define KEYBOARD_CONTROLLER_STYLE          0x01
> +#define SYSTEM_IO                          0x01
> +#define IPMI_DEFAULT_IO_BASE               0xCA2
> +
> +typedef struct {
> +  EFI_ACPI_DESCRIPTION_HEADER                              Header;
> +  UINT8                                                    InterfaceType;                      // 36
> +  UINT8                                                    Reserved37;                         // 37
> +  UINT16                                                   SpecificationRevision;              // 38 - 39
> +  UINT8                                                    InterruptType;                      // 40
> +  UINT8                                                    GPE;                                // 41
> +  UINT8                                                    Reserved42;                         // 42
> +  UINT8                                                    PciDeviceFlag;                      // 43
> +  UINT32                                                   GlobalSystemInterrupt;              // 44 - 47
> +  EFI_ACPI_6_2_GENERIC_ADDRESS_STRUCTURE                   BaseAddress;
> // 48 - 59
> +  UINT8                                                    UidByte1;                           // 60 LSB
> +  UINT8                                                    UidByte2;                           // 61
> +  UINT8                                                    UidByte3;                           // 62
> +  UINT8                                                    UidByte4;                           // 63 MSB
> +  UINT8                                                    Reserved64;                         // 64
> +} EFI_ACPI_SERVER_PROCESSOR_MANAGEMENT_INTERFACE_TABLE;
> +
> +
> +#pragma pack()
> +
> +#endif  //_SPMI_H_
> diff --git
> a/Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/WatchdogDescription
> Table.h
> b/Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/WatchdogDescription
> Table.h
> new file mode 100644
> index 0000000000..fe25f5b4e3
> --- /dev/null
> +++
> b/Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/WatchdogDescription
> Table.h
> @@ -0,0 +1,82 @@
> +/** @file
> +  ACPI Watchdog Description Table as defined in Intel
> +  ICH Family Watchdog Timer (WDT) Application Note (AP-725)
> +
> +  @copyright
> +  Copyright 2019 Intel Corporation. <BR>
> +
> +  SPDX-License-Identifier: BSD-2-Clause-Patent
> +**/
> +
> +#ifndef _WATCH_DOG_DESCRIPTION_TABLE_H_
> +#define _WATCH_DOG_DESCRIPTION_TABLE_H_
> +
> +//
> +// Include files
> +//
> +#include <IndustryStandard/Acpi.h>
> +
> +//
> +// Ensure proper structure formats
> +//
> +#pragma pack(1)
> +//
> +// WDDT structure ACPI 6.2 compliant
> +//
> +typedef struct {
> +  EFI_ACPI_DESCRIPTION_HEADER             Header;
> +  UINT16                                  SpecVersion;
> +  UINT16                                  TableVersion;
> +  UINT16                                  Vid;
> +  EFI_ACPI_6_2_GENERIC_ADDRESS_STRUCTURE  BaseAddress;
> +  UINT16                                  TimerMaxCount;
> +  UINT16                                  TimerMinCount;
> +  UINT16                                  TimerCountPeriod;
> +  UINT16                                  Status;
> +  UINT16                                  Capability;
> +} EFI_ACPI_WATCH_DOG_DESCRIPTION_TABLE;
> +
> +//
> +// "WDDT" Watchdog Description Table signatures
> +//
> +#define EFI_ACPI_WDDT_SIGNATURE 0x54444457
> +
> +#pragma pack()
> +
> +//
> +// WDDT Revision
> +//
> +#define EFI_ACPI_WATCHDOG_DESCRIPTION_1_0_TABLE_REVISION  0x01
> +
> +//
> +// WDDT Spec Version
> +//
> +#define EFI_ACPI_WDDT_SPEC_1_0_VERSION                0x01
> +
> +//
> +// WDDT Description Table Version
> +//
> +#define EFI_ACPI_WDDT_TABLE_1_0_VERSION               0x01
> +
> +//
> +// WDT Status
> +//
> +#define EFI_ACPI_WDDT_STATUS_AVAILABLE             0x0001
> +#define EFI_ACPI_WDDT_STATUS_ACTIVE                0x0002
> +#define EFI_ACPI_WDDT_STATUS_OWNED_BY_BIOS         0x0000
> +#define EFI_ACPI_WDDT_STATUS_OWNED_BY_OS           0x0004
> +#define EFI_ACPI_WDDT_STATUS_USER_RESET_EVENT      0x0800
> +#define EFI_ACPI_WDDT_STATUS_WDT_EVENT             0x1000
> +#define EFI_ACPI_WDDT_STATUS_POWER_FAIL_EVENT      0x2000
> +#define EFI_ACPI_WDDT_STATUS_UNKNOWN_RESET_EVENT   0x4000
> +
> +//
> +// WDT Capability
> +//
> +#define EFI_ACPI_WDDT_CAPABILITY_AUTO_RESET            0x0001
> +#define EFI_ACPI_WDDT_CAPABILITY_ALERT_SUPPORT         0x0002
> +#define EFI_ACPI_WDDT_CAPABILITY_PLATFORM_SHUTDOWN     0x0004
> +#define EFI_ACPI_WDDT_CAPABILITY_IMMEDIATE_SHUTDOWN    0x0008
> +#define EFI_ACPI_WDDT_CAPABILITY_BIOS_HANDOFF_SUPPORT  0x0010
> +
> +#endif
> diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/Wddt.h
> b/Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/Wddt.h
> new file mode 100644
> index 0000000000..9ffe2c6e89
> --- /dev/null
> +++ b/Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/Wddt.h
> @@ -0,0 +1,53 @@
> +/** @file
> +  This file describes the contents of the ACPI Watchdog Description
> +  Table (WDDT).  Some additional ACPI values are defined in Acpi1_0.h and
> +  Acpi2_0.h.
> +
> +  @copyright
> +  Copyright 1999 - 2019 Intel Corporation. <BR>
> +
> +  SPDX-License-Identifier: BSD-2-Clause-Patent
> +**/
> +
> +#ifndef _WDDT_H
> +#define _WDDT_H
> +
> +//
> +// Statements that include other files
> +//
> +#include <IndustryStandard/Acpi.h>
> +
> +//
> +// WDDT Definitions, ACPI 6.2
> +//
> +#define EFI_ACPI_WDDT_DESCRIPTION_TABLE_REVISION      1
> +#define EFI_ACPI_OEM_WDDT_REVISION                    0x00000001
> +#define EFI_ACPI_WDDT_SPEC_VERSION                    0x0100
> +#define EFI_ACPI_WDDT_TABLE_VERSION                   0x0100
> +#define EFI_ACPI_WDDT_TIMER_MAX_COUNT                 0x003f
> +#define EFI_ACPI_WDDT_TIMER_MIN_VALUE                 0x0004
> +#define EFI_ACPI_WDDT_TIMER_PERIOD_COUNT              600
> +//
> +// WDDT_STATUS bits
> +//
> +#define EFI_ACPI_WDDT_STATUS_AVAILABLE            0x0001
> +#define EFI_ACPI_WDDT_STATUS_ACTIVE               0x0002
> +#define EFI_ACPI_WDDT_STATUS_OWNED_BY_BIOS        0x0000
> +#define EFI_ACPI_WDDT_STATUS_OWNED_BY_OS          0x0004
> +#define EFI_ACPI_WDDT_STATUS_USER_RESET_EVENT     0x0800
> +#define EFI_ACPI_WDDT_STATUS_WDT_EVENT            0x1000
> +#define EFI_ACPI_WDDT_STATUS_POWER_FAIL_EVENT     0x2000
> +#define EFI_ACPI_WDDT_STATUS_UNKNOWN_RESET_EVENT  0x4000
> +
> +//
> +// WDDT Capability bits
> +//
> +#define EFI_ACPI_WDDT_CAPABILITY_AUTO_RESET           0x0001
> +#define EFI_ACPI_WDDT_CAPABILITY_ALERT_SUPPORT        0x0002
> +#define EFI_ACPI_WDDT_CAPABILITY_PLATFORM_SHUTDOWN    0x0004
> +#define EFI_ACPI_WDDT_CAPABILITY_IMMEDIATE_SHUTDOWN   0x0008
> +#define EFI_ACPI_WDDT_CAPABILITY_BIOS_HANDOFF_SUPPORT 0x0010
> +
> +#pragma pack()
> +
> +#endif
> diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/Wsmt.h
> b/Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/Wsmt.h
> new file mode 100644
> index 0000000000..112e162931
> --- /dev/null
> +++ b/Platform/Intel/WhitleyOpenBoardPkg/Include/Acpi/Wsmt.h
> @@ -0,0 +1,67 @@
> +/** @file
> +
> + @copyright
> +  Copyright 2017 - 2020 Intel Corporation.
> +
> +  SPDX-License-Identifier: BSD-2-Clause-Patent
> +**/
> +
> +
> +#ifndef _WSMT_H_
> +#define _WSMT_H_
> +
> +//
> +// Statements that include other files
> +//
> +
> +#include <IndustryStandard/Acpi.h>
> +
> +//
> +// signature "WSMT"
> +//
> +
> +#define ACPI_WSMT_SIGNATURE                       0x544D5357
> +#define ACPI_WSMT_LENGTH                          40
> +#define ACPI_OEM_WSMT_REVISION                    0x00000000
> +#define EFI_ACPI_WSMT_REVISION                    0x00000001
> +#define WSMT_PROTECTION_FLAG                      (BIT0 | BIT1 | BIT2 )
> +
> +
> +#pragma pack(1)
> +
> +typedef union {
> +  struct {
> +    //
> +    //BIT0:
> +    //If set, expresses that for all synchronous SMM entries,
> +    //SMM will validate that input and output buffers lie entirely within the
> expected fixed memory regions.
> +    //
> +    UINT32   FixedCommBuffers:1;
> +    //
> +    //BIT1: COMM_BUFFER_NESTED_PTR_PROTECTION
> +    //If set, expresses that for all synchronous SMM entries, SMM will
> validate that input and
> +    //output pointers embedded within the fixed communication buffer only
> refer to address ranges
> +    //that lie entirely within the expected fixed memory regions.
> +    //
> +    UINT32   CommBufferNestedPointerProtection:1;
> +    //
> +    //BIT2: SYSTEM_RESOURCE_PROTECTION
> +    //Firmware setting this bit is an indication that it will not allow
> reconfiguration of system resources via non-architectural mechanisms.
> +    //
> +    UINT32   SystemResourceProtection:1;
> +    UINT32   Reserved:29;
> +  } Bits;
> +  UINT32 Flags;
> +} EFI_ACPI_WSMT_PROTECTION_FLAGS;
> +
> +//
> +//  WSMT ACPI table
> +//
> +typedef struct _ACPI_WINDOWS_SMM_SECURITY_MITIGATIONS_TABLE {
> +  EFI_ACPI_DESCRIPTION_HEADER             Header;
> +  EFI_ACPI_WSMT_PROTECTION_FLAGS          ProtectionFlags;
> +} ACPI_WINDOWS_SMM_SECURITY_MITIGATIONS_TABLE;
> +
> +#pragma pack()
> +
> +#endif //_WSMT_H_
> diff --git a/Platform/Intel/WhitleyOpenBoardPkg/PlatformPkg.dec
> b/Platform/Intel/WhitleyOpenBoardPkg/PlatformPkg.dec
> index 5e27d9beb4..4d416325ae 100644
> --- a/Platform/Intel/WhitleyOpenBoardPkg/PlatformPkg.dec
> +++ b/Platform/Intel/WhitleyOpenBoardPkg/PlatformPkg.dec
> @@ -16,8 +16,8 @@
>    PACKAGE_VERSION                = 0.91
> 
>  [Includes]
> - Include
> - Include/Protocol
> +  Include
> +  Include/Protocol
> 
>  #TODO: Move these generated temp files into include.
>    Uba/BoardInit/Dxe
> @@ -159,8 +159,7 @@
> 
>  [PcdsFixedAtBuild]
> 
> -#SKX_TODO: add a new GUID, and replace the 'gPlatformTokenSpaceGuid'
> used here to it, or move these values to the SocketPkg where the GUID is
> defined
> -#          Using a GUID defined in another .DEC file is a violation of the UEFI
> packaging standards.
> +
> gPlatformTokenSpaceGuid.PcdEfiAcpiPm1aEvtBlkAddress|0x00000500|UINT
> 32|0x00000031
> 
>    gCpPlatFlashTokenSpaceGuid.PcdFlashBase|0x00000000
> |UINT32|0x3000000E
>    gCpPlatFlashTokenSpaceGuid.PcdFlashSize|0x00000000
> |UINT32|0x3000000F
> diff --git
> a/Silicon/Intel/WhitleySiliconPkg/Include/UncoreCommonIncludes.h
> b/Silicon/Intel/WhitleySiliconPkg/Include/UncoreCommonIncludes.h
> index 0ea93e9a78..7af4eb72f6 100644
> --- a/Silicon/Intel/WhitleySiliconPkg/Include/UncoreCommonIncludes.h
> +++ b/Silicon/Intel/WhitleySiliconPkg/Include/UncoreCommonIncludes.h
> @@ -80,6 +80,8 @@
>  #define MC_MAX_NODE                   (MAX_SOCKET * MAX_IMC)  // Max
> number of memory nodes
>  #endif
> 
> +#define MAX_CRS_ENTRIES_PER_NODE      8                       // Max number of
> ranges allowed on a memory node
> +
>  #ifndef TOTAL_CB3_DEVICES
>  #define TOTAL_CB3_DEVICES             64   // IOAT_TOTAL_FUNCS *
> MAX_SOCKET. Note: this covers up to 8S.
>  #endif
> @@ -108,4 +110,10 @@
>  #define MAX_B2P_MAILBOX_GROUPS    32
>  #endif // !MAX_B2P_MAILBOX_GROUPS
> 
> +//
> +// ACPI table information used to initialize tables.
> +//
> +#define EFI_ACPI_CREATOR_ID       0x4C544E49          // "INTL"
> +#define EFI_ACPI_CREATOR_REVISION 0x20091013          // Oct 13 2009
> +
>  #endif
> --
> 2.27.0.windows.1


^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [edk2-devel][edk2-platforms][PATCH V1 3/8] WhitleyOpenBoardPkg/AcpiTables: South Cluster ASL
  2022-02-07 19:02 ` [edk2-devel][edk2-platforms][PATCH V1 3/8] WhitleyOpenBoardPkg/AcpiTables: South Cluster ASL Oram, Isaac W
@ 2022-02-09  3:21   ` Nate DeSimone
  0 siblings, 0 replies; 17+ messages in thread
From: Nate DeSimone @ 2022-02-09  3:21 UTC (permalink / raw)
  To: Oram, Isaac W, devel@edk2.groups.io; +Cc: Chiu, Chasel

Reviewed-by: Nate DeSimone <nathaniel.l.desimone@intel.com>

> -----Original Message-----
> From: Oram, Isaac W <isaac.w.oram@intel.com>
> Sent: Monday, February 7, 2022 11:03 AM
> To: devel@edk2.groups.io
> Cc: Desimone, Nathaniel L <nathaniel.l.desimone@intel.com>; Chiu, Chasel
> <chasel.chiu@intel.com>
> Subject: [edk2-devel][edk2-platforms][PATCH V1 3/8]
> WhitleyOpenBoardPkg/AcpiTables: South Cluster ASL
> 
> LBG ACPI DSDT content
> 
> Cc: Nate DeSimone <nathaniel.l.desimone@intel.com>
> Cc: Chasel Chiu <chasel.chiu@intel.com>
> Signed-off-by: Isaac Oram <isaac.w.oram@intel.com>
> ---
> 
> Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/Pch.as
> l           | 833 ++++++++++++++++++++
> 
> Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/PchHd
> a.asl        | 307 ++++++++
> 
> Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/PchNv
> s.asl        | 271 +++++++
> 
> Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/PchPci
> e.asl       | 203 +++++
> 
> Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/PchSa
> ta.asl       |  50 ++
> 
> Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/PchXh
> ci.asl       | 558 +++++++++++++
> 
> Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP01_
> ADR.asl      |  15 +
> 
> Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP02_
> ADR.asl      |  15 +
> 
> Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP03_
> ADR.asl      |  15 +
> 
> Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP04_
> ADR.asl      |  15 +
> 
> Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP05_
> ADR.asl      |  15 +
> 
> Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP06_
> ADR.asl      |  15 +
> 
> Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP07_
> ADR.asl      |  15 +
> 
> Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP08_
> ADR.asl      |  15 +
> 
> Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP09_
> ADR.asl      |  15 +
> 
> Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP10_
> ADR.asl      |  15 +
> 
> Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP11_
> ADR.asl      |  15 +
> 
> Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP12_
> ADR.asl      |  15 +
> 
> Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP13_
> ADR.asl      |  15 +
> 
> Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP14_
> ADR.asl      |  15 +
> 
> Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP15_
> ADR.asl      |  15 +
> 
> Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP16_
> ADR.asl      |  15 +
> 
> Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP17_
> ADR.asl      |  15 +
> 
> Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP18_
> ADR.asl      |  15 +
> 
> Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP19_
> ADR.asl      |  15 +
> 
> Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP20_
> ADR.asl      |  15 +
> 
> Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/Trace
> HubDebug.asl | 150 ++++
>  Silicon/Intel/WhitleySiliconPkg/SiliconPkg.dec                                        |   1 +
>  28 files changed, 2673 insertions(+)
> 
> diff --git
> a/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/Pch.
> asl
> b/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/Pch.
> asl
> new file mode 100644
> index 0000000000..a8ea35534c
> --- /dev/null
> +++
> b/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/Pch.
> asl
> @@ -0,0 +1,833 @@
> +/** @file
> +
> +  @copyright
> +  Copyright 1999 - 2020 Intel Corporation. <BR>
> +
> +  SPDX-License-Identifier: BSD-2-Clause-Patent
> +**/
> +
> +#include <Register/PchRegsPcr.h>
> +
> +Name (PNVB, 0xFFFF0000)  // PCH NVS Base address
> +Name (PNVL, 0xAA55)      // PCH NVS Length
> +Include ("PchNvs.asl")
> +
> +//
> +// Trace Hub debug library
> +// Include it earlier so the debug function can be used as soon as possible
> +//
> +Include ("TraceHubDebug.asl")
> +
> +Name(SPTH,1)
> +Name(SPTL,2)
> +Method(PCHV) {
> +  If(LEqual(PCHS, 1)) { Return (SPTH) } // series=H  -> SPT-H
> +  If(LEqual(PCHS, 2)) { Return (SPTL) } // series=LP -> SPT-LP
> +  Return (0)
> +}
> +
> +//
> +// This PME event (PCH's GPE 6Dh) is received when any PCH internal
> device with
> +// PCI Power Management capabilities on bus 0 asserts the equivalent of
> the PME# signal.
> +//
> +Scope(\_GPE) {
> +  Method(_L6D, 0, Serialized) {
> +    \_SB.PC00.XHCI.GPEH()
> +    \_SB.PC00.CAVS.GPEH()
> +    \_SB.PC00.GBE1.GPEH()
> +  }
> +}
> +
> +Scope (\_SB.PC00) {
> +
> +  //
> +  // PCH reserved resource
> +  //
> +  Device(PRRE) {
> +    Name(_HID,EISAID("PNP0C02")) // motherboard resource
> +    Name(_UID,"PCHRESV")
> +    Name(_STA,0x3) // device present and decodes its resources, but not to
> be displayed in OSPM
> +
> +    Method(_CRS,0,Serialized)
> +    {
> +      Name(BUF0,ResourceTemplate(){
> +        //
> +        // PCH RESERVED MMIO RANGE
> +        // 0xFD000000 to 0xFE7FFFFF
> +        // to skip over address range that might be claimed by the GPIO, Intel
> Serial IO, Thermal, TraceHub and CIO2 devices
> +        // need to split this into 5 ranges
> +        // The GPIO COMM0,1,3 and SerialIO ranges will be handled by SIRC
> device.
> +        //
> +        Memory32Fixed(ReadWrite,0xFD000000,0x00AC0000) // 0xFD000000 -
> 0xFDABFFFF
> +        // Skip 0xFDAC0000 - 0xFDACFFFF for GPIO_COMM3
> +        Memory32Fixed(ReadWrite,0xFDAD0000,0x00010000) // 0xFDAD0000 -
> 0xFDADFFFF, only cover GPIO_COMM2 range
> +        // Skip 0xFDAE0000 - 0xFDAFFFFF for GPIO_COMM0 and GPIO_COMM1
> +        Memory32Fixed(ReadWrite,0xFDB00000,0x00500000) // 0xFDB00000 -
> 0xFDFFFFFF
> +        Memory32Fixed(ReadWrite,0xFE000000,0x00010000) // 0xFE000000 -
> 0xFE00FFFF
> +        Memory32Fixed(ReadWrite,0xFE011000,0x0000f000) // 0xFE011000 -
> 0xFE01FFFF
> +        // Skip 0xFE020000 - 0xFE035FFF for Serial IO
> +        Memory32Fixed(ReadWrite,0xFE036000,0x00006000) // 0xFE036000 -
> 0xFE03BFFF
> +        // Skip 0xFE03C000 - 0xFE03CFFF for Thermal Device in ACPI mode
> +        Memory32Fixed(ReadWrite,0xFE03D000,0x003C3000) // 0xFE03D000 -
> 0xFE3FFFFF
> +        // Skip 0xFE400000 - 0xFE40FFFF for CIO2 in ACPI mode
> +        Memory32Fixed(ReadWrite,0xFE410000,0x003F0000) // 0xFE410000 -
> 0xFE7FFFFF
> +      })
> +      Return(BUF0)
> +    }
> +  }
> +  Device(IOTR) {
> +    //
> +    // This device claims IO range reserved for IO traps
> +    // to prevent OS from reusing it for other purposes
> +    //
> +    Name(_HID,EISAID("PNP0C02"))
> +    Name(_UID,"IoTraps")
> +    Name(BUF0,ResourceTemplate(){
> +      Io(Decode16,0x0,0x0,0x1,0xFF,TAG0)
> +      Io(Decode16,0x0,0x0,0x1,0xFF,TAG1)
> +      Io(Decode16,0x0,0x0,0x1,0xFF,TAG2)
> +      Io(Decode16,0x0,0x0,0x1,0xFF,TAG3)
> +    })
> +    CreateWordField(BUF0,TAG0._MIN,AMI0)
> +    CreateWordField(BUF0,TAG0._MAX,AMA0)
> +    CreateWordField(BUF0,TAG1._MIN,AMI1)
> +    CreateWordField(BUF0,TAG1._MAX,AMA1)
> +    CreateWordField(BUF0,TAG2._MIN,AMI2)
> +    CreateWordField(BUF0,TAG2._MAX,AMA2)
> +    CreateWordField(BUF0,TAG3._MIN,AMI3)
> +    CreateWordField(BUF0,TAG3._MAX,AMA3)
> +    CreateByteField(BUF0,TAG0._LEN,LEN0)
> +    CreateByteField(BUF0,TAG1._LEN,LEN1)
> +    CreateByteField(BUF0,TAG2._LEN,LEN2)
> +    CreateByteField(BUF0,TAG3._LEN,LEN3)
> +    Method(_CRS) {
> +      Store(ITA0,AMI0);Store(ITA0,AMA0)
> +      Store(ITA1,AMI1);Store(ITA1,AMA1)
> +      Store(ITA2,AMI2);Store(ITA2,AMA2)
> +      Store(ITA3,AMI3);Store(ITA3,AMA3)
> +      if(LNotEqual(ITS0,1)) { Store(0, LEN0) }
> +      if(LNotEqual(ITS1,1)) { Store(0, LEN1) }
> +      if(LNotEqual(ITS2,1)) { Store(0, LEN2) }
> +      if(LNotEqual(ITS3,1)) { Store(0, LEN3) }
> +      return (BUF0)
> +    }
> +  }
> +
> +
> +  //
> +  // LPC Bridge - Device 31, Function 0, this is only for PCH register Memory
> Region declare,
> +  // it's better to be declared as early as possible since it's widely used in
> whole ACPI name space.
> +  // Please add any code which needs to reference any register of it after
> this
> +  //
> +  Scope (\_SB.PC00.LPC0) {
> +    Method(_DSM,4,serialized){if(PCIC(Arg0)) {
> return(PCID(Arg0,Arg1,Arg2,Arg3)) }; Return(Buffer() {0x00})}
> +
> +    OperationRegion(LPC, PCI_Config, 0x00, 0x100)
> +    Field(LPC, AnyAcc, NoLock, Preserve)
> +    {
> +      Offset(0x02),
> +      CDID, 16,
> +      Offset(0x08),
> +      CRID,  8,
> +      Offset(0x80),
> +      IOD0,  8,
> +      IOD1,  8,
> +      Offset(0xA0),
> +      , 9,
> +      PRBL,  1,
> +      Offset(0xAC),
> +      ,      8,
> +      ,      8,
> +      XUSB,  1,
> +      Offset(0xB8),
> +          ,  22,
> +      GR0B,  2,
> +      ,      8,
> +      Offset(0xBC),
> +      ,      2,
> +      GR19,  2,
> +      ,     28,
> +      Offset(0xDC),
> +      ,       2,
> +      ESPI,   1,
> +    }
> +  }
> +
> +  //
> +  // PCH Power Management Controller
> +  //
> +  Scope(\_SB.PC00.PMC1) {
> +    Method(_DSM,4,serialized){if(PCIC(Arg0)) {
> return(PCID(Arg0,Arg1,Arg2,Arg3)) }; Return(Buffer() {0x00})}
> +
> +    OperationRegion(PMCB, PCI_Config, 0x00, 0x100)
> +    Field(PMCB, AnyAcc, NoLock, Preserve) {
> +      VDID, 32,
> +      Offset(0x40),
> +          , 8,
> +      ACBA, 8,
> +      Offset(0x48),
> +          , 12,
> +      PWBA, 20,
> +    }
> +  }
> +
> +  //
> +  // SMBus Controller - Device 31, Function 4
> +  //
> +  Device(SBUS) {
> +    Name(_ADR,0x001F0004)
> +    Method(_DSM,4,serialized){if(PCIC(Arg0)) {
> return(PCID(Arg0,Arg1,Arg2,Arg3)) }; Return(Buffer() {0x00})}
> +  }
> +}
> +
> +Scope(\)
> +{
> +  //
> +  //  PCR Register Access Methods
> +  //
> +  // PCR Dword Read
> +  // arg0: PID
> +  // arg1: Offset
> +  //
> +  Method (PCRR, 2, Serialized) {
> +    Add (ShiftLeft (arg0, 16), arg1, Local0)
> +    Add (SBRG, Local0, Local0)
> +    OperationRegion (PCR0, SystemMemory, Local0, 0x4)
> +    Field(PCR0,DWordAcc,Lock,Preserve) {
> +      Offset(0x00),
> +      DAT0, 32
> +    } // End Field PCR0
> +    Return (DAT0)
> +  } // End Method PCRR
> +
> +  //
> +  // PCR Dword Write
> +  // arg0: PID
> +  // arg1: Offset
> +  // arg2: write data
> +  //
> +  Method (PCRW, 3, Serialized) {
> +    Add (ShiftLeft (arg0, 16), arg1, Local0)
> +    Add (SBRG, Local0, Local0)
> +    OperationRegion (PCR0, SystemMemory, Local0, 0x4)
> +    Field(PCR0,DWordAcc,Lock,Preserve) {
> +      Offset(0x00),
> +      DAT0, 32
> +    } // End Field PCR0
> +    Store (arg2, DAT0)
> +
> +    // read back for PCR back to back limitation
> +    OperationRegion (PCR1, SystemMemory, ADD (SBRG, 0x00C73418), 0x4)
> +    Field(PCR1,DWordAcc,Lock,Preserve) {
> +      Offset(0x00),
> +      DAT1, 32
> +    } // End Field PCR1
> +  } // End Method PCRW
> +
> +  //
> +  // PCR Dword Or
> +  // arg0: PID
> +  // arg1: Offset
> +  // arg2: Or data
> +  //
> +  Method (PCRO, 3, Serialized) {
> +    Store(PCRR(arg0,arg1),Local0)    // Store PCR Read data in Local0
> +    Store(Or(Local0,arg2),Local1)    // Or data
> +    PCRW(arg0,arg1,Local1)           // Write data back
> +  }
> +
> +  //
> +  // PCR Dword And
> +  // arg0: PID
> +  // arg1: Offset
> +  // arg2: And data
> +  //
> +  Method (PCRA, 3, Serialized) {
> +    Store(PCRR(arg0,arg1),Local0)    // Store PCR Read data in Local0
> +    Store(And(Local0,arg2),Local1)   // And data
> +    PCRW(arg0,arg1,Local1)           // Write data back
> +  }
> +
> +  //
> +  // PCR Dword AndThenOr
> +  // arg0: PID
> +  // arg1: Offset
> +  // arg2: And data
> +  // arg3: Or data
> +  //
> +  Method (PCAO, 4, Serialized) {
> +    Store(PCRR(arg0,arg1),Local0)           // Store PCR Read data in Local0
> +    Store(Or(And(Local0,arg2),arg3),Local1) // AndThenOr
> +    PCRW(arg0,arg1,Local1)                  // Write data back
> +  }
> +
> +  Name (PMBV, 0)        // ACPI I/O base address value
> +  Method (PMB1, 0) {
> +    If (LEqual(PMBV, 0)) {
> +      Store (ShiftLeft (\_SB.PC00.PMC1.ACBA, 8), PMBV)
> +    }
> +    Return (PMBV)
> +  }
> +
> +  Name (PWRV, 0)        // PWRM base address value
> +  Method (PWRM, 0) {
> +    If (LEqual(PWRV, 0)) {
> +      Store (ShiftLeft (\_SB.PC00.PMC1.PWBA, 12), PWRV)
> +    }
> +    Return (PWRV)
> +  }
> +
> +
> +  //
> +  // Define PCH ACPIBASE I/O as an ACPI operating region.  The base address
> +  // can be found in Device 31, Function 2, Offset 40h.
> +  //
> +  OperationRegion(PMIO, SystemIo, PMB1, 0x80)
> +  Field(PMIO, ByteAcc, NoLock, Preserve) {
> +          ,  8,
> +      PBSS,  1,       // Power Button Status
> +    Offset(0x40),     // General Purpose Event Control
> +          ,  17,
> +      GPEC,  1        // Software GPE Control
> +  }
> +  OperationRegion(PMLP, SystemIo, Add(\PMB1,0x80), 0x20)
> +  Field(PMLP, ByteAcc, NoLock, Preserve) {
> +    Offset(0x10),     // GPE0 Enable
> +      ,      8,
> +      GE08,  1,
> +      ,      8,
> +      GE17,  1,
> +      ,     17,
> +      GE35,  1,
> +      ,      9,
> +      GE45,  1,
> +      ,      2,
> +      GE48,  1,
> +      ,      2,
> +      GE51,  1,
> +      ,     76,
> +  }
> +  Field(PMLP, ByteAcc, NoLock, WriteAsZeros) {
> +      Offset(0x00),     // GPE0 Status
> +      ,      8,
> +      GS08,  1,
> +      ,      8,
> +      GS17,  1,
> +      ,     17,
> +      GS35,  1,
> +      ,      9,
> +      GS45,  1,
> +      ,      2,
> +      GS48,  1,
> +      ,      2,
> +      GS51,  1,
> +      ,      2,
> +      GS54,  1,
> +      GS55,  1,
> +      ,     42,
> +      GS98,  1,
> +      ,     29,
> +  }
> +
> +
> +
> +  //
> +  // PWRM register definitions
> +  //
> +  OperationRegion(PWMR, SystemMemory, \PWRM, 0x800)
> +  Field(PWMR, AnyAcc, NoLock, Preserve) {
> +    Offset(0x0E0),
> +        , 16,
> +    DWLE, 1,          // Deep-Sx WLAN Phy Power Enable
> +    HWLE, 1,          // Host Wireless LAN Phy Power Enable
> +  }
> +
> +  //
> +  //
> +  OperationRegion(PMST, SystemMemory, PWRV, 0x80)
> +  Field(PMST, DWordAcc, NoLock, Preserve) {
> +    Offset(0x18),  // Power Management Configuration Reg 1 (PM_CFG)
> +        , 25,      //
> +    USBP,  1,      // Allow USB2 PHY Core Power Gating
> (ALLOW_USB2_CORE_PG)
> +    Offset(0x1C),  // PCH Power Management Status (PCH_PM_STS)
> +        , 24,      //
> +    PMFS,  1,      // PMC Message Full Status (PMC_MSG_FULL_STS)
> +    Offset(0x20),  // Message to PMC (MTPMC)
> +    MPMC, 32,      // Message to PMC (MTPMC)
> +    Offset(0x24),  // PCH Power Management Status (PCH_PM_STS2)
> +        , 20,      //
> +    UWAB,  1,      // USB2 Workaround Available Bit
> +  }
> +
> +} //end Scope(\)
> +
> +Scope (\_SB.PC00) {
> +  Name(LTRN, 0)
> +  Name(OBFN, 0)
> +
> +  Name(LMSL, 0)
> +  Name(LNSL, 0)
> +
> +  //
> +  // LAN Controller - Device 31, Function 6
> +  //
> +  Scope(\_SB.PC00.GBE1) {
> +    Method(_DSM,4,serialized){if(PCIC(Arg0)) {
> return(PCID(Arg0,Arg1,Arg2,Arg3)) }; Return(Buffer() {0x00})}
> +    OperationRegion(GLBA, PCI_Config, 0,0x100)
> +    Field(GLBA,AnyAcc,NoLock,Preserve)
> +    {
> +      DVID, 16,
> +      Offset(0xCC),
> +          ,  8,
> +      PMEE,  1, // PME Enable
> +          ,  6,
> +      PMES,  1, // PME Status
> +    }
> +
> +    Method(_PRW, 0) { Return(GPRW(0x0D, 4)) }  // can wakeup from S4
> state
> +
> +    Method(_DSW, 3)
> +    {
> +      Store(Arg0, PMEE)
> +    }
> +
> +    //
> +    // GPE handler for GbE, this is part of _Lxx handler for bus 0 PME
> +    //
> +    Method(GPEH)
> +    {
> +      If(LEqual(DVID, 0xFFFF)) {
> +        Return()
> +      }
> +      If(LAnd(PMEE, PMES)) {
> +        Store(1, PMES) // clear PME Status
> +        Notify(GBE1, 0x02)
> +      }
> +    }
> +  } // end "GbE Controller"
> +
> +} //scope
> +
> +//
> +// xHCI Controller - Device 20, Function 0
> +//
> +Include("PchXhci.asl")
> +
> +// xDCI (OTG) Controller is not used in Server
> +// Comment out as ifdefs don't work at Trim stage of ASL preparation
> +
> +Scope(\_SB_.PC00) {
> +  //
> +  // High Definition Audio Controller - Device 31, Function 3
> +  //
> +  include("PchHda.asl")
> +
> +  //
> +  // PCIE Root Port #01
> +  //
> +  Scope(\_SB.PC00.RP01) {
> +    //
> +    // Pass LTRx to LTRN so PchPcie.asl can be reused for PCIes.
> +    //
> +    Method(_INI)
> +    {
> +      Store (LTR1, LTRN)
> +      Store (PML1, LMSL)
> +      Store (PNL1, LNSL)
> +      Store (OBF1, OBFN)
> +    }
> +    Include("PchPcie.asl")
> +    Method(_PRW, 0) { Return(GPRW(0x09, 4)) }  // can wakeup from S4
> state
> +  } // end "PCIE Root Port #01"
> +
> +  //
> +  // PCIE Root Port #02
> +  //
> +  Scope(\_SB.PC00.RP02) {
> +    //
> +    // Pass LTRx to LTRN so PchPcie.asl can be reused for PCIes.
> +    //
> +    Method(_INI)
> +    {
> +      Store (LTR2, LTRN)
> +      Store (PML2, LMSL)
> +      Store (PNL2, LNSL)
> +      Store (OBF2, OBFN)
> +    }
> +    Include("PchPcie.asl")
> +    Method(_PRW, 0) { Return(GPRW(0x09, 4)) }  // can wakeup from S4
> state
> +  } // end "PCIE Root Port #02"
> +
> +  //
> +  // PCIE Root Port #03
> +  //
> +  Scope(\_SB.PC00.RP03) {
> +    //
> +    // Pass LTRx to LTRN so PchPcie.asl can be reused for PCIes.
> +    //
> +    Method(_INI)
> +    {
> +      Store (LTR3, LTRN)
> +      Store (PML3, LMSL)
> +      Store (PNL3, LNSL)
> +      Store (OBF3, OBFN)
> +    }
> +    Include("PchPcie.asl")
> +    Method(_PRW, 0) { Return(GPRW(0x09, 4)) }  // can wakeup from S4
> state
> +  } // end "PCIE Root Port #03"
> +
> +  //
> +  // PCIE Root Port #04
> +  //
> +  Scope(\_SB.PC00.RP04) {
> +    //
> +    // Pass LTRx to LTRN so PchPcie.asl can be reused for PCIes.
> +    //
> +    Method(_INI)
> +    {
> +      Store (LTR4, LTRN)
> +      Store (PML4, LMSL)
> +      Store (PNL4, LNSL)
> +      Store (OBF4, OBFN)
> +    }
> +    Include("PchPcie.asl")
> +    Method(_PRW, 0) { Return(GPRW(0x09, 4)) }  // can wakeup from S4
> state
> +  } // end "PCIE Root Port #04"
> +
> +  //
> +  // PCIE Root Port #05
> +  //
> +  Scope(\_SB.PC00.RP05) {
> +    //
> +    // Pass LTRx to LTRN so PchPcie.asl can be reused for PCIes.
> +    //
> +    Method(_INI)
> +    {
> +      Store (LTR5, LTRN)
> +      Store (PML5, LMSL)
> +      Store (PNL5, LNSL)
> +      Store (OBF5, OBFN)
> +    }
> +    Include("PchPcie.asl")
> +    Method(_PRW, 0) { Return(GPRW(0x09, 4)) }  // can wakeup from S4
> state
> +  } // end "PCIE Root Port #05"
> +
> +  //
> +  // PCIE Root Port #06
> +  //
> +  Scope(\_SB.PC00.RP06) {
> +    //
> +    // Pass LTRx to LTRN so PchPcie.asl can be reused for PCIes.
> +    //
> +    Method(_INI)
> +    {
> +      Store (LTR6, LTRN)
> +      Store (PML6, LMSL)
> +      Store (PNL6, LNSL)
> +      Store (OBF6, OBFN)
> +    }
> +    Include("PchPcie.asl")
> +    Method(_PRW, 0) { Return(GPRW(0x09, 4)) }  // can wakeup from S4
> state
> +  } // end "PCIE Root Port #06"
> +
> +  //
> +  // PCIE Root Port #07
> +  //
> +  Scope(\_SB.PC00.RP07) {
> +    //
> +    // Pass LTRx to LTRN so PchPcie.asl can be reused for PCIes.
> +    //
> +    Method(_INI)
> +    {
> +      Store (LTR7, LTRN)
> +      Store (PML7, LMSL)
> +      Store (PNL7, LNSL)
> +      Store (OBF7, OBFN)
> +    }
> +    Include("PchPcie.asl")
> +    Method(_PRW, 0) { Return(GPRW(0x09, 4)) }  // can wakeup from S4
> state
> +  } // end "PCIE Root Port #07"
> +
> +  //
> +  // PCIE Root Port #08
> +  //
> +  Scope(\_SB.PC00.RP08) {
> +    //
> +    // Pass LTRx to LTRN so PchPcie.asl can be reused for PCIes.
> +    //
> +    Method(_INI)
> +    {
> +      Store (LTR8, LTRN)
> +      Store (PML8, LMSL)
> +      Store (PNL8, LNSL)
> +      Store (OBF8, OBFN)
> +    }
> +    Include("PchPcie.asl")
> +    Method(_PRW, 0) { Return(GPRW(0x09, 4)) }  // can wakeup from S4
> state
> +  } // end "PCIE Root Port #08"
> +
> +  //
> +  // PCIE Root Port #09
> +  //
> +  Scope(\_SB.PC00.RP09) {
> +    //
> +    // Pass LTRx to LTRN so PchPcie.asl can be reused for PCIes.
> +    //
> +    Method(_INI)
> +    {
> +      Store (LTR9, LTRN)
> +      Store (PML9, LMSL)
> +      Store (PNL9, LNSL)
> +      Store (OBF9, OBFN)
> +    }
> +    Include("PchPcie.asl")
> +    Method(_PRW, 0) { Return(GPRW(0x09, 4)) }  // can wakeup from S4
> state
> +  } // end "PCIE Root Port #09"
> +
> +  //
> +  // PCIE Root Port #10
> +  //
> +  Scope(\_SB.PC00.RP10) {
> +    //
> +    // Pass LTRx to LTRN so PchPcie.asl can be reused for PCIes.
> +    //
> +    Method(_INI)
> +    {
> +      Store (LTRA, LTRN)
> +      Store (PMLA, LMSL)
> +      Store (PNLA, LNSL)
> +      Store (OBFA, OBFN)
> +    }
> +    Include("PchPcie.asl")
> +    Method(_PRW, 0) { Return(GPRW(0x09, 4)) }  // can wakeup from S4
> state
> +  } // end "PCIE Root Port #10"
> +
> +  //
> +  // PCIE Root Port #11
> +  //
> +  Scope(\_SB.PC00.RP11) {
> +    //
> +    // Pass LTRx to LTRN so PchPcie.asl can be reused for PCIes.
> +    //
> +    Method(_INI)
> +    {
> +      Store (LTRB, LTRN)
> +      Store (PMLB, LMSL)
> +      Store (PNLB, LNSL)
> +      Store (OBFB, OBFN)
> +    }
> +    Include("PchPcie.asl")
> +    Method(_PRW, 0) { Return(GPRW(0x09, 4)) }  // can wakeup from S4
> state
> +  } // end "PCIE Root Port #11"
> +
> +  //
> +  // PCIE Root Port #12
> +  //
> +  Scope(\_SB.PC00.RP12) {
> +    //
> +    // Pass LTRx to LTRN so PchPcie.asl can be reused for PCIes.
> +    //
> +    Method(_INI)
> +    {
> +      Store (LTRC, LTRN)
> +      Store (PMLC, LMSL)
> +      Store (PNLC, LNSL)
> +      Store (OBFC, OBFN)
> +    }
> +    Include("PchPcie.asl")
> +    Method(_PRW, 0) { Return(GPRW(0x09, 4)) }  // can wakeup from S4
> state
> +  } // end "PCIE Root Port #12"
> +
> +  //
> +  // PCIE Root Port #13
> +  //
> +  Scope(\_SB.PC00.RP13) {
> +    //
> +    // Pass LTRx to LTRN so PchPcie.asl can be reused for PCIes.
> +    //
> +    Method(_INI)
> +    {
> +      Store (LTRD, LTRN)
> +      Store (PMLD, LMSL)
> +      Store (PNLD, LNSL)
> +      Store (OBFD, OBFN)
> +    }
> +    Include("PchPcie.asl")
> +    Method(_PRW, 0) { Return(GPRW(0x09, 4)) }  // can wakeup from S4
> state
> +  } // end "PCIE Root Port #13"
> +
> +  //
> +  // PCIE Root Port #14
> +  //
> +  Scope(\_SB.PC00.RP14) {
> +    //
> +    // Pass LTRx to LTRN so PchPcie.asl can be reused for PCIes.
> +    //
> +    Method(_INI)
> +    {
> +      Store (LTRE, LTRN)
> +      Store (PMLE, LMSL)
> +      Store (PNLE, LNSL)
> +      Store (OBFE, OBFN)
> +    }
> +    Include("PchPcie.asl")
> +    Method(_PRW, 0) { Return(GPRW(0x09, 4)) }  // can wakeup from S4
> state
> +  } // end "PCIE Root Port #14"
> +
> +  //
> +  // PCIE Root Port #15
> +  //
> +  Scope(\_SB.PC00.RP15) {
> +    //
> +    // Pass LTRx to LTRN so PchPcie.asl can be reused for PCIes.
> +    //
> +    Method(_INI)
> +    {
> +      Store (LTRF, LTRN)
> +      Store (PMLF, LMSL)
> +      Store (PNLF, LNSL)
> +      Store (OBFF, OBFN)
> +    }
> +    Include("PchPcie.asl")
> +    Method(_PRW, 0) { Return(GPRW(0x09, 4)) }  // can wakeup from S4
> state
> +  } // end "PCIE Root Port #15"
> +
> +  //
> +  // PCIE Root Port #16
> +  //
> +  Scope(\_SB.PC00.RP16) {
> +    //
> +    // Pass LTRx to LTRN so PchPcie.asl can be reused for PCIes.
> +    //
> +    Method(_INI)
> +    {
> +      Store (LTRG, LTRN)
> +      Store (PMLG, LMSL)
> +      Store (PNLG, LNSL)
> +      Store (OBFG, OBFN)
> +    }
> +    Include("PchPcie.asl")
> +    Method(_PRW, 0) { Return(GPRW(0x09, 4)) }  // can wakeup from S4
> state
> +  } // end "PCIE Root Port #16"
> +
> +  //
> +  // PCIE Root Port #17
> +  //
> +  Scope(\_SB.PC00.RP17) {
> +    //
> +    // Pass LTRx to LTRN so PchPcie.asl can be reused for PCIes.
> +    //
> +    Method(_INI)
> +    {
> +      Store (LTRH, LTRN)
> +      Store (PMLH, LMSL)
> +      Store (PNLH, LNSL)
> +      Store (OBFH, OBFN)
> +    }
> +    Include("PchPcie.asl")
> +    Method(_PRW, 0) { Return(GPRW(0x09, 4)) }  // can wakeup from S4
> state
> +  } // end "PCIE Root Port #17"
> +
> +  //
> +  // PCIE Root Port #18
> +  //
> +  Scope(\_SB.PC00.RP18) {
> +    //
> +    // Pass LTRx to LTRN so PchPcie.asl can be reused for PCIes.
> +    //
> +    Method(_INI)
> +    {
> +      Store (LTRI, LTRN)
> +      Store (PMLI, LMSL)
> +      Store (PNLI, LNSL)
> +      Store (OBFI, OBFN)
> +    }
> +    Include("PchPcie.asl")
> +    Method(_PRW, 0) { Return(GPRW(0x09, 4)) }  // can wakeup from S4
> state
> +  } // end "PCIE Root Port #18"
> +
> +  //
> +  // PCIE Root Port #19
> +  //
> +  Scope(\_SB.PC00.RP19) {
> +    //
> +    // Pass LTRx to LTRN so PchPcie.asl can be reused for PCIes.
> +    //
> +    Method(_INI)
> +    {
> +      Store (LTRJ, LTRN)
> +      Store (PMLJ, LMSL)
> +      Store (PNLJ, LNSL)
> +      Store (OBFJ, OBFN)
> +    }
> +    Include("PchPcie.asl")
> +    Method(_PRW, 0) { Return(GPRW(0x09, 4)) }  // can wakeup from S4
> state
> +  } // end "PCIE Root Port #19"
> +
> +  //
> +  // PCIE Root Port #20
> +  //
> +  Scope(\_SB.PC00.RP20) {
> +    //
> +    // Pass LTRx to LTRN so PchPcie.asl can be reused for PCIes.
> +    //
> +    Method(_INI)
> +    {
> +      Store (LTRK, LTRN)
> +      Store (PMLK, LMSL)
> +      Store (PNLK, LNSL)
> +      Store (OBFK, OBFN)
> +    }
> +    Include("PchPcie.asl")
> +    Method(_PRW, 0) { Return(GPRW(0x09, 4)) }  // can wakeup from S4
> state
> +  } // end "PCIE Root Port #20"
> +
> +  //
> +  // Serial ATA Host Controller - Device 31, Function 2
> +  //
> +External(\_SB.PC00.SAT0.SDSM, MethodObj)
> +
> +Scope (\_SB.PC00.SAT1) {
> +  Include ("PchSata.asl")
> +  Device(PRT6)
> +  {
> +    Name(_ADR,0x0006FFFF)  // Port 6
> +  }
> +  Device(PRT7)
> +  {
> +    Name(_ADR,0x0007FFFF)  // Port 7
> +  }
> +}
> +Scope (\_SB.PC00.SAT2) {
> +  Include ("PchSata.asl")
> +}
> +  //Server does not support CIO Camera I/O
> +
> +  //
> +  // Thermal Device
> +  //
> +  Scope(\_SB.PC00.TERM) {
> +    Name (_HID, "INT3536")
> +    Name (_UID, 1)
> +      Name (RBUF, ResourceTemplate () {
> +        Memory32Fixed (ReadWrite, 0xFE03C000, 0x00001000, BAR0)
> +        Interrupt (ResourceConsumer, Level, ActiveLow, Shared, , , IRQ) { 18 }
> +      })
> +
> +      CreateDWordField(RBUF,IRQ._INT,IRQN)
> +    Method (_CRS, 0x0, NotSerialized) {
> +      Store(TIRQ, IRQN)
> +
> +      Return (RBUF)
> +    }
> +
> +    Method (_STA, 0x0, NotSerialized)
> +    {
> +      If(LEqual(TAEN, 0))   { Return(0x0) } // device not enabled in ACPI mode
> +      If(LEqual(TIRQ, 0))   { Return(0x0) } // IRQ number not updated
> +      Return(0xF)
> +    }
> +  }
> +}
> +
> +// Comment out as ifdefs don't work at Trim stage of ASL preparation
> diff --git
> a/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/Pch
> Hda.asl
> b/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/Pch
> Hda.asl
> new file mode 100644
> index 0000000000..ab5b5c42dd
> --- /dev/null
> +++
> b/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/Pch
> Hda.asl
> @@ -0,0 +1,307 @@
> +/** @file
> +
> +  @copyright
> +  Copyright 1999 - 2020 Intel Corporation. <BR>
> +
> +  SPDX-License-Identifier: BSD-2-Clause-Patent
> +**/
> +
> +//
> +// Bit Difinitions
> +//
> +#ifndef BIT0
> +#define BIT0                     0x0001
> +#define BIT1                     0x0002
> +#define BIT2                     0x0004
> +#define BIT3                     0x0008
> +#define BIT4                     0x0010
> +#define BIT5                     0x0020
> +#define BIT6                     0x0040
> +#define BIT7                     0x0080
> +#define BIT8                     0x0100
> +#define BIT9                     0x0200
> +#endif  //BIT0
> +
> +//
> +// High Definition Audio Controller - Device 31, Function 3
> +//
> +Scope(\_SB.PC00.CAVS) {
> +
> +#ifndef  BIT0
> +#define  BIT0     0x00000001
> +#endif
> +#ifndef  BIT1
> +#define  BIT1     0x00000002
> +#endif
> +#ifndef  BIT2
> +#define  BIT2     0x00000004
> +#endif
> +#ifndef  BIT3
> +#define  BIT3     0x00000008
> +#endif
> +#ifndef  BIT4
> +#define  BIT4     0x00000010
> +#endif
> +#ifndef  BIT5
> +#define  BIT5     0x00000020
> +#endif
> +#ifndef  BIT6
> +#define  BIT6     0x00000040
> +#endif
> +#ifndef  BIT7
> +#define  BIT7     0x00000080
> +#endif
> +#ifndef  BIT8
> +#define  BIT8     0x00000100
> +#endif
> +#ifndef  BIT9
> +#define  BIT9     0x00000200
> +#endif
> +#ifndef  BIT10
> +#define  BIT10    0x00000400
> +#endif
> +#ifndef  BIT11
> +#define  BIT11    0x00000800
> +#endif
> +#ifndef  BIT12
> +#define  BIT12    0x00001000
> +#endif
> +#ifndef  BIT13
> +#define  BIT13    0x00002000
> +#endif
> +#ifndef  BIT14
> +#define  BIT14    0x00004000
> +#endif
> +#ifndef  BIT15
> +#define  BIT15    0x00008000
> +#endif
> +#ifndef  BIT16
> +#define  BIT16    0x00010000
> +#endif
> +#ifndef  BIT17
> +#define  BIT17    0x00020000
> +#endif
> +#ifndef  BIT18
> +#define  BIT18    0x00040000
> +#endif
> +#ifndef  BIT19
> +#define  BIT19    0x00080000
> +#endif
> +#ifndef  BIT20
> +#define  BIT20    0x00100000
> +#endif
> +#ifndef  BIT21
> +#define  BIT21    0x00200000
> +#endif
> +#ifndef  BIT22
> +#define  BIT22    0x00400000
> +#endif
> +#ifndef  BIT23
> +#define  BIT23    0x00800000
> +#endif
> +#ifndef  BIT24
> +#define  BIT24    0x01000000
> +#endif
> +#ifndef  BIT25
> +#define  BIT25    0x02000000
> +#endif
> +#ifndef  BIT26
> +#define  BIT26    0x04000000
> +#endif
> +#ifndef  BIT27
> +#define  BIT27    0x08000000
> +#endif
> +#ifndef  BIT28
> +#define  BIT28    0x10000000
> +#endif
> +#ifndef  BIT29
> +#define  BIT29    0x20000000
> +#endif
> +#ifndef  BIT30
> +#define  BIT30    0x40000000
> +#endif
> +#ifndef  BIT31
> +#define  BIT31    0x80000000
> +#endif
> +
> +  //
> +  // Define a Memory Region that will allow access to the HDA PCI
> Configuration Space
> +  //
> +  OperationRegion(HDAR, PCI_Config, 0x00, 0x100)
> +  Field(HDAR,WordAcc,NoLock,Preserve) {
> +    VDID,32,        // 0x00, VID DID
> +    Offset(0x48),   // 0x48, CGCTL - Clock Gating Control
> +        ,6,
> +    MBCG,1,         // MISCBDCGE [BIT6]
> +    Offset(0x54),   // 0x54, Power Management Control and Status Register
> +        ,8,
> +    PMEE,1,
> +        ,6,
> +    PMES,1          // PME Status
> +  }
> +
> +  Name(_S0W, 3) // Device can wake itself from D3 in S0
> +
> +  Method(_DSW, 3) { Store(Arg0, PMEE) } // Device wake enable
> +
> +
> +  Method(_PRW, 0) { Return(GPRW(0x0D, 4)) }  // Can wakeup from S4 state
> +
> +  // GPE handler for HDA, this is part of _Lxx handler for bus 0 PME
> +  Method(GPEH) {
> +    If(LEqual(VDID, 0xFFFFFFFF)) {
> +      Return()
> +    }
> +
> +    If(LAnd(PMEE, PMES)) {
> +      ADBG("HDAS GPEH")
> +      Store(1, PMES) // clear PME Status
> +      Notify(CAVS, 0x02)
> +    }
> +  }
> +
> +  // NHLT Table memory descriptor, returned from _DSM
> +  Name(NBUF, ResourceTemplate () {
> +    // NHLT table address (_MIN = NHLT 64bit pointer, _MAX = _MIN + _LEN -
> 1) and length (_LEN)
> +    QWordMemory (ResourceConsumer, , MinNotFixed, MaxNotFixed,
> NonCacheable, ReadOnly,
> +                0x1,                // AddressGranularity
> +                0x0000000000000000, // AddressMinimum _MIN
> +                0x0000000000000000, // AddressMaximum _MAX
> +                0x0,
> +                0x0,                // RangeLength _LEN
> +                , , NHLT, AddressRangeACPI,)
> +  })
> +
> +  Method(AUWA,0,Serialized)
> +  {
> +    If(LEqual(PCHS, 1)) {
> +      If(LEqual(\_SB.PC00.LPC0.CRID, 0x0)) { Return (1) } // Apply to SPT-H A0
> stepping (RevID = 0x0)
> +    } else {
> +    If(LEqual(\_SB.PC00.LPC0.CRID, 0x0)) { Return (1) } // Apply to SPT-LP A0
> stepping (RevID = 0x0)
> +    If(LEqual(\_SB.PC00.LPC0.CRID, 0x1)) { Return (1) } // Apply to SPT-LP A1
> stepping (RevID = 0x1)
> +    If(LEqual(\_SB.PC00.LPC0.CRID, 0x9)) { Return (1) } // Apply to SPT-LP A2
> stepping (RevID = 0x9)
> +    }
> +    Return (0)
> +  }
> +
> +  Method(_INI) {
> +    // Update resource according to NVS
> +    ADBG("HDAS _INI")
> +
> +    // Set NHLT base address and length
> +    CreateQWordField(NBUF, ^NHLT._MIN, NBAS)
> +    CreateQWordField(NBUF, ^NHLT._MAX, NMAS)
> +    CreateQWordField(NBUF, ^NHLT._LEN, NLEN)
> +    Store(NHLA, NBAS)
> +    Add(NHLA, Subtract(NHLL, 1), NMAS)
> +    Store(NHLL, NLEN)
> +
> +    If(LEqual(AUWA(), 1)) {
> +      Store(0, \_SB.PC00.CAVS.MBCG)
> +    }
> +  }
> +
> +  Method(_DSM, 0x4, Serialized, 0, UnknownObj, {BuffObj, IntObj, IntObj,
> PkgObj}) {
> +    // Arg0 - UUID: A69F886E-6CEB-4594-A41F-7B5DCE24C553 (Buffer)
> +    // Arg1 - Revision ID: 0x01 (Integer)
> +    // Arg2 - Function Index: 0x0 - 0x3 (Integer) - See below for details.
> +    // Arg3 - Depends on Function Index - See below for details.
> +    // Return - Depends on Function Index - See below for details.
> +
> +    ADBG("HDAS _DSM")
> +
> +    if(PCIC(Arg0)) { return(PCID(Arg0,Arg1,Arg2,Arg3)) }
> +
> +    // Verify UUID
> +    If (LEqual(Arg0, ToUUID ("A69F886E-6CEB-4594-A41F-7B5DCE24C553"))) {
> +
> +          Switch(ToInteger(Arg2)) {
> +
> +            // Function 0: Function Support Query
> +            // Arg2 - Function Index: 0x00 (Integer)
> +            // Arg3: Unused
> +            // Return: Bitmask of functions supported. (Buffer)
> +            Case(0) {
> +              // Supports function 0 - 3
> +              Return(Buffer(One) { 0x0F })
> +            }
> +
> +            // Function 1: Query Non HD Audio Descriptor Table
> +            //                    Used by the Intel Offload Engine Driver to discover the
> +            //                    non HD Audio devices supported by the Audio DSP.
> +            // Arg2 - Function Index: 0x01 (Integer)
> +            // Arg3 - Unused
> +            // Return - ACPI Table describing the non HD Audio links and devices
> supported by the ADSP (ResourceBuffer)
> +            Case(1) {
> +              ADBG("_DSM Fun 1 NHLT")
> +              // NBUF - Memory Resource Descriptor buffer with address and
> length of NHLT
> +              Return(NBUF)
> +            }
> +
> +            // Function 2: Query Feature Mask
> +            //                    Used by the Intel Offload Engine Driver to retrieve a
> bitmask
> +            //                    of features allowable on this platform.
> +            // Arg2 - Function Index: 0x02 (Integer)
> +            // Arg3: Unused
> +            // Return: Bitmask of supported features.
> +            Case (2) {
> +              ADBG("_DSM Fun 2 FMSK")
> +              // Bit 0 == '1', WoV is supported, Bit 0 == '0', WoV not supported
> +              // Bit 1 == '1', BT Sideband is supported, Bit 1 == '0', BT not supported
> +              // Bit 2 == '1', codec based VAD support allowable
> +              // Bit 3 - 4 Reserved
> +              // Bit 5 == '1', BT Intel HFP SCO is supported
> +              // Bit 6 == '1', BT Intel A2DP is supported
> +              // Bit 7 == '1', DSP based speech pre-processing disabled
> +              // Bit 8 == '1', Windows Voice Activation, Bit 8 == '0', Intel Wake on
> Voice
> +              // Bit 9 - 31 Reserved, shall be set to '0'
> +              // ADFM - NVS AudioDSP Feature Bit Mask updated from PchPolicy
> +              Return(ADFM)
> +            }
> +
> +            // Function 3: Query Pre/Post Processing Module Support
> +            //                    Used by the Intel Offload Engine Driver to determine if a
> +            //                    specified PP Module is allowed to be supported on this
> platform
> +            // Arg2 - Function Index: 0x03 (Integer)
> +            // Arg3 - UUID: Specifies the UUID of the PP module to check (Buffer)
> +            // Return - TRUE if PP Module supported, else FALSE.
> +            Case (3) {
> +              ADBG("_DSM Fun 3 PPMS")
> +              // ADPM - NVS AudioDSP Post-Processing Module Bit Mask updated
> from PchPolicy: HdaConfig->DspPpModuleMask
> +
> +              //
> +              // Example (to be updated with real GUIDs of supported 3rd party
> IP):
> +              //
> +              // 3rd Party DSP Processing Module 1 placeholder (enabled by policy
> HdaConfig->DspPpModuleMask |= BIT0)
> +              // Check PP module with GUID AABBCCDD-EEFF-1122-3344-
> 556677889900
> +              // If (LEqual(Arg3, ToUUID ("AABBCCDD-EEFF-1122-3344-
> 556677889900"))){
> +              //   Return(And(ADPM, 0x1)) // DspPpModuleMask[BIT0] /
> ADPM[BIT0] set - supported 3rd Party Processing Module 1(return true)
> +              // }
> +              //
> +              // 3rd Party DSP Processing Module 5 placeholder (enabled by policy
> HdaConfig->DspPpModuleMask |= BIT5)
> +              // Check PP module with GUID 11111111-2222-3333-4444-
> AABBCCDDEEFF
> +              // If (LEqual(Arg3, ToUUID ("11111111-2222-3333-4444-
> AABBCCDDEEFF"))){
> +              //   Return(And(ADPM, 0x20)) // DspPpModuleMask[BIT5] /
> ADPM[BIT5] set - supported 3rd Party Processing Module 5(return true)
> +              // }
> +              //
> +              // Implement for all supported PP modules
> +              //
> +              Return(Buffer() {0x00}) // Is not supported
> +            }
> +
> +            Default {
> +              // Function not supported (Arg2)
> +              ADBG("_DSM Fun NOK")
> +              Return(Buffer(One) { 0x00 })
> +            }
> +          } // Switch(Arg2) End
> +    } // If(Arg0, UUID) End
> +
> +
> +    // UUID not supported (Arg0)
> +    ADBG("_DSM UUID NOK")
> +    //Fix warning: not all control paths return a value
> +    Return(Buffer() {0x00})
> +  } // _DSM End
> +
> +} // end "High Definition Audio Controller"
> diff --git
> a/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/Pch
> Nvs.asl
> b/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/Pch
> Nvs.asl
> new file mode 100644
> index 0000000000..bd27ca7342
> --- /dev/null
> +++
> b/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/Pch
> Nvs.asl
> @@ -0,0 +1,271 @@
> +/** @file
> +
> +  @copyright
> +  Copyright 2013 - 2016 Intel Corporation. <BR>
> +
> +  SPDX-License-Identifier: BSD-2-Clause-Patent
> +**/
> +
> +  //
> +  // Define PCH NVS Area operatino region.
> +  //
> +
> +
> +
> +  OperationRegion(PNVA,SystemMemory,PNVB,PNVL)
> +  Field(PNVA,AnyAcc,Lock,Preserve)
> +  {
> +  Offset(0),      RCRV, 32, // Offset(0),     RC Revision
> +  Offset(4),      PCHS, 16, // Offset(4),     PCH Series
> +  Offset(6),      PCHG, 16, // Offset(6),     PCH Generation
> +  Offset(8),      RPA1, 32, // Offset(8),     Root Port address 1
> +  Offset(12),     RPA2, 32, // Offset(12),    Root Port address 2
> +  Offset(16),     RPA3, 32, // Offset(16),    Root Port address 3
> +  Offset(20),     RPA4, 32, // Offset(20),    Root Port address 4
> +  Offset(24),     RPA5, 32, // Offset(24),    Root Port address 5
> +  Offset(28),     RPA6, 32, // Offset(28),    Root Port address 6
> +  Offset(32),     RPA7, 32, // Offset(32),    Root Port address 7
> +  Offset(36),     RPA8, 32, // Offset(36),    Root Port address 8
> +  Offset(40),     RPA9, 32, // Offset(40),    Root Port address 9
> +  Offset(44),     RPAA, 32, // Offset(44),    Root Port address 10
> +  Offset(48),     RPAB, 32, // Offset(48),    Root Port address 11
> +  Offset(52),     RPAC, 32, // Offset(52),    Root Port address 12
> +  Offset(56),     RPAD, 32, // Offset(56),    Root Port address 13
> +  Offset(60),     RPAE, 32, // Offset(60),    Root Port address 14
> +  Offset(64),     RPAF, 32, // Offset(64),    Root Port address 15
> +  Offset(68),     RPAG, 32, // Offset(68),    Root Port address 16
> +  Offset(72),     RPAH, 32, // Offset(72),    Root Port address 17
> +  Offset(76),     RPAI, 32, // Offset(76),    Root Port address 18
> +  Offset(80),     RPAJ, 32, // Offset(80),    Root Port address 19
> +  Offset(84),     RPAK, 32, // Offset(84),    Root Port address 20
> +  Offset(88),     NHLA, 64, // Offset(88),    HD-Audio NHLT ACPI address
> +  Offset(96),     NHLL, 32, // Offset(96),    HD-Audio NHLT ACPI length
> +  Offset(100),    ADFM, 32, // Offset(100),   HD-Audio DSP Feature Mask
> +  Offset(104),    SBRG, 32, // Offset(104),   SBREG_BAR
> +  Offset(108),    GPEM, 32, // Offset(108),   GPP_X to GPE_DWX mapping
> +  Offset(112),    G2L0, 32, // Offset(112),   GPE 2-tier level edged enabled
> Gpio pads (Group Index 0)
> +  Offset(116),    G2L1, 32, // Offset(116),   GPE 2-tier level edged enabled
> Gpio pads (Group Index 1)
> +  Offset(120),    G2L2, 32, // Offset(120),   GPE 2-tier level edged enabled
> Gpio pads (Group Index 2)
> +  Offset(124),    G2L3, 32, // Offset(124),   GPE 2-tier level edged enabled
> Gpio pads (Group Index 3)
> +  Offset(128),    G2L4, 32, // Offset(128),   GPE 2-tier level edged enabled
> Gpio pads (Group Index 4)
> +  Offset(132),    G2L5, 32, // Offset(132),   GPE 2-tier level edged enabled
> Gpio pads (Group Index 5)
> +  Offset(136),    G2L6, 32, // Offset(136),   GPE 2-tier level edged enabled
> Gpio pads (Group Index 6)
> +  Offset(140),    G2L7, 32, // Offset(140),   GPE 2-tier level edged enabled
> Gpio pads (Group Index 7)
> +  Offset(144),    G2L8, 32, // Offset(144),   GPE 2-tier level edged enabled
> Gpio pads (Group Index 8)
> +  Offset(148),    G2L9, 32, // Offset(148),   GPE 2-tier level edged enabled
> Gpio pads (Group Index 9)
> +  Offset(152),    G2LA, 32, // Offset(152),   GPE 2-tier level edged enabled
> Gpio pads (Group Index 10)
> +  Offset(156),    G2LB, 32, // Offset(156),   GPE 2-tier level edged enabled
> Gpio pads (Group Index 11)
> +  Offset(160),    G2LC, 32, // Offset(160),   GPE 2-tier level edged enabled
> Gpio pads (Groip Index 12)
> +
> +  Offset(164),    PML1, 16, // Offset(164),   PCIE LTR max snoop Latency 1
> +  Offset(166),    PML2, 16, // Offset(166),   PCIE LTR max snoop Latency 2
> +  Offset(168),    PML3, 16, // Offset(168),   PCIE LTR max snoop Latency 3
> +  Offset(170),    PML4, 16, // Offset(170),   PCIE LTR max snoop Latency 4
> +  Offset(172),    PML5, 16, // Offset(172),   PCIE LTR max snoop Latency 5
> +  Offset(174),    PML6, 16, // Offset(174),   PCIE LTR max snoop Latency 6
> +  Offset(176),    PML7, 16, // Offset(176),   PCIE LTR max snoop Latency 7
> +  Offset(178),    PML8, 16, // Offset(178),   PCIE LTR max snoop Latency 8
> +  Offset(180),    PML9, 16, // Offset(180),   PCIE LTR max snoop Latency 9
> +  Offset(182),    PMLA, 16, // Offset(182),   PCIE LTR max snoop Latency 10
> +  Offset(184),    PMLB, 16, // Offset(184),   PCIE LTR max snoop Latency 11
> +  Offset(186),    PMLC, 16, // Offset(186),   PCIE LTR max snoop Latency 12
> +  Offset(188),    PMLD, 16, // Offset(188),   PCIE LTR max snoop Latency 13
> +  Offset(190),    PMLE, 16, // Offset(190),   PCIE LTR max snoop Latency 14
> +  Offset(192),    PMLF, 16, // Offset(192),   PCIE LTR max snoop Latency 15
> +  Offset(194),    PMLG, 16, // Offset(194),   PCIE LTR max snoop Latency 16
> +  Offset(196),    PMLH, 16, // Offset(196),   PCIE LTR max snoop Latency 17
> +  Offset(198),    PMLI, 16, // Offset(198),   PCIE LTR max snoop Latency 18
> +  Offset(200),    PMLJ, 16, // Offset(200),   PCIE LTR max snoop Latency 19
> +  Offset(202),    PMLK, 16, // Offset(202),   PCIE LTR max snoop Latency 20
> +  Offset(204),    PNL1, 16, // Offset(204),   PCIE LTR max no snoop Latency 1
> +  Offset(206),    PNL2, 16, // Offset(206),   PCIE LTR max no snoop Latency 2
> +  Offset(208),    PNL3, 16, // Offset(208),   PCIE LTR max no snoop Latency 3
> +  Offset(210),    PNL4, 16, // Offset(210),   PCIE LTR max no snoop Latency 4
> +  Offset(212),    PNL5, 16, // Offset(212),   PCIE LTR max no snoop Latency 5
> +  Offset(214),    PNL6, 16, // Offset(214),   PCIE LTR max no snoop Latency 6
> +  Offset(216),    PNL7, 16, // Offset(216),   PCIE LTR max no snoop Latency 7
> +  Offset(218),    PNL8, 16, // Offset(218),   PCIE LTR max no snoop Latency 8
> +  Offset(220),    PNL9, 16, // Offset(220),   PCIE LTR max no snoop Latency 9
> +  Offset(222),    PNLA, 16, // Offset(222),   PCIE LTR max no snoop Latency 10
> +  Offset(224),    PNLB, 16, // Offset(224),   PCIE LTR max no snoop Latency 11
> +  Offset(226),    PNLC, 16, // Offset(226),   PCIE LTR max no snoop Latency 12
> +  Offset(228),    PNLD, 16, // Offset(228),   PCIE LTR max no snoop Latency 13
> +  Offset(230),    PNLE, 16, // Offset(230),   PCIE LTR max no snoop Latency 14
> +  Offset(232),    PNLF, 16, // Offset(232),   PCIE LTR max no snoop Latency 15
> +  Offset(234),    PNLG, 16, // Offset(234),   PCIE LTR max no snoop Latency 16
> +  Offset(236),    PNLH, 16, // Offset(236),   PCIE LTR max no snoop Latency 17
> +  Offset(238),    PNLI, 16, // Offset(238),   PCIE LTR max no snoop Latency 18
> +  Offset(240),    PNLJ, 16, // Offset(240),   PCIE LTR max no snoop Latency 19
> +  Offset(242),    PNLK, 16, // Offset(242),   PCIE LTR max no snoop Latency 20
> +  Offset(244),    U0C0, 32, // Offset(244),   SerialIo Hidden UART0 BAR 0
> +  Offset(248),    U1C0, 32, // Offset(248),   SerialIo Hidden UART1 BAR 0
> +  Offset(252),    ADPM, 32, // Offset(252),   HD-Audio DSP Post-Processing
> Module Mask
> +  Offset(256),    XHPC, 8,  // Offset(256),   Number of HighSpeed ports
> implemented in XHCI controller
> +  Offset(257),    XRPC, 8,  // Offset(257),   Number of USBR ports
> implemented in XHCI controller
> +  Offset(258),    XSPC, 8,  // Offset(258),   Number of SuperSpeed ports
> implemented in XHCI controller
> +  Offset(259),    XSPA, 8,  // Offset(259),   Address of 1st SuperSpeed port
> +  Offset(260),    HPTB, 32, // Offset(260),   HPET base address
> +  Offset(264),    HPTE, 8,  // Offset(264),   HPET enable
> +  //110-bytes large SerialIo block
> +  Offset(265),    SMD0, 8,  // Offset(265),   SerialIo controller 0 (sdma) mode
> (0: disabled, 1: pci, 2: acpi, 3: debug port)
> +  Offset(266),    SMD1, 8,  // Offset(266),   SerialIo controller 1 (i2c0) mode (0:
> disabled, 1: pci, 2: acpi, 3: debug port)
> +  Offset(267),    SMD2, 8,  // Offset(267),   SerialIo controller 2 (i2c1) mode (0:
> disabled, 1: pci, 2: acpi, 3: debug port)
> +  Offset(268),    SMD3, 8,  // Offset(268),   SerialIo controller 3 (spi0) mode (0:
> disabled, 1: pci, 2: acpi, 3: debug port)
> +  Offset(269),    SMD4, 8,  // Offset(269),   SerialIo controller 4 (spi1) mode (0:
> disabled, 1: pci, 2: acpi, 3: debug port)
> +  Offset(270),    SMD5, 8,  // Offset(270),   SerialIo controller 5 (ua00) mode
> (0: disabled, 1: pci, 2: acpi, 3: debug port)
> +  Offset(271),    SMD6, 8,  // Offset(271),   SerialIo controller 6 (ua01) mode
> (0: disabled, 1: pci, 2: acpi, 3: debug port)
> +  Offset(272),    SMD7, 8,  // Offset(272),   SerialIo controller 7 (shdc) mode
> (0: disabled, 1: pci, 2: acpi, 3: debug port)
> +  Offset(273),    SMD8, 8,  // Offset(273),   SerialIo controller 8 (shdc) mode
> (0: disabled, 1: pci, 2: acpi, 3: debug port)
> +  Offset(274),    SMD9, 8,  // Offset(274),   SerialIo controller 9 (shdc) mode
> (0: disabled, 1: pci, 2: acpi, 3: debug port)
> +  Offset(275),    SMDA, 8,  // Offset(275),   SerialIo controller A (shdc) mode
> (0: disabled, 1: pci, 2: acpi, 3: debug port)
> +  Offset(276),    SIR0, 8,  // Offset(276),   SerialIo controller 0 (sdma) irq
> number
> +  Offset(277),    SIR1, 8,  // Offset(277),   SerialIo controller 1 (i2c0) irq
> number
> +  Offset(278),    SIR2, 8,  // Offset(278),   SerialIo controller 2 (i2c1) irq
> number
> +  Offset(279),    SIR3, 8,  // Offset(279),   SerialIo controller 3 (spi0) irq
> number
> +  Offset(280),    SIR4, 8,  // Offset(280),   SerialIo controller 4 (spi1) irq
> number
> +  Offset(281),    SIR5, 8,  // Offset(281),   SerialIo controller 5 (ua00) irq
> number
> +  Offset(282),    SIR6, 8,  // Offset(282),   SerialIo controller 6 (ua01) irq
> number
> +  Offset(283),    SIR7, 8,  // Offset(283),   SerialIo controller 7 (shdc) irq
> number
> +  Offset(284),    SIR8, 8,  // Offset(284),   SerialIo controller 8 (shdc) irq
> number
> +  Offset(285),    SIR9, 8,  // Offset(285),   SerialIo controller 9 (shdc) irq
> number
> +  Offset(286),    SIRA, 8,  // Offset(286),   SerialIo controller A (shdc) irq
> number
> +  Offset(287),    SB00, 32, // Offset(287),   SerialIo controller 0 (sdma) BAR0
> +  Offset(291),    SB01, 32, // Offset(291),   SerialIo controller 1 (i2c0) BAR0
> +  Offset(295),    SB02, 32, // Offset(295),   SerialIo controller 2 (i2c1) BAR0
> +  Offset(299),    SB03, 32, // Offset(299),   SerialIo controller 3 (spi0) BAR0
> +  Offset(303),    SB04, 32, // Offset(303),   SerialIo controller 4 (spi1) BAR0
> +  Offset(307),    SB05, 32, // Offset(307),   SerialIo controller 5 (ua00) BAR0
> +  Offset(311),    SB06, 32, // Offset(311),   SerialIo controller 6 (ua01) BAR0
> +  Offset(315),    SB07, 32, // Offset(315),   SerialIo controller 7 (shdc) BAR0
> +  Offset(319),    SB08, 32, // Offset(319),   SerialIo controller 8 (shdc) BAR0
> +  Offset(323),    SB09, 32, // Offset(323),   SerialIo controller 9 (shdc) BAR0
> +  Offset(327),    SB0A, 32, // Offset(327),   SerialIo controller A (shdc) BAR0
> +  Offset(331),    SB10, 32, // Offset(331),   SerialIo controller 0 (sdma) BAR1
> +  Offset(335),    SB11, 32, // Offset(335),   SerialIo controller 1 (i2c0) BAR1
> +  Offset(339),    SB12, 32, // Offset(339),   SerialIo controller 2 (i2c1) BAR1
> +  Offset(343),    SB13, 32, // Offset(343),   SerialIo controller 3 (spi0) BAR1
> +  Offset(347),    SB14, 32, // Offset(347),   SerialIo controller 4 (spi1) BAR1
> +  Offset(351),    SB15, 32, // Offset(351),   SerialIo controller 5 (ua00) BAR1
> +  Offset(355),    SB16, 32, // Offset(355),   SerialIo controller 6 (ua01) BAR1
> +  Offset(359),    SB17, 32, // Offset(359),   SerialIo controller 7 (shdc) BAR1
> +  Offset(363),    SB18, 32, // Offset(363),   SerialIo controller 8 (shdc) BAR1
> +  Offset(367),    SB19, 32, // Offset(367),   SerialIo controller 9 (shdc) BAR1
> +  Offset(371),    SB1A, 32, // Offset(371),   SerialIo controller A (shdc) BAR1
> +  //end of SerialIo block
> +  Offset(375),    GPEN, 8,  // Offset(375),   GPIO enabled
> +  Offset(376),    SGIR, 8,  // Offset(376),   GPIO IRQ
> +  Offset(377),    NIT1, 8,  // Offset(377),   RST PCIe Storage Cycle Router#1
> Interface Type
> +  Offset(378),    NIT2, 8,  // Offset(378),   RST PCIe Storage Cycle Router#2
> Interface Type
> +  Offset(379),    NIT3, 8,  // Offset(379),   RST PCIe Storage Cycle Router#3
> Interface Type
> +  Offset(380),    NPM1, 8,  // Offset(380),   RST PCIe Storage Cycle Router#1
> Power Management Capability Pointer
> +  Offset(381),    NPM2, 8,  // Offset(381),   RST PCIe Storage Cycle Router#2
> Power Management Capability Pointer
> +  Offset(382),    NPM3, 8,  // Offset(382),   RST PCIe Storage Cycle Router#3
> Power Management Capability Pointer
> +  Offset(383),    NPC1, 8,  // Offset(383),   RST PCIe Storage Cycle Router#1
> PCIe Capabilities Pointer
> +  Offset(384),    NPC2, 8,  // Offset(384),   RST PCIe Storage Cycle Router#2
> PCIe Capabilities Pointer
> +  Offset(385),    NPC3, 8,  // Offset(385),   RST PCIe Storage Cycle Router#3
> PCIe Capabilities Pointer
> +  Offset(386),    NL11, 16, // Offset(386),   RST PCIe Storage Cycle Router#1
> L1SS Capability Pointer
> +  Offset(388),    NL12, 16, // Offset(388),   RST PCIe Storage Cycle Router#2
> L1SS Capability Pointer
> +  Offset(390),    NL13, 16, // Offset(390),   RST PCIe Storage Cycle Router#3
> L1SS Capability Pointer
> +  Offset(392),    ND21, 8,  // Offset(392),   RST PCIe Storage Cycle Router#1
> Endpoint L1SS Control Data2
> +  Offset(393),    ND22, 8,  // Offset(393),   RST PCIe Storage Cycle Router#2
> Endpoint L1SS Control Data2
> +  Offset(394),    ND23, 8,  // Offset(394),   RST PCIe Storage Cycle Router#3
> Endpoint L1SS Control Data2
> +  Offset(395),    ND11, 32, // Offset(395),   RST PCIe Storage Cycle Router#1
> Endpoint L1SS Control Data1
> +  Offset(399),    ND12, 32, // Offset(399),   RST PCIe Storage Cycle Router#2
> Endpoint L1SS Control Data1
> +  Offset(403),    ND13, 32, // Offset(403),   RST PCIe Storage Cycle Router#3
> Endpoint L1SS Control Data1
> +  Offset(407),    NLR1, 16, // Offset(407),   RST PCIe Storage Cycle Router#1
> LTR Capability Pointer
> +  Offset(409),    NLR2, 16, // Offset(409),   RST PCIe Storage Cycle Router#2
> LTR Capability Pointer
> +  Offset(411),    NLR3, 16, // Offset(411),   RST PCIe Storage Cycle Router#3
> LTR Capability Pointer
> +  Offset(413),    NLD1, 32, // Offset(413),   RST PCIe Storage Cycle Router#1
> Endpoint LTR Data
> +  Offset(417),    NLD2, 32, // Offset(417),   RST PCIe Storage Cycle Router#2
> Endpoint LTR Data
> +  Offset(421),    NLD3, 32, // Offset(421),   RST PCIe Storage Cycle Router#3
> Endpoint LTR Data
> +  Offset(425),    NEA1, 16, // Offset(425),   RST PCIe Storage Cycle Router#1
> Endpoint LCTL Data
> +  Offset(427),    NEA2, 16, // Offset(427),   RST PCIe Storage Cycle Router#2
> Endpoint LCTL Data
> +  Offset(429),    NEA3, 16, // Offset(429),   RST PCIe Storage Cycle Router#3
> Endpoint LCTL Data
> +  Offset(431),    NEB1, 16, // Offset(431),   RST PCIe Storage Cycle Router#1
> Endpoint DCTL Data
> +  Offset(433),    NEB2, 16, // Offset(433),   RST PCIe Storage Cycle Router#2
> Endpoint DCTL Data
> +  Offset(435),    NEB3, 16, // Offset(435),   RST PCIe Storage Cycle Router#3
> Endpoint DCTL Data
> +  Offset(437),    NEC1, 16, // Offset(437),   RST PCIe Storage Cycle Router#1
> Endpoint DCTL2 Data
> +  Offset(439),    NEC2, 16, // Offset(439),   RST PCIe Storage Cycle Router#2
> Endpoint DCTL2 Data
> +  Offset(441),    NEC3, 16, // Offset(441),   RST PCIe Storage Cycle Router#3
> Endpoint DCTL2 Data
> +  Offset(443),    NRA1, 16, // Offset(443),   RST PCIe Storage Cycle Router#1
> RootPort DCTL2 Data
> +  Offset(445),    NRA2, 16, // Offset(445),   RST PCIe Storage Cycle Router#2
> RootPort DCTL2 Data
> +  Offset(447),    NRA3, 16, // Offset(447),   RST PCIe Storage Cycle Router#3
> RootPort DCTL2 Data
> +  Offset(449),    NMB1, 32, // Offset(449),   RST PCIe Storage Cycle Router#1
> Endpoint unique MSI-X Table BAR
> +  Offset(453),    NMB2, 32, // Offset(453),   RST PCIe Storage Cycle Router#2
> Endpoint unique MSI-X Table BAR
> +  Offset(457),    NMB3, 32, // Offset(457),   RST PCIe Storage Cycle Router#3
> Endpoint unique MSI-X Table BAR
> +  Offset(461),    NMV1, 32, // Offset(461),   RST PCIe Storage Cycle Router#1
> Endpoint unique MSI-X Table BAR value
> +  Offset(465),    NMV2, 32, // Offset(465),   RST PCIe Storage Cycle Router#2
> Endpoint unique MSI-X Table BAR value
> +  Offset(469),    NMV3, 32, // Offset(469),   RST PCIe Storage Cycle Router#3
> Endpoint unique MSI-X Table BAR value
> +  Offset(473),    NPB1, 32, // Offset(473),   RST PCIe Storage Cycle Router#1
> Endpoint unique MSI-X PBA BAR
> +  Offset(477),    NPB2, 32, // Offset(477),   RST PCIe Storage Cycle Router#2
> Endpoint unique MSI-X PBA BAR
> +  Offset(481),    NPB3, 32, // Offset(481),   RST PCIe Storage Cycle Router#3
> Endpoint unique MSI-X PBA BAR
> +  Offset(485),    NPV1, 32, // Offset(485),   RST PCIe Storage Cycle Router#1
> Endpoint unique MSI-X PBA BAR value
> +  Offset(489),    NPV2, 32, // Offset(489),   RST PCIe Storage Cycle Router#2
> Endpoint unique MSI-X PBA BAR value
> +  Offset(493),    NPV3, 32, // Offset(493),   RST PCIe Storage Cycle Router#3
> Endpoint unique MSI-X PBA BAR value
> +  Offset(497),        , 8,  // Offset(497),   Flag indicating Exit Boot Service, to
> inform SMM
> +  Offset(498),    SXRB, 32, // Offset(498),   Sx handler reserved MMIO base
> +  Offset(502),    SXRS, 32, // Offset(502),   Sx handler reserved MMIO size
> +  Offset(506),    CIOE, 8,  // Offset(506),   Cio2 Device Enabled as ACPI device
> +  Offset(507),    CIOI, 8,  // Offset(507),   Cio2 Interrupt Number
> +  Offset(508),    TAEN, 8,  // Offset(508),   Thermal Device Acpi mode enabled
> +  Offset(509),    TIRQ, 8,  // Offset(509),   Thermal Device IRQ number
> +  Offset(510),    XWMB, 32, // Offset(510),   XHCI memory base address
> +  Offset(514),    EMH4, 8,  // Offset(514),   eMMC HS400 mode enabled
> +  Offset(515),    CSKU, 8,  // Offset(515),   CPU SKU
> +  Offset(516),    ITA0, 16, // Offset(516),
> +  Offset(518),    ITA1, 16, // Offset(518),
> +  Offset(520),    ITA2, 16, // Offset(520),
> +  Offset(522),    ITA3, 16, // Offset(522),
> +  Offset(524),    ITS0, 8,  // Offset(524),
> +  Offset(525),    ITS1, 8,  // Offset(525),
> +  Offset(526),    ITS2, 8,  // Offset(526),
> +  Offset(527),    ITS3, 8,  // Offset(527),
> +  Offset(528),    LTR1, 8,  // Offset(528),   Latency Tolerance Reporting Enable
> +  Offset(529),    LTR2, 8,  // Offset(529),   Latency Tolerance Reporting Enable
> +  Offset(530),    LTR3, 8,  // Offset(530),   Latency Tolerance Reporting Enable
> +  Offset(531),    LTR4, 8,  // Offset(531),   Latency Tolerance Reporting Enable
> +  Offset(532),    LTR5, 8,  // Offset(532),   Latency Tolerance Reporting Enable
> +  Offset(533),    LTR6, 8,  // Offset(533),   Latency Tolerance Reporting Enable
> +  Offset(534),    LTR7, 8,  // Offset(534),   Latency Tolerance Reporting Enable
> +  Offset(535),    LTR8, 8,  // Offset(535),   Latency Tolerance Reporting Enable
> +  Offset(536),    LTR9, 8,  // Offset(536),   Latency Tolerance Reporting Enable
> +  Offset(537),    LTRA, 8,  // Offset(537),   Latency Tolerance Reporting Enable
> +  Offset(538),    LTRB, 8,  // Offset(538),   Latency Tolerance Reporting Enable
> +  Offset(539),    LTRC, 8,  // Offset(539),   Latency Tolerance Reporting Enable
> +  Offset(540),    LTRD, 8,  // Offset(540),   Latency Tolerance Reporting Enable
> +  Offset(541),    LTRE, 8,  // Offset(541),   Latency Tolerance Reporting Enable
> +  Offset(542),    LTRF, 8,  // Offset(542),   Latency Tolerance Reporting Enable
> +  Offset(543),    LTRG, 8,  // Offset(543),   Latency Tolerance Reporting Enable
> +  Offset(544),    LTRH, 8,  // Offset(544),   Latency Tolerance Reporting Enable
> +  Offset(545),    LTRI, 8,  // Offset(545),   Latency Tolerance Reporting Enable
> +  Offset(546),    LTRJ, 8,  // Offset(546),   Latency Tolerance Reporting Enable
> +  Offset(547),    LTRK, 8,  // Offset(547),   Latency Tolerance Reporting Enable
> +  Offset(548),    OBF1, 8,  // Offset(548),   Optimized Buffer Flush and Fill
> +  Offset(549),    OBF2, 8,  // Offset(549),   Optimized Buffer Flush and Fill
> +  Offset(550),    OBF3, 8,  // Offset(550),   Optimized Buffer Flush and Fill
> +  Offset(551),    OBF4, 8,  // Offset(551),   Optimized Buffer Flush and Fill
> +  Offset(552),    OBF5, 8,  // Offset(552),   Optimized Buffer Flush and Fill
> +  Offset(553),    OBF6, 8,  // Offset(553),   Optimized Buffer Flush and Fill
> +  Offset(554),    OBF7, 8,  // Offset(554),   Optimized Buffer Flush and Fill
> +  Offset(555),    OBF8, 8,  // Offset(555),   Optimized Buffer Flush and Fill
> +  Offset(556),    OBF9, 8,  // Offset(556),   Optimized Buffer Flush and Fill
> +  Offset(557),    OBFA, 8,  // Offset(557),   Optimized Buffer Flush and Fill
> +  Offset(558),    OBFB, 8,  // Offset(558),   Optimized Buffer Flush and Fill
> +  Offset(559),    OBFC, 8,  // Offset(559),   Optimized Buffer Flush and Fill
> +  Offset(560),    OBFD, 8,  // Offset(560),   Optimized Buffer Flush and Fill
> +  Offset(561),    OBFE, 8,  // Offset(561),   Optimized Buffer Flush and Fill
> +  Offset(562),    OBFF, 8,  // Offset(562),   Optimized Buffer Flush and Fill
> +  Offset(563),    OBFG, 8,  // Offset(563),   Optimized Buffer Flush and Fill
> +  Offset(564),    OBFH, 8,  // Offset(564),   Optimized Buffer Flush and Fill
> +  Offset(565),    OBFI, 8,  // Offset(565),   Optimized Buffer Flush and Fill
> +  Offset(566),    OBFJ, 8,  // Offset(566),   Optimized Buffer Flush and Fill
> +  Offset(567),    OBFK, 8,  // Offset(567),   Optimized Buffer Flush and Fill
> +  Offset(568),    ECR1, 8,  // Offset(568),   External Change Request
> +  Offset(569),    AG1L, 64, // Offset(569),   HDA PP module custom GUID 1 -
> first 64bit  [0-63]
> +  Offset(577),    AG1H, 64, // Offset(577),   HDA PP module custom GUID 1 -
> second 64bit [64-127]
> +  Offset(585),    AG2L, 64, // Offset(585),   HDA PP module custom GUID 2 -
> first 64bit  [0-63]
> +  Offset(593),    AG2H, 64, // Offset(593),   HDA PP module custom GUID 2 -
> second 64bit [64-127]
> +  Offset(601),    AG3L, 64, // Offset(601),   HDA PP module custom GUID 3 -
> first 64bit  [0-63]
> +  Offset(609),    AG3H, 64, // Offset(609),   HDA PP module custom GUID 3 -
> second 64bit [64-127]
> +  Offset(617),    MCFG, 32  // Offset(617),   PcieMmCfgBaseAddress
> +  }
> diff --git
> a/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/Pch
> Pcie.asl
> b/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/Pch
> Pcie.asl
> new file mode 100644
> index 0000000000..21d68c55bc
> --- /dev/null
> +++
> b/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/Pch
> Pcie.asl
> @@ -0,0 +1,203 @@
> +/** @file
> +
> +  @copyright
> +  Copyright 1999 - 2015 Intel Corporation. <BR>
> +
> +  SPDX-License-Identifier: BSD-2-Clause-Patent
> +**/
> +
> +  OperationRegion(PXCS,PCI_Config,0x00,0x480)
> +  Field(PXCS,AnyAcc, NoLock, Preserve)
> +  {
> +    Offset(0),
> +    VDID, 32,
> +    Offset(0x50), // LCTL - Link Control Register
> +    L0SE, 1,      // 0, L0s Entry Enabled
> +    , 3,
> +    LDIS, 1,
> +    , 3,
> +    Offset(0x52), // LSTS - Link Status Register
> +    , 13,
> +    LASX, 1,      // 0, Link Active Status
> +    Offset(0x5A), // SLSTS[7:0] - Slot Status Register
> +    ABPX, 1,      // 0, Attention Button Pressed
> +    , 2,
> +    PDCX, 1,      // 3, Presence Detect Changed
> +    , 2,
> +    PDSX, 1,      // 6, Presence Detect State
> +    , 1,
> +    Offset(0x60), // RSTS - Root Status Register
> +    , 16,
> +    PSPX, 1,      // 16,  PME Status
> +    Offset(0xA4),
> +    D3HT, 2,      // Power State
> +    Offset(0xD8), // MPC - Miscellaneous Port Configuration Register
> +    , 30,
> +    HPEX, 1,      // 30,  Hot Plug SCI Enable
> +    PMEX, 1,      // 31,  Power Management SCI Enable
> +    Offset(0xE2), // RPPGEN - Root Port Power Gating Enable
> +    , 2,
> +    L23E, 1,      // 2,   L23_Rdy Entry Request (L23ER)
> +    L23R, 1,       // 3,   L23_Rdy to Detect Transition (L23R2DT)
> +    Offset(0x324),
> +    , 3,
> +    LEDM, 1,       // PCIEDBG.DMIL1EDM
> +    Offset(0x420), // Offset 420h: PCIEPMECTL - PCIe PM Extension Control
> +    , 30,
> +    DPGE, 1,       // PCIEPMECTL[30]: Disabled, Detect and L23_Rdy State PHY
> Lane Power Gating Enable (DLSULPPGE):
> +  }
> +  Field(PXCS,AnyAcc, NoLock, WriteAsZeros)
> +  {
> +    Offset(0xDC), // SMSCS - SMI/SCI Status Register
> +    , 30,
> +    HPSX, 1,      // 30,  Hot Plug SCI Status
> +    PMSX, 1       // 31,  Power Management SCI Status
> +  }
> +
> +
> +  Name(LTRV, Package(){0,0,0,0})
> +
> +  //
> +  // _DSM Device Specific Method
> +  //
> +  // Arg0: UUID Unique function identifier
> +  // Arg1: Integer Revision Level
> +  // Arg2: Integer Function Index (0 = Return Supported Functions)
> +  // Arg3: Package Parameters
> +  Method(_DSM, 4, Serialized) {
> +    //
> +    // Switch based on which unique function identifier was passed in
> +    //
> +    If (LEqual(Arg0, ToUUID ("E5C937D0-3553-4d7a-9117-EA4D19C3434D"))) {
> +      //
> +      // _DSM Definitions for Latency Tolerance Reporting
> +      //
> +      // Arguments:
> +      // Arg0: UUID: E5C937D0-3553-4d7a-9117-EA4D19C3434D
> +      // Arg1: Revision ID: 2
> +      // Arg2: Function Index: 1, 4 or 6
> +      // Arg3: Empty Package
> +      //
> +      // Return:
> +      // A Package of four integers corresponding with the LTR encoding
> defined
> +      // in the PCI Express Base Specification, as follows:
> +      // Integer 0: Maximum Snoop Latency Scale
> +      // Integer 1: Maximum Snoop Latency Value
> +      // Integer 2: Maximum No-Snoop Latency Scale
> +      // Integer 3: Maximum No-Snoop Latency Value
> +      // These values correspond directly to the LTR Extended Capability
> Structure
> +      // fields described in the PCI Express Base Specification.
> +      //
> +      //
> +      // Switch by function index
> +      //
> +      Switch(ToInteger(Arg2)) {
> +        //
> +        // Function Index:0
> +        // Standard query - A bitmask of functions supported
> +        //
> +        Case (0) {
> +          Name(OPTS,Buffer(2){0,0})
> +          CreateBitField(OPTS,0,FUN0)
> +          CreateBitField(OPTS,4,FUN4)
> +          CreateBitField(OPTS,6,FUN6)
> +          CreateBitField(OPTS,8,FUN8)
> +          CreateBitField(OPTS,9,FUN9)
> +
> +          if (LGreaterEqual(Arg1, 2)){ // test Arg1 for Revision ID: 2
> +            Store(1,FUN0)
> +            if (LTRE){
> +              Store(1,Fun6)
> +            }
> +            if (OBFF){
> +              Store(1,Fun4)
> +            }
> +            if(LEqual(ECR1,1)){
> +              if (LGreaterEqual(Arg1, 3)){ // test Arg1 for Revision ID: 3
> +                Store(1,Fun8)
> +                Store(1,Fun9)
> +              }
> +            }
> +          }
> +          Return (OPTS)
> +        }
> +        //
> +        // Function Index: 4
> +        //
> +        Case(4) {
> +          if (LGreaterEqual(Arg1, 2)){ // test Arg1 for Revision ID: 2
> +            if (OBFN){
> +              Return (Buffer () {0,0,0,0,0,0,0,0,0,0,0,8,0,0,0,0}) // OBFF capable,
> offset 4[08h]
> +            } else {
> +              Return (Buffer () {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0})
> +            }
> +          }
> +        }
> +        //
> +        // Function Index: 6
> +        // LTR Extended Capability Structure
> +        //
> +        Case(6) {
> +          if (LGreaterEqual(Arg1, 2)){ // test Arg1 for Revision ID: 2
> +            if (LTRN){
> +              if (LOr(LEqual(LMSL, 0),LEqual(LNSL, 0)))
> +              {
> +                if (LEqual (PCHS, SPTH)) {
> +                  Store (0x0846, LMSL)
> +                  Store (0x0846, LNSL)
> +                } elseif (LEqual (PCHS, SPTL)) {
> +                  Store (0x1003, LMSL)
> +                  Store (0x1003, LNSL)
> +                }
> +              }
> +              Store(And(ShiftRight(LMSL,10),7), Index(LTRV, 0))
> +              Store(And(LMSL,0x3FF), Index(LTRV, 1))
> +              Store(And(ShiftRight(LNSL,10),7), Index(LTRV, 2))
> +              Store(And(LNSL,0x3FF), Index(LTRV, 3))
> +
> +              Return (LTRV)
> +            } else {
> +              Return (0)
> +            }
> +          }
> +        }
> +        Case(8) { //ECR ACPI additions for FW latency optimizations, DSM for
> Avoiding Power-On Reset Delay Duplication on Sx Resume
> +          if(LEqual(ECR1,1)){
> +            if (LGreaterEqual(Arg1, 3)) { // test Arg1 for Revision ID: 3
> +              return (1)
> +            }
> +          }
> +        }
> +        Case(9) { //ECR ACPI additions for FW latency optimizations, DSM for
> Specifying Device Readiness Durations
> +          if(LEqual(ECR1,1)){
> +            if (LGreaterEqual(Arg1, 3)) { // test Arg1 for Revision ID: 3
> +              return(Package(5){50000,Ones,Ones,50000,Ones})
> +            }
> +          }
> +        }
> +      } // End of switch(Arg2)
> +  } // End of if
> +    return (Buffer() {0x00})
> +  } // End of _DSM
> +
> +  Device(PXSX)
> +  {
> +    Name(_ADR, 0x00000000)
> +
> +    // NOTE:  Any PCIE Hot-Plug dependency for this port is
> +    // specific to the CRB.  Please modify the code based on
> +    // your platform requirements.
> +    Method(_PRW, 0) { Return(GPRW(0x09, 4)) }  // can wakeup from S4
> state
> +  }
> +
> +  //
> +  // PCI_EXP_STS Handler for PCIE Root Port
> +  //
> +  Method(HPME,0,Serialized) {
> +    If(LAnd(LNotEqual(VDID,0xFFFFFFFF), LEqual(PMSX,1))) { //if port exists
> and has PME SCI Status set...
> +      Notify (PXSX, 0x2) //notify child device; this will cause its driver to clear
> PME_Status from device
> +      Store(1,PMSX) // clear rootport's PME SCI status
> +      Store(1,PSPX) // consume one pending PME notification to prevent it
> from blocking the queue
> +    }
> +  }
> +
> diff --git
> a/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/Pch
> Sata.asl
> b/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/Pch
> Sata.asl
> new file mode 100644
> index 0000000000..4150833906
> --- /dev/null
> +++
> b/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/Pch
> Sata.asl
> @@ -0,0 +1,50 @@
> +/** @file
> +
> +  @copyright
> +  Copyright 2013 - 2020 Intel Corporation. <BR>
> +
> +  SPDX-License-Identifier: BSD-2-Clause-Patent
> +**/
> +
> +#define ROOTPORT_READ           0
> +#define ROOTPORT_WRITE          1
> +#define ENDPOINT_READ           2
> +#define ENDPOINT_WRITE          3
> +
> +//
> +// SDSM is Device Specific Method supporting AHCI DEVSLP
> +// It is not guaranteed to be available on every boot
> +//
> +// move one level up to Pch.asl
> +
> +    Method(_DSM,4,serialized){
> +      if(PCIC(Arg0)) { return(PCID(Arg0,Arg1,Arg2,Arg3)) };
> +      if(CondRefOf(\_SB.PC00.SAT0.SDSM)) { return
> (\_SB.PC00.SAT0.SDSM(Arg0,Arg1,Arg2,Arg3)) };
> +      Return(Buffer() {0})
> +    }
> +
> +    Device(PRT0)
> +    {
> +      Name(_ADR,0x0000FFFF)  // Port 0
> +    }
> +    Device(PRT1)
> +    {
> +      Name(_ADR,0x0001FFFF)  // Port 1
> +    }
> +    Device(PRT2)
> +    {
> +      Name(_ADR,0x0002FFFF)  // Port 2
> +    }
> +    Device(PRT3)
> +    {
> +      Name(_ADR,0x0003FFFF)  // Port 3
> +    }
> +    Device(PRT4)
> +    {
> +      Name(_ADR,0x0004FFFF)  // Port 4
> +    }
> +    Device(PRT5)
> +    {
> +      Name(_ADR,0x0005FFFF)  // Port 5
> +    }
> +
> diff --git
> a/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/Pch
> Xhci.asl
> b/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/Pch
> Xhci.asl
> new file mode 100644
> index 0000000000..5b9d7ed57e
> --- /dev/null
> +++
> b/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/Pch
> Xhci.asl
> @@ -0,0 +1,558 @@
> +/** @file
> +
> +  @copyright
> +  Copyright 2010 - 2020 Intel Corporation. <BR>
> +
> +  SPDX-License-Identifier: BSD-2-Clause-Patent
> +**/
> +
> +External(\_SB.PC00.XHCI.PS0X, MethodObj)
> +External(\_SB.PC00.XHCI.PS3X, MethodObj)
> +External(\_SB.PC00.XHCI.RHUB.PS0X, MethodObj)
> +External(\_SB.PC00.XHCI.RHUB.PS2X, MethodObj)
> +External(\_SB.PC00.XHCI.RHUB.PS3X, MethodObj)
> +External(\_SB.PC00.XHCI.RHUB.INIR, MethodObj)
> +
> +
> +Scope(\_SB_.PC00.XHCI) {
> +
> +    OperationRegion(XPRT,PCI_Config,0x00,0x100)
> +    Field(XPRT,AnyAcc,NoLock,Preserve)
> +    {
> +      DVID, 16,
> +      Offset(0x74),
> +      D0D3,  2,  // 0x74 BIT[1:0]
> +          ,  6,
> +      PMEE,  1,  // PME Enable
> +          ,  6,
> +      PMES,  1,  // PME Status
> +      Offset(0xA8), // SSCFG Reg for WPTLP
> +          , 13,
> +      MW13,  1,  // 0xA8 BIT[13]
> +      MW14,  1,  // 0xA8 BIT[14]
> +          , 17,
> +      Offset(0xB0), // SSCFG Reg for LPTLP
> +          , 13,
> +      MB13,  1,  // 0xB0 BIT[13]
> +      MB14,  1,  // 0xB0 BIT[14]
> +          , 17,
> +      Offset(0xD0),
> +      PR2,  32,  // XUSB2PR: xHC USB 2.0 Port Routing Register.
> +      PR2M, 32,  // XUSB2PRM: xHC USB 2.0 Port Routing Mask Register.
> +      PR3,  32,  // USB3_PSSEN: USB3.0 Port SuperSpeed Enable Register.
> +      PR3M, 32   // USB3PRM: USB3.0 Port Routing Mask Register
> +    }
> +
> +    //
> +    // Variable to store the maximum D state supported in S0.
> +    //
> +    Name (XFLT, 0)
> +    //
> +    // XHCI controller won't go into D3Hot during S0 until _DSM method is
> evaluated by filter driver.
> +    //
> +    Method(_DSM,4,serialized){
> +      If(PCIC(Arg0)) { return(PCID(Arg0,Arg1,Arg2,Arg3)) }
> +      //
> +      // Check GUID ac340cb7-e901-45bf-b7e6-2b34ec931e23
> +      //
> +      If(LEqual(Arg0, Buffer(0x10) { 0xb7, 0x0c, 0x34, 0xac, 0x01, 0xe9, 0xbf,
> 0x45, 0xb7, 0xe6, 0x2b, 0x34, 0xec, 0x93, 0x1e, 0x23 }))
> +      {
> +        //
> +        // Only Supported value is "0x3"
> +        //
> +        If(LEqual(Arg1, 0x3))
> +        {
> +          Store(Arg1,XFLT)
> +        }
> +      }
> +      Return(Buffer() {0})
> +    }
> +
> +    Method(_S3D, 0, NotSerialized)
> +    {
> +      Return(3)
> +    }
> +    Method(_S4D, 0, NotSerialized)
> +    {
> +      Return(3)
> +    }
> +    Method(_S3W, 0, NotSerialized)
> +    {
> +      Return(3)
> +    }
> +    Method(_S4W, 0, NotSerialized)
> +    {
> +      Return(3)
> +    }
> +
> +    //
> +    // Once the filter driver is installed, D3 is allowed.
> +    //
> +    Method(_S0W, 0x0, NotSerialized)
> +    {
> +      If(LEqual(XFLT, Zero))
> +      {
> +        Return(0x0)
> +      }
> +      Else
> +      {
> +        Return(0x3)
> +      }
> +    }
> +
> +    Method(_PRW, 0)
> +    {
> +      Return(GPRW(0x6D, 4)) // can wakeup from S4 state
> +    }
> +
> +    Method(_DSW, 3)
> +    {
> +      Store(Arg0, PMEE)
> +    }
> +
> +    Method(_INI) {
> +      // _INI for RTD3 run conditionally if implemented in platform specific
> code
> +      If(CondRefOf(\_SB.PC00.XHCI.RHUB.INIR)) {      // _INI for RTD3
> +        \_SB.PC00.XHCI.RHUB.INIR()
> +      }
> +    }
> +
> +    //
> +    // GPE handler for XHCI, this is part of _Lxx handler for bus 0 PME
> +    //
> +    Method(GPEH)
> +    {
> +      If(LEqual(DVID, 0xFFFF)) {
> +        Return()
> +      }
> +      Store(PMES, Local0)
> +      Store(1, PMES) // clear PME Status
> +      If(LAnd(PMEE, Local0)) {
> +        Notify(XHCI, 0x02)
> +      }
> +    }
> +
> +    OperationRegion(XHCP, SystemMemory, Add(MCFG, 0xA0000), 0x100)
> +    Field(XHCP,AnyAcc,Lock,Preserve)
> +    {
> +      Offset(0x4),
> +      PDBM, 16,
> +      Offset(0x10),
> +      MEMB, 64
> +    }
> +
> +    //
> +    // USRA (USbR port Address), method for calculating address of first USBR
> port in XHCI controller
> +    //
> +    Method(USRA,0,Serialized) {
> +      If(LEqual(PCHV, SPTH)) { // SPT-H
> +        Return (15)
> +      } Else {                 // SPT-LP
> +        Return (11)
> +      }
> +    }
> +
> +    //
> +    // SSPA (SuperSpeed Port Address), method for calculating address of
> first SS port in XHCI controller
> +    //
> +    Method(SSPA,0,Serialized) {
> +      If(LEqual(PCHV, SPTH)) { // SPT-H
> +        Return (17)
> +      } Else {                 // SPT-LP
> +        Return (13)
> +      }
> +    }
> +
> +    Name(XRST, Zero)
> +
> +    Method(_PS0,0,Serialized)
> +    {
> +
> +      If(LEqual(^DVID,0xFFFF))
> +      {
> +        Return()
> +      }
> +
> +      Store(^MEMB,Local2)         // Save MBAR
> +      Store(^PDBM,Local1)         // Save CMD
> +
> +      And(^PDBM,Not(0x06),^PDBM)  // Clear MSE/BME
> +
> +      //
> +      // Switch to D0
> +      //
> +      Store(0,^D0D3)
> +
> +      Store(\XWMB,^MEMB)          // Set MBAR
> +      Or(Local1,0x0002,^PDBM)     // Set MSE
> +
> +      //
> +      //
> +      //
> +
> +      And(^PDBM,Not(0x02),^PDBM)  // Clear MSE
> +
> +      Store(Local2,^MEMB)         // Restore MBAR
> +      Store(Local1,^PDBM)         // Restore CMD
> +
> +      //
> +      // Call platform XHC PS0 method if present
> +      //
> +      If(CondRefOf(\_SB.PC00.XHCI.PS0X))
> +      {
> +        \_SB.PC00.XHCI.PS0X()
> +      }
> +        //
> +        //
> +        If(LAnd(UWAB,LEqual(D0D3,0))) {
> +
> +          //
> +          // If the USB WA Bit is set and any XHCI or XDCI controller is in D0
> +          //
> +          //
> +          // USB2 PHPY Power Gating - SW WA
> +          //
> +          // 1. BIOS writes a new command to the MTPMC register to cause the
> PMC to disable power gating
> +          Store(1,MPMC)
> +
> +          // 2. BIOS waits for PCH_PM_STS.MSG_FULL_STS to be 0
> +          //      In parallel and in response to the previous command from BIOS,
> PMC FW will:
> +          //         * Make the USB2 force common lane PG match the BIOS policy
> (common lane PG disallowed)
> +          //         * Disable SUS power gating in XHCI
> +          //         * Wait for USB2 PHY side_pok to be 1
> +          //         * Disable core power gating in USB2 PHY
> +          //         * Disable common lane power gating in USB2 PHY (probably not
> necessary, consider removal)
> +          //         * Wait for USB2 SUS restoration status to be set, and do USB2
> SUS power gating restoration
> +          //         * Get the PHY in the correct state before allowing transition to
> D0.
> +          //        * Clear MSG_FULL_STS
> +          //    BIOS sees MSG_FULL_STS clear and exits the method
> +          //
> +          While(PMFS) {
> +            Sleep(10)
> +          }
> +        } // End If(UWAB)
> +
> +    }
> +
> +    Method(_PS3,0,Serialized)
> +    {
> +
> +      If(LEqual(^DVID,0xFFFF))
> +      {
> +        Return()
> +      }
> +
> +      Store(^MEMB,Local2)         // Save MBAR
> +      Store(^PDBM,Local1)         // Save CMD
> +
> +      And(^PDBM,Not(0x06),^PDBM)  // Clear MSE/BME
> +
> +      //
> +      // Switch back to D0
> +      //
> +      Store(0,^D0D3)
> +
> +      Store(\XWMB,^MEMB)          // Set MBAR
> +      Or(Local1,0x0002,^PDBM)     // Set MSE
> +
> +      //
> +      //
> +      //
> +
> +      And(^PDBM,Not(0x02),^PDBM)  // Clear MSE
> +
> +      //
> +      // Switch back to D3
> +      //
> +      Store(3,^D0D3)
> +
> +      Store(Local2,^MEMB)         // Restore MBAR
> +      Store(Local1,^PDBM)         // Restore CMD
> +
> +      //
> +      // Call platform XHC PS3 method if present
> +      //
> +      If(CondRefOf(\_SB.PC00.XHCI.PS3X))
> +      {
> +        \_SB.PC00.XHCI.PS3X()
> +      }
> +        If(LAnd(UWAB,LEqual(D0D3,3))) {
> +          //
> +          // If the USB WA Bit is set and XHCI is in D3
> +          //
> +
> +          // 1. BIOS writes a new command to the MTPMC register to enable
> power gating
> +          Store(3,MPMC)
> +
> +          // 2. BIOS waits for PCH_PM_STS.MSG_FULL_STS to be 0
> +          //      In parallel and in response to the previous command from BIOS,
> PMC FW will:
> +          //        * Make the USB2 force common lane PG match the BIOS policy
> (common lane PG allowed)
> +          //        * Enable SUS power gating in XHCI
> +          //        * Enable core power gating in USB2 PHY
> +          //        * Enable common lane power gating in the USB2 PHY
> +          //        * Clear MSG_FULL_STS
> +          //    BIOS sees MSG_FULL_STS clear and exits the method
> +          //
> +          While(PMFS) {
> +            Sleep(10)
> +          }
> +        } // End If(UWAB)
> +    }
> +
> +
> +    // Apply S3 workaround.
> +    // Arguments :
> +    //  None
> +    // Changes 8090 Bit 10 before S3.
> +    //
> +    Method(XHCS,0, Serialized) {
> +      Store(^MEMB,Local2)         // Save MBAR
> +      Store(^PDBM,Local1)         // Save CMD
> +
> +      And(^PDBM,Not(0x06),^PDBM)  // Clear MSE/BME
> +
> +      Store(\XWMB,^MEMB)          // Set MBAR
> +      Or(Local1,0x0002,^PDBM)     // Set MSE
> +
> +      OperationRegion(MC11,SystemMemory,\XWMB,0x9000)
> +      Field(MC11,DWordAcc,Lock,Preserve)
> +      {
> +        Offset(0x8090),   //  HC Transfer Manager - TRM
> +            ,  10,
> +        UCLI,  1,         // CLEAR IN EP
> +      }
> +
> +      Store(0x1,UCLI)
> +
> +      And(^PDBM,Not(0x02),^PDBM)  // Clear MSE
> +
> +      Store(Local2,^MEMB)         // Restore MBAR
> +      Store(Local1,^PDBM)         // Restore CMD
> +
> +    }
> +
> +    //
> +    //
> +    // Check for XHCI switch UUID
> +    //
> +    // Arguments:
> +    //  Arg0 (Buffer) : UUID
> +    //
> +    // Returns:
> +    //  1: It's valid UUID
> +    //  0: Invalid UUID
> +    //
> +    Method(CUID,1,Serialized) {
> +      If(LEqual(Arg0,ToUUID("7c9512a9-1705-4cb4-af7d-506a2423ab71"))) {
> +        Return(1)
> +      }
> +      Return(0)
> +    }
> +
> +    Device(RHUB)
> +    {
> +      Name(_ADR, Zero)
> +
> +      // PS0 Method for xHCI Root Hub
> +      Method(_PS0,0,Serialized)
> +      {
> +        If(LEqual(\_SB.PC00.XHCI.DVID,0xFFFF))
> +        {
> +          Return()
> +        }
> +        //
> +        // Call platform XHC.RHUB PS0 method if present.
> +        //
> +        If(CondRefOf(\_SB.PC00.XHCI.RHUB.PS0X))
> +        {
> +          \_SB.PC00.XHCI.RHUB.PS0X()
> +        }
> +      }
> +
> +      // PS2 Method for xHCI Root Hub
> +      Method(_PS2,0,Serialized)
> +      {
> +        If(LEqual(\_SB.PC00.XHCI.DVID,0xFFFF))
> +        {
> +          Return()
> +        }
> +        //
> +        // Call platform XHC.RHUB PS2 method if present.
> +        //
> +        If(CondRefOf(\_SB.PC00.XHCI.RHUB.PS2X))
> +        {
> +          \_SB.PC00.XHCI.RHUB.PS2X()
> +        }
> +      }
> +
> +      // PS3 Method for xHCI Root Hub
> +      Method(_PS3,0,Serialized)
> +      {
> +        If(LEqual(\_SB.PC00.XHCI.DVID,0xFFFF))
> +        {
> +          Return()
> +        }
> +        //
> +        // Call platform XHC.RHUB PS3 method if present.
> +        //
> +        If(CondRefOf(\_SB.PC00.XHCI.RHUB.PS3X))
> +        {
> +          \_SB.PC00.XHCI.RHUB.PS3X()
> +        }
> +      }
> +
> +      //
> +      // High Speed Ports (without USBR)
> +      //
> +      Device(HS01)
> +      {
> +        Name(_ADR, 0x01)
> +      }
> +
> +      Device(HS02)
> +      {
> +        Name(_ADR, 0x02)
> +      }
> +
> +      Device(HS03)
> +      {
> +        Name(_ADR, 0x03)
> +      }
> +
> +      Device(HS04)
> +      {
> +        Name(_ADR, 0x04)
> +      }
> +
> +      Device(HS05)
> +      {
> +        Name(_ADR, 0x05)
> +      }
> +
> +      Device(HS06)
> +      {
> +        Name(_ADR, 0x06)
> +      }
> +
> +      Device(HS07)
> +      {
> +        Name(_ADR, 0x07)
> +      }
> +
> +      Device(HS08)
> +      {
> +        Name(_ADR, 0x08)
> +      }
> +
> +      Device(HS09)
> +      {
> +        Name(_ADR, 0x09)
> +      }
> +
> +      Device(HS10)
> +      {
> +        Name(_ADR, 0x0A)
> +      }
> +
> +      //
> +      // USBR port will be known as USBR instead of HS09 / HS15
> +      //
> +      Device(USR1)
> +      {
> +        Method(_ADR) { Return (Add(USRA(),0)) }
> +      }
> +
> +      //
> +      // USBR port 2 will be known as USBR instead of xxxx
> +      //
> +      Device(USR2)
> +      {
> +        Method(_ADR) { Return (Add(USRA(),1)) }
> +      }
> +
> +      //
> +      // Super Speed Ports
> +      //
> +      Device(SS01)
> +      {
> +        Method(_ADR) { Return (Add(SSPA(),0)) }
> +      }
> +
> +      Device(SS02)
> +      {
> +        Method(_ADR) { Return (Add(SSPA(),1)) }
> +      }
> +
> +      Device(SS03)
> +      {
> +        Method(_ADR) { Return (Add(SSPA(),2)) }
> +      }
> +
> +      Device(SS04)
> +      {
> +        Method(_ADR) { Return (Add(SSPA(),3)) }
> +      }
> +
> +      Device(SS05)
> +      {
> +        Method(_ADR) { Return (Add(SSPA(),4)) }
> +      }
> +
> +      Device(SS06)
> +      {
> +        Method(_ADR) { Return (Add(SSPA(),5)) }
> +      }
> +
> +    } // device rhub
> +} //scope
> +
> +//
> +// SPT-H
> +//
> +
> +  Scope(\_SB_.PC00.XHCI.RHUB) {
> +
> +
> +
> +    Device(HS11)
> +    {
> +      Name(_ADR, 0xB)
> +    }
> +
> +
> +    Device(HS12)
> +    {
> +      Name(_ADR, 0xC)
> +    }
> +
> +    Device(HS13)
> +    {
> +      Name(_ADR, 0xD)
> +    }
> +
> +    Device(HS14)
> +    {
> +      Name(_ADR, 0xE)
> +    }
> +
> +    Device(SS07)
> +    {
> +      Method(_ADR) { Return (Add(SSPA(),6)) }
> +    }
> +
> +    Device(SS08)
> +    {
> +      Method(_ADR) { Return (Add(SSPA(),7)) }
> +    }
> +
> +    Device(SS09)
> +    {
> +      Method(_ADR) { Return (Add(SSPA(),8)) }
> +    }
> +
> +    Device(SS10)
> +    {
> +      Method(_ADR) { Return (Add(SSPA(),9)) }
> +    }
> +
> +  } //scope
> diff --git
> a/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP0
> 1_ADR.asl
> b/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP0
> 1_ADR.asl
> new file mode 100644
> index 0000000000..cfacfdbfd4
> --- /dev/null
> +++
> b/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP0
> 1_ADR.asl
> @@ -0,0 +1,15 @@
> +/** @file
> +
> +  @copyright
> +  Copyright 2015 Intel Corporation. <BR>
> +
> +  SPDX-License-Identifier: BSD-2-Clause-Patent
> +**/
> +
> +Method (_ADR, 0) {
> +  If (LNotEqual(RPA1,0)) {
> +    Return (RPA1)
> +  } Else {
> +    Return (0x001C0000)
> +  }
> +}
> diff --git
> a/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP0
> 2_ADR.asl
> b/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP0
> 2_ADR.asl
> new file mode 100644
> index 0000000000..14d239597c
> --- /dev/null
> +++
> b/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP0
> 2_ADR.asl
> @@ -0,0 +1,15 @@
> +/** @file
> +
> +  @copyright
> +  Copyright 2015 Intel Corporation. <BR>
> +
> +  SPDX-License-Identifier: BSD-2-Clause-Patent
> +**/
> +
> +Method (_ADR, 0) {
> +  If (LNotEqual(RPA2,0)) {
> +    Return (RPA2)
> +  } Else {
> +    Return (0x001C0001)
> +  }
> +}
> diff --git
> a/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP0
> 3_ADR.asl
> b/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP0
> 3_ADR.asl
> new file mode 100644
> index 0000000000..e116aa3fcf
> --- /dev/null
> +++
> b/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP0
> 3_ADR.asl
> @@ -0,0 +1,15 @@
> +/** @file
> +
> +  @copyright
> +  Copyright 2015 Intel Corporation. <BR>
> +
> +  SPDX-License-Identifier: BSD-2-Clause-Patent
> +**/
> +
> +Method (_ADR, 0) {
> +  If (LNotEqual(RPA3,0)) {
> +    Return (RPA3)
> +  } Else {
> +    Return (0x001C0002)
> +  }
> +}
> diff --git
> a/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP0
> 4_ADR.asl
> b/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP0
> 4_ADR.asl
> new file mode 100644
> index 0000000000..a89ba41f87
> --- /dev/null
> +++
> b/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP0
> 4_ADR.asl
> @@ -0,0 +1,15 @@
> +/** @file
> +
> +  @copyright
> +  Copyright 2015 Intel Corporation. <BR>
> +
> +  SPDX-License-Identifier: BSD-2-Clause-Patent
> +**/
> +
> +Method (_ADR, 0) {
> +  If (LNotEqual(RPA4,0)) {
> +    Return (RPA4)
> +  } Else {
> +    Return (0x001C0003)
> +  }
> +}
> diff --git
> a/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP0
> 5_ADR.asl
> b/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP0
> 5_ADR.asl
> new file mode 100644
> index 0000000000..82ac284b8c
> --- /dev/null
> +++
> b/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP0
> 5_ADR.asl
> @@ -0,0 +1,15 @@
> +/** @file
> +
> +  @copyright
> +  Copyright 2015 Intel Corporation. <BR>
> +
> +  SPDX-License-Identifier: BSD-2-Clause-Patent
> +**/
> +
> +Method (_ADR, 0) {
> +  If (LNotEqual(RPA5,0)) {
> +    Return (RPA5)
> +  } Else {
> +    Return (0x001C0004)
> +  }
> +}
> diff --git
> a/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP0
> 6_ADR.asl
> b/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP0
> 6_ADR.asl
> new file mode 100644
> index 0000000000..153b4b3fce
> --- /dev/null
> +++
> b/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP0
> 6_ADR.asl
> @@ -0,0 +1,15 @@
> +/** @file
> +
> +  @copyright
> +  Copyright 2015 Intel Corporation. <BR>
> +
> +  SPDX-License-Identifier: BSD-2-Clause-Patent
> +**/
> +
> +Method (_ADR, 0) {
> +  If (LNotEqual(RPA6,0)) {
> +    Return (RPA6)
> +  } Else {
> +    Return (0x001C0005)
> +  }
> +}
> diff --git
> a/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP0
> 7_ADR.asl
> b/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP0
> 7_ADR.asl
> new file mode 100644
> index 0000000000..b8f93ff22b
> --- /dev/null
> +++
> b/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP0
> 7_ADR.asl
> @@ -0,0 +1,15 @@
> +/** @file
> +
> +  @copyright
> +  Copyright 2015 Intel Corporation. <BR>
> +
> +  SPDX-License-Identifier: BSD-2-Clause-Patent
> +**/
> +
> +Method (_ADR, 0) {
> +  If (LNotEqual(RPA7,0)) {
> +    Return (RPA7)
> +  } Else {
> +    Return (0x001C0006)
> +  }
> +}
> diff --git
> a/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP0
> 8_ADR.asl
> b/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP0
> 8_ADR.asl
> new file mode 100644
> index 0000000000..ad786680b1
> --- /dev/null
> +++
> b/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP0
> 8_ADR.asl
> @@ -0,0 +1,15 @@
> +/** @file
> +
> +  @copyright
> +  Copyright 2015 Intel Corporation. <BR>
> +
> +  SPDX-License-Identifier: BSD-2-Clause-Patent
> +**/
> +
> +Method (_ADR, 0) {
> +  If (LNotEqual(RPA8,0)) {
> +    Return (RPA8)
> +  } Else {
> +    Return (0x001C0007)
> +  }
> +}
> diff --git
> a/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP0
> 9_ADR.asl
> b/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP0
> 9_ADR.asl
> new file mode 100644
> index 0000000000..8fea09fb6d
> --- /dev/null
> +++
> b/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP0
> 9_ADR.asl
> @@ -0,0 +1,15 @@
> +/** @file
> +
> +  @copyright
> +  Copyright 2015 Intel Corporation. <BR>
> +
> +  SPDX-License-Identifier: BSD-2-Clause-Patent
> +**/
> +
> +Method (_ADR, 0) {
> +  If (LNotEqual(RPA9,0)) {
> +    Return (RPA9)
> +  } Else {
> +    Return (0x001D0000)
> +  }
> +}
> diff --git
> a/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP1
> 0_ADR.asl
> b/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP1
> 0_ADR.asl
> new file mode 100644
> index 0000000000..e5faa36089
> --- /dev/null
> +++
> b/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP1
> 0_ADR.asl
> @@ -0,0 +1,15 @@
> +/** @file
> +
> +  @copyright
> +  Copyright 2015 Intel Corporation. <BR>
> +
> +  SPDX-License-Identifier: BSD-2-Clause-Patent
> +**/
> +
> +Method (_ADR, 0) {
> +  If (LNotEqual(RPAA,0)) {
> +    Return (RPAA)
> +  } Else {
> +    Return (0x001D0001)
> +  }
> +}
> diff --git
> a/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP1
> 1_ADR.asl
> b/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP1
> 1_ADR.asl
> new file mode 100644
> index 0000000000..f35101300c
> --- /dev/null
> +++
> b/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP1
> 1_ADR.asl
> @@ -0,0 +1,15 @@
> +/** @file
> +
> +  @copyright
> +  Copyright 2015 Intel Corporation. <BR>
> +
> +  SPDX-License-Identifier: BSD-2-Clause-Patent
> +**/
> +
> +Method (_ADR, 0) {
> +  If (LNotEqual(RPAB,0)) {
> +    Return (RPAB)
> +  } Else {
> +    Return (0x001D0002)
> +  }
> +}
> diff --git
> a/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP1
> 2_ADR.asl
> b/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP1
> 2_ADR.asl
> new file mode 100644
> index 0000000000..b8b8b305cd
> --- /dev/null
> +++
> b/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP1
> 2_ADR.asl
> @@ -0,0 +1,15 @@
> +/** @file
> +
> +  @copyright
> +  Copyright 2015 Intel Corporation. <BR>
> +
> +  SPDX-License-Identifier: BSD-2-Clause-Patent
> +**/
> +
> +Method (_ADR, 0) {
> +  If (LNotEqual(RPAC,0)) {
> +    Return (RPAC)
> +  } Else {
> +    Return (0x001D0003)
> +  }
> +}
> diff --git
> a/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP1
> 3_ADR.asl
> b/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP1
> 3_ADR.asl
> new file mode 100644
> index 0000000000..c81ce74af9
> --- /dev/null
> +++
> b/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP1
> 3_ADR.asl
> @@ -0,0 +1,15 @@
> +/** @file
> +
> +  @copyright
> +  Copyright 2015 Intel Corporation. <BR>
> +
> +  SPDX-License-Identifier: BSD-2-Clause-Patent
> +**/
> +
> +Method (_ADR, 0) {
> +  If (LNotEqual(RPAD,0)) {
> +    Return (RPAD)
> +  } Else {
> +    Return (0x001D0004)
> +  }
> +}
> diff --git
> a/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP1
> 4_ADR.asl
> b/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP1
> 4_ADR.asl
> new file mode 100644
> index 0000000000..3a79d7b90b
> --- /dev/null
> +++
> b/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP1
> 4_ADR.asl
> @@ -0,0 +1,15 @@
> +/** @file
> +
> +  @copyright
> +  Copyright 2015 Intel Corporation. <BR>
> +
> +  SPDX-License-Identifier: BSD-2-Clause-Patent
> +**/
> +
> +Method (_ADR, 0) {
> +  If (LNotEqual(RPAE,0)) {
> +    Return (RPAE)
> +  } Else {
> +    Return (0x001D0005)
> +  }
> +}
> diff --git
> a/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP1
> 5_ADR.asl
> b/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP1
> 5_ADR.asl
> new file mode 100644
> index 0000000000..6c5e812a02
> --- /dev/null
> +++
> b/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP1
> 5_ADR.asl
> @@ -0,0 +1,15 @@
> +/** @file
> +
> +  @copyright
> +  Copyright 2015 Intel Corporation. <BR>
> +
> +  SPDX-License-Identifier: BSD-2-Clause-Patent
> +**/
> +
> +Method (_ADR, 0) {
> +  If (LNotEqual(RPAF,0)) {
> +    Return (RPAF)
> +  } Else {
> +    Return (0x001D0006)
> +  }
> +}
> diff --git
> a/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP1
> 6_ADR.asl
> b/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP1
> 6_ADR.asl
> new file mode 100644
> index 0000000000..0099005840
> --- /dev/null
> +++
> b/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP1
> 6_ADR.asl
> @@ -0,0 +1,15 @@
> +/** @file
> +
> +  @copyright
> +  Copyright 2015 Intel Corporation. <BR>
> +
> +  SPDX-License-Identifier: BSD-2-Clause-Patent
> +**/
> +
> +Method (_ADR, 0) {
> +  If (LNotEqual(RPAG,0)) {
> +    Return (RPAG)
> +  } Else {
> +    Return (0x001D0007)
> +  }
> +}
> diff --git
> a/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP1
> 7_ADR.asl
> b/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP1
> 7_ADR.asl
> new file mode 100644
> index 0000000000..745d5523b0
> --- /dev/null
> +++
> b/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP1
> 7_ADR.asl
> @@ -0,0 +1,15 @@
> +/** @file
> +
> +  @copyright
> +  Copyright 2015 Intel Corporation. <BR>
> +
> +  SPDX-License-Identifier: BSD-2-Clause-Patent
> +**/
> +
> +Method (_ADR, 0) {
> +  If (LNotEqual(RPAH,0)) {
> +    Return (RPAH)
> +  } Else {
> +    Return (0x001B0000)
> +  }
> +}
> diff --git
> a/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP1
> 8_ADR.asl
> b/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP1
> 8_ADR.asl
> new file mode 100644
> index 0000000000..e32e1ab276
> --- /dev/null
> +++
> b/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP1
> 8_ADR.asl
> @@ -0,0 +1,15 @@
> +/** @file
> +
> +  @copyright
> +  Copyright 2015 Intel Corporation. <BR>
> +
> +  SPDX-License-Identifier: BSD-2-Clause-Patent
> +**/
> +
> +Method (_ADR, 0) {
> +  If (LNotEqual(RPAI,0)) {
> +    Return (RPAI)
> +  } Else {
> +    Return (0x001B0001)
> +  }
> +}
> diff --git
> a/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP1
> 9_ADR.asl
> b/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP1
> 9_ADR.asl
> new file mode 100644
> index 0000000000..06b8a23ab4
> --- /dev/null
> +++
> b/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP1
> 9_ADR.asl
> @@ -0,0 +1,15 @@
> +/** @file
> +
> +  @copyright
> +  Copyright 2015 Intel Corporation. <BR>
> +
> +  SPDX-License-Identifier: BSD-2-Clause-Patent
> +**/
> +
> +Method (_ADR, 0) {
> +  If (LNotEqual(RPAJ,0)) {
> +    Return (RPAJ)
> +  } Else {
> +    Return (0x001B0002)
> +  }
> +}
> diff --git
> a/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP2
> 0_ADR.asl
> b/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP2
> 0_ADR.asl
> new file mode 100644
> index 0000000000..baa96d405c
> --- /dev/null
> +++
> b/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/RP2
> 0_ADR.asl
> @@ -0,0 +1,15 @@
> +/** @file
> +
> +  @copyright
> +  Copyright 2015 Intel Corporation. <BR>
> +
> +  SPDX-License-Identifier: BSD-2-Clause-Patent
> +**/
> +
> +Method (_ADR, 0) {
> +  If (LNotEqual(RPAK,0)) {
> +    Return (RPAK)
> +  } Else {
> +    Return (0x001B0003)
> +  }
> +}
> diff --git
> a/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/Trac
> eHubDebug.asl
> b/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/Trac
> eHubDebug.asl
> new file mode 100644
> index 0000000000..4c1dd36692
> --- /dev/null
> +++
> b/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/AcpiTables/Dsdt/Trac
> eHubDebug.asl
> @@ -0,0 +1,150 @@
> +/** @file
> +  Trace Hub debug library for ASL code.
> +
> +  @copyright
> +  Copyright 2015 - 2020 Intel Corporation. <BR>
> +
> +  SPDX-License-Identifier: BSD-2-Clause-Patent
> +**/
> +
> +External(PTHM, IntObj)
> +External(\_SB.PC00.PTHT.THEN, MethodObj, IntObj)
> +External(\_SB.PTHH.THEN, MethodObj, IntObj)
> +
> +Name (THMN, 0x20)  // Master number should align with
> gSiPkgTokenSpaceGuid.PcdTraceHubDebugLibMaster
> +Name (THCN, 0x16)  // Channel number could be different from
> gSiPkgTokenSpaceGuid.PcdTraceHubDebugLibChannel, 0~80h are available
> +
> +//
> +// @note Only include register definition macros in ASL.
> +//       GCC will leak C function definitions in to ASL
> +//       code, causing compilation errors in some cases.
> +//
> +#include <PchReservedResources.h>
> +#include <Register/PchRegsTraceHub.h>
> +
> +Scope(\) {
> +  // Trace Hub debug address
> +  // This is internal helper runtine of THDS
> +  // Arg0 : Master number
> +  // Arg1 : Channel number
> +  Method (THDA, 2, Serialized) {
> +    // Local0 = PCH_TRACE_HUB_SW_BASE_ADDRESS + 0x40 *
> (V_PCH_TRACE_HUB_MTB_CHLCNT * (Master -
> V_PCH_TRACE_HUB_MTB_STHMSTR)) + 0x40 * Channel;
> +    Store (PCH_TRACE_HUB_SW_BASE_ADDRESS, Local0)
> +    Add (Local0, Multiply (0x40, Multiply (V_PCH_TRACE_HUB_MTB_CHLCNT,
> Subtract (Arg0, V_PCH_TRACE_HUB_MTB_STHMSTR))), Local0)
> +    Add (Local0, Multiply (0x40, Arg1), Local0)
> +    Return (Local0)
> +  }
> +
> +  // String to raw data
> +  // This is internal helper runtine of THDS
> +  // Arg0 : string
> +  // Arg1 : Index
> +  // Arg2 : size
> +  Method (STRD, 3, Serialized) {
> +    If (LGreater (Add (Arg1, Arg2), SizeOf (Arg0))) {
> +      Return (0)
> +    }
> +    // Local0 is return value
> +    // Lccal1 is loop index
> +    // Local2 is char of string
> +    // Local3 is buffer of string
> +    ToBuffer (Arg0, Local3)
> +    Store (0, Local0)
> +    Store (0, Local1)
> +    While (LLess (Local1, Arg2)) {
> +      Store (DeRefOf (Index (Local3, Add (Arg1, Local1))), Local2)
> +      Add (Local0, ShiftLeft (Local2, Multiply (8, Local1)), Local0)
> +      Increment (Local1)
> +    }
> +    Return (Local0)
> +  }
> +
> +  // Trace Hub debug string
> +  // Arg0 : debug string
> +  Method (THDS, 1, Serialized) {
> +    //
> +    // Check if BIOS trace is enabled.
> +    //
> +    If (LEqual (PTHM, 0)) {
> +      Return
> +    } ElseIf (LEqual (PTHM, 1)) {
> +      If (LNot (\_SB.PC00.PTHT.THEN())) {
> +        Return
> +      }
> +    } ElseIf (LEqual (PTHM, 2)) {
> +      If (LNot (\_SB.PTHH.THEN())) {
> +        Return
> +      }
> +    } Else {
> +      Return
> +    }
> +
> +    // Local0 is the length of string
> +    // Local1 is the debug base address
> +    Store (Sizeof (Arg0), Local0)
> +    Store (THDA (THMN, THCN), Local1)
> +    OperationRegion (THBA, SystemMemory, local1, 0x40)
> +    Field (THBA, QWordAcc, NoLock, Preserve) {
> +      Offset (0x00),
> +      QO00, 64,
> +    }
> +    Field (THBA, DWordAcc, NoLock, Preserve) {
> +      Offset (0x00),
> +      DO00, 32,
> +      Offset (0x10),
> +      DO10, 32,
> +      offset (0x30),
> +      DO30, 32,
> +    }
> +    Field (THBA, WordAcc, NoLock, Preserve) {
> +      Offset (0x00),
> +      WO00, 16,
> +    }
> +    Field (THBA, ByteAcc, NoLock, Preserve) {
> +      Offset (0x00),
> +      BO00, 8,
> +    }
> +
> +    // time stamp
> +    Store (0x01000242, DO10)
> +    // length of string
> +    Store (Local0, WO00)
> +    // string
> +    Store (0, Local6)
> +    Store (Local0, Local7)
> +    while (LGreaterEqual(Local7, 8)) {
> +      Store (STRD (Arg0, Local6, 8), QO00)
> +      Add (Local6, 8, Local6)
> +      Subtract (Local7, 8, Local7)
> +    }
> +    If (LGreaterEqual(Local7, 4)) {
> +      Store (STRD (Arg0, Local6, 4), DO00)
> +      Add (Local6, 4, Local6)
> +      Subtract (Local7, 4, Local7)
> +    }
> +    If (LGreaterEqual(Local7, 2)) {
> +      Store (STRD (Arg0, Local6, 2), WO00)
> +      Add (Local6, 2, Local6)
> +      Subtract (Local7, 2, Local7)
> +    }
> +    If (LGreaterEqual(Local7, 1)) {
> +      Store (STRD (Arg0, Local6, 1), BO00)
> +      Add (Local6, 1, Local6)
> +      Subtract (Local7, 1, Local7)
> +    }
> +    // flag
> +    Store (0, DO30)
> +  }
> +
> +  // Trace Hub debug Hex string
> +  // Arg0 : Integer, buffer
> +  Method (THDH, 1, Serialized) {
> +    THDS (ToHexString (Arg0))
> +  }
> +
> +  // Trace Hub debug decimal string
> +  // Arg0 : Integer, buffer
> +  Method (THDD, 1, Serialized) {
> +    THDS (ToDecimalString (Arg0))
> +  }
> +}
> diff --git a/Silicon/Intel/WhitleySiliconPkg/SiliconPkg.dec
> b/Silicon/Intel/WhitleySiliconPkg/SiliconPkg.dec
> index c4993cb897..e03ee6d5d8 100644
> --- a/Silicon/Intel/WhitleySiliconPkg/SiliconPkg.dec
> +++ b/Silicon/Intel/WhitleySiliconPkg/SiliconPkg.dec
> @@ -19,6 +19,7 @@
>    Security/Include
>    Pch/SouthClusterLbg
>    Pch/SouthClusterLbg/Include
> +  Pch/SouthClusterLbg/AcpiTables/Dsdt
> 
>    Cpu/Include
> 
> --
> 2.27.0.windows.1


^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [edk2-devel][edk2-platforms][PATCH V1 4/8] WhitleyOpenBoardPkg/AcpiTables10nm: Add Static ACPI tables
  2022-02-07 19:02 ` [edk2-devel][edk2-platforms][PATCH V1 4/8] WhitleyOpenBoardPkg/AcpiTables10nm: Add Static ACPI tables Oram, Isaac W
@ 2022-02-09  3:21   ` Nate DeSimone
  0 siblings, 0 replies; 17+ messages in thread
From: Nate DeSimone @ 2022-02-09  3:21 UTC (permalink / raw)
  To: Oram, Isaac W, devel@edk2.groups.io; +Cc: Chiu, Chasel

Reviewed-by: Nate DeSimone <nathaniel.l.desimone@intel.com>

> -----Original Message-----
> From: Oram, Isaac W <isaac.w.oram@intel.com>
> Sent: Monday, February 7, 2022 11:03 AM
> To: devel@edk2.groups.io
> Cc: Desimone, Nathaniel L <nathaniel.l.desimone@intel.com>; Chiu, Chasel
> <chasel.chiu@intel.com>
> Subject: [edk2-devel][edk2-platforms][PATCH V1 4/8]
> WhitleyOpenBoardPkg/AcpiTables10nm: Add Static ACPI tables
> 
> Static ACPI tables for WilsonCityRvp
> 
> Cc: Nate DeSimone <nathaniel.l.desimone@intel.com>
> Cc: Chasel Chiu <chasel.chiu@intel.com>
> Signed-off-by: Isaac Oram <isaac.w.oram@intel.com>
> ---
> 
> Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Bdat/Bdat.
> aslc     |  54 ++
> 
> Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/DBG2/DBG
> 2.aslc     |  81 ++
> 
> Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Facs/Facs6
> 2.aslc   |  72 ++
> 
> Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Fadt/Fadt6
> 2.aslc   | 171 ++++
> 
> Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Hmat/Hma
> t.aslc     | 972 ++++++++++++++++++++
> 
> Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Hpet/Hpet
> .aslc     |  61 ++
> 
> Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Mcfg/Mcfg
> .aslc     |  74 ++
> 
> Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Migt/Migt.
> aslc     |  68 ++
> 
> Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Msct/Msct
> .aslc     | 137 +++
> 
> Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/NFIT/Nfit.a
> slc     |  48 +
> 
> Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/PCAT/Pcat.
> aslc     |  44 +
> 
> Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Pmtt/Pmtt
> 10nm.aslc | 136 +++
> 
> Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/SPCR/Spcr.
> aslc     |  89 ++
> 
> Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Spmi/Spmi
> .aslc     |  53 ++
> 
> Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Wddt/Wdd
> t1.0.aslc  |  74 ++
> 
> Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Wsmt/Ws
> mt.aslc     |  74 ++
>  16 files changed, 2208 insertions(+)
> 
> diff --git
> a/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Bdat/Bd
> at.aslc
> b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Bdat/Bd
> at.aslc
> new file mode 100644
> index 0000000000..734f11200f
> --- /dev/null
> +++
> b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Bdat/Bd
> at.aslc
> @@ -0,0 +1,54 @@
> +/** @file
> +
> +  @copyright
> +  Copyright 2005 - 2012 Intel Corporation. <BR>
> +
> +  SPDX-License-Identifier: BSD-2-Clause-Patent
> +**/
> +
> +//
> +// Statements that include other files
> +//
> +#include <Acpi/Bdat.h>
> +
> +//
> +// Bdat Access Handler instance data structure
> +//
> +STATIC
> +EFI_BDAT_ACPI_DESCRIPTION_TABLE mBdatAcpiTable = \
> +{
> +  {EFI_BDAT_TABLE_SIGNATURE,                   // Signature
> +  sizeof (EFI_BDAT_ACPI_DESCRIPTION_TABLE),   // Length
> +  0x01,                                       // Revision [01]
> +  //
> +  // Checksum will be updated during boot
> +  //
> +  0,                                          // Checksum
> +  {' ',                                       // OEM ID
> +  ' ',
> +  ' ',
> +  ' ',
> +  ' ',
> +  ' '},
> +  0,                                          // OEM Table ID
> +  0,                                          // OEM Revision [0x00000000]
> +  0,                                          // Creator ID
> +  0},                                          // Creator Revision
> +  {0,                                          // System Memory Address Space ID
> +  0,
> +  0,
> +  0,
> +  //
> +  // Pointer will be updated during boot
> +  //
> +  EFI_BDAT_ACPI_POINTER}
> +};
> +
> +VOID*
> +ReferenceAcpiTable (
> +  VOID
> +  )
> +
> +{
> +  return (VOID*)&mBdatAcpiTable;
> +}
> diff --git
> a/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/DBG2/D
> BG2.aslc
> b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/DBG2/D
> BG2.aslc
> new file mode 100644
> index 0000000000..dcad37ac05
> --- /dev/null
> +++
> b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/DBG2/D
> BG2.aslc
> @@ -0,0 +1,81 @@
> +/** @file
> +
> +  @copyright
> +  Copyright 1999 - 2019 Intel Corporation. <BR>
> +
> +  SPDX-License-Identifier: BSD-2-Clause-Patent
> +**/
> +
> +//
> +// Statements that include other files
> +//
> +
> +#include <IndustryStandard/DebugPort2Table.h>
> +#include <Acpi/Dbg2.h>
> +
> +
> +DBG2_DEBUG_TABLE DBG2 =
> +{
> +  {
> +    {EFI_ACPI_6_2_DEBUG_PORT_2_TABLE_SIGNATURE,
> +    sizeof (DBG2_DEBUG_TABLE),
> +    0,
> +
> +    //
> +    // Checksum will be updated at runtime
> +    //
> +    0x00,
> +
> +    //
> +    // It is expected that these values will be programmed at runtime
> +    //
> +    {' ', ' ', ' ', ' ', ' ', ' '},
> +
> +    0,
> +    0,
> +    0,
> +    0
> +    },
> +    //
> +    // Beginning of DBG2 specific fields
> +    //
> +    sizeof(EFI_ACPI_DEBUG_PORT_2_DESCRIPTION_TABLE),
> +    1
> +  },
> +  {
> +    EFI_ACPI_DBG2_DEBUG_DEVICE_INFORMATION_STRUCT_REVISION,
> +    sizeof(EFI_ACPI_DBG2_DEBUG_DEVICE_INFORMATION_STRUCT),
> +    1,
> +    2,
> +    sizeof(EFI_ACPI_DBG2_DEBUG_DEVICE_INFORMATION_STRUCT) +
> sizeof(EFI_ACPI_6_2_GENERIC_ADDRESS_STRUCTURE) + 4,
> +    0,
> +    0,
> +    EFI_ACPI_DBG2_PORT_TYPE_SERIAL,
> +    EFI_ACPI_DBG2_PORT_SUBTYPE_SERIAL_FULL_16550,
> +    {0, 0},
> +    sizeof(EFI_ACPI_DBG2_DEBUG_DEVICE_INFORMATION_STRUCT),
> +    sizeof(EFI_ACPI_DBG2_DEBUG_DEVICE_INFORMATION_STRUCT) +
> sizeof(EFI_ACPI_6_2_GENERIC_ADDRESS_STRUCTURE)
> +  },
> +  {
> +    EFI_ACPI_6_2_SYSTEM_IO,
> +    16,
> +    0,
> +    EFI_ACPI_6_2_BYTE,
> +    0x3F8
> +  },
> +  4,
> +  "."
> +};
> +
> +VOID*
> +ReferenceAcpiTable (
> +  VOID
> +  )
> +
> +{
> +  //
> +  // Reference the table being generated to prevent the optimizer from
> removing the
> +  // data structure from the exeutable
> +  //
> +  return (VOID*)&DBG2;
> +}
> diff --git
> a/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Facs/Fac
> s62.aslc
> b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Facs/Fac
> s62.aslc
> new file mode 100644
> index 0000000000..48753f7939
> --- /dev/null
> +++
> b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Facs/Fac
> s62.aslc
> @@ -0,0 +1,72 @@
> +/** @file
> +
> +  @copyright
> +  Copyright 1996 - 2019 Intel Corporation. <BR>
> +
> +  SPDX-License-Identifier: BSD-2-Clause-Patent
> +**/
> +
> +//
> +// Statements that include other files
> +//
> +#include <Acpi/Facs.h>
> +
> +//
> +// Firmware ACPI Control Structure
> +// Please modify all values in Facs.h only.
> +//
> +EFI_ACPI_6_2_FIRMWARE_ACPI_CONTROL_STRUCTURE  Facs = {
> +  EFI_ACPI_6_2_FIRMWARE_ACPI_CONTROL_STRUCTURE_SIGNATURE,
> +  sizeof (EFI_ACPI_6_2_FIRMWARE_ACPI_CONTROL_STRUCTURE),
> +  //
> +  // Hardware Signature will be updated at runtime
> +  //
> +  0x00000000,
> +
> +  EFI_ACPI_FIRMWARE_WAKING_VECTOR,
> +  EFI_ACPI_GLOBAL_LOCK,
> +  EFI_ACPI_FIRMWARE_CONTROL_STRUCTURE_FLAGS,
> +  EFI_ACPI_X_FIRMWARE_WAKING_VECTOR,
> +  EFI_ACPI_6_2_FIRMWARE_ACPI_CONTROL_STRUCTURE_VERSION,
> +  {EFI_ACPI_RESERVED_BYTE,
> +  EFI_ACPI_RESERVED_BYTE,
> +  EFI_ACPI_RESERVED_BYTE},
> +  EFI_ACPI_OSPM_FLAGS,
> +  {EFI_ACPI_RESERVED_BYTE,
> +  EFI_ACPI_RESERVED_BYTE,
> +  EFI_ACPI_RESERVED_BYTE,
> +  EFI_ACPI_RESERVED_BYTE,
> +  EFI_ACPI_RESERVED_BYTE,
> +  EFI_ACPI_RESERVED_BYTE,
> +  EFI_ACPI_RESERVED_BYTE,
> +  EFI_ACPI_RESERVED_BYTE,
> +  EFI_ACPI_RESERVED_BYTE,
> +  EFI_ACPI_RESERVED_BYTE,
> +  EFI_ACPI_RESERVED_BYTE,
> +  EFI_ACPI_RESERVED_BYTE,
> +  EFI_ACPI_RESERVED_BYTE,
> +  EFI_ACPI_RESERVED_BYTE,
> +  EFI_ACPI_RESERVED_BYTE,
> +  EFI_ACPI_RESERVED_BYTE,
> +  EFI_ACPI_RESERVED_BYTE,
> +  EFI_ACPI_RESERVED_BYTE,
> +  EFI_ACPI_RESERVED_BYTE,
> +  EFI_ACPI_RESERVED_BYTE,
> +  EFI_ACPI_RESERVED_BYTE,
> +  EFI_ACPI_RESERVED_BYTE,
> +  EFI_ACPI_RESERVED_BYTE,
> +  EFI_ACPI_RESERVED_BYTE}
> +};
> +
> +VOID*
> +ReferenceAcpiTable (
> +  VOID
> +  )
> +
> +{
> +  //
> +  // Reference the table being generated to prevent the optimizer from
> removing the
> +  // data structure from the exeutable
> +  //
> +  return (VOID*)&Facs;
> +}
> diff --git
> a/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Fadt/Fad
> t62.aslc
> b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Fadt/Fad
> t62.aslc
> new file mode 100644
> index 0000000000..f37cf0a508
> --- /dev/null
> +++
> b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Fadt/Fad
> t62.aslc
> @@ -0,0 +1,171 @@
> +/** @file
> +
> +  @copyright
> +  Copyright 1999 - 2019 Intel Corporation. <BR>
> +
> +  SPDX-License-Identifier: BSD-2-Clause-Patent
> +**/
> +
> +//
> +// Statements that include other files
> +//
> +
> +#include <Acpi/Fadt.h>
> +
> +//
> +// Fixed ACPI Description Table
> +// Please modify all values in Fadt.h only.
> +//
> +EFI_ACPI_6_2_FIXED_ACPI_DESCRIPTION_TABLE Fadt = {
> +  {EFI_ACPI_6_2_FIXED_ACPI_DESCRIPTION_TABLE_SIGNATURE,
> +  sizeof (EFI_ACPI_6_2_FIXED_ACPI_DESCRIPTION_TABLE),
> +  EFI_ACPI_6_2_FIXED_ACPI_DESCRIPTION_TABLE_REVISION,
> +  //
> +  // Checksum will be updated at runtime
> +  //
> +  0x00,
> +  //
> +  // It is expected that these values will be updated at runtime
> +  //
> +  {' ', ' ', ' ', ' ', ' ', ' '}, // OEMID
> +  0, // OEM Table ID
> +  EFI_ACPI_OEM_FADT_REVISION,
> +  0, // Creator ID
> +  0}, // Creator Revision
> +  //
> +  // These addresses will be updated at runtime
> +  //
> +  0x00000000, // FIRMWARE_CTRL
> +  0x00000000, // DSDT
> +  EFI_ACPI_RESERVED_BYTE,
> +  EFI_ACPI_PREFERRED_PM_PROFILE,
> +  EFI_ACPI_SCI_INT,
> +  EFI_ACPI_SMI_CMD,
> +  EFI_ACPI_ACPI_ENABLE,
> +  EFI_ACPI_ACPI_DISABLE,
> +  EFI_ACPI_S4_BIOS_REQ,
> +  EFI_ACPI_PSTATE_CNT,
> +
> +  EFI_ACPI_PM1A_EVT_BLK_ADDRESS,
> +  EFI_ACPI_PM1B_EVT_BLK_ADDRESS,
> +  EFI_ACPI_PM1A_CNT_BLK_ADDRESS,
> +  EFI_ACPI_PM1B_CNT_BLK_ADDRESS,
> +  EFI_ACPI_PM2_CNT_BLK_ADDRESS,
> +  EFI_ACPI_PM_TMR_BLK_ADDRESS,
> +  EFI_ACPI_GPE0_BLK_ADDRESS,
> +  EFI_ACPI_GPE1_BLK_ADDRESS,
> +  EFI_ACPI_PM1_EVT_LEN,
> +  EFI_ACPI_PM1_CNT_LEN,
> +  EFI_ACPI_PM2_CNT_LEN,
> +  EFI_ACPI_PM_TMR_LEN,
> +  EFI_ACPI_GPE0_BLK_LEN,
> +  EFI_ACPI_GPE1_BLK_LEN,
> +  EFI_ACPI_GPE1_BASE,
> +
> +  EFI_ACPI_CST_CNT,
> +  EFI_ACPI_P_LVL2_LAT,
> +  EFI_ACPI_P_LVL3_LAT,
> +  EFI_ACPI_FLUSH_SIZE,
> +  EFI_ACPI_FLUSH_STRIDE,
> +  EFI_ACPI_DUTY_OFFSET,
> +  EFI_ACPI_DUTY_WIDTH,
> +  EFI_ACPI_DAY_ALRM,
> +  EFI_ACPI_MON_ALRM,
> +  EFI_ACPI_CENTURY,
> +  EFI_ACPI_IAPC_BOOT_ARCH,
> +  EFI_ACPI_RESERVED_BYTE,
> +  EFI_ACPI_FIXED_FEATURE_FLAGS | EFI_ACPI_6_2_SLP_BUTTON,
> +  //
> +  // Reset Register Block
> +  //
> +  {EFI_ACPI_RESET_REG_ADDRESS_SPACE_ID,
> +  EFI_ACPI_RESET_REG_BIT_WIDTH,
> +  EFI_ACPI_RESET_REG_BIT_OFFSET,
> +  EFI_ACPI_6_2_BYTE,
> +  EFI_ACPI_RESET_REG_ADDRESS},
> +
> +  EFI_ACPI_RESET_VALUE,
> +  EFI_ACPI_RESERVED_WORD,   // EFI_ACPI_6_2_ARM_BOOT_ARCH
> +  EFI_ACPI_6_2_FIXED_ACPI_DESCRIPTION_TABLE_MINOR_REVISION,
> +  //
> +  // These addresses will be updated at runtime
> +  //
> +  0x0000000000000000, // X_FIRMWARE_CTRL
> +  0x0000000000000000, // X_DSDT
> +  //
> +  // X_PM1a Event Register Block
> +  //
> +  {EFI_ACPI_PM1A_EVT_BLK_ADDRESS_SPACE_ID,
> +  EFI_ACPI_PM1A_EVT_BLK_BIT_WIDTH,
> +  EFI_ACPI_PM1A_EVT_BLK_BIT_OFFSET,
> +  EFI_ACPI_6_2_WORD,
> +  EFI_ACPI_PM1A_EVT_BLK_ADDRESS},
> +  //
> +  // X_PM1b Event Register Block
> +  //
> +  {EFI_ACPI_PM1B_EVT_BLK_ADDRESS_SPACE_ID,
> +  EFI_ACPI_PM1B_EVT_BLK_BIT_WIDTH,
> +  EFI_ACPI_PM1B_EVT_BLK_BIT_OFFSET,
> +  EFI_ACPI_6_2_UNDEFINED,
> +  EFI_ACPI_PM1B_EVT_BLK_ADDRESS},
> +  //
> +  // X_PM1a Control Register Block
> +  //
> +  {EFI_ACPI_PM1A_CNT_BLK_ADDRESS_SPACE_ID,
> +  EFI_ACPI_PM1A_CNT_BLK_BIT_WIDTH,
> +  EFI_ACPI_PM1A_CNT_BLK_BIT_OFFSET,
> +  EFI_ACPI_6_2_WORD,
> +  EFI_ACPI_PM1A_CNT_BLK_ADDRESS},
> +  //
> +  // X_PM1b Control Register Block
> +  //
> +  {EFI_ACPI_PM1B_CNT_BLK_ADDRESS_SPACE_ID,
> +  EFI_ACPI_PM1B_CNT_BLK_BIT_WIDTH,
> +  EFI_ACPI_PM1B_CNT_BLK_BIT_OFFSET,
> +  EFI_ACPI_6_2_UNDEFINED,
> +  EFI_ACPI_PM1B_CNT_BLK_ADDRESS},
> +  //
> +  // X_PM2 Control Register Block
> +  //
> +  {EFI_ACPI_PM2_CNT_BLK_ADDRESS_SPACE_ID,
> +  EFI_ACPI_PM2_CNT_BLK_BIT_WIDTH,
> +  EFI_ACPI_PM2_CNT_BLK_BIT_OFFSET,
> +  EFI_ACPI_6_2_UNDEFINED,
> +  EFI_ACPI_PM2_CNT_BLK_ADDRESS},
> +  //
> +  // X_PM Timer Control Register Block
> +  //
> +  {EFI_ACPI_PM_TMR_BLK_ADDRESS_SPACE_ID,
> +  EFI_ACPI_PM_TMR_BLK_BIT_WIDTH,
> +  EFI_ACPI_PM_TMR_BLK_BIT_OFFSET,
> +  EFI_ACPI_6_2_DWORD,
> +  EFI_ACPI_PM_TMR_BLK_ADDRESS},
> +  //
> +  // X_General Purpose Event 0 Register Block
> +  //
> +  {EFI_ACPI_GPE0_BLK_ADDRESS_SPACE_ID,
> +  EFI_ACPI_GPE0_BLK_BIT_WIDTH,
> +  EFI_ACPI_GPE0_BLK_BIT_OFFSET,
> +  EFI_ACPI_6_2_BYTE,
> +  EFI_ACPI_GPE0_BLK_ADDRESS},
> +  //
> +  // X_General Purpose Event 1 Register Block
> +  //
> +  {EFI_ACPI_GPE1_BLK_ADDRESS_SPACE_ID,
> +  EFI_ACPI_GPE1_BLK_BIT_WIDTH,
> +  EFI_ACPI_GPE1_BLK_BIT_OFFSET,
> +  EFI_ACPI_6_2_UNDEFINED,
> +  EFI_ACPI_GPE1_BLK_ADDRESS}
> +};
> +
> +VOID*
> +ReferenceAcpiTable (
> +  VOID
> +  )
> +{
> +  //
> +  // Reference the table being generated to prevent the optimizer from
> removing the
> +  // data structure from the executable.
> +  //
> +  return (VOID*)&Fadt;
> +}
> diff --git
> a/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Hmat/H
> mat.aslc
> b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Hmat/H
> mat.aslc
> new file mode 100644
> index 0000000000..ae6efeaee5
> --- /dev/null
> +++
> b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Hmat/H
> mat.aslc
> @@ -0,0 +1,972 @@
> +/** @file
> +
> +  @copyright
> +  Copyright 2016 - 2018 Intel Corporation. <BR>
> +
> +  SPDX-License-Identifier: BSD-2-Clause-Patent
> +**/
> +
> +//
> +// Statements that include other files
> +//
> +#include "Acpi/Hmat.h"
> +
> +EFI_ACPI_HETEROGENEOUS_MEMORY_ATTRIBUTE_TABLE Hmat = {
> +  // EFI_ACPI_HETEROGENEOUS_MEMORY_ATTRIBUTE_TABLE_HEADER
> +  {
> +    // EFI_ACPI_DESCRIPTION_HEADER
> +    {
> +      EFI_HETEROGENEOUS_MEMORY_ATTRIBUTE_TABLE_SIGNATURE,
> +      sizeof (EFI_ACPI_HETEROGENEOUS_MEMORY_ATTRIBUTE_TABLE),
> +      EFI_ACPI_HETEROGENEOUS_MEMORY_ATTRIBUTE_TABLE_REVISION,
> +      0x00,                             // Checksum, updated at runtime
> +      {' ', ' ', ' ', ' ', ' ', ' '},   // OEM ID, programmed at runtime
> +      0,
> +      EFI_ACPI_OEM_HMAT_REVISION,
> +      0,
> +      0
> +    }, // EFI_ACPI_DESCRIPTION_HEADER
> +    (UINT32) 0
> +  }, // EFI_ACPI_HETEROGENEOUS_MEMORY_ATTRIBUTE_TABLE_HEADER
> +
> +  // Beginning of HMAT substructures
> +#if EFI_ACPI_HMAT_MSARS_COUNT > 0
> +  { //
> MEMORY_SUBSYSTEM_ADDRESS_RANGE_STRUCTURE[EFI_ACPI_HMAT_MS
> ARS_COUNT]
> +    MSARS_INIT()
> +    MSARS_INIT()
> +    MSARS_INIT()
> +    MSARS_INIT()
> +    MSARS_INIT()
> +    MSARS_INIT()
> +    MSARS_INIT()
> +    MSARS_INIT()
> +#if MC_MAX_NODE > 1
> +    MSARS_INIT()
> +    MSARS_INIT()
> +    MSARS_INIT()
> +    MSARS_INIT()
> +    MSARS_INIT()
> +    MSARS_INIT()
> +    MSARS_INIT()
> +    MSARS_INIT()
> +#endif
> +#if MC_MAX_NODE > 2
> +    MSARS_INIT()
> +    MSARS_INIT()
> +    MSARS_INIT()
> +    MSARS_INIT()
> +    MSARS_INIT()
> +    MSARS_INIT()
> +    MSARS_INIT()
> +    MSARS_INIT()
> +#endif
> +#if MC_MAX_NODE > 3
> +    MSARS_INIT()
> +    MSARS_INIT()
> +    MSARS_INIT()
> +    MSARS_INIT()
> +    MSARS_INIT()
> +    MSARS_INIT()
> +    MSARS_INIT()
> +    MSARS_INIT()
> +#endif
> +#if MC_MAX_NODE > 4
> +    MSARS_INIT()
> +    MSARS_INIT()
> +    MSARS_INIT()
> +    MSARS_INIT()
> +    MSARS_INIT()
> +    MSARS_INIT()
> +    MSARS_INIT()
> +    MSARS_INIT()
> +#endif
> +#if MC_MAX_NODE > 5
> +    MSARS_INIT()
> +    MSARS_INIT()
> +    MSARS_INIT()
> +    MSARS_INIT()
> +    MSARS_INIT()
> +    MSARS_INIT()
> +    MSARS_INIT()
> +    MSARS_INIT()
> +#endif
> +#if MC_MAX_NODE > 6
> +    MSARS_INIT()
> +    MSARS_INIT()
> +    MSARS_INIT()
> +    MSARS_INIT()
> +    MSARS_INIT()
> +    MSARS_INIT()
> +    MSARS_INIT()
> +    MSARS_INIT()
> +#endif
> +#if MC_MAX_NODE > 7
> +    MSARS_INIT()
> +    MSARS_INIT()
> +    MSARS_INIT()
> +    MSARS_INIT()
> +    MSARS_INIT()
> +    MSARS_INIT()
> +    MSARS_INIT()
> +    MSARS_INIT()
> +#endif
> +#if MC_MAX_NODE > 8
> +    MSARS_INIT()
> +    MSARS_INIT()
> +    MSARS_INIT()
> +    MSARS_INIT()
> +    MSARS_INIT()
> +    MSARS_INIT()
> +    MSARS_INIT()
> +    MSARS_INIT()
> +#endif
> +#if MC_MAX_NODE > 9
> +    MSARS_INIT()
> +    MSARS_INIT()
> +    MSARS_INIT()
> +    MSARS_INIT()
> +    MSARS_INIT()
> +    MSARS_INIT()
> +    MSARS_INIT()
> +    MSARS_INIT()
> +#endif
> +#if MC_MAX_NODE > 10
> +    MSARS_INIT()
> +    MSARS_INIT()
> +    MSARS_INIT()
> +    MSARS_INIT()
> +    MSARS_INIT()
> +    MSARS_INIT()
> +    MSARS_INIT()
> +    MSARS_INIT()
> +#endif
> +#if MC_MAX_NODE > 11
> +    MSARS_INIT()
> +    MSARS_INIT()
> +    MSARS_INIT()
> +    MSARS_INIT()
> +    MSARS_INIT()
> +    MSARS_INIT()
> +    MSARS_INIT()
> +    MSARS_INIT()
> +#endif
> +#if MC_MAX_NODE > 12
> +    MSARS_INIT()
> +    MSARS_INIT()
> +    MSARS_INIT()
> +    MSARS_INIT()
> +    MSARS_INIT()
> +    MSARS_INIT()
> +    MSARS_INIT()
> +    MSARS_INIT()
> +#endif
> +#if MC_MAX_NODE > 13
> +    MSARS_INIT()
> +    MSARS_INIT()
> +    MSARS_INIT()
> +    MSARS_INIT()
> +    MSARS_INIT()
> +    MSARS_INIT()
> +    MSARS_INIT()
> +    MSARS_INIT()
> +#endif
> +#if MC_MAX_NODE > 14
> +    MSARS_INIT()
> +    MSARS_INIT()
> +    MSARS_INIT()
> +    MSARS_INIT()
> +    MSARS_INIT()
> +    MSARS_INIT()
> +    MSARS_INIT()
> +    MSARS_INIT()
> +#endif
> +#if MC_MAX_NODE > 15
> +    MSARS_INIT()
> +    MSARS_INIT()
> +    MSARS_INIT()
> +    MSARS_INIT()
> +    MSARS_INIT()
> +    MSARS_INIT()
> +    MSARS_INIT()
> +    MSARS_INIT()
> +#endif
> +  }, //
> MEMORY_SUBSYSTEM_ADDRESS_RANGE_STRUCTURE[EFI_ACPI_HMAT_MS
> ARS_COUNT]
> +#endif
> +#if EFI_ACPI_HMAT_LBIS_COUNT > 0
> +  { // LATENCY_BANDWIDTH_INFO_STRUCTURE
> Lbis[EFI_ACPI_HMAT_LBIS_COUNT]
> +    LBIS_START()
> +    RELATIVE_DISTANCE()
> +#if MC_MAX_NODE > 1
> +    RELATIVE_DISTANCE()
> +#endif
> +#if MC_MAX_NODE > 2
> +    RELATIVE_DISTANCE()
> +#endif
> +#if MC_MAX_NODE > 3
> +    RELATIVE_DISTANCE()
> +#endif
> +#if MC_MAX_NODE > 4
> +    RELATIVE_DISTANCE()
> +#endif
> +#if MC_MAX_NODE > 5
> +    RELATIVE_DISTANCE()
> +#endif
> +#if MC_MAX_NODE > 6
> +    RELATIVE_DISTANCE()
> +#endif
> +#if MC_MAX_NODE > 7
> +    RELATIVE_DISTANCE()
> +#endif
> +#if MC_MAX_NODE > 8
> +    RELATIVE_DISTANCE()
> +#endif
> +#if MC_MAX_NODE > 9
> +    RELATIVE_DISTANCE()
> +#endif
> +#if MC_MAX_NODE > 10
> +    RELATIVE_DISTANCE()
> +#endif
> +#if MC_MAX_NODE > 11
> +    RELATIVE_DISTANCE()
> +#endif
> +#if MC_MAX_NODE > 12
> +    RELATIVE_DISTANCE()
> +#endif
> +#if MC_MAX_NODE > 13
> +    RELATIVE_DISTANCE()
> +#endif
> +#if MC_MAX_NODE > 14
> +    RELATIVE_DISTANCE()
> +#endif
> +#if MC_MAX_NODE > 15
> +    RELATIVE_DISTANCE()
> +#endif
> +    LBIS_END()
> +#if EFI_ACPI_HMAT_LBIS_COUNT > 1
> +    LBIS_START()
> +    RELATIVE_DISTANCE()
> +#if MC_MAX_NODE > 1
> +    RELATIVE_DISTANCE()
> +#endif
> +#if MC_MAX_NODE > 2
> +    RELATIVE_DISTANCE()
> +#endif
> +#if MC_MAX_NODE > 3
> +    RELATIVE_DISTANCE()
> +#endif
> +#if MC_MAX_NODE > 4
> +    RELATIVE_DISTANCE()
> +#endif
> +#if MC_MAX_NODE > 5
> +    RELATIVE_DISTANCE()
> +#endif
> +#if MC_MAX_NODE > 6
> +    RELATIVE_DISTANCE()
> +#endif
> +#if MC_MAX_NODE > 7
> +    RELATIVE_DISTANCE()
> +#endif
> +#if MC_MAX_NODE > 8
> +    RELATIVE_DISTANCE()
> +#endif
> +#if MC_MAX_NODE > 9
> +    RELATIVE_DISTANCE()
> +#endif
> +#if MC_MAX_NODE > 10
> +    RELATIVE_DISTANCE()
> +#endif
> +#if MC_MAX_NODE > 11
> +    RELATIVE_DISTANCE()
> +#endif
> +#if MC_MAX_NODE > 12
> +    RELATIVE_DISTANCE()
> +#endif
> +#if MC_MAX_NODE > 13
> +    RELATIVE_DISTANCE()
> +#endif
> +#if MC_MAX_NODE > 14
> +    RELATIVE_DISTANCE()
> +#endif
> +#if MC_MAX_NODE > 15
> +    RELATIVE_DISTANCE()
> +#endif
> +    LBIS_END()
> +#endif
> +#if EFI_ACPI_HMAT_LBIS_COUNT > 2
> +    LBIS_START()
> +    RELATIVE_DISTANCE()
> +#if MC_MAX_NODE > 1
> +    RELATIVE_DISTANCE()
> +#endif
> +#if MC_MAX_NODE > 2
> +    RELATIVE_DISTANCE()
> +#endif
> +#if MC_MAX_NODE > 3
> +    RELATIVE_DISTANCE()
> +#endif
> +#if MC_MAX_NODE > 4
> +    RELATIVE_DISTANCE()
> +#endif
> +#if MC_MAX_NODE > 5
> +    RELATIVE_DISTANCE()
> +#endif
> +#if MC_MAX_NODE > 6
> +    RELATIVE_DISTANCE()
> +#endif
> +#if MC_MAX_NODE > 7
> +    RELATIVE_DISTANCE()
> +#endif
> +#if MC_MAX_NODE > 8
> +    RELATIVE_DISTANCE()
> +#endif
> +#if MC_MAX_NODE > 9
> +    RELATIVE_DISTANCE()
> +#endif
> +#if MC_MAX_NODE > 10
> +    RELATIVE_DISTANCE()
> +#endif
> +#if MC_MAX_NODE > 11
> +    RELATIVE_DISTANCE()
> +#endif
> +#if MC_MAX_NODE > 12
> +    RELATIVE_DISTANCE()
> +#endif
> +#if MC_MAX_NODE > 13
> +    RELATIVE_DISTANCE()
> +#endif
> +#if MC_MAX_NODE > 14
> +    RELATIVE_DISTANCE()
> +#endif
> +#if MC_MAX_NODE > 15
> +    RELATIVE_DISTANCE()
> +#endif
> +    LBIS_END()
> +#endif
> +#if EFI_ACPI_HMAT_LBIS_COUNT > 3
> +    LBIS_START()
> +    RELATIVE_DISTANCE()
> +#if MC_MAX_NODE > 1
> +    RELATIVE_DISTANCE()
> +#endif
> +#if MC_MAX_NODE > 2
> +    RELATIVE_DISTANCE()
> +#endif
> +#if MC_MAX_NODE > 3
> +    RELATIVE_DISTANCE()
> +#endif
> +#if MC_MAX_NODE > 4
> +    RELATIVE_DISTANCE()
> +#endif
> +#if MC_MAX_NODE > 5
> +    RELATIVE_DISTANCE()
> +#endif
> +#if MC_MAX_NODE > 6
> +    RELATIVE_DISTANCE()
> +#endif
> +#if MC_MAX_NODE > 7
> +    RELATIVE_DISTANCE()
> +#endif
> +#if MC_MAX_NODE > 8
> +    RELATIVE_DISTANCE()
> +#endif
> +#if MC_MAX_NODE > 9
> +    RELATIVE_DISTANCE()
> +#endif
> +#if MC_MAX_NODE > 10
> +    RELATIVE_DISTANCE()
> +#endif
> +#if MC_MAX_NODE > 11
> +    RELATIVE_DISTANCE()
> +#endif
> +#if MC_MAX_NODE > 12
> +    RELATIVE_DISTANCE()
> +#endif
> +#if MC_MAX_NODE > 13
> +    RELATIVE_DISTANCE()
> +#endif
> +#if MC_MAX_NODE > 14
> +    RELATIVE_DISTANCE()
> +#endif
> +#if MC_MAX_NODE > 15
> +    RELATIVE_DISTANCE()
> +#endif
> +    LBIS_END()
> +#endif
> +#if EFI_ACPI_HMAT_LBIS_COUNT > 4
> +    LBIS_START()
> +    RELATIVE_DISTANCE()
> +#if MC_MAX_NODE > 1
> +    RELATIVE_DISTANCE()
> +#endif
> +#if MC_MAX_NODE > 2
> +    RELATIVE_DISTANCE()
> +#endif
> +#if MC_MAX_NODE > 3
> +    RELATIVE_DISTANCE()
> +#endif
> +#if MC_MAX_NODE > 4
> +    RELATIVE_DISTANCE()
> +#endif
> +#if MC_MAX_NODE > 5
> +    RELATIVE_DISTANCE()
> +#endif
> +#if MC_MAX_NODE > 6
> +    RELATIVE_DISTANCE()
> +#endif
> +#if MC_MAX_NODE > 7
> +    RELATIVE_DISTANCE()
> +#endif
> +#if MC_MAX_NODE > 8
> +    RELATIVE_DISTANCE()
> +#endif
> +#if MC_MAX_NODE > 9
> +    RELATIVE_DISTANCE()
> +#endif
> +#if MC_MAX_NODE > 10
> +    RELATIVE_DISTANCE()
> +#endif
> +#if MC_MAX_NODE > 11
> +    RELATIVE_DISTANCE()
> +#endif
> +#if MC_MAX_NODE > 12
> +    RELATIVE_DISTANCE()
> +#endif
> +#if MC_MAX_NODE > 13
> +    RELATIVE_DISTANCE()
> +#endif
> +#if MC_MAX_NODE > 14
> +    RELATIVE_DISTANCE()
> +#endif
> +#if MC_MAX_NODE > 15
> +    RELATIVE_DISTANCE()
> +#endif
> +    LBIS_END()
> +#endif
> +#if EFI_ACPI_HMAT_LBIS_COUNT > 5
> +    LBIS_START()
> +    RELATIVE_DISTANCE()
> +#if MC_MAX_NODE > 1
> +    RELATIVE_DISTANCE()
> +#endif
> +#if MC_MAX_NODE > 2
> +    RELATIVE_DISTANCE()
> +#endif
> +#if MC_MAX_NODE > 3
> +    RELATIVE_DISTANCE()
> +#endif
> +#if MC_MAX_NODE > 4
> +    RELATIVE_DISTANCE()
> +#endif
> +#if MC_MAX_NODE > 5
> +    RELATIVE_DISTANCE()
> +#endif
> +#if MC_MAX_NODE > 6
> +    RELATIVE_DISTANCE()
> +#endif
> +#if MC_MAX_NODE > 7
> +    RELATIVE_DISTANCE()
> +#endif
> +#if MC_MAX_NODE > 8
> +    RELATIVE_DISTANCE()
> +#endif
> +#if MC_MAX_NODE > 9
> +    RELATIVE_DISTANCE()
> +#endif
> +#if MC_MAX_NODE > 10
> +    RELATIVE_DISTANCE()
> +#endif
> +#if MC_MAX_NODE > 11
> +    RELATIVE_DISTANCE()
> +#endif
> +#if MC_MAX_NODE > 12
> +    RELATIVE_DISTANCE()
> +#endif
> +#if MC_MAX_NODE > 13
> +    RELATIVE_DISTANCE()
> +#endif
> +#if MC_MAX_NODE > 14
> +    RELATIVE_DISTANCE()
> +#endif
> +#if MC_MAX_NODE > 15
> +    RELATIVE_DISTANCE()
> +#endif
> +    LBIS_END()
> +#endif
> +#if EFI_ACPI_HMAT_LBIS_COUNT > 6
> +    LBIS_START()
> +    RELATIVE_DISTANCE()
> +#if MC_MAX_NODE > 1
> +    RELATIVE_DISTANCE()
> +#endif
> +#if MC_MAX_NODE > 2
> +    RELATIVE_DISTANCE()
> +#endif
> +#if MC_MAX_NODE > 3
> +    RELATIVE_DISTANCE()
> +#endif
> +#if MC_MAX_NODE > 4
> +    RELATIVE_DISTANCE()
> +#endif
> +#if MC_MAX_NODE > 5
> +    RELATIVE_DISTANCE()
> +#endif
> +#if MC_MAX_NODE > 6
> +    RELATIVE_DISTANCE()
> +#endif
> +#if MC_MAX_NODE > 7
> +    RELATIVE_DISTANCE()
> +#endif
> +#if MC_MAX_NODE > 8
> +    RELATIVE_DISTANCE()
> +#endif
> +#if MC_MAX_NODE > 9
> +    RELATIVE_DISTANCE()
> +#endif
> +#if MC_MAX_NODE > 10
> +    RELATIVE_DISTANCE()
> +#endif
> +#if MC_MAX_NODE > 11
> +    RELATIVE_DISTANCE()
> +#endif
> +#if MC_MAX_NODE > 12
> +    RELATIVE_DISTANCE()
> +#endif
> +#if MC_MAX_NODE > 13
> +    RELATIVE_DISTANCE()
> +#endif
> +#if MC_MAX_NODE > 14
> +    RELATIVE_DISTANCE()
> +#endif
> +#if MC_MAX_NODE > 15
> +    RELATIVE_DISTANCE()
> +#endif
> +    LBIS_END()
> +#endif
> +#if EFI_ACPI_HMAT_LBIS_COUNT > 7
> +    LBIS_START()
> +    RELATIVE_DISTANCE()
> +#if MC_MAX_NODE > 1
> +    RELATIVE_DISTANCE()
> +#endif
> +#if MC_MAX_NODE > 2
> +    RELATIVE_DISTANCE()
> +#endif
> +#if MC_MAX_NODE > 3
> +    RELATIVE_DISTANCE()
> +#endif
> +#if MC_MAX_NODE > 4
> +    RELATIVE_DISTANCE()
> +#endif
> +#if MC_MAX_NODE > 5
> +    RELATIVE_DISTANCE()
> +#endif
> +#if MC_MAX_NODE > 6
> +    RELATIVE_DISTANCE()
> +#endif
> +#if MC_MAX_NODE > 7
> +    RELATIVE_DISTANCE()
> +#endif
> +#if MC_MAX_NODE > 8
> +    RELATIVE_DISTANCE()
> +#endif
> +#if MC_MAX_NODE > 9
> +    RELATIVE_DISTANCE()
> +#endif
> +#if MC_MAX_NODE > 10
> +    RELATIVE_DISTANCE()
> +#endif
> +#if MC_MAX_NODE > 11
> +    RELATIVE_DISTANCE()
> +#endif
> +#if MC_MAX_NODE > 12
> +    RELATIVE_DISTANCE()
> +#endif
> +#if MC_MAX_NODE > 13
> +    RELATIVE_DISTANCE()
> +#endif
> +#if MC_MAX_NODE > 14
> +    RELATIVE_DISTANCE()
> +#endif
> +#if MC_MAX_NODE > 15
> +    RELATIVE_DISTANCE()
> +#endif
> +    LBIS_END()
> +#endif
> +#if EFI_ACPI_HMAT_LBIS_COUNT > 8
> +    LBIS_START()
> +    RELATIVE_DISTANCE()
> +#if MC_MAX_NODE > 1
> +    RELATIVE_DISTANCE()
> +#endif
> +#if MC_MAX_NODE > 2
> +    RELATIVE_DISTANCE()
> +#endif
> +#if MC_MAX_NODE > 3
> +    RELATIVE_DISTANCE()
> +#endif
> +#if MC_MAX_NODE > 4
> +    RELATIVE_DISTANCE()
> +#endif
> +#if MC_MAX_NODE > 5
> +    RELATIVE_DISTANCE()
> +#endif
> +#if MC_MAX_NODE > 6
> +    RELATIVE_DISTANCE()
> +#endif
> +#if MC_MAX_NODE > 7
> +    RELATIVE_DISTANCE()
> +#endif
> +#if MC_MAX_NODE > 8
> +    RELATIVE_DISTANCE()
> +#endif
> +#if MC_MAX_NODE > 9
> +    RELATIVE_DISTANCE()
> +#endif
> +#if MC_MAX_NODE > 10
> +    RELATIVE_DISTANCE()
> +#endif
> +#if MC_MAX_NODE > 11
> +    RELATIVE_DISTANCE()
> +#endif
> +#if MC_MAX_NODE > 12
> +    RELATIVE_DISTANCE()
> +#endif
> +#if MC_MAX_NODE > 13
> +    RELATIVE_DISTANCE()
> +#endif
> +#if MC_MAX_NODE > 14
> +    RELATIVE_DISTANCE()
> +#endif
> +#if MC_MAX_NODE > 15
> +    RELATIVE_DISTANCE()
> +#endif
> +    LBIS_END()
> +#endif
> +#if EFI_ACPI_HMAT_LBIS_COUNT > 9
> +    LBIS_START()
> +    RELATIVE_DISTANCE()
> +#if MC_MAX_NODE > 1
> +    RELATIVE_DISTANCE()
> +#endif
> +#if MC_MAX_NODE > 2
> +    RELATIVE_DISTANCE()
> +#endif
> +#if MC_MAX_NODE > 3
> +    RELATIVE_DISTANCE()
> +#endif
> +#if MC_MAX_NODE > 4
> +    RELATIVE_DISTANCE()
> +#endif
> +#if MC_MAX_NODE > 5
> +    RELATIVE_DISTANCE()
> +#endif
> +#if MC_MAX_NODE > 6
> +    RELATIVE_DISTANCE()
> +#endif
> +#if MC_MAX_NODE > 7
> +    RELATIVE_DISTANCE()
> +#endif
> +#if MC_MAX_NODE > 8
> +    RELATIVE_DISTANCE()
> +#endif
> +#if MC_MAX_NODE > 9
> +    RELATIVE_DISTANCE()
> +#endif
> +#if MC_MAX_NODE > 10
> +    RELATIVE_DISTANCE()
> +#endif
> +#if MC_MAX_NODE > 11
> +    RELATIVE_DISTANCE()
> +#endif
> +#if MC_MAX_NODE > 12
> +    RELATIVE_DISTANCE()
> +#endif
> +#if MC_MAX_NODE > 13
> +    RELATIVE_DISTANCE()
> +#endif
> +#if MC_MAX_NODE > 14
> +    RELATIVE_DISTANCE()
> +#endif
> +#if MC_MAX_NODE > 15
> +    RELATIVE_DISTANCE()
> +#endif
> +    LBIS_END()
> +#endif
> +#if EFI_ACPI_HMAT_LBIS_COUNT > 10
> +    LBIS_START()
> +    RELATIVE_DISTANCE()
> +#if MC_MAX_NODE > 1
> +    RELATIVE_DISTANCE()
> +#endif
> +#if MC_MAX_NODE > 2
> +    RELATIVE_DISTANCE()
> +#endif
> +#if MC_MAX_NODE > 3
> +    RELATIVE_DISTANCE()
> +#endif
> +#if MC_MAX_NODE > 4
> +    RELATIVE_DISTANCE()
> +#endif
> +#if MC_MAX_NODE > 5
> +    RELATIVE_DISTANCE()
> +#endif
> +#if MC_MAX_NODE > 6
> +    RELATIVE_DISTANCE()
> +#endif
> +#if MC_MAX_NODE > 7
> +    RELATIVE_DISTANCE()
> +#endif
> +#if MC_MAX_NODE > 8
> +    RELATIVE_DISTANCE()
> +#endif
> +#if MC_MAX_NODE > 9
> +    RELATIVE_DISTANCE()
> +#endif
> +#if MC_MAX_NODE > 10
> +    RELATIVE_DISTANCE()
> +#endif
> +#if MC_MAX_NODE > 11
> +    RELATIVE_DISTANCE()
> +#endif
> +#if MC_MAX_NODE > 12
> +    RELATIVE_DISTANCE()
> +#endif
> +#if MC_MAX_NODE > 13
> +    RELATIVE_DISTANCE()
> +#endif
> +#if MC_MAX_NODE > 14
> +    RELATIVE_DISTANCE()
> +#endif
> +#if MC_MAX_NODE > 15
> +    RELATIVE_DISTANCE()
> +#endif
> +    LBIS_END()
> +#endif
> +#if EFI_ACPI_HMAT_LBIS_COUNT > 11
> +    LBIS_START()
> +    RELATIVE_DISTANCE()
> +#if MC_MAX_NODE > 1
> +    RELATIVE_DISTANCE()
> +#endif
> +#if MC_MAX_NODE > 2
> +    RELATIVE_DISTANCE()
> +#endif
> +#if MC_MAX_NODE > 3
> +    RELATIVE_DISTANCE()
> +#endif
> +#if MC_MAX_NODE > 4
> +    RELATIVE_DISTANCE()
> +#endif
> +#if MC_MAX_NODE > 5
> +    RELATIVE_DISTANCE()
> +#endif
> +#if MC_MAX_NODE > 6
> +    RELATIVE_DISTANCE()
> +#endif
> +#if MC_MAX_NODE > 7
> +    RELATIVE_DISTANCE()
> +#endif
> +#if MC_MAX_NODE > 8
> +    RELATIVE_DISTANCE()
> +#endif
> +#if MC_MAX_NODE > 9
> +    RELATIVE_DISTANCE()
> +#endif
> +#if MC_MAX_NODE > 10
> +    RELATIVE_DISTANCE()
> +#endif
> +#if MC_MAX_NODE > 11
> +    RELATIVE_DISTANCE()
> +#endif
> +#if MC_MAX_NODE > 12
> +    RELATIVE_DISTANCE()
> +#endif
> +#if MC_MAX_NODE > 13
> +    RELATIVE_DISTANCE()
> +#endif
> +#if MC_MAX_NODE > 14
> +    RELATIVE_DISTANCE()
> +#endif
> +#if MC_MAX_NODE > 15
> +    RELATIVE_DISTANCE()
> +#endif
> +    LBIS_END()
> +#endif
> +  }, // LATENCY_BANDWIDTH_INFO_STRUCTURE
> Lbis[EFI_ACPI_HMAT_LBIS_COUNT]
> +#endif
> +#if EFI_ACPI_HMAT_MSCIS_COUNT > 0
> +  { // MEMORY_SIDE_CACHE_INFORMATION_STRUCTURE
> MemSideCache[EFI_ACPI_HMAT_MSCIS_COUNT]
> +    MSCIS_INIT()
> +    MSCIS_INIT()
> +    MSCIS_INIT()
> +    MSCIS_INIT()
> +    MSCIS_INIT()
> +    MSCIS_INIT()
> +    MSCIS_INIT()
> +    MSCIS_INIT()
> +#if MC_MAX_NODE > 1
> +    MSCIS_INIT()
> +    MSCIS_INIT()
> +    MSCIS_INIT()
> +    MSCIS_INIT()
> +    MSCIS_INIT()
> +    MSCIS_INIT()
> +    MSCIS_INIT()
> +    MSCIS_INIT()
> +#endif
> +#if MC_MAX_NODE > 2
> +    MSCIS_INIT()
> +    MSCIS_INIT()
> +    MSCIS_INIT()
> +    MSCIS_INIT()
> +    MSCIS_INIT()
> +    MSCIS_INIT()
> +    MSCIS_INIT()
> +    MSCIS_INIT()
> +#endif
> +#if MC_MAX_NODE > 3
> +    MSCIS_INIT()
> +    MSCIS_INIT()
> +    MSCIS_INIT()
> +    MSCIS_INIT()
> +    MSCIS_INIT()
> +    MSCIS_INIT()
> +    MSCIS_INIT()
> +    MSCIS_INIT()
> +#endif
> +#if MC_MAX_NODE > 4
> +    MSCIS_INIT()
> +    MSCIS_INIT()
> +    MSCIS_INIT()
> +    MSCIS_INIT()
> +    MSCIS_INIT()
> +    MSCIS_INIT()
> +    MSCIS_INIT()
> +    MSCIS_INIT()
> +#endif
> +#if MC_MAX_NODE > 5
> +    MSCIS_INIT()
> +    MSCIS_INIT()
> +    MSCIS_INIT()
> +    MSCIS_INIT()
> +    MSCIS_INIT()
> +    MSCIS_INIT()
> +    MSCIS_INIT()
> +    MSCIS_INIT()
> +#endif
> +#if MC_MAX_NODE > 6
> +    MSCIS_INIT()
> +    MSCIS_INIT()
> +    MSCIS_INIT()
> +    MSCIS_INIT()
> +    MSCIS_INIT()
> +    MSCIS_INIT()
> +    MSCIS_INIT()
> +    MSCIS_INIT()
> +#endif
> +#if MC_MAX_NODE > 7
> +    MSCIS_INIT()
> +    MSCIS_INIT()
> +    MSCIS_INIT()
> +    MSCIS_INIT()
> +    MSCIS_INIT()
> +    MSCIS_INIT()
> +    MSCIS_INIT()
> +    MSCIS_INIT()
> +#endif
> +#if MC_MAX_NODE > 8
> +    MSCIS_INIT()
> +    MSCIS_INIT()
> +    MSCIS_INIT()
> +    MSCIS_INIT()
> +    MSCIS_INIT()
> +    MSCIS_INIT()
> +    MSCIS_INIT()
> +    MSCIS_INIT()
> +#endif
> +#if MC_MAX_NODE > 9
> +    MSCIS_INIT()
> +    MSCIS_INIT()
> +    MSCIS_INIT()
> +    MSCIS_INIT()
> +    MSCIS_INIT()
> +    MSCIS_INIT()
> +    MSCIS_INIT()
> +    MSCIS_INIT()
> +#endif
> +#if MC_MAX_NODE > 10
> +    MSCIS_INIT()
> +    MSCIS_INIT()
> +    MSCIS_INIT()
> +    MSCIS_INIT()
> +    MSCIS_INIT()
> +    MSCIS_INIT()
> +    MSCIS_INIT()
> +    MSCIS_INIT()
> +#endif
> +#if MC_MAX_NODE > 11
> +    MSCIS_INIT()
> +    MSCIS_INIT()
> +    MSCIS_INIT()
> +    MSCIS_INIT()
> +    MSCIS_INIT()
> +    MSCIS_INIT()
> +    MSCIS_INIT()
> +    MSCIS_INIT()
> +#endif
> +#if MC_MAX_NODE > 12
> +    MSCIS_INIT()
> +    MSCIS_INIT()
> +    MSCIS_INIT()
> +    MSCIS_INIT()
> +    MSCIS_INIT()
> +    MSCIS_INIT()
> +    MSCIS_INIT()
> +    MSCIS_INIT()
> +#endif
> +#if MC_MAX_NODE > 13
> +    MSCIS_INIT()
> +    MSCIS_INIT()
> +    MSCIS_INIT()
> +    MSCIS_INIT()
> +    MSCIS_INIT()
> +    MSCIS_INIT()
> +    MSCIS_INIT()
> +    MSCIS_INIT()
> +#endif
> +#if MC_MAX_NODE > 14
> +    MSCIS_INIT()
> +    MSCIS_INIT()
> +    MSCIS_INIT()
> +    MSCIS_INIT()
> +    MSCIS_INIT()
> +    MSCIS_INIT()
> +    MSCIS_INIT()
> +    MSCIS_INIT()
> +#endif
> +#if MC_MAX_NODE > 15
> +    MSCIS_INIT()
> +    MSCIS_INIT()
> +    MSCIS_INIT()
> +    MSCIS_INIT()
> +    MSCIS_INIT()
> +    MSCIS_INIT()
> +    MSCIS_INIT()
> +    MSCIS_INIT()
> +#endif
> +  }, // MEMORY_SIDE_CACHE_INFORMATION_STRUCTURE
> MemSideCache[EFI_ACPI_HMAT_MSCIS_COUNT]
> +#endif
> +};
> +
> +VOID*
> +ReferenceAcpiTable (
> +  VOID
> +  )
> +
> +{
> +  //
> +  // Reference the table being generated to prevent the optimizer from
> removing the
> +  // data structure from the executable
> +  //
> +  return (VOID*)&Hmat;
> +}
> diff --git
> a/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Hpet/Hp
> et.aslc
> b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Hpet/Hp
> et.aslc
> new file mode 100644
> index 0000000000..37b680ad6b
> --- /dev/null
> +++
> b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Hpet/Hp
> et.aslc
> @@ -0,0 +1,61 @@
> +/** @file
> +
> +  @copyright
> +  Copyright 2019 Intel Corporation. <BR>
> +
> +  SPDX-License-Identifier: BSD-2-Clause-Patent
> +**/
> +
> +//
> +// Statements that include other files
> +//
> +#include <Acpi/Hpet.h>
> +
> +//
> +// High Precision Event Timer Table
> +// Please modify all values in Hpet.h only.
> +//
> +EFI_ACPI_HIGH_PRECISION_EVENT_TIMER_TABLE_HEADER  Hpet = {
> +  {EFI_ACPI_6_2_HIGH_PRECISION_EVENT_TIMER_TABLE_SIGNATURE,    //
> Signature
> +  sizeof (EFI_ACPI_HIGH_PRECISION_EVENT_TIMER_TABLE_HEADER),  //
> Length
> +  EFI_ACPI_HIGH_PRECISION_EVENT_TIMER_TABLE_REVISION,         //
> Revision  [01]
> +  //
> +  // Checksum will be updated at runtime
> +  //
> +  0x00,                                                       // Checksum
> +  //
> +  // It is expected that these values will be updated at runtime
> +  //
> +  {' ',
> +  ' ',
> +  ' ',
> +  ' ',
> +  ' ',
> +  ' '},
> +  0,
> +  EFI_ACPI_OEM_HPET_REVISION,                                 // OEM Revision
> [0x00000001]
> +  0,                                                          // Creator ID
> +  0},                                                         // Creator Revision
> +  EFI_ACPI_EVENT_TIMER_BLOCK_ID,                              // Event Timer Block ID
> (4B) [0x8086A201]
> +  {EFI_ACPI_EVENT_TIMER_BLOCK_ADDRESS_SPACE_ID,               // 2
> [EFI_ACPI_6_2_SYSTEM_MEMORY]
> +  EFI_ACPI_EVENT_TIMER_BLOCK_BIT_WIDTH,                       // 3 [0x00]
> +  EFI_ACPI_EVENT_TIMER_BLOCK_BIT_OFFSET,                      // 4 [0x00]
> +  EFI_ACPI_EVENT_TIMER_ACCESS_SIZE,                           // [0x00]
> +  EFI_ACPI_EVENT_TIMER_BLOCK_ADDRESS},                        // HPET Block
> BASE_ADDRESS (12B) [0x00000000FED00000]
> +  EFI_ACPI_HPET_NUMBER,                                       // HPET Number [00]
> +  EFI_ACPI_MIN_CLOCK_TICK,                                    // Main Counter Minimum
> Clock tick    [0x0080]
> +  EFI_ACPI_HPET_ATTRIBUTES                                    // Page Protection & OEM
> attribute    [0x00]
> +};
> +
> +VOID*
> +ReferenceAcpiTable (
> +  VOID
> +  )
> +
> +{
> +  //
> +  // Reference the table being generated to prevent the optimizer from
> removing the
> +  // data structure from the exeutable
> +  //
> +  return (VOID*)&Hpet;
> +}
> diff --git
> a/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Mcfg/Mc
> fg.aslc
> b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Mcfg/M
> cfg.aslc
> new file mode 100644
> index 0000000000..6e9a84aa49
> --- /dev/null
> +++
> b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Mcfg/M
> cfg.aslc
> @@ -0,0 +1,74 @@
> +/** @file
> +
> +  @copyright
> +  Copyright 1999 - 2019 Intel Corporation. <BR>
> +
> +  SPDX-License-Identifier: BSD-2-Clause-Patent
> +**/
> +
> +//
> +// Statements that include other files
> +//
> +#include <Acpi/Mcfg.h>
> +
> +//
> +// MCFG Table definition
> +//
> +EFI_ACPI_MEMORY_MAPPED_CONFIGURATION_BASE_ADDRESS_TABLE
> Mcfg = {
> +
> {{EFI_ACPI_6_2_MEMORY_MAPPED_CONFIGURATION_BASE_ADDRESS_TA
> BLE_SIGNATURE,
> +  sizeof
> (EFI_ACPI_MEMORY_MAPPED_CONFIGURATION_BASE_ADDRESS_TABLE),
> +
> EFI_ACPI_MEMORY_MAPPED_CONFIGURATION_SPACE_ACCESS_TABLE_RE
> VISION,
> +  //
> +  // Checksum will be updated at runtime
> +  //
> +  0x00,
> +  //
> +  // It is expected that these values will be programmed at runtime
> +  //
> +  {' ',
> +  ' ',
> +  ' ',
> +  ' ',
> +  ' ',
> +  ' '},
> +
> +  0,
> +  EFI_ACPI_OEM_MCFG_REVISION,
> +  0,
> +  0},
> +  //
> +  // Beginning of MCFG specific fields
> +  //
> +  EFI_ACPI_RESERVED_QWORD},
> +  //
> +  // Sample Memory Mapped Configuration Space Base Address Structure
> +  //
> +  // 0x0,                                                              // Base Address
> +  // 0x0,                                                              // PCI Segment Group Number
> +  // 0x0,                                                              // Start Bus Number
> +  // 0x0,                                                              // End Bus Number
> +  // EFI_ACPI_RESERVED_DWORD,                                          // Reserved
> +  //
> +  // Memory Mapped Configuration Space Base Address Structure
> +  //
> +#if
> EFI_ACPI_MEMORY_MAPPED_ENHANCED_CONFIGURATION_BASE_ADDRE
> SS_STRUCTURE_COUNT > 0
> +  {{0x0,                    // Base Address, will be updated by AcpiPlatform
> +  0x0,                      // PCI Segment Group Number
> +  0x0,                      // Start Bus Number
> +  0xff,                     // End Bus Number
> +  EFI_ACPI_RESERVED_DWORD}} // Reserved
> +#endif //
> EFI_ACPI_MEMORY_MAPPED_ENHANCED_CONFIGURATION_BASE_ADDRE
> SS_STRUCTURE_COUNT
> +};
> +
> +VOID*
> +ReferenceAcpiTable (
> +  VOID
> +  )
> +
> +{
> +  //
> +  // Reference the table being generated to prevent the optimizer from
> removing the
> +  // data structure from the exeutable
> +  //
> +  return (VOID*)&Mcfg;
> +}
> diff --git
> a/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Migt/Mi
> gt.aslc
> b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Migt/Mi
> gt.aslc
> new file mode 100644
> index 0000000000..5efe5afee1
> --- /dev/null
> +++
> b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Migt/Mi
> gt.aslc
> @@ -0,0 +1,68 @@
> +/** @file
> +
> +  @copyright
> +  Copyright 2005 - 2019 Intel Corporation. <BR>
> +
> +  SPDX-License-Identifier: BSD-2-Clause-Patent
> +**/
> +
> +//
> +// Statements that include other files
> +//
> +#include <Acpi/Migt.h>
> +
> +//
> +// Please modify all values in Migt.h only.
> +//
> +EFI_MIGT_ACPI_DESCRIPTION_TABLE  Migt = {
> +  {EFI_MIGT_ACPI_TABLE_SIGNATURE,              // Signature
> +  sizeof (EFI_MIGT_ACPI_DESCRIPTION_TABLE),   // Length
> +  EFI_MIGT_ACPI_DESCRIPTION_TABLE_REVISION,   // Revision
> +  //
> +  // Checksum will be updated at runtime
> +  //
> +  0x00, // Checksum
> +  //
> +  // It is expected that these values will be updated at runtime
> +  //
> +  {' ',
> +  ' ',
> +  ' ',
> +  ' ',
> +  ' ',
> +  ' '},
> +  0,
> +  EFI_MIGT_ACPI_OEM_REVISION,                   // OEM Revision
> +  0,                                            // Creator ID
> +  0},                                            // Creator Revision
> +  //
> +  // MIGT Speicific Entries
> +  // Control Register GAS structure
> +  //
> +  {EFI_MIGT_CR_ACPI_ADDRESS_SPACE_ID,            // IO Type ID.
> +  EFI_MIGT_CR_ACPI_REGISTER_BIT_WIDTH,
> +  EFI_MIGT_CR_ACPI_REGISTER_BIT_OFFSET,
> +  EFI_ACPI_RESERVED_BYTE,
> +  EFI_MIGT_CR_ACPI_SMI_ADDRESS},
> +
> +  MIGT_SMI_SERVICE_ID,                          // SMI Door Bell
> +
> +  //
> +  // Action Region GAS structure
> +  //
> +  {EFI_MIGT_AR_ACPI_ADDRESS_SPACE_ID,            // Memory Type ID
> +  EFI_MIGT_AR_ACPI_REGISTER_BIT_WIDTH,
> +  EFI_MIGT_AR_ACPI_REGISTER_BIT_OFFSET,
> +  EFI_ACPI_RESERVED_BYTE,
> +  // update during boot
> +  EFI_MIGT_AR_ACPI_MEMORY_ADDRESS}
> +};
> +
> +VOID*
> +ReferenceAcpiTable (
> +  VOID
> +  )
> +
> +{
> +  return (VOID*)&Migt;
> +}
> diff --git
> a/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Msct/Ms
> ct.aslc
> b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Msct/Ms
> ct.aslc
> new file mode 100644
> index 0000000000..e0e1bebd0a
> --- /dev/null
> +++
> b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Msct/Ms
> ct.aslc
> @@ -0,0 +1,137 @@
> +/** @file
> +
> +  @copyright
> +  Copyright 2019 Intel Corporation. <BR>
> +
> +  SPDX-License-Identifier: BSD-2-Clause-Patent
> +**/
> +
> +//
> +// Statements that include other files
> +//
> +#include <Acpi/Msct.h>
> +
> +//
> +// Maximum System Characteristics Table definition
> +//
> +EFI_ACPI_MAXIMUM_SYSTEM_CHARACTERISTICS_TABLE Msct = {
> +
> {EFI_ACPI_6_2_MAXIMUM_SYSTEM_CHARACTERISTICS_TABLE_SIGNATURE
> ,
> +  sizeof (EFI_ACPI_MAXIMUM_SYSTEM_CHARACTERISTICS_TABLE),  //
> Length
> +  EFI_ACPI_MAXIMUM_SYSTEM_CHARACTERISTICS_TABLE_REVISION,  //
> Revision
> +  0x00,                                                    // Checksum will be updated at runtime
> +  {'I', 'N', 'T', 'E', 'L', ' '},                           // OemId
> +  0,                                                       // OemTableId
> +  EFI_ACPI_OEM_MSCT_REVISION,                              // OemRevision
> +  EFI_ACPI_CREATOR_ID,                                     // CreaterId
> +  EFI_ACPI_CREATOR_REVISION},                              // CreaterRevision
> +  //
> +  // Beginning of MSCT specific fields
> +  //
> +  0x00000038,                                              // OffsetProxDomInfo
> +  MAX_SOCKET - 1,                                          // MaxNumProxDom
> +  0x00000000,                                              // MaxNumClockDom
> +  0x0000000000000000,                                      // MaxPhysicalAddress
> +  //
> +  // Proximity Domain Information Structure 0
> +  //
> +
> {{EFI_ACPI_MAXIMUM_PROXIMITY_DOMAIN_INFORMATION_STRUCTURE
> _REVISION,  // Revision
> +  sizeof
> (EFI_ACPI_MAXIMUM_PROXIMITY_DOMAIN_INFORMATION_STRUCTURE),
> // Length
> +  0x00000000,                                                          // ProxDomRangeLow
> +  0x00000000,                                                          // ProxDomRangeHigh
> +  0x00000000,                                                          // MaxProcessorCapacity
> +  0x0000000000000000}                                                  // MaxMemoryCapacity
> +
> +#if MAX_SOCKET > 1
> +  //
> +  // Proximity Domain Information Structure 1
> +  //
> +
> ,{EFI_ACPI_MAXIMUM_PROXIMITY_DOMAIN_INFORMATION_STRUCTURE_
> REVISION,   // Revision
> +  sizeof
> (EFI_ACPI_MAXIMUM_PROXIMITY_DOMAIN_INFORMATION_STRUCTURE),
> // Length
> +  0x00000000,                                                          // ProxDomRangeLow
> +  0x00000000,                                                          // ProxDomRangeHigh
> +  0x00000000,                                                          // MaxProcessorCapacity
> +  0x0000000000000000}                                                  // MaxMemoryCapacity
> +#endif
> +
> +#if MAX_SOCKET > 2
> +  //
> +  // Proximity Domain Information Structure 2
> +  //
> +
> ,{EFI_ACPI_MAXIMUM_PROXIMITY_DOMAIN_INFORMATION_STRUCTURE_
> REVISION,  // Revision
> +  sizeof
> (EFI_ACPI_MAXIMUM_PROXIMITY_DOMAIN_INFORMATION_STRUCTURE),
> // Length
> +  0x00000000,                                                          // ProxDomRangeLow
> +  0x00000000,                                                          // ProxDomRangeHigh
> +  0x00000000,                                                          // MaxProcessorCapacity
> +  0x0000000000000000}                                                  // MaxMemoryCapacity
> +#endif
> +
> +#if MAX_SOCKET > 3
> +  //
> +  // Proximity Domain Information Structure 3
> +  //
> +
> ,{EFI_ACPI_MAXIMUM_PROXIMITY_DOMAIN_INFORMATION_STRUCTURE_
> REVISION,  // Revision
> +  sizeof
> (EFI_ACPI_MAXIMUM_PROXIMITY_DOMAIN_INFORMATION_STRUCTURE),
> // Length
> +  0x00000000,                                                          // ProxDomRangeLow
> +  0x00000000,                                                          // ProxDomRangeHigh
> +  0x00000000,                                                          // MaxProcessorCapacity
> +  0x0000000000000000}                                                  // MaxMemoryCapacity
> +#endif
> +
> +#if MAX_SOCKET > 4
> +  //
> +  // Proximity Domain Information Structure 4
> +  //
> +
> ,{EFI_ACPI_MAXIMUM_PROXIMITY_DOMAIN_INFORMATION_STRUCTURE_
> REVISION,  // Revision
> +  sizeof
> (EFI_ACPI_MAXIMUM_PROXIMITY_DOMAIN_INFORMATION_STRUCTURE),
> // Length
> +  0x00000000,                                                          // ProxDomRangeLow
> +  0x00000000,                                                          // ProxDomRangeHigh
> +  0x00000000,                                                          // MaxProcessorCapacity
> +  0x0000000000000000}                                                  // MaxMemoryCapacity
> +#endif
> +
> +#if MAX_SOCKET > 5
> +  //
> +  // Proximity Domain Information Structure 5
> +  //
> +
> ,{EFI_ACPI_MAXIMUM_PROXIMITY_DOMAIN_INFORMATION_STRUCTURE_
> REVISION,  // Revision
> +  sizeof
> (EFI_ACPI_MAXIMUM_PROXIMITY_DOMAIN_INFORMATION_STRUCTURE),
> // Length
> +  0x00000000,                                                          // ProxDomRangeLow
> +  0x00000000,                                                          // ProxDomRangeHigh
> +  0x00000000,                                                          // MaxProcessorCapacity
> +  0x0000000000000000}                                                  // MaxMemoryCapacity
> +#endif
> +
> +#if MAX_SOCKET > 6
> +  //
> +  // Proximity Domain Information Structure 6
> +  //
> +
> ,{EFI_ACPI_MAXIMUM_PROXIMITY_DOMAIN_INFORMATION_STRUCTURE_
> REVISION,  // Revision
> +  sizeof
> (EFI_ACPI_MAXIMUM_PROXIMITY_DOMAIN_INFORMATION_STRUCTURE),
> // Length
> +  0x00000000,                                                          // ProxDomRangeLow
> +  0x00000000,                                                          // ProxDomRangeHigh
> +  0x00000000,                                                          // MaxProcessorCapacity
> +  0x0000000000000000}                                                  // MaxMemoryCapacity
> +#endif
> +
> +#if MAX_SOCKET > 7
> +  //
> +  // Proximity Domain Information Structure 7
> +  //
> +
> ,{EFI_ACPI_MAXIMUM_PROXIMITY_DOMAIN_INFORMATION_STRUCTURE_
> REVISION,  // Revision
> +  sizeof
> (EFI_ACPI_MAXIMUM_PROXIMITY_DOMAIN_INFORMATION_STRUCTURE),
> // Length
> +  0x00000000,                                                          // ProxDomRangeLow
> +  0x00000000,                                                          // ProxDomRangeHigh
> +  0x00000000,                                                          // MaxProcessorCapacity
> +  0x0000000000000000}                                                  // MaxMemoryCapacity
> +#endif
> +  }
> +};
> +
> +VOID*
> +ReferenceAcpiTable (
> +  VOID
> +  )
> +
> +{
> +  return (VOID*)&Msct;
> +}
> diff --git
> a/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/NFIT/Nfi
> t.aslc
> b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/NFIT/Nfi
> t.aslc
> new file mode 100644
> index 0000000000..389c43ce3c
> --- /dev/null
> +++
> b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/NFIT/Nfi
> t.aslc
> @@ -0,0 +1,48 @@
> +/** @file
> +
> +  @copyright
> +  Copyright 2015 Intel Corporation. <BR>
> +
> +  SPDX-License-Identifier: BSD-2-Clause-Patent
> +**/
> +
> +//
> +// Statements that include other files
> +//
> +#include <Acpi/Nfit.h>
> +
> +//
> +// NFIT Table
> +// Please modify all values in Nfit.h only.
> +//
> +NVDIMM_FW_INTERFACE_TABLE  Nfit = {
> +  NVDIMM_FW_INTERFACE_TABLE_SIGNATURE,    // Signature
> +  sizeof (NVDIMM_FW_INTERFACE_TABLE),     // Length
> +  NVDIMM_FW_INTERFACE_TABLE_REVISION,     // Revision  [01]
> +  //
> +  // Checksum will be updated at runtime
> +  //
> +  0x00,                                                       // Checksum
> +  //
> +  // It is expected that these values will be updated at runtime
> +  //
> +  {' ', // TODO any other static values to be filled in?
> +  ' ',
> +  ' ',
> +  ' ',
> +  ' ',
> +  ' '}
> +};
> +
> +VOID*
> +ReferenceAcpiTable (
> +  VOID
> +  )
> +
> +{
> +  //
> +  // Reference the table being generated to prevent the optimizer from
> removing the
> +  // data structure from the exeutable
> +  //
> +  return (VOID*)&Nfit;
> +}
> diff --git
> a/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/PCAT/Pc
> at.aslc
> b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/PCAT/Pc
> at.aslc
> new file mode 100644
> index 0000000000..e43c865c64
> --- /dev/null
> +++
> b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/PCAT/Pc
> at.aslc
> @@ -0,0 +1,44 @@
> +/** @file
> +
> +  @copyright
> +  Copyright 2015 Intel Corporation. <BR>
> +
> +  SPDX-License-Identifier: BSD-2-Clause-Patent
> +**/
> +
> +//
> +// Statements that include other files
> +//
> +#include <Acpi/Pcat.h>
> +
> +//
> +// PCAT Table
> +// Please modify all values in Pcat.h only.
> +//
> +NVDIMM_PLATFORM_CONFIG_ATTRIBUTE_TABLE  Pcat = {
> +  NVDIMM_PLATFORM_CONFIG_ATTRIBUTE_TABLE_SIGNATURE, //
> Signature
> +  sizeof (NVDIMM_PLATFORM_CONFIG_ATTRIBUTE_TABLE),  // Length
> +  NVDIMM_PLATFORM_CONFIG_ATTRIBUTE_TABLE_REVISION,  // Revision
> +  //
> +  // Checksum will be updated at runtime
> +  //
> +  0x00,                                              // Checksum
> +  //
> +  // It is expected that these values will be updated at runtime
> +  //
> +  {' '}, // TODO any other static values?
> +
> +};
> +
> +VOID*
> +ReferenceAcpiTable (
> +  VOID
> +  )
> +
> +{
> +  //
> +  // Reference the table being generated to prevent the optimizer from
> removing the
> +  // data structure from the exeutable
> +  //
> +  return (VOID*)&Pcat;
> +}
> diff --git
> a/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Pmtt/Pm
> tt10nm.aslc
> b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Pmtt/P
> mtt10nm.aslc
> new file mode 100644
> index 0000000000..a0b4dc2756
> --- /dev/null
> +++
> b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Pmtt/P
> mtt10nm.aslc
> @@ -0,0 +1,136 @@
> +/** @file
> +
> +  @copyright
> +  Copyright 2016 - 2018 Intel Corporation. <BR>
> +
> +  SPDX-License-Identifier: BSD-2-Clause-Patent
> +**/
> +
> +//
> +// Statements that include other files
> +//
> +#include <Acpi/Pmtt.h>
> +//
> +// PMTT Table
> +//
> +#define PHYSICAL_COMP_IDENTIFIER                    \
> +  {PHYSICAL_COMPONENT_IDENTIFIER_TYPE_DIMM,         \
> +  EFI_ACPI_RESERVED_BYTE,                           \
> +  sizeof (ACPI_PMTT_DIMM_DEVICE),                   \
> +  0x00000000,                                       \
> +  EFI_ACPI_RESERVED_BYTE,                           \
> +  0x00000000,                                       \
> +  0xFFFFFFFF}
> +
> +#define SLOT                                                                         \
> +  {ACPI_TOP_LEVEL_VENDOR_SPECIFIC_DEVICE,                                            \
> +  EFI_ACPI_RESERVED_BYTE,                                                            \
> +  sizeof (ACPI_PMTT_SLOT_DEVICE) - sizeof(ACPI_PMTT_DIMM_DEVICE),
> \
> +  0x00000000,                                                                        \
> +  EFI_ACPI_RESERVED_BYTE,                                                            \
> +  0x00000000,                                                                        \
> +  PMTT_TYPE_SLOT_GUID,                                                               \
> +  0x00000000,                                                                        \
> +  EFI_ACPI_RESERVED_BYTE,                                                            \
> +  PHYSICAL_COMP_IDENTIFIER}
> +
> +#define CHANNEL                                                                      \
> +  {ACPI_TOP_LEVEL_VENDOR_SPECIFIC_DEVICE,                                            \
> +  EFI_ACPI_RESERVED_BYTE,                                                            \
> +  sizeof (ACPI_PMTT_CHANNEL_DEVICE) - MAX_DIMM *
> sizeof(ACPI_PMTT_SLOT_DEVICE),      \
> +  0x00000000,                                                                        \
> +  EFI_ACPI_RESERVED_BYTE,                                                            \
> +  0x00000000,                                                                        \
> +  PMTT_TYPE_CHANNEL_GUID,                                                            \
> +  0x00000000,                                                                        \
> +  EFI_ACPI_RESERVED_BYTE,                                                            \
> +  {SLOT,                                                                             \
> +  SLOT}                                                                              \
> +  }
> +
> +#define MEM_IMC                                                                      \
> +  {ACPI_TOP_LEVEL_IMC,                                                               \
> +  EFI_ACPI_RESERVED_BYTE,                                                            \
> +  sizeof (ACPI_PMTT_IMC_DEVICE) - MAX_MC_CH *
> sizeof(ACPI_PMTT_CHANNEL_DEVICE),      \
> +  0x00000000,                                                                        \
> +  EFI_ACPI_RESERVED_BYTE,                                                            \
> +  0x00000000,                                                                        \
> +  0x00000000,                                                                        \
> +  EFI_ACPI_RESERVED_BYTE,                                                            \
> +  {CHANNEL,                                                                          \
> +  CHANNEL}                                                                           \
> +  }
> +
> +#define DIE                                                                          \
> +  {ACPI_TOP_LEVEL_VENDOR_SPECIFIC_DEVICE,                                            \
> +  EFI_ACPI_RESERVED_BYTE,                                                            \
> +  sizeof (ACPI_PMTT_DIE_DEVICE) - MAX_IMC *
> sizeof(ACPI_PMTT_IMC_DEVICE),            \
> +  0x00000000,                                                                        \
> +  EFI_ACPI_RESERVED_BYTE,                                                            \
> +  0x00000000,                                                                        \
> +  PMTT_TYPE_DIE_GUID,                                                                \
> +  0x00000000,                                                                        \
> +  EFI_ACPI_RESERVED_BYTE,                                                            \
> +  {MEM_IMC,                                                                          \
> +  MEM_IMC,                                                                           \
> +  MEM_IMC,                                                                           \
> +  MEM_IMC}}
> +
> +#define SKT_LEVEL                                                                    \
> +  {ACPI_TOP_LEVEL_SOCKET,                                                            \
> +  EFI_ACPI_RESERVED_BYTE,                                                            \
> +  sizeof (ACPI_PMTT_SOCKET_DEVICE) - sizeof(ACPI_PMTT_DIE_DEVICE),
> \
> +  0x00000000,                                                                        \
> +  EFI_ACPI_RESERVED_BYTE,                                                            \
> +  0x00000000,                                                                        \
> +  0x00000000,                                                                        \
> +  EFI_ACPI_RESERVED_BYTE,                                                            \
> +  {DIE}                                                                              \
> +  },
> +#pragma pack(1)
> +
> +ACPI_PLATFORM_MEMORY_TOPOLOGY_TABLE mPmttTable = {
> +  {ACPI_PMTT_TABLE_SIGNATURE,                         // Signature 'PMTT'
> +  sizeof (ACPI_PLATFORM_MEMORY_TOPOLOGY_TABLE),       // Length
> +  ACPI_PMTT_TABLE_REVISION,                           // Revision
> +  0x00,                                               // CheckSum
> +  {'I', 'N', 'T', 'E', 'L', ' '},                     // OemId
> +  0,                                                  // OemTableId
> +  ACPI_PMTT_OEM_REVISION,                             // OemRevision
> +  EFI_ACPI_CREATOR_ID,                                // CreaterId
> +  EFI_ACPI_CREATOR_REVISION},                         // CreaterRevision
> +  0,                                                  // NumOfMemoryDevices
> +  { SKT_LEVEL
> +#if  MAX_SOCKET > 1
> +  SKT_LEVEL
> +#endif
> +#if  MAX_SOCKET > 2
> +  SKT_LEVEL
> +#endif
> +#if  MAX_SOCKET > 3
> +  SKT_LEVEL
> +#endif
> +#if  MAX_SOCKET > 4
> +  SKT_LEVEL
> +#endif
> +#if  MAX_SOCKET > 5
> +  SKT_LEVEL
> +#endif
> +#if  MAX_SOCKET > 6
> +  SKT_LEVEL
> +#endif
> +#if  MAX_SOCKET > 7
> +  SKT_LEVEL
> +#endif
> +  }
> +};
> +
> +#pragma pack()
> +
> +VOID*
> +ReferenceAcpiTable (
> +  VOID
> +  )
> +{
> +  return (VOID*)&mPmttTable;
> +}
> diff --git
> a/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/SPCR/Sp
> cr.aslc
> b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/SPCR/Sp
> cr.aslc
> new file mode 100644
> index 0000000000..26603102a2
> --- /dev/null
> +++
> b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/SPCR/Sp
> cr.aslc
> @@ -0,0 +1,89 @@
> +/** @file
> +
> +  @copyright
> +  Copyright 1999 - 2002 Intel Corporation. <BR>
> +
> +  SPDX-License-Identifier: BSD-2-Clause-Patent
> +**/
> +
> +//
> +// Statements that include other files
> +//
> +
> +#include <IndustryStandard/Acpi.h>
> +#include <IndustryStandard/SerialPortConsoleRedirectionTable.h>
> +#include <Acpi/Spcr.h>
> +
> +//
> +// Serial Port Console Redirection Table
> +// Please modify all values in Spcr.h only.
> +//
> +
> +EFI_ACPI_SERIAL_PORT_CONSOLE_REDIRECTION_TABLE Spcr = {
> +
> {EFI_ACPI_6_2_SERIAL_PORT_CONSOLE_REDIRECTION_TABLE_SIGNATURE,
> +  sizeof (EFI_ACPI_SERIAL_PORT_CONSOLE_REDIRECTION_TABLE),
> +  EFI_ACPI_SERIAL_PORT_CONSOLE_REDIRECTION_TABLE_REVISION,
> +
> +  //
> +  // Checksum will be updated at runtime
> +  //
> +  0x00,
> +
> +  //
> +  // It is expected that these values will be programmed at runtime
> +  //
> +  {' ', ' ', ' ', ' ', ' ', ' '},
> +
> +  0,
> +  EFI_ACPI_OEM_SPCR_REVISION,
> +  0,
> +  0},
> +
> +  //
> +  // Beginning of SPCR specific fields
> +  //
> +  EFI_ACPI_INTERFACE_TYPE,
> +  {EFI_ACPI_RESERVED_BYTE,
> +  EFI_ACPI_RESERVED_BYTE,
> +  EFI_ACPI_RESERVED_BYTE},
> +
> +  //
> +  // Base Address Block
> +  //
> +  {EFI_ACPI_BASE_ADDRESS_ADDRESS_SPACE_ID,
> +  EFI_ACPI_BASE_ADDRESS_BIT_WIDTH,
> +  EFI_ACPI_BASE_ADDRESS_BIT_OFFSET,
> +  EFI_ACPI_RESERVED_BYTE,
> +  EFI_ACPI_BASE_ADDRESS_ADDRESS},
> +
> +  EFI_ACPI_INTERRUPT_TYPE,
> +  EFI_ACPI_IRQ,
> +  EFI_ACPI_GLOBAL_SYSTEM_INTERRUPT,
> +  EFI_ACPI_BAUD_RATE,
> +  EFI_ACPI_PARITY,
> +  EFI_ACPI_STOP_BITS,
> +  EFI_ACPI_FLOW_CONTROL,
> +  EFI_ACPI_TERMINAL_TYPE,
> +  EFI_ACPI_LANGUAGE,
> +  EFI_ACPI_PCI_DEVICE_ID,
> +  EFI_ACPI_PCI_VENDOR_ID,
> +  EFI_ACPI_PCI_BUS_NUMBER,
> +  EFI_ACPI_PCI_DEVICE_NUMBER,
> +  EFI_ACPI_PCI_FUNCTION_NUMBER,
> +  EFI_ACPI_PCI_FLAGS,
> +  EFI_ACPI_PCI_SEGMENT,
> +  EFI_ACPI_RESERVED_DWORD
> +};
> +
> +VOID*
> +ReferenceAcpiTable (
> +  VOID
> +  )
> +
> +{
> +  //
> +  // Reference the table being generated to prevent the optimizer from
> removing the
> +  // data structure from the exeutable
> +  //
> +  return (VOID*)&Spcr;
> +}
> diff --git
> a/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Spmi/Sp
> mi.aslc
> b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Spmi/Sp
> mi.aslc
> new file mode 100644
> index 0000000000..74855daee4
> --- /dev/null
> +++
> b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Spmi/Sp
> mi.aslc
> @@ -0,0 +1,53 @@
> +/** @file
> +
> +  @copyright
> +  Copyright 2019 Intel Corporation. <BR>
> +
> +  SPDX-License-Identifier: BSD-2-Clause-Patent
> +**/
> +
> +//
> +// Statements that include other files
> +//
> +#include <Acpi/Spmi.h>
> +
> +//
> +// Server processor management interface table definition
> +//
> +EFI_ACPI_SERVER_PROCESSOR_MANAGEMENT_INTERFACE_TABLE Spmi =
> {
> +
> {EFI_ACPI_6_2_SERVER_PLATFORM_MANAGEMENT_INTERFACE_TABLE_SI
> GNATURE,
> +  sizeof
> (EFI_ACPI_SERVER_PROCESSOR_MANAGEMENT_INTERFACE_TABLE),
> // Length
> +
> EFI_ACPI_SERVER_PROCESSOR_MANAGEMENT_INTERFACE_TABLE_REVISIO
> N,                 // Revision
> +  0x00,                                                                          // Checksum will be updated at
> runtime
> +  {'I', 'N', 'T', 'E', 'L', ' '},                                                 // OemId
> +  0,                                                                             // OemTableId
> +  EFI_ACPI_OEM_SPMI_REVISION,                                                    // OemRevision
> +  0,                                                                             // CreaterId
> +  0},                                                                             // CreaterRevision
> +  //
> +  // Beginning of Spmi specific fields
> +  //
> +  0x00,                                                                          // InterfaceType
> +  0x01,                                                                          // Reserved37, always 1
> +  EFI_ACPI_SPMI_SPECIFICATION_REVISION,                                          //
> SpecificationRevision
> +  0x00,                                                                          // InterruptType
> +  0x00,                                                                          // GPE
> +  0x00,                                                                          // Reserved42
> +  0x00,                                                                          // PciDeviceFlag
> +  0x00000000,                                                                    // GlobalSystemInterrupt
> +  {0x00, 0x00, 0x00, 0x00, 0x00},                                                // GAS
> +  0x00,                                                                          // UidByte1
> +  0x00,                                                                          // UidByte2
> +  0x00,                                                                          // UidByte3
> +  0x00,                                                                          // UidByte4
> +  0x00                                                                           // Reserved64
> +};
> +
> +VOID*
> +ReferenceAcpiTable (
> +  VOID
> +  )
> +
> +{
> +  return (VOID*)&Spmi;
> +}
> diff --git
> a/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Wddt/W
> ddt1.0.aslc
> b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Wddt/W
> ddt1.0.aslc
> new file mode 100644
> index 0000000000..fe0db504fd
> --- /dev/null
> +++
> b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Wddt/W
> ddt1.0.aslc
> @@ -0,0 +1,74 @@
> +/** @file
> +
> +  @copyright
> +  Copyright 1999 - 2019 Intel Corporation. <BR>
> +
> +  SPDX-License-Identifier: BSD-2-Clause-Patent
> +**/
> +
> +//
> +// Statements that include other files
> +//
> +#include <Acpi/WatchdogDescriptionTable.h>
> +#include <Acpi/Wddt.h>
> +
> +//
> +// Watchdog Description Table , ACPI 6.2 compliant
> +//
> +EFI_ACPI_WATCH_DOG_DESCRIPTION_TABLE  Wddt = {
> +  {EFI_ACPI_WDDT_SIGNATURE,
> +  sizeof (EFI_ACPI_WATCH_DOG_DESCRIPTION_TABLE),
> +  EFI_ACPI_WDDT_DESCRIPTION_TABLE_REVISION,
> +  //
> +  // Checksum will be updated at runtime
> +  //
> +  0x00,
> +  //
> +  // It is expected that these values will be programmed at runtime
> +  //
> +  {' ',
> +  ' ',
> +  ' ',
> +  ' ',
> +  ' ',
> +  ' '},
> +  0,
> +  0,
> +  0,
> +  0},
> +  //
> +  // WDDT specific fields
> +  //
> +  //
> +  // This is LPC bridge VID it must be patched in
> +  //
> +  0,
> +  EFI_ACPI_WDDT_SPEC_VERSION,
> +  EFI_ACPI_WDDT_TABLE_VERSION,
> +  //
> +  // Base Address
> +  //
> +  {0x01,
> +  0xff,
> +  0x00,
> +  0x00,
> +  //
> +  // This is AcpiBase(PmBase)+60 and must be patched in
> +  //
> +  0000},
> +  EFI_ACPI_WDDT_TIMER_MAX_COUNT,
> +  EFI_ACPI_WDDT_TIMER_MIN_VALUE,
> +  EFI_ACPI_WDDT_TIMER_PERIOD_COUNT,
> +  EFI_ACPI_WDDT_STATUS_AVAILABLE,
> +  00
> +
> +};
> +
> +VOID*
> +ReferenceAcpiTable (
> +  VOID
> +  )
> +
> +{
> +  return (VOID*)&Wddt;
> +}
> diff --git
> a/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Wsmt/W
> smt.aslc
> b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Wsmt/W
> smt.aslc
> new file mode 100644
> index 0000000000..83484b7cd7
> --- /dev/null
> +++
> b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Wsmt/W
> smt.aslc
> @@ -0,0 +1,74 @@
> +/** @file
> +
> + @copyright
> +  Copyright 2017 - 2020 Intel Corporation.
> +
> +  SPDX-License-Identifier: BSD-2-Clause-Patent
> +**/
> +
> +
> +   //
> +   // Statements that include other files
> +   //
> +
> +#include <Acpi/Wsmt.h>
> +
> +   //
> +   // Windows SMM Security Mitigations Table
> +   // Please modify all values in Wsmt.h only.
> +   //
> +
> +ACPI_WINDOWS_SMM_SECURITY_MITIGATIONS_TABLE Wsmt = {
> +  //
> +  // Header
> +  //
> +  {
> +    ACPI_WSMT_SIGNATURE,
> +    ACPI_WSMT_LENGTH,
> +    EFI_ACPI_WSMT_REVISION,
> +
> +    //
> +    // Checksum will be updated at runtime
> +    //
> +    0x00,
> +
> +    //
> +    // It is expected that these values will be updated at runtime
> +    //
> +    { ' ', ' ', ' ', ' ', ' ', ' ' },
> +    0,
> +    ACPI_OEM_WSMT_REVISION,
> +    0,
> +    0
> +  },
> +  //
> +  // Protection Flags
> +  //
> +  {
> +    { 0 }
> +  }
> +
> +};
> +
> +#if defined (__GNUC__)
> +VOID*
> +ReferenceAcpiTable (
> + VOID
> + )
> +
> +{
> + //
> + // Reference the table being generated to prevent the optimizer from
> removing the
> + // data structure from the executable
> + //
> + return (VOID*)&Wsmt;
> +}
> +#else
> +VOID
> +main (
> + VOID
> + )
> +
> +{
> +}
> +#endif
> --
> 2.27.0.windows.1


^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [edk2-devel][edk2-platforms][PATCH V1 7/8] WhitleyOpenBoardPkg/WilsonCityRvp: Generate AML offset table
  2022-02-07 19:02 ` [edk2-devel][edk2-platforms][PATCH V1 7/8] WhitleyOpenBoardPkg/WilsonCityRvp: Generate AML offset table Oram, Isaac W
@ 2022-02-09  3:21   ` Nate DeSimone
  0 siblings, 0 replies; 17+ messages in thread
From: Nate DeSimone @ 2022-02-09  3:21 UTC (permalink / raw)
  To: Oram, Isaac W, devel@edk2.groups.io; +Cc: Chiu, Chasel

Reviewed-by: Nate DeSimone <nathaniel.l.desimone@intel.com>

> -----Original Message-----
> From: Oram, Isaac W <isaac.w.oram@intel.com>
> Sent: Monday, February 7, 2022 11:03 AM
> To: devel@edk2.groups.io
> Cc: Desimone, Nathaniel L <nathaniel.l.desimone@intel.com>; Chiu, Chasel
> <chasel.chiu@intel.com>
> Subject: [edk2-devel][edk2-platforms][PATCH V1 7/8]
> WhitleyOpenBoardPkg/WilsonCityRvp: Generate AML offset table
> 
> Add PreBuild step to generate the AML offset table for the ACPI tables.
> 
> Cc: Nate DeSimone <nathaniel.l.desimone@intel.com>
> Cc: Chasel Chiu <chasel.chiu@intel.com>
> Signed-off-by: Isaac Oram <isaac.w.oram@intel.com>
> ---
>  Platform/Intel/.gitignore                                                  |  2 +
>  Platform/Intel/WhitleyOpenBoardPkg/WilsonCityRvp/AmlOffsets.dsc            |
> 41 +++++++++++++
> 
> Platform/Intel/WhitleyOpenBoardPkg/WilsonCityRvp/AmlOffsets/AmlOffset
> s.inf | 26 ++++++++
>  Platform/Intel/WhitleyOpenBoardPkg/WilsonCityRvp/build_board.py            |
> 63 ++++++++++++++++++++
>  Platform/Intel/WhitleyOpenBoardPkg/WilsonCityRvp/build_config.cfg          |
> 15 +++++
>  5 files changed, 147 insertions(+)
> 
> diff --git a/Platform/Intel/.gitignore b/Platform/Intel/.gitignore new file
> mode 100644 index 0000000000..548fee5bea
> --- /dev/null
> +++ b/Platform/Intel/.gitignore
> @@ -0,0 +1,2 @@
> +WhitleyOpenBoardPkg/Uba/UbaMain/StaticSkuDataDxe/AmlOffsetTable.c
> +__init__.py
> diff --git
> a/Platform/Intel/WhitleyOpenBoardPkg/WilsonCityRvp/AmlOffsets.dsc
> b/Platform/Intel/WhitleyOpenBoardPkg/WilsonCityRvp/AmlOffsets.dsc
> new file mode 100644
> index 0000000000..2e5ebf432a
> --- /dev/null
> +++ b/Platform/Intel/WhitleyOpenBoardPkg/WilsonCityRvp/AmlOffsets.dsc
> @@ -0,0 +1,41 @@
> +## @file
> +# Build file for generating AML offset table # # @copyright # Copyright
> +(C) 2021 Intel Corporation.
> +#
> +# SPDX-License-Identifier: BSD-2-Clause-Patent ##
> +
> +[Defines]
> +  PLATFORM_NAME                       = $(RP_PKG)
> +  PLATFORM_GUID                       = D7EAF54D-C9B9-4075-89F0-71943DBCFA61
> +  PLATFORM_VERSION                    = 0.1
> +  DSC_SPECIFICATION                   = 0x00010005
> +  OUTPUT_DIRECTORY                    = Build/$(RP_PKG)
> +  SUPPORTED_ARCHITECTURES             = IA32|X64
> +  BUILD_TARGETS                       = DEBUG|RELEASE
> +  PLATFORM_SI_PACKAGE                 = ClientOneSiliconPkg
> +  DEFINE      PLATFORM_SI_BIN_PACKAGE = WhitleySiliconBinPkg
> +  PEI_ARCH                            = IA32
> +  DXE_ARCH                            = X64
> +
> +!if $(CPUTARGET) == "CPX"
> +  DEFINE FSP_BIN_PKG            = CedarIslandFspBinPkg
> +  DEFINE IIO_INSTANCE           = Skx
> +!elseif $(CPUTARGET) == "ICX"
> +  DEFINE FSP_BIN_PKG            = WhitleyFspBinPkg
> +  DEFINE IIO_INSTANCE           = Icx
> +!else
> +  DEFINE IIO_INSTANCE           = UnknownCpu
> +!endif
> +
> +  #
> +  # Platform On/Off features are defined here  #  !include
> + $(RP_PKG)/PlatformPkgConfig.dsc
> +
> +[Components.X64]
> +  $(RP_PKG)/WilsonCityRvp/AmlOffsets/AmlOffsets.inf
> +
> +!include $(RP_PKG)/Include/Dsc/BuildOptions.dsc
> diff --git
> a/Platform/Intel/WhitleyOpenBoardPkg/WilsonCityRvp/AmlOffsets/AmlOffs
> ets.inf
> b/Platform/Intel/WhitleyOpenBoardPkg/WilsonCityRvp/AmlOffsets/AmlOffs
> ets.inf
> new file mode 100644
> index 0000000000..8945f372e3
> --- /dev/null
> +++
> b/Platform/Intel/WhitleyOpenBoardPkg/WilsonCityRvp/AmlOffsets/AmlOff
> +++ sets.inf
> @@ -0,0 +1,26 @@
> +## @file
> +# Generate AML offset table EPRPPlatform10nm.offset.h via edk2 build #
> +# @copyright # Copyright (C) 2022 Intel Corporation.
> +#
> +# SPDX-License-Identifier: BSD-2-Clause-Patent ##
> +
> +[Defines]
> +  INF_VERSION                    = 0x00010005
> +  BASE_NAME                      = AmlOffsets
> +  FILE_GUID                      = d7641589-753a-44c5-91c2-bd09686205c6
> +  MODULE_TYPE                    = USER_DEFINED
> +  VERSION_STRING                 = 1.0
> +
> +[Sources]
> +
> +WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/EPRPPlatform10nm
> .asl
> +
> +[Packages]
> +  MdePkg/MdePkg.dec
> +  WhitleySiliconPkg/SiliconPkg.dec
> +
> +[BuildOptions]
> +  # add -vr and -so to generate offset.h
> +  *_*_*_ASL_FLAGS = -oi -vr -so
> diff --git
> a/Platform/Intel/WhitleyOpenBoardPkg/WilsonCityRvp/build_board.py
> b/Platform/Intel/WhitleyOpenBoardPkg/WilsonCityRvp/build_board.py
> index a0c31e4558..5f625f5f92 100644
> --- a/Platform/Intel/WhitleyOpenBoardPkg/WilsonCityRvp/build_board.py
> +++ b/Platform/Intel/WhitleyOpenBoardPkg/WilsonCityRvp/build_board.py
> @@ -23,6 +23,7 @@ def pre_build_ex(config, functions):
>      :returns: nothing
>      """
>      print("pre_build_ex")
> +
>      config["BUILD_DIR_PATH"] = os.path.join(config["WORKSPACE"],
>                                              'Build',
>                                              config["PLATFORM_BOARD_PACKAGE"], @@ -53,6
> +54,68 @@ def pre_build_ex(config, functions):
> 
>      if config.get("API_MODE_FSP_WRAPPER_BUILD", "FALSE") == "TRUE":
>          raise ValueError("FSP API Mode is currently unsupported on Ice Lake
> Xeon Scalable")
> +
> +    # Build the ACPI AML offset table *.offset.h
> +    print("Info: re-generating PlatformOffset header files")
> +
> +    execute_script = functions.get("execute_script")
> +
> +    command = ["build", "-D", "MAX_SOCKET=" + config["MAX_SOCKET"]]
> +
> +    if config["EXT_BUILD_FLAGS"] and config["EXT_BUILD_FLAGS"] != "":
> +        ext_build_flags = config["EXT_BUILD_FLAGS"].split(" ")
> +        ext_build_flags = [x.strip() for x in ext_build_flags]
> +        ext_build_flags = [x for x in ext_build_flags if x != ""]
> +        command.extend(ext_build_flags)
> +
> +    aml_offsets_split =
> os.path.split(os.path.normpath(config["AML_OFFSETS_PATH"]))
> +    command.append("-p")
> +    command.append(os.path.normpath(config["AML_OFFSETS_PATH"]) +
> '.dsc')
> +    command.append("-m")
> +    command.append(os.path.join(aml_offsets_split[0],
> aml_offsets_split[1], aml_offsets_split[1] + '.inf'))
> +    command.append("-y")
> +    command.append(os.path.join(config["WORKSPACE"],
> "PreBuildReport.txt"))
> +    command.append("--log=" + os.path.join(config["WORKSPACE"],
> + "PreBuild.log"))
> +
> +    _, _, _, code = execute_script(command, config)
> +    if code != 0:
> +        print(" ".join(command))
> +        print("Error re-generating PlatformOffset header files")
> +        sys.exit(1)
> +
> +    # Build AmlGenOffset command to consume the *.offset.h and produce
> AmlOffsetTable.c for StaticSkuDataDxe use.
> +
> +    # Get destination path and filename from config
> +    relative_file_path =
> os.path.normpath(config["STRIPPED_AML_OFFSETS_FILE_PATH"])     # get
> path relative to Platform/Intel
> +    out_file_path = os.path.join(config["WORKSPACE_PLATFORM"],
> relative_file_path)      # full path to output file
> +    out_file_dir = os.path.dirname(out_file_path)                                       #
> remove filename
> +
> +    out_file_root_ext = os.path.splitext(os.path.basename(out_file_path))
> # root and extension of output file
> +
> +    # Get relative path for the generated offset.h file
> +    relative_dsdt_file_path =
> os.path.normpath(config["DSDT_TABLE_FILE_PATH"])          # path relative to
> Platform/Intel
> +    dsdt_file_root_ext =
> os.path.splitext(os.path.basename(relative_dsdt_file_path))    # root and
> extension of generated offset.h file
> +
> +    # Generate output directory if it doesn't exist
> +    if not os.path.exists(out_file_dir):
> +        os.mkdir(out_file_dir)
> +
> +    command = ["python",
> +               os.path.join(config["MIN_PACKAGE_TOOLS"], "AmlGenOffset",
> "AmlGenOffset.py"),
> +               "-d", "--aml_filter", config["AML_FILTER"],
> +               "-o", out_file_path,
> +               os.path.join(config["BUILD_X64"], aml_offsets_split[0],
> + aml_offsets_split[1], aml_offsets_split[1], "OUTPUT",
> + os.path.dirname(relative_dsdt_file_path), dsdt_file_root_ext[0] +
> + ".offset.h")]
> +
> +    # execute the command
> +    _, _, _, code = execute_script(command, config)
> +    if code != 0:
> +        print(" ".join(command))
> +        print("Error re-generating PlatformOffset header files")
> +        sys.exit(1)
> +
> +    print("GenOffset done")
> +
> +
>      return None
> 
>  def _merge_files(files, ofile):
> diff --git
> a/Platform/Intel/WhitleyOpenBoardPkg/WilsonCityRvp/build_config.cfg
> b/Platform/Intel/WhitleyOpenBoardPkg/WilsonCityRvp/build_config.cfg
> index 1676c08813..4cc9496153 100644
> --- a/Platform/Intel/WhitleyOpenBoardPkg/WilsonCityRvp/build_config.cfg
> +++ b/Platform/Intel/WhitleyOpenBoardPkg/WilsonCityRvp/build_config.cfg
> @@ -34,3 +34,18 @@ FSP_BINARY_BUILD = FALSE  FSP_TEST_RELEASE =
> FALSE  SECURE_BOOT_ENABLE = FALSE  BIOS_INFO_GUID = 4A4CA1C6-871C-
> 45BB-8801-6910A7AA5807
> +
> +#
> +# AML offset table generation configuration options # All paths should
> +use / and be relative to edk2-platforms/Platform/Intel #
> +# AML_FILTER                      - AML filter is used to strip out unused AML offset
> data
> +# AML_OFFSETS_PATH                - Path to INF file that builds AML offsets C
> source file
> +#   The directory name, DSC file name, INF file name, and BASE_NAME must
> match identically
> +# DSDT_TABLE_FILE_PATH            - Path to DSDT ASL file for the board
> +# STRIPPED_AML_OFFSETS_FILE_PATH  - Target AML offset data file
> +consumed by UBA driver # AML_FILTER = \"PSYS\" .\.DRVT\"
> +.\.FIX[0-9,A-Z] BBI[0] BBU[0] CRCM BAR0 .\.CCT[0-9A-Z]\"
> +.\.CFH[0-9A-Z]\" .\.FXCD\" .\.FXST\" .\.FXIN\" .\.FXOU\" .\.FXBS\"
> +.\.FXFH\" .\.CENA\" .\.DRVT\" .\.CFIS\" {NULL }; AML_OFFSETS_PATH =
> +WhitleyOpenBoardPkg/WilsonCityRvp/AmlOffsets
> +DSDT_TABLE_FILE_PATH =
> +WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/EPRPPlatform10nm
> .asl
> +STRIPPED_AML_OFFSETS_FILE_PATH =
> +WhitleyOpenBoardPkg/Uba/UbaMain/StaticSkuDataDxe/AmlOffsetTable.c
> --
> 2.27.0.windows.1


^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [edk2-devel][edk2-platforms][PATCH V1 6/8] WhitleyOpenBoardPkg/Build: Enable includable build options
  2022-02-07 19:02 ` [edk2-devel][edk2-platforms][PATCH V1 6/8] WhitleyOpenBoardPkg/Build: Enable includable build options Oram, Isaac W
@ 2022-02-09  3:21   ` Nate DeSimone
  0 siblings, 0 replies; 17+ messages in thread
From: Nate DeSimone @ 2022-02-09  3:21 UTC (permalink / raw)
  To: Oram, Isaac W, devel@edk2.groups.io; +Cc: Chiu, Chasel

Reviewed-by: Nate DeSimone <nathaniel.l.desimone@intel.com>

> -----Original Message-----
> From: Oram, Isaac W <isaac.w.oram@intel.com>
> Sent: Monday, February 7, 2022 11:03 AM
> To: devel@edk2.groups.io
> Cc: Desimone, Nathaniel L <nathaniel.l.desimone@intel.com>; Chiu, Chasel
> <chasel.chiu@intel.com>
> Subject: [edk2-devel][edk2-platforms][PATCH V1 6/8]
> WhitleyOpenBoardPkg/Build: Enable includable build options
> 
> Separate the [BuildOptions] sections of the DSC to facilitate multiple DSC
> builds for prebuilding.
> 
> Cc: Nate DeSimone <nathaniel.l.desimone@intel.com>
> Cc: Chasel Chiu <chasel.chiu@intel.com>
> Signed-off-by: Isaac Oram <isaac.w.oram@intel.com>
> ---
>  Platform/Intel/WhitleyOpenBoardPkg/Include/Dsc/BuildOptions.dsc | 151
> ++++++++++++++++++++
>  Platform/Intel/WhitleyOpenBoardPkg/PlatformPkg.dsc              | 147 +---------
> ---------
>  2 files changed, 152 insertions(+), 146 deletions(-)
> 
> diff --git
> a/Platform/Intel/WhitleyOpenBoardPkg/Include/Dsc/BuildOptions.dsc
> b/Platform/Intel/WhitleyOpenBoardPkg/Include/Dsc/BuildOptions.dsc
> new file mode 100644
> index 0000000000..d806521abf
> --- /dev/null
> +++ b/Platform/Intel/WhitleyOpenBoardPkg/Include/Dsc/BuildOptions.dsc
> @@ -0,0 +1,151 @@
> +## @file
> +# Includable build options
> +#
> +# @copyright
> +# Copyright (C) 2008 Intel Corporation.
> +#
> +# SPDX-License-Identifier: BSD-2-Clause-Patent ##
> +
> +[BuildOptions.Common.EDKII]
> +# Append build options for EDK and EDKII drivers (= is Append, == is
> +Replace) !if $(CRB_FLAG_ENABLE) == TRUE
> +  DEFINE CRB_EDKII_BUILD_OPTIONS = -D CRB_FLAG !else
> +  DEFINE CRB_EDKII_BUILD_OPTIONS =
> +!endif
> +
> +!if $(DEBUG_FLAGS_ENABLE) == TRUE
> +  DEFINE EDKII_DEBUG_BUILD_OPTIONS = -D DEBUG_CODE_BLOCK=1 -D
> +PLATFORM_VARIABLE_ATTRIBUTES=0x3 !else
> +  DEFINE EDKII_DEBUG_BUILD_OPTIONS = -D SILENT_MODE -D
> +PLATFORM_VARIABLE_ATTRIBUTES=0x3 !endif
> +
> +!if $(SPARING_SCRATCHPAD_ENABLE) == TRUE
> +  DEFINE SPARING_SCRATCHPAD_OPTION = -D
> SPARING_SCRATCHPAD_SUPPORT
> +!else
> +  DEFINE SPARING_SCRATCHPAD_OPTIONS =
> +!endif
> +
> +!if $(SCRATCHPAD_DEBUG) == TRUE
> +  DEFINE SCRATCHPAD_DEBUG_OPTION = -D SCRATCHPAD_DEBUG !else
> +  DEFINE SCRATCHPAD_DEBUG_OPTION =
> +!endif
> +
> +!if $(PCH_SERVER_BIOS_ENABLE) == TRUE
> +  DEFINE PCH_BUILD_OPTION = -DPCH_SERVER_BIOS_FLAG=1 !else
> +  DEFINE PCH_BUILD_OPTION =
> +!endif
> +
> +!if $(SERVER_BIOS_ENABLE) == TRUE
> +  DEFINE SERVER_BUILD_OPTION = -DSERVER_BIOS_FLAG=1 !else
> +  DEFINE SERVER_BUILD_OPTION =
> +!endif
> +
> +DEFINE SC_PATH = -D SC_PATH="Pch/SouthClusterLbg"
> +
> +DEFINE ME_PATH = -D ME_PATH="Me/MeSps.4"
> +
> +DEFINE IE_PATH = -D IE_PATH="Ie/v1"
> +
> +DEFINE NVDIMM_OPTIONS =
> +
> +!if $(CPUTARGET) == "ICX"
> +  DEFINE CPU_TYPE_OPTIONS  = -D ICX_HOST -D A0_HOST -D B0_HOST
> !elseif
> +$(CPUTARGET) == "CPX"
> +  DEFINE CPU_TYPE_OPTIONS  = -D SKX_HOST -D CLX_HOST -D CPX_HOST -
> D
> +A0_HOST -D B0_HOST !endif
> +
> +DEFINE MAX_SOCKET_CORE_THREAD_OPTIONS = -D
> MAX_SOCKET=$(MAX_SOCKET) -D
> +MAX_CORE=$(MAX_CORE) -D MAX_THREAD=$(MAX_THREAD)
> +
> +DEFINE MRC_OPTIONS = -D LRDIMM_SUPPORT -D DDRT_SUPPORT
> +
> +!if $(CPU_SKX_ONLY_SUPPORT) == FALSE
> +  DEFINE MAX_IMC_CH_OPTIONS = -D MAX_IMC=4 -D MAX_MC_CH=2
> !else
> +  DEFINE MAX_IMC_CH_OPTIONS = -D MAX_IMC=2 -D MAX_MC_CH=3
> !endif
> +
> +DEFINE MAX_SAD_RULE_OPTION = -D MAX_SAD_RULES=24 -D
> MAX_DRAM_CLUSTERS=1
> +
> +DEFINE LT_BUILD_OPTIONS = -D LT_FLAG
> +
> +DEFINE FSP_BUILD_OPTIONS = -D FSP_DISPATCH_MODE_ENABLE=1
> +
> +#
> +# MAX_KTI_PORTS needs to be updated based on the silicon type # !if
> +$(CPUTARGET) == "CPX"
> +  DEFINE KTI_OPTIONS = -D MAX_KTI_PORTS=6 !else
> +  DEFINE KTI_OPTIONS = -D MAX_KTI_PORTS=3 !endif
> +
> +DEFINE IIO_STACK_OPTIONS = -D MAX_IIO_STACK=6 -D
> MAX_LOGIC_IIO_STACK=8
> +
> +DEFINE PCH_BIOS_BUILD_OPTIONS = $(PCH_BUILD_OPTION) $(SC_PATH)
> +$(SERVER_BUILD_OPTION)
> +
> +DEFINE EDKII_DSC_FEATURE_BUILD_OPTIONS =
> $(CRB_EDKII_BUILD_OPTIONS)
> +$(EDKII_DEBUG_BUILD_OPTIONS) $(PCH_BIOS_BUILD_OPTIONS)
> +$(PCH_PKG_OPTIONS) $(MAX_SOCKET_CORE_THREAD_OPTIONS)
> +$(MAX_IMC_CH_OPTIONS) $(MAX_SAD_RULE_OPTION) $(KTI_OPTIONS)
> +$(IIO_STACK_OPTIONS) $(LT_BUILD_OPTIONS) $(SECURITY_OPTIONS)
> +$(SPARING_SCRATCHPAD_OPTION) $(SCRATCHPAD_DEBUG_OPTION)
> +$(NVDIMM_OPTIONS) -D EFI_PCI_IOV_SUPPORT -D WHEA_SUPPORT
> +$(CPU_TYPE_OPTIONS) -D MMCFG_BASE_ADDRESS=0x80000000 -D
> +DISABLE_NEW_DEPRECATED_INTERFACES $(MRC_OPTIONS)
> $(FSP_BUILD_OPTIONS)
> +
> +DEFINE IE_OPTIONS = $(IE_PATH) -DIE_SUPPORT=0
> +
> +!if $(LINUX_GCC_BUILD) == TRUE
> +  DEFINE EDK2_LINUX_BUILD_OPTIONS = -D EDK2_CTE_BUILD !else
> +  DEFINE EDK2_LINUX_BUILD_OPTIONS =
> +!endif
> +
> +DEFINE EDKII_DSC_FEATURE_BUILD_OPTIONS =
> +$(EDKII_DSC_FEATURE_BUILD_OPTIONS) $(EDK2_LINUX_BUILD_OPTIONS)
> +$(IE_OPTIONS)
> +
> +DEFINE ME_OPTIONS = -DSPS_VERSION=4 $(ME_PATH)
> +
> +DEFINE ASPEED_ENABLE_BUILD_OPTIONS = -D ASPEED_ENABLE -D
> ESPI_ENABLE
> +
> +DEFINE EDKII_DSC_FEATURE_BUILD_OPTIONS =
> +$(EDKII_DSC_FEATURE_BUILD_OPTIONS) $(ME_OPTIONS)
> +$(ASPEED_ENABLE_BUILD_OPTIONS)
> +
> +  MSFT:*_*_*_CC_FLAGS= $(EDKII_DSC_FEATURE_BUILD_OPTIONS)
> /wd4819
> + GCC:*_*_*_CC_FLAGS= $(EDKII_DSC_FEATURE_BUILD_OPTIONS)
> +  *_*_*_VFRPP_FLAGS = $(EDKII_DSC_FEATURE_BUILD_OPTIONS)
> +  *_*_*_APP_FLAGS   = $(EDKII_DSC_FEATURE_BUILD_OPTIONS)
> +  *_*_*_PP_FLAGS    = $(EDKII_DSC_FEATURE_BUILD_OPTIONS)
> +  *_*_*_ASLPP_FLAGS = $(EDKII_DSC_FEATURE_BUILD_OPTIONS)
> +  *_*_*_ASLCC_FLAGS = $(EDKII_DSC_FEATURE_BUILD_OPTIONS)
> +
> +
> +#
> +# Enable source level debugging for RELEASE build # !if $(TARGET) ==
> +"RELEASE"
> +  DEFINE EDKII_RELEASE_SRCDBG_ASM_BUILD_OPTIONS   =
> +  DEFINE EDKII_RELEASE_SRCDBG_CC_BUILD_OPTIONS    =
> +  DEFINE EDKII_RELEASE_SRCDBG_DLINK_BUILD_OPTIONS =
> +
> +  MSFT:*_*_*_ASM_FLAGS   =
> $(EDKII_RELEASE_SRCDBG_ASM_BUILD_OPTIONS) /Zi
> +  MSFT:*_*_*_CC_FLAGS    =
> $(EDKII_RELEASE_SRCDBG_CC_BUILD_OPTIONS) /Z7
> +  MSFT:*_*_*_DLINK_FLAGS =
> $(EDKII_RELEASE_SRCDBG_DLINK_BUILD_OPTIONS) /DEBUG
> +  GCC:*_*_*_ASM_FLAGS    =
> $(EDKII_RELEASE_SRCDBG_ASM_BUILD_OPTIONS)
> +  GCC:*_*_*_CC_FLAGS     =
> $(EDKII_RELEASE_SRCDBG_CC_BUILD_OPTIONS)
> +  GCC:*_*_*_DLINK_FLAGS  =
> $(EDKII_RELEASE_SRCDBG_DLINK_BUILD_OPTIONS)
> +!endif
> +
> +#
> +# Override the VFR compile flags to speed the build time #
> +
> +*_*_*_VFR_FLAGS                     ==  -n
> +
> +#
> +# add to the build options for DXE/SMM drivers to remove the log message:
> +# !!!!!!!!  InsertImageRecord - Section Alignment(0x20) is not 4K  !!!!!!!!
> +#
> +[BuildOptions.common.EDKII.DXE_RUNTIME_DRIVER,
> BuildOptions.common.EDKII.DXE_SMM_DRIVER,
> BuildOptions.common.EDKII.SMM_CORE]
> +   MSFT:*_*_*_DLINK_FLAGS = /ALIGN:4096
> +
> +[BuildOptions]
> +  GCC:*_GCC5_*_CC_FLAGS = -Wno-overflow -Wno-discarded-qualifiers
> +-Wno-unused-variable -Wno-unused-but-set-variable
> +-Wno-incompatible-pointer-types -mabi=ms
> +  GCC:*_GCC5_IA32_DLINK_FLAGS = -z common-page-size=0x20 -z muldefs
> +  GCC:*_GCC5_X64_DLINK_FLAGS  = -z common-page-size=0x20 -z muldefs
> +  MSFT:*_*_*_CC_FLAGS = /FAsc
> diff --git a/Platform/Intel/WhitleyOpenBoardPkg/PlatformPkg.dsc
> b/Platform/Intel/WhitleyOpenBoardPkg/PlatformPkg.dsc
> index 9c2b8a1048..e78a104004 100644
> --- a/Platform/Intel/WhitleyOpenBoardPkg/PlatformPkg.dsc
> +++ b/Platform/Intel/WhitleyOpenBoardPkg/PlatformPkg.dsc
> @@ -867,149 +867,4 @@
>  #                        module style (EDK or EDKII) specified in [Components] section.
>  #
> 
> ##########################################################
> #########################################
> -[BuildOptions.Common.EDKII]
> -# Append build options for EDK and EDKII drivers (= is Append, == is
> Replace) -!if $(CRB_FLAG_ENABLE) == TRUE
> -  DEFINE CRB_EDKII_BUILD_OPTIONS = -D CRB_FLAG -!else
> -  DEFINE CRB_EDKII_BUILD_OPTIONS =
> -!endif
> -
> -!if $(DEBUG_FLAGS_ENABLE) == TRUE
> -  DEFINE EDKII_DEBUG_BUILD_OPTIONS = -D DEBUG_CODE_BLOCK=1 -D
> PLATFORM_VARIABLE_ATTRIBUTES=0x3 -!else
> -  DEFINE EDKII_DEBUG_BUILD_OPTIONS = -D SILENT_MODE -D
> PLATFORM_VARIABLE_ATTRIBUTES=0x3 -!endif
> -
> -!if $(SPARING_SCRATCHPAD_ENABLE) == TRUE
> -  DEFINE SPARING_SCRATCHPAD_OPTION = -D
> SPARING_SCRATCHPAD_SUPPORT -!else
> -  DEFINE SPARING_SCRATCHPAD_OPTIONS =
> -!endif
> -
> -!if $(SCRATCHPAD_DEBUG) == TRUE
> -  DEFINE SCRATCHPAD_DEBUG_OPTION = -D SCRATCHPAD_DEBUG -!else
> -  DEFINE SCRATCHPAD_DEBUG_OPTION =
> -!endif
> -
> -!if $(PCH_SERVER_BIOS_ENABLE) == TRUE
> -  DEFINE PCH_BUILD_OPTION = -DPCH_SERVER_BIOS_FLAG=1 -!else
> -  DEFINE PCH_BUILD_OPTION =
> -!endif
> -
> -!if $(SERVER_BIOS_ENABLE) == TRUE
> -  DEFINE SERVER_BUILD_OPTION = -DSERVER_BIOS_FLAG=1 -!else
> -  DEFINE SERVER_BUILD_OPTION =
> -!endif
> -
> -DEFINE SC_PATH = -D SC_PATH="Pch/SouthClusterLbg"
> -
> -DEFINE ME_PATH = -D ME_PATH="Me/MeSps.4"
> -
> -DEFINE IE_PATH = -D IE_PATH="Ie/v1"
> -
> -DEFINE NVDIMM_OPTIONS =
> -
> -!if $(CPUTARGET) == "ICX"
> -  DEFINE CPU_TYPE_OPTIONS  = -D ICX_HOST -D A0_HOST -D B0_HOST -
> !elseif $(CPUTARGET) == "CPX"
> -  DEFINE CPU_TYPE_OPTIONS  = -D SKX_HOST -D CLX_HOST -D CPX_HOST -D
> A0_HOST -D B0_HOST -!endif
> -
> -DEFINE MAX_SOCKET_CORE_THREAD_OPTIONS = -D
> MAX_SOCKET=$(MAX_SOCKET) -D MAX_CORE=$(MAX_CORE) -D
> MAX_THREAD=$(MAX_THREAD)
> -
> -DEFINE MRC_OPTIONS = -D LRDIMM_SUPPORT -D DDRT_SUPPORT
> -
> -!if $(CPU_SKX_ONLY_SUPPORT) == FALSE
> -  DEFINE MAX_IMC_CH_OPTIONS = -D MAX_IMC=4 -D MAX_MC_CH=2 -
> !else
> -  DEFINE MAX_IMC_CH_OPTIONS = -D MAX_IMC=2 -D MAX_MC_CH=3 -
> !endif
> -
> -DEFINE MAX_SAD_RULE_OPTION = -D MAX_SAD_RULES=24 -D
> MAX_DRAM_CLUSTERS=1
> -
> -DEFINE LT_BUILD_OPTIONS = -D LT_FLAG
> -
> -DEFINE FSP_BUILD_OPTIONS = -D FSP_DISPATCH_MODE_ENABLE=1
> -
> -#
> -# MAX_KTI_PORTS needs to be updated based on the silicon type -# -!if
> $(CPUTARGET) == "CPX"
> -  DEFINE KTI_OPTIONS = -D MAX_KTI_PORTS=6 -!else
> -  DEFINE KTI_OPTIONS = -D MAX_KTI_PORTS=3 -!endif
> -
> -DEFINE IIO_STACK_OPTIONS = -D MAX_IIO_STACK=6 -D
> MAX_LOGIC_IIO_STACK=8
> -
> -DEFINE PCH_BIOS_BUILD_OPTIONS = $(PCH_BUILD_OPTION) $(SC_PATH)
> $(SERVER_BUILD_OPTION)
> -
> -DEFINE EDKII_DSC_FEATURE_BUILD_OPTIONS =
> $(CRB_EDKII_BUILD_OPTIONS) $(EDKII_DEBUG_BUILD_OPTIONS)
> $(PCH_BIOS_BUILD_OPTIONS) $(PCH_PKG_OPTIONS)
> $(MAX_SOCKET_CORE_THREAD_OPTIONS) $(MAX_IMC_CH_OPTIONS)
> $(MAX_SAD_RULE_OPTION) $(KTI_OPTIONS) $(IIO_STACK_OPTIONS)
> $(LT_BUILD_OPTIONS) $(SECURITY_OPTIONS)
> $(SPARING_SCRATCHPAD_OPTION) $(SCRATCHPAD_DEBUG_OPTION)
> $(NVDIMM_OPTIONS) -D EFI_PCI_IOV_SUPPORT -D WHEA_SUPPORT
> $(CPU_TYPE_OPTIONS) -D MMCFG_BASE_ADDRESS=0x80000000 -D
> DISABLE_NEW_DEPRECATED_INTERFACES $(MRC_OPTIONS)
> $(FSP_BUILD_OPTIONS)
> -
> -DEFINE IE_OPTIONS = $(IE_PATH) -DIE_SUPPORT=0
> -
> -!if $(LINUX_GCC_BUILD) == TRUE
> -  DEFINE EDK2_LINUX_BUILD_OPTIONS = -D EDK2_CTE_BUILD -!else
> -  DEFINE EDK2_LINUX_BUILD_OPTIONS =
> -!endif
> -
> -DEFINE EDKII_DSC_FEATURE_BUILD_OPTIONS =
> $(EDKII_DSC_FEATURE_BUILD_OPTIONS) $(EDK2_LINUX_BUILD_OPTIONS)
> $(IE_OPTIONS)
> -
> -DEFINE ME_OPTIONS = -DSPS_VERSION=4 $(ME_PATH)
> -
> -DEFINE ASPEED_ENABLE_BUILD_OPTIONS = -D ASPEED_ENABLE -D
> ESPI_ENABLE
> -
> -DEFINE EDKII_DSC_FEATURE_BUILD_OPTIONS =
> $(EDKII_DSC_FEATURE_BUILD_OPTIONS) $(ME_OPTIONS)
> $(ASPEED_ENABLE_BUILD_OPTIONS)
> -
> -  MSFT:*_*_*_CC_FLAGS= $(EDKII_DSC_FEATURE_BUILD_OPTIONS)
> /wd4819
> -  GCC:*_*_*_CC_FLAGS= $(EDKII_DSC_FEATURE_BUILD_OPTIONS)
> -  *_*_*_VFRPP_FLAGS = $(EDKII_DSC_FEATURE_BUILD_OPTIONS)
> -  *_*_*_APP_FLAGS   = $(EDKII_DSC_FEATURE_BUILD_OPTIONS)
> -  *_*_*_PP_FLAGS    = $(EDKII_DSC_FEATURE_BUILD_OPTIONS)
> -  *_*_*_ASLPP_FLAGS = $(EDKII_DSC_FEATURE_BUILD_OPTIONS)
> -  *_*_*_ASLCC_FLAGS = $(EDKII_DSC_FEATURE_BUILD_OPTIONS)
> -
> -
> -#
> -# Enable source level debugging for RELEASE build -# -!if $(TARGET) ==
> "RELEASE"
> -  DEFINE EDKII_RELEASE_SRCDBG_ASM_BUILD_OPTIONS   =
> -  DEFINE EDKII_RELEASE_SRCDBG_CC_BUILD_OPTIONS    =
> -  DEFINE EDKII_RELEASE_SRCDBG_DLINK_BUILD_OPTIONS =
> -
> -  MSFT:*_*_*_ASM_FLAGS   =
> $(EDKII_RELEASE_SRCDBG_ASM_BUILD_OPTIONS) /Zi
> -  MSFT:*_*_*_CC_FLAGS    =
> $(EDKII_RELEASE_SRCDBG_CC_BUILD_OPTIONS) /Z7
> -  MSFT:*_*_*_DLINK_FLAGS =
> $(EDKII_RELEASE_SRCDBG_DLINK_BUILD_OPTIONS) /DEBUG
> -  GCC:*_*_*_ASM_FLAGS    =
> $(EDKII_RELEASE_SRCDBG_ASM_BUILD_OPTIONS)
> -  GCC:*_*_*_CC_FLAGS     =
> $(EDKII_RELEASE_SRCDBG_CC_BUILD_OPTIONS)
> -  GCC:*_*_*_DLINK_FLAGS  =
> $(EDKII_RELEASE_SRCDBG_DLINK_BUILD_OPTIONS)
> -!endif
> -
> -#
> -# Override ASL Compiler parameters in tools_def.template.
> -#
> -  *_*_*_ASL_FLAGS == -vr -we -oi
> -#
> -# Override the VFR compile flags to speed the build time -#
> -
> -*_*_*_VFR_FLAGS                     ==  -n
> -
> -#
> -# add to the build options for DXE/SMM drivers to remove the log message:
> -# !!!!!!!!  InsertImageRecord - Section Alignment(0x20) is not 4K  !!!!!!!!
> -#
> -[BuildOptions.common.EDKII.DXE_RUNTIME_DRIVER,
> BuildOptions.common.EDKII.DXE_SMM_DRIVER,
> BuildOptions.common.EDKII.SMM_CORE]
> -   MSFT:*_*_*_DLINK_FLAGS = /ALIGN:4096
> -
> -[BuildOptions]
> -  GCC:*_GCC5_*_CC_FLAGS = -Wno-overflow -Wno-discarded-qualifiers -
> Wno-unused-variable -Wno-unused-but-set-variable -Wno-incompatible-
> pointer-types -mabi=ms
> -  GCC:*_GCC5_IA32_DLINK_FLAGS = -z common-page-size=0x20 -z muldefs
> -  GCC:*_GCC5_X64_DLINK_FLAGS  = -z common-page-size=0x20 -z muldefs
> -  MSFT:*_*_*_CC_FLAGS = /FAsc
> +!include $(RP_PKG)/Include/Dsc/BuildOptions.dsc
> --
> 2.27.0.windows.1


^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [edk2-devel][edk2-platforms][PATCH V1 5/8] WhitleyOpenBoardPkg/AcpiTables10nm: Add DSDT ACPI table
  2022-02-07 19:02 ` [edk2-devel][edk2-platforms][PATCH V1 5/8] WhitleyOpenBoardPkg/AcpiTables10nm: Add DSDT ACPI table Oram, Isaac W
@ 2022-02-09  3:21   ` Nate DeSimone
  0 siblings, 0 replies; 17+ messages in thread
From: Nate DeSimone @ 2022-02-09  3:21 UTC (permalink / raw)
  To: Oram, Isaac W, devel@edk2.groups.io; +Cc: Chiu, Chasel

Reviewed-by: Nate DeSimone <nathaniel.l.desimone@intel.com>

> -----Original Message-----
> From: Oram, Isaac W <isaac.w.oram@intel.com>
> Sent: Monday, February 7, 2022 11:03 AM
> To: devel@edk2.groups.io
> Cc: Desimone, Nathaniel L <nathaniel.l.desimone@intel.com>; Chiu, Chasel
> <chasel.chiu@intel.com>
> Subject: [edk2-devel][edk2-platforms][PATCH V1 5/8]
> WhitleyOpenBoardPkg/AcpiTables10nm: Add DSDT ACPI table
> 
> DSDT for WilsonCityRvp
> 
> Cc: Nate DeSimone <nathaniel.l.desimone@intel.com>
> Cc: Chasel Chiu <chasel.chiu@intel.com>
> Signed-off-by: Isaac Oram <isaac.w.oram@intel.com>
> ---
> 
> Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/AcpiTables
> 10nm.inf                    |   48 +
> 
> Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/AML
> UPD.asl                       |   20 +
> 
> Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/BiosP
> arameterRegion.asi          |  346 ++
> 
> Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/Com
> monPlatform10nm.asi           |  205 +
> 
> Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/Cpu
> MemHp.asi                     |  730 +++
> 
> Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/DSDT
> .asl                         |   61 +
> 
> Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/EPRP
> Platform10nm.asl             |   19 +
> 
> Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/Fpga
> Bus00.asi                    |  158 +
> 
> Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/Fpga
> Bus01.asi                    |  158 +
> 
> Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/Fpga
> Bus02.asi                    |  157 +
> 
> Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/Fpga
> Bus03.asi                    |  157 +
> 
> Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/Gpe.
> asi                          |  137 +
> 
> Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/IioPci
> eEdpcGpe.asi               |   16 +
> 
> Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/IioPci
> eEdpcNotify10nm.asi        |  183 +
> 
> Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/IioPci
> eEdpcOst.asi               |   16 +
> 
> Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/IioPci
> eHotPlugGpeHandler10nm.asl | 1322 +++++
> 
> Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/IioRo
> otBridge.asi                |  328 ++
> 
> Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/IioRo
> otBridgeIcx.asi             |  270 +
> 
> Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/Moth
> er.asi                       |  164 +
> 
> Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/Nvdi
> mmGpe.asi                    |   25 +
> 
> Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/Os.as
> i                           |   66 +
> 
> Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/PC00
> 10nm.asi                     |  427 ++
> 
> Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/PC06
> 10nmEjd.asi                  |   10 +
> 
> Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/PC12
> 10nmEjd.asi                  |   10 +
> 
> Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/PC18
> 10nmEjd.asi                  |   10 +
> 
> Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/PchA
> pic.asi                      |   18 +
> 
> Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/PcieH
> p.asi                       |  669 +++
> 
> Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/PcieH
> pDev.asi                    |   53 +
> 
> Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/PcieN
> onHpDev.asi                 |   45 +
> 
> Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/Platf
> orm.asl                     |   91 +
> 
> Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/Platf
> ormGpe10nm.asi              |  191 +
> 
> Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/Platf
> ormPciTree10nm_EPRP.asi     | 5388 ++++++++++++++++++++
> 
> Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/Sck1E
> jd.asi                      |   10 +
> 
> Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/Sck2E
> jd.asi                      |   10 +
> 
> Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/Sck3E
> jd.asi                      |   10 +
> 
> Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/Sgx.a
> si                          |  219 +
> 
> Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/Unco
> re.asi                       |  163 +
>  Platform/Intel/WhitleyOpenBoardPkg/PlatformPkg.dsc
> |    1 +
>  Platform/Intel/WhitleyOpenBoardPkg/PlatformPkg.fdf
> |    1 +
>  39 files changed, 11912 insertions(+)
> 
> diff --git
> a/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/AcpiTabl
> es10nm.inf
> b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/AcpiTabl
> es10nm.inf
> new file mode 100644
> index 0000000000..5480040545
> --- /dev/null
> +++
> b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/AcpiTabl
> es10nm.inf
> @@ -0,0 +1,48 @@
> +## @file
> +#
> +# @copyright
> +# Copyright 2009 - 2022 Intel Corporation. <BR>
> +#
> +# SPDX-License-Identifier: BSD-2-Clause-Patent
> +##
> +
> +[Defines]
> +  INF_VERSION                    = 0x00010005
> +  BASE_NAME                      = PlatformAcpiTable
> +  FILE_GUID                      = 7E374E25-8E01-4FEE-87F2-390C23C606CD
> +  MODULE_TYPE                    = USER_DEFINED
> +  VERSION_STRING                 = 1.0
> +
> +[Sources]
> +  Fadt/Fadt62.aslc
> +  Facs/Facs62.aslc
> +  Dsdt/EPRPPlatform10nm.asl
> +  Mcfg/Mcfg.aslc
> +  Hpet/Hpet.aslc
> +  NFIT/Nfit.aslc
> +  PCAT/Pcat.aslc
> +
> +  SPCR/Spcr.aslc
> +  Msct/Msct.aslc
> +  Wddt/Wddt1.0.aslc
> +  Bdat/Bdat.aslc
> +
> +  Migt/Migt.aslc
> +  DBG2/DBG2.aslc
> +  Spmi/Spmi.aslc
> +  Pmtt/Pmtt10nm.aslc
> +  Hmat/Hmat.aslc
> +
> +  Wsmt/Wsmt.aslc
> +
> +[Packages]
> +  MdePkg/MdePkg.dec
> +  WhitleySiliconPkg/CpRcPkg.dec
> +  WhitleySiliconPkg/SiliconPkg.dec
> +  WhitleyOpenBoardPkg/PlatformPkg.dec
> +
> +[FixedPcd]
> +  gEfiCpRcPkgTokenSpaceGuid.PcdMaxCpuSocketCount
> +  gEfiCpRcPkgTokenSpaceGuid.PcdMaxCpuCoreCount
> +  gEfiCpRcPkgTokenSpaceGuid.PcdMaxCpuThreadCount
> +  gPlatformTokenSpaceGuid.PcdEfiAcpiPm1aEvtBlkAddress
> diff --git
> a/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/AM
> LUPD.asl
> b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/A
> MLUPD.asl
> new file mode 100644
> index 0000000000..3b46dd84df
> --- /dev/null
> +++
> b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/A
> MLUPD.asl
> @@ -0,0 +1,20 @@
> +/** @file
> +  ACPI DSDT table
> +
> +  @copyright
> +  Copyright 2011 - 2014 Intel Corporation. <BR>
> +
> +  SPDX-License-Identifier: BSD-2-Clause-Patent
> +**/
> +
> +/////////////////////////////////////////////////////////////////////////////
> //////
> +//Values are set like this to have ASL compiler reserve enough space for
> objects
> +/////////////////////////////////////////////////////////////////////////////
> //////
> +//
> +// Available Sleep states
> +//
> +Name(SS1,0)
> +Name(SS2,0)
> +Name(SS3,1)
> +Name(SS4,1)
> +
> diff --git
> a/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/Bio
> sParameterRegion.asi
> b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/Bio
> sParameterRegion.asi
> new file mode 100644
> index 0000000000..4e49adc10c
> --- /dev/null
> +++
> b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/Bio
> sParameterRegion.asi
> @@ -0,0 +1,346 @@
> +/** @file
> +
> +  @copyright
> +  Copyright 2016 - 2020 Intel Corporation. <BR>
> +
> +  SPDX-License-Identifier: BSD-2-Clause-Patent
> +**/
> +
> +  //
> +  // BIOS parameters region left in memory for ASL by POST code, defined as
> BIOS_ACPI_PARAM in GlobalNvsArea.h.
> +  //
> +  OperationRegion (PSYS, SystemMemory, 0x30584946, 0x800) // (FIX0 -
> Patched by ACPI Platform Driver during POST)
> +  Field (PSYS, ByteAcc, NoLock, Preserve) {
> +    // IOAPIC Start
> +    PLAT   ,  32,   // Platform ID
> +
> +    Offset (0x04),  //
> +    APCE   ,   1,   // PCH IOAPIC Enable
> +    AP00   ,   1,   // PC00 IOAPIC Enable S0
> +    AP01   ,   1,   // PC01 IOAPIC Enable
> +    AP02   ,   1,   // PC02 IOAPIC Enable
> +    AP03   ,   1,   // PC03 IOAPIC Enable
> +    AP04   ,   1,   // PC04 IOAPIC Enable
> +    AP05   ,   1,   // PC05 IOAPIC Enable
> +    AP06   ,   1,   // PC06 IOAPIC Enable S1
> +    AP07   ,   1,   // PC07 IOAPIC Enable
> +    AP08   ,   1,   // PC08 IOAPIC Enable
> +    AP09   ,   1,   // PC09 IOAPIC Enable
> +    AP10   ,   1,   // PC10 IOAPIC Enable
> +    AP11   ,   1,   // PC11 IOAPIC Enable
> +    AP12   ,   1,   // PC12 IOAPIC Enable S2
> +    AP13   ,   1,   // PC13 IOAPIC Enable
> +    AP14   ,   1,   // PC14 IOAPIC Enable
> +    AP15   ,   1,   // PC15 IOAPIC Enable
> +    AP16   ,   1,   // PC16 IOAPIC Enable
> +    AP17   ,   1,   // PC17 IOAPIC Enable
> +    AP18   ,   1,   // PC18 IOAPIC Enable S3
> +    AP19   ,   1,   // PC19 IOAPIC Enable
> +    AP20   ,   1,   // PC20 IOAPIC Enable
> +    AP21   ,   1,   // PC21 IOAPIC Enable
> +    AP22   ,   1,   // PC22 IOAPIC Enable
> +    AP23   ,   1,   // PC23 IOAPIC Enable
> +    AP24   ,   1,   // PC24 IOAPIC Enable S4
> +    AP25   ,   1,   // PC25 IOAPIC Enable
> +    AP26   ,   1,   // PC26 IOAPIC Enable
> +    AP27   ,   1,   // PC27 IOAPIC Enable
> +    AP28   ,   1,   // PC28 IOAPIC Enable
> +    AP29   ,   1,   // PC29 IOAPIC Enable
> +    AP30   ,   1,   // PC30 IOAPIC Enable S5
> +    AP31   ,   1,   // PC31 IOAPIC Enable
> +    AP32   ,   1,   // PC32 IOAPIC Enable
> +    AP33   ,   1,   // PC33 IOAPIC Enable
> +    AP34   ,   1,   // PC34 IOAPIC Enable
> +    AP35   ,   1,   // PC35 IOAPIC Enable
> +    AP36   ,   1,   // PC36 IOAPIC Enable S6
> +    AP37   ,   1,   // PC37 IOAPIC Enable
> +    AP38   ,   1,   // PC38 IOAPIC Enable
> +    AP39   ,   1,   // PC39 IOAPIC Enable
> +    AP40   ,   1,   // PC40 IOAPIC Enable
> +    AP41   ,   1,   // PC41 IOAPIC Enable
> +    AP42   ,   1,   // PC42 IOAPIC Enable S7
> +    AP43   ,   1,   // PC43 IOAPIC Enable
> +    AP44   ,   1,   // PC44 IOAPIC Enable
> +    AP45   ,   1,   // PC45 IOAPIC Enable
> +    AP46   ,   1,   // PC46 IOAPIC Enable
> +    AP47   ,   1,   // PC47 IOAPIC Enable
> +    RESA   ,  15,
> +
> +    Offset (0x0C),
> +    SKOV   ,   1,   // Override ApicId socket field
> +    P119   ,   1,   // PCH IOAPIC 24_119 enabled
> +    CPX4   ,   1,   // 1 = CPX4, 0 = CPX6
> +    RES0   ,   5,   // Unused
> +    // IOAPIC End
> +
> +    // Power Managment Start
> +    Offset (0x0D),
> +    TPME   ,  1,    // TPM Enable
> +    CSEN   ,  1,    // C State Enable
> +    C3EN   ,  1,    // OS C3 Report Enbale
> +    C6EN   ,  1,    // C6 Enable
> +    C7EN   ,  1,    // C7 Enable
> +    MWOS   ,  1,    // MWAIT support Enable
> +    PSEN   ,  1,    // P State Enable
> +    EMCA   ,  1,    // EMCA Enable
> +    Offset (0x0E),
> +    HWAL   ,  2,    // PSD HW_ALL Enable
> +    KPRS   ,  1,    // KB present Flag
> +    MPRS   ,  1,    // Mouse present Flag
> +    TSEN   ,  1,    // T State Enable Flag
> +    FGTS   ,  1,    // Fine grained T state Flag
> +    OSCX   ,  1,    // OS C States
> +    RESX   ,  1,    // Unused
> +    // Power Management End
> +
> +    // RAS Start
> +    Offset (0x0F),
> +    CPHP   ,  8,    // Bit field for determining CPU hotplug event is happening,
> Update every time CPU Hotpug event is registered as valid
> +                    // Bit0 CPU0 O*L Request
> +                    // Bit1 CPU1 O*L Request
> +                    // Bit2 CPU2 O*L Request
> +                    // Bit3 CPU3 O*L Request
> +                    // Bit4 CPU4 O*L Request
> +                    // Bit5 CPU5 O*L Request
> +                    // Bit6 CPU6 O*L Request
> +                    // Bit7 CPU7 O*L Request
> +    IIOP   ,  8,    // Bit field for determining IIO hotplug event is happening,
> Update every time IIO Hotpug event is registered as valid
> +                    // Bit0 IIO1 O*L Request
> +                    // Bit1 IIO2 O*L Request
> +                    // Bit2 IIO3 O*L Request
> +                    // Bit3-7 Reserved
> +    SPB0   , 16,    // Stack Present Bitmask in socket0, what stacks are present
> for STA method (Patched by ACPI Platform Driver during POST)
> +    SPB1   , 16,    // Stack Present Bitmask in socket1, what stacks are present
> for STA method (Patched by ACPI Platform Driver during POST)
> +    SPB2   , 16,    // Stack Present Bitmask in socket2, what stacks are present
> for STA method (Patched by ACPI Platform Driver during POST)
> +    SPB3   , 16,    // Stack Present Bitmask in socket3, what stacks are present
> for STA method (Patched by ACPI Platform Driver during POST)
> +    SPB4   , 16,    // Stack Present Bitmask in socket4, what stacks are present
> for STA method (Patched by ACPI Platform Driver during POST)
> +    SPB5   , 16,    // Stack Present Bitmask in socket5, what stacks are present
> for STA method (Patched by ACPI Platform Driver during POST)
> +    SPB6   , 16,    // Stack Present Bitmask in socket6, what stacks are present
> for STA method (Patched by ACPI Platform Driver during POST)
> +    SPB7   , 16,    // Stack Present Bitmask in socket7, what stacks are present
> for STA method (Patched by ACPI Platform Driver during POST)
> +    PRBM   , 32,    // Processor Bit mask, what sockets are present for STA
> method, Update every time hotplug event happen and at boot time
> (Patched by ACPI Platform Driver during POST)
> +    CTHC   , 8,     // CPU Core Thread Count
> +    P0ID   , 32,    // Processor 0 APIC ID base
> +    P1ID   , 32,    // Processor 1 APIC ID base
> +    P2ID   , 32,    // Processor 2 APIC ID base
> +    P3ID   , 32,    // Processor 3 APIC ID base
> +    P4ID   , 32,    // Processor 4 APIC ID base
> +    P5ID   , 32,    // Processor 5 APIC ID base
> +    P6ID   , 32,    // Processor 6 APIC ID base
> +    P7ID   , 32,    // Processor 7 APIC ID base
> +    P0BM   , 64,    // Processor 0 Bit mask, what cores (0-63) are present for
> STA method
> +    P1BM   , 64,    // Processor 1 Bit mask, what cores (0-63) are present for
> STA method
> +    P2BM   , 64,    // Processor 2 Bit mask, what cores (0-63) are present for
> STA method
> +    P3BM   , 64,    // Processor 3 Bit mask, what cores (0-63) are present for
> STA method
> +    P4BM   , 64,    // Processor 4 Bit mask, what cores (0-63) are present for
> STA method
> +    P5BM   , 64,    // Processor 5 Bit mask, what cores (0-63) are present for
> STA method
> +    P6BM   , 64,    // Processor 6 Bit mask, what cores (0-63) are present for
> STA method
> +    P7BM   , 64,    // Processor 7 Bit mask, what cores (0-63) are present for
> STA method
> +    P0BH   , 64,    // Processor 0 Bit mask, what cores (64-127) are present for
> STA method
> +    P1BH   , 64,    // Processor 1 Bit mask, what cores (64-127) are present for
> STA method
> +    P2BH   , 64,    // Processor 2 Bit mask, what cores (64-127) are present for
> STA method
> +    P3BH   , 64,    // Processor 3 Bit mask, what cores (64-127) are present for
> STA method
> +    P4BH   , 64,    // Processor 4 Bit mask, what cores (64-127) are present for
> STA method
> +    P5BH   , 64,    // Processor 5 Bit mask, what cores (64-127) are present for
> STA method
> +    P6BH   , 64,    // Processor 6 Bit mask, what cores (64-127) are present for
> STA method
> +    P7BH   , 64,    // Processor 7 Bit mask, what cores (64-127) are present for
> STA method
> +    CFMM   , 32,    // MMCFG Base
> +    TSSZ   , 32,    // TSEG Size.
> +    SMI0   , 32,    // Parameter0 used for faked SMI request
> +    SMI1   , 32,    // Parameter1 used for faked SMI request
> +    SMI2   , 32,    // Parameter2 used for faked SMI request
> +    SMI3   , 32,    // Parameter3 used for faked SMI request
> +    SCI0   , 32,    // Parameter0 used for faked SCI request
> +    SCI1   , 32,    // Parameter1 used for faked SCI request
> +    SCI2   , 32,    // Parameter2 used for faked SCI request
> +    SCI3   , 32,    // Parameter3 used for faked SCI request
> +    MADD   , 64,    // Migration ActionRegion GAS address. (Migration support
> written for 8 CPU socket system. In a 4 socket system, CPU4-7 and MEM8-15
> are invalid.)
> +    CUU0   , 128,   // CPU0 UUID
> +    CUU1   , 128,   // CPU1 UUID
> +    CUU2   , 128,   // CPU2 UUID
> +    CUU3   , 128,   // CPU3 UUID
> +    CUU4   , 128,   // CPU4 UUID
> +    CUU5   , 128,   // CPU5 UUID
> +    CUU6   , 128,   // CPU6 UUID
> +    CUU7   , 128,   // CPU7 UUID
> +    CPSP   , 8,     // CPU spare bitmap. 1 == IsSpare.
> +    ME00   , 128,   // MEM0 UUID
> +    ME01   , 128,   // MEM1 UUID
> +    ME10   , 128,   // MEM2 UUID
> +    ME11   , 128,   // MEM3 UUID
> +    ME20   , 128,   // MEM4 UUID
> +    ME21   , 128,   // MEM5 UUID
> +    ME30   , 128,   // MEM6 UUID
> +    ME31   , 128,   // MEM7 UUID
> +    ME40   , 128,   // MEM8 UUID
> +    ME41   , 128,   // MEM9 UUID
> +    ME50   , 128,   // MEM10 UUID
> +    ME51   , 128,   // MEM11 UUID
> +    ME60   , 128,   // MEM12 UUID
> +    ME61   , 128,   // MEM13 UUID
> +    ME70   , 128,   // MEM14 UUID
> +    ME71   , 128,   // MEM15 UUID
> +    LDIR   , 64,    // L1 Directory Address
> +    PRID   , 32,    // Processor ID
> +    AHPE   , 8,     // ACPI PCIe hot plug enable.
> +    WHEN   , 8,
> +    WSCI   , 8,
> +    SERR   , 8,     // Propogate SERR
> +    PERR   , 8,     // Propogate PERR
> +    // RAS End
> +
> +    // VTD Start
> +    DHRD   , 192,   // DHRD
> +    ATSR   , 192,   // ATSR
> +    RHSA   , 192,   // RHSA
> +    // VTD End
> +
> +    // SR-IOV WA Start
> +    WSIC   , 8,
> +    WSIS   , 16,
> +    WSIB   , 8,
> +    WSID   , 8,
> +    WSIF   , 8,
> +    WSTS   , 8,
> +    WHEA   , 8,
> +    // SR-IOV WA End
> +
> +    // BIOS Guard Start
> +    BGMA   , 64,    // BIOS Guard Memory Address
> +    BGMS   , 8,     // BIOS Guard Memory Size
> +    BGIO   , 16,    // BIOS Guard IO Trap Address
> +    CNBS   , 8,     // CPU SKU number bit shift
> +    // BIOS Guard End
> +
> +    // USB3 Start
> +    XHMD   , 8,     // copy of setup item PchUsb30Mode
> +    SBV1   , 8,     // USB Sideband Deferring GPE Vector (HOST_ALERT#1)
> +    SBV2   , 8,     // USB Sideband Deferring GPE Vector (HOST_ALERT#2)
> +    // USB3 End
> +
> +    // HWPM Start
> +    HWEN   ,  2,    // HWPM State Enable option from setup
> +    RES2   ,  1,    // Reserved bit
> +    HWPI   ,  1,    // HWP Interrupt
> +    RES1   ,  4,    // Reserved bits
> +    // HWPM End
> +
> +    // SGX Start
> +    EPCS   ,  8,    // EPC Status
> +    ELN0   , 64,    // EPC0 Length
> +    ELN1   , 64,    // EPC1 Length
> +    ELN2   , 64,    // EPC2 Length
> +    ELN3   , 64,    // EPC3 Length
> +    ELN4   , 64,    // EPC4 Length
> +    ELN5   , 64,    // EPC5 Length
> +    ELN6   , 64,    // EPC6 Length
> +    ELN7   , 64,    // EPC7 Length
> +    EBA0   , 64,    // EPC0 Base Address
> +    EBA1   , 64,    // EPC1 Base Address
> +    EBA2   , 64,    // EPC2 Base Address
> +    EBA3   , 64,    // EPC3 Base Address
> +    EBA4   , 64,    // EPC4 Base Address
> +    EBA5   , 64,    // EPC5 Base Address
> +    EBA6   , 64,    // EPC6 Base Address
> +    EBA7   , 64,    // EPC7 Base Address
> +    // SGX End
> +
> +    // PCIe Multi-Seg Start
> +    // Stack bus base numbers for up to 14 stacks in up to 8 socket. Name is
> 'BB<skt><stk>', where <skt> and <stk> are hex.
> +    BB00, 8, BB01, 8, BB02, 8, BB03, 8, BB04, 8, BB05, 8, BB06, 8, BB07, 8, BB08,
> 8, BB09, 8, BB0A, 8, BB0B, 8, BB0C, 8, BB0D, 8,
> +    BB10, 8, BB11, 8, BB12, 8, BB13, 8, BB14, 8, BB15, 8, BB16, 8, BB17, 8, BB18,
> 8, BB19, 8, BB1A, 8, BB1B, 8, BB1C, 8, BB1D, 8,
> +    BB20, 8, BB21, 8, BB22, 8, BB23, 8, BB24, 8, BB25, 8, BB26, 8, BB27, 8, BB28,
> 8, BB29, 8, BB2A, 8, BB2B, 8, BB2C, 8, BB2D, 8,
> +    BB30, 8, BB31, 8, BB32, 8, BB33, 8, BB34, 8, BB35, 8, BB36, 8, BB37, 8, BB38,
> 8, BB39, 8, BB3A, 8, BB3B, 8, BB3C, 8, BB3D, 8,
> +    BB40, 8, BB41, 8, BB42, 8, BB43, 8, BB44, 8, BB45, 8, BB46, 8, BB47, 8, BB48,
> 8, BB49, 8, BB4A, 8, BB4B, 8, BB4C, 8, BB4D, 8,
> +    BB50, 8, BB51, 8, BB52, 8, BB53, 8, BB54, 8, BB55, 8, BB56, 8, BB57, 8, BB58,
> 8, BB59, 8, BB5A, 8, BB5B, 8, BB5C, 8, BB5D, 8,
> +    BB60, 8, BB61, 8, BB62, 8, BB63, 8, BB64, 8, BB65, 8, BB66, 8, BB67, 8, BB68,
> 8, BB69, 8, BB6A, 8, BB6B, 8, BB6C, 8, BB6D, 8,
> +    BB70, 8, BB71, 8, BB72, 8, BB73, 8, BB74, 8, BB75, 8, BB76, 8, BB77, 8, BB78,
> 8, BB79, 8, BB7A, 8, BB7B, 8, BB7C, 8, BB7D, 8,
> +
> +    SGEN   , 8,     // PCIe_MultiSeg_Support enable/disable
> +    SG00   , 8,     // PCI segment ID for socket 0
> +    SG01   , 8,     // PCI segment ID for socket 1
> +    SG02   , 8,     // PCI segment ID for socket 2
> +    SG03   , 8,     // PCI segment ID for socket 3
> +    SG04   , 8,     // PCI segment ID for socket 4
> +    SG05   , 8,     // PCI segment ID for socket 5
> +    SG06   , 8,     // PCI segment ID for socket 6
> +    SG07   , 8,     // PCI segment ID for socket 7
> +    // PCIe Multi-Seg End
> +
> +    // Sub-NUMA Cluster support
> +    CLOD   , 8,     //  0 - SNC disabled, 2 - SNC enabled with 2 clusters, 4 - SNC
> enabled with 4 clusters
> +
> +    // XTU Start
> +    XTUB   , 32,
> +    XTUS   , 32,
> +    XMBA   , 32,
> +    DDRF   , 8,
> +    RT3S   , 8,
> +    RTP0   , 8,
> +    RTP3   , 8,
> +    // XTU End
> +
> +    // FPGA Root Port Bus
> +    FBB0   , 8,     // FPGA Bus Base for Socket 0
> +    FBB1   , 8,     // FPGA Bus Base for Socket 1
> +    FBB2   , 8,     // FPGA Bus Base for Socket 2
> +    FBB3   , 8,     // FPGA Bus Base for Socket 3
> +    FBB4   , 8,     // FPGA Bus Base for Socket 4
> +    FBB5   , 8,     // FPGA Bus Base for Socket 5
> +    FBB6   , 8,     // FPGA Bus Base for Socket 6
> +    FBB7   , 8,     // FPGA Bus Base for Socket 7
> +
> +    FBL0   , 8,     // FPGA Bus limit for Socket 0
> +    FBL1   , 8,     // FPGA Bus limit for Socket 1
> +    FBL2   , 8,     // FPGA Bus limit for Socket 2
> +    FBL3   , 8,     // FPGA Bus limit for Socket 3
> +    FBL4   , 8,     // FPGA Bus limit for Socket 4
> +    FBL5   , 8,     // FPGA Bus limit for Socket 5
> +    FBL6   , 8,     // FPGA Bus limit for Socket 6
> +    FBL7   , 8,     // FPGA Bus limit for Socket 7
> +
> +    // FPGA present bit
> +    P0FB   , 8,     // FPGA present in Socket 0
> +    P1FB   , 8,     // FPGA present in Socket 1
> +    P2FB   , 8,     // FPGA present in Socket 2
> +    P3FB   , 8,     // FPGA present in Socket 3
> +    P4FB   , 8,     // FPGA present in Socket 4
> +    P5FB   , 8,     // FPGA present in Socket 5
> +    P6FB   , 8,     // FPGA present in Socket 6
> +    P7FB   , 8,     // FPGA present in Socket 7
> +
> +    // FPGA Resource Allocation
> +    FMB0   , 32,
> +    FMB1   , 32,
> +    FMB2   , 32,
> +    FMB3   , 32,
> +    FMB4   , 32,
> +    FMB5   , 32,
> +    FMB6   , 32,
> +    FMB7   , 32,
> +
> +    FML0   , 32,
> +    FML1   , 32,
> +    FML2   , 32,
> +    FML3   , 32,
> +    FML4   , 32,
> +    FML5   , 32,
> +    FML6   , 32,
> +    FML7   , 32,
> +
> +    // FPGA KTI present bitmap
> +    FKPB   , 32,
> +    // FPGA Bus for KTI
> +    FKB0   , 8,     // FPGA Bus Base for Socket 0 KTI Link
> +    FKB1   , 8,     // FPGA Bus Base for Socket 1 KTI Link
> +    FKB2   , 8,     // FPGA Bus Base for Socket 2 KTI Link
> +    FKB3   , 8,     // FPGA Bus Base for Socket 3 KTI Link
> +    FKB4   , 8,     // FPGA Bus Base for Socket 4 KTI Link
> +    FKB5   , 8,     // FPGA Bus Base for Socket 5 KTI Link
> +    FKB6   , 8,     // FPGA Bus Base for Socket 6 KTI Link
> +    FKB7   , 8,     // FPGA Bus Base for Socket 7 KTI Link
> +
> +    PMBA   , 16,    // ACPI IO Base Address
> +    DBGM   , 8,     // Debug Mode Indicator
> +    IRPC   , 8,     // IIO PCIe root port PCIe Capability offset
> +    ATSC   , 8,     // Flag to indicate if TSC is linked to ART
> +  }
> diff --git
> a/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/Co
> mmonPlatform10nm.asi
> b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/Co
> mmonPlatform10nm.asi
> new file mode 100644
> index 0000000000..28a997b102
> --- /dev/null
> +++
> b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/Co
> mmonPlatform10nm.asi
> @@ -0,0 +1,205 @@
> +/** @file
> +
> +  @copyright
> +  Copyright 2016 - 2020 Intel Corporation. <BR>
> +
> +  SPDX-License-Identifier: BSD-2-Clause-Patent
> +**/
> +
> +#include "MaxSocket.h"
> +
> +  //
> +  // External declarations
> +  // HECI-1/HECI-2 are in 10nmServerPlatformPkg\Me\Sps\Acpi\SpsNm.asl
> +  //
> +  External(\_SB.PC00.HEC2.HPTS, MethodObj)
> +  External(\_SB.PC00.HEC2.HWAK, MethodObj)
> +
> +  External(\_SB.OSPC, MethodObj)
> +  //
> +  // System Sleep States
> +  //
> +  Name (\_S0,Package (){0,0,0,0})
> +  Name (\_S3,Package (){5,0,0,0})   // Name changed to \DS3 if disabled in
> Setup
> +  Name (\_S4,Package (){6,0,0,0})   // Name changed to \DS4 if disabled in
> Setup
> +  Name (\_S5,Package (){7,0,0,0})
> +
> +  //
> +  // Native OS hot plug support, 0->ACPI, 1->OS
> +  //
> +  Name (\OSHF, 0)
> +
> +  Name (\HWPS, 0)   // CPC capability from platform _OSC
> +
> +  //
> +  // OS flag
> +  //
> +  #include "Os.asi"
> +
> +  //
> +  // for determing PIC mode
> +  //
> +  Name (\PICM,Zero)
> +  Method (\_PIC, 1, NotSerialized) {
> +    Store(Arg0,\PICM)
> +  }
> +
> +  OperationRegion (DBG0, SystemIO, 0x80, 2)
> +  Field (DBG0, ByteAcc,NoLock,Preserve) {
> +    IO80, 8,
> +    IO81, 8
> +  }
> +
> +  //
> +  // Access CMOS range
> +  //
> +  OperationRegion (ACMS, SystemIO, 0x72, 2)
> +  Field ( ACMS, ByteAcc, NoLock, Preserve) {
> +    INDX, 8,
> +    DATA, 8
> +  }
> +
> +
> +  //
> +  // BIOS parameter BIOS_ACPI_PARAM
> +  //
> +  #include "BiosParameterRegion.asi"
> +
> +  //
> +  // SWGPE_CTRL
> +  //
> +  OperationRegion (GPCT, SystemIO, Add (PMBA, 0x42), 1)
> +  Field (GPCT, ByteAcc, NoLock, Preserve) {
> +          ,   1,
> +    SGPC  ,   1,
> +  }
> +
> +  //
> +  // GPE0 Enable
> +  //
> +  OperationRegion (GPE0, SystemIO, Add (PMBA, 0x9C), 4)
> +  Field (GPE0, ByteAcc,NoLock,Preserve) {
> +    ,1,
> +    GPEH,1,
> +    ,7,
> +    PCIE,1,
> +    ,1,
> +    PMEE,1,
> +    ,1,
> +    PMB0,1,
> +    ,18,
> +  }
> +
> +  //
> +  // GPE0 Status
> +  //
> +  OperationRegion (GPES, SystemIO, Add (PMBA, 0x8C), 4)
> +  Field (GPES, ByteAcc,NoLock,Preserve) {
> +    ,1,
> +    GPSH,1,
> +    SGPS,1,
> +    ,6,
> +    PEES,1,
> +    ,1,
> +    PMES,1,
> +    ,1,
> +    PMEB,1,
> +    ,18,
> +  }
> +
> +  //
> +  // System sleep down
> +  //
> +  Method (_PTS, 1, NotSerialized)
> +  {
> +    Store (0x72, IO80)  // Sync with EfiPostCode.h
> +
> +    //
> +    // Clear wake event status.
> +    //
> +    Store(1,PMES)
> +    Store(1,PMEB)
> +
> +    //
> +    // Enable SCI and wake event sources.
> +    //
> +    Store(1,GPEH)
> +    Store(1,PCIE)
> +    Store(1,PMEE)
> +    Store(1,PMB0)
> +
> +    //
> +    // If HECI-2 exist call its prepare-to-sleep handler.
> +    // The handler checks whether HECI-2 is enabled.
> +    //
> +    If (CondRefOf(\_SB.PC00.HEC2.HPTS))
> +    {
> +      \_SB.PC00.HEC2.HPTS()
> +    }
> +
> +    /// WA for S3 on XHCI
> +    \_SB.PC00.XHCI.XHCS()
> +  }
> +
> +
> +  //
> +  // System Wake up
> +  //
> +  Method (_WAK, 1, Serialized)
> +  {
> +    Store (0x73, IO80)  // Sync with EfiPostCode.h
> +
> +    //
> +    // If HECI-2 exist call its wake-up handler.
> +    // The handler checks whether HECI-2 is enabled.
> +    //
> +    If (CondRefOf(\_SB.PC00.HEC2.HWAK))
> +    {
> +      \_SB.PC00.HEC2.HWAK()
> +    }
> +
> +    //
> +    // If waking from S3
> +    //
> +    If (LEqual(Arg0, 3)) {
> +    }
> +
> +    Return(Package(){0, 0})
> +  }
> +
> +  Scope(\_SB) {
> +
> +    // Information on CPU and Memory for hotplug SKUs
> +    #include "CpuMemHp.asi"
> +
> +    OperationRegion (IOB2, SystemIO, 0xB2, 2)  //MKF_SMIPORT
> +    Field (IOB2, ByteAcc, NoLock, Preserve) {
> +      SMIC, 8,                               // SW-SMI ctrl port
> +      SMIS, 8,                               // SW-SMI status port
> +    }
> +
> +    Method(_OSC , 4) {
> +      Store(Arg3,Local0)
> +      CreateDWordField(Local0,4,CPBF)
> +      If(LEqual(Arg0, ToUUID("0811B06E-4A27-44F9-8D60-3CBBC22E7B48"))) {
> +        //Save Platform OSC HWPM capabilities
> +        If(LEqual(And(CPBF, 0x00000040), 0x00000040)) {
> +          Store(1,HWPS)
> +        }
> +      }
> +      If (CondRefOf (\_SB.OSPC)) {
> +        Return (\_SB.OSPC(Arg0, Arg1, Arg2, Arg3))
> +      }
> +      Return (Local0)
> +    }
> +    //
> +    // SGX
> +    //
> +    #include "Sgx.asi"
> +    //
> +    // Common Hot Plug for PCxx devices
> +    //
> +    #include "IioRootBridgeIcx.asi"
> +  }   // end _SB scope
> +
> +
> diff --git
> a/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/Cp
> uMemHp.asi
> b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/Cp
> uMemHp.asi
> new file mode 100644
> index 0000000000..a0824a30c0
> --- /dev/null
> +++
> b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/Cp
> uMemHp.asi
> @@ -0,0 +1,730 @@
> +/** @file
> +
> +  @copyright
> +  Copyright 2001 - 2019 Intel Corporation. <BR>
> +
> +  SPDX-License-Identifier: BSD-2-Clause-Patent
> +**/
> +
> +#include "MaxSocket.h"
> +
> +#define HECI_CMD_CPUHOTPLUG    1
> +#define HECI_CMD_CPUHOTREMOVE  2
> +
> +#define  SIZE_LAPIC_STRUC   8
> +#define  LAPIC_TYPE         0
> +
> +#define  SIZE_X2LAPIC_STRUC   16
> +#define  X2LAPIC_TYPE         9
> +
> +#define  MAK_STR(x)   #x
> +
> +//
> +// This macro creates method that calculates
> +// number of active threads for its socket
> +//
> +#define CPU_THREADS_NUM(socket)                                             \
> +  Method(THNU, 0) {                                                         \
> +    Store(0, Local0)                                                        \
> +    Store(P##socket##BM, Local1)                                            \
> +    While (Local1) {                                                        \
> +      Add(Local0, And(Local1, 1), Local0)                                   \
> +      ShiftRight(Local1, 1, Local1)                                         \
> +    }                                                                       \
> +    return (Or(ShiftLeft(socket, 8), Local0))                               \
> +  }
> +
> +//
> +//set DevName ProcId field and IO to C##thread
> +//
> +#define  CPU_THREAD_DEV(socket, thread)                                     \
> +  Device(C##thread) {                                                       \
> +    Name(_HID, "ACPI0007")                                                  \
> +    Method (_UID) {                                                         \
> +      Return (\_SB.CUID(0x0##socket, 0x##thread))                           \
> +    }                                                                       \
> +    Method(_PXM) {                                                          \
> +      if (LEqual (CLOD, 0)) {                                               \
> +        Return(0x0##socket)                                                 \
> +      } else {                                                              \
> +        Store(DerefOf(Index(\_SB.APT##socket, 0x##thread)), Local0)         \
> +        Store(CNBS, Local1)                                                 \
> +        Subtract(Local1, 1, Local1)                                         \
> +        ShiftRight(Local0, Local1, Local0)                                  \
> +        And(Local0, 1, Local0)                                              \
> +        Store(0x##socket, Local1)                                           \
> +        Multiply(Local1, 2, Local1)                                         \
> +        if(LEqual(Local0, 1)) {                                             \
> +          Add(Local1, 1, Local1)                                            \
> +        }                                                                   \
> +        Return(Local1)                                                      \
> +      }                                                                     \
> +    }                                                                       \
> +    Method(_STA) {                                                          \
> +      if(LEqual(\_SB.CSTA(0x0##socket, 0x##thread), 0x00)) {                \
> +        Return(0x00)                                                        \
> +      } else {                                                              \
> +        If (LGreaterEqual (\_SB.OSYS, 12)) {                                \
> +          Return(0x0F)                                                      \
> +        } Else {                                                            \
> +          Return(0x0B)                                                      \
> +        }                                                                   \
> +      }                                                                     \
> +    }                                                                       \
> +    Method(_MAT) {                                                          \
> +      if(SKOV) {                                                            \
> +        Return(\_SB.X2AP(0x0##socket, 0x##thread))                          \
> +      } else {                                                              \
> +      Return(\_SB.LAPC(0x0##socket, 0x##thread))                            \
> +      }                                                                     \
> +    }                                                                       \
> +  }
> +
> +#define  CPU_SOCKET_DEV(socket)                                             \
> +  Device(\_SB.SCK##socket) {                                                \
> +    Name (_HID, "ACPI0004")                                                 \
> +    Name (_UID, MAK_STR(CPUSCK##socket))                                    \
> +    Name (LSTA, 0xff)                                                       \
> +    Method(_STA) {                                                          \
> +      Store(MAK_STR(CPUSCK##socket), CUU##socket)                           \
> +      Store(\_SB.PSTA(0x0##socket), Local0)                                 \
> +      And(Local0, 0x03, Local1)                                             \
> +      If (LAnd(LNotEqual(LSTA, 0xff), LNotEqual(Local1, LSTA))) {           \
> +        If (LEqual(Local1, 0x03)) {                                         \
> +          /*\_SB.PC00.HEC2.HPNF(HECI_CMD_CPUHOTPLUG, socket, THNU)
> TODO: Obsolete with _PUR?*/\
> +        } Else {                                                            \
> +          /*\_SB.PC00.HEC2.HPNF(HECI_CMD_CPUHOTREMOVE, socket, THNU)
> TODO: Obsolete with _PUR?*/\
> +        }                                                                   \
> +      }                                                                     \
> +      Store(Local1, LSTA)                                                   \
> +      return(Local0)                                                        \
> +    }                                                                       \
> +                                                                            \
> +    CPU_THREADS_NUM(socket)        \
> +    CPU_THREAD_DEV (socket, 000)   \
> +    CPU_THREAD_DEV (socket, 001)   \
> +    CPU_THREAD_DEV (socket, 002)   \
> +    CPU_THREAD_DEV (socket, 003)   \
> +    CPU_THREAD_DEV (socket, 004)   \
> +    CPU_THREAD_DEV (socket, 005)   \
> +    CPU_THREAD_DEV (socket, 006)   \
> +    CPU_THREAD_DEV (socket, 007)   \
> +    CPU_THREAD_DEV (socket, 008)   \
> +    CPU_THREAD_DEV (socket, 009)   \
> +    CPU_THREAD_DEV (socket, 00A)   \
> +    CPU_THREAD_DEV (socket, 00B)   \
> +    CPU_THREAD_DEV (socket, 00C)   \
> +    CPU_THREAD_DEV (socket, 00D)   \
> +    CPU_THREAD_DEV (socket, 00E)   \
> +    CPU_THREAD_DEV (socket, 00F)   \
> +    CPU_THREAD_DEV (socket, 010)   \
> +    CPU_THREAD_DEV (socket, 011)   \
> +    CPU_THREAD_DEV (socket, 012)   \
> +    CPU_THREAD_DEV (socket, 013)   \
> +    CPU_THREAD_DEV (socket, 014)   \
> +    CPU_THREAD_DEV (socket, 015)   \
> +    CPU_THREAD_DEV (socket, 016)   \
> +    CPU_THREAD_DEV (socket, 017)   \
> +    CPU_THREAD_DEV (socket, 018)   \
> +    CPU_THREAD_DEV (socket, 019)   \
> +    CPU_THREAD_DEV (socket, 01A)   \
> +    CPU_THREAD_DEV (socket, 01B)   \
> +    CPU_THREAD_DEV (socket, 01C)   \
> +    CPU_THREAD_DEV (socket, 01D)   \
> +    CPU_THREAD_DEV (socket, 01E)   \
> +    CPU_THREAD_DEV (socket, 01F)   \
> +    CPU_THREAD_DEV (socket, 020)   \
> +    CPU_THREAD_DEV (socket, 021)   \
> +    CPU_THREAD_DEV (socket, 022)   \
> +    CPU_THREAD_DEV (socket, 023)   \
> +    CPU_THREAD_DEV (socket, 024)   \
> +    CPU_THREAD_DEV (socket, 025)   \
> +    CPU_THREAD_DEV (socket, 026)   \
> +    CPU_THREAD_DEV (socket, 027)   \
> +    CPU_THREAD_DEV (socket, 028)   \
> +    CPU_THREAD_DEV (socket, 029)   \
> +    CPU_THREAD_DEV (socket, 02A)   \
> +    CPU_THREAD_DEV (socket, 02B)   \
> +    CPU_THREAD_DEV (socket, 02C)   \
> +    CPU_THREAD_DEV (socket, 02D)   \
> +    CPU_THREAD_DEV (socket, 02E)   \
> +    CPU_THREAD_DEV (socket, 02F)   \
> +    CPU_THREAD_DEV (socket, 030)   \
> +    CPU_THREAD_DEV (socket, 031)   \
> +    CPU_THREAD_DEV (socket, 032)   \
> +    CPU_THREAD_DEV (socket, 033)   \
> +    CPU_THREAD_DEV (socket, 034)   \
> +    CPU_THREAD_DEV (socket, 035)   \
> +    CPU_THREAD_DEV (socket, 036)   \
> +    CPU_THREAD_DEV (socket, 037)   \
> +    CPU_THREAD_DEV (socket, 038)   \
> +    CPU_THREAD_DEV (socket, 039)   \
> +    CPU_THREAD_DEV (socket, 03A)   \
> +    CPU_THREAD_DEV (socket, 03B)   \
> +    CPU_THREAD_DEV (socket, 03C)   \
> +    CPU_THREAD_DEV (socket, 03D)   \
> +    CPU_THREAD_DEV (socket, 03E)   \
> +    CPU_THREAD_DEV (socket, 03F)   \
> +    CPU_THREAD_DEV (socket, 040)   \
> +    CPU_THREAD_DEV (socket, 041)   \
> +    CPU_THREAD_DEV (socket, 042)   \
> +    CPU_THREAD_DEV (socket, 043)   \
> +    CPU_THREAD_DEV (socket, 044)   \
> +    CPU_THREAD_DEV (socket, 045)   \
> +    CPU_THREAD_DEV (socket, 046)   \
> +    CPU_THREAD_DEV (socket, 047)   \
> +    CPU_THREAD_DEV (socket, 048)   \
> +    CPU_THREAD_DEV (socket, 049)   \
> +    CPU_THREAD_DEV (socket, 04A)   \
> +    CPU_THREAD_DEV (socket, 04B)   \
> +    CPU_THREAD_DEV (socket, 04C)   \
> +    CPU_THREAD_DEV (socket, 04D)   \
> +    CPU_THREAD_DEV (socket, 04E)   \
> +    CPU_THREAD_DEV (socket, 04F)   \
> +    CPU_THREAD_DEV (socket, 050)   \
> +    CPU_THREAD_DEV (socket, 051)   \
> +    CPU_THREAD_DEV (socket, 052)   \
> +    CPU_THREAD_DEV (socket, 053)   \
> +    CPU_THREAD_DEV (socket, 054)   \
> +    CPU_THREAD_DEV (socket, 055)   \
> +    CPU_THREAD_DEV (socket, 056)   \
> +    CPU_THREAD_DEV (socket, 057)   \
> +    CPU_THREAD_DEV (socket, 058)   \
> +    CPU_THREAD_DEV (socket, 059)   \
> +    CPU_THREAD_DEV (socket, 05A)   \
> +    CPU_THREAD_DEV (socket, 05B)   \
> +    CPU_THREAD_DEV (socket, 05C)   \
> +    CPU_THREAD_DEV (socket, 05D)   \
> +    CPU_THREAD_DEV (socket, 05E)   \
> +    CPU_THREAD_DEV (socket, 05F)   \
> +    CPU_THREAD_DEV (socket, 060)   \
> +    CPU_THREAD_DEV (socket, 061)   \
> +    CPU_THREAD_DEV (socket, 062)   \
> +    CPU_THREAD_DEV (socket, 063)   \
> +    CPU_THREAD_DEV (socket, 064)   \
> +    CPU_THREAD_DEV (socket, 065)   \
> +    CPU_THREAD_DEV (socket, 066)   \
> +    CPU_THREAD_DEV (socket, 067)   \
> +    CPU_THREAD_DEV (socket, 068)   \
> +    CPU_THREAD_DEV (socket, 069)   \
> +    CPU_THREAD_DEV (socket, 06A)   \
> +    CPU_THREAD_DEV (socket, 06B)   \
> +    CPU_THREAD_DEV (socket, 06C)   \
> +    CPU_THREAD_DEV (socket, 06D)   \
> +    CPU_THREAD_DEV (socket, 06E)   \
> +    CPU_THREAD_DEV (socket, 06F)   \
> +    CPU_THREAD_DEV (socket, 070)   \
> +    CPU_THREAD_DEV (socket, 071)   \
> +    CPU_THREAD_DEV (socket, 072)   \
> +    CPU_THREAD_DEV (socket, 073)   \
> +    CPU_THREAD_DEV (socket, 074)   \
> +    CPU_THREAD_DEV (socket, 075)   \
> +    CPU_THREAD_DEV (socket, 076)   \
> +    CPU_THREAD_DEV (socket, 077)   \
> +    CPU_THREAD_DEV (socket, 078)   \
> +    CPU_THREAD_DEV (socket, 079)   \
> +    CPU_THREAD_DEV (socket, 07A)   \
> +    CPU_THREAD_DEV (socket, 07B)   \
> +    CPU_THREAD_DEV (socket, 07C)   \
> +    CPU_THREAD_DEV (socket, 07D)   \
> +    CPU_THREAD_DEV (socket, 07E)   \
> +    CPU_THREAD_DEV (socket, 07F)   \
> +  }
> +
> +  Scope(\_SB) {
> +
> +    //----------------------------------------------------------------
> +    //  Method PSTA()
> +    //      Return package state
> +    //
> +    //  Inputs: Arg0 = socket number for which to return the _STA code.
> +    //----------------------------------------------------------------
> +    Method(PSTA, 1){        // Socket Status
> +      ShiftRight(PRBM, Arg0, Local6)
> +      And(Local6, 0x1, Local6)
> +      if(LEqual(Local6, 0x0)) {
> +        Return(0x00)
> +      } else {
> +        Return(0x0F)
> +      }
> +    } // End Method PSTA
> +
> +    //----------------------------------------------------------------
> +    // APIC ID Map
> +    // Extened APIC ID buffer to support MAX 64 core
> +    //----------------------------------------------------------------
> +    Name (APT0, Buffer (128) {
> +          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
> +          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
> +          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
> +          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
> +          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
> +          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
> +          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
> +          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
> +
> +          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
> +          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
> +          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
> +          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
> +          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
> +          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
> +          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
> +          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
> +    })
> +
> +    Name (APT1, Buffer (128) {
> +          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
> +          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
> +          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
> +          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
> +          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
> +          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
> +          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
> +          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
> +
> +          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
> +          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
> +          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
> +          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
> +          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
> +          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
> +          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
> +          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
> +    })
> +
> +    Name (APT2, Buffer (128) {
> +          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
> +          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
> +          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
> +          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
> +          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
> +          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
> +          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
> +          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
> +
> +          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
> +          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
> +          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
> +          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
> +          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
> +          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
> +          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
> +          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
> +    })
> +
> +    Name (APT3, Buffer (128) {
> +          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
> +          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
> +          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
> +          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
> +          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
> +          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
> +          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
> +          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
> +
> +          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
> +          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
> +          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
> +          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
> +          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
> +          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
> +          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
> +          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
> +    })
> +
> +    Name (APT4, Buffer (128) {
> +          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
> +          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
> +          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
> +          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
> +          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
> +          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
> +          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
> +          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
> +
> +          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
> +          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
> +          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
> +          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
> +          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
> +          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
> +          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
> +          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
> +    })
> +
> +    Name (APT5, Buffer (128) {
> +          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
> +          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
> +          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
> +          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
> +          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
> +          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
> +          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
> +          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
> +
> +          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
> +          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
> +          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
> +          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
> +          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
> +          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
> +          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
> +          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
> +    })
> +
> +    Name (APT6, Buffer (128) {
> +          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
> +          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
> +          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
> +          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
> +          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
> +          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
> +          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
> +          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
> +
> +          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
> +          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
> +          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
> +          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
> +          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
> +          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
> +          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
> +          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
> +    })
> +
> +    Name (APT7, Buffer (128) {
> +          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
> +          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
> +          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
> +          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
> +          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
> +          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
> +          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
> +          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
> +
> +          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
> +          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
> +          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
> +          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
> +          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
> +          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
> +          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
> +          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
> +    })
> +
> +    //----------------------------------------------------------------
> +    //  Method TPID()
> +    //      Convert the socket and thread index to the actual APIC ID
> +    //
> +    //  Inputs: Arg0 = socket index
> +    //          Arg1 = thread index
> +    //----------------------------------------------------------------
> +    Method (TPID, 2, NotSerialized) {
> +      Store (0x00, Local0)
> +      If (LEqual (Arg0, 0x00))
> +      {
> +        Store (P0ID, Local0)
> +        Add (Local0, DerefOf(Index(APT0, Arg1)), Local0)
> +      }
> +
> +      If (LEqual (Arg0, 0x01))
> +      {
> +        Store (P1ID, Local0)
> +        Add (Local0, DerefOf(Index(APT1, Arg1)), Local0)
> +      }
> +
> +      If (LEqual (Arg0, 0x02))
> +      {
> +        Store (P2ID, Local0)
> +        Add (Local0, DerefOf(Index(APT2, Arg1)), Local0)
> +      }
> +
> +      If (LEqual (Arg0, 0x03))
> +      {
> +        Store (P3ID, Local0)
> +        Add (Local0, DerefOf(Index(APT3, Arg1)), Local0)
> +      }
> +
> +      If (LEqual (Arg0, 0x04))
> +      {
> +        Store (P4ID, Local0)
> +        Add (Local0, DerefOf(Index(APT4, Arg1)), Local0)
> +      }
> +
> +      If (LEqual (Arg0, 0x05))
> +      {
> +        Store (P5ID, Local0)
> +        Add (Local0, DerefOf(Index(APT5, Arg1)), Local0)
> +      }
> +
> +      If (LEqual (Arg0, 0x06))
> +      {
> +        Store (P6ID, Local0)
> +        Add (Local0, DerefOf(Index(APT6, Arg1)), Local0)
> +      }
> +
> +      If (LEqual (Arg0, 0x07))
> +      {
> +        Store (P7ID, Local0)
> +        Add (Local0, DerefOf(Index(APT7, Arg1)), Local0)
> +      }
> +
> +      Return (Local0)
> +    }
> +
> +    //----------------------------------------------------------------
> +    //  Method CSTA()
> +    //      Get current processor state
> +    //  Inputs: Arg0 = Socket Number where core belongs
> +    //          Arg1 = Thread number for which to return the _STA code
> +    //                 (Bit0 - Core Id, BIT1- Thread Id)
> +    //----------------------------------------------------------------
> +    Method(CSTA, 2){        // Core Status
> +      Store(0, Local0)
> +      Store(0, Local2)    //for Core#
> +
> +      //Get ApicId per thread Index from APT#
> +      if (LEqual(Arg0, 0x0)) {
> +        if(LEqual(P0BM, 0x0)) {
> +          Return(0x00)
> +        }
> +
> +        Add (Local2, DerefOf(Index(APT0, Arg1)), Local2)
> +        if (LEqual(Local2, 0xFF)) {
> +          Return(0x00)
> +        }
> +        //Processor Bit mask is changed for core# only
> +        ShiftRight(Local2, 1, Local2)
> +        ShiftRight(P0BM, Local2, Local0)
> +      }
> +      if (LEqual(Arg0, 0x1)) {
> +        if(LEqual(P1BM, 0x0)) {
> +          Return(0x00)
> +        }
> +
> +        Add (Local2, DerefOf(Index(APT1, Arg1)), Local2)
> +        if (LEqual(Local2, 0xFF)) {
> +          Return(0x00)
> +        }
> +        //Processor Bit mask is changed for core# only
> +        ShiftRight(Local2, 1, Local2)
> +        ShiftRight(P1BM, Local2, Local0)
> +      }
> +      if (LEqual(Arg0, 0x2)) {
> +        if(LEqual(P2BM, 0x0)) {
> +          Return(0x00)
> +        }
> +
> +        Add (Local2, DerefOf(Index(APT2, Arg1)), Local2)
> +        if (LEqual(Local2, 0xFF)) {
> +          Return(0x00)
> +        }
> +        //Processor Bit mask is changed for core# only
> +        ShiftRight(Local2, 1, Local2)
> +        ShiftRight(P2BM, Local2, Local0)
> +      }
> +      if (LEqual(Arg0, 0x3)) {
> +        if(LEqual(P3BM, 0x0)) {
> +          Return(0x00)
> +        }
> +
> +        Add (Local2, DerefOf(Index(APT3, Arg1)), Local2)
> +        if (LEqual(Local2, 0xFF)) {
> +          Return(0x00)
> +        }
> +        //Processor Bit mask is changed for core# only
> +        ShiftRight(Local2, 1, Local2)
> +        ShiftRight(P3BM, Local2, Local0)
> +      }
> +      if (LEqual(Arg0, 0x4)) {
> +        if(LEqual(P4BM, 0x0)) {
> +          Return(0x00)
> +        }
> +
> +        Add (Local2, DerefOf(Index(APT4, Arg1)), Local2)
> +        if (LEqual(Local2, 0xFF)) {
> +          Return(0x00)
> +        }
> +        //Processor Bit mask is changed for core# only
> +        ShiftRight(Local2, 1, Local2)
> +        ShiftRight(P4BM, Local2, Local0)
> +      }
> +      if (LEqual(Arg0, 0x5)) {
> +        if(LEqual(P5BM, 0x0)) {
> +          Return(0x00)
> +        }
> +
> +        Add (Local2, DerefOf(Index(APT5, Arg1)), Local2)
> +        if (LEqual(Local2, 0xFF)) {
> +          Return(0x00)
> +        }
> +        //Processor Bit mask is changed for core# only
> +        ShiftRight(Local2, 1, Local2)
> +        ShiftRight(P5BM, Local2, Local0)
> +      }
> +      if (LEqual(Arg0, 0x6)) {
> +        if(LEqual(P6BM, 0x0)) {
> +          Return(0x00)
> +        }
> +
> +        Add (Local2, DerefOf(Index(APT6, Arg1)), Local2)
> +        if (LEqual(Local2, 0xFF)) {
> +          Return(0x00)
> +        }
> +        //Processor Bit mask is changed for core# only
> +        ShiftRight(Local2, 1, Local2)
> +        ShiftRight(P6BM, Local2, Local0)
> +      }
> +      if (LEqual(Arg0, 0x7)) {
> +        if(LEqual(P7BM, 0x0)) {
> +          Return(0x00)
> +        }
> +
> +        Add (Local2, DerefOf(Index(APT7, Arg1)), Local2)
> +        if (LEqual(Local2, 0xFF)) {
> +          Return(0x00)
> +        }
> +        //Processor Bit mask is changed for core# only
> +        ShiftRight(Local2, 1, Local2)
> +        ShiftRight(P7BM, Local2, Local0)
> +      }
> +
> +      And(Local0, 0x1, Local0)
> +      if(LEqual(Local0, 0x0)) {
> +        Return(0x00)
> +      } else {
> +        Return(0x01)
> +      }
> +    } // End Method CSTA
> +
> +    //----------------------------------------------------------------
> +    //  Method CUID()
> +    //    Return MADT ACPI Processor UID, AcpiProcessorId and _UID
> +    //    Should match with AcpiProcessorId in C code
> +    //
> +    //  Inputs: Arg0 = Socket ID
> +    //  Inputs: Arg1 = Thread ID
> +    //  Return  _UID
> +    //----------------------------------------------------------------+
> +    Method (CUID, 2) {
> +      Store(ShiftLeft(1, CNBS), Local1)
> +      Multiply(Arg0, local1, local1)
> +      Add(local1, Arg1, local1)
> +
> +      Return (Local1)
> +    }
> +
> +    //----------------------------------------------------------------
> +    //  Method LAPC()
> +    //    Return the _MAT APIC data structure
> +    //
> +    //  Inputs: Arg0 = Socket ID
> +    //  Inputs: Arg1 = Thread ID
> +    //          APID = TPID(Arg0, Arg1)
> +    //          PUID = Socket ID << CNBS + Thread ID
> +    //----------------------------------------------------------------+
> +    Method(LAPC, 2,Serialized) {
> +
> +      Name(APIC, Buffer(SIZE_LAPIC_STRUC) {} ) // initialize a buffer with
> CRST size
> +
> +      CreateByteField (APIC, 0x00,  TYPE) // Type
> +      CreateByteField (APIC, 0x01,  LLEN) // Length
> +      CreateByteField (APIC, 0x02,  PUID) // ACPI Processor ID
> +      CreateByteField (APIC, 0x03,  APID) // APIC ID
> +      CreateDwordField(APIC, 0x04,  FLAG) // Flags
> +
> +      Store(LAPIC_TYPE, TYPE)
> +      Store(SIZE_LAPIC_STRUC, LLEN)
> +
> +      // Update APIC ID
> +      Store (\_SB.TPID(Arg0, Arg1), APID)
> +
> +      // Update Flag
> +      if(LEqual(\_SB.CSTA(Arg0, Arg1), 0x00)) {
> +        Store(0x00, FLAG)
> +        Store(0xFF, PUID)
> +        Store(0xFF, APID)
> +      } else {
> +        Store(ShiftLeft(1, CNBS), Local1)
> +        Multiply(Arg0, local1, local1)
> +        Add(local1, Arg1, local1)
> +        Store(local1, PUID)
> +
> +        //set Enable flag
> +        Store(0x01, FLAG)
> +      }
> +
> +      // calculate PROCID based on APICID using same algorithm in
> AcpiPlatformHook.c
> +
> +      Return(APIC)
> +    }
> +
> +    Method(X2AP, 2,Serialized) {
> +
> +      Name(APIC, Buffer(SIZE_X2LAPIC_STRUC) {} ) // initialize a buffer with
> CRST siz
> +
> +      CreateByteField (APIC, 0x00,  TYPE) // Type
> +      CreateByteField (APIC, 0x01,  LLEN) // Length
> +      CreateWordField (APIC, 0x02,  RSVD) // Reserved 2 bytes
> +      CreateDwordField(APIC, 0x04,  APID) // APIC ID
> +      CreateDwordField(APIC, 0x08,  FLAG) // Flags
> +      CreateDwordField(APIC, 0x0C,  PUID) // ACPI Processor UID
> +
> +      Store(X2LAPIC_TYPE, TYPE)
> +      Store(SIZE_X2LAPIC_STRUC, LLEN)
> +      Store(0, RSVD)
> +
> +      // Update APIC ID
> +      Store (\_SB.TPID(Arg0, Arg1), APID)
> +
> +      // Update Flag
> +      if(LEqual(\_SB.CSTA(Arg0, Arg1), 0x00)) {
> +        Store(0x00, FLAG)
> +        Store(0xFFFFFFFF, APID)
> +      } else {
> +        //ProcId = socket# * MAX_THREADS_PER_SOCKET + thread#
> +        Store(ShiftLeft(1, CNBS), Local1)
> +        Multiply(Arg0, local1, local1)
> +        Add(local1, Arg1, local1)
> +        Store(local1, PUID)
> +
> +        //set Enable flag
> +        Store(0x01, FLAG)
> +
> +      }
> +
> +      Return(APIC)
> +
> +    }
> +
> +    CPU_SOCKET_DEV(0)
> +
> +#if MAX_SOCKET > 1
> +    CPU_SOCKET_DEV(1)
> +#endif
> +
> +#if MAX_SOCKET > 2
> +    CPU_SOCKET_DEV(2)
> +#endif
> +
> +#if MAX_SOCKET > 3
> +    CPU_SOCKET_DEV(3)
> +#endif
> +
> +#if MAX_SOCKET > 4
> +    CPU_SOCKET_DEV(4)
> +#endif
> +
> +#if MAX_SOCKET > 5
> +    CPU_SOCKET_DEV(5)
> +#endif
> +
> +#if MAX_SOCKET > 6
> +    CPU_SOCKET_DEV(6)
> +#endif
> +
> +#if MAX_SOCKET > 7
> +    CPU_SOCKET_DEV(7)
> +#endif
> +  }
> diff --git
> a/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/DS
> DT.asl
> b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/DS
> DT.asl
> new file mode 100644
> index 0000000000..b3f96f8ddb
> --- /dev/null
> +++
> b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/DS
> DT.asl
> @@ -0,0 +1,61 @@
> +/** @file
> +  ACPI DSDT table
> +
> +  @copyright
> +  Copyright 2011 - 2020 Intel Corporation. <BR>
> +
> +  SPDX-License-Identifier: BSD-2-Clause-Patent
> +**/
> +
> +//
> +// @NOTE: This should be read from hardware to reflect
> +// real PCI exress base. Currently we do not have such
> +// capability so hardcode is used instead.
> +//
> +#define PCI_EXPRESS_BASE 0x80000000
> +
> +Scope(\_SB.PC00) {
> +
> +  //
> +  // PCI-specific method's GUID
> +  //
> +  Name(PCIG, ToUUID("E5C937D0-3553-4d7a-9117-EA4D19C3434D"))
> +  //
> +  // PCI's _DSM - an attempt at modular _DSM implementation
> +  // When writing your own _DSM function that needs to include PCI-
> specific methods, do this:
> +  //
> +  // Method(_YOUR_DSM,4){
> +  //   if(Lequal(Arg0,PCIG)) { return(PCID(Arg0,Arg1,Arg2,Arg3)) }
> +  //   ...continue your _DSM by checking different GUIDs...
> +  //   else { return(0) }
> +  // }
> +  //
> +  Method(PCID, 4, Serialized) {
> +    If(LEqual(Arg0, PCIG)) {         // PCIE capabilities UUID
> +      If(LGreaterEqual(Arg1,3)) {                                              // revision at least 3
> +        If(LEqual(Arg2,0)) { Return (Buffer(2){0x01,0x03}) }                   // function
> 0: list of supported functions
> +        If(LEqual(Arg2,8)) { Return (1) }                                      // function 8: Avoiding
> Power-On Reset Delay Duplication on Sx Resume
> +        If(LEqual(Arg2,9)) { Return (Package(5){50000,Ones,Ones,50000,Ones})
> } // function 9: Specifying Device Readiness Durations
> +      }
> +    }
> +    return (Buffer(1){0})
> +  }
> +
> +  Method(PCIC,1,Serialized) {
> +    If(LEqual(ECR1,1)) {
> +      If(LEqual(Arg0, PCIG)) {
> +        return (1)
> +      }
> +    }
> +    return (0)
> +  }
> +
> +  //
> +  // Get the PCI express base address.
> +  // Currently hardcoded.
> +  //
> +  Method (GPCB) {
> +    Return (PCI_EXPRESS_BASE)
> +  }
> +}
> +
> diff --git
> a/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/EP
> RPPlatform10nm.asl
> b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/EP
> RPPlatform10nm.asl
> new file mode 100644
> index 0000000000..386fbdac59
> --- /dev/null
> +++
> b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/EP
> RPPlatform10nm.asl
> @@ -0,0 +1,19 @@
> +/** @file
> +
> +  @copyright
> +  Copyright 2016 - 2020 Intel Corporation. <BR>
> +
> +  SPDX-License-Identifier: BSD-2-Clause-Patent
> +**/
> +
> +DefinitionBlock ("EPRPPlatform10nm.asl","DSDT",2,"INTEL","EPRP10NM",3)
> +{
> +  #include "CommonPlatform10nm.asi"
> +  #include "PlatformPciTree10nm_EPRP.asi"
> +  #include "AMLUPD.asl"
> +  #include "DSDT.asl"
> +  #include "Pch.asl"       //This is in another package (PchPkg)
> +  #include "Platform.asl"
> +  #include "PlatformGpe10nm.asi"
> +  #include "IioPcieEdpcNotify10nm.asi"
> +} // end of DSDT
> diff --git
> a/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/Fpg
> aBus00.asi
> b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/Fp
> gaBus00.asi
> new file mode 100644
> index 0000000000..235e60650c
> --- /dev/null
> +++
> b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/Fp
> gaBus00.asi
> @@ -0,0 +1,158 @@
> +/** @file
> +
> +  @copyright
> +  Copyright 2001 - 2016 Intel Corporation. <BR>
> +
> +  SPDX-License-Identifier: BSD-2-Clause-Patent
> +**/
> +
> +  Name (SUPP, 0)
> +  Name (CTRL, 0)
> +
> +  Method(_OSC,4) {
> +    //
> +    // Create DWord-addressable fields from the capabilities Buffer
> +    //
> +    CreateDWordField(Arg3,0,CDW1)
> +    CreateDWordField(Arg3,4,CDW2)
> +    If(LGreater(Arg2,2)) {
> +      CreateDWordField(Arg3,8,CDW3)
> +    }
> +
> +
> +      If (LEqual(Arg0,ToUUID("33DB4D5B-1FF7-401C-9657-7441C03DD766"))) {
> +        //
> +        // Save Capabilities DWord2 & 3
> +        //
> +        Store(CDW2,SUPP)
> +        Store(CDW3,CTRL)
> +
> +        //
> +        // Only allow native hot plug control if OS supports
> +        // * ASPM
> +        // * MSI/MSI-X
> +        //
> +        If (LOr(AHPE, LNotEqual(And(SUPP, 0x16), 0x16))) { // Conditions not
> met?
> +          And(CTRL, 0x1E, CTRL) // Mask bit 0 to deny.
> +          Sleep(1000)
> +        }
> +
> +        //
> +        // Never allow SHPC (no SHPC controller in system)
> +        //
> +        And(CTRL, 0x1D, CTRL)
> +        //And (CTRL, 0x1C, CTRL)
> +
> +          If (LNotEqual(Arg1,one)) { // unknown revision
> +            Or(CDW1,0x08,CDW1)
> +          }
> +
> +          If(LNotEqual(CDW3,CTRL)) { // capabilities bits were masked
> +            Or(CDW1,0x10,CDW1)
> +          }
> +          //
> +          // update DWORD3 in the buffer
> +          //
> +          Store(CTRL,CDW3)
> +          Return(Arg3)
> +
> +      } Else {
> +        //
> +        // Just indicate unrecognized UUID
> +        // Leave it at that
> +        //
> +        Or (CDW1,4,CDW1)
> +        Store (0xEE, IO80)
> +        Return(Arg3)
> +      }
> +  }
> +
> +  Method(_STA){
> +    // Check if Virtual FPGA is present
> +    if(LEqual(P0FB, 0x1)) {
> +      // Virtual FPGA present and logically online
> +      Return(0x0F)
> +    }
> +    // Virtual FPGA logically offline
> +    Return(0x00)
> +
> +  } // End Method STA
> +
> +  Name (RBUF, ResourceTemplate () {
> +      WORDBusNumber(          // Bus number resource (0); the bridge produces
> bus numbers for its subsequent buses
> +      ResourceProducer,       // bit 0 of general flags is 1
> +      MinFixed,               // Range is fixed
> +      MaxFixed,               // Range is fixed
> +      PosDecode,              // PosDecode
> +      0x0000,                 // Granularity
> +      0x0000,                 // Min
> +      0x0000,                 // Max
> +      0x0000,                 // Translation
> +      0x0001,                 // Range Length = Max-Min+1
> +      ,
> +      ,
> +      FBUS
> +    )
> +
> +    DWORDMemory(              // Consumed-and-produced resource(all of
> memory space)
> +      ResourceProducer,       // bit 0 of general flags is 0
> +      PosDecode,              // positive Decode
> +      MinFixed,               // Range is fixed
> +      MaxFixed,               // Range is fixed
> +      NonCacheable,
> +      ReadWrite,
> +      0x00000000,             // Granularity (FIX7 - Patched by ACPI Platform Driver
> during POST)
> +      0x00000000,             // Min (calculated dynamically) (FIX7 - Patched by
> ACPI Platform Driver during POST)
> +      0x00000000,             // Max = 4GB - 1MB  (fwh + fwh alias) (FIX7 - Patched
> by ACPI Platform Driver during POST)
> +      0x00000000,             // Translation
> +      0x00000000,             // Range Length (calculated dynamically) (FIX7 -
> Patched by ACPI Platform Driver during POST)
> +                ,
> +                ,
> +      FPGM                    // DescriptorName populated so iASL outputs offset for
> it in a .h file
> +    )
> +
> +    DWORDMemory(              // Consumed-and-produced resource(all of
> memory space)
> +      ResourceProducer,       // bit 0 of general flags is 0
> +      PosDecode,              // positive Decode
> +      MinFixed,               // Range is fixed
> +      MaxFixed,               // Range is fixed
> +      NonCacheable,
> +      ReadWrite,
> +      0x00000000,             // Granularity (FIXZ - Patched by ACPI Platform Driver
> during POST)
> +      0x00000000,             // Min (calculated dynamically) (FIXZ - Patched by
> ACPI Platform Driver during POST)
> +      0x00000000,             // Max = 4GB - 1MB  (fwh + fwh alias) (FIXZ - Patched
> by ACPI Platform Driver during POST)
> +      0x00000000,             // Translation
> +      0x00000000,             // Range Length (calculated dynamically) (FIXZ -
> Patched by ACPI Platform Driver during POST)
> +                ,
> +                ,
> +      FIXZ                    // DescriptorName populated so iASL outputs offset for it
> in a .h file
> +    )
> +
> +  })
> +
> +  Method(_CRS, 0x0, NotSerialized) {
> +    ///
> +    /// Patch 32b memory
> +    ///
> +    CreateDwordField(^RBUF, ^FPGM._MIN, FMN1)
> +    CreateDwordField(^RBUF, ^FPGM._MAX, FMX1)
> +    CreateDwordField(^RBUF, ^FPGM._LEN, FLN1)
> +    Store(FMB0, FMN1)
> +    Store(FML0, FMX1)
> +    Subtract (FMX1, FMN1, FLN1)
> +    Add (FLN1, 1, FLN1)
> +
> +    ///
> +    /// Patch _BBN
> +    ///
> +    If(LGreater(FBL0, FBB0)) {
> +      CreateWordField(^RBUF, ^FBUS._MIN, BMIN)
> +      CreateWordField(^RBUF, ^FBUS._MAX, BMAX)
> +      CreateWordField(^RBUF, ^FBUS._LEN, BLEN)
> +      Store(FBB0, BMIN)
> +      Store(FBL0, BMAX)
> +      Subtract (BMAX, BMIN, BLEN)
> +      Add (BLEN, 1, BLEN)
> +    }
> +    Return (RBUF)
> +  }
> diff --git
> a/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/Fpg
> aBus01.asi
> b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/Fp
> gaBus01.asi
> new file mode 100644
> index 0000000000..cecf469c9d
> --- /dev/null
> +++
> b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/Fp
> gaBus01.asi
> @@ -0,0 +1,158 @@
> +/** @file
> +
> +  @copyright
> +  Copyright 2001 - 2016 Intel Corporation. <BR>
> +
> +  SPDX-License-Identifier: BSD-2-Clause-Patent
> +**/
> +
> +  Name (SUPP, 0)
> +  Name (CTRL, 0)
> +
> +  Method(_OSC,4) {
> +    //
> +    // Create DWord-addressable fields from the capabilities Buffer
> +    //
> +    CreateDWordField(Arg3,0,CDW1)
> +    CreateDWordField(Arg3,4,CDW2)
> +    If(LGreater(Arg2,2)) {
> +      CreateDWordField(Arg3,8,CDW3)
> +    }
> +
> +
> +      If (LEqual(Arg0,ToUUID("33DB4D5B-1FF7-401C-9657-7441C03DD766"))) {
> +        //
> +        // Save Capabilities DWord2 & 3
> +        //
> +        Store(CDW2,SUPP)
> +        Store(CDW3,CTRL)
> +
> +        //
> +        // Only allow native hot plug control if OS supports
> +        // * ASPM
> +        // * MSI/MSI-X
> +        //
> +        If (LOr(AHPE, LNotEqual(And(SUPP, 0x16), 0x16))) { // Conditions not
> met?
> +          And(CTRL, 0x1E, CTRL) // Mask bit 0 to deny.
> +          Sleep(1000)
> +        }
> +
> +        //
> +        // Never allow SHPC (no SHPC controller in system)
> +        //
> +        And(CTRL, 0x1D, CTRL)
> +        //And (CTRL, 0x1C, CTRL)
> +
> +          If (LNotEqual(Arg1,one)) { // unknown revision
> +            Or(CDW1,0x08,CDW1)
> +          }
> +
> +          If(LNotEqual(CDW3,CTRL)) { // capabilities bits were masked
> +            Or(CDW1,0x10,CDW1)
> +          }
> +          //
> +          // update DWORD3 in the buffer
> +          //
> +          Store(CTRL,CDW3)
> +          Return(Arg3)
> +
> +      } Else {
> +        //
> +        // Just indicate unrecognized UUID
> +        // Leave it at that
> +        //
> +        Or (CDW1,4,CDW1)
> +        Store (0xEE, IO80)
> +        Return(Arg3)
> +      }
> +  }
> +
> +  Method(_STA){
> +    // Check if Virtual FPGA is present
> +    if(LEqual(P1FB, 0x1)) {
> +      // Virtual FPGA present and logically online
> +      Return(0x0F)
> +    }
> +    // Virtual FPGA logically offline
> +    Return(0x00)
> +
> +  } // End Method STA
> +
> +  Name (RBUF, ResourceTemplate () {
> +      WORDBusNumber(          // Bus number resource (0); the bridge produces
> bus numbers for its subsequent buses
> +      ResourceProducer,       // bit 0 of general flags is 1
> +      MinFixed,               // Range is fixed
> +      MaxFixed,               // Range is fixed
> +      PosDecode,              // PosDecode
> +      0x0000,                 // Granularity
> +      0x0000,                 // Min
> +      0x0000,                 // Max
> +      0x0000,                 // Translation
> +      0x0001,                 // Range Length = Max-Min+1
> +      ,
> +      ,
> +      FBUS
> +    )
> +
> +    DWORDMemory(              // Consumed-and-produced resource(all of
> memory space)
> +      ResourceProducer,       // bit 0 of general flags is 0
> +      PosDecode,              // positive Decode
> +      MinFixed,               // Range is fixed
> +      MaxFixed,               // Range is fixed
> +      NonCacheable,
> +      ReadWrite,
> +      0x00000000,             // Granularity (FIX7 - Patched by ACPI Platform Driver
> during POST)
> +      0x00000000,             // Min (calculated dynamically) (FIX7 - Patched by
> ACPI Platform Driver during POST)
> +      0x00000000,             // Max = 4GB - 1MB  (fwh + fwh alias) (FIX7 - Patched
> by ACPI Platform Driver during POST)
> +      0x00000000,             // Translation
> +      0x00000000,             // Range Length (calculated dynamically) (FIX7 -
> Patched by ACPI Platform Driver during POST)
> +                ,
> +                ,
> +      FPGM                    // DescriptorName populated so iASL outputs offset for
> it in a .h file
> +    )
> +
> +    DWORDMemory(              // Consumed-and-produced resource(all of
> memory space)
> +      ResourceProducer,       // bit 0 of general flags is 0
> +      PosDecode,              // positive Decode
> +      MinFixed,               // Range is fixed
> +      MaxFixed,               // Range is fixed
> +      NonCacheable,
> +      ReadWrite,
> +      0x00000000,             // Granularity (FIXZ - Patched by ACPI Platform Driver
> during POST)
> +      0x00000000,             // Min (calculated dynamically) (FIXZ - Patched by
> ACPI Platform Driver during POST)
> +      0x00000000,             // Max = 4GB - 1MB  (fwh + fwh alias) (FIXZ - Patched
> by ACPI Platform Driver during POST)
> +      0x00000000,             // Translation
> +      0x00000000,             // Range Length (calculated dynamically) (FIXZ -
> Patched by ACPI Platform Driver during POST)
> +                ,
> +                ,
> +      FIXZ                    // DescriptorName populated so iASL outputs offset for it
> in a .h file
> +
> +    )
> +  })
> +
> +  Method(_CRS, 0x0, NotSerialized) {
> +    ///
> +    /// Patch 32b memory
> +    ///
> +    CreateDwordField(^RBUF, ^FPGM._MIN, FMN1)
> +    CreateDwordField(^RBUF, ^FPGM._MAX, FMX1)
> +    CreateDwordField(^RBUF, ^FPGM._LEN, FLN1)
> +    Store(FMB1, FMN1)
> +    Store(FML1, FMX1)
> +    Subtract (FMX1, FMN1, FLN1)
> +    Add (FLN1, 1, FLN1)
> +
> +    ///
> +    /// Patch _BBN
> +    ///
> +    If(LGreater(FBL1, FBB1)) {
> +      CreateWordField(^RBUF, ^FBUS._MIN, BMIN)
> +      CreateWordField(^RBUF, ^FBUS._MAX, BMAX)
> +      CreateWordField(^RBUF, ^FBUS._LEN, BLEN)
> +      Store(FBB1, BMIN)
> +      Store(FBL1, BMAX)
> +      Subtract (BMAX, BMIN, BLEN)
> +      Add (BLEN, 1, BLEN)
> +    }
> +    Return (RBUF)
> +  }
> diff --git
> a/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/Fpg
> aBus02.asi
> b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/Fp
> gaBus02.asi
> new file mode 100644
> index 0000000000..e4731a63c1
> --- /dev/null
> +++
> b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/Fp
> gaBus02.asi
> @@ -0,0 +1,157 @@
> +/** @file
> +
> +  @copyright
> +  Copyright 2001 - 2016 Intel Corporation. <BR>
> +
> +  SPDX-License-Identifier: BSD-2-Clause-Patent
> +**/
> +
> +  Name (SUPP, 0)
> +  Name (CTRL, 0)
> +
> +  Method(_OSC,4) {
> +    //
> +    // Create DWord-addressable fields from the capabilities Buffer
> +    //
> +    CreateDWordField(Arg3,0,CDW1)
> +    CreateDWordField(Arg3,4,CDW2)
> +    If(LGreater(Arg2,2)) {
> +      CreateDWordField(Arg3,8,CDW3)
> +    }
> +
> +
> +      If (LEqual(Arg0,ToUUID("33DB4D5B-1FF7-401C-9657-7441C03DD766"))) {
> +        //
> +        // Save Capabilities DWord2 & 3
> +        //
> +        Store(CDW2,SUPP)
> +        Store(CDW3,CTRL)
> +
> +        //
> +        // Only allow native hot plug control if OS supports
> +        // * ASPM
> +        // * MSI/MSI-X
> +        //
> +        If (LOr(AHPE, LNotEqual(And(SUPP, 0x16), 0x16))) { // Conditions not
> met?
> +          And(CTRL, 0x1E, CTRL) // Mask bit 0 to deny.
> +          Sleep(1000)
> +        }
> +
> +        //
> +        // Never allow SHPC (no SHPC controller in system)
> +        //
> +        And(CTRL, 0x1D, CTRL)
> +        //And (CTRL, 0x1C, CTRL)
> +
> +          If (LNotEqual(Arg1,one)) { // unknown revision
> +            Or(CDW1,0x08,CDW1)
> +          }
> +
> +          If(LNotEqual(CDW3,CTRL)) { // capabilities bits were masked
> +            Or(CDW1,0x10,CDW1)
> +          }
> +          //
> +          // update DWORD3 in the buffer
> +          //
> +          Store(CTRL,CDW3)
> +          Return(Arg3)
> +
> +      } Else {
> +        //
> +        // Just indicate unrecognized UUID
> +        // Leave it at that
> +        //
> +        Or (CDW1,4,CDW1)
> +        Store (0xEE, IO80)
> +        Return(Arg3)
> +      }
> +  }
> +
> +  Method(_STA){
> +    // Check if Virtual FPGA is present
> +    if(LEqual(P2FB, 0x1)) {
> +      // Virtual FPGA present and logically online
> +      Return(0x0F)
> +    }
> +    // Virtual FPGA logically offline
> +    Return(0x00)
> +
> +  } // End Method STA
> +
> +  Name (RBUF, ResourceTemplate () {
> +      WORDBusNumber(          // Bus number resource (0); the bridge produces
> bus numbers for its subsequent buses
> +      ResourceProducer,       // bit 0 of general flags is 1
> +      MinFixed,               // Range is fixed
> +      MaxFixed,               // Range is fixed
> +      PosDecode,              // PosDecode
> +      0x0000,                 // Granularity
> +      0x0000,                 // Min
> +      0x0000,                 // Max
> +      0x0000,                 // Translation
> +      0x0001,                 // Range Length = Max-Min+1
> +      ,
> +      ,
> +      FBUS
> +    )
> +
> +    DWORDMemory(              // Consumed-and-produced resource(all of
> memory space)
> +      ResourceProducer,       // bit 0 of general flags is 0
> +      PosDecode,              // positive Decode
> +      MinFixed,               // Range is fixed
> +      MaxFixed,               // Range is fixed
> +      NonCacheable,
> +      ReadWrite,
> +      0x00000000,             // Granularity (FIX7 - Patched by ACPI Platform Driver
> during POST)
> +      0x00000000,             // Min (calculated dynamically) (FIX7 - Patched by
> ACPI Platform Driver during POST)
> +      0x00000000,             // Max = 4GB - 1MB  (fwh + fwh alias) (FIX7 - Patched
> by ACPI Platform Driver during POST)
> +      0x00000000,             // Translation
> +      0x00000000,             // Range Length (calculated dynamically) (FIX7 -
> Patched by ACPI Platform Driver during POST)
> +                ,
> +                ,
> +      FPGM                    // DescriptorName populated so iASL outputs offset for
> it in a .h file
> +    )
> +
> +    DWORDMemory(              // Consumed-and-produced resource(all of
> memory space)
> +      ResourceProducer,       // bit 0 of general flags is 0
> +      PosDecode,              // positive Decode
> +      MinFixed,               // Range is fixed
> +      MaxFixed,               // Range is fixed
> +      NonCacheable,
> +      ReadWrite,
> +      0x00000000,             // Granularity (FIXZ - Patched by ACPI Platform Driver
> during POST)
> +      0x00000000,             // Min (calculated dynamically) (FIXZ - Patched by
> ACPI Platform Driver during POST)
> +      0x00000000,             // Max = 4GB - 1MB  (fwh + fwh alias) (FIXZ - Patched
> by ACPI Platform Driver during POST)
> +      0x00000000,             // Translation
> +      0x00000000,             // Range Length (calculated dynamically) (FIXZ -
> Patched by ACPI Platform Driver during POST)
> +                ,
> +                ,
> +      FIXZ                    // DescriptorName populated so iASL outputs offset for it
> in a .h file
> +    )
> +  })
> +
> +  Method(_CRS, 0x0, NotSerialized) {
> +    ///
> +    /// Patch 32b memory
> +    ///
> +    CreateDwordField(^RBUF, ^FPGM._MIN, FMN1)
> +    CreateDwordField(^RBUF, ^FPGM._MAX, FMX1)
> +    CreateDwordField(^RBUF, ^FPGM._LEN, FLN1)
> +    Store(FMB2, FMN1)
> +    Store(FML2, FMX1)
> +    Subtract (FMX1, FMN1, FLN1)
> +    Add (FLN1, 1, FLN1)
> +
> +    ///
> +    /// Patch _BBN
> +    ///
> +    If(LGreater(FBL2, FBB2)) {
> +      CreateWordField(^RBUF, ^FBUS._MIN, BMIN)
> +      CreateWordField(^RBUF, ^FBUS._MAX, BMAX)
> +      CreateWordField(^RBUF, ^FBUS._LEN, BLEN)
> +      Store(FBB2, BMIN)
> +      Store(FBL2, BMAX)
> +      Subtract (BMAX, BMIN, BLEN)
> +      Add (BLEN, 1, BLEN)
> +    }
> +    Return (RBUF)
> +  }
> diff --git
> a/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/Fpg
> aBus03.asi
> b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/Fp
> gaBus03.asi
> new file mode 100644
> index 0000000000..51be7989ac
> --- /dev/null
> +++
> b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/Fp
> gaBus03.asi
> @@ -0,0 +1,157 @@
> +/** @file
> +
> +  @copyright
> +  Copyright 2001 - 2016 Intel Corporation. <BR>
> +
> +  SPDX-License-Identifier: BSD-2-Clause-Patent
> +**/
> +
> +  Name (SUPP, 0)
> +  Name (CTRL, 0)
> +
> +  Method(_OSC,4) {
> +    //
> +    // Create DWord-addressable fields from the capabilities Buffer
> +    //
> +    CreateDWordField(Arg3,0,CDW1)
> +    CreateDWordField(Arg3,4,CDW2)
> +    If(LGreater(Arg2,2)) {
> +      CreateDWordField(Arg3,8,CDW3)
> +    }
> +
> +
> +      If (LEqual(Arg0,ToUUID("33DB4D5B-1FF7-401C-9657-7441C03DD766"))) {
> +        //
> +        // Save Capabilities DWord2 & 3
> +        //
> +        Store(CDW2,SUPP)
> +        Store(CDW3,CTRL)
> +
> +        //
> +        // Only allow native hot plug control if OS supports
> +        // * ASPM
> +        // * MSI/MSI-X
> +        //
> +        If (LOr(AHPE, LNotEqual(And(SUPP, 0x16), 0x16))) { // Conditions not
> met?
> +          And(CTRL, 0x1E, CTRL) // Mask bit 0 to deny.
> +          Sleep(1000)
> +        }
> +
> +        //
> +        // Never allow SHPC (no SHPC controller in system)
> +        //
> +        And(CTRL, 0x1D, CTRL)
> +        //And (CTRL, 0x1C, CTRL)
> +
> +          If (LNotEqual(Arg1,one)) { // unknown revision
> +            Or(CDW1,0x08,CDW1)
> +          }
> +
> +          If(LNotEqual(CDW3,CTRL)) { // capabilities bits were masked
> +            Or(CDW1,0x10,CDW1)
> +          }
> +          //
> +          // update DWORD3 in the buffer
> +          //
> +          Store(CTRL,CDW3)
> +          Return(Arg3)
> +
> +      } Else {
> +        //
> +        // Just indicate unrecognized UUID
> +        // Leave it at that
> +        //
> +        Or (CDW1,4,CDW1)
> +        Store (0xEE, IO80)
> +        Return(Arg3)
> +      }
> +  }
> +
> +  Method(_STA){
> +    // Check if Virtual FPGA is present
> +    if(LEqual(P3FB, 0x1)) {
> +      // Virtual FPGA present and logically online
> +      Return(0x0F)
> +    }
> +    // Virtual FPGA logically offline
> +    Return(0x00)
> +
> +  } // End Method STA
> +
> +  Name (RBUF, ResourceTemplate () {
> +      WORDBusNumber(          // Bus number resource (0); the bridge produces
> bus numbers for its subsequent buses
> +      ResourceProducer,       // bit 0 of general flags is 1
> +      MinFixed,               // Range is fixed
> +      MaxFixed,               // Range is fixed
> +      PosDecode,              // PosDecode
> +      0x0000,                 // Granularity
> +      0x0000,                 // Min
> +      0x0000,                 // Max
> +      0x0000,                 // Translation
> +      0x0001,                 // Range Length = Max-Min+1
> +      ,
> +      ,
> +      FBUS
> +    )
> +
> +    DWORDMemory(              // Consumed-and-produced resource(all of
> memory space)
> +      ResourceProducer,       // bit 0 of general flags is 0
> +      PosDecode,              // positive Decode
> +      MinFixed,               // Range is fixed
> +      MaxFixed,               // Range is fixed
> +      NonCacheable,
> +      ReadWrite,
> +      0x00000000,             // Granularity (FIX7 - Patched by ACPI Platform Driver
> during POST)
> +      0x00000000,             // Min (calculated dynamically) (FIX7 - Patched by
> ACPI Platform Driver during POST)
> +      0x00000000,             // Max = 4GB - 1MB  (fwh + fwh alias) (FIX7 - Patched
> by ACPI Platform Driver during POST)
> +      0x00000000,             // Translation
> +      0x00000000,             // Range Length (calculated dynamically) (FIX7 -
> Patched by ACPI Platform Driver during POST)
> +                ,
> +                ,
> +      FPGM                    // DescriptorName populated so iASL outputs offset for
> it in a .h file
> +    )
> +
> +    DWORDMemory(              // Consumed-and-produced resource(all of
> memory space)
> +      ResourceProducer,       // bit 0 of general flags is 0
> +      PosDecode,              // positive Decode
> +      MinFixed,               // Range is fixed
> +      MaxFixed,               // Range is fixed
> +      NonCacheable,
> +      ReadWrite,
> +      0x00000000,             // Granularity (FIXZ - Patched by ACPI Platform Driver
> during POST)
> +      0x00000000,             // Min (calculated dynamically) (FIXZ - Patched by
> ACPI Platform Driver during POST)
> +      0x00000000,             // Max = 4GB - 1MB  (fwh + fwh alias) (FIXZ - Patched
> by ACPI Platform Driver during POST)
> +      0x00000000,             // Translation
> +      0x00000000,             // Range Length (calculated dynamically) (FIXZ -
> Patched by ACPI Platform Driver during POST)
> +                ,
> +                ,
> +      FIXZ                    // DescriptorName populated so iASL outputs offset for it
> in a .h file
> +    )
> +  })
> +
> +  Method(_CRS, 0x0, NotSerialized) {
> +    ///
> +    /// Patch 32b memory
> +    ///
> +    CreateDwordField(^RBUF, ^FPGM._MIN, FMN1)
> +    CreateDwordField(^RBUF, ^FPGM._MAX, FMX1)
> +    CreateDwordField(^RBUF, ^FPGM._LEN, FLN1)
> +    Store(FMB3, FMN1)
> +    Store(FML3, FMX1)
> +    Subtract (FMX1, FMN1, FLN1)
> +    Add (FLN1, 1, FLN1)
> +
> +    ///
> +    /// Patch _BBN
> +    ///
> +    If(LGreater(FBL3, FBB3)) {
> +      CreateWordField(^RBUF, ^FBUS._MIN, BMIN)
> +      CreateWordField(^RBUF, ^FBUS._MAX, BMAX)
> +      CreateWordField(^RBUF, ^FBUS._LEN, BLEN)
> +      Store(FBB3, BMIN)
> +      Store(FBL3, BMAX)
> +      Subtract (BMAX, BMIN, BLEN)
> +      Add (BLEN, 1, BLEN)
> +    }
> +    Return (RBUF)
> +  }
> diff --git
> a/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/Gp
> e.asi
> b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/Gp
> e.asi
> new file mode 100644
> index 0000000000..d695b13df9
> --- /dev/null
> +++
> b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/Gp
> e.asi
> @@ -0,0 +1,137 @@
> +/** @file
> +  ACPI DSDT table
> +
> +@copyright
> +  Copyright 2011 - 2018 Intel Corporation.
> +
> +  SPDX-License-Identifier: BSD-2-Clause-Patent
> +**/
> +
> +  // General Purpose Events.  This Scope handles the Run-time and
> +  // Wake-time SCIs.  The specific method called will be determined by
> +  // the _Lxx value, where xx equals the bit location in the General
> +  // Purpose Event register(s).
> +
> +
> +    //
> +    // If the Root Port is enabled, run PCI_EXP_STS handler
> +    //
> +    If(LNotEqual(\_SB.PC00.RP01.VDID,0xFFFFFFFF))
> +    {
> +      \_SB.PC00.RP01.HPME()
> +      Notify(\_SB.PC00.RP01, 0x02)
> +    }
> +
> +    If(LNotEqual(\_SB.PC00.RP02.VDID,0xFFFFFFFF))
> +    {
> +      \_SB.PC00.RP02.HPME()
> +      Notify(\_SB.PC00.RP02, 0x02)
> +    }
> +
> +    If(LNotEqual(\_SB.PC00.RP03.VDID,0xFFFFFFFF))
> +    {
> +      \_SB.PC00.RP03.HPME()
> +      Notify(\_SB.PC00.RP03, 0x02)
> +    }
> +
> +    If(LNotEqual(\_SB.PC00.RP04.VDID,0xFFFFFFFF))
> +    {
> +      \_SB.PC00.RP04.HPME()
> +      Notify(\_SB.PC00.RP04, 0x02)
> +    }
> +
> +    If(LNotEqual(\_SB.PC00.RP05.VDID,0xFFFFFFFF))
> +    {
> +      \_SB.PC00.RP05.HPME()
> +      Notify(\_SB.PC00.RP05, 0x02)
> +    }
> +
> +    If(LNotEqual(\_SB.PC00.RP06.VDID,0xFFFFFFFF))
> +    {
> +      \_SB.PC00.RP06.HPME()
> +      Notify(\_SB.PC00.RP06, 0x02)
> +    }
> +
> +    If(LNotEqual(\_SB.PC00.RP07.VDID,0xFFFFFFFF))
> +    {
> +      \_SB.PC00.RP07.HPME()
> +      Notify(\_SB.PC00.RP07, 0x02)
> +    }
> +
> +    If(LNotEqual(\_SB.PC00.RP08.VDID,0xFFFFFFFF))
> +    {
> +      \_SB.PC00.RP08.HPME()
> +      Notify(\_SB.PC00.RP08, 0x02)
> +    }
> +
> +    If(LNotEqual(\_SB.PC00.RP09.VDID,0xFFFFFFFF))
> +    {
> +      \_SB.PC00.RP09.HPME()
> +      Notify(\_SB.PC00.RP09, 0x02)
> +    }
> +
> +    If(LNotEqual(\_SB.PC00.RP10.VDID,0xFFFFFFFF))
> +    {
> +      \_SB.PC00.RP10.HPME()
> +      Notify(\_SB.PC00.RP10, 0x02)
> +    }
> +
> +    If(LNotEqual(\_SB.PC00.RP11.VDID,0xFFFFFFFF))
> +    {
> +      \_SB.PC00.RP11.HPME()
> +      Notify(\_SB.PC00.RP11, 0x02)
> +    }
> +
> +    If(LNotEqual(\_SB.PC00.RP12.VDID,0xFFFFFFFF))
> +    {
> +      \_SB.PC00.RP12.HPME()
> +      Notify(\_SB.PC00.RP12, 0x02)
> +    }
> +
> +    If(LNotEqual(\_SB.PC00.RP13.VDID,0xFFFFFFFF))
> +    {
> +      \_SB.PC00.RP13.HPME()
> +      Notify(\_SB.PC00.RP13, 0x02)
> +    }
> +
> +    If(LNotEqual(\_SB.PC00.RP14.VDID,0xFFFFFFFF))
> +    {
> +      \_SB.PC00.RP14.HPME()
> +      Notify(\_SB.PC00.RP14, 0x02)
> +    }
> +
> +    If(LNotEqual(\_SB.PC00.RP15.VDID,0xFFFFFFFF))
> +    {
> +      \_SB.PC00.RP15.HPME()
> +      Notify(\_SB.PC00.RP15, 0x02)
> +    }
> +
> +    If(LNotEqual(\_SB.PC00.RP16.VDID,0xFFFFFFFF))
> +    {
> +      \_SB.PC00.RP16.HPME()
> +      Notify(\_SB.PC00.RP16, 0x02)
> +    }
> +
> +    If(LNotEqual(\_SB.PC00.RP17.VDID,0xFFFFFFFF))
> +    {
> +      \_SB.PC00.RP17.HPME()
> +      Notify(\_SB.PC00.RP17, 0x02)
> +    }
> +
> +    If(LNotEqual(\_SB.PC00.RP18.VDID,0xFFFFFFFF))
> +    {
> +      \_SB.PC00.RP18.HPME()
> +      Notify(\_SB.PC00.RP18, 0x02)
> +    }
> +
> +    If(LNotEqual(\_SB.PC00.RP19.VDID,0xFFFFFFFF))
> +    {
> +      \_SB.PC00.RP19.HPME()
> +      Notify(\_SB.PC00.RP19, 0x02)
> +    }
> +
> +    If(LNotEqual(\_SB.PC00.RP20.VDID,0xFFFFFFFF))
> +    {
> +      \_SB.PC00.RP20.HPME()
> +      Notify(\_SB.PC00.RP20, 0x02)
> +    }
> diff --git
> a/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/Iio
> PcieEdpcGpe.asi
> b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/Iio
> PcieEdpcGpe.asi
> new file mode 100644
> index 0000000000..7180f6d607
> --- /dev/null
> +++
> b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/Iio
> PcieEdpcGpe.asi
> @@ -0,0 +1,16 @@
> +/** @file
> +
> +  @copyright
> +  Copyright 2001 - 2019 Intel Corporation. <BR>
> +
> +  SPDX-License-Identifier: BSD-2-Clause-Patent
> +**/
> +    External(\_SB.EDGH, MethodObj)
> +
> +    //
> +    //  Handle eDPC SWGPE event
> +    //
> +    If (CondRefOf (\_SB.EDGH))
> +    {
> +      \_SB.EDGH ()
> +    }
> diff --git
> a/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/Iio
> PcieEdpcNotify10nm.asi
> b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/Iio
> PcieEdpcNotify10nm.asi
> new file mode 100644
> index 0000000000..78759e32f3
> --- /dev/null
> +++
> b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/Iio
> PcieEdpcNotify10nm.asi
> @@ -0,0 +1,183 @@
> +/** @file
> +
> +  @copyright
> +  Copyright 2016 - 2019 Intel Corporation. <BR>
> +
> +  SPDX-License-Identifier: BSD-2-Clause-Patent
> +**/
> +External(\_SB.EDTM, MethodObj)
> +External (\_SB.EDNT, FieldUnitObj)
> +External (\_SB.EDVD, FieldUnitObj)
> +
> +#define PCIE_EDPC_NOTIFY(stack, port)                                                  \
> +  store (\_SB.stack._SEG, Local0)                                                      \
> +  store (\_SB.stack._BBN, Local1)                                                      \
> +  store (\_SB.stack.port._ADR, Local2)                                                 \
> +  And (Local2, 0xffff, Local3)                                                         \
> +  ShiftRight (Local2, 16, Local4)                                                      \
> +  If (\_SB.EDTM(Local0, Local1, Local4, Local3)) {                                     \
> +    If (\_SB.EDNT) {                                                                   \
> +      /*                                                                               \
> +       we are going to notify this device, set the valid flag to
> EDPC_INFO_NOTIFIED    \
> +      */                                                                               \
> +      store (2, \_SB.EDVD)                                                             \
> +      Notify(\_SB.stack.port, 0xf) /*Error Eject*/                                 \
> +    } else {                                                                           \
> +      /*                                                                               \
> +       we are going to notify this device, set the valid flag to
> EDPC_INFO_NOTIFIED    \
> +      */                                                                               \
> +      store (2, \_SB.EDVD)                                                             \
> +      Notify(\_SB.stack.port, 0)   /*Bus Check*/                                   \
> +    }                                                                                  \
> +  }
> +
> +Scope (\_SB) {
> +  //
> +  // eDPC Notify Method
> +  //
> +  Method (EDNM, 0) {
> +    // PC01 PCI-Ex eDPC
> +    // If this is the eDPC event trigger, notify error eject or bus check
> +    PCIE_EDPC_NOTIFY(PC01, BR1A)
> +    PCIE_EDPC_NOTIFY(PC01, BR1B)
> +    PCIE_EDPC_NOTIFY(PC01, BR1C)
> +    PCIE_EDPC_NOTIFY(PC01, BR1D)
> +
> +    // PC02 PCI-Ex eDPC
> +    // If this is the eDPC event trigger, notify error eject or bus check
> +    PCIE_EDPC_NOTIFY(PC02, BR2A)
> +    PCIE_EDPC_NOTIFY(PC02, BR2B)
> +    PCIE_EDPC_NOTIFY(PC02, BR2C)
> +    PCIE_EDPC_NOTIFY(PC02, BR2D)
> +
> +    // PC03  PCI-Ex eDPC
> +    // If this is the eDPC event trigger, notify error eject or bus check
> +    PCIE_EDPC_NOTIFY(PC03, BR3A)
> +    PCIE_EDPC_NOTIFY(PC03, BR3B)
> +    PCIE_EDPC_NOTIFY(PC03, BR3C)
> +    PCIE_EDPC_NOTIFY(PC03, BR3D)
> +
> +    // PC04  PCI-Ex eDPC
> +    // If this is the eDPC event trigger, notify error eject or bus check
> +    PCIE_EDPC_NOTIFY(PC04, BR4A)
> +    PCIE_EDPC_NOTIFY(PC04, BR4B)
> +    PCIE_EDPC_NOTIFY(PC04, BR4C)
> +    PCIE_EDPC_NOTIFY(PC04, BR4D)
> +
> +    // PC05  PCI-Ex eDPC
> +    // If this is the eDPC event trigger, notify error eject or bus check
> +    PCIE_EDPC_NOTIFY(PC05, BR5A)
> +    PCIE_EDPC_NOTIFY(PC05, BR5B)
> +    PCIE_EDPC_NOTIFY(PC05, BR5C)
> +    PCIE_EDPC_NOTIFY(PC05, BR5D)
> +
> +  #if MAX_SOCKET > 1
> +  // PC07 PCI-Ex eDPC
> +  // If this is the eDPC event trigger, notify error eject or bus check
> +    PCIE_EDPC_NOTIFY(PC07, QR1A)
> +    PCIE_EDPC_NOTIFY(PC07, QR1B)
> +    PCIE_EDPC_NOTIFY(PC07, QR1C)
> +    PCIE_EDPC_NOTIFY(PC07, QR1D)
> +
> +    // PC08 Port 2A PCI-Ex eDPC
> +    // If this is the eDPC event trigger, notify error eject or bus check
> +    PCIE_EDPC_NOTIFY(PC08, QR2A)
> +    PCIE_EDPC_NOTIFY(PC08, QR2B)
> +    PCIE_EDPC_NOTIFY(PC08, QR2C)
> +    PCIE_EDPC_NOTIFY(PC08, QR2D)
> +
> +    // PC09 PCI-Ex eDPC
> +    // If this is the eDPC event trigger, notify error eject or bus check
> +    PCIE_EDPC_NOTIFY(PC09, QR3A)
> +    PCIE_EDPC_NOTIFY(PC09, QR3B)
> +    PCIE_EDPC_NOTIFY(PC09, QR3C)
> +    PCIE_EDPC_NOTIFY(PC09, QR3D)
> +
> +    // PC08 Port 2A PCI-Ex eDPC
> +    // If this is the eDPC event trigger, notify error eject or bus check
> +    PCIE_EDPC_NOTIFY(PC10, QR4A)
> +    PCIE_EDPC_NOTIFY(PC10, QR4B)
> +    PCIE_EDPC_NOTIFY(PC10, QR4C)
> +    PCIE_EDPC_NOTIFY(PC10, QR4D)
> +
> +    // PC09 PCI-Ex eDPC
> +    // If this is the eDPC event trigger, notify error eject or bus check
> +    PCIE_EDPC_NOTIFY(PC11, QR5A)
> +    PCIE_EDPC_NOTIFY(PC11, QR5B)
> +    PCIE_EDPC_NOTIFY(PC11, QR5C)
> +    PCIE_EDPC_NOTIFY(PC11, QR5D)
> +  #endif
> +  #if MAX_SOCKET > 2
> +  // PC13 PCI-Ex eDPC
> +  // If this is the eDPC event trigger, notify error eject or bus check
> +    PCIE_EDPC_NOTIFY(PC13, RR1A)
> +    PCIE_EDPC_NOTIFY(PC13, RR1B)
> +    PCIE_EDPC_NOTIFY(PC13, RR1C)
> +    PCIE_EDPC_NOTIFY(PC13, RR1D)
> +
> +    // PC14 PCI-Ex eDPC
> +    // If this is the eDPC event trigger, notify error eject or bus check
> +    PCIE_EDPC_NOTIFY(PC14, RR2A)
> +    PCIE_EDPC_NOTIFY(PC14, RR2B)
> +    PCIE_EDPC_NOTIFY(PC14, RR2C)
> +    PCIE_EDPC_NOTIFY(PC14, RR2D)
> +
> +    // PC15 PCI-Ex eDPC
> +    // If this is the eDPC event trigger, notify error eject or bus check
> +    PCIE_EDPC_NOTIFY(PC15, RR3A)
> +    PCIE_EDPC_NOTIFY(PC15, RR3B)
> +    PCIE_EDPC_NOTIFY(PC15, RR3C)
> +    PCIE_EDPC_NOTIFY(PC15, RR3D)
> +
> +    // PC16 PCI-Ex eDPC
> +    // If this is the eDPC event trigger, notify error eject or bus check
> +    PCIE_EDPC_NOTIFY(PC16, RR4A)
> +    PCIE_EDPC_NOTIFY(PC16, RR4B)
> +    PCIE_EDPC_NOTIFY(PC16, RR4C)
> +    PCIE_EDPC_NOTIFY(PC16, RR4D)
> +
> +    // PC17 PCI-Ex eDPC
> +    // If this is the eDPC event trigger, notify error eject or bus check
> +    PCIE_EDPC_NOTIFY(PC17, RR5A)
> +    PCIE_EDPC_NOTIFY(PC17, RR5B)
> +    PCIE_EDPC_NOTIFY(PC17, RR5C)
> +    PCIE_EDPC_NOTIFY(PC17, RR5D)
> +  #endif
> +  #if MAX_SOCKET > 3
> +    // PC19 PCI-Ex eDPC
> +    // If this is the eDPC event trigger, notify error eject or bus check
> +    PCIE_EDPC_NOTIFY(PC19, SR1A)
> +    PCIE_EDPC_NOTIFY(PC19, SR1B)
> +    PCIE_EDPC_NOTIFY(PC19, SR1C)
> +    PCIE_EDPC_NOTIFY(PC19, SR1D)
> +
> +    // PC20 PCI-Ex eDPC
> +    // If this is the eDPC event trigger, notify error eject or bus check
> +    PCIE_EDPC_NOTIFY(PC20, SR2A)
> +    PCIE_EDPC_NOTIFY(PC20, SR2B)
> +    PCIE_EDPC_NOTIFY(PC20, SR2C)
> +    PCIE_EDPC_NOTIFY(PC20, SR2D)
> +
> +    // PC21 PCI-Ex eDPC
> +    // If this is the eDPC event trigger, notify error eject or bus check
> +    PCIE_EDPC_NOTIFY(PC21, SR3A)
> +    PCIE_EDPC_NOTIFY(PC21, SR3B)
> +    PCIE_EDPC_NOTIFY(PC21, SR3C)
> +    PCIE_EDPC_NOTIFY(PC21, SR3D)
> +
> +    // PC21 PCI-Ex eDPC
> +    // If this is the eDPC event trigger, notify error eject or bus check
> +    PCIE_EDPC_NOTIFY(PC22, SR4A)
> +    PCIE_EDPC_NOTIFY(PC22, SR4B)
> +    PCIE_EDPC_NOTIFY(PC22, SR4C)
> +    PCIE_EDPC_NOTIFY(PC22, SR4D)
> +
> +    // PC22 PCI-Ex eDPC
> +    // If this is the eDPC event trigger, notify error eject or bus check
> +    PCIE_EDPC_NOTIFY(PC23, SR5A)
> +    PCIE_EDPC_NOTIFY(PC23, SR5B)
> +    PCIE_EDPC_NOTIFY(PC23, SR5C)
> +    PCIE_EDPC_NOTIFY(PC23, SR5D)
> +  #endif
> +  } //endof the method EDGH
> +}
> diff --git
> a/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/Iio
> PcieEdpcOst.asi
> b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/Iio
> PcieEdpcOst.asi
> new file mode 100644
> index 0000000000..13c76067c3
> --- /dev/null
> +++
> b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/Iio
> PcieEdpcOst.asi
> @@ -0,0 +1,16 @@
> +/** @file
> +
> +  @copyright
> +  Copyright 2001 - 2019 Intel Corporation. <BR>
> +
> +  SPDX-License-Identifier: BSD-2-Clause-Patent
> +**/
> +    External(\_SB.EDOS, MethodObj)
> +
> +    //
> +    //  Handle eDPC _OST
> +    //
> +    If (CondRefOf (\_SB.EDOS))
> +    {
> +      \_SB.EDOS (Arg0, Arg1, Arg2)
> +    }
> diff --git
> a/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/Iio
> PcieHotPlugGpeHandler10nm.asl
> b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/Iio
> PcieHotPlugGpeHandler10nm.asl
> new file mode 100644
> index 0000000000..09ff73e148
> --- /dev/null
> +++
> b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/Iio
> PcieHotPlugGpeHandler10nm.asl
> @@ -0,0 +1,1322 @@
> +/** @file
> +
> +  @copyright
> +  Copyright 2019 Intel Corporation. <BR>
> +
> +  SPDX-License-Identifier: BSD-2-Clause-Patent
> +**/
> +
> +  //
> +  // Delay introduced as initial delay after entering ACPI hotplug method
> +  //
> +  Sleep (200)
> +  Store (0x01, IO80)
> +  Sleep (10)
> +  Store (0,Local1)
> +
> +  // PC00 Port 1A PCI-Ex Hot Plug
> +  // If PM_PME event clear INTs and AttnBtnPressed
> + If( LEqual(\_SB.PC01.BR1A.PMEP,1) ) {
> +    Store(\_SB.PC01.BR1A.PMEH(1), Local0)
> +  } else {
> +    Store (\_SB.PC01.BR1A.HPEH(1), Local0)
> +  }
> +  If(Lnot(LEqual(Local0,0xFF))) {
> +    Store(1, Local1)
> +    Notify(\_SB.PC01.BR1A, Local0)
> +  }
> +
> +  // PC00 Port 1B PCI-Ex Hot Plug
> +  // If PM_PME event clear INTs and AttnBtnPressed
> +  If( LEqual(\_SB.PC01.BR1B.PMEP,1) ) {
> +    Store(\_SB.PC01.BR1B.PMEH(2), Local0)
> +  } else {
> +    Store (\_SB.PC01.BR1B.HPEH(2), Local0)
> +  }
> +  If(Lnot(LEqual(Local0,0xFF))) {
> +    Store(2, Local1)
> +    Notify(\_SB.PC01.BR1B, Local0)
> +  }
> +
> +  // PC00 Port 1C PCI-Ex Hot Plug
> +  // If PM_PME event clear INTs and AttnBtnPressed
> +  If( LEqual(\_SB.PC01.BR1C.PMEP,1) ) {
> +    Store(\_SB.PC01.BR1C.PMEH(3), Local0)
> +  } else {
> +    Store (\_SB.PC01.BR1C.HPEH(3), Local0)
> +  }
> +  If(Lnot(LEqual(Local0,0xFF))) {
> +    Store(3, Local1)
> +    Notify(\_SB.PC01.BR1C, Local0)
> +  }
> +
> +  // PC00 Port 1D PCI-Ex Hot Plug
> +  // If PM_PME event clear INTs and AttnBtnPressed
> +  If( LEqual(\_SB.PC01.BR1D.PMEP,1) ) {
> +    Store(\_SB.PC01.BR1D.PMEH(4), Local0)
> +  } else {
> +    Store (\_SB.PC01.BR1D.HPEH(4), Local0)
> +  }
> +  If(Lnot(LEqual(Local0,0xFF))) {
> +    Store(4, Local1)
> +    Notify(\_SB.PC01.BR1D, Local0)
> +  }
> +
> +
> + // PC01 Port 2A PCI-Ex Hot Plug
> +  If( LEqual(\_SB.PC02.BR2A.PMEP,1) ) {
> +    Store(\_SB.PC02.BR2A.PMEH(5), Local0)
> +  } else {
> +    Store (\_SB.PC02.BR2A.HPEH(5), Local0)
> +  }
> +  If(Lnot(LEqual(Local0,0xFF))) {
> +    Store(5, Local1)
> +    Notify(\_SB.PC02.BR2A, Local0)
> +  }
> +
> +  // PC01 Port 2B PCI-Ex Hot Plug
> +  // If PM_PME event clear INTs and AttnBtnPressed
> +  If( LEqual(\_SB.PC02.BR2B.PMEP,1) ) {
> +    Store(\_SB.PC02.BR2B.PMEH(6), Local0)
> +  } else {
> +    Store (\_SB.PC02.BR2B.HPEH(6), Local0)
> +  }
> +  If(Lnot(LEqual(Local0,0xFF))) {
> +    Store(6, Local1)
> +    Notify(\_SB.PC02.BR2B, Local0)
> +  }
> +
> +  // PC01 Port 2C PCI-Ex Hot Plug
> +  // If PM_PME event clear INTs and AttnBtnPressed
> +  If( LEqual(\_SB.PC02.BR2C.PMEP,1) ) {
> +    Store(\_SB.PC02.BR2C.PMEH(7), Local0)
> +  } else {
> +    Store (\_SB.PC02.BR2C.HPEH(7), Local0)
> +  }
> +  If(Lnot(LEqual(Local0,0xFF))) {
> +    Store(7, Local1)
> +    Notify(\_SB.PC02.BR2C, Local0)
> +  }
> +
> +  // PC01 Port 2D PCI-Ex Hot Plug
> +  // If PM_PME event clear INTs and AttnBtnPressed
> +  If( LEqual(\_SB.PC02.BR2D.PMEP,1) ) {
> +    Store(\_SB.PC02.BR2D.PMEH(8), Local0)
> +  } else {
> +    Store (\_SB.PC02.BR2D.HPEH(8), Local0)
> +  }
> +  If(Lnot(LEqual(Local0,0xFF))) {
> +    Store(8, Local1)
> +    Notify(\_SB.PC02.BR2D, Local0)
> +  }
> +
> +  // PC01 Port 3A PCI-Ex Hot Plug
> +  // If PM_PME event clear INTs and AttnBtnPressed
> +  If( LEqual(\_SB.PC03.BR3A.PMEP,1) ) {
> +    Store(\_SB.PC03.BR3A.PMEH(9), Local0)
> +  } else {
> +    Store (\_SB.PC03.BR3A.HPEH(9), Local0)
> +  }
> +  If(Lnot(LEqual(Local0,0xFF))) {
> +    Store(9, Local1)
> +    Notify(\_SB.PC03.BR3A, Local0)
> +  }
> +
> +  // PC01 Port 3B PCI-Ex Hot Plug
> +  // If PM_PME event clear INTs and AttnBtnPressed
> +  If( LEqual(\_SB.PC03.BR3B.PMEP,1) ) {
> +    Store(\_SB.PC03.BR3B.PMEH(10), Local0)
> +  } else {
> +    Store (\_SB.PC03.BR3B.HPEH(10), Local0)
> +  }
> +  If(Lnot(LEqual(Local0,0xFF))) {
> +    Store(10, Local1)
> +    Notify(\_SB.PC03.BR3B, Local0)
> +  }
> +
> +  // PC01 Port 3C PCI-Ex Hot Plug
> +  // If PM_PME event clear INTs and AttnBtnPressed
> +  If( LEqual(\_SB.PC03.BR3C.PMEP,1) ) {
> +    Store(\_SB.PC03.BR3C.PMEH(11), Local0)
> +  } else {
> +    Store (\_SB.PC03.BR3C.HPEH(11), Local0)
> +  }
> +  If(Lnot(LEqual(Local0,0xFF))) {
> +    Store(11, Local1)
> +    Notify(\_SB.PC03.BR3C, Local0)
> +  }
> +
> +  // PC01 Port 3D PCI-Ex Hot Plug
> +  // If PM_PME event clear INTs and AttnBtnPressed
> +  If( LEqual(\_SB.PC03.BR3D.PMEP,1) ) {
> +    Store(\_SB.PC03.BR3D.PMEH(12), Local0)
> +  } else {
> +    Store (\_SB.PC03.BR3D.HPEH(12), Local0)
> +  }
> +  If(Lnot(LEqual(Local0,0xFF))) {
> +    Store(12, Local1)
> +    Notify(\_SB.PC03.BR3D, Local0)
> +  }
> +
> +  // PC02 Port 4A PCI-Ex Hot Plug
> +  // If PM_PME event clear INTs and AttnBtnPressed
> +  If( LEqual(\_SB.PC04.BR4A.PMEP,1) ) {
> +    Store(\_SB.PC04.BR4A.PMEH(13), Local0)
> +  } else {
> +    Store (\_SB.PC04.BR4A.HPEH(13), Local0)
> +  }
> +  If(Lnot(LEqual(Local0,0xFF))) {
> +    Store(13, Local1)
> +    Notify(\_SB.PC04.BR4A, Local0)
> +  }
> +
> +  // PC02 Port 4B PCI-Ex Hot Plug
> +  // If PM_PME event clear INTs and AttnBtnPressed
> +  If( LEqual(\_SB.PC04.BR4B.PMEP,1) ) {
> +    Store(\_SB.PC04.BR4B.PMEH(14), Local0)
> +  } else {
> +    Store (\_SB.PC04.BR4B.HPEH(14), Local0)
> +  }
> +  If(Lnot(LEqual(Local0,0xFF))) {
> +    Store(14, Local1)
> +    Notify(\_SB.PC04.BR4B, Local0)
> +  }
> +
> +  // PC02 Port 4C PCI-Ex Hot Plug
> +  // If PM_PME event clear INTs and AttnBtnPressed
> +  If( LEqual(\_SB.PC04.BR4C.PMEP,1) ) {
> +    Store(\_SB.PC04.BR4C.PMEH(15), Local0)
> +  } else {
> +    Store (\_SB.PC04.BR4C.HPEH(15), Local0)
> +  }
> +  If(Lnot(LEqual(Local0,0xFF))) {
> +    Store(15, Local1)
> +    Notify(\_SB.PC04.BR4C, Local0)
> +  }
> +
> +  // PC02 Port 4D PCI-Ex Hot Plug
> +  // If PM_PME event clear INTs and AttnBtnPressed
> +  If( LEqual(\_SB.PC04.BR4D.PMEP,1) ) {
> +    Store(\_SB.PC04.BR4D.PMEH(16), Local0)
> +  } else {
> +    Store (\_SB.PC04.BR4D.HPEH(16), Local0)
> +  }
> +  If(Lnot(LEqual(Local0,0xFF))) {
> +    Store(16, Local1)
> +    Notify(\_SB.PC04.BR4D, Local0)
> +  }
> +
> +  // PC02 Port 5A PCI-Ex Hot Plug
> +  // If PM_PME event clear INTs and AttnBtnPressed
> +  If( LEqual(\_SB.PC05.BR5A.PMEP,1) ) {
> +    Store(\_SB.PC05.BR5A.PMEH(17), Local0)
> +  } else {
> +    Store (\_SB.PC05.BR5A.HPEH(17), Local0)
> +  }
> +  If(Lnot(LEqual(Local0,0xFF))) {
> +    Store(17, Local1)
> +    Notify(\_SB.PC05.BR5A, Local0)
> +  }
> +
> +  // PC02 Port 5B PCI-Ex Hot Plug
> +  // If PM_PME event clear INTs and AttnBtnPressed
> +  If( LEqual(\_SB.PC05.BR5B.PMEP,1) ) {
> +    Store(\_SB.PC05.BR5B.PMEH(18), Local0)
> +  } else {
> +    Store (\_SB.PC05.BR5B.HPEH(18), Local0)
> +  }
> +  If(Lnot(LEqual(Local0,0xFF))) {
> +    Store(18, Local1)
> +    Notify(\_SB.PC05.BR5B, Local0)
> +  }
> +
> +  // PC02 Port 5C PCI-Ex Hot Plug
> +  // If PM_PME event clear INTs and AttnBtnPressed
> +  If( LEqual(\_SB.PC05.BR5C.PMEP,1) ) {
> +    Store(\_SB.PC05.BR5C.PMEH(19), Local0)
> +  } else {
> +    Store (\_SB.PC05.BR5C.HPEH(19), Local0)
> +  }
> +  If(Lnot(LEqual(Local0,0xFF))) {
> +    Store(19, Local1)
> +    Notify(\_SB.PC05.BR5C, Local0)
> +  }
> +
> +  // PC02 Port 5D PCI-Ex Hot Plug
> +  // If PM_PME event clear INTs and AttnBtnPressed
> +  If( LEqual(\_SB.PC05.BR5D.PMEP,1) ) {
> +    Store(\_SB.PC05.BR5D.PMEH(20), Local0)
> +  } else {
> +    Store (\_SB.PC05.BR5D.HPEH(20), Local0)
> +  }
> +  If(Lnot(LEqual(Local0,0xFF))) {
> +    Store(20, Local1)
> +    Notify(\_SB.PC05.BR5D, Local0)
> +  }
> +
> +#if MAX_SOCKET > 1
> +
> +
> + // PC06 Port 1A PCI-Ex Hot Plug
> + // If PM_PME event clear INTs and AttnBtnPressed
> + If( LEqual(\_SB.PC07.QR1A.PMEP,1) ) {
> +    Store(\_SB.PC07.QR1A.PMEH(1), Local0)
> +  } else {
> +    Store (\_SB.PC07.QR1A.HPEH(1), Local0)
> +  }
> +  If(Lnot(LEqual(Local0,0xFF))) {
> +    Store(1, Local1)
> +    Notify(\_SB.PC07.QR1A, Local0)
> +  }
> +
> +  // PC06 Port 1B PCI-Ex Hot Plug
> +  // If PM_PME event clear INTs and AttnBtnPressed
> +  If( LEqual(\_SB.PC07.QR1B.PMEP,1) ) {
> +    Store(\_SB.PC07.QR1B.PMEH(2), Local0)
> +  } else {
> +    Store (\_SB.PC07.QR1B.HPEH(2), Local0)
> +  }
> +  If(Lnot(LEqual(Local0,0xFF))) {
> +    Store(2, Local1)
> +    Notify(\_SB.PC07.QR1B, Local0)
> +  }
> +
> +  // PC06 Port 1C PCI-Ex Hot Plug
> +  // If PM_PME event clear INTs and AttnBtnPressed
> +  If( LEqual(\_SB.PC07.QR1C.PMEP,1) ) {
> +    Store(\_SB.PC07.QR1C.PMEH(3), Local0)
> +  } else {
> +    Store (\_SB.PC07.QR1C.HPEH(3), Local0)
> +  }
> +  If(Lnot(LEqual(Local0,0xFF))) {
> +    Store(3, Local1)
> +    Notify(\_SB.PC07.QR1C, Local0)
> +  }
> +
> +  // PC06 Port 1D PCI-Ex Hot Plug
> +  // If PM_PME event clear INTs and AttnBtnPressed
> +  If( LEqual(\_SB.PC07.QR1D.PMEP,1) ) {
> +    Store(\_SB.PC07.QR1D.PMEH(4), Local0)
> +  } else {
> +    Store (\_SB.PC07.QR1D.HPEH(4), Local0)
> +  }
> +  If(Lnot(LEqual(Local0,0xFF))) {
> +    Store(4, Local1)
> +    Notify(\_SB.PC07.QR1D, Local0)
> +  }
> +
> +  // PC04 Port 2A PCI-Ex Hot Plug
> +  // If PM_PME event clear INTs and AttnBtnPressed
> +  If( LEqual(\_SB.PC08.QR2A.PMEP,1) ) {
> +    Store(\_SB.PC08.QR2A.PMEH(5), Local0)
> +  } else {
> +    Store (\_SB.PC08.QR2A.HPEH(5), Local0)
> +  }
> +  If(Lnot(LEqual(Local0,0xFF))) {
> +    Store(5, Local1)
> +    Notify(\_SB.PC08.QR2A, Local0)
> +  }
> +
> +  // PC04 Port 2B PCI-Ex Hot Plug
> +  // If PM_PME event clear INTs and AttnBtnPressed
> +  If( LEqual(\_SB.PC08.QR2B.PMEP,1) ) {
> +    Store(\_SB.PC08.QR2B.PMEH(6), Local0)
> +  } else {
> +    Store (\_SB.PC08.QR2B.HPEH(6), Local0)
> +  }
> +  If(Lnot(LEqual(Local0,0xFF))) {
> +    Store(6, Local1)
> +    Notify(\_SB.PC08.QR2B, Local0)
> +  }
> +
> +  // PC04 Port 2C PCI-Ex Hot Plug
> +  // If PM_PME event clear INTs and AttnBtnPressed
> +  If( LEqual(\_SB.PC08.QR2C.PMEP,1) ) {
> +    Store(\_SB.PC08.QR2C.PMEH(7), Local0)
> +  } else {
> +    Store (\_SB.PC08.QR2C.HPEH(7), Local0)
> +  }
> +  If(Lnot(LEqual(Local0,0xFF))) {
> +    Store(7, Local1)
> +    Notify(\_SB.PC08.QR2C, Local0)
> +  }
> +
> +  // PC04 Port 2D PCI-Ex Hot Plug
> +  // If PM_PME event clear INTs and AttnBtnPressed
> +  If( LEqual(\_SB.PC08.QR2D.PMEP,1) ) {
> +    Store(\_SB.PC08.QR2D.PMEH(8), Local0)
> +  } else {
> +    Store (\_SB.PC08.QR2D.HPEH(8), Local0)
> +  }
> +  If(Lnot(LEqual(Local0,0xFF))) {
> +    Store(8, Local1)
> +    Notify(\_SB.PC08.QR2D, Local0)
> +  }
> +
> +  // PC04 Port 3A PCI-Ex Hot Plug
> +  // If PM_PME event clear INTs and AttnBtnPressed
> +  If( LEqual(\_SB.PC09.QR3A.PMEP,1) ) {
> +    Store(\_SB.PC09.QR3A.PMEH(9), Local0)
> +  } else {
> +    Store (\_SB.PC09.QR3A.HPEH(9), Local0)
> +  }
> +  If(Lnot(LEqual(Local0,0xFF))) {
> +    Store(9, Local1)
> +    Notify(\_SB.PC09.QR3A, Local0)
> +  }
> +
> +  // PC04 Port 3B PCI-Ex Hot Plug
> +  // If PM_PME event clear INTs and AttnBtnPressed
> +  If( LEqual(\_SB.PC09.QR3B.PMEP,1) ) {
> +    Store(\_SB.PC09.QR3B.PMEH(10), Local0)
> +  } else {
> +    Store (\_SB.PC09.QR3B.HPEH(10), Local0)
> +  }
> +  If(Lnot(LEqual(Local0,0xFF))) {
> +    Store(10, Local1)
> +    Notify(\_SB.PC09.QR3B, Local0)
> +  }
> +
> +  // PC04 Port 3C PCI-Ex Hot Plug
> +  // If PM_PME event clear INTs and AttnBtnPressed
> +  If( LEqual(\_SB.PC09.QR3C.PMEP,1) ) {
> +    Store(\_SB.PC09.QR3C.PMEH(11), Local0)
> +  } else {
> +    Store (\_SB.PC09.QR3C.HPEH(11), Local0)
> +  }
> +  If(Lnot(LEqual(Local0,0xFF))) {
> +    Store(11, Local1)
> +    Notify(\_SB.PC09.QR3C, Local0)
> +  }
> +
> +  // PC04 Port 3D PCI-Ex Hot Plug
> +  // If PM_PME event clear INTs and AttnBtnPressed
> +  If( LEqual(\_SB.PC09.QR3D.PMEP,1) ) {
> +    Store(\_SB.PC09.QR3D.PMEH(12), Local0)
> +  } else {
> +    Store (\_SB.PC09.QR3D.HPEH(12), Local0)
> +  }
> +  If(Lnot(LEqual(Local0,0xFF))) {
> +    Store(12, Local1)
> +    Notify(\_SB.PC09.QR3D, Local0)
> +  }
> +
> +  // PC10 Port 4A PCI-Ex Hot Plug
> +  // If PM_PME event clear INTs and AttnBtnPressed
> +  If( LEqual(\_SB.PC10.QR4A.PMEP,1) ) {
> +    Store(\_SB.PC10.QR4A.PMEH(13), Local0)
> +  } else {
> +    Store (\_SB.PC10.QR4A.HPEH(13), Local0)
> +  }
> +  If(Lnot(LEqual(Local0,0xFF))) {
> +    Store(13, Local1)
> +    Notify(\_SB.PC10.QR4A, Local0)
> +  }
> +
> +  // PC10 Port 4B PCI-Ex Hot Plug
> +  // If PM_PME event clear INTs and AttnBtnPressed
> +  If( LEqual(\_SB.PC10.QR4B.PMEP,1) ) {
> +    Store(\_SB.PC10.QR4B.PMEH(14), Local0)
> +  } else {
> +    Store (\_SB.PC10.QR4B.HPEH(14), Local0)
> +  }
> +  If(Lnot(LEqual(Local0,0xFF))) {
> +    Store(14, Local1)
> +    Notify(\_SB.PC10.QR4B, Local0)
> +  }
> +
> +  // PC10 Port 4C PCI-Ex Hot Plug
> +  // If PM_PME event clear INTs and AttnBtnPressed
> +  If( LEqual(\_SB.PC10.QR4C.PMEP,1) ) {
> +    Store(\_SB.PC10.QR4C.PMEH(15), Local0)
> +  } else {
> +    Store (\_SB.PC10.QR4C.HPEH(15), Local0)
> +  }
> +  If(Lnot(LEqual(Local0,0xFF))) {
> +    Store(15, Local1)
> +    Notify(\_SB.PC10.QR4C, Local0)
> +  }
> +
> +  // PC10 Port 4D PCI-Ex Hot Plug
> +  // If PM_PME event clear INTs and AttnBtnPressed
> +  If( LEqual(\_SB.PC10.QR4D.PMEP,1) ) {
> +    Store(\_SB.PC10.QR4D.PMEH(16), Local0)
> +  } else {
> +    Store (\_SB.PC10.QR4D.HPEH(16), Local0)
> +  }
> +  If(Lnot(LEqual(Local0,0xFF))) {
> +    Store(16, Local1)
> +    Notify(\_SB.PC10.QR4D, Local0)
> +  }
> +
> +  // PC10 Port 5A PCI-Ex Hot Plug
> +  // If PM_PME event clear INTs and AttnBtnPressed
> +  If( LEqual(\_SB.PC11.QR5A.PMEP,1) ) {
> +    Store(\_SB.PC11.QR5A.PMEH(17), Local0)
> +  } else {
> +    Store (\_SB.PC11.QR5A.HPEH(17), Local0)
> +  }
> +  If(Lnot(LEqual(Local0,0xFF))) {
> +    Store(17, Local1)
> +    Notify(\_SB.PC11.QR5A, Local0)
> +  }
> +
> +  // PC10 Port 5B PCI-Ex Hot Plug
> +  // If PM_PME event clear INTs and AttnBtnPressed
> +  If( LEqual(\_SB.PC11.QR5B.PMEP,1) ) {
> +    Store(\_SB.PC11.QR5B.PMEH(18), Local0)
> +  } else {
> +    Store (\_SB.PC11.QR5B.HPEH(18), Local0)
> +  }
> +  If(Lnot(LEqual(Local0,0xFF))) {
> +    Store(18, Local1)
> +    Notify(\_SB.PC11.QR5B, Local0)
> +  }
> +
> +  // PC10 Port 5C PCI-Ex Hot Plug
> +  // If PM_PME event clear INTs and AttnBtnPressed
> +  If( LEqual(\_SB.PC11.QR5C.PMEP,1) ) {
> +    Store(\_SB.PC11.QR5C.PMEH(19), Local0)
> +  } else {
> +    Store (\_SB.PC11.QR5C.HPEH(19), Local0)
> +  }
> +  If(Lnot(LEqual(Local0,0xFF))) {
> +    Store(19, Local1)
> +    Notify(\_SB.PC11.QR5C, Local0)
> +  }
> +
> +  // PC10 Port 5D PCI-Ex Hot Plug
> +  // If PM_PME event clear INTs and AttnBtnPressed
> +  If( LEqual(\_SB.PC11.QR5D.PMEP,1) ) {
> +    Store(\_SB.PC11.QR5D.PMEH(20), Local0)
> +  } else {
> +    Store (\_SB.PC11.QR5D.HPEH(20), Local0)
> +  }
> +  If(Lnot(LEqual(Local0,0xFF))) {
> +    Store(20, Local1)
> +    Notify(\_SB.PC11.QR5D, Local0)
> +  }
> +#endif
> +#if MAX_SOCKET > 2
> +
> + // PC06 Port 1A PCI-Ex Hot Plug
> + // If PM_PME event clear INTs and AttnBtnPressed
> + If( LEqual(\_SB.PC13.RR1A.PMEP,1) ) {
> +    Store(\_SB.PC13.RR1A.PMEH(1), Local0)
> +  } else {
> +    Store (\_SB.PC13.RR1A.HPEH(1), Local0)
> +  }
> +  If(Lnot(LEqual(Local0,0xFF))) {
> +    Store(1, Local1)
> +    Notify(\_SB.PC13.RR1A, Local0)
> +  }
> +
> +  // PC06 Port 1B PCI-Ex Hot Plug
> +  // If PM_PME event clear INTs and AttnBtnPressed
> +  If( LEqual(\_SB.PC13.RR1B.PMEP,1) ) {
> +    Store(\_SB.PC13.RR1B.PMEH(2), Local0)
> +  } else {
> +    Store (\_SB.PC13.RR1B.HPEH(2), Local0)
> +  }
> +  If(Lnot(LEqual(Local0,0xFF))) {
> +    Store(2, Local1)
> +    Notify(\_SB.PC13.RR1B, Local0)
> +  }
> +
> +  // PC06 Port 1C PCI-Ex Hot Plug
> +  // If PM_PME event clear INTs and AttnBtnPressed
> +  If( LEqual(\_SB.PC13.RR1C.PMEP,1) ) {
> +    Store(\_SB.PC13.RR1C.PMEH(3), Local0)
> +  } else {
> +    Store (\_SB.PC13.RR1C.HPEH(3), Local0)
> +  }
> +  If(Lnot(LEqual(Local0,0xFF))) {
> +    Store(3, Local1)
> +    Notify(\_SB.PC13.RR1C, Local0)
> +  }
> +
> +  // PC06 Port 1D PCI-Ex Hot Plug
> +  // If PM_PME event clear INTs and AttnBtnPressed
> +  If( LEqual(\_SB.PC13.RR1D.PMEP,1) ) {
> +    Store(\_SB.PC13.RR1D.PMEH(4), Local0)
> +  } else {
> +    Store (\_SB.PC13.RR1D.HPEH(4), Local0)
> +  }
> +  If(Lnot(LEqual(Local0,0xFF))) {
> +    Store(4, Local1)
> +    Notify(\_SB.PC13.RR1D, Local0)
> +  }
> +
> +  // PC07 Port 2A PCI-Ex Hot Plug
> +  // If PM_PME event clear INTs and AttnBtnPressed
> +  If( LEqual(\_SB.PC14.RR2A.PMEP,1) ) {
> +    Store(\_SB.PC14.RR2A.PMEH(5), Local0)
> +  } else {
> +    Store (\_SB.PC14.RR2A.HPEH(5), Local0)
> +  }
> +  If(Lnot(LEqual(Local0,0xFF))) {
> +    Store(5, Local1)
> +    Notify(\_SB.PC14.RR2A, Local0)
> +  }
> +
> +  // PC07 Port 2B PCI-Ex Hot Plug
> +  // If PM_PME event clear INTs and AttnBtnPressed
> +  If( LEqual(\_SB.PC14.RR2B.PMEP,1) ) {
> +    Store(\_SB.PC14.RR2B.PMEH(6), Local0)
> +  } else {
> +    Store (\_SB.PC14.RR2B.HPEH(6), Local0)
> +  }
> +  If(Lnot(LEqual(Local0,0xFF))) {
> +    Store(6, Local1)
> +    Notify(\_SB.PC14.RR2B, Local0)
> +  }
> +
> +  // PC07 Port 2C PCI-Ex Hot Plug
> +  // If PM_PME event clear INTs and AttnBtnPressed
> +  If( LEqual(\_SB.PC14.RR2C.PMEP,1) ) {
> +    Store(\_SB.PC14.RR2C.PMEH(7), Local0)
> +  } else {
> +    Store (\_SB.PC14.RR2C.HPEH(7), Local0)
> +  }
> +  If(Lnot(LEqual(Local0,0xFF))) {
> +    Store(7, Local1)
> +    Notify(\_SB.PC14.RR2C, Local0)
> +  }
> +
> +  // PC07 Port 2D PCI-Ex Hot Plug
> +  // If PM_PME event clear INTs and AttnBtnPressed
> +  If( LEqual(\_SB.PC14.RR2D.PMEP,1) ) {
> +    Store(\_SB.PC14.RR2D.PMEH(8), Local0)
> +  } else {
> +    Store (\_SB.PC14.RR2D.HPEH(8), Local0)
> +  }
> +  If(Lnot(LEqual(Local0,0xFF))) {
> +    Store(8, Local1)
> +    Notify(\_SB.PC14.RR2D, Local0)
> +  }
> +
> +  // PC07 Port 3A PCI-Ex Hot Plug
> +  // If PM_PME event clear INTs and AttnBtnPressed
> +  If( LEqual(\_SB.PC15.RR3A.PMEP,1) ) {
> +    Store(\_SB.PC15.RR3A.PMEH(9), Local0)
> +  } else {
> +    Store (\_SB.PC15.RR3A.HPEH(9), Local0)
> +  }
> +  If(Lnot(LEqual(Local0,0xFF))) {
> +    Store(9, Local1)
> +    Notify(\_SB.PC15.RR3A, Local0)
> +  }
> +
> +  // PC07 Port 3B PCI-Ex Hot Plug
> +  // If PM_PME event clear INTs and AttnBtnPressed
> +  If( LEqual(\_SB.PC15.RR3B.PMEP,1) ) {
> +    Store(\_SB.PC15.RR3B.PMEH(10), Local0)
> +  } else {
> +    Store (\_SB.PC15.RR3B.HPEH(10), Local0)
> +  }
> +  If(Lnot(LEqual(Local0,0xFF))) {
> +    Store(10, Local1)
> +    Notify(\_SB.PC15.RR3B, Local0)
> +  }
> +
> +  // PC07 Port 3C PCI-Ex Hot Plug
> +  // If PM_PME event clear INTs and AttnBtnPressed
> +  If( LEqual(\_SB.PC15.RR3C.PMEP,1) ) {
> +    Store(\_SB.PC15.RR3C.PMEH(11), Local0)
> +  } else {
> +    Store (\_SB.PC15.RR3C.HPEH(11), Local0)
> +  }
> +  If(Lnot(LEqual(Local0,0xFF))) {
> +    Store(11, Local1)
> +    Notify(\_SB.PC15.RR3C, Local0)
> +  }
> +
> +  // PC07 Port 3D PCI-Ex Hot Plug
> +  // If PM_PME event clear INTs and AttnBtnPressed
> +  If( LEqual(\_SB.PC15.RR3D.PMEP,1) ) {
> +    Store(\_SB.PC15.RR3D.PMEH(12), Local0)
> +  } else {
> +    Store (\_SB.PC15.RR3D.HPEH(12), Local0)
> +  }
> +  If(Lnot(LEqual(Local0,0xFF))) {
> +    Store(12, Local1)
> +    Notify(\_SB.PC15.RR3D, Local0)
> +  }
> +
> +  // PC08 Port 4A PCI-Ex Hot Plug
> +  // If PM_PME event clear INTs and AttnBtnPressed
> +  If( LEqual(\_SB.PC16.RR4A.PMEP,1) ) {
> +    Store(\_SB.PC16.RR4A.PMEH(13), Local0)
> +  } else {
> +    Store (\_SB.PC16.RR4A.HPEH(13), Local0)
> +  }
> +  If(Lnot(LEqual(Local0,0xFF))) {
> +    Store(13, Local1)
> +    Notify(\_SB.PC16.RR4A, Local0)
> +  }
> +
> +  // PC08 Port 4B PCI-Ex Hot Plug
> +  // If PM_PME event clear INTs and AttnBtnPressed
> +  If( LEqual(\_SB.PC16.RR4B.PMEP,1) ) {
> +    Store(\_SB.PC16.RR4B.PMEH(14), Local0)
> +  } else {
> +    Store (\_SB.PC16.RR4B.HPEH(14), Local0)
> +  }
> +  If(Lnot(LEqual(Local0,0xFF))) {
> +    Store(14, Local1)
> +    Notify(\_SB.PC16.RR4B, Local0)
> +  }
> +
> +  // PC08 Port 4C PCI-Ex Hot Plug
> +  // If PM_PME event clear INTs and AttnBtnPressed
> +  If( LEqual(\_SB.PC16.RR4C.PMEP,1) ) {
> +    Store(\_SB.PC16.RR4C.PMEH(15), Local0)
> +  } else {
> +    Store (\_SB.PC16.RR4C.HPEH(15), Local0)
> +  }
> +  If(Lnot(LEqual(Local0,0xFF))) {
> +    Store(15, Local1)
> +    Notify(\_SB.PC16.RR4C, Local0)
> +  }
> +
> +  // PC08 Port 4D PCI-Ex Hot Plug
> +  // If PM_PME event clear INTs and AttnBtnPressed
> +  If( LEqual(\_SB.PC16.RR4D.PMEP,1) ) {
> +    Store(\_SB.PC16.RR4D.PMEH(16), Local0)
> +  } else {
> +    Store (\_SB.PC16.RR4D.HPEH(16), Local0)
> +  }
> +  If(Lnot(LEqual(Local0,0xFF))) {
> +    Store(16, Local1)
> +    Notify(\_SB.PC16.RR4D, Local0)
> +  }
> +
> +  // PC08 Port 5A PCI-Ex Hot Plug
> +  // If PM_PME event clear INTs and AttnBtnPressed
> +  If( LEqual(\_SB.PC17.RR5A.PMEP,1) ) {
> +    Store(\_SB.PC17.RR5A.PMEH(17), Local0)
> +  } else {
> +    Store (\_SB.PC17.RR5A.HPEH(17), Local0)
> +  }
> +  If(Lnot(LEqual(Local0,0xFF))) {
> +    Store(17, Local1)
> +    Notify(\_SB.PC17.RR5A, Local0)
> +  }
> +
> +  // PC08 Port 5B PCI-Ex Hot Plug
> +  // If PM_PME event clear INTs and AttnBtnPressed
> +  If( LEqual(\_SB.PC17.RR5B.PMEP,1) ) {
> +    Store(\_SB.PC17.RR5B.PMEH(18), Local0)
> +  } else {
> +    Store (\_SB.PC17.RR5B.HPEH(18), Local0)
> +  }
> +  If(Lnot(LEqual(Local0,0xFF))) {
> +    Store(18, Local1)
> +    Notify(\_SB.PC17.RR5B, Local0)
> +  }
> +
> +  // PC08 Port 5C PCI-Ex Hot Plug
> +  // If PM_PME event clear INTs and AttnBtnPressed
> +  If( LEqual(\_SB.PC17.RR5C.PMEP,1) ) {
> +    Store(\_SB.PC17.RR5C.PMEH(19), Local0)
> +  } else {
> +    Store (\_SB.PC17.RR5C.HPEH(19), Local0)
> +  }
> +  If(Lnot(LEqual(Local0,0xFF))) {
> +    Store(19, Local1)
> +    Notify(\_SB.PC17.RR5C, Local0)
> +  }
> +
> +  // PC08 Port 5D PCI-Ex Hot Plug
> +  // If PM_PME event clear INTs and AttnBtnPressed
> +  If( LEqual(\_SB.PC17.RR5D.PMEP,1) ) {
> +    Store(\_SB.PC17.RR5D.PMEH(20), Local0)
> +  } else {
> +    Store (\_SB.PC17.RR5D.HPEH(20), Local0)
> +  }
> +  If(Lnot(LEqual(Local0,0xFF))) {
> +    Store(20, Local1)
> +    Notify(\_SB.PC17.RR5D, Local0)
> +  }
> +#endif
> +#if MAX_SOCKET > 3
> +
> +
> +  // PC09 Port 1A PCI-Ex Hot Plug
> +  // If PM_PME event clear INTs and AttnBtnPressed
> +  If( LEqual(\_SB.PC19.SR1A.PMEP,1) ) {
> +    Store(\_SB.PC19.SR1A.PMEH(1), Local0)
> +  } else {
> +    Store (\_SB.PC19.SR1A.HPEH(1), Local0)
> +  }
> +  If(Lnot(LEqual(Local0,0xFF))) {
> +    Store(1, Local1)
> +    Notify(\_SB.PC19.SR1A, Local0)
> +  }
> +
> +  // PC09 Port 1B PCI-Ex Hot Plug
> +  // If PM_PME event clear INTs and AttnBtnPressed
> +  If( LEqual(\_SB.PC19.SR1B.PMEP,1) ) {
> +    Store(\_SB.PC19.SR1B.PMEH(2), Local0)
> +  } else {
> +    Store (\_SB.PC19.SR1B.HPEH(2), Local0)
> +  }
> +  If(Lnot(LEqual(Local0,0xFF))) {
> +    Store(2, Local1)
> +    Notify(\_SB.PC19.SR1B, Local0)
> +  }
> +
> +  // PC09 Port 1C PCI-Ex Hot Plug
> +  // If PM_PME event clear INTs and AttnBtnPressed
> +  If( LEqual(\_SB.PC19.SR1C.PMEP,1) ) {
> +    Store(\_SB.PC19.SR1C.PMEH(3), Local0)
> +  } else {
> +    Store (\_SB.PC19.SR1C.HPEH(3), Local0)
> +  }
> +  If(Lnot(LEqual(Local0,0xFF))) {
> +    Store(3, Local1)
> +    Notify(\_SB.PC19.SR1C, Local0)
> +  }
> +
> +  // PC09 Port 1D PCI-Ex Hot Plug
> +  // If PM_PME event clear INTs and AttnBtnPressed
> +  If( LEqual(\_SB.PC19.SR1D.PMEP,1) ) {
> +    Store(\_SB.PC19.SR1D.PMEH(4), Local0)
> +  } else {
> +    Store (\_SB.PC19.SR1D.HPEH(4), Local0)
> +  }
> +  If(Lnot(LEqual(Local0,0xFF))) {
> +    Store(4, Local1)
> +    Notify(\_SB.PC19.SR1D, Local0)
> +  }
> +
> +  // PC10 Port 2A PCI-Ex Hot Plug
> +  // If PM_PME event clear INTs and AttnBtnPressed
> +  If( LEqual(\_SB.PC20.SR2A.PMEP,1) ) {
> +    Store(\_SB.PC20.SR2A.PMEH(5), Local0)
> +  } else {
> +    Store (\_SB.PC20.SR2A.HPEH(5), Local0)
> +  }
> +  If(Lnot(LEqual(Local0,0xFF))) {
> +    Store(5, Local1)
> +    Notify(\_SB.PC20.SR2A, Local0)
> +  }
> +
> +  // PC10 Port 2B PCI-Ex Hot Plug
> +  // If PM_PME event clear INTs and AttnBtnPressed
> +  If( LEqual(\_SB.PC20.SR2B.PMEP,1) ) {
> +    Store(\_SB.PC20.SR2B.PMEH(6), Local0)
> +  } else {
> +    Store (\_SB.PC20.SR2B.HPEH(6), Local0)
> +  }
> +  If(Lnot(LEqual(Local0,0xFF))) {
> +    Store(6, Local1)
> +    Notify(\_SB.PC20.SR2B, Local0)
> +  }
> +
> +  // PC10 Port 2C PCI-Ex Hot Plug
> +  // If PM_PME event clear INTs and AttnBtnPressed
> +  If( LEqual(\_SB.PC20.SR2C.PMEP,1) ) {
> +    Store(\_SB.PC20.SR2C.PMEH(7), Local0)
> +  } else {
> +    Store (\_SB.PC20.SR2C.HPEH(7), Local0)
> +  }
> +  If(Lnot(LEqual(Local0,0xFF))) {
> +    Store(7, Local1)
> +    Notify(\_SB.PC20.SR2C, Local0)
> +  }
> +
> +  // PC10 Port 2D PCI-Ex Hot Plug
> +  // If PM_PME event clear INTs and AttnBtnPressed
> +  If( LEqual(\_SB.PC20.SR2D.PMEP,1) ) {
> +    Store(\_SB.PC20.SR2D.PMEH(8), Local0)
> +  } else {
> +    Store (\_SB.PC20.SR2D.HPEH(8), Local0)
> +  }
> +  If(Lnot(LEqual(Local0,0xFF))) {
> +    Store(8, Local1)
> +    Notify(\_SB.PC20.SR2D, Local0)
> +  }
> +
> +  // PC10 Port 3A PCI-Ex Hot Plug
> +  // If PM_PME event clear INTs and AttnBtnPressed
> +  If( LEqual(\_SB.PC21.SR3A.PMEP,1) ) {
> +    Store(\_SB.PC21.SR3A.PMEH(9), Local0)
> +  } else {
> +    Store (\_SB.PC21.SR3A.HPEH(9), Local0)
> +  }
> +  If(Lnot(LEqual(Local0,0xFF))) {
> +    Store(9, Local1)
> +    Notify(\_SB.PC21.SR3A, Local0)
> +  }
> +
> +  // PC10 Port 3B PCI-Ex Hot Plug
> +  // If PM_PME event clear INTs and AttnBtnPressed
> +  If( LEqual(\_SB.PC21.SR3B.PMEP,1) ) {
> +    Store(\_SB.PC21.SR3B.PMEH(10), Local0)
> +  } else {
> +    Store (\_SB.PC21.SR3B.HPEH(10), Local0)
> +  }
> +  If(Lnot(LEqual(Local0,0xFF))) {
> +    Store(10, Local1)
> +    Notify(\_SB.PC21.SR3B, Local0)
> +  }
> +
> +  // PC10 Port 3C PCI-Ex Hot Plug
> +  // If PM_PME event clear INTs and AttnBtnPressed
> +  If( LEqual(\_SB.PC21.SR3C.PMEP,1) ) {
> +    Store(\_SB.PC21.SR3C.PMEH(11), Local0)
> +  } else {
> +    Store (\_SB.PC21.SR3C.HPEH(11), Local0)
> +  }
> +  If(Lnot(LEqual(Local0,0xFF))) {
> +    Store(11, Local1)
> +    Notify(\_SB.PC21.SR3C, Local0)
> +  }
> +
> +  // PC10 Port 3D PCI-Ex Hot Plug
> +  // If PM_PME event clear INTs and AttnBtnPressed
> +  If( LEqual(\_SB.PC21.SR3D.PMEP,1) ) {
> +    Store(\_SB.PC21.SR3D.PMEH(12), Local0)
> +  } else {
> +    Store (\_SB.PC21.SR3D.HPEH(12), Local0)
> +  }
> +  If(Lnot(LEqual(Local0,0xFF))) {
> +    Store(12, Local1)
> +    Notify(\_SB.PC21.SR3D, Local0)
> +  }
> +
> +  // PC11 Port 4A PCI-Ex Hot Plug
> +  // If PM_PME event clear INTs and AttnBtnPressed
> +  If( LEqual(\_SB.PC22.SR4A.PMEP,1) ) {
> +    Store(\_SB.PC22.SR4A.PMEH(13), Local0)
> +  } else {
> +    Store (\_SB.PC22.SR4A.HPEH(13), Local0)
> +  }
> +  If(Lnot(LEqual(Local0,0xFF))) {
> +    Store(13, Local1)
> +    Notify(\_SB.PC22.SR4A, Local0)
> +  }
> +
> +  // PC11 Port 4B PCI-Ex Hot Plug
> +  // If PM_PME event clear INTs and AttnBtnPressed
> +  If( LEqual(\_SB.PC22.SR4B.PMEP,1) ) {
> +    Store(\_SB.PC22.SR4B.PMEH(14), Local0)
> +  } else {
> +    Store (\_SB.PC22.SR4B.HPEH(14), Local0)
> +  }
> +  If(Lnot(LEqual(Local0,0xFF))) {
> +    Store(14, Local1)
> +    Notify(\_SB.PC22.SR4B, Local0)
> +  }
> +
> +  // PC11 Port 4C PCI-Ex Hot Plug
> +  // If PM_PME event clear INTs and AttnBtnPressed
> +  If( LEqual(\_SB.PC22.SR4C.PMEP,1) ) {
> +    Store(\_SB.PC22.SR4C.PMEH(15), Local0)
> +  } else {
> +    Store (\_SB.PC22.SR4C.HPEH(15), Local0)
> +  }
> +  If(Lnot(LEqual(Local0,0xFF))) {
> +    Store(15, Local1)
> +    Notify(\_SB.PC22.SR4C, Local0)
> +  }
> +
> +  // PC11 Port 4D PCI-Ex Hot Plug
> +  // If PM_PME event clear INTs and AttnBtnPressed
> +  If( LEqual(\_SB.PC22.SR4D.PMEP,1) ) {
> +    Store(\_SB.PC22.SR4D.PMEH(16), Local0)
> +  } else {
> +    Store (\_SB.PC22.SR4D.HPEH(16), Local0)
> +  }
> +  If(Lnot(LEqual(Local0,0xFF))) {
> +    Store(16, Local1)
> +    Notify(\_SB.PC22.SR4D, Local0)
> +  }
> +
> +  // PC11 Port 5A PCI-Ex Hot Plug
> +  // If PM_PME event clear INTs and AttnBtnPressed
> +  If( LEqual(\_SB.PC23.SR5A.PMEP,1) ) {
> +    Store(\_SB.PC23.SR5A.PMEH(17), Local0)
> +  } else {
> +    Store (\_SB.PC23.SR5A.HPEH(17), Local0)
> +  }
> +  If(Lnot(LEqual(Local0,0xFF))) {
> +    Store(17, Local1)
> +    Notify(\_SB.PC23.SR5A, Local0)
> +  }
> +
> +  // PC11 Port 5B PCI-Ex Hot Plug
> +  // If PM_PME event clear INTs and AttnBtnPressed
> +  If( LEqual(\_SB.PC23.SR5B.PMEP,1) ) {
> +    Store(\_SB.PC23.SR5B.PMEH(18), Local0)
> +  } else {
> +    Store (\_SB.PC23.SR5B.HPEH(18), Local0)
> +  }
> +  If(Lnot(LEqual(Local0,0xFF))) {
> +    Store(18, Local1)
> +    Notify(\_SB.PC23.SR5B, Local0)
> +  }
> +
> +  // PC11 Port 5C PCI-Ex Hot Plug
> +  // If PM_PME event clear INTs and AttnBtnPressed
> +  If( LEqual(\_SB.PC23.SR5C.PMEP,1) ) {
> +    Store(\_SB.PC23.SR5C.PMEH(19), Local0)
> +  } else {
> +    Store (\_SB.PC23.SR5C.HPEH(19), Local0)
> +  }
> +  If(Lnot(LEqual(Local0,0xFF))) {
> +    Store(19, Local1)
> +    Notify(\_SB.PC23.SR5C, Local0)
> +  }
> +
> +  // PC11 Port 5D PCI-Ex Hot Plug
> +  // If PM_PME event clear INTs and AttnBtnPressed
> +  If( LEqual(\_SB.PC23.SR5D.PMEP,1) ) {
> +    Store(\_SB.PC23.SR5D.PMEH(20), Local0)
> +  } else {
> +    Store (\_SB.PC23.SR5D.HPEH(20), Local0)
> +  }
> +  If(Lnot(LEqual(Local0,0xFF))) {
> +    Store(20, Local1)
> +    Notify(\_SB.PC23.SR5D, Local0)
> +  }
> +#endif
> +
> +  //If a hotplug event was serviced check if this was generated by PM_PME
> +  If (Lnot (LEqual(Local0, 0))) {
> +    //Clear the status bit 16 of PMEStatus
> +    //Clear the PME Pending bit 17 of PMEStatus
> +    If( LEqual(Local1, 1)) {
> +      Store(1, \_SB.PC01.BR1A.PMES)
> +      Store(1, \_SB.PC01.BR1A.PMEP)
> +    }
> +    If( LEqual(Local1, 2)) {
> +      Store(1, \_SB.PC01.BR1B.PMES)
> +      Store(1, \_SB.PC01.BR1B.PMEP)
> +    }
> +    If( LEqual(Local1, 3)) {
> +      Store(1, \_SB.PC01.BR1C.PMES)
> +      Store(1, \_SB.PC01.BR1C.PMEP)
> +    }
> +    If( LEqual(Local1, 4)) {
> +      Store(1, \_SB.PC01.BR1D.PMES)
> +      Store(1, \_SB.PC01.BR1D.PMEP)
> +    }
> +
> +    If( LEqual(Local1, 5)) {
> +      Store(1, \_SB.PC02.BR2A.PMES)
> +      Store(1, \_SB.PC02.BR2A.PMEP)
> +    }
> +    If( LEqual(Local1, 6)) {
> +      Store(1, \_SB.PC02.BR2B.PMES)
> +      Store(1, \_SB.PC02.BR2B.PMEP)
> +    }
> +    If( LEqual(Local1, 7)) {
> +      Store(1, \_SB.PC02.BR2C.PMES)
> +      Store(1, \_SB.PC02.BR2C.PMEP)
> +    }
> +    If( LEqual(Local1, 8)) {
> +      Store(1, \_SB.PC02.BR2D.PMES)
> +      Store(1, \_SB.PC02.BR2D.PMEP)
> +    }
> +    If( LEqual(Local1, 9)) {
> +      Store(1, \_SB.PC03.BR3A.PMES)
> +      Store(1, \_SB.PC03.BR3A.PMEP)
> +    }
> +    If( LEqual(Local1, 10)) {
> +      Store(1, \_SB.PC03.BR3B.PMES)
> +      Store(1, \_SB.PC03.BR3B.PMEP)
> +    }
> +    If( LEqual(Local1, 11)) {
> +      Store(1, \_SB.PC03.BR3C.PMES)
> +      Store(1, \_SB.PC03.BR3C.PMEP)
> +    }
> +    If( LEqual(Local1, 12)) {
> +      Store(1, \_SB.PC03.BR3D.PMES)
> +      Store(1, \_SB.PC03.BR3D.PMEP)
> +    }
> +    If( LEqual(Local1, 13)) {
> +      Store(1, \_SB.PC04.BR4A.PMES)
> +      Store(1, \_SB.PC04.BR4A.PMEP)
> +    }
> +    If( LEqual(Local1, 14)) {
> +      Store(1, \_SB.PC04.BR4B.PMES)
> +      Store(1, \_SB.PC04.BR4B.PMEP)
> +    }
> +    If( LEqual(Local1, 15)) {
> +      Store(1, \_SB.PC04.BR4C.PMES)
> +      Store(1, \_SB.PC04.BR4C.PMEP)
> +    }
> +    If( LEqual(Local1, 16)) {
> +      Store(1, \_SB.PC04.BR4D.PMES)
> +      Store(1, \_SB.PC04.BR4D.PMEP)
> +    }
> +    If( LEqual(Local1, 17)) {
> +      Store(1, \_SB.PC05.BR5A.PMES)
> +      Store(1, \_SB.PC05.BR5A.PMEP)
> +    }
> +    If( LEqual(Local1, 18)) {
> +      Store(1, \_SB.PC05.BR5B.PMES)
> +      Store(1, \_SB.PC05.BR5B.PMEP)
> +    }
> +    If( LEqual(Local1, 19)) {
> +      Store(1, \_SB.PC05.BR5C.PMES)
> +      Store(1, \_SB.PC05.BR5C.PMEP)
> +    }
> +    If( LEqual(Local1, 20)) {
> +      Store(1, \_SB.PC05.BR5D.PMES)
> +      Store(1, \_SB.PC05.BR5D.PMEP)
> +    }
> +
> +#if MAX_SOCKET > 1
> +    If( LEqual(Local1, 1)) {
> +      Store(1, \_SB.PC07.QR1A.PMES)
> +      Store(1, \_SB.PC07.QR1A.PMEP)
> +    }
> +    If( LEqual(Local1, 2)) {
> +      Store(1, \_SB.PC07.QR1B.PMES)
> +      Store(1, \_SB.PC07.QR1B.PMEP)
> +    }
> +    If( LEqual(Local1, 3)) {
> +      Store(1, \_SB.PC07.QR1C.PMES)
> +      Store(1, \_SB.PC07.QR1C.PMEP)
> +    }
> +    If( LEqual(Local1, 4)) {
> +      Store(1, \_SB.PC07.QR1D.PMES)
> +      Store(1, \_SB.PC07.QR1D.PMEP)
> +    }
> +    If( LEqual(Local1, 5)) {
> +      Store(1, \_SB.PC08.QR2A.PMES)
> +      Store(1, \_SB.PC08.QR2A.PMEP)
> +    }
> +    If( LEqual(Local1, 6)) {
> +      Store(1, \_SB.PC08.QR2B.PMES)
> +      Store(1, \_SB.PC08.QR2B.PMEP)
> +    }
> +    If( LEqual(Local1, 7)) {
> +      Store(1, \_SB.PC08.QR2C.PMES)
> +      Store(1, \_SB.PC08.QR2C.PMEP)
> +    }
> +    If( LEqual(Local1, 8)) {
> +      Store(1, \_SB.PC08.QR2D.PMES)
> +      Store(1, \_SB.PC08.QR2D.PMEP)
> +    }
> +    If( LEqual(Local1, 9)) {
> +      Store(1, \_SB.PC09.QR3A.PMES)
> +      Store(1, \_SB.PC09.QR3A.PMEP)
> +    }
> +    If( LEqual(Local1, 10)) {
> +      Store(1, \_SB.PC09.QR3B.PMES)
> +      Store(1, \_SB.PC09.QR3B.PMEP)
> +    }
> +    If( LEqual(Local1, 11)) {
> +      Store(1, \_SB.PC09.QR3C.PMES)
> +      Store(1, \_SB.PC09.QR3C.PMEP)
> +    }
> +    If( LEqual(Local1, 12)) {
> +      Store(1, \_SB.PC09.QR3D.PMES)
> +      Store(1, \_SB.PC09.QR3D.PMEP)
> +    }
> +    If( LEqual(Local1, 13)) {
> +      Store(1, \_SB.PC10.QR4A.PMES)
> +      Store(1, \_SB.PC10.QR4A.PMEP)
> +    }
> +    If( LEqual(Local1, 14)) {
> +      Store(1, \_SB.PC10.QR4B.PMES)
> +      Store(1, \_SB.PC10.QR4B.PMEP)
> +    }
> +    If( LEqual(Local1, 15)) {
> +      Store(1, \_SB.PC10.QR4C.PMES)
> +      Store(1, \_SB.PC10.QR4C.PMEP)
> +    }
> +    If( LEqual(Local1, 16)) {
> +      Store(1, \_SB.PC10.QR4D.PMES)
> +      Store(1, \_SB.PC10.QR4D.PMEP)
> +    }
> +    If( LEqual(Local1, 17)) {
> +      Store(1, \_SB.PC11.QR5A.PMES)
> +      Store(1, \_SB.PC11.QR5A.PMEP)
> +    }
> +    If( LEqual(Local1, 18)) {
> +      Store(1, \_SB.PC11.QR5B.PMES)
> +      Store(1, \_SB.PC11.QR5B.PMEP)
> +    }
> +    If( LEqual(Local1, 19)) {
> +      Store(1, \_SB.PC11.QR5C.PMES)
> +      Store(1, \_SB.PC11.QR5C.PMEP)
> +    }
> +    If( LEqual(Local1, 20)) {
> +      Store(1, \_SB.PC11.QR5D.PMES)
> +      Store(1, \_SB.PC11.QR5D.PMEP)
> +    }
> +#endif
> +#if MAX_SOCKET > 2
> +
> +    If( LEqual(Local1, 1)) {
> +      Store(1, \_SB.PC13.RR1A.PMES)
> +      Store(1, \_SB.PC13.RR1A.PMEP)
> +    }
> +    If( LEqual(Local1, 2)) {
> +      Store(1, \_SB.PC13.RR1B.PMES)
> +      Store(1, \_SB.PC13.RR1B.PMEP)
> +    }
> +    If( LEqual(Local1, 3)) {
> +      Store(1, \_SB.PC13.RR1C.PMES)
> +      Store(1, \_SB.PC13.RR1C.PMEP)
> +    }
> +    If( LEqual(Local1, 4)) {
> +      Store(1, \_SB.PC13.RR1D.PMES)
> +      Store(1, \_SB.PC13.RR1D.PMEP)
> +    }
> +    If( LEqual(Local1, 5)) {
> +      Store(1, \_SB.PC14.RR2A.PMES)
> +      Store(1, \_SB.PC14.RR2A.PMEP)
> +    }
> +    If( LEqual(Local1, 6)) {
> +      Store(1, \_SB.PC14.RR2B.PMES)
> +      Store(1, \_SB.PC14.RR2B.PMEP)
> +    }
> +    If( LEqual(Local1, 7)) {
> +      Store(1, \_SB.PC14.RR2C.PMES)
> +      Store(1, \_SB.PC14.RR2C.PMEP)
> +    }
> +    If( LEqual(Local1, 8)) {
> +      Store(1, \_SB.PC14.RR2D.PMES)
> +      Store(1, \_SB.PC14.RR2D.PMEP)
> +    }
> +    If( LEqual(Local1, 9)) {
> +      Store(1, \_SB.PC15.RR3A.PMES)
> +      Store(1, \_SB.PC15.RR3A.PMEP)
> +    }
> +    If( LEqual(Local1, 10)) {
> +      Store(1, \_SB.PC15.RR3B.PMES)
> +      Store(1, \_SB.PC15.RR3B.PMEP)
> +    }
> +    If( LEqual(Local1, 11)) {
> +      Store(1, \_SB.PC15.RR3C.PMES)
> +      Store(1, \_SB.PC15.RR3C.PMEP)
> +    }
> +    If( LEqual(Local1, 12)) {
> +      Store(1, \_SB.PC15.RR3D.PMES)
> +      Store(1, \_SB.PC15.RR3D.PMEP)
> +    }
> +    If( LEqual(Local1, 13)) {
> +      Store(1, \_SB.PC16.RR4A.PMES)
> +      Store(1, \_SB.PC16.RR4A.PMEP)
> +    }
> +    If( LEqual(Local1, 14)) {
> +      Store(1, \_SB.PC16.RR4B.PMES)
> +      Store(1, \_SB.PC16.RR4B.PMEP)
> +    }
> +    If( LEqual(Local1, 15)) {
> +      Store(1, \_SB.PC16.RR4C.PMES)
> +      Store(1, \_SB.PC16.RR4C.PMEP)
> +    }
> +    If( LEqual(Local1, 16)) {
> +      Store(1, \_SB.PC16.RR4D.PMES)
> +      Store(1, \_SB.PC16.RR4D.PMEP)
> +    }
> +    If( LEqual(Local1, 17)) {
> +      Store(1, \_SB.PC17.RR5A.PMES)
> +      Store(1, \_SB.PC17.RR5A.PMEP)
> +    }
> +    If( LEqual(Local1, 18)) {
> +      Store(1, \_SB.PC17.RR5B.PMES)
> +      Store(1, \_SB.PC17.RR5B.PMEP)
> +    }
> +    If( LEqual(Local1, 19)) {
> +      Store(1, \_SB.PC17.RR5C.PMES)
> +      Store(1, \_SB.PC17.RR5C.PMEP)
> +    }
> +    If( LEqual(Local1, 20)) {
> +      Store(1, \_SB.PC17.RR5D.PMES)
> +      Store(1, \_SB.PC17.RR5D.PMEP)
> +    }
> +#endif
> +#if MAX_SOCKET > 3
> +
> +    If( LEqual(Local1, 1)) {
> +      Store(1, \_SB.PC19.SR1A.PMES)
> +      Store(1, \_SB.PC19.SR1A.PMEP)
> +    }
> +    If( LEqual(Local1, 2)) {
> +      Store(1, \_SB.PC19.SR1B.PMES)
> +      Store(1, \_SB.PC19.SR1B.PMEP)
> +    }
> +    If( LEqual(Local1, 3)) {
> +      Store(1, \_SB.PC19.SR1C.PMES)
> +      Store(1, \_SB.PC19.SR1C.PMEP)
> +    }
> +    If( LEqual(Local1, 4)) {
> +      Store(1, \_SB.PC19.SR1D.PMES)
> +      Store(1, \_SB.PC19.SR1D.PMEP)
> +    }
> +    If( LEqual(Local1, 5)) {
> +      Store(1, \_SB.PC20.SR2A.PMES)
> +      Store(1, \_SB.PC20.SR2A.PMEP)
> +    }
> +    If( LEqual(Local1, 6)) {
> +      Store(1, \_SB.PC20.SR2B.PMES)
> +      Store(1, \_SB.PC20.SR2B.PMEP)
> +    }
> +    If( LEqual(Local1, 7)) {
> +      Store(1, \_SB.PC20.SR2C.PMES)
> +      Store(1, \_SB.PC20.SR2C.PMEP)
> +    }
> +    If( LEqual(Local1, 8)) {
> +      Store(1, \_SB.PC20.SR2D.PMES)
> +      Store(1, \_SB.PC20.SR2D.PMEP)
> +    }
> +    If( LEqual(Local1, 9)) {
> +      Store(1, \_SB.PC21.SR3A.PMES)
> +      Store(1, \_SB.PC21.SR3A.PMEP)
> +    }
> +    If( LEqual(Local1, 10)) {
> +      Store(1, \_SB.PC21.SR3B.PMES)
> +      Store(1, \_SB.PC21.SR3B.PMEP)
> +    }
> +    If( LEqual(Local1, 11)) {
> +      Store(1, \_SB.PC21.SR3C.PMES)
> +      Store(1, \_SB.PC21.SR3C.PMEP)
> +    }
> +    If( LEqual(Local1, 12)) {
> +      Store(1, \_SB.PC21.SR3D.PMES)
> +      Store(1, \_SB.PC21.SR3D.PMEP)
> +    }
> +    If( LEqual(Local1, 13)) {
> +      Store(1, \_SB.PC22.SR4A.PMES)
> +      Store(1, \_SB.PC22.SR4A.PMEP)
> +    }
> +    If( LEqual(Local1, 14)) {
> +      Store(1, \_SB.PC22.SR4B.PMES)
> +      Store(1, \_SB.PC22.SR4B.PMEP)
> +    }
> +    If( LEqual(Local1, 15)) {
> +      Store(1, \_SB.PC22.SR4C.PMES)
> +      Store(1, \_SB.PC22.SR4C.PMEP)
> +    }
> +    If( LEqual(Local1, 16)) {
> +      Store(1, \_SB.PC22.SR4D.PMES)
> +      Store(1, \_SB.PC22.SR4D.PMEP)
> +    }
> +    If( LEqual(Local1, 17)) {
> +      Store(1, \_SB.PC23.SR5A.PMES)
> +      Store(1, \_SB.PC23.SR5A.PMEP)
> +    }
> +    If( LEqual(Local1, 18)) {
> +      Store(1, \_SB.PC23.SR5B.PMES)
> +      Store(1, \_SB.PC23.SR5B.PMEP)
> +    }
> +    If( LEqual(Local1, 19)) {
> +      Store(1, \_SB.PC23.SR5C.PMES)
> +      Store(1, \_SB.PC23.SR5C.PMEP)
> +    }
> +    If( LEqual(Local1, 20)) {
> +      Store(1, \_SB.PC23.SR5D.PMES)
> +      Store(1, \_SB.PC23.SR5D.PMEP)
> +    }
> +#endif
> +    Store(0x01,PEES)               //Clear bit 9 of Status
> +    Store(0x00,PMEE)               //Clear bit 9 of GPE0_EN
> +  }
> diff --git
> a/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/Iio
> RootBridge.asi
> b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/Iio
> RootBridge.asi
> new file mode 100644
> index 0000000000..3126e29de7
> --- /dev/null
> +++
> b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/Iio
> RootBridge.asi
> @@ -0,0 +1,328 @@
> +/** @file
> +
> +  @copyright
> +  Copyright 2008 - 2020 Intel Corporation. <BR>
> +
> +  SPDX-License-Identifier: BSD-2-Clause-Patent
> +**/
> +
> +  External (DBGM, FieldUnitObj)
> +  Name (SUPP, 0)
> +  Name (CTRL, 0)
> +
> +  //
> +  // _BBN is ACPI method called by OS to read PCI base bus number for IIO
> stack.
> +  //
> +  Method(_BBN, 0, NotSerialized)
> +  {
> +    Return(CONCATENATE3(BB, SOCKET, STACK))
> +  }
> +
> +  //
> +  // _PXM is ACPI method called by OS to read Proximity Domain (aka NUMA
> Node) where IIO stack belongs to.
> +  // Without SNC (Sub-NUMA Cluster) proximity domain is socket. If two
> SNC domains are enabled report
> +  // PCI stacks 0..2 in the first SNC domain of a socket, and upper stacks in
> the second SNC domain in this socket.
> +  // If four SNC domains are enabled report stacks 0,1 in first domain; stack 2
> in second; 3,4 in third;
> +  // and upper stacks in the fourth SNC domain in this socket.
> +  //
> +  Method(_PXM, 0, NotSerialized)
> +  {
> +    Store(SOCKET, Local0)
> +    Switch (ToInteger(CLOD)) { // CLOD contains the number of SNC domains
> per socekt
> +      Case (2) {
> +        Multiply(Local0, CLOD, Local0)
> +#if   STACK > 2
> +        Add(Local0, 1, Local0)
> +#endif
> +      }
> +      Case (4) {
> +        Multiply(Local0, CLOD, Local0)
> +#if   STACK > 3
> +        Add(Local0, 3, Local0)
> +#elif STACK > 2
> +        Add(Local0, 2, Local0)
> +#elif STACK > 0
> +        Add(Local0, 1, Local0)
> +#endif
> +      }
> +    }
> +    Return(Local0)
> +  }
> +
> +  //
> +  // _SEG is ACPI method called by OS to read PCI segment of IIO stack.
> +  //
> +  Method(_SEG, 0, NotSerialized)
> +  {
> +    Return(CONCATENATE2(SG0, SOCKET))
> +  }
> +
> +  //
> +  // _STA is ACPI method called by OS to read status of ACPI device, IIO stack
> in this case.
> +  //
> +  Method(_STA, 0, NotSerialized)
> +  { //
> +    // Check in processor present bitmap (PRBM) if processor is present, then
> +    // in stack present bitmap of given processor (SPBx) if stack is present.
> +    //
> +    ShiftLeft(1, SOCKET, Local0)
> +    If (And(PRBM, Local0)) {
> +
> +      ShiftLeft(1, CONCATENATE2(0x,STACK), Local1)
> +      if (And(CONCATENATE2(SPB, SOCKET), Local1)) {
> +        Return(0x0F)
> +      }
> +    }
> +    Return(0x00)
> +  }
> +
> +  Method(_OSC, 4)
> +  {
> +      //
> +      // Create DWord-addressable fields from the capabilities Buffer
> +      //
> +      CreateDWordField(Arg3,0,CDW1)
> +      If (LEqual(Arg0,ToUUID("33DB4D5B-1FF7-401C-9657-7441C03DD766"))) {
> +
> +        //
> +        // Create DWord-addressable fields from the capabilities Buffer
> +        //
> +        CreateDWordField(Arg3,4,CDW2)
> +
> +        //
> +        // Fill 3rd capability DWORD only if the count is greater than 2.
> +        //
> +        If(LGreater(Arg2,2)) {
> +          CreateDWordField(Arg3,8,CDW3)
> +        }
> +
> +        //
> +        // Save Capabilities DWord2 & 3
> +        //
> +        Store(CDW2,SUPP)
> +        Store(CDW3,CTRL)
> +
> +        //
> +        // Only allow native hot plug control if OS supports
> +        // * MSI/MSI-X
> +        //
> +        If (LOr(AHPE, LNotEqual(And(SUPP, 0x10), 0x10))) { // Conditions not
> met?
> +          And(CTRL, Not(1), CTRL) // Mask bit 0 to deny.
> +          Sleep(1000)
> +        }
> +
> +        //
> +        // Never allow SHPC (no SHPC controller in system), Mask bit 1
> +        //
> +        And(CTRL, Not(2), CTRL)
> +
> +
> +        //
> +        // Select Native PCIe AER/eDPC handling from OS or Firmware First
> model
> +        //
> +        If (CondRefOf (\_SB.OSNC))
> +        {
> +          //in case OS has AER capability.
> +          If (LEqual ( And(CTRL, 8), 8)) {
> +
> +            //in case OS support multiple segment.
> +            If (And (SUPP, 8)) {
> +              If (CondRefof (^_SEG))
> +              {
> +                Store (^_SEG, Local0)
> +              } Else {
> +                Store (0, Local0)
> +              }
> +            } Else {
> +              Store (0, Local0)
> +            }
> +
> +            Store (^_BBN, Local1)
> +
> +            // if BIOS allows OS take. Do nothing.
> +            If (\_SB.OSNC(Local0, Local1, SUPP, CTRL)) {
> +
> +            } Else {
> +              And (CTRL, Not(0x88), CTRL)
> +            }
> +          } Else {
> +            And (CTRL, Not(0x88), CTRL)
> +          }
> +        } Else {
> +          //
> +          //Disable Native PCIe AER/eDPC handling from OS, AER is bit3, eDPC is
> bit7
> +          //
> +          And (CTRL, Not(0x88), CTRL)
> +        }
> +
> +        If (Not(And(CDW1,1))) { // Query Flag Clear?
> +          //
> +          // Disable GPEs for Features granted native control
> +          //
> +          If (And(CTRL, 0x01)) { // Native Hot plug control granted?
> +            \_SB.OSCM (_UID)
> +            Store (0x01, GPSH)                // Clear Hotplug SCI Enable in GPE0
> +          }
> +        }
> +
> +        If (LNotEqual(Arg1,one)) { // unknown revision
> +          Or(CDW1,0x08,CDW1)
> +        }
> +
> +        If(LNotEqual(CDW3,CTRL)) { // capabilities bits were masked
> +          Or(CDW1,0x10,CDW1)
> +        }
> +        //
> +        // update DWORD3 in the buffer
> +        //
> +        Store(CTRL,CDW3)
> +        Return(Arg3)
> +
> +      } Else {
> +        //
> +        // Just indicate unrecognized UUID
> +        // Leave it at that
> +        //
> +        Or (CDW1,4,CDW1)
> +        if(LEqual(DBGM, 0x01)){
> +          Store (0xEE, IO80)
> +        }
> +        Return(Arg3)
> +      }
> +  } // End _OSC
> +
> +  Name(RBRS, ResourceTemplate() {
> +    //RESOURCE_CHUNK1_OFF
> +    WORDBusNumber(            //Bus number resource (0); the bridge produces
> bus numbers for its subsequent buses
> +      ResourceProducer,       // bit 0 of general flags is 1
> +      MinFixed,               // Range is fixed
> +      MaxFixed,               // Range is fixed
> +      PosDecode,              // PosDecode
> +      0x0000,                 // Granularity (FIX1 - Patched by ACPI Platform Driver
> during POST)
> +      0x0000,                 // Min         (FIX1 - Patched by ACPI Platform Driver during
> POST)
> +      0x0000,                 // Max         (FIX1 - Patched by ACPI Platform Driver
> during POST)
> +      0x0000,                 // Translation
> +      0x0001,                 // Range Length = Max-Min+1 (FIX1 - Patched by ACPI
> Platform Driver during POST)
> +            ,
> +            ,
> +      FIX1                    // DescriptorName populated so iASL outputs offset for it
> in a .h file
> +    )
> +
> +    //: Off board video card not detected in device manager when it is
> connected to CPU
> +    //RESOURCE_CHUNK5_OFF
> +    DWORDMEMORY(              // descriptor for video RAM on video card
> +      ResourceProducer,       // bit 0 of general flags is 0
> +      PosDecode,
> +      MinFixed,               // Range is fixed
> +      MaxFixed,               // Range is Fixed
> +      Cacheable,
> +      ReadWrite,
> +      0x00000000,             // Granularity  (FIX5 - Patched by ACPI Platform Driver
> during POST)
> +      0x00000000,             // Min          (FIX5 - Patched by ACPI Platform Driver
> during POST)
> +      0x00000000,             // Max          (FIX5 - Patched by ACPI Platform Driver
> during POST)
> +      0x00000000,             // Translation
> +      0x00000000,             // Range Length (FIX5 - Patched by ACPI Platform
> Driver during POST)
> +                ,
> +                ,
> +      FIX5                    // DescriptorName populated so iASL outputs offset for it
> in a .h file
> +    )
> +
> +    //RESOURCE_CHUNK2_OFF
> +    WORDIO(                   //Consumed-and-produced resource (all I/O above
> CFF)
> +      ResourceProducer,       // bit 0 of general flags is 0
> +      MinFixed,               // Range is fixed
> +      MaxFixed,               // Range is fixed
> +      PosDecode,
> +      EntireRange,
> +      0x0000,                 // Granularity (FIX2 - Patched by ACPI Platform Driver
> during POST)
> +      0x0000,                 // Min         (FIX2 - Patched by ACPI Platform Driver during
> POST)
> +      0x0000,                 // Max         (FIX2 - Patched by ACPI Platform Driver
> during POST)
> +      0x0000,                 // Translation
> +      0x0001,                 // Range Length = Max-Min+1 (FIX2 - Patched by ACPI
> Platform Driver during POST)
> +            ,
> +            ,
> +      FIX2                    // DescriptorName populated so iASL outputs offset for it
> in a .h file
> +    )
> +
> +    //Off board video card not detected in device manager when it is
> connected to CPU
> +    //Descriptor for IO space of the video card.
> +    WORDIO(                   // Consumed-and-produced resource (all I/O below
> CF8)
> +      ResourceProducer,       // bit 0 of general flags is 0
> +      MinFixed,               // Range is fixed
> +      MaxFixed,               // Range is fixed
> +      PosDecode,
> +      EntireRange,
> +      0x0000,                 // Granularity (FIX6 - Patched by ACPI Platform Driver
> during POST)
> +      0x0000,                 // Min         (FIX6 - Patched by ACPI Platform Driver during
> POST)
> +      0x0000,                 // Max         (FIX6 - Patched by ACPI Platform Driver
> during POST)
> +      0x0000,                 // Translation
> +      0x0000,                 // Range Length
> +            ,
> +            ,
> +      FIX6                    // DescriptorName populated so iASL outputs offset for it
> in a .h file
> +    )
> +
> +    //Off board video card not detected in device manager when it is
> connected to CPU
> +    //Descriptor for IO space of the video card.
> +    WORDIO(                   // Consumed-and-produced resource (all I/O below
> CF8)
> +      ResourceProducer,       // bit 0 of general flags is 0
> +      MinFixed,               // Range is fixed
> +      MaxFixed,               // Range is fixed
> +      PosDecode,
> +      EntireRange,
> +      0x0000,                 // Granularity (FIX7 - Patched by ACPI Platform Driver
> during POST)
> +      0x0000,                 // Min         (FIX7 - Patched by ACPI Platform Driver during
> POST)
> +      0x0000,                 // Max         (FIX7 - Patched by ACPI Platform Driver
> during POST)
> +      0x0000,                 // Translation
> +      0x0000,                 // Range Length
> +            ,
> +            ,
> +      FIX7                    // DescriptorName populated so iASL outputs offset for it
> in a .h file
> +    )
> +
> +    //
> +    // PCI RESOURCE_32bit
> +    //
> +    DWORDMemory(              // Consumed-and-produced resource(all of
> memory space)
> +      ResourceProducer,       // bit 0 of general flags is 0
> +      PosDecode,              // positive Decode
> +      MinFixed,               // Range is fixed
> +      MaxFixed,               // Range is fixed
> +      NonCacheable,
> +      ReadWrite,
> +      0x00000000,             // Granularity (FIX3 - Patched by ACPI Platform Driver
> during POST)
> +      0x00000000,             // Min (calculated dynamically) (FIX3 - Patched by
> ACPI Platform Driver during POST)
> +      0x00000000,             // Max = 4GB - 1MB  (fwh + fwh alias) (FIX3 - Patched
> by ACPI Platform Driver during POST)
> +      0x00000000,             // Translation
> +      0x00000000,             // Range Length (calculated dynamically) (FIX3 -
> Patched by ACPI Platform Driver during POST)
> +                ,
> +                ,
> +      FIX3                    // DescriptorName populated so iASL outputs offset for it
> in a .h file
> +    )
> +
> +    //
> +    // PCI RESOURCE_64bit
> +    //
> +    QWORDMemory(              // Consumed-and-produced resource(all of
> memory space)
> +      ResourceProducer,       // bit 0 of general flags is 0
> +      PosDecode,              // positive Decode
> +      MinFixed,               // Range is fixed
> +      MaxFixed,               // Range is fixed
> +      NonCacheable,
> +      ReadWrite,
> +      0x00000000000,          // Granularity (FIX4 - Patched by ACPI Platform
> Driver during POST)
> +      0x00000000000,          // Min (calculated dynamically) (FIX4 - Patched by
> ACPI Platform Driver during POST)
> +      0x00000000000,          // Max = 4GB - 1MB  (fwh + fwh alias) (FIX4 -
> Patched by ACPI Platform Driver during POST)
> +      0x00000000000,          // Translation
> +      0x00000000000,          // Range Length (calculated dynamically) (FIX4 -
> Patched by ACPI Platform Driver during POST)
> +                   ,
> +                   ,
> +      FIX4                    // DescriptorName populated so iASL outputs offset for it
> in a .h file
> +    )
> +  }) // end of PRXX Buffer
> +
> +    // Current resource template return
> +  Method(_CRS, 0x0, NotSerialized)
> +  {
> +    Return(RBRS)
> +  }
> diff --git
> a/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/Iio
> RootBridgeIcx.asi
> b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/Iio
> RootBridgeIcx.asi
> new file mode 100644
> index 0000000000..1dc42a9ca8
> --- /dev/null
> +++
> b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/Iio
> RootBridgeIcx.asi
> @@ -0,0 +1,270 @@
> +/** @file
> +
> +  @copyright
> +  Copyright 2008 - 2020 Intel Corporation. <BR>
> +
> +  SPDX-License-Identifier: BSD-2-Clause-Patent
> +**/
> +
> +#include "MaxSocket.h"
> +
> +    Method(OSCM, 1) {
> +
> +     if (LEqual(Arg0, 1)) {  // PC01
> +        \_SB.PC01.BR1A.OSHP ()
> +        \_SB.PC01.BR1B.OSHP ()
> +        \_SB.PC01.BR1C.OSHP ()
> +        \_SB.PC01.BR1D.OSHP ()
> +      }
> +     if (LEqual(Arg0, 2)) {  // PC01
> +        \_SB.PC02.BR2A.OSHP ()
> +        \_SB.PC02.BR2B.OSHP ()
> +        \_SB.PC02.BR2C.OSHP ()
> +        \_SB.PC02.BR2D.OSHP ()
> +      }
> +    if (LEqual(Arg0, 3)) {  // PC02
> +        \_SB.PC03.BR3A.OSHP ()
> +        \_SB.PC03.BR3B.OSHP ()
> +        \_SB.PC03.BR3C.OSHP ()
> +        \_SB.PC03.BR3D.OSHP ()
> +      }
> +    if (LEqual(Arg0, 4)) {  // PC02
> +        \_SB.PC04.BR4A.OSHP ()
> +        \_SB.PC04.BR4B.OSHP ()
> +        \_SB.PC04.BR4C.OSHP ()
> +        \_SB.PC04.BR4D.OSHP ()
> +      }
> +    if (LEqual(Arg0, 5)) {  // PC01
> +        \_SB.PC05.BR5A.OSHP ()
> +        \_SB.PC05.BR5B.OSHP ()
> +        \_SB.PC05.BR5C.OSHP ()
> +        \_SB.PC05.BR5D.OSHP ()
> +      }
> +
> +#if MAX_SOCKET > 1
> +      if (LEqual(Arg0, 7)) {  // PC07
> +        \_SB.PC07.QR1A.OSHP ()
> +        \_SB.PC07.QR1B.OSHP ()
> +        \_SB.PC07.QR1C.OSHP ()
> +        \_SB.PC07.QR1D.OSHP ()
> +      }
> +      if (LEqual(Arg0, 8)) {  // PC08
> +        \_SB.PC08.QR2A.OSHP ()
> +        \_SB.PC08.QR2B.OSHP ()
> +        \_SB.PC08.QR2C.OSHP ()
> +        \_SB.PC08.QR2D.OSHP ()
> +
> +      }
> +      if (LEqual(Arg0, 9)) {  // PC09
> +        \_SB.PC09.QR3A.OSHP ()
> +        \_SB.PC09.QR3B.OSHP ()
> +        \_SB.PC09.QR3C.OSHP ()
> +        \_SB.PC09.QR3D.OSHP ()
> +
> +      }
> +      if (LEqual(Arg0, 10)) {  // PC10
> +
> +        \_SB.PC10.QR4A.OSHP ()
> +        \_SB.PC10.QR4B.OSHP ()
> +        \_SB.PC10.QR4C.OSHP ()
> +        \_SB.PC10.QR4D.OSHP ()
> +
> +      }
> +      if (LEqual(Arg0, 11)) {  // PC11
> +        \_SB.PC11.QR5A.OSHP ()
> +        \_SB.PC11.QR5B.OSHP ()
> +        \_SB.PC11.QR5C.OSHP ()
> +        \_SB.PC11.QR5D.OSHP ()
> +      }
> +
> +#endif
> +
> +#if MAX_SOCKET > 2
> +      if (LEqual(Arg0, 13)) {  // PC13
> +        \_SB.PC13.RR1A.OSHP ()
> +        \_SB.PC13.RR1B.OSHP ()
> +        \_SB.PC13.RR1C.OSHP ()
> +        \_SB.PC13.RR1D.OSHP ()
> +      }
> +      if (LEqual(Arg0, 14)) {  // PC14
> +        \_SB.PC14.RR2A.OSHP ()
> +        \_SB.PC14.RR2B.OSHP ()
> +        \_SB.PC14.RR2C.OSHP ()
> +        \_SB.PC14.RR2D.OSHP ()
> +
> +      }
> +      if (LEqual(Arg0, 15)) {  // PC15
> +        \_SB.PC15.RR3A.OSHP ()
> +        \_SB.PC15.RR3B.OSHP ()
> +        \_SB.PC15.RR3C.OSHP ()
> +        \_SB.PC15.RR3D.OSHP ()
> +
> +      }
> +      if (LEqual(Arg0, 16)) {  // PC16
> +
> +        \_SB.PC16.RR4A.OSHP ()
> +        \_SB.PC16.RR4B.OSHP ()
> +        \_SB.PC16.RR4C.OSHP ()
> +        \_SB.PC16.RR4D.OSHP ()
> +
> +      }
> +      if (LEqual(Arg0, 17)) {  // PC17
> +        \_SB.PC17.RR5A.OSHP ()
> +        \_SB.PC17.RR5B.OSHP ()
> +        \_SB.PC17.RR5C.OSHP ()
> +        \_SB.PC17.RR5D.OSHP ()
> +      }
> +
> +#endif
> +
> +
> +#if MAX_SOCKET > 3
> +      if (LEqual(Arg0, 19)) {  // PC19
> +        \_SB.PC19.SR1A.OSHP ()
> +        \_SB.PC19.SR1B.OSHP ()
> +        \_SB.PC19.SR1C.OSHP ()
> +        \_SB.PC19.SR1D.OSHP ()
> +      }
> +      if (LEqual(Arg0, 20)) {  // PC20
> +        \_SB.PC20.SR2A.OSHP ()
> +        \_SB.PC20.SR2B.OSHP ()
> +        \_SB.PC20.SR2C.OSHP ()
> +        \_SB.PC20.SR2D.OSHP ()
> +
> +      }
> +      if (LEqual(Arg0, 21)) {  // PC21
> +        \_SB.PC21.SR3A.OSHP ()
> +        \_SB.PC21.SR3B.OSHP ()
> +        \_SB.PC21.SR3C.OSHP ()
> +        \_SB.PC21.SR3D.OSHP ()
> +
> +      }
> +      if (LEqual(Arg0, 22)) {  // PC22
> +
> +        \_SB.PC22.SR4A.OSHP ()
> +        \_SB.PC22.SR4B.OSHP ()
> +        \_SB.PC22.SR4C.OSHP ()
> +        \_SB.PC22.SR4D.OSHP ()
> +
> +      }
> +      if (LEqual(Arg0, 23)) {  // PC23
> +        \_SB.PC23.SR5A.OSHP ()
> +        \_SB.PC23.SR5B.OSHP ()
> +        \_SB.PC23.SR5C.OSHP ()
> +        \_SB.PC23.SR5D.OSHP ()
> +      }
> +
> +#endif
> +#if MAX_SOCKET > 4
> +      if (LEqual(Arg0,25)) {  // PC12
> +        \_SB.PC25.CR1A.OSHP ()
> +        \_SB.PC25.CR1B.OSHP ()
> +        \_SB.PC25.CR1C.OSHP ()
> +        \_SB.PC25.CR1D.OSHP ()
> +      }
> +      if (LEqual(Arg0,26)) {  // PC13
> +        \_SB.PC26.CR2A.OSHP ()
> +        \_SB.PC26.CR2B.OSHP ()
> +        \_SB.PC26.CR2C.OSHP ()
> +        \_SB.PC26.CR2D.OSHP ()
> +
> +      }
> +     if (LEqual(Arg0,27)) {  // PC12
> +        \_SB.PC27.CR3A.OSHP ()
> +        \_SB.PC27.CR3B.OSHP ()
> +        \_SB.PC27.CR3C.OSHP ()
> +        \_SB.PC27.CR3D.OSHP ()
> +      }
> +      if (LEqual(Arg0,28)) {  // PC13
> +        \_SB.PC28.CR4A.OSHP ()
> +        \_SB.PC28.CR4B.OSHP ()
> +        \_SB.PC28.CR4C.OSHP ()
> +        \_SB.PC28.CR4D.OSHP ()
> +      }
> +      if (LEqual(Arg0,29)) {  // PC14
> +        \_SB.PC29.CR5A.OSHP ()
> +        \_SB.PC29.CR5B.OSHP ()
> +        \_SB.PC29.CR5C.OSHP ()
> +        \_SB.PC29.CR5D.OSHP ()
> +      }
> +#endif
> +#if MAX_SOCKET > 5
> +      if (LEqual(Arg0,31)) {  // PC15
> +        \_SB.PC31.TR1A.OSHP ()
> +        \_SB.PC31.TR1B.OSHP ()
> +        \_SB.PC31.TR1C.OSHP ()
> +        \_SB.PC31.TR1D.OSHP ()
> +      }
> +      if (LEqual(Arg0,32)) {  // PC16
> +        \_SB.PC32.TR2A.OSHP ()
> +        \_SB.PC32.TR2B.OSHP ()
> +        \_SB.PC32.TR2C.OSHP ()
> +        \_SB.PC32.TR2D.OSHP ()
> +
> +      }
> +      if (LEqual(Arg0,33)) {  // PC15
> +        \_SB.PC33.TR3A.OSHP ()
> +        \_SB.PC33.TR3B.OSHP ()
> +        \_SB.PC33.TR3C.OSHP ()
> +        \_SB.PC33.TR3D.OSHP ()
> +      }
> +      if (LEqual(Arg0,34)) {  // PC16
> +        \_SB.PC34.TR4A.OSHP ()
> +        \_SB.PC34.TR4B.OSHP ()
> +        \_SB.PC34.TR4C.OSHP ()
> +        \_SB.PC34.TR4D.OSHP ()
> +      }
> +      if (LEqual(Arg0,35)) {  // PC17
> +        \_SB.PC35.TR5A.OSHP ()
> +        \_SB.PC35.TR5B.OSHP ()
> +        \_SB.PC35.TR5C.OSHP ()
> +        \_SB.PC35.TR5D.OSHP ()
> +      }
> +#endif
> +#if MAX_SOCKET > 6
> +      if (LEqual(Arg0,37)) {  // PC37
> +        \_SB.PC37.UR1A.OSHP ()
> +        \_SB.PC37.UR1B.OSHP ()
> +        \_SB.PC37.UR1C.OSHP ()
> +        \_SB.PC37.UR1D.OSHP ()
> +      }
> +      if (LEqual(Arg0,38)) {  // PC38
> +        \_SB.PC38.UR2A.OSHP ()
> +        \_SB.PC38.UR2B.OSHP ()
> +        \_SB.PC38.UR2C.OSHP ()
> +        \_SB.PC38.UR2D.OSHP ()
> +
> +      }
> +      if (LEqual(Arg0,39)) {  // PC39
> +        \_SB.PC39.UR3A.OSHP ()
> +        \_SB.PC39.UR3B.OSHP ()
> +        \_SB.PC39.UR3C.OSHP ()
> +        \_SB.PC39.UR3D.OSHP ()
> +      }
> +      if (LEqual(Arg0,40)) {  // PC40
> +        \_SB.PC40.UR4A.OSHP ()
> +        \_SB.PC40.UR4B.OSHP ()
> +        \_SB.PC40.UR4C.OSHP ()
> +        \_SB.PC40.UR4D.OSHP ()
> +      }
> +      if (LEqual(Arg0,41)) {  // PC41
> +
> +        \_SB.PC41.UR5A.OSHP ()
> +        \_SB.PC41.UR5B.OSHP ()
> +        \_SB.PC41.UR5C.OSHP ()
> +        \_SB.PC41.UR5D.OSHP ()
> +      }
> +#endif
> +#if MAX_SOCKET > 7
> +      if (LEqual(Arg0,43)) {  // PC43
> +        \_SB.PC43.VR1A.OSHP ()
> +        \_SB.PC43.VR1B.OSHP ()
> +        \_SB.PC43.VR1C.OSHP ()
> +        \_SB.PC43.VR1D.OSHP ()
> +      }
> +      if (LEqual(Arg0,44)) {  // PC44
> +      }
> +      if (LEqual(Arg0,45)) {  // PC45
> +      }
> +#endif
> +    } // end of OSCM
> diff --git
> a/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/Mo
> ther.asi
> b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/Mo
> ther.asi
> new file mode 100644
> index 0000000000..90dbfabcbe
> --- /dev/null
> +++
> b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/Mo
> ther.asi
> @@ -0,0 +1,164 @@
> +/** @file
> +
> +  @copyright
> +  Copyright 2001 - 2020 Intel Corporation. <BR>
> +
> +  SPDX-License-Identifier: BSD-2-Clause-Patent
> +**/
> +
> +Device (DMAC) {
> +  Name (_HID, EISAID("PNP0200"))
> +  Name (_CRS,ResourceTemplate() {
> +    IO(Decode16, 0x0, 0x0, 0, 0x10)
> +    IO(Decode16, 0x81, 0x81, 0, 0x3)
> +    IO(Decode16, 0x87, 0x87, 0, 0x1)
> +    IO(Decode16, 0x89, 0x89, 0, 0x3)
> +    IO(Decode16, 0x8f, 0x8f, 0, 0x1)
> +    IO(Decode16, 0xc0, 0xc0, 0, 0x20)
> +    DMA(Compatibility,NotBusMaster,Transfer8) {4}
> +  })
> +}
> +
> +Device (RTC) {
> +  Name (_HID,EISAID("PNP0B00"))
> +  Name (_CRS,ResourceTemplate() {
> +    IO(Decode16,0x70,0x70,0x01,0x02)
> +    IO(Decode16,0x72,0x72,0x01,0x02)
> +    IO(Decode16,0x74,0x74,0x01,0x04)
> +    IRQNoFlags(){8}
> +  })
> +}
> +
> +Device (PIC) {
> +  Name (_HID,EISAID("PNP0000"))
> +  Name (_CRS,ResourceTemplate() {
> +    IO(Decode16,0x20,0x20,0x01,0x1E)        // length of 1Eh includes all aliases
> +    IO(Decode16,0xA0,0xA0,0x01,0x1E)
> +    IO(Decode16,0x4D0,0x4D0,0x01,0x02)
> +  })
> +}
> +
> +Device (FPU) {
> +  Name (_HID,EISAID("PNP0C04"))
> +  Name (_CRS,ResourceTemplate() {
> +    IO(Decode16,0xF0,0xF0,0x01,0x1)
> +    IRQNoFlags(){13}
> +  })
> +}
> +
> +Device(TMR)
> +{
> +  Name(_HID,EISAID("PNP0100"))
> +
> +  Name(_CRS,ResourceTemplate() {
> +    IO(Decode16,0x40,0x40,0x01,0x04)
> +    IO(Decode16,0x50,0x50,0x01,0x04)        // alias
> +    IRQNoFlags(){0}
> +  })
> +}
> +
> +Device (SPKR) {
> +  Name (_HID,EISAID("PNP0800"))
> +  Name (_CRS,ResourceTemplate() {
> +    IO(Decode16,0x61,0x61,0x01,0x01)
> +  })
> +}
> +
> +//
> +// all "PNP0C02" devices- pieces that don't fit anywhere else
> +//
> +Device(XTRA) {
> +  Name(_HID,EISAID("PNP0C02"))        // Generic motherboard devices
> +  Name(_CRS,
> +    ResourceTemplate() {
> +      IO(Decode16,0x500,0x500,0x01,0xFF)                  // ACPI base
> +      IO(Decode16,0x400,0x400,0x01,0x20)                  // PM IO, ICH5
> +
> +      //
> +      // Resource conflict with COM Port
> +      //
> +      //IO(Decode16,0x680,0x680,0x01,0x80)                  // Runtime registers,
> National SIO
> +      IO(Decode16,0x10,0x10,0x01,0x10)
> +      IO(Decode16,0x80,0x80,0x01,0x01)
> +      IO(Decode16,0x84,0x84,0x01,0x03)
> +      IO(Decode16,0x88,0x88,0x01,0x01)
> +      IO(Decode16,0x8c,0x8c,0x01,0x03)
> +      IO(Decode16,0x90,0x90,0x01,0x10)
> +      //
> +      // Pilot Mail Box decode range
> +      //
> +      IO(Decode16,0x600,0x600,0x01,0x20)
> +      //
> +      // BMC KCS decode range
> +      //
> +      IO(Decode16,0xCA0,0xCA0,0x01,0x2)
> +      IO(Decode16,0xCA4,0xCA4,0x01,0x3)
> +
> +      //IO Descriptor added for range 2F8-2FF for S501706
> +      //IO(Decode16,0x2F8,0x2F8,0x01,0x08)
> +      //IO(Decode16,0x60,0x60,0x01,0x01)
> +      //IO(Decode16,0x64,0x64,0x01,0x01)
> +
> +      //
> +      // FLASH range
> +      //
> +      Memory32Fixed (ReadOnly, 0xFF000000, 0x1000000) //16MB as per IIO
> spec
> +
> +    }
> +  )
> +}
> +
> +//
> +// High Performance Event Timer (HPET)
> +//
> +Device (HPET) {
> +  Name (_HID, EisaId ("PNP0103"))
> +
> +  Method (_STA, 0, NotSerialized) {
> +    If (\HPTE) {
> +      Return (0x0F)
> +    } Else {
> +      Return (0x00)
> +    }
> +  }
> +
> +  Name (CRS0, ResourceTemplate () {
> +    Memory32Fixed (ReadWrite, 0xFED00000, 0x00000400)
> +  })
> +
> +  Name (CRS1, ResourceTemplate () {
> +    Memory32Fixed (ReadWrite, 0xFED01000, 0x00000400)
> +  })
> +
> +  Name (CRS2, ResourceTemplate () {
> +    Memory32Fixed (ReadWrite, 0xFED02000, 0x00000400)
> +  })
> +
> +  Name (CRS3, ResourceTemplate () {
> +    Memory32Fixed (ReadWrite, 0xFED03000, 0x00000400)
> +  })
> +
> +  //
> +  // Owning control method can't be re-entrant, so _CRS must be Serialized
> +  //
> +  Method (_CRS, 0, Serialized) {
> +    Switch (ToInteger(\HPTB)) {
> +      Case (0xFED00000) {
> +        Return (CRS0)
> +      }
> +
> +      Case (0xFED01000) {
> +        Return (CRS1)
> +      }
> +
> +      Case (0xFED02000) {
> +        Return (CRS2)
> +      }
> +
> +      Case (0xFED03000) {
> +        Return (CRS3)
> +      }
> +    }
> +    Return (CRS0)
> +  }
> +}
> diff --git
> a/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/Nv
> dimmGpe.asi
> b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/Nv
> dimmGpe.asi
> new file mode 100644
> index 0000000000..f0c44e67c1
> --- /dev/null
> +++
> b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/Nv
> dimmGpe.asi
> @@ -0,0 +1,25 @@
> +/** @file
> +
> +  @copyright
> +  Copyright 2001 - 2019 Intel Corporation. <BR>
> +
> +  SPDX-License-Identifier: BSD-2-Clause-Patent
> +**/
> +
> +Method (NNPR, 0) // NTPR == NoTify PRe
> +{
> +    External (\_SB.NVDR.NTPR, MethodObj)
> +    Store(Package () {}, Local0)
> +    if (CondRefOf (\_SB.NVDR.NTPR)) {
> +        Store (\_SB.NVDR.NTPR (), Local0)  // Local0 == Opaque Package
> +    }
> +    Return (Local0)
> +}
> +
> +Method (NNDO, 1) // Nvdimm Notify DO
> +{
> +    External (\_SB.NVDR.NTDO, MethodObj)
> +    if (CondRefOf (\_SB.NVDR.NTDO)) {
> +        \_SB.NVDR.NTDO (Arg0)
> +    }
> +}
> diff --git
> a/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/Os.
> asi
> b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/Os.
> asi
> new file mode 100644
> index 0000000000..e2d5fcc78f
> --- /dev/null
> +++
> b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/Os.
> asi
> @@ -0,0 +1,66 @@
> +/** @file
> +
> +  @copyright
> +  Copyright 2017-2020 Intel Corporation. <BR>
> +
> +  SPDX-License-Identifier: BSD-2-Clause-Patent
> +**/
> +
> +Scope (\_SB) {
> +
> +  Name (XCNT, 0)
> +  Name (OSYS, 0)   // Global variable for type of OS.
> +
> +  Method (_INI) {
> +
> +    If (CondRefOf (_OSI)) {
> +      If (\_OSI ("Windows 2012")) {
> +        Store (13, OSYS)      // Windows Server 2012 & Windows 8
> +      }
> +
> +      If (\_OSI ("Windows 2013")) {
> +        Store (14, OSYS)      // Windows Server 2012 R2 & Windows 8.1
> +      }
> +
> +      If (\_OSI ("Windows 2015")) {
> +        Store (15, OSYS)      // Windows 10
> +      }
> +      //
> +      // Check Linux also
> +      //
> +
> +      If (\_OSI ("FreeBSD")) {
> +        Store (2, OSYS)
> +      }
> +
> +      If (\_OSI ("HP-UX")) {
> +        Store (3, OSYS)
> +      }
> +
> +      If (\_OSI ("OpenVMS")) {
> +        Store (4, OSYS)
> +      }
> +
> +      //
> +      // Running WinSvr2012, Win8, or later?
> +      //
> +      If (LGreaterEqual (\_SB.OSYS, 13)) {
> +        //
> +        // It is Svr2012 or Win8
> +        // Call xHCI device to switch USB ports over
> +        //  unless it has been done already
> +        //
> +        If (LEqual (XCNT, 0)) {
> +          if(LEqual(DBGM, 0x01)){
> +            Store (0x84, IO80)
> +          }
> +          Increment (XCNT)
> +        }
> +      } Else {
> +        if(LEqual(DBGM, 0x01)){
> +          Store (\_SB.OSYS, IO80)
> +        }
> +      }
> +    }
> +  } // End Method (_INI)
> +} // End Scope (_SB)
> diff --git
> a/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/PC
> 0010nm.asi
> b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/PC
> 0010nm.asi
> new file mode 100644
> index 0000000000..9f24076ef5
> --- /dev/null
> +++
> b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/PC
> 0010nm.asi
> @@ -0,0 +1,427 @@
> +/** @file
> +
> +  @copyright
> +  Copyright 2016 - 2019 Intel Corporation. <BR>
> +
> +  SPDX-License-Identifier: BSD-2-Clause-Patent
> +**/
> +  External (DBGM, FieldUnitObj)
> +
> +  Name (SUPP, 0)
> +  Name (CTRL, 0)
> +
> +  //
> +  // _BBN is ACPI method called by OS to read PCI base bus number for IIO
> stack.
> +  //
> +  Method(_BBN, 0, NotSerialized)
> +  {
> +    Return(BB00)
> +  }
> +
> +  //
> +  // _PXM is ACPI method called by OS to read Proximity Domain of IIO
> stack.
> +  //
> +  Method(_PXM, 0, NotSerialized)
> +  {
> +    Return(0)
> +  }
> +
> +  //
> +  // _SEG is ACPI method called by OS to read PCI segment of IIO stack.
> +  //
> +  Method(_SEG, 0, NotSerialized)
> +  {
> +    Return(SG00)
> +  }
> +
> +  Method(_OSC,4) {
> +    //
> +    // Create DWord-addressable fields from the capabilities Buffer
> +    //
> +    CreateDWordField(Arg3,0,CDW1)
> +    If (LEqual(Arg0,ToUUID("33DB4D5B-1FF7-401C-9657-7441C03DD766"))) {
> +        //
> +        // Create DWord-addressable fields from the capabilities Buffer
> +        //
> +        CreateDWordField(Arg3,4,CDW2)
> +
> +        //
> +        // Fill 3rd capability DWORD only if the count is greater than 2.
> +        //
> +        If(LGreater(Arg2,2)) {
> +          CreateDWordField(Arg3,8,CDW3)
> +        }
> +
> +        //
> +        // Save Capabilities DWord2 & 3
> +        //
> +        Store(CDW2,SUPP)
> +        Store(CDW3,CTRL)
> +
> +        //
> +        // Never allow SHPC (no SHPC controller in system)
> +        //
> +        And(CTRL, 0x1D, CTRL)
> +
> +        //
> +        // Select Native PCIe AER/eDPC handling from OS or Firmware First
> model
> +        //
> +        If (CondRefOf (\_SB.OSNC))
> +        {
> +          //in case OS has AER capability.
> +          If (LEqual ( And(CTRL, 8), 8)) {
> +
> +            //in case OS support multiple segment.
> +            If (And (SUPP, 8)) {
> +              If (CondRefof (^_SEG))
> +              {
> +                Store (^_SEG, Local0)
> +              } Else {
> +                Store (0, Local0)
> +              }
> +            } Else {
> +              Store (0, Local0)
> +            }
> +
> +            Store (^_BBN, Local1)
> +
> +            // if BIOS allows OS take. Do nothing.
> +            If (\_SB.OSNC(Local0, Local1, SUPP, CTRL)) {
> +
> +            } Else {
> +              And (CTRL, Not(0x88), CTRL)
> +            }
> +          } Else {
> +            And (CTRL, Not(0x88), CTRL)
> +          }
> +        } Else {
> +          //
> +          //Disable Native PCIe AER/eDPC handling from OS, AER is bit3, eDPC is
> bit7
> +          //
> +          And (CTRL, Not(0x88), CTRL)
> +        }
> +
> +        If (Not(And(CDW1,1))) { // Query Flag Clear?
> +          //
> +          // Disable GPEs for Features granted native control
> +          //
> +          If (And(CTRL, 0x01)) { // Native Hot plug control granted?
> +           if(LEqual(DBGM, 0x01)){
> +             Store (0xE3, IO80)
> +           }
> +            \_SB.PC01.BR1A.OSHP ()
> +            \_SB.PC01.BR1B.OSHP ()
> +            \_SB.PC01.BR1C.OSHP ()
> +            \_SB.PC01.BR1D.OSHP ()
> +
> +            Store (0x01, GPSH)                // Clear Hotplug SCI Enable in GPE0
> +          }
> +        }
> +
> +        If (LNotEqual(Arg1,one)) { // unknown revision
> +          Or(CDW1,0x08,CDW1)
> +        }
> +
> +        If(LNotEqual(CDW3,CTRL)) { // capabilities bits were masked
> +          Or(CDW1,0x10,CDW1)
> +        }
> +        //
> +        // update DWORD3 in the buffer
> +        //
> +        Store(CTRL,CDW3)
> +          Return(Arg3)
> +
> +      } Else {
> +        //
> +        // Just indicate unrecognized UUID
> +        // Leave it at that
> +        //
> +        Or (CDW1,4,CDW1)
> +        if(LEqual(DBGM, 0x01)){
> +          Store (0xEE, IO80)
> +        }
> +        Return(Arg3)
> +      }
> +  } // End _OSC
> +
> +#include "PchApic.asi"
> +
> +
> +#define RESOURCE_CHUNK1_OFF     0
> +#define RESOURCE_CHUNK2_OFF    16   //(RESOURCE_CHUNK1_OFF + 16)
> +#define RESOURCE_CHUNK3_OFF    24   //(RESOURCE_CHUNK2_OFF +  8)
> +#define RESOURCE_CHUNK4_OFF    40   //(RESOURCE_CHUNK3_OFF + 16)
> +#define RESOURCE_CHUNK5_OFF    56   //(RESOURCE_CHUNK4_OFF + 16)
> +#define RESOURCE_CHUNK6_OFF    82   //(RESOURCE_CHUNK5_OFF + 26)
> +#define RESOURCE_CHUNK7_OFF   108   //(RESOURCE_CHUNK6_OFF + 26)
> +
> +#define PciResourceStart       Local0
> +#define PciResourceLen         Local1
> +
> +  Name(P0RS, ResourceTemplate() {
> +    //RESOURCE_CHUNK1_OFF
> +    WORDBusNumber(            // Bus number resource (0); the bridge produces
> bus numbers for its subsequent buses
> +      ResourceProducer,       // bit 0 of general flags is 1
> +      MinFixed,               // Range is fixed
> +      MaxFixed,               // Range is fixed
> +      PosDecode,              // PosDecode
> +      0x0000,                 // Granularity (FIX1 - Patched by ACPI Platform Driver
> during POST)
> +      0x0000,                 // Min         (FIX1 - Patched by ACPI Platform Driver during
> POST)
> +      0x0000,                 // Max         (FIX1 - Patched by ACPI Platform Driver
> during POST)
> +      0x0000,                 // Translation
> +      0x0001,                 // Range Length = Max-Min+1 (FIX1 - Patched by ACPI
> Platform Driver during POST)
> +            ,
> +            ,
> +      FIX1                    // DescriptorName populated so iASL outputs offset for it
> in a .h file
> +    )
> +
> +    //RESOURCE_CHUNK2_OFF
> +    IO(                       // Consumed resource (CF8-CFF)
> +      Decode16,
> +      0x0cf8,
> +      0xcf8,
> +      1,
> +      8
> +    )
> +
> +    //RESOURCE_CHUNK3_OFF
> +    WORDIO(                   // Consumed-and-produced resource (all I/O below
> CF8)
> +      ResourceProducer,       // bit 0 of general flags is 0
> +      MinFixed,               // Range is fixed
> +      MaxFixed,               // Range is fixed
> +      PosDecode,
> +      EntireRange,
> +      0x0000,                 // Granularity
> +      0x0000,                 // Min
> +      0x0cf7,                 // Max
> +      0x0000,                 // Translation
> +      0x0cf8                  // Range Length
> +   )
> +
> +    //RESOURCE_CHUNK4_OFF
> +    WORDIO(                   // Consumed-and-produced resource (all I/O above
> CFF)
> +      ResourceProducer,       // bit 0 of general flags is 0
> +      MinFixed,               // Range is fixed
> +      MaxFixed,               // Range is fixed
> +      PosDecode,
> +      EntireRange,
> +      0x0000,                 // Granularity  (FIX2 - Patched by ACPI Platform Driver
> during POST)
> +      0x0000,                 // Min          (FIX2 - Patched by ACPI Platform Driver
> during POST)
> +      0x0000,                 // Max          (FIX2 - Patched by ACPI Platform Driver
> during POST)
> +      0x0000,                 // Translation
> +      0x0001,                 // Range Length (FIX2 - Patched by ACPI Platform Driver
> during POST)
> +            ,
> +            ,
> +      FIX2                    // DescriptorName populated so iASL outputs offset for it
> in a .h file
> +    )
> +
> +    //RESOURCE_CHUNK5_OFF
> +    DWORDMEMORY(              // descriptor for video RAM on video card
> +      ResourceProducer,       // bit 0 of general flags is 0
> +      PosDecode,
> +      MinFixed,               // Range is fixed
> +      MaxFixed,               // Range is Fixed
> +      Cacheable,
> +      ReadWrite,
> +      0x00000000,             // Granularity  (FIX5 - Patched by ACPI Platform Driver
> during POST)
> +      0x00000000,             // Min          (FIX5 - Patched by ACPI Platform Driver
> during POST)
> +      0x00000000,             // Max          (FIX5 - Patched by ACPI Platform Driver
> during POST)
> +      0x00000000,             // Translation
> +      0x00000000,             // Range Length (FIX5 - Patched by ACPI Platform
> Driver during POST)
> +                ,
> +    ,
> +      FIX5      // Descriptor Name
> +    )
> +
> +    //RESOURCE_CHUNK6_OFF
> +    DWORDMEMORY(              // descriptor for Shadow RAM
> +      ResourceProducer,       // bit 0 of general flags is 0
> +      PosDecode,
> +      MinFixed,               // Range is fixed
> +      MaxFixed,               // Range is Fixed
> +      Cacheable,
> +      ReadWrite,
> +      0x00000000,             // Granularity
> +      0x00000000,             // Min (calculated dynamically)
> +      0x00000000,             // Max (calculated dynamically)
> +      0x00000000,             // Translation
> +      0x00000000,             // Range Length (calculated dynamically)
> +                ,
> +                ,
> +      SRAM                    // DescriptorName populated so iASL doesn't flag 0 value
> fields and no tag as error
> +    )
> +/*
> +    //RESOURCE_TPM
> +    DWORDMemory(              // Consumed-and-produced resource(all of
> memory space)
> +      ResourceProducer,       // bit 0 of general flags is 0
> +      PosDecode,              // positive Decode
> +      MinFixed,               // Range is fixed
> +      MaxFixed,               // Range is fixed
> +      NonCacheable,
> +      ReadWrite,
> +      0x00000000,             // Granularity
> +      0xFED40000,             // Min (calculated dynamically)
> +      0xFEDFFFFF,             // Max = 4GB - 1MB  (fwh + fwh alias...)
> +      0x00000000,             // Translation
> +      0x000C0000              // Range Length (calculated dynamically)
> +    )
> +*/
> +
> DWordMemory(ResourceProducer,PosDecode,MinFixed,MaxFixed,NonCac
> heable,
> +        ReadWrite,0x00,0xFE010000,0xFE010FFF,0x00,0x1000)
> +
> +    //
> +    // PCI RESOURCE_32bit
> +    //
> +    DWORDMemory(              // Consumed-and-produced resource(all of
> memory space)
> +      ResourceProducer,       // bit 0 of general flags is 0
> +      PosDecode,              // positive Decode
> +      MinFixed,               // Range is fixed
> +      MaxFixed,               // Range is fixed
> +      NonCacheable,
> +      ReadWrite,
> +      0x00000000,             // Granularity (FIX3 - Patched by ACPI Platform Driver
> during POST)
> +      0x00000000,             // Min (calculated dynamically) (FIX3 - Patched by
> ACPI Platform Driver during POST)
> +      0x00000000,             // Max = 4GB - 1MB  (fwh + fwh alias) (FIX3 - Patched
> by ACPI Platform Driver during POST)
> +      0x00000000,             // Translation
> +      0x00000000,             // Range Length (calculated dynamically) (FIX3 -
> Patched by ACPI Platform Driver during POST)
> +                ,
> +                ,
> +      FIX3                    // DescriptorName populated so iASL outputs offset for it
> in a .h file
> +    )
> +
> +    //
> +    // PCI RESOURCE_64bit
> +    //
> +    QWORDMemory(              // Consumed-and-produced resource(all of
> memory space)
> +      ResourceProducer,       // bit 0 of general flags is 0
> +      PosDecode,              // positive Decode
> +      MinFixed,               // Range is fixed
> +      MaxFixed,               // Range is fixed
> +      NonCacheable,
> +      ReadWrite,
> +      0x00000000000,          // Granularity (FIX4 - Patched by ACPI Platform
> Driver during POST)
> +      0x00000000000,          // Min (calculated dynamically) (FIX4 - Patched by
> ACPI Platform Driver during POST)
> +      0x00000000000,          // Max = 4GB - 1MB  (fwh + fwh alias) (FIX4 -
> Patched by ACPI Platform Driver during POST)
> +      0x00000000000,          // Translation
> +      0x00000000000,          // Range Length (calculated dynamically) (FIX4 -
> Patched by ACPI Platform Driver during POST)
> +                   ,
> +                   ,
> +      FIX4                    // DescriptorName populated so iASL outputs offset for it
> in a .h file
> +    )
> +  }) // end of P0RS Buffer
> +
> +  OperationRegion(TMEM, PCI_Config, 0x00, 0x100)
> +  Field(TMEM, ByteAcc, NoLock, Preserve) {
> +    Offset(0x40),
> +    , 4,
> +    BSEG, 4,
> +    PAMS, 48,
> +    Offset(0x52),
> +    DIM0, 4,
> +    DIM1, 4,
> +    , 8,
> +    DIM2, 4,
> +  }
> +
> +  Name(MTBL, Package(0x10) {
> +    0x0,
> +    0x20,
> +    0x20,
> +    0x30,
> +    0x40,
> +    0x40,
> +    0x60,
> +    0x80,
> +    0x80,
> +    0x80,
> +    0x80,
> +    0xc0,
> +    0x100,
> +    0x100,
> +    0x100,
> +    0x200
> +  })
> +
> +  Name(ERNG, Package(0xd) {
> +    0xc0000,
> +    0xc4000,
> +    0xc8000,
> +    0xcc000,
> +    0xd0000,
> +    0xd4000,
> +    0xd8000,
> +    0xdc000,
> +    0xe0000,
> +    0xe4000,
> +    0xe8000,
> +    0xec000,
> +    0xf0000
> +  })
> +
> +  Name(PAMB, Buffer(0x7) {
> +  })
> +
> +  Method(EROM, 0x0, NotSerialized) {
> +    CreateDWordField(P0RS, ^SRAM._MIN, RMIN) // Do not reference hard-
> coded address
> +    CreateDWordField(P0RS, ^SRAM._MAX, RMAX) // Do not reference
> hard-coded address
> +    CreateDWordField(P0RS, ^SRAM._LEN, RLEN) // Do not reference hard-
> coded address
> +    CreateByteField(PAMB, 0x6, BREG)
> +    Store(PAMS, PAMB)
> +    Store(BSEG, BREG)
> +    Store(0x0, RMIN)
> +    Store(0x0, RMAX)
> +    Store(0x0, RLEN)
> +    Store(0x0, Local0)
> +    While(LLess(Local0, 0xd))
> +    {
> +      ShiftRight(Local0, 0x1, Local1)
> +      Store(DerefOf(Index(PAMB, Local1, )), Local2)
> +      If(And(Local0, 0x1, ))
> +      {
> +          ShiftRight(Local2, 0x4, Local2)
> +      }
> +      And(Local2, 0x3, Local2)
> +      If(RMIN)
> +      {
> +        If(Local2)
> +        {
> +          Add(DerefOf(Index(ERNG, Local0, )), 0x3fff, RMAX)
> +          If(LEqual(RMAX, 0xf3fff))
> +          {
> +            Store(0xfffff, RMAX)
> +          }
> +          Subtract(RMAX, RMIN, RLEN)
> +          Increment(RLEN)
> +        }
> +        Else
> +        {
> +          Store(0xc, Local0)
> +        }
> +      }
> +      Else
> +      {
> +        If(Local2)
> +        {
> +          Store(DerefOf(Index(ERNG, Local0, )), RMIN)
> +          Add(DerefOf(Index(ERNG, Local0, )), 0x3fff, RMAX)
> +          If(LEqual(RMAX, 0xf3fff))
> +          {
> +            Store(0xfffff, RMAX)
> +          }
> +          Subtract(RMAX, RMIN, RLEN)
> +          Increment(RLEN)
> +        }
> +        Else
> +        {
> +        }
> +      }
> +      Increment(Local0)
> +    }
> +  }
> +
> +  // Current resource template return
> +  Method(_CRS, 0x0, NotSerialized) {
> +    EROM()
> +    Return(P0RS)
> +  }
> +
> diff --git
> a/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/PC
> 0610nmEjd.asi
> b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/PC
> 0610nmEjd.asi
> new file mode 100644
> index 0000000000..966cd82640
> --- /dev/null
> +++
> b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/PC
> 0610nmEjd.asi
> @@ -0,0 +1,10 @@
> +/** @file
> +
> +  @copyright
> +  Copyright 2016 - 0610 Intel Corporation. <BR>
> +
> +  SPDX-License-Identifier: BSD-2-Clause-Patent
> +**/
> +
> +  // Eject device if PC06 is removed.
> +  Name(_EJD,"\\_SB.PC06")   // Dependent on PC18
> diff --git
> a/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/PC
> 1210nmEjd.asi
> b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/PC
> 1210nmEjd.asi
> new file mode 100644
> index 0000000000..6c210da62d
> --- /dev/null
> +++
> b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/PC
> 1210nmEjd.asi
> @@ -0,0 +1,10 @@
> +/** @file
> +
> +  @copyright
> +  Copyright 2016 - 2018 Intel Corporation. <BR>
> +
> +  SPDX-License-Identifier: BSD-2-Clause-Patent
> +**/
> +
> +  // Eject device if PC12 is removed.
> +  Name(_EJD,"\\_SB.PC12")   // Dependent on PC18
> diff --git
> a/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/PC
> 1810nmEjd.asi
> b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/PC
> 1810nmEjd.asi
> new file mode 100644
> index 0000000000..7b6aa91cd5
> --- /dev/null
> +++
> b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/PC
> 1810nmEjd.asi
> @@ -0,0 +1,10 @@
> +/** @file
> +
> +  @copyright
> +  Copyright 2016 - 2018 Intel Corporation. <BR>
> +
> +  SPDX-License-Identifier: BSD-2-Clause-Patent
> +**/
> +
> +  // Eject device if PC18 is removed.
> +  Name(_EJD,"\\_SB.PC18")   // Dependent on PC18
> diff --git
> a/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/Pch
> Apic.asi
> b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/Pc
> hApic.asi
> new file mode 100644
> index 0000000000..e76063647e
> --- /dev/null
> +++
> b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/Pc
> hApic.asi
> @@ -0,0 +1,18 @@
> +/** @file
> +
> +  @copyright
> +  Copyright 2001 - 2012 Intel Corporation. <BR>
> +
> +  SPDX-License-Identifier: BSD-2-Clause-Patent
> +**/
> +
> +Device(APIC) {
> +  Name (_HID,EISAID("PNP0003"))        // APIC resources
> +  Name (_CRS, ResourceTemplate() {
> +    //
> +    // APIC range(0xFEC0_0000 to 0xFECF_FFFF)
> +    //
> +    Memory32Fixed (ReadOnly, 0xFEC00000, 0x100000) // IO APIC
> +    }
> +  )
> +}
> diff --git
> a/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/Pci
> eHp.asi
> b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/Pci
> eHp.asi
> new file mode 100644
> index 0000000000..64484e5402
> --- /dev/null
> +++
> b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/Pci
> eHp.asi
> @@ -0,0 +1,669 @@
> +/** @file
> +
> +  @copyright
> +  Copyright 2007 - 2020 Intel Corporation. <BR>
> +
> +  SPDX-License-Identifier: BSD-2-Clause-Patent
> +**/
> +
> +  External (DBGM, FieldUnitObj)
> +
> +  Method (_INI, 0, NotSerialized)
> +  {
> +  }
> +
> +  Name(_HPP, Package(){0x08, 0x40, SERR, PERR})
> +
> +  //
> +  // begin hotplug code
> +  //
> +  Name(SHPC, 0x40)            // Slot Hot-plug Capable
> +
> +  Name(SPDS, 0x040)           // Slot Presence Detect State
> +
> +  Name(MRLS, 0x0)             // MRL Closed, Standby Power to slot is on
> +  Name(CCOM, 0x010)           // Command Complete
> +  Name(SPDC, 0x08)            // Slot Presence Detect Changes
> +  Name(MRLC, 0x04)            // Slot MRL Changed
> +  Name(SPFD, 0x02)            // Slot Power Fault Detected
> +  Name(SABP, 0x01)            // Slot Attention Button Pressed
> +
> +  Name(SPOF, 0x10)            // Slot  Power Off
> +  Name(SPON, 0x0F)            // Slot  Power On Mask
> +
> +  Name(ALMK, 0x1C)            // Slot Atten. LED Mask
> +  Name(ALON, 0x01)            // Slot Atten. LED On
> +  Name(ALBL, 0x02)            // Slot Atten LED Blink
> +  Name(ALOF, 0x03)            // Slot Atten LED Off
> +
> +  Name(PLMK, 0x13)            // Slot Pwr. LED Mask
> +  Name(PLON, 0x04)            // Slot Pwr. LED On
> +  Name(PLBL, 0x08)            // Slot Pwr. LED Blink
> +  Name(PLOF, 0x0C)            // Slot Pwr. LED Off
> +
> +  //;*************************************
> +  //;   Bit 3 = Presence Detect Event
> +  //;   Bit 2 = MRL Sensor Event
> +  //;   Bit 1 = PWR Fault Event
> +  //;   Bit 0 = Attention Button Event
> +  //;*************************************
> +  Name(HPEV, 0xF)             // Possible interrupt events (all)
> +
> +
> //;********************************************************
> ****************;
> +  //; PCIe Slot Capabilities Register
> +  //;    Bit - 31-5  -  Not used
> +  //;    Bit -   4   -  Power Indicator Present.
> +  //;    Bit -   3   -  Attention Indicator Present.
> +  //;    Bit -   2   -  MRL Sensor Present.
> +  //;    Bit -   1   -  Power Controller Present.
> +  //;    Bit -   0   -  Attention Button Present.
> +  //;
> +  //; PCIe Slot control Register
> +  //;    Bit -  10   -  PWR Control Disable
> +  //;    Bit - 9:8   -  Attn Indicator
> +  //;    Bit - 7:6   -  PWR Indicator
> +  //;    Bit -   5   -  Hot-Plug Interrupt Event Enable
> +  //;    Bit -   4   -  Command Complete Interrupt enable
> +  //;    Bit -   3   -  Presence Detect Changed Interrupt enable
> +  //;    Bit -   2   -  MRL Sensor Changed Interrupt enable
> +  //;    Bit -   1   -  PwrFault Detect Interrupt enable
> +  //;    Bit -   0   -  Attention Button Pressed Interrupt Enable
> +  //;
> +  //; PCIe Slot Status Registers
> +  //;    Bit -   6   -  Presence Detect State.
> +  //;    Bit -   5   -  MRL Sensor State.
> +  //;    Bit -   4   -  Command Completed.
> +  //;
> +  //;    RWC Status Bits
> +  //;
> +  //;    Bit -   3   -  Presence Detect Changed.
> +  //;    Bit -   2   -  MRL Sensor Changed.
> +  //;    Bit -   1   -  Power Fault Detected.
> +  //;    Bit -   0   -  Attention Button Pressed.
> +
> //;********************************************************
> ****************;
> +  OperationRegion (PXCP, PCI_Config, IRPC, 0x40)
> +  Field (PXCP, ByteAcc, NoLock, Preserve) {
> +    Offset (0x10),            // Link Control Register
> +    , 4,
> +    LDIS, 1,                  // Link Disable bit4.
> +    , 11,
> +    Offset (0x14),            // PCI Slot Capabilities Register
> +    ATBP, 1,                  // Attention Button Present
> +    , 1,
> +    MRSP, 1,                  // MRL Sensor Present
> +    ATIP, 1,                  // Attention Indicator Present
> +    PWIP, 1,                  // Power Indicator Present
> +    , 14,
> +    PSNM, 13,                 // Physical Slot Number
> +    Offset (0x18),            // Slot Control Register
> +    ABIE, 1,                  // Attention Button Pressed Interrupt Enable
> +    PFIE, 1,                  // Power Fault Detected Interrupt Enable
> +    MSIE, 1,                  // MRL Sensor Changed Interrupt Enable
> +    PDIE, 1,                  // Presence Detect Changed Interrupt Enable.
> +    CCIE, 1,                  // Command Complete Interrupt Enable.
> +    HPIE, 1,                  // Hot-plug Interrupt Enable.
> +    SCTL, 5,                  // Attn/Power indicator and Power controller.
> +    , 5,
> +    Offset (0x1A),            // Slot Status Register
> +    SSTS, 7,                  // The status bits in Slot Status Reg
> +    , 1,
> +    Offset (0x20),            // Root Status Register
> +    , 16,
> +    PMES, 1,                  // PME Status bit 16
> +    PMEP, 1,                  // PME Pending bit 17
> +    , 14
> +  }
> +
> +  //
> +  // These Methods replace the bit field definitions in PPA8
> +  //  that were bit fields within SCTL
> +  //
> +  Method (ATID, 0) {
> +    Return (And (SCTL, 0x03))
> +  }
> +
> +  Method (PWID, 0) {
> +    Return (ShiftRight (And (SCTL, 0x0C), 2))
> +  }
> +
> +  Method (PWCC, 0) {
> +    Return (ShiftRight (And (SCTL, 0x10), 4))
> +  }
> +
> +  //
> +  // These methods replace the bit fields definitions in PPA8
> +  //  that were bit fields within SSTS
> +  //
> +  Method (ABPS, 1) {
> +    If (LEqual (Arg0, 1)) {
> +      Or (SSTS, 0x01, SSTS)
> +    }
> +    Return (And (SSTS, 0x01))
> +  }
> +
> +  Method (PFDS, 1) {
> +    If (LEqual (Arg0, 1)) {
> +      Or (SSTS, 0x02, SSTS)
> +    }
> +    Return (ShiftRight (And (SSTS, 0x02), 1))
> +  }
> +
> +  Method (MSCS, 1) {
> +    If (LEqual (Arg0, 1)) {
> +      Or (SSTS, 0x04, SSTS)
> +    }
> +    Return (ShiftRight (And (SSTS, 0x04), 2))
> +  }
> +
> +  Method (PDCS, 1) {
> +    If (LEqual (Arg0, 1)) {
> +      Or (SSTS, 0x08, SSTS)
> +    }
> +    Return (ShiftRight (And (SSTS, 0x08), 3))
> +  }
> +
> +  Method (CMCS, 1) {
> +    If (LEqual (Arg0, 1)) {
> +      Or (SSTS, 0x10, SSTS)
> +    }
> +    Return (ShiftRight (And (SSTS, 0x10), 4))
> +  }
> +
> +  Method (MSSC, 1) {
> +    If (LEqual (Arg0, 1)) {
> +      Or (SSTS, 0x20, SSTS)
> +    }
> +    Return (ShiftRight (And (SSTS, 0x20), 5))
> +  }
> +
> +  Method (PRDS, 1) {
> +    If (LEqual (Arg0, 1)) {
> +      Or (SSTS, 0x40, SSTS)
> +    }
> +    Return (ShiftRight (And (SSTS, 0x40), 6))
> +  }
> +
> +
> +
> //;********************************************************
> ****************;
> +  //; This OSHP (Operating System Hot Plug) method is provided for each
> HPC
> +  //; which is controlled by ACPI. This method disables ACPI access to the
> +  //; HPC and restores the normal System Interrupt and Wakeup Signal
> +  //; connection.
> +
> //;********************************************************
> ****************;
> +  Method(OSHP) {              // OS call to unhook Legacy ASL PCI-Express HP
> code.
> +    Store(SSTS, Local0)       // Clear any status (RW1C)
> +    Store(Local0, SSTS)       // (use write thru Local to avoid iasl warning
> 'Duplicate value in list ^  (Source is the same as Target)')
> +  }
> +
> +
> //;********************************************************
> ****************;
> +  //; Hot Plug Controller Command Method
> +  //;
> +  //; Input: Arg0 - Command to issue
> +  //;
> +
> //;********************************************************
> ****************;
> +  Method(HPCC,1) {
> +    Store(SCTL, Local0)           // get current command state
> +    Store(0,    Local1)           // reset the timeout value
> +    If(LNotEqual(Arg0, Local0)) { // see if state is different
> +      Store(Arg0, SCTL)           // Update the Slot Control
> +      While(LAnd (LNot(CMCS(0)), LNotEqual(100, Local1))) { // spin while
> CMD complete bit is not set,
> +                                                            // check for timeout to avoid dead loop
> +        if(LEqual(DBGM, 0x01)){
> +          Store(0xFB, IO80)
> +        }
> +        Sleep(2)                  // allow processor time slice
> +        Add(Local1, 2, Local1)
> +      }
> +      CMCS(1)                     // Clear the command complete status
> +    }
> +  }
> +
> +
> //;********************************************************
> ****************;
> +  //; Attention Indicator Command
> +  //;
> +  //; Input: Arg0 - Command to issue
> +  //;               1 = ON
> +  //;               2 = Blink
> +  //;               3 = OFF
> +
> //;********************************************************
> ****************;
> +  Method(ATCM,1) {
> +    Store(SCTL, Local0)           // Get Slot Control
> +    And(Local0, ALMK, Local0)     // Mask the Attention Indicator Bits
> +    If(LEqual(Arg0, 0x1)){        // Attenion indicator "ON?"
> +      Or(Local0, ALON, Local0)    // Set the Attention Indicator to "ON"
> +    }
> +    If(LEqual(Arg0, 0x2)){        // Attenion indicator "BLINK?"
> +      Or(Local0, ALBL, Local0)    // Set the Attention Indicator to "BLINK"
> +    }
> +    If(LEqual(Arg0, 0x3)){        // Attenion indicator "OFF?"
> +      Or(Local0, ALOF, Local0)    // Set the Attention Indicator to "OFF"
> +    }
> +    HPCC(Local0)
> +  }
> +
> +
> //;********************************************************
> ****************;
> +  //; Power Indicator Command
> +  //;
> +  //; Input: Arg0 - Command to issue
> +  //;               1 = ON
> +  //;               2 = Blink
> +  //;               3 = OFF
> +
> //;********************************************************
> ****************;
> +  Method(PWCM,1){
> +    Store(SCTL, Local0)           // Get Slot Control
> +    And(Local0, PLMK, Local0)     // Mask the Power Indicator Bits
> +    If(LEqual(Arg0, 0x1)){        // Power indicator "ON?"
> +      Or(Local0, PLON, Local0)    // Set the Power Indicator to "ON"
> +    }
> +    If(LEqual(Arg0, 0x2)){        // Power indicator "BLINK?"
> +      Or(Local0, PLBL, Local0)    // Set the Power Indicator to "BLINK"
> +    }
> +    If(LEqual(Arg0, 0x3)){        // Power indicator "OFF?"
> +      Or(Local0, PLOF, Local0)    // Set the Power Indicator to "OFF"
> +    }
> +    HPCC(Local0)
> +  }
> +
> +
> //;********************************************************
> ****************;
> +  //; Power Slot Command
> +  //;
> +  //; Input: Arg0 - Command to issue
> +  //;               1 = Slot Power ON
> +  //;               2 = Slot Power Off
> +
> //;********************************************************
> ****************;
> +  Method(PWSL,1){
> +    Store(SCTL, Local0)           // Get Slot Control
> +    If(Arg0){                     // Power Slot "ON" Arg0 = 1
> +      And(Local0, SPON, Local0)   // Turns the Power "ON"
> +    } Else {                      // Power Slot "OFF"
> +      Or(Local0, SPOF, Local0)    // Turns the Power "OFF"
> +    }
> +    HPCC(Local0)
> +  }
> +
> +
> //;********************************************************
> ****************;
> +  //; _OST Methods to indicate that the device Eject/insert request is
> +  //; pending, OS could not complete it
> +  //;
> +  //; Input: Arg0 - Value used in Notify to OS
> +  //;               0x00 - card insert
> +  //;               0x03 - card eject
> +  //;        Arg1 - status of Notify
> +  //;               0 - success
> +  //;               0x80 - Ejection not supported by OSPM
> +  //;               0x81 - Device in use
> +  //;               0x82 - Device Busy
> +  //;               0x84 - Ejection in progress-pending
> +
> //;********************************************************
> ****************;
> +  Method(_OST,3,Serialized) {
> +    Switch(And(Arg0,0xFF)) {      // Mask to retain low byte
> +      Case(0x03) {                // Ejection Request
> +        Switch(ToInteger(Arg1)) {
> +          Case(Package() {0x80, 0x81, 0x82, 0x83}) {
> +            //
> +            // Ejection Failure for some reason
> +            //
> +            If (Lnot(PWCC())) {     // if slot is powered
> +              PWCM(0x1)           // Set PowerIndicator to ON
> +              Store(0x1,ABIE)     // Set AttnBtn Interrupt ON
> +            }
> +          }
> +        }
> +      }
> +    }
> +    #include "IioPcieEdpcOst.asi"
> +  } // End _OST
> +
> +  //
> +  // _DSM Device Specific Method
> +  //
> +  // Arg0: UUID Unique function identifier
> +  // Arg1: Integer Revision Level
> +  // Arg2: Integer Function Index (0 = Return Supported Functions)
> +  // Arg3: Package Parameters
> +  Method(_DSM, 4, Serialized) {
> +    //
> +    // Switch based on which unique function identifier was passed in
> +    //
> +    If (LEqual(Arg0, ToUUID ("E5C937D0-3553-4d7a-9117-EA4D19C3434D"))) {
> +      //
> +      // _DSM Definitions for Latency Tolerance Reporting
> +      //
> +      // Arguments:
> +      // Arg0: UUID: E5C937D0-3553-4d7a-9117-EA4D19C3434D
> +      // Arg1: Revision ID: 3
> +      // Arg2: Function Index: 0, c, d
> +      // Arg3: Empty Package
> +      //
> +      // Switch by function index
> +      //
> +      Switch(ToInteger(Arg2)) {
> +        //
> +        // Function Index:0
> +        // Standard query - A bitmask of functions supported
> +        //
> +        Case (0) {
> +          Name(OPTS, Buffer(2) {0, 0})
> +          CreateBitField(OPTS, 0, FUN0)
> +          CreateBitField(OPTS, 12, FUNC)
> +          CreateBitField(OPTS, 13, FUND)
> +
> +          Store(1, FUN0)
> +          Store(1, FUNC)
> +          Store(1, FUND)
> +          Return(OPTS)
> +        }
> +        //
> +        // Function Index: C
> +        // Downstream Port Containment Hint
> +        //
> +        Case(12) {
> +            Return(1)
> +        }
> +
> +        //
> +        // Function Index: D
> +        // Downstream Port Containment Device Location
> +        //
> +        Case(13) {
> +          Name(DLOC, Buffer(2){0, 0})
> +          CreateField(DLOC, 0, 3, DFUN)
> +          CreateField(DLOC, 3, 5, DDEV)
> +          CreateField(DLOC, 8, 8, DBUS)
> +          Store(_BBN, DBUS)
> +          store(_ADR, Local2)
> +          And(Local2, 0xffff, Local3)
> +          ShiftRight (Local2, 16, Local4)
> +          Store(Local4, DDEV)
> +          Store(Local3, DFUN)
> +          Return(ToInteger(DLOC))
> +        }
> +
> +      } // End of switch(Arg2)
> +    } // End of if
> +    return (Buffer() {0x00})
> +  } // End of _DSM
> +
> +
> //;********************************************************
> ****************;
> +  //; Eject Control Methods to indicate that the device is hot-ejectable and
> +  //; should "eject" the device.
> +  //;
> +  //;
> +
> //;********************************************************
> ****************;
> +  Method(EJ0L){
> +    if(LEqual(DBGM, 0x01)){
> +      Store(0xFF, IO80)
> +    }
> +    Store(SCTL, Local0)             // Get IIO Port Control state
> +    if( LNot( LEqual( ATID(), 1))) {  // Check if Attention LED is not solid "ON"
> +      And(Local0, ALMK, Local0)     //  Mask the Attention Indicator Bits
> +      Or(Local0, ALBL, Local0)      //  Set the Attention Indicator to blink
> +    }
> +    HPCC(Local0)                    // issue command
> +
> +    Store(SCTL, Local0)             // Get IIO Port Control state
> +    Or(Local0, SPOF, Local0)        // Set the Power Controller Control to Power
> Off
> +    HPCC(Local0)
> +
> +    Store(SCTL, Local0)             // Get IIO Port Control state
> +    Or(Local0, PLOF, Local0)        // Set the Power Indicator to Off.
> +    HPCC(Local0)
> +
> +    Store(SCTL, Local0)             // Get IIO Port Control state
> +    Or(Local0, ALOF, Local0)        // Set the Attntion LED to Off.
> +    HPCC(Local0)
> +
> +  }  // End of EJ0L
> +
> +
> //;********************************************************
> ****************;
> +  //; PM_PME Wake Handler for All Slots
> +  //;
> +  //; Input: Arg0 - Slot Numnber
> +  //;
> +
> //;********************************************************
> ****************;
> +  Method(PMEH,1){                   // Handler for PCI-E PM_PME Wake
> Event/Interupt (GPI xxh)
> +    If(And(HPEV, SSTS)){            // Check for Hot-Plug Events
> +      If(ABPS(0)) {
> +        if(LEqual(DBGM, 0x01)){
> +          if(LEqual(DBGM, 0x01)){
> +            Store (Arg0, IO80)          // Send slot number to Port 80
> +          }
> +        }
> +        ABPS(1)                     // Clear the interrupt status
> +        Sleep(200)                  // delay 200ms
> +      }
> +    }
> +    Return (0xff)                   // Indicate that this controller did not interrupt
> +  }  // End of Method PMEH
> +
> +
> //;********************************************************
> ****************;
> +  //; Hot-Plug Handler for All Slots.
> +  //;
> +  //; Input: Arg0 - Slot Number
> +  //;
> +
> //;********************************************************
> ****************;
> +  Method(HPEH,1){                   // Handler for PCI-E Hot-Plug Event/Interupt
> (GPI xxh)
> +    if(LEqual(DBGM, 0x01)){
> +      Store(0xFE, IO80)
> +    }
> +    Sleep(100)
> +    Store(0,CCIE)                   // Disable command interrupt
> +    If(And(HPEV, SSTS)){            // Check for Hot-Plug Events
> +      if(LEqual(DBGM, 0x01)){
> +        Store(0xFD, IO80)
> +      }
> +      Sleep(10)
> +      if(LEqual(DBGM, 0x01)){
> +        Store (Arg0, IO80)            // Send slot number to Port 80
> +      }
> +      Sleep(10)
> +      Store(PPXH(), Local0)         // Call Hot plug Interrupt Handler
> +      Return(Local0)                // Return PPXH information
> +    }
> +    Else{
> +      Return (0xff)                 // Indicate that this controller did not interrupt
> +    }
> +    if(LEqual(DBGM, 0x01)){
> +      Store(0xFC, IO80)
> +    }
> +    Sleep(10)
> +  }  // End of Method HPEH
> +
> +
> //;********************************************************
> ****************;
> +  //; Interrut Event Handler
> +  //;
> +  //;
> +
> //;********************************************************
> ****************;
> +  Method(PPXH){                       // Hot plug Interrupt Handler
> +    //
> +    // Check for the Atention Button Press, Slot Empty/Presence, Power
> Controller Control.
> +    //
> +    Sleep(200)                        // HW Workaround for AttentionButton Status to
> stabilise
> +    If(ABPS(0)) {                     // Check if Attention Button Pressed
> +      If(LNot(PRDS(0))) {             // See if nothing installed (no card in slot)
> +        Store(0x1, LDIS)              // Disable the Link associated with PCI-E port
> +        PWSL(0x0)                     // make sure Power is Off
> +        PWCM(0x3)                     // Set Power Indicator to "OFF"
> +        //
> +        // Check for MRL here and set attn indicator accordingly
> +        //
> +        If(LEqual(MSSC(0),MRLS)) {    // Standby power is on - MRL closed
> +          ATCM(0x2)                   // Set Attention Indicator to "BLINK"
> +        } else {                      // Standby power is off - MRL open
> +         ATCM(0x3)                    // set attention indicator "OFF"
> +        }
> +        Store(0x0, ABIE)              // set Attention Button Interrupt to disable
> +        ABPS(1)                       // Clear the interrupt status
> +        Sleep(200)                    // delay 200ms
> +        Return(0xff)                  // Attn Button pressed without card in slot. Do
> nothing
> +      }
> +      //
> +      // Card is present in slot so....
> +      //
> +      Store(0x0, ABIE)                // set Attention Button Interrupt to disable
> +                                      // Attn Btn Interrupt has to be enabled only after an
> insert oprn
> +      ABPS(1)                         // Clear the interrupt status
> +      Sleep(200)                      // delay 200ms
> +      //
> +      // Check for MRL here - only if SPWR is OFF blink AttnInd and retun 0xff
> +      //
> +      //If(LNot(LEqual(MSSC()),MRLS))) { // Standby power is off
> +      //   PWSL(0x0)                    // make sure Power is Off
> +      //   PWCM(0x3)                    // Set Power Indicator to "OFF"
> +      //   ATCM(0x2)                    // Set Attention Indicator to "BLINK"
> +      //   Return(0xff)                 // Attn Button pressed with card in slot, but MRL
> open. Do nothing
> +      //}
> +      //Card Present, if StandbyPwr is ON proceed as below with Eject
> Sequence
> +      If(PWCC()) {                      // Slot not Powered
> +        PWCM(0x3)                     // Set Power Indicator to "OFF"
> +        ATCM(0x2)                     // Set Attention Indicator to "BLINK"
> +        Return(0xff)                  // Attn Button pressed with card in slot, MRL
> closed, Slot not powered. Do nothing
> +      } Else {                        // See if Slot is already Powered
> +        PWCM(0x2)                     // Set power Indicator to BLINK
> +        Sleep(600)                    // Wait 100ms
> +        Store(600, Local0)            // set 5 second accumulator to 0
> +        ABPS(1)                       // Clear the interrupt status
> +        Sleep(200)                    // delay 200ms
> +        While(LNot(ABPS(0))) {           // check for someone pressing Attention
> +          Sleep(200)                  // Wait 200ms
> +          Add(Local0, 200, Local0)
> +          If(LEqual(5000, Local0)) {  // heck if 5sec has passed without pressing
> attnetion btn
> +            ABPS(1)                   // Clear the interrupt status
> +            Sleep(200)                // delay 200ms
> +            Return (0x3)              // continue with Eject request
> +          }
> +        }
> +        PWCM(0x1)                     // Set power Indicator baCK "ON"
> +        ABPS(1)                       // Clear the Attention status
> +        Sleep(200)                    // delay 200ms
> +        Store(0x1, ABIE)              // set Attention Button Interrupt to enable
> +        Return (0xff)                 // do nothing and abort
> +      }
> +    }  // End if for the Attention Button Hot Plug Interrupt.
> +
> +    If(PFDS(0)) {                     // Check if Power Fault Detected
> +      PFDS(1)                         // Clear the Power Fault Status
> +      PWSL(0x0)                       // set Power Off
> +      PWCM(0x3)                       // set power indicator to OFF
> +      ATCM(0x1)                       // set attention indicator "ON"
> +      Store(0x1, LDIS)                // Disable the Link associated with PCI-E port
> +      Return(0x03)            // Eject request.
> +    }  // End if for the Power Fault Interrupt.
> +
> +    If(MSCS(0)) {                     // Check interrupt caused by the MRL Sensor
> +      MSCS(1)                         // Clear the MRL Status
> +      If(LEqual(MSSC(0),MRLS)) {      // Standby power is on - MRL closed
> +        If(PRDS(0)) {                 // Card is Present
> +
> +        ATCM(0x3)                     // Set Attention Indicator to off
> +        PWCM(0x2)                     // Set Power Indicator to Blink
> +        Sleep(600)                    // Wait 100ms
> +        Store(600, Local0)            // set 5 second accumulator to 0
> +        ABPS(1)                       // Clear the interrupt status
> +        While(LNot(ABPS(0))) {           // check for someone pressing Attention
> +          Sleep(200)                  // Wait 200ms
> +          Add(Local0, 200, Local0)
> +          If(LEqual(5000, Local0)) {  // Check if 5 sec elapsed
> +            Store(0x1, ABIE)          // Enable Attention button interrupt
> +            ATCM(0x3)                 // set attention indicator "OFF"
> +            Store(0x0, LDIS)          // Enable the Link associated with PCI-E port
> +            PWSL(0x1)                 // Power the Slot
> +            Sleep(500)                // Wait for .5 Sec for the Power to Stabilize.
> +            // Check for the Power Fault Detection
> +            If(LNot(PFDS(0))) {                 // No Power Fault
> +              PWCM(0x1)                         // Set Power Indicator to "ON"
> +              // Or(LVLS, 0x000010000, LVLS)    // Enable the Device 4 Slot Clock
> (GPIO16)
> +              // Notify the OS to load the Driver for the card
> +              Store(0x00, Local1)
> +              Store(0x1, ABIE)                  // Enable Attention button interrupt
> +            } Else {                            // Power Fault present
> +              PWSL(0x0)                         // set Slot Power Off
> +              PWCM(0x3)                         // set power indicator to OFF
> +              ATCM(0x1)                         // set attention indicator "ON"
> +              Store(0x1, LDIS)                  // Disable the Link associated with PCI-E
> port
> +              // And (LVLS, 0x0FFFEFFFF, LVLS)  // Disable the Device 4 Slot Clock
> (GPIO16)
> +              Store(0x03, Local1)               // Eject request.
> +            }                                   // End if for the Slot Power Fault
> +              ABPS(1)                           // Clear the Attention status
> +              Sleep(200)                        // delay 200ms
> +              Return(Local1)
> +            }
> +          }
> +          //
> +          // someone pressed Attention Button
> +          //
> +          ABPS(1)                   // Clear the Attention status
> +          Sleep(200)                // delay 200ms
> +          PWSL(0x0)                 // Set Slot Power off
> +          PWCM(0x3)                 // Set Power Indicator back to "OFF"
> +          ATCM(02)                  // Set Attention Indicator to "BLINK"
> +          Store(0x1, LDIS)          // Disable the Link associated with PCI-E port
> +          Return(0xff)              // leave it off
> +          // End of Insert sequence
> +        }
> +        //MRL is closed, Card is not present
> +        PWSL(0x0)                   // Set Slot Power off
> +        PWCM(0x3)                   // Set Power Indicator back to "OFF"
> +        ATCM(02)                    // Set Attention Indicator to "BLINK"
> +        Store(0x1, LDIS)            // Disable the Link associated with PCI-E port
> +        Return(0xff)                // leave it off
> +      } Else {                      // MRL is open i.e Stdby power is turned off
> +        If(PRDS(0)) {               //card present MRL switched off
> +          ATCM(0x2)                 // Set Attention Indicator to "BLINK"
> +          If(Lnot(PWCC())) {        // If slot is powered
> +            // This event is not supported and someone has opened the MRL and
> dumped the power
> +            //  on the slot with possible pending transactions. This could hose the
> OS.
> +            // Try to Notify the OS to unload the drivers.
> +            PWSL(0x0)               // Set Slot Power off
> +            PWCM(0x3)               // Set Power Indicator back to "OFF"
> +            Store(0x1, LDIS)        // Disable the Link associated with PCI-E port
> +            Return(0x03)            // Eject request.
> +          } Else {                  // Slot not powered, MRL is opened, card still in slot -
> Eject not fully complete
> +            Return(0xFF)
> +          }
> +        }
> +        //no card present and Stdby power switched off, turn AI off
> +        ATCM(0x3)                   // Set Attention Indicator to "OFF"
> +        Return(0xff)                // leave it off
> +      }                             // End of MRL switch open/close state
> +    }                               // End of MRL Sensor State Change
> +
> +    If(PDCS(0)) {                   // Check if Presence Detect Changed Status
> +      PDCS(1)                       // Clear the Presence Detect Changed Status
> +      If(LNot(PRDS(0))) {           // Slot is Empty
> +        PWSL(0x0)                   // Set Slot Power "OFF"
> +        PWCM(0x3)                   // set power indicator to "OFF"
> +        If(LEqual(MSSC(0),MRLS)) {  // If Standby power is on
> +          ATCM(0x2)                 // Set Attention Indicator to "Blink"
> +        } else {
> +          ATCM(0x3)                 // Set Attention Indicator to "OFF"
> +        }
> +        Store(0x1, LDIS)            // Disable the Link associated with PCI-E port
> +        Return(0xFF)                // Do nothing
> +      } Else {                      // Slot Card is inserted
> +        // Irrespective of MRL state, do the following
> +        Store(0x0, LDIS)            // Enable the Link associated with PCI-E port
> +        PWSL(0x1)                   // Set Slot Power ON
> +        Sleep(500)                  // Wait for .5 Sec for the Power to Stabilize.
> +        If(LNot(PFDS(0))) {         // No Power Fault
> +          PWCM(0x1)                 // Set Power Indicator to "ON"
> +          Store(0x00, Local1)
> +          Store(0x1, ABIE)          // Enable Attention button interrupt
> +          ATCM(0x3)                 // Set Attention Indicator to "OFF"
> +        } Else {                    // Power Fault present
> +          PWSL(0x0)                 // set Slot Power Off
> +          PWCM(0x3)                 // set power indicator to OFF
> +          ATCM(0x1)                 // set attention indicator "ON"
> +          Store(0x1, LDIS)          // Disable the Link associated with PCI-E port
> +          Store(0x03, Local1)       // Eject request.
> +        }                           // End if for the Slot Power Fault
> +        ABPS(1)                     // Clear the Attention status
> +        Sleep(200)                  // delay 200ms
> +        Return(Local1)
> +      }
> +    }  // End if for the Presence Detect Changed Hot Plug Interrupt.
> +    Return(0xff)    // should not get here, but do device check if it does.
> +  }  // End of method PP5H
> +  //
> +  // End of hotplug code
> +  //
> diff --git
> a/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/Pci
> eHpDev.asi
> b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/Pci
> eHpDev.asi
> new file mode 100644
> index 0000000000..ce48d3800a
> --- /dev/null
> +++
> b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/Pci
> eHpDev.asi
> @@ -0,0 +1,53 @@
> +/** @file
> +
> +  @copyright
> +  Copyright 2001 - 2019 Intel Corporation. <BR>
> +
> +  SPDX-License-Identifier: BSD-2-Clause-Patent
> +**/
> +
> +  Method(SNUM, 0, Serialized) {
> +    Store(PSNM, Local0)
> +    Return(Local0)
> +  }
> +
> +  Device(H000) {
> +    Name(_ADR, 0x00000000)
> +    Method(_SUN, 0) { Return(SNUM) } // Slot User Number
> +    Method(_EJ0, 1) { EJ0L() }   // Remove all power from the slot
> +  }
> +  Device(H001) {
> +    Name(_ADR, 0x00000001)
> +    Method(_SUN, 0) { Return(SNUM) } // Slot User Number
> +    Method(_EJ0, 1) { EJ0L() }   // Remove all power from the slot
> +  }
> +  Device(H002) {
> +    Name(_ADR, 0x00000002)
> +    Method(_SUN, 0) { Return(SNUM) } // Slot User Number
> +    Method(_EJ0, 1) { EJ0L() }   // Remove all power from the slot
> +  }
> +  Device(H003) {
> +    Name(_ADR, 0x00000003)
> +    Method(_SUN, 0) { Return(SNUM) } // Slot User Number
> +    Method(_EJ0, 1) { EJ0L() }   // Remove all power from the slot
> +  }
> +  Device(H004) {
> +    Name(_ADR, 0x00000004)
> +    Method(_SUN, 0) { Return(SNUM) } // Slot User Number
> +    Method(_EJ0, 1) { EJ0L() }   // Remove all power from the slot
> +  }
> +  Device(H005) {
> +    Name(_ADR, 0x00000005)
> +    Method(_SUN, 0) { Return(SNUM) } // Slot User Number
> +    Method(_EJ0, 1) { EJ0L() }   // Remove all power from the slot
> +  }
> +  Device(H006) {
> +    Name(_ADR, 0x00000006)
> +    Method(_SUN, 0) { Return(SNUM) } // Slot User Number
> +    Method(_EJ0, 1) { EJ0L() }   // Remove all power from the slot
> +  }
> +  Device(H007) {
> +    Name(_ADR, 0x00000007)
> +    Method(_SUN, 0) { Return(SNUM) } // Slot User Number
> +    Method(_EJ0, 1) { EJ0L() }   // Remove all power from the slot
> +  }
> diff --git
> a/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/Pci
> eNonHpDev.asi
> b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/Pci
> eNonHpDev.asi
> new file mode 100644
> index 0000000000..44872cefd4
> --- /dev/null
> +++
> b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/Pci
> eNonHpDev.asi
> @@ -0,0 +1,45 @@
> +/** @file
> +
> +  @copyright
> +  Copyright 2001 - 2019 Intel Corporation. <BR>
> +
> +  SPDX-License-Identifier: BSD-2-Clause-Patent
> +**/
> +
> +  Method(SNUM, 0, Serialized) {
> +    Store(PSNM, Local0)
> +    Return(Local0)
> +  }
> +
> +  Device(H000) {
> +    Name(_ADR, 0x00000000)
> +    Method(_SUN, 0) { Return(SNUM) } // Slot User Number
> +  }
> +  Device(H001) {
> +    Name(_ADR, 0x00000001)
> +    Method(_SUN, 0) { Return(SNUM) } // Slot User Number
> +  }
> +  Device(H002) {
> +    Name(_ADR, 0x00000002)
> +    Method(_SUN, 0) { Return(SNUM) } // Slot User Number
> +  }
> +  Device(H003) {
> +    Name(_ADR, 0x00000003)
> +    Method(_SUN, 0) { Return(SNUM) } // Slot User Number
> +  }
> +  Device(H004) {
> +    Name(_ADR, 0x00000004)
> +    Method(_SUN, 0) { Return(SNUM) } // Slot User Number
> +  }
> +  Device(H005) {
> +    Name(_ADR, 0x00000005)
> +    Method(_SUN, 0) { Return(SNUM) } // Slot User Number
> +  }
> +  Device(H006) {
> +    Name(_ADR, 0x00000006)
> +    Method(_SUN, 0) { Return(SNUM) } // Slot User Number
> +  }
> +  Device(H007) {
> +    Name(_ADR, 0x00000007)
> +    Method(_SUN, 0) { Return(SNUM) } // Slot User Number
> +  }
> diff --git
> a/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/Pla
> tform.asl
> b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/Pla
> tform.asl
> new file mode 100644
> index 0000000000..bd33a63efc
> --- /dev/null
> +++
> b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/Pla
> tform.asl
> @@ -0,0 +1,91 @@
> +/** @file
> +  ACPI DSDT table
> +
> +  @copyright
> +  Copyright 2011 - 2019 Intel Corporation. <BR>
> +
> +  SPDX-License-Identifier: BSD-2-Clause-Patent
> +**/
> +
> +//
> +// Port from client
> +//
> +
> +//
> +// Original file line: 91
> +//
> +
> +
> +  External (\_SB.OSNC, MethodObj)
> +
> +
> +
> +//
> +// Original file line: 163
> +//
> +
> +Method(ADBG,1,Serialized)
> +{
> +  Return(0)
> +}
> +
> +//
> +// Original file line: 1460
> +//
> +Scope (\)
> +{
> +  //
> +  // Global Name, returns current Interrupt controller mode;
> +  // updated from _PIC control method
> +  //
> +
> +  //
> +  // Procedure: GPRW
> +  //
> +  // Description: Generic Wake up Control Method ("Big brother")
> +  //              to detect the Max Sleep State available in ASL Name scope
> +  //              and Return the Package compatible with _PRW format.
> +  // Input: Arg0 =  bit offset within GPE register space device event will be
> triggered to.
> +  //        Arg1 =  Max Sleep state, device can resume the System from.
> +  //                If Arg1 = 0, Update Arg1 with Max _Sx state enabled in the
> System.
> +  // Output:  _PRW package
> +  //
> +  Name(PRWP, Package(){Zero, Zero})   // _PRW Package
> +
> +  Method(GPRW, 2)
> +  {
> +    Store(Arg0, Index(PRWP, 0))             // copy GPE#
> +    //
> +    // SS1-SS4 - enabled in BIOS Setup Sleep states
> +    //
> +    Store(ShiftLeft(SS1,1),Local0)          // S1 ?
> +    Or(Local0,ShiftLeft(SS2,2),Local0)      // S2 ?
> +    Or(Local0,ShiftLeft(SS3,3),Local0)      // S3 ?
> +    Or(Local0,ShiftLeft(SS4,4),Local0)      // S4 ?
> +    //
> +    // Local0 has a bit mask of enabled Sx(1 based)
> +    // bit mask of enabled in BIOS Setup Sleep states(1 based)
> +    //
> +    If(And(ShiftLeft(1, Arg1), Local0))
> +    {
> +      //
> +      // Requested wake up value (Arg1) is present in Sx list of available Sleep
> states
> +      //
> +      Store(Arg1, Index(PRWP, 1))           // copy Sx#
> +    }
> +    Else
> +    {
> +      //
> +      // Not available -> match Wake up value to the higher Sx state
> +      //
> +      ShiftRight(Local0, 1, Local0)
> +      // If(LOr(LEqual(OSFL, 1), LEqual(OSFL, 2))) {  // ??? Win9x
> +      // FindSetLeftBit(Local0, Index(PRWP,1))  // Arg1 == Max Sx
> +      // } Else {           // ??? Win2k / XP
> +     FindSetLeftBit(Local0, Index(PRWP,1))  // Arg1 == Min Sx
> +      // }
> +    }
> +
> +    Return(PRWP)
> +  }
> +}
> diff --git
> a/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/Pla
> tformGpe10nm.asi
> b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/Pla
> tformGpe10nm.asi
> new file mode 100644
> index 0000000000..4faa4cbaea
> --- /dev/null
> +++
> b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/Pla
> tformGpe10nm.asi
> @@ -0,0 +1,191 @@
> +/** @file
> +
> +  @copyright
> +  Copyright 2017 - 2020 Intel Corporation. <BR>
> +
> +  SPDX-License-Identifier: BSD-2-Clause-Patent
> +**/
> +
> +#include "MaxSocket.h"
> +External(\_SB.WERR, DeviceObj)
> +
> +//  General Purpose Event
> +
> +Scope (\_GPE) {
> +
> +  // Based on Socket ID to be notified, evaluate appropriate devices.
> +  Method(NTFC, 2){
> +    If(And(Arg0, 0x01)){
> +      Notify(\_SB.SCK0, Arg1)
> +    }
> +
> +#if MAX_SOCKET > 1
> +    If(And(Arg0, 0x02)){
> +      Notify(\_SB.SCK1, Arg1)
> +    }
> +#endif
> +
> +#if MAX_SOCKET > 2
> +    If(And(Arg0, 0x04)){
> +      Notify(\_SB.SCK2, Arg1)
> +    }
> +#endif
> +
> +#if MAX_SOCKET > 3
> +    If(And(Arg0, 0x08)){
> +      Notify(\_SB.SCK3, Arg1)
> +    }
> +#endif
> +
> +#if MAX_SOCKET > 4
> +    If(And(Arg0, 0x10)){
> +      Notify(\_SB.SCK4, Arg1)
> +    }
> +#endif
> +
> +#if MAX_SOCKET > 5
> +    If(And(Arg0, 0x20)){
> +      Notify(\_SB.SCK5, Arg1)
> +    }
> +#endif
> +
> +#if MAX_SOCKET > 6
> +    If(And(Arg0, 0x40)){
> +      Notify(\_SB.SCK6, Arg1)
> +    }
> +#endif
> +
> +#if MAX_SOCKET > 7
> +    If(And(Arg0, 0x80)){
> +      Notify(\_SB.SCK7, Arg1)
> +    }
> +#endif
> +  } //End Method NTFC
> +#if 0
> +  Method(NTFM, 2){
> +
> +    // Based on Memory Board ID to be notified, evaluate appropriate
> devices.
> +    If(And(Arg0, 0x01)){
> +      Notify(\_SB.SCK0.M000, Arg1)
> +    }
> +    If(And(Arg0, 0x02)){
> +      Notify(\_SB.SCK0.M001, Arg1)
> +    }
> +#if MAX_SOCKET > 1
> +    If(And(Arg0, 0x04)){
> +      Notify(\_SB.SCK1.M000, Arg1)
> +    }
> +    If(And(Arg0, 0x08)){
> +      Notify(\_SB.SCK1.M001, Arg1)
> +    }
> +#endif
> +#if MAX_SOCKET > 2
> +    If(And(Arg0, 0x10)){
> +      Notify(\_SB.SCK2.M000, Arg1)
> +    }
> +    If(And(Arg0, 0x20)){
> +      Notify(\_SB.SCK2.M001, Arg1)
> +    }
> +#endif
> +#if MAX_SOCKET > 3
> +    If(And(Arg0, 0x40)){
> +      Notify(\_SB.SCK3.M000, Arg1)
> +    }
> +    If(And(Arg0, 0x80)){
> +      Notify(\_SB.SCK3.M001, Arg1)
> +    }
> +#endif
> +
> +  } // End Method NTFM
> +#endif
> +
> +  Method(NTFI, 2){
> +#if MAX_SOCKET > 1
> +    If(And(Arg0, 0x01)){
> +      Notify(\_SB.PC06, Arg1)
> +      Notify(\_SB.PC07, Arg1)
> +      Notify(\_SB.PC08, Arg1)
> +      Notify(\_SB.PC09, Arg1)
> +      Notify(\_SB.PC10, Arg1)
> +      Notify(\_SB.PC11, Arg1)
> +
> +    }
> +#endif
> +#if MAX_SOCKET > 2
> +    If(And(Arg0, 0x02)){
> +      Notify(\_SB.PC12, Arg1)
> +      Notify(\_SB.PC13, Arg1)
> +      Notify(\_SB.PC14, Arg1)
> +      Notify(\_SB.PC15, Arg1)
> +      Notify(\_SB.PC16, Arg1)
> +      Notify(\_SB.PC17, Arg1)
> +    }
> +#endif
> +#if MAX_SOCKET > 3
> +    If(And(Arg0, 0x04)){
> +      Notify(\_SB.PC18, Arg1)
> +      Notify(\_SB.PC19, Arg1)
> +      Notify(\_SB.PC20, Arg1)
> +      Notify(\_SB.PC21, Arg1)
> +      Notify(\_SB.PC22, Arg1)
> +      Notify(\_SB.PC23, Arg1)
> +    }
> +#endif
> +  } //End Method NTFI
> +
> +  // Tell OS to run thru the new status of this device (Software SCI generated
> from SMM for all Hot plug events)
> +  Method (_L62, 0x0, NotSerialized) {
> +    if(LEqual(SCI0, 3)) { // Device ejection (Invoked with _EJ0 method called)
> +      //NTFM  (SCI1, 3)
> +      NTFC  (SCI2, 3)
> +      Store (0, SCI0)
> +    } ElseIf (LEqual(SCI0, 1)) { // Device check (OS can still reject online
> request based on resources and capability)
> +      NTFC (CPHP, 0)
> +      NTFI (IIOP, 0)
> +      Store (0, CPHP)
> +      Store (0, IIOP)
> +      Store (0, SCI0)
> +    }
> +
> +    #include "NvdimmGpe.asi"
> +
> +    // Retrieve leaf and root notification data pre SWGPE clear
> +    Store (NNPR (), Local0)
> +
> +    Store (0, GPEC)
> +
> +    if(LEqual(WSCI, 0x1)) {
> +      Store(0, WSCI)
> +      if(LEqual(DBGM, 0x01)){
> +        Store (0x4A, IO80)
> +      }
> +      If (CondRefOf (\_SB.WERR)) {
> +        Notify (\_SB.WERR, 0x80)
> +      }
> +    }
> +
> +    // Perform NVDIMM leaf and root notifications with notification data
> updated post SWGPE clear
> +    NNDO (Local0)
> +
> +    ///
> +    /// Handle HWP SCI event
> +    ///
> +    //#include "HwpLvt.asi"
> +
> +    //
> +    //  Handle eDPC SWGPE event
> +    //
> +    #include "IioPcieEdpcGpe.asi"
> +  }
> +
> +  // PME supported for Slots, use GPE 9 for PME
> +  // Hot plug on all slots for now, change later.
> +  // Slot numbers on silk screen might be different than the port number,
> currently use port numbers.
> +  //
> +  // IIO PCI_E Slot Hotplug GPE Event
> +  //
> +  Method (_L61, 0, NotSerialized) {
> +    #include "IioPcieHotPlugGpeHandler10nm.asl"
> +  }// end of _L61 GPE Method
> +
> +}// end of _GPE scope
> diff --git
> a/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/Pla
> tformPciTree10nm_EPRP.asi
> b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/Pla
> tformPciTree10nm_EPRP.asi
> new file mode 100644
> index 0000000000..2ad0a32d25
> --- /dev/null
> +++
> b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/Pla
> tformPciTree10nm_EPRP.asi
> @@ -0,0 +1,5388 @@
> +/** @file
> +  @copyright
> +  Copyright 2005 - 2020 Intel Corporation. <BR>
> +
> +  SPDX-License-Identifier: BSD-2-Clause-Patent
> +**/
> +
> +#include <MaxSocket.h>
> +
> +#ifndef CONCATENATE2
> +#define CONCATENATE2_(a, b) a ## b
> +#define CONCATENATE2(a, b)  CONCATENATE2_(a, b)
> +#endif
> +#ifndef CONCATENATE3
> +#define CONCATENATE3_(a, b, c) a ## b ## c
> +#define CONCATENATE3(a, b, c) CONCATENATE3_(a, b, c)
> +#endif
> +
> +Scope (\_SB) {
> +
> +    Name (AR00, Package() {
> +        // [IIM0]: IIOMISC on PC00
> +        Package() { 0x0000FFFF, 0, 0, 16 },
> +        Package() { 0x0000FFFF, 1, 0, 17 },
> +        Package() { 0x0000FFFF, 2, 0, 18 },
> +        Package() { 0x0000FFFF, 3, 0, 19 },
> +        // [CB0A]: CB3DMA on PC00
> +        // [CB0E]: CB3DMA on PC00
> +        Package() { 0x0001FFFF, 0, 0, 17 },
> +        // [CB0B]: CB3DMA on PC00
> +        // [CB0F]: CB3DMA on PC00
> +        Package() { 0x0001FFFF, 1, 0, 18 },
> +        // [CB0C]: CB3DMA on PC00
> +        // [CB0G]: CB3DMA on PC00
> +        Package() { 0x0001FFFF, 2, 0, 19 },
> +        // [CB0D]: CB3DMA on PC00
> +        // [CB0H]: CB3DMA on PC00
> +        Package() { 0x0001FFFF, 3, 0, 16 },
> +        // [MSM1] MSM
> +        Package() { 0x0002FFFF, 0, 0, 18 },
> +        // [PMON] PMON MSM
> +        Package() { 0x0002FFFF, 1, 0, 19 },
> +        Package() { 0x0002FFFF, 2, 0, 16 },
> +        // [NRPK]: NorthPeak
> +        Package() { 0x0002FFFF, 3, 0, 17 },
> +        // [DMI0]: Legacy PCI Express Port 0 on PC00
> +        Package() { 0x0003FFFF, 0, 0, 19 },
> +        // [IHC1]: IE HECI #1
> +        // [IHC3]: IE HECI #3
> +        Package() { 0x0010FFFF, 0, 0, 16 },
> +        // [IHC2]: IE HECI #2
> +        Package() { 0x0010FFFF, 1, 0, 17 },
> +        // [IIDR]: IE IDE-Redirection (IDE-R)
> +        Package() { 0x0010FFFF, 2, 0, 18 },
> +        // [IMKT]: IE Keyboard and Text (KT) Redirection
> +        Package() { 0x0010FFFF, 3, 0, 19 },
> +        // [SAT2]: sSATA Host controller on PCH
> +        // [MRO0]: MROM 0 function
> +        // [MRO1]: MROM 1 function
> +        Package() { 0x0011FFFF, 0, 0, 17 },
> +        Package() { 0x0011FFFF, 1, 0, 18 },
> +        Package() { 0x0011FFFF, 2, 0, 19 },
> +        Package() { 0x0011FFFF, 3, 0, 16 },
> +        // [XHCI]: xHCI controller 1 on PCH
> +        Package() { 0x0014FFFF, 0, 0, 16 },
> +        Package() { 0x0014FFFF, 1, 0, 17 },
> +        // [TERM]: Thermal Subsystem on PCH
> +        Package() { 0x0014FFFF, 2, 0, 18 },
> +        Package() { 0x0014FFFF, 3, 0, 19 },
> +        // [HEC1]: ME HECI #1 on PCH
> +        // [HEC3]: ME HECI #3 on PCH
> +        Package() { 0x0016FFFF, 0, 0, 18 },
> +        // [HEC2]: ME HECI #2 on PCH
> +        Package() { 0x0016FFFF, 1, 0, 19 },
> +        // [IDER]: ME IDE redirect on PCH
> +        Package() { 0x0016FFFF, 2, 0, 16 },
> +        // [MEKT]: MEKT on PCH
> +        Package() { 0x0016FFFF, 3, 0, 17 },
> +        // [SAT1]: SATA controller 1 on PCH
> +        Package() { 0x0017FFFF, 0, 0, 19 },
> +        // [RP17]: PCIE PCH Root Port #17
> +        Package() { 0x001BFFFF, 0, 0, 19 },
> +        // [RP18]: PCIE PCH Root Port #18
> +        Package() { 0x001BFFFF, 1, 0, 16 },
> +        // [RP19]: PCIE PCH Root Port #19
> +        Package() { 0x001BFFFF, 2, 0, 17 },
> +        // [RP20]: PCIE PCH Root Port #20
> +        Package() { 0x001BFFFF, 3, 0, 18 },
> +        // [RP01]: PCIE PCH Root Port #1
> +        // [RP05]: PCIE PCH Root Port #5
> +        Package() { 0x001CFFFF, 0, 0, 16 },
> +        // [RP02]: PCIE PCH Root Port #2
> +        // [RP06]: PCIE PCH Root Port #6
> +        Package() { 0x001CFFFF, 1, 0, 17 },
> +        // [RP03]: PCIE PCH Root Port #3
> +        // [RP07]: PCIE PCH Root Port #7
> +        Package() { 0x001CFFFF, 2, 0, 18 },
> +        // [RP04]: PCIE PCH Root Port #4
> +        // [RP08]: PCIE PCH Root Port #8
> +        Package() { 0x001CFFFF, 3, 0, 19 },
> +        // [RP09]: PCIE PCH Root Port #9
> +        // [RP13]: PCIE PCH Root Port #13
> +        Package() { 0x001DFFFF, 0, 0, 17 },
> +        // [RP10]: PCIE PCH Root Port #10
> +        // [RP14]: PCIE PCH Root Port #14
> +        Package() { 0x001DFFFF, 1, 0, 18 },
> +        // [RP11]: PCIE PCH Root Port #11
> +        // [RP15]: PCIE PCH Root Port #15
> +        Package() { 0x001DFFFF, 2, 0, 19 },
> +        // [RP12]: PCIE PCH Root Port #12
> +        // [RP16]: PCIE PCH Root Port #16
> +        Package() { 0x001DFFFF, 3, 0, 16 },
> +        // [P2SB]: P2SB
> +        // [PMC1]: Power Management Controller on PCH
> +        // [CAVS]: HD Audio Subsystem Controller on PCH
> +        // [SMBS]: SMBus controller on PCH
> +        // [GBE1]: GbE Controller on PCH
> +        // [TRHB]: Intel Trace Hub on PCH
> +        Package() { 0x001FFFFF, 3, 0, 19 },
> +        Package() { 0x001FFFFF, 2, 0, 18 },
> +        Package() { 0x001FFFFF, 1, 0, 17 },
> +        Package() { 0x001FFFFF, 0, 0, 16 },
> +    })
> +
> +    Name (AR01, Package() {
> +        // [SLTH]: PCIE PCH Slot #17
> +        Package() { 0x0000FFFF, 0, 0, 16 },
> +        Package() { 0x0000FFFF, 1, 0, 17 },
> +        Package() { 0x0000FFFF, 2, 0, 18 },
> +        Package() { 0x0000FFFF, 3, 0, 19 },
> +    })
> +
> +    Name (AR02, Package() {
> +        // [SLTI]: PCIE PCH Slot #18
> +        Package() { 0x0000FFFF, 0, 0, 17 },
> +        Package() { 0x0000FFFF, 1, 0, 18 },
> +        Package() { 0x0000FFFF, 2, 0, 19 },
> +        Package() { 0x0000FFFF, 3, 0, 16 },
> +    })
> +
> +    Name (AR03, Package() {
> +        // [SLTJ]: PCIE PCH Slot #19
> +        Package() { 0x0000FFFF, 0, 0, 18 },
> +        Package() { 0x0000FFFF, 1, 0, 19 },
> +        Package() { 0x0000FFFF, 2, 0, 16 },
> +        Package() { 0x0000FFFF, 3, 0, 17 },
> +    })
> +
> +    Name (AR04, Package() {
> +        // [SLTK]: PCIE PCH Slot #20
> +        Package() { 0x0000FFFF, 0, 0, 19 },
> +        Package() { 0x0000FFFF, 1, 0, 16 },
> +        Package() { 0x0000FFFF, 2, 0, 17 },
> +        Package() { 0x0000FFFF, 3, 0, 18 },
> +    })
> +
> +    Name (AR05, Package() {
> +        // [SLT1]: PCIE PCH Slot #1
> +        Package() { 0x0000FFFF, 0, 0, 16 },
> +        Package() { 0x0000FFFF, 1, 0, 17 },
> +        Package() { 0x0000FFFF, 2, 0, 18 },
> +        Package() { 0x0000FFFF, 3, 0, 19 },
> +    })
> +
> +    Name (AR06, Package() {
> +        // [SLT2]: PCIE PCH Slot #2
> +        Package() { 0x0000FFFF, 0, 0, 17 },
> +        Package() { 0x0000FFFF, 1, 0, 18 },
> +        Package() { 0x0000FFFF, 2, 0, 19 },
> +        Package() { 0x0000FFFF, 3, 0, 16 },
> +    })
> +
> +    Name (AR07, Package() {
> +        // [SLT3]: PCIE PCH Slot #3
> +        Package() { 0x0000FFFF, 0, 0, 18 },
> +        Package() { 0x0000FFFF, 1, 0, 19 },
> +        Package() { 0x0000FFFF, 2, 0, 16 },
> +        Package() { 0x0000FFFF, 3, 0, 17 },
> +    })
> +
> +    Name (AR08, Package() {
> +        // [SLT4]: PCIE PCH Slot #4
> +        Package() { 0x0000FFFF, 0, 0, 19 },
> +        Package() { 0x0000FFFF, 1, 0, 16 },
> +        Package() { 0x0000FFFF, 2, 0, 17 },
> +        Package() { 0x0000FFFF, 3, 0, 18 },
> +    })
> +
> +    Name (AR09, Package() {
> +        // [SLT5]: PCIE PCH Slot #5
> +        Package() { 0x0000FFFF, 0, 0, 16 },
> +        Package() { 0x0000FFFF, 1, 0, 17 },
> +        Package() { 0x0000FFFF, 2, 0, 18 },
> +        Package() { 0x0000FFFF, 3, 0, 19 },
> +    })
> +
> +    Name (AR0A, Package() {
> +        // [SLT6]: PCIE PCH Slot #6
> +        Package() { 0x0000FFFF, 0, 0, 17 },
> +        Package() { 0x0000FFFF, 1, 0, 18 },
> +        Package() { 0x0000FFFF, 2, 0, 19 },
> +        Package() { 0x0000FFFF, 3, 0, 16 },
> +    })
> +
> +    Name (AR0B, Package() {
> +        // [SLT7]: PCIE PCH Slot #7
> +        Package() { 0x0000FFFF, 0, 0, 18 },
> +        Package() { 0x0000FFFF, 1, 0, 19 },
> +        Package() { 0x0000FFFF, 2, 0, 16 },
> +        Package() { 0x0000FFFF, 3, 0, 17 },
> +    })
> +
> +    Name (AR0C, Package() {
> +        // [SLT8]: PCIE PCH Slot #8
> +        Package() { 0x0000FFFF, 0, 0, 19 },
> +        Package() { 0x0000FFFF, 1, 0, 16 },
> +        Package() { 0x0000FFFF, 2, 0, 17 },
> +        Package() { 0x0000FFFF, 3, 0, 18 },
> +    })
> +
> +    Name (AR0D, Package() {
> +        // [SLT9]: PCIE PCH Slot #9
> +        Package() { 0x0000FFFF, 0, 0, 16 },
> +        Package() { 0x0000FFFF, 1, 0, 17 },
> +        Package() { 0x0000FFFF, 2, 0, 18 },
> +        Package() { 0x0000FFFF, 3, 0, 19 },
> +    })
> +
> +    Name (AR0E, Package() {
> +        // [SLTA]: PCIE PCH Slot #10
> +        Package() { 0x0000FFFF, 0, 0, 17 },
> +        Package() { 0x0000FFFF, 1, 0, 18 },
> +        Package() { 0x0000FFFF, 2, 0, 19 },
> +        Package() { 0x0000FFFF, 3, 0, 16 },
> +    })
> +
> +    Name (AR0F, Package() {
> +        // [SLTB]: PCIE PCH Slot #11
> +        Package() { 0x0000FFFF, 0, 0, 18 },
> +        Package() { 0x0000FFFF, 1, 0, 19 },
> +        Package() { 0x0000FFFF, 2, 0, 16 },
> +        Package() { 0x0000FFFF, 3, 0, 17 },
> +    })
> +
> +    Name (AR10, Package() {
> +        // [SLTC]: PCIE PCH Slot #12
> +        Package() { 0x0000FFFF, 0, 0, 19 },
> +        Package() { 0x0000FFFF, 1, 0, 16 },
> +        Package() { 0x0000FFFF, 2, 0, 17 },
> +        Package() { 0x0000FFFF, 3, 0, 18 },
> +    })
> +
> +    Name (AR11, Package() {
> +        // [SLTD]: PCIE PCH Slot #13
> +        Package() { 0x0000FFFF, 0, 0, 16 },
> +        Package() { 0x0000FFFF, 1, 0, 17 },
> +        Package() { 0x0000FFFF, 2, 0, 18 },
> +        Package() { 0x0000FFFF, 3, 0, 19 },
> +    })
> +
> +    Name (AR12, Package() {
> +        // [SLTE]: PCIE PCH Slot #14
> +        Package() { 0x0000FFFF, 0, 0, 17 },
> +        Package() { 0x0000FFFF, 1, 0, 18 },
> +        Package() { 0x0000FFFF, 2, 0, 19 },
> +        Package() { 0x0000FFFF, 3, 0, 16 },
> +    })
> +
> +    Name (AR13, Package() {
> +        // [SLTF]: PCIE PCH Slot #15
> +        Package() { 0x0000FFFF, 0, 0, 18 },
> +        Package() { 0x0000FFFF, 1, 0, 19 },
> +        Package() { 0x0000FFFF, 2, 0, 16 },
> +        Package() { 0x0000FFFF, 3, 0, 17 },
> +    })
> +
> +    Name (AR14, Package() {
> +        // [SLTG]: PCIE PCH Slot #16
> +        Package() { 0x0000FFFF, 0, 0, 19 },
> +        Package() { 0x0000FFFF, 1, 0, 16 },
> +        Package() { 0x0000FFFF, 2, 0, 17 },
> +        Package() { 0x0000FFFF, 3, 0, 18 },
> +    })
> +
> +    Name (AR15, Package() {
> +        // [BR1A]: PCI Express Port 1A on PC01
> +        Package() { 0x0002FFFF, 0, 0, 18 },
> +        Package() { 0x0002FFFF, 1, 0, 19 },
> +        Package() { 0x0002FFFF, 2, 0, 16 },
> +        Package() { 0x0002FFFF, 3, 0, 17 },
> +        // [BR1B]: PCI Express Port 1B on PC01
> +        Package() { 0x0003FFFF, 0, 0, 19 },
> +        Package() { 0x0003FFFF, 1, 0, 16 },
> +        Package() { 0x0003FFFF, 2, 0, 17 },
> +        Package() { 0x0003FFFF, 3, 0, 18 },
> +        // [BR1C]: PCI Express Port 1C on PC01
> +        Package() { 0x0004FFFF, 0, 0, 16 },
> +        Package() { 0x0004FFFF, 1, 0, 17 },
> +        Package() { 0x0004FFFF, 2, 0, 18 },
> +        Package() { 0x0004FFFF, 3, 0, 19 },
> +        // [BR1D]: PCI Express Port 1D on PC01
> +        Package() { 0x0005FFFF, 0, 0, 17 },
> +        Package() { 0x0005FFFF, 1, 0, 18 },
> +        Package() { 0x0005FFFF, 2, 0, 19 },
> +        Package() { 0x0005FFFF, 3, 0, 16 },
> +    })
> +
> +    Name (AR16, Package() {
> +        // [SL01]: PCI Express Slot 1 on 1A on PC01
> +        Package() { 0x0000FFFF, 0, 0, 18 },
> +        Package() { 0x0000FFFF, 1, 0, 19 },
> +        Package() { 0x0000FFFF, 2, 0, 16 },
> +        Package() { 0x0000FFFF, 3, 0, 17 },
> +    })
> +
> +    Name (AR17, Package() {
> +        // [SL02]: PCI Express Slot 2 on 1B on PC01
> +        Package() { 0x0000FFFF, 0, 0, 19 },
> +        Package() { 0x0000FFFF, 1, 0, 16 },
> +        Package() { 0x0000FFFF, 2, 0, 17 },
> +        Package() { 0x0000FFFF, 3, 0, 18 },
> +    })
> +
> +    Name (AR18, Package() {
> +        // [SL03]: PCI Express Slot 3 on 1C on PC01
> +        Package() { 0x0000FFFF, 0, 0, 16 },
> +        Package() { 0x0000FFFF, 1, 0, 17 },
> +        Package() { 0x0000FFFF, 2, 0, 18 },
> +        Package() { 0x0000FFFF, 3, 0, 19 },
> +    })
> +
> +    Name (AR19, Package() {
> +        // [SL04]: PCI Express Slot 4 on 1D on PC01
> +        Package() { 0x0000FFFF, 0, 0, 17 },
> +        Package() { 0x0000FFFF, 1, 0, 18 },
> +        Package() { 0x0000FFFF, 2, 0, 19 },
> +        Package() { 0x0000FFFF, 3, 0, 16 },
> +    })
> +
> +    Name (AR1A, Package() {
> +        // [BR2A]: PCI Express Port 2A on PC02
> +        Package() { 0x0002FFFF, 0, 0, 18 },
> +        Package() { 0x0002FFFF, 1, 0, 19 },
> +        Package() { 0x0002FFFF, 2, 0, 16 },
> +        Package() { 0x0002FFFF, 3, 0, 17 },
> +        // [BR2B]: PCI Express Port 2B on PC02
> +        Package() { 0x0003FFFF, 0, 0, 19 },
> +        Package() { 0x0003FFFF, 1, 0, 16 },
> +        Package() { 0x0003FFFF, 2, 0, 17 },
> +        Package() { 0x0003FFFF, 3, 0, 18 },
> +        // [BR2C]: PCI Express Port 2C on PC02
> +        Package() { 0x0004FFFF, 0, 0, 16 },
> +        Package() { 0x0004FFFF, 1, 0, 17 },
> +        Package() { 0x0004FFFF, 2, 0, 18 },
> +        Package() { 0x0004FFFF, 3, 0, 19 },
> +        // [BR2D]: PCI Express Port 2D on PC02
> +        Package() { 0x0005FFFF, 0, 0, 17 },
> +        Package() { 0x0005FFFF, 1, 0, 18 },
> +        Package() { 0x0005FFFF, 2, 0, 19 },
> +        Package() { 0x0005FFFF, 3, 0, 16 },
> +    })
> +
> +    Name (AR1B, Package() {
> +        // [SL05]: PCI Express Slot 5 on 2A on PC02
> +        // [EPCU]: EVA PCIe Uplink
> +        Package() { 0x0000FFFF, 0, 0, 18 },
> +        Package() { 0x0000FFFF, 1, 0, 19 },
> +        Package() { 0x0000FFFF, 2, 0, 16 },
> +        Package() { 0x0000FFFF, 3, 0, 17 },
> +    })
> +
> +    Name (AR1C, Package() {
> +        // [VSP0]: EVA Virtual Switch Port 0
> +        Package() { 0x0000FFFF, 0, 0, 18 },
> +        Package() { 0x0000FFFF, 1, 0, 19 },
> +        Package() { 0x0000FFFF, 2, 0, 16 },
> +        Package() { 0x0000FFFF, 3, 0, 17 },
> +        // [VSP1]: EVA Virtual Switch Port 1
> +        Package() { 0x0001FFFF, 0, 0, 19 },
> +        // [VSP2]: EVA Virtual Switch Port 2
> +        Package() { 0x0002FFFF, 0, 0, 16 },
> +        // [VSP3]: EVA Virtual Switch Port 3
> +        Package() { 0x0003FFFF, 0, 0, 17 },
> +    })
> +
> +    Name (AR1D, Package() {
> +        // [CPM0]: EVA CPM0
> +        Package() { 0x0000FFFF, 0, 0, 16 },
> +    })
> +
> +    Name (AR1E, Package() {
> +        // [CPM1]: EVA CPM1
> +        Package() { 0x0000FFFF, 0, 0, 16 },
> +    })
> +
> +    Name (AR1F, Package() {
> +        // [CPM2]: EVA CPM2
> +        Package() { 0x0000FFFF, 0, 0, 16 },
> +    })
> +
> +    Name (AR20, Package() {
> +        // [SL06]: PCI Express Slot 6 on 2B on PC02
> +        Package() { 0x0000FFFF, 0, 0, 19 },
> +        Package() { 0x0000FFFF, 1, 0, 16 },
> +        Package() { 0x0000FFFF, 2, 0, 17 },
> +        Package() { 0x0000FFFF, 3, 0, 18 },
> +    })
> +
> +    Name (AR21, Package() {
> +        // [SL07]: PCI Express Slot 7 on 2C on PC02
> +        Package() { 0x0000FFFF, 0, 0, 16 },
> +        Package() { 0x0000FFFF, 1, 0, 17 },
> +        Package() { 0x0000FFFF, 2, 0, 18 },
> +        Package() { 0x0000FFFF, 3, 0, 19 },
> +    })
> +
> +    Name (AR22, Package() {
> +        // [SL08]: PCI Express Slot 8 on 2D on PC02
> +        Package() { 0x0000FFFF, 0, 0, 17 },
> +        Package() { 0x0000FFFF, 1, 0, 18 },
> +        Package() { 0x0000FFFF, 2, 0, 19 },
> +        Package() { 0x0000FFFF, 3, 0, 16 },
> +    })
> +
> +    Name (AR23, Package() {
> +        // [BR3A]: PCI Express Port 3A on PC03
> +        Package() { 0x0002FFFF, 0, 0, 18 },
> +        Package() { 0x0002FFFF, 1, 0, 19 },
> +        Package() { 0x0002FFFF, 2, 0, 16 },
> +        Package() { 0x0002FFFF, 3, 0, 17 },
> +        // [BR3B]: PCI Express Port 3B on PC03
> +        Package() { 0x0003FFFF, 0, 0, 19 },
> +        Package() { 0x0003FFFF, 1, 0, 16 },
> +        Package() { 0x0003FFFF, 2, 0, 17 },
> +        Package() { 0x0003FFFF, 3, 0, 18 },
> +        // [BR3C]: PCI Express Port 3C on PC03
> +        Package() { 0x0004FFFF, 0, 0, 16 },
> +        Package() { 0x0004FFFF, 1, 0, 17 },
> +        Package() { 0x0004FFFF, 2, 0, 18 },
> +        Package() { 0x0004FFFF, 3, 0, 19 },
> +        // [BR3D]: PCI Express Port 3D on PC03
> +        Package() { 0x0005FFFF, 0, 0, 17 },
> +        Package() { 0x0005FFFF, 1, 0, 18 },
> +        Package() { 0x0005FFFF, 2, 0, 19 },
> +        Package() { 0x0005FFFF, 3, 0, 16 },
> +    })
> +
> +    Name (AR24, Package() {
> +        // [SL09]: PCI Express Slot 9 on 3A on PC03
> +        Package() { 0x0000FFFF, 0, 0, 18 },
> +        Package() { 0x0000FFFF, 1, 0, 19 },
> +        Package() { 0x0000FFFF, 2, 0, 16 },
> +        Package() { 0x0000FFFF, 3, 0, 17 },
> +    })
> +
> +    Name (AR25, Package() {
> +        // [SL0A]: PCI Express Slot 10 on 3B on PC03
> +        Package() { 0x0000FFFF, 0, 0, 19 },
> +        Package() { 0x0000FFFF, 1, 0, 16 },
> +        Package() { 0x0000FFFF, 2, 0, 17 },
> +        Package() { 0x0000FFFF, 3, 0, 18 },
> +    })
> +
> +    Name (AR26, Package() {
> +        // [SL0B]: PCI Express Slot 11 on 3C on PC03
> +        Package() { 0x0000FFFF, 0, 0, 16 },
> +        Package() { 0x0000FFFF, 1, 0, 17 },
> +        Package() { 0x0000FFFF, 2, 0, 18 },
> +        Package() { 0x0000FFFF, 3, 0, 19 },
> +    })
> +
> +    Name (AR27, Package() {
> +        // [SL0C]: PCI Express Slot 12 on 3D on PC03
> +        Package() { 0x0000FFFF, 0, 0, 17 },
> +        Package() { 0x0000FFFF, 1, 0, 18 },
> +        Package() { 0x0000FFFF, 2, 0, 19 },
> +        Package() { 0x0000FFFF, 3, 0, 16 },
> +    })
> +
> +    Name (AR28, Package() {
> +        // [BR4A]: PCI Express Port 4A on PC04
> +        Package() { 0x0002FFFF, 0, 0, 18 },
> +        Package() { 0x0002FFFF, 1, 0, 19 },
> +        Package() { 0x0002FFFF, 2, 0, 16 },
> +        Package() { 0x0002FFFF, 3, 0, 17 },
> +        // [BR4B]: PCI Express Port 4B on PC04
> +        Package() { 0x0003FFFF, 0, 0, 19 },
> +        Package() { 0x0003FFFF, 1, 0, 16 },
> +        Package() { 0x0003FFFF, 2, 0, 17 },
> +        Package() { 0x0003FFFF, 3, 0, 18 },
> +        // [BR4C]: PCI Express Port 4C on PC04
> +        Package() { 0x0004FFFF, 0, 0, 16 },
> +        Package() { 0x0004FFFF, 1, 0, 17 },
> +        Package() { 0x0004FFFF, 2, 0, 18 },
> +        Package() { 0x0004FFFF, 3, 0, 19 },
> +        // [BR4D]: PCI Express Port 4D on PC04
> +        Package() { 0x0005FFFF, 0, 0, 17 },
> +        Package() { 0x0005FFFF, 1, 0, 18 },
> +        Package() { 0x0005FFFF, 2, 0, 19 },
> +        Package() { 0x0005FFFF, 3, 0, 16 },
> +    })
> +
> +    Name (AR29, Package() {
> +        // [SL0D]: PCI Express Slot 13 on 4A on PC04
> +        Package() { 0x0000FFFF, 0, 0, 18 },
> +        Package() { 0x0000FFFF, 1, 0, 19 },
> +        Package() { 0x0000FFFF, 2, 0, 16 },
> +        Package() { 0x0000FFFF, 3, 0, 17 },
> +    })
> +
> +    Name (AR2A, Package() {
> +        // [SL0E]: PCI Express Slot 14 on 4B on PC04
> +        Package() { 0x0000FFFF, 0, 0, 19 },
> +        Package() { 0x0000FFFF, 1, 0, 16 },
> +        Package() { 0x0000FFFF, 2, 0, 17 },
> +        Package() { 0x0000FFFF, 3, 0, 18 },
> +    })
> +
> +    Name (AR2B, Package() {
> +        // [SL0F]: PCI Express Slot 15 on 4C on PC04
> +        Package() { 0x0000FFFF, 0, 0, 16 },
> +        Package() { 0x0000FFFF, 1, 0, 17 },
> +        Package() { 0x0000FFFF, 2, 0, 18 },
> +        Package() { 0x0000FFFF, 3, 0, 19 },
> +    })
> +
> +    Name (AR2C, Package() {
> +        // [SL10]: PCI Express Slot 16 on 4D on PC04
> +        Package() { 0x0000FFFF, 0, 0, 17 },
> +        Package() { 0x0000FFFF, 1, 0, 18 },
> +        Package() { 0x0000FFFF, 2, 0, 19 },
> +        Package() { 0x0000FFFF, 3, 0, 16 },
> +    })
> +
> +    Name (AR2D, Package() {
> +        // [BR5A]: PCI Express Port 5A on PC05
> +        Package() { 0x0002FFFF, 0, 0, 18 },
> +        Package() { 0x0002FFFF, 1, 0, 19 },
> +        Package() { 0x0002FFFF, 2, 0, 16 },
> +        Package() { 0x0002FFFF, 3, 0, 17 },
> +        // [BR5B]: PCI Express Port 5B on PC05
> +        Package() { 0x0003FFFF, 0, 0, 19 },
> +        Package() { 0x0003FFFF, 1, 0, 16 },
> +        Package() { 0x0003FFFF, 2, 0, 17 },
> +        Package() { 0x0003FFFF, 3, 0, 18 },
> +        // [BR5C]: PCI Express Port 5C on PC05
> +        Package() { 0x0004FFFF, 0, 0, 16 },
> +        Package() { 0x0004FFFF, 1, 0, 17 },
> +        Package() { 0x0004FFFF, 2, 0, 18 },
> +        Package() { 0x0004FFFF, 3, 0, 19 },
> +        // [BR5D]: PCI Express Port 5D on PC05
> +        Package() { 0x0005FFFF, 0, 0, 17 },
> +        Package() { 0x0005FFFF, 1, 0, 18 },
> +        Package() { 0x0005FFFF, 2, 0, 19 },
> +        Package() { 0x0005FFFF, 3, 0, 16 },
> +    })
> +
> +    Name (AR2E, Package() {
> +        // [SL11]: PCI Express Slot 17 on 5A on PC05
> +        Package() { 0x0000FFFF, 0, 0, 18 },
> +        Package() { 0x0000FFFF, 1, 0, 19 },
> +        Package() { 0x0000FFFF, 2, 0, 16 },
> +        Package() { 0x0000FFFF, 3, 0, 17 },
> +    })
> +
> +    Name (AR2F, Package() {
> +        // [SL12]: PCI Express Slot 18 on 5B on PC05
> +        Package() { 0x0000FFFF, 0, 0, 19 },
> +        Package() { 0x0000FFFF, 1, 0, 16 },
> +        Package() { 0x0000FFFF, 2, 0, 17 },
> +        Package() { 0x0000FFFF, 3, 0, 18 },
> +    })
> +
> +    Name (AR30, Package() {
> +        // [SL13]: PCI Express Slot 19 on 5C on PC05
> +        Package() { 0x0000FFFF, 0, 0, 16 },
> +        Package() { 0x0000FFFF, 1, 0, 17 },
> +        Package() { 0x0000FFFF, 2, 0, 18 },
> +        Package() { 0x0000FFFF, 3, 0, 19 },
> +    })
> +
> +    Name (AR31, Package() {
> +        // [SL14]: PCI Express Slot 20 on 5D on PC05
> +        Package() { 0x0000FFFF, 0, 0, 17 },
> +        Package() { 0x0000FFFF, 1, 0, 18 },
> +        Package() { 0x0000FFFF, 2, 0, 19 },
> +        Package() { 0x0000FFFF, 3, 0, 16 },
> +    })
> +
> +    Name (AR32, Package() {
> +        // [UBX0]: Uncore 0 UBOX Device
> +        Package() { 0x0000FFFF, 0, 0, 16 },
> +        Package() { 0x0000FFFF, 1, 0, 17 },
> +        Package() { 0x0000FFFF, 2, 0, 18 },
> +        Package() { 0x0000FFFF, 3, 0, 19 },
> +        // [UP00]: Uncore 0 Misc 2 UPI 0-7 Device
> +        Package() { 0x0002FFFF, 0, 0, 16 },
> +        Package() { 0x0002FFFF, 1, 0, 17 },
> +        Package() { 0x0002FFFF, 2, 0, 18 },
> +        Package() { 0x0002FFFF, 3, 0, 19 },
> +        // [UP01]: Unocre 0 Misc 1 UPI 0-7 Device
> +        Package() { 0x0003FFFF, 0, 0, 16 },
> +        Package() { 0x0003FFFF, 1, 0, 17 },
> +        Package() { 0x0003FFFF, 2, 0, 18 },
> +        Package() { 0x0003FFFF, 3, 0, 19 },
> +        // [M2U0]: Uncore 0 M2UPI0 Device
> +        Package() { 0x0005FFFF, 0, 0, 16 },
> +        Package() { 0x0005FFFF, 1, 0, 17 },
> +        Package() { 0x0005FFFF, 2, 0, 18 },
> +        Package() { 0x0005FFFF, 3, 0, 19 },
> +        // [M2U1]: Uncore 0 M2UPI1 Device
> +        Package() { 0x0006FFFF, 0, 0, 16 },
> +        Package() { 0x0006FFFF, 1, 0, 17 },
> +        Package() { 0x0006FFFF, 2, 0, 18 },
> +        Package() { 0x0006FFFF, 3, 0, 19 },
> +        // [M2U2]: Uncore 0 M2UPI2 Device
> +        Package() { 0x0007FFFF, 0, 0, 16 },
> +        Package() { 0x0007FFFF, 1, 0, 17 },
> +        Package() { 0x0007FFFF, 2, 0, 18 },
> +        Package() { 0x0007FFFF, 3, 0, 19 },
> +        // [CSM0]: Uncore 0 CHASIS_SMBUS Devices
> +        Package() { 0x000BFFFF, 0, 0, 16 },
> +        Package() { 0x000BFFFF, 1, 0, 17 },
> +        Package() { 0x000BFFFF, 2, 0, 18 },
> +        Package() { 0x000BFFFF, 3, 0, 19 },
> +        // [M2M0]: Uncore 0 MS2MEM_SCF_MS2MEM0 Device
> +        Package() { 0x000CFFFF, 0, 0, 16 },
> +        Package() { 0x000CFFFF, 1, 0, 17 },
> +        Package() { 0x000CFFFF, 2, 0, 18 },
> +        Package() { 0x000CFFFF, 3, 0, 19 },
> +        // [M2M1]: Uncore 0 MS2MEM_SCF_MS2MEM1 Device
> +        Package() { 0x000DFFFF, 0, 0, 16 },
> +        Package() { 0x000DFFFF, 1, 0, 17 },
> +        Package() { 0x000DFFFF, 2, 0, 18 },
> +        Package() { 0x000DFFFF, 3, 0, 19 },
> +        // [MCD0]: Uncore 0 MCDDR0 Device
> +        Package() { 0x001AFFFF, 0, 0, 16 },
> +        Package() { 0x001AFFFF, 1, 0, 17 },
> +        Package() { 0x001AFFFF, 2, 0, 18 },
> +        Package() { 0x001AFFFF, 3, 0, 19 },
> +        // [MCD1]: Uncore 0 MCDDR1 Device
> +        Package() { 0x001BFFFF, 0, 0, 16 },
> +        Package() { 0x001BFFFF, 1, 0, 17 },
> +        Package() { 0x001BFFFF, 2, 0, 18 },
> +        Package() { 0x001BFFFF, 3, 0, 19 },
> +    })
> +
> +    Name (AR33, Package() {
> +        // [CHA0]: Uncore 1 GRP1_CHA0-7 Device
> +        Package() { 0x0000FFFF, 0, 0, 16 },
> +        Package() { 0x0000FFFF, 1, 0, 17 },
> +        Package() { 0x0000FFFF, 2, 0, 18 },
> +        Package() { 0x0000FFFF, 3, 0, 19 },
> +        // [CHA1]: Uncore 1 GRP1_CHA8-15 Device
> +        Package() { 0x0001FFFF, 0, 0, 16 },
> +        Package() { 0x0001FFFF, 1, 0, 17 },
> +        Package() { 0x0001FFFF, 2, 0, 18 },
> +        Package() { 0x0001FFFF, 3, 0, 19 },
> +        // [CHA2]: Uncore 1 GRP1_CHA16-23 Device
> +        Package() { 0x0002FFFF, 0, 0, 16 },
> +        Package() { 0x0002FFFF, 1, 0, 17 },
> +        Package() { 0x0002FFFF, 2, 0, 18 },
> +        Package() { 0x0002FFFF, 3, 0, 19 },
> +        // [CHA3]: Uncore 1 GRP1_CHAU24-31 Device
> +        Package() { 0x0003FFFF, 0, 0, 16 },
> +        Package() { 0x0003FFFF, 1, 0, 17 },
> +        Package() { 0x0003FFFF, 2, 0, 18 },
> +        Package() { 0x0003FFFF, 3, 0, 19 },
> +        // [CHA4]: Uncore 1 GRP1_CHA32-33 Device
> +        Package() { 0x0004FFFF, 0, 0, 16 },
> +        Package() { 0x0004FFFF, 1, 0, 17 },
> +        Package() { 0x0004FFFF, 2, 0, 18 },
> +        Package() { 0x0004FFFF, 3, 0, 19 },
> +        // [CHA5]: Uncore 1 GRP0_CHA0-7 Device
> +        Package() { 0x000AFFFF, 0, 0, 16 },
> +        Package() { 0x000AFFFF, 1, 0, 17 },
> +        Package() { 0x000AFFFF, 2, 0, 18 },
> +        Package() { 0x000AFFFF, 3, 0, 19 },
> +        // [CHA8]: Uncore 1 GRP0_CHA24-31 Device
> +        Package() { 0x000DFFFF, 0, 0, 16 },
> +        Package() { 0x000DFFFF, 1, 0, 17 },
> +        Package() { 0x000DFFFF, 2, 0, 18 },
> +        Package() { 0x000DFFFF, 3, 0, 19 },
> +        // [CHA9]: Uncore 1 GRP0_CHA32-33 Device
> +        Package() { 0x000EFFFF, 0, 0, 16 },
> +        Package() { 0x000EFFFF, 1, 0, 17 },
> +        Package() { 0x000EFFFF, 2, 0, 18 },
> +        Package() { 0x000EFFFF, 3, 0, 19 },
> +        // [CHA6]: Uncore 1 GRP0_CHA8-15 Device
> +        Package() { 0x00B0FFFF, 0, 0, 16 },
> +        Package() { 0x00B0FFFF, 1, 0, 17 },
> +        Package() { 0x00B0FFFF, 2, 0, 18 },
> +        Package() { 0x00B0FFFF, 3, 0, 19 },
> +        // [CHA7]: Uncore 1 GRP0_CHA16-23 Device
> +        Package() { 0x000CFFFF, 0, 0, 16 },
> +        Package() { 0x000CFFFF, 1, 0, 17 },
> +        Package() { 0x000CFFFF, 2, 0, 18 },
> +        Package() { 0x000CFFFF, 3, 0, 19 },
> +        // [CA00]: Uncore 1 CHAALL0-1 Device
> +        Package() { 0x001DFFFF, 0, 0, 16 },
> +        Package() { 0x001DFFFF, 1, 0, 17 },
> +        Package() { 0x001DFFFF, 2, 0, 18 },
> +        Package() { 0x001DFFFF, 3, 0, 19 },
> +        // [PUC0]: Uncore 1 CHASIS_PUINT0-7 Device
> +        Package() { 0x001EFFFF, 0, 0, 16 },
> +        Package() { 0x001EFFFF, 1, 0, 17 },
> +        Package() { 0x001EFFFF, 2, 0, 18 },
> +        Package() { 0x001EFFFF, 3, 0, 19 },
> +        // [GN30]: Uncore 1 Gen3Phy Device
> +        Package() { 0x001FFFFF, 0, 0, 16 },
> +        Package() { 0x001FFFFF, 1, 0, 17 },
> +        Package() { 0x001FFFFF, 2, 0, 18 },
> +        Package() { 0x001FFFFF, 3, 0, 19 },
> +    })
> +#if MAX_SOCKET > 1
> +    Name (AR34, Package() {
> +        // [IIM1]: IIOMISC on PC06
> +        Package() { 0x0000FFFF, 0, 0, 16 },
> +        Package() { 0x0000FFFF, 1, 0, 17 },
> +        Package() { 0x0000FFFF, 2, 0, 18 },
> +        Package() { 0x0000FFFF, 3, 0, 19 },
> +        // [CB1A]: CB3DMA on PC06
> +        // [CB1E]: CB3DMA on PC06
> +        Package() { 0x0001FFFF, 0, 0, 16 },
> +        // [CB1B]: CB3DMA on PC06
> +        // [CB1F]: CB3DMA on PC06
> +        Package() { 0x0001FFFF, 1, 0, 17 },
> +        // [CB1C]: CB3DMA on PC06
> +        // [CB1G]: CB3DMA on PC06
> +        Package() { 0x0001FFFF, 2, 0, 18 },
> +        // [CB1D]: CB3DMA on PC06
> +        // [CB1H]: CB3DMA on PC06
> +        Package() { 0x0001FFFF, 3, 0, 19 },
> +        // NorthPeak
> +        Package() { 0x0002FFFF, 0, 0, 18 },
> +    })
> +
> +    Name (AR35, Package() {
> +        // [QR1A]: PCI Express Port 1A on PC07
> +        Package() { 0x0002FFFF, 0, 0, 18 },
> +        Package() { 0x0002FFFF, 1, 0, 19 },
> +        Package() { 0x0002FFFF, 2, 0, 16 },
> +        Package() { 0x0002FFFF, 3, 0, 17 },
> +        // [QR1B]: PCI Express Port 1B on PC07
> +        Package() { 0x0003FFFF, 0, 0, 19 },
> +        Package() { 0x0003FFFF, 1, 0, 16 },
> +        Package() { 0x0003FFFF, 2, 0, 17 },
> +        Package() { 0x0003FFFF, 3, 0, 18 },
> +        // [QR1C]: PCI Express Port 1C on PC07
> +        Package() { 0x0004FFFF, 0, 0, 16 },
> +        Package() { 0x0004FFFF, 1, 0, 17 },
> +        Package() { 0x0004FFFF, 2, 0, 18 },
> +        Package() { 0x0004FFFF, 3, 0, 19 },
> +        // [QR1D]: PCI Express Port 1D on PC07
> +        Package() { 0x0005FFFF, 0, 0, 17 },
> +        Package() { 0x0005FFFF, 1, 0, 18 },
> +        Package() { 0x0005FFFF, 2, 0, 19 },
> +        Package() { 0x0005FFFF, 3, 0, 16 },
> +    })
> +
> +    Name (AR36, Package() {
> +        // [SL16]: PCI Express Slot 22 on 1A on PC07
> +        Package() { 0x0000FFFF, 0, 0, 18 },
> +        Package() { 0x0000FFFF, 1, 0, 19 },
> +        Package() { 0x0000FFFF, 2, 0, 16 },
> +        Package() { 0x0000FFFF, 3, 0, 17 },
> +    })
> +
> +    Name (AR37, Package() {
> +        // [SL17]: PCI Express Slot 23 on 1B on PC07
> +        Package() { 0x0000FFFF, 0, 0, 19 },
> +        Package() { 0x0000FFFF, 1, 0, 16 },
> +        Package() { 0x0000FFFF, 2, 0, 17 },
> +        Package() { 0x0000FFFF, 3, 0, 18 },
> +    })
> +
> +    Name (AR38, Package() {
> +        // [SL18]: PCI Express Slot 24 on 1C on PC07
> +        Package() { 0x0000FFFF, 0, 0, 16 },
> +        Package() { 0x0000FFFF, 1, 0, 17 },
> +        Package() { 0x0000FFFF, 2, 0, 18 },
> +        Package() { 0x0000FFFF, 3, 0, 19 },
> +    })
> +
> +    Name (AR39, Package() {
> +        // [SL19]: PCI Express Slot 25 on 1D on PC07
> +        Package() { 0x0000FFFF, 0, 0, 17 },
> +        Package() { 0x0000FFFF, 1, 0, 18 },
> +        Package() { 0x0000FFFF, 2, 0, 19 },
> +        Package() { 0x0000FFFF, 3, 0, 16 },
> +    })
> +
> +    Name (AR3A, Package() {
> +        // [QR2A]: PCI Express Port 2A on PC08
> +        Package() { 0x0002FFFF, 0, 0, 18 },
> +        Package() { 0x0002FFFF, 1, 0, 19 },
> +        Package() { 0x0002FFFF, 2, 0, 16 },
> +        Package() { 0x0002FFFF, 3, 0, 17 },
> +        // [QR2B]: PCI Express Port 2B on PC08
> +        Package() { 0x0003FFFF, 0, 0, 19 },
> +        Package() { 0x0003FFFF, 1, 0, 16 },
> +        Package() { 0x0003FFFF, 2, 0, 17 },
> +        Package() { 0x0003FFFF, 3, 0, 18 },
> +        // [QR2C]: PCI Express Port 2C on PC08
> +        Package() { 0x0004FFFF, 0, 0, 16 },
> +        Package() { 0x0004FFFF, 1, 0, 17 },
> +        Package() { 0x0004FFFF, 2, 0, 18 },
> +        Package() { 0x0004FFFF, 3, 0, 19 },
> +        // [QR2D]: PCI Express Port 2D on PC08
> +        Package() { 0x0005FFFF, 0, 0, 17 },
> +        Package() { 0x0005FFFF, 1, 0, 18 },
> +        Package() { 0x0005FFFF, 2, 0, 19 },
> +        Package() { 0x0005FFFF, 3, 0, 16 },
> +    })
> +
> +    Name (AR3B, Package() {
> +        // [SL1A]: PCI Express Slot 26 on 2A on PC08
> +        Package() { 0x0000FFFF, 0, 0, 18 },
> +        Package() { 0x0000FFFF, 1, 0, 19 },
> +        Package() { 0x0000FFFF, 2, 0, 16 },
> +        Package() { 0x0000FFFF, 3, 0, 17 },
> +    })
> +
> +    Name (AR3C, Package() {
> +        // [SL1B]: PCI Express Slot 27 on 2B on PC08
> +        Package() { 0x0000FFFF, 0, 0, 19 },
> +        Package() { 0x0000FFFF, 1, 0, 16 },
> +        Package() { 0x0000FFFF, 2, 0, 17 },
> +        Package() { 0x0000FFFF, 3, 0, 18 },
> +    })
> +
> +    Name (AR3D, Package() {
> +        // [SL1C]: PCI Express Slot 28 on 2C on PC08
> +        Package() { 0x0000FFFF, 0, 0, 16 },
> +        Package() { 0x0000FFFF, 1, 0, 17 },
> +        Package() { 0x0000FFFF, 2, 0, 18 },
> +        Package() { 0x0000FFFF, 3, 0, 19 },
> +    })
> +
> +    Name (AR3E, Package() {
> +        // [SL1D]: PCI Express Slot 29 on 2D on PC08
> +        Package() { 0x0000FFFF, 0, 0, 17 },
> +        Package() { 0x0000FFFF, 1, 0, 18 },
> +        Package() { 0x0000FFFF, 2, 0, 19 },
> +        Package() { 0x0000FFFF, 3, 0, 16 },
> +    })
> +
> +    Name (AR3F, Package() {
> +        // [QR3A]: PCI Express Port 3A on PC09
> +        Package() { 0x0002FFFF, 0, 0, 18 },
> +        Package() { 0x0002FFFF, 1, 0, 19 },
> +        Package() { 0x0002FFFF, 2, 0, 16 },
> +        Package() { 0x0002FFFF, 3, 0, 17 },
> +        // [QR3B]: PCI Express Port 3B on PC09
> +        Package() { 0x0003FFFF, 0, 0, 19 },
> +        Package() { 0x0003FFFF, 1, 0, 16 },
> +        Package() { 0x0003FFFF, 2, 0, 17 },
> +        Package() { 0x0003FFFF, 3, 0, 18 },
> +        // [QR3C]: PCI Express Port 3C on PC09
> +        Package() { 0x0004FFFF, 0, 0, 16 },
> +        Package() { 0x0004FFFF, 1, 0, 17 },
> +        Package() { 0x0004FFFF, 2, 0, 18 },
> +        Package() { 0x0004FFFF, 3, 0, 19 },
> +        // [QR3D]: PCI Express Port 3D on PC09
> +        Package() { 0x0005FFFF, 0, 0, 17 },
> +        Package() { 0x0005FFFF, 1, 0, 18 },
> +        Package() { 0x0005FFFF, 2, 0, 19 },
> +        Package() { 0x0005FFFF, 3, 0, 16 },
> +    })
> +
> +    Name (AR40, Package() {
> +        // [SL1E]: PCI Express Slot 30 on 3A on PC09
> +        Package() { 0x0000FFFF, 0, 0, 18 },
> +        Package() { 0x0000FFFF, 1, 0, 19 },
> +        Package() { 0x0000FFFF, 2, 0, 16 },
> +        Package() { 0x0000FFFF, 3, 0, 17 },
> +    })
> +
> +    Name (AR41, Package() {
> +        // [SL1F]: PCI Express Slot 31 on 3B on PC09
> +        Package() { 0x0000FFFF, 0, 0, 19 },
> +        Package() { 0x0000FFFF, 1, 0, 16 },
> +        Package() { 0x0000FFFF, 2, 0, 17 },
> +        Package() { 0x0000FFFF, 3, 0, 18 },
> +    })
> +
> +    Name (AR42, Package() {
> +        // [SL20]: PCI Express Slot 32 on 3C on PC09
> +        Package() { 0x0000FFFF, 0, 0, 16 },
> +        Package() { 0x0000FFFF, 1, 0, 17 },
> +        Package() { 0x0000FFFF, 2, 0, 18 },
> +        Package() { 0x0000FFFF, 3, 0, 19 },
> +    })
> +
> +    Name (AR43, Package() {
> +        // [SL21]: PCI Express Slot 33 on 3D on PC09
> +        Package() { 0x0000FFFF, 0, 0, 17 },
> +        Package() { 0x0000FFFF, 1, 0, 18 },
> +        Package() { 0x0000FFFF, 2, 0, 19 },
> +        Package() { 0x0000FFFF, 3, 0, 16 },
> +    })
> +
> +    Name (AR44, Package() {
> +        // [QR4A]: PCI Express Port 4A on PC10
> +        Package() { 0x0002FFFF, 0, 0, 18 },
> +        Package() { 0x0002FFFF, 1, 0, 19 },
> +        Package() { 0x0002FFFF, 2, 0, 16 },
> +        Package() { 0x0002FFFF, 3, 0, 17 },
> +        // [QR4B]: PCI Express Port 4B on PC10
> +        Package() { 0x0003FFFF, 0, 0, 19 },
> +        Package() { 0x0003FFFF, 1, 0, 16 },
> +        Package() { 0x0003FFFF, 2, 0, 17 },
> +        Package() { 0x0003FFFF, 3, 0, 18 },
> +        // [QR4C]: PCI Express Port 4C on PC10
> +        Package() { 0x0004FFFF, 0, 0, 16 },
> +        Package() { 0x0004FFFF, 1, 0, 17 },
> +        Package() { 0x0004FFFF, 2, 0, 18 },
> +        Package() { 0x0004FFFF, 3, 0, 19 },
> +        // [QR4D]: PCI Express Port 4D on PC10
> +        Package() { 0x0005FFFF, 0, 0, 17 },
> +        Package() { 0x0005FFFF, 1, 0, 18 },
> +        Package() { 0x0005FFFF, 2, 0, 19 },
> +        Package() { 0x0005FFFF, 3, 0, 16 },
> +    })
> +
> +    Name (AR45, Package() {
> +        // [SL22]: PCI Express Slot 34 on 4A on PC10
> +        Package() { 0x0000FFFF, 0, 0, 18 },
> +        Package() { 0x0000FFFF, 1, 0, 19 },
> +        Package() { 0x0000FFFF, 2, 0, 16 },
> +        Package() { 0x0000FFFF, 3, 0, 17 },
> +    })
> +
> +    Name (AR46, Package() {
> +        // [SL23]: PCI Express Slot 35 on 4B on PC10
> +        Package() { 0x0000FFFF, 0, 0, 19 },
> +        Package() { 0x0000FFFF, 1, 0, 16 },
> +        Package() { 0x0000FFFF, 2, 0, 17 },
> +        Package() { 0x0000FFFF, 3, 0, 18 },
> +    })
> +
> +    Name (AR47, Package() {
> +        // [SL24]: PCI Express Slot 36 on 4C on PC10
> +        Package() { 0x0000FFFF, 0, 0, 16 },
> +        Package() { 0x0000FFFF, 1, 0, 17 },
> +        Package() { 0x0000FFFF, 2, 0, 18 },
> +        Package() { 0x0000FFFF, 3, 0, 19 },
> +    })
> +
> +    Name (AR48, Package() {
> +        // [SL25]: PCI Express Slot 37 on 4D on PC10
> +        Package() { 0x0000FFFF, 0, 0, 17 },
> +        Package() { 0x0000FFFF, 1, 0, 18 },
> +        Package() { 0x0000FFFF, 2, 0, 19 },
> +        Package() { 0x0000FFFF, 3, 0, 16 },
> +    })
> +
> +    Name (AR49, Package() {
> +        // [QR5A]: PCI Express Port 5A on PC11
> +        Package() { 0x0002FFFF, 0, 0, 18 },
> +        Package() { 0x0002FFFF, 1, 0, 19 },
> +        Package() { 0x0002FFFF, 2, 0, 16 },
> +        Package() { 0x0002FFFF, 3, 0, 17 },
> +        // [QR5B]: PCI Express Port 5B on PC11
> +        Package() { 0x0003FFFF, 0, 0, 19 },
> +        Package() { 0x0003FFFF, 1, 0, 16 },
> +        Package() { 0x0003FFFF, 2, 0, 17 },
> +        Package() { 0x0003FFFF, 3, 0, 18 },
> +        // [QR5C]: PCI Express Port 5C on PC11
> +        Package() { 0x0004FFFF, 0, 0, 16 },
> +        Package() { 0x0004FFFF, 1, 0, 17 },
> +        Package() { 0x0004FFFF, 2, 0, 18 },
> +        Package() { 0x0004FFFF, 3, 0, 19 },
> +        // [QR5D]: PCI Express Port 5D on PC11
> +        Package() { 0x0005FFFF, 0, 0, 17 },
> +        Package() { 0x0005FFFF, 1, 0, 18 },
> +        Package() { 0x0005FFFF, 2, 0, 19 },
> +        Package() { 0x0005FFFF, 3, 0, 16 },
> +    })
> +
> +    Name (AR4A, Package() {
> +        // [SL26]: PCI Express Slot 38 on 5A on PC11
> +        Package() { 0x0000FFFF, 0, 0, 18 },
> +        Package() { 0x0000FFFF, 1, 0, 19 },
> +        Package() { 0x0000FFFF, 2, 0, 16 },
> +        Package() { 0x0000FFFF, 3, 0, 17 },
> +    })
> +
> +    Name (AR4B, Package() {
> +        // [SL27]: PCI Express Slot 39 on 5B on PC11
> +        Package() { 0x0000FFFF, 0, 0, 19 },
> +        Package() { 0x0000FFFF, 1, 0, 16 },
> +        Package() { 0x0000FFFF, 2, 0, 17 },
> +        Package() { 0x0000FFFF, 3, 0, 18 },
> +    })
> +
> +    Name (AR4C, Package() {
> +        // [SL28]: PCI Express Slot 40 on 5C on PC11
> +        Package() { 0x0000FFFF, 0, 0, 16 },
> +        Package() { 0x0000FFFF, 1, 0, 17 },
> +        Package() { 0x0000FFFF, 2, 0, 18 },
> +        Package() { 0x0000FFFF, 3, 0, 19 },
> +    })
> +
> +    Name (AR4D, Package() {
> +        // [SL29]: PCI Express Slot 41 on 5D on PC11
> +        Package() { 0x0000FFFF, 0, 0, 17 },
> +        Package() { 0x0000FFFF, 1, 0, 18 },
> +        Package() { 0x0000FFFF, 2, 0, 19 },
> +        Package() { 0x0000FFFF, 3, 0, 16 },
> +    })
> +
> +    Name (AR4E, Package() {
> +        // [UBX1]: Uncore 2 UBOX Device
> +        Package() { 0x0000FFFF, 0, 0, 16 },
> +        Package() { 0x0000FFFF, 1, 0, 17 },
> +        Package() { 0x0000FFFF, 2, 0, 18 },
> +        Package() { 0x0000FFFF, 3, 0, 19 },
> +        // [UP02]: Uncore 2 Misc 2 UPI 0-7 Device
> +        Package() { 0x0002FFFF, 0, 0, 16 },
> +        Package() { 0x0002FFFF, 1, 0, 17 },
> +        Package() { 0x0002FFFF, 2, 0, 18 },
> +        Package() { 0x0002FFFF, 3, 0, 19 },
> +        // [UP03]: Uncore 2 Misc 1 UPI 0-7 Device
> +        Package() { 0x0003FFFF, 0, 0, 16 },
> +        Package() { 0x0003FFFF, 1, 0, 17 },
> +        Package() { 0x0003FFFF, 2, 0, 18 },
> +        Package() { 0x0003FFFF, 3, 0, 19 },
> +        // [M2U3]: Uncore 2 M2UPI0 Device
> +        Package() { 0x0005FFFF, 0, 0, 16 },
> +        Package() { 0x0005FFFF, 1, 0, 17 },
> +        Package() { 0x0005FFFF, 2, 0, 18 },
> +        Package() { 0x0005FFFF, 3, 0, 19 },
> +        // [M2U4]: Uncore 2 M2UPI1 Device
> +        Package() { 0x0006FFFF, 0, 0, 16 },
> +        Package() { 0x0006FFFF, 1, 0, 17 },
> +        Package() { 0x0006FFFF, 2, 0, 18 },
> +        Package() { 0x0006FFFF, 3, 0, 19 },
> +        // [M2U5]: Uncore 2 M2UPI2 Device
> +        Package() { 0x0007FFFF, 0, 0, 16 },
> +        Package() { 0x0007FFFF, 1, 0, 17 },
> +        Package() { 0x0007FFFF, 2, 0, 18 },
> +        Package() { 0x0007FFFF, 3, 0, 19 },
> +        // [CSM1]: Uncore 2 CHASIS_SMBUS Devices
> +        Package() { 0x000BFFFF, 0, 0, 16 },
> +        Package() { 0x000BFFFF, 1, 0, 17 },
> +        Package() { 0x000BFFFF, 2, 0, 18 },
> +        Package() { 0x000BFFFF, 3, 0, 19 },
> +        // [M2M2]: Uncore 2 MS2MEM_SCF_MS2MEM0 Device
> +        Package() { 0x000CFFFF, 0, 0, 16 },
> +        Package() { 0x000CFFFF, 1, 0, 17 },
> +        Package() { 0x000CFFFF, 2, 0, 18 },
> +        Package() { 0x000CFFFF, 3, 0, 19 },
> +        // [M2M3]: Uncore 2 MS2MEM_SCF_MS2MEM1 Device
> +        Package() { 0x000DFFFF, 0, 0, 16 },
> +        Package() { 0x000DFFFF, 1, 0, 17 },
> +        Package() { 0x000DFFFF, 2, 0, 18 },
> +        Package() { 0x000DFFFF, 3, 0, 19 },
> +        // [MCD2]: Uncore 2 MCDDR0 Device
> +        Package() { 0x001AFFFF, 0, 0, 16 },
> +        Package() { 0x001AFFFF, 1, 0, 17 },
> +        Package() { 0x001AFFFF, 2, 0, 18 },
> +        Package() { 0x001AFFFF, 3, 0, 19 },
> +        // [MCD3]: Uncore 2 MCDDR1 Device
> +        Package() { 0x001BFFFF, 0, 0, 16 },
> +        Package() { 0x001BFFFF, 1, 0, 17 },
> +        Package() { 0x001BFFFF, 2, 0, 18 },
> +        Package() { 0x001BFFFF, 3, 0, 19 },
> +    })
> +
> +    Name (AR4F, Package() {
> +        // [DHA0]: Uncore 3 GRP1_CHA0-7 Device
> +        Package() { 0x0000FFFF, 0, 0, 16 },
> +        Package() { 0x0000FFFF, 1, 0, 17 },
> +        Package() { 0x0000FFFF, 2, 0, 18 },
> +        Package() { 0x0000FFFF, 3, 0, 19 },
> +        // [DHA1]: Uncore 3 GRP1_CHA8-15 Device
> +        Package() { 0x0001FFFF, 0, 0, 16 },
> +        Package() { 0x0001FFFF, 1, 0, 17 },
> +        Package() { 0x0001FFFF, 2, 0, 18 },
> +        Package() { 0x0001FFFF, 3, 0, 19 },
> +        // [DHA2]: Uncore 3 GRP1_CHA16-23 Device
> +        Package() { 0x0002FFFF, 0, 0, 16 },
> +        Package() { 0x0002FFFF, 1, 0, 17 },
> +        Package() { 0x0002FFFF, 2, 0, 18 },
> +        Package() { 0x0002FFFF, 3, 0, 19 },
> +        // [DHA3]: Uncore 3 GRP1_CHAU24-31 Device
> +        Package() { 0x0003FFFF, 0, 0, 16 },
> +        Package() { 0x0003FFFF, 1, 0, 17 },
> +        Package() { 0x0003FFFF, 2, 0, 18 },
> +        Package() { 0x0003FFFF, 3, 0, 19 },
> +        // [DHA4]: Uncore 3 GRP1_CHA32-33 Device
> +        Package() { 0x0004FFFF, 0, 0, 16 },
> +        Package() { 0x0004FFFF, 1, 0, 17 },
> +        Package() { 0x0004FFFF, 2, 0, 18 },
> +        Package() { 0x0004FFFF, 3, 0, 19 },
> +        // [DHA5]: Uncore 3 GRP0_CHA0-7 Device
> +        Package() { 0x000AFFFF, 0, 0, 16 },
> +        Package() { 0x000AFFFF, 1, 0, 17 },
> +        Package() { 0x000AFFFF, 2, 0, 18 },
> +        Package() { 0x000AFFFF, 3, 0, 19 },
> +        // [DHA8]: Uncore 3 GRP0_CHA24-31 Device
> +        Package() { 0x000DFFFF, 0, 0, 16 },
> +        Package() { 0x000DFFFF, 1, 0, 17 },
> +        Package() { 0x000DFFFF, 2, 0, 18 },
> +        Package() { 0x000DFFFF, 3, 0, 19 },
> +        // [DHA9]: Uncore 3 GRP0_CHA32-33 Device
> +        Package() { 0x000EFFFF, 0, 0, 16 },
> +        Package() { 0x000EFFFF, 1, 0, 17 },
> +        Package() { 0x000EFFFF, 2, 0, 18 },
> +        Package() { 0x000EFFFF, 3, 0, 19 },
> +        // [DHA6]: Uncore 3 GRP0_CHA8-15 Device
> +        Package() { 0x00B0FFFF, 0, 0, 16 },
> +        Package() { 0x00B0FFFF, 1, 0, 17 },
> +        Package() { 0x00B0FFFF, 2, 0, 18 },
> +        Package() { 0x00B0FFFF, 3, 0, 19 },
> +        // [DHA7]: Uncore 3 GRP0_CHA16-23 Device
> +        Package() { 0x000CFFFF, 0, 0, 16 },
> +        Package() { 0x000CFFFF, 1, 0, 17 },
> +        Package() { 0x000CFFFF, 2, 0, 18 },
> +        Package() { 0x000CFFFF, 3, 0, 19 },
> +        // [CA01]: Uncore 3 CHAALL0-1 Device
> +        Package() { 0x001DFFFF, 0, 0, 16 },
> +        Package() { 0x001DFFFF, 1, 0, 17 },
> +        Package() { 0x001DFFFF, 2, 0, 18 },
> +        Package() { 0x001DFFFF, 3, 0, 19 },
> +        // [PUC1]: Uncore 3 CHASIS_PUINT0-7 Device
> +        Package() { 0x001EFFFF, 0, 0, 16 },
> +        Package() { 0x001EFFFF, 1, 0, 17 },
> +        Package() { 0x001EFFFF, 2, 0, 18 },
> +        Package() { 0x001EFFFF, 3, 0, 19 },
> +        // [GN31]: Uncore 3 Gen3Phy Device
> +        Package() { 0x001FFFFF, 0, 0, 16 },
> +        Package() { 0x001FFFFF, 1, 0, 17 },
> +        Package() { 0x001FFFFF, 2, 0, 18 },
> +        Package() { 0x001FFFFF, 3, 0, 19 },
> +    })
> +#endif
> +
> +#if MAX_SOCKET > 2
> +    Name (AR50, Package() {
> +        // [IIM2]: IIOMISC on PC12
> +        Package() { 0x0000FFFF, 0, 0, 16 },
> +        Package() { 0x0000FFFF, 1, 0, 17 },
> +        Package() { 0x0000FFFF, 2, 0, 18 },
> +        Package() { 0x0000FFFF, 3, 0, 19 },
> +        // [CB2A]: CB3DMA on PC12
> +        // [CB2E]: CB3DMA on PC12
> +        Package() { 0x0001FFFF, 0, 0, 16 },
> +        // [CB2B]: CB3DMA on PC12
> +        // [CB2F]: CB3DMA on PC12
> +        Package() { 0x0001FFFF, 1, 0, 17 },
> +        // [CB2C]: CB3DMA on PC12
> +        // [CB2G]: CB3DMA on PC12
> +        Package() { 0x0001FFFF, 2, 0, 18 },
> +        // [CB2D]: CB3DMA on PC12
> +        // [CB2H]: CB3DMA on PC12
> +        Package() { 0x0001FFFF, 3, 0, 19 },
> +        // NorthPeak
> +        Package() { 0x0002FFFF, 0, 0, 18 },
> +    })
> +
> +    Name (AR51, Package() {
> +        // [RR1A]: PCI Express Port 1A on PC13
> +        Package() { 0x0002FFFF, 0, 0, 18 },
> +        Package() { 0x0002FFFF, 1, 0, 19 },
> +        Package() { 0x0002FFFF, 2, 0, 16 },
> +        Package() { 0x0002FFFF, 3, 0, 17 },
> +        // [RR1B]: PCI Express Port 1B on PC13
> +        Package() { 0x0003FFFF, 0, 0, 19 },
> +        Package() { 0x0003FFFF, 1, 0, 16 },
> +        Package() { 0x0003FFFF, 2, 0, 17 },
> +        Package() { 0x0003FFFF, 3, 0, 18 },
> +        // [RR1C]: PCI Express Port 1C on PC13
> +        Package() { 0x0004FFFF, 0, 0, 16 },
> +        Package() { 0x0004FFFF, 1, 0, 17 },
> +        Package() { 0x0004FFFF, 2, 0, 18 },
> +        Package() { 0x0004FFFF, 3, 0, 19 },
> +        // [RR1D]: PCI Express Port 1D on PC13
> +        Package() { 0x0005FFFF, 0, 0, 17 },
> +        Package() { 0x0005FFFF, 1, 0, 18 },
> +        Package() { 0x0005FFFF, 2, 0, 19 },
> +        Package() { 0x0005FFFF, 3, 0, 16 },
> +    })
> +
> +    Name (AR52, Package() {
> +        // [SL2B]: PCI Express Slot 43 on 1A on PC13
> +        Package() { 0x0000FFFF, 0, 0, 18 },
> +        Package() { 0x0000FFFF, 1, 0, 19 },
> +        Package() { 0x0000FFFF, 2, 0, 16 },
> +        Package() { 0x0000FFFF, 3, 0, 17 },
> +    })
> +
> +    Name (AR53, Package() {
> +        // [SL2C]: PCI Express Slot 44 on 1B on PC13
> +        Package() { 0x0000FFFF, 0, 0, 19 },
> +        Package() { 0x0000FFFF, 1, 0, 16 },
> +        Package() { 0x0000FFFF, 2, 0, 17 },
> +        Package() { 0x0000FFFF, 3, 0, 18 },
> +    })
> +
> +    Name (AR54, Package() {
> +        // [SL2D]: PCI Express Slot 45 on 1C on PC13
> +        Package() { 0x0000FFFF, 0, 0, 16 },
> +        Package() { 0x0000FFFF, 1, 0, 17 },
> +        Package() { 0x0000FFFF, 2, 0, 18 },
> +        Package() { 0x0000FFFF, 3, 0, 19 },
> +    })
> +
> +    Name (AR55, Package() {
> +        // [SL2E]: PCI Express Slot 46 on 1D on PC13
> +        Package() { 0x0000FFFF, 0, 0, 17 },
> +        Package() { 0x0000FFFF, 1, 0, 18 },
> +        Package() { 0x0000FFFF, 2, 0, 19 },
> +        Package() { 0x0000FFFF, 3, 0, 16 },
> +    })
> +
> +    Name (AR56, Package() {
> +        // [RR2A]: PCI Express Port 2A on PC14
> +        Package() { 0x0002FFFF, 0, 0, 18 },
> +        Package() { 0x0002FFFF, 1, 0, 19 },
> +        Package() { 0x0002FFFF, 2, 0, 16 },
> +        Package() { 0x0002FFFF, 3, 0, 17 },
> +        // [RR2B]: PCI Express Port 2B on PC14
> +        Package() { 0x0003FFFF, 0, 0, 19 },
> +        Package() { 0x0003FFFF, 1, 0, 16 },
> +        Package() { 0x0003FFFF, 2, 0, 17 },
> +        Package() { 0x0003FFFF, 3, 0, 18 },
> +        // [RR2C]: PCI Express Port 2C on PC14
> +        Package() { 0x0004FFFF, 0, 0, 16 },
> +        Package() { 0x0004FFFF, 1, 0, 17 },
> +        Package() { 0x0004FFFF, 2, 0, 18 },
> +        Package() { 0x0004FFFF, 3, 0, 19 },
> +        // [RR2D]: PCI Express Port 2D on PC14
> +        Package() { 0x0005FFFF, 0, 0, 17 },
> +        Package() { 0x0005FFFF, 1, 0, 18 },
> +        Package() { 0x0005FFFF, 2, 0, 19 },
> +        Package() { 0x0005FFFF, 3, 0, 16 },
> +    })
> +
> +    Name (AR57, Package() {
> +        // [SL2F]: PCI Express Slot 47 on 2A on PC14
> +        Package() { 0x0000FFFF, 0, 0, 18 },
> +        Package() { 0x0000FFFF, 1, 0, 19 },
> +        Package() { 0x0000FFFF, 2, 0, 16 },
> +        Package() { 0x0000FFFF, 3, 0, 17 },
> +    })
> +
> +    Name (AR58, Package() {
> +        // [SL30]: PCI Express Slot 48 on 2B on PC14
> +        Package() { 0x0000FFFF, 0, 0, 19 },
> +        Package() { 0x0000FFFF, 1, 0, 16 },
> +        Package() { 0x0000FFFF, 2, 0, 17 },
> +        Package() { 0x0000FFFF, 3, 0, 18 },
> +    })
> +
> +    Name (AR59, Package() {
> +        // [SL31]: PCI Express Slot 49 on 2C on PC14
> +        Package() { 0x0000FFFF, 0, 0, 16 },
> +        Package() { 0x0000FFFF, 1, 0, 17 },
> +        Package() { 0x0000FFFF, 2, 0, 18 },
> +        Package() { 0x0000FFFF, 3, 0, 19 },
> +    })
> +
> +    Name (AR5A, Package() {
> +        // [SL32]: PCI Express Slot 50 on 2D on PC14
> +        Package() { 0x0000FFFF, 0, 0, 17 },
> +        Package() { 0x0000FFFF, 1, 0, 18 },
> +        Package() { 0x0000FFFF, 2, 0, 19 },
> +        Package() { 0x0000FFFF, 3, 0, 16 },
> +    })
> +
> +    Name (AR5B, Package() {
> +        // [RR3A]: PCI Express Port 3A on PC15
> +        Package() { 0x0002FFFF, 0, 0, 18 },
> +        Package() { 0x0002FFFF, 1, 0, 19 },
> +        Package() { 0x0002FFFF, 2, 0, 16 },
> +        Package() { 0x0002FFFF, 3, 0, 17 },
> +        // [RR3B]: PCI Express Port 3B on PC15
> +        Package() { 0x0003FFFF, 0, 0, 19 },
> +        Package() { 0x0003FFFF, 1, 0, 16 },
> +        Package() { 0x0003FFFF, 2, 0, 17 },
> +        Package() { 0x0003FFFF, 3, 0, 18 },
> +        // [RR3C]: PCI Express Port 3C on PC15
> +        Package() { 0x0004FFFF, 0, 0, 16 },
> +        Package() { 0x0004FFFF, 1, 0, 17 },
> +        Package() { 0x0004FFFF, 2, 0, 18 },
> +        Package() { 0x0004FFFF, 3, 0, 19 },
> +        // [RR3D]: PCI Express Port 3D on PC15
> +        Package() { 0x0005FFFF, 0, 0, 17 },
> +        Package() { 0x0005FFFF, 1, 0, 18 },
> +        Package() { 0x0005FFFF, 2, 0, 19 },
> +        Package() { 0x0005FFFF, 3, 0, 16 },
> +    })
> +
> +    Name (AR5C, Package() {
> +        // [SL33]: PCI Express Slot 51 on 3A on PC15
> +        Package() { 0x0000FFFF, 0, 0, 18 },
> +        Package() { 0x0000FFFF, 1, 0, 19 },
> +        Package() { 0x0000FFFF, 2, 0, 16 },
> +        Package() { 0x0000FFFF, 3, 0, 17 },
> +    })
> +
> +    Name (AR5D, Package() {
> +        // [SL34]: PCI Express Slot 52 on 3B on PC15
> +        Package() { 0x0000FFFF, 0, 0, 19 },
> +        Package() { 0x0000FFFF, 1, 0, 16 },
> +        Package() { 0x0000FFFF, 2, 0, 17 },
> +        Package() { 0x0000FFFF, 3, 0, 18 },
> +    })
> +
> +    Name (AR5E, Package() {
> +        // [SL35]: PCI Express Slot 53 on 3C on PC15
> +        Package() { 0x0000FFFF, 0, 0, 16 },
> +        Package() { 0x0000FFFF, 1, 0, 17 },
> +        Package() { 0x0000FFFF, 2, 0, 18 },
> +        Package() { 0x0000FFFF, 3, 0, 19 },
> +    })
> +
> +    Name (AR5F, Package() {
> +        // [SL36]: PCI Express Slot 54 on 3D on PC15
> +        Package() { 0x0000FFFF, 0, 0, 17 },
> +        Package() { 0x0000FFFF, 1, 0, 18 },
> +        Package() { 0x0000FFFF, 2, 0, 19 },
> +        Package() { 0x0000FFFF, 3, 0, 16 },
> +    })
> +
> +    Name (AR60, Package() {
> +        // [RR4A]: PCI Express Port 4A on PC16
> +        Package() { 0x0002FFFF, 0, 0, 18 },
> +        Package() { 0x0002FFFF, 1, 0, 19 },
> +        Package() { 0x0002FFFF, 2, 0, 16 },
> +        Package() { 0x0002FFFF, 3, 0, 17 },
> +        // [RR4B]: PCI Express Port 4B on PC16
> +        Package() { 0x0003FFFF, 0, 0, 19 },
> +        Package() { 0x0003FFFF, 1, 0, 16 },
> +        Package() { 0x0003FFFF, 2, 0, 17 },
> +        Package() { 0x0003FFFF, 3, 0, 18 },
> +        // [RR4C]: PCI Express Port 4C on PC16
> +        Package() { 0x0004FFFF, 0, 0, 16 },
> +        Package() { 0x0004FFFF, 1, 0, 17 },
> +        Package() { 0x0004FFFF, 2, 0, 18 },
> +        Package() { 0x0004FFFF, 3, 0, 19 },
> +        // [RR4D]: PCI Express Port 4D on PC16
> +        Package() { 0x0005FFFF, 0, 0, 17 },
> +        Package() { 0x0005FFFF, 1, 0, 18 },
> +        Package() { 0x0005FFFF, 2, 0, 19 },
> +        Package() { 0x0005FFFF, 3, 0, 16 },
> +    })
> +
> +    Name (AR61, Package() {
> +        // [SL37]: PCI Express Slot 55 on 4A on PC16
> +        Package() { 0x0000FFFF, 0, 0, 18 },
> +        Package() { 0x0000FFFF, 1, 0, 19 },
> +        Package() { 0x0000FFFF, 2, 0, 16 },
> +        Package() { 0x0000FFFF, 3, 0, 17 },
> +    })
> +
> +    Name (AR62, Package() {
> +        // [SL38]: PCI Express Slot 56 on 4B on PC16
> +        Package() { 0x0000FFFF, 0, 0, 19 },
> +        Package() { 0x0000FFFF, 1, 0, 16 },
> +        Package() { 0x0000FFFF, 2, 0, 17 },
> +        Package() { 0x0000FFFF, 3, 0, 18 },
> +    })
> +
> +    Name (AR63, Package() {
> +        // [SL39]: PCI Express Slot 57 on 4C on PC16
> +        Package() { 0x0000FFFF, 0, 0, 16 },
> +        Package() { 0x0000FFFF, 1, 0, 17 },
> +        Package() { 0x0000FFFF, 2, 0, 18 },
> +        Package() { 0x0000FFFF, 3, 0, 19 },
> +    })
> +
> +    Name (AR64, Package() {
> +        // [SL3A]: PCI Express Slot 58 on 4D on PC16
> +        Package() { 0x0000FFFF, 0, 0, 17 },
> +        Package() { 0x0000FFFF, 1, 0, 18 },
> +        Package() { 0x0000FFFF, 2, 0, 19 },
> +        Package() { 0x0000FFFF, 3, 0, 16 },
> +    })
> +
> +    Name (AR65, Package() {
> +        // [RR5A]: PCI Express Port 5A on PC17
> +        Package() { 0x0002FFFF, 0, 0, 18 },
> +        Package() { 0x0002FFFF, 1, 0, 19 },
> +        Package() { 0x0002FFFF, 2, 0, 16 },
> +        Package() { 0x0002FFFF, 3, 0, 17 },
> +        // [RR5B]: PCI Express Port 5B on PC17
> +        Package() { 0x0003FFFF, 0, 0, 19 },
> +        Package() { 0x0003FFFF, 1, 0, 16 },
> +        Package() { 0x0003FFFF, 2, 0, 17 },
> +        Package() { 0x0003FFFF, 3, 0, 18 },
> +        // [RR5C]: PCI Express Port 5C on PC17
> +        Package() { 0x0004FFFF, 0, 0, 16 },
> +        Package() { 0x0004FFFF, 1, 0, 17 },
> +        Package() { 0x0004FFFF, 2, 0, 18 },
> +        Package() { 0x0004FFFF, 3, 0, 19 },
> +        // [RR5D]: PCI Express Port 5D on PC17
> +        Package() { 0x0005FFFF, 0, 0, 17 },
> +        Package() { 0x0005FFFF, 1, 0, 18 },
> +        Package() { 0x0005FFFF, 2, 0, 19 },
> +        Package() { 0x0005FFFF, 3, 0, 16 },
> +    })
> +
> +    Name (AR66, Package() {
> +        // [SL3B]: PCI Express Slot 59 on 5A on PC17
> +        Package() { 0x0000FFFF, 0, 0, 18 },
> +        Package() { 0x0000FFFF, 1, 0, 19 },
> +        Package() { 0x0000FFFF, 2, 0, 16 },
> +        Package() { 0x0000FFFF, 3, 0, 17 },
> +    })
> +
> +    Name (AR67, Package() {
> +        // [SL3C]: PCI Express Slot 60 on 5B on PC17
> +        Package() { 0x0000FFFF, 0, 0, 19 },
> +        Package() { 0x0000FFFF, 1, 0, 16 },
> +        Package() { 0x0000FFFF, 2, 0, 17 },
> +        Package() { 0x0000FFFF, 3, 0, 18 },
> +    })
> +
> +    Name (AR68, Package() {
> +        // [SL3D]: PCI Express Slot 61 on 5C on PC17
> +        Package() { 0x0000FFFF, 0, 0, 16 },
> +        Package() { 0x0000FFFF, 1, 0, 17 },
> +        Package() { 0x0000FFFF, 2, 0, 18 },
> +        Package() { 0x0000FFFF, 3, 0, 19 },
> +    })
> +
> +    Name (AR69, Package() {
> +        // [SL3E]: PCI Express Slot 62 on 5D on PC17
> +        Package() { 0x0000FFFF, 0, 0, 17 },
> +        Package() { 0x0000FFFF, 1, 0, 18 },
> +        Package() { 0x0000FFFF, 2, 0, 19 },
> +        Package() { 0x0000FFFF, 3, 0, 16 },
> +    })
> +
> +    Name (AR6A, Package() {
> +        // [UBX2]: Uncore 4 UBOX Device
> +        Package() { 0x0000FFFF, 0, 0, 16 },
> +        Package() { 0x0000FFFF, 1, 0, 17 },
> +        Package() { 0x0000FFFF, 2, 0, 18 },
> +        Package() { 0x0000FFFF, 3, 0, 19 },
> +        // [UP04]: Uncore 4 Misc 2 UPI 0-7 Device
> +        Package() { 0x0002FFFF, 0, 0, 16 },
> +        Package() { 0x0002FFFF, 1, 0, 17 },
> +        Package() { 0x0002FFFF, 2, 0, 18 },
> +        Package() { 0x0002FFFF, 3, 0, 19 },
> +        // [UP05]: Uncore 4 Misc 1 UPI 0-7 Device
> +        Package() { 0x0003FFFF, 0, 0, 16 },
> +        Package() { 0x0003FFFF, 1, 0, 17 },
> +        Package() { 0x0003FFFF, 2, 0, 18 },
> +        Package() { 0x0003FFFF, 3, 0, 19 },
> +        // [M2U6]: Uncore 4 M2UPI Device
> +        Package() { 0x0005FFFF, 0, 0, 16 },
> +        Package() { 0x0005FFFF, 1, 0, 17 },
> +        Package() { 0x0005FFFF, 2, 0, 18 },
> +        Package() { 0x0005FFFF, 3, 0, 19 },
> +        // [M2U7]: Uncore 4 M2UPI Device
> +        Package() { 0x0006FFFF, 0, 0, 16 },
> +        Package() { 0x0006FFFF, 1, 0, 17 },
> +        Package() { 0x0006FFFF, 2, 0, 18 },
> +        Package() { 0x0006FFFF, 3, 0, 19 },
> +        // [M2U8]: Uncore 4 M2UPI Device
> +        Package() { 0x0007FFFF, 0, 0, 16 },
> +        Package() { 0x0007FFFF, 1, 0, 17 },
> +        Package() { 0x0007FFFF, 2, 0, 18 },
> +        Package() { 0x0007FFFF, 3, 0, 19 },
> +        // [CSM2]: Uncore 4 CHASIS_SMBUS Devices
> +        Package() { 0x000BFFFF, 0, 0, 16 },
> +        Package() { 0x000BFFFF, 1, 0, 17 },
> +        Package() { 0x000BFFFF, 2, 0, 18 },
> +        Package() { 0x000BFFFF, 3, 0, 19 },
> +        // [M2M4]: Uncore 4 MS2MEM_SCF_MS2MEM0 Device
> +        Package() { 0x000CFFFF, 0, 0, 16 },
> +        Package() { 0x000CFFFF, 1, 0, 17 },
> +        Package() { 0x000CFFFF, 2, 0, 18 },
> +        Package() { 0x000CFFFF, 3, 0, 19 },
> +        // [M2M5]: Uncore 4 MS2MEM_SCF_MS2MEM1 Device
> +        Package() { 0x000DFFFF, 0, 0, 16 },
> +        Package() { 0x000DFFFF, 1, 0, 17 },
> +        Package() { 0x000DFFFF, 2, 0, 18 },
> +        Package() { 0x000DFFFF, 3, 0, 19 },
> +        // [MCD4]: Uncore 4 MCDDR0 Device
> +        Package() { 0x001AFFFF, 0, 0, 16 },
> +        Package() { 0x001AFFFF, 1, 0, 17 },
> +        Package() { 0x001AFFFF, 2, 0, 18 },
> +        Package() { 0x001AFFFF, 3, 0, 19 },
> +        // [MCD5]: Uncore 4 MCDDR1 Device
> +        Package() { 0x001BFFFF, 0, 0, 16 },
> +        Package() { 0x001BFFFF, 1, 0, 17 },
> +        Package() { 0x001BFFFF, 2, 0, 18 },
> +        Package() { 0x001BFFFF, 3, 0, 19 },
> +    })
> +
> +    Name (AR6B, Package() {
> +        // [EHA0]: Uncore 5 GRP1_CHA0-7 Device
> +        Package() { 0x0000FFFF, 0, 0, 16 },
> +        Package() { 0x0000FFFF, 1, 0, 17 },
> +        Package() { 0x0000FFFF, 2, 0, 18 },
> +        Package() { 0x0000FFFF, 3, 0, 19 },
> +        // [EHA1]: Uncore 5 GRP1_CHA8-15 Device
> +        Package() { 0x0001FFFF, 0, 0, 16 },
> +        Package() { 0x0001FFFF, 1, 0, 17 },
> +        Package() { 0x0001FFFF, 2, 0, 18 },
> +        Package() { 0x0001FFFF, 3, 0, 19 },
> +        // [EHA2]: Uncore 5 GRP1_CHA16-23 Device
> +        Package() { 0x0002FFFF, 0, 0, 16 },
> +        Package() { 0x0002FFFF, 1, 0, 17 },
> +        Package() { 0x0002FFFF, 2, 0, 18 },
> +        Package() { 0x0002FFFF, 3, 0, 19 },
> +        // [EHA3]: Uncore 5 GRP1_CHAU24-31 Device
> +        Package() { 0x0003FFFF, 0, 0, 16 },
> +        Package() { 0x0003FFFF, 1, 0, 17 },
> +        Package() { 0x0003FFFF, 2, 0, 18 },
> +        Package() { 0x0003FFFF, 3, 0, 19 },
> +        // [EHA4]: Uncore 5 GRP1_CHA32-33 Device
> +        Package() { 0x0004FFFF, 0, 0, 16 },
> +        Package() { 0x0004FFFF, 1, 0, 17 },
> +        Package() { 0x0004FFFF, 2, 0, 18 },
> +        Package() { 0x0004FFFF, 3, 0, 19 },
> +        // [EHA5]: Uncore 5 GRP0_CHA0-7 Device
> +        Package() { 0x000AFFFF, 0, 0, 16 },
> +        Package() { 0x000AFFFF, 1, 0, 17 },
> +        Package() { 0x000AFFFF, 2, 0, 18 },
> +        Package() { 0x000AFFFF, 3, 0, 19 },
> +        // [EHA8]: Uncore 5 GRP0_CHA24-31 Device
> +        Package() { 0x000DFFFF, 0, 0, 16 },
> +        Package() { 0x000DFFFF, 1, 0, 17 },
> +        Package() { 0x000DFFFF, 2, 0, 18 },
> +        Package() { 0x000DFFFF, 3, 0, 19 },
> +        // [EHA9]: Uncore 5 GRP0_CHA32-33 Device
> +        Package() { 0x000EFFFF, 0, 0, 16 },
> +        Package() { 0x000EFFFF, 1, 0, 17 },
> +        Package() { 0x000EFFFF, 2, 0, 18 },
> +        Package() { 0x000EFFFF, 3, 0, 19 },
> +        // [EHA6]: Uncore 5 GRP0_CHA8-15 Device
> +        Package() { 0x00B0FFFF, 0, 0, 16 },
> +        Package() { 0x00B0FFFF, 1, 0, 17 },
> +        Package() { 0x00B0FFFF, 2, 0, 18 },
> +        Package() { 0x00B0FFFF, 3, 0, 19 },
> +        // [EHA7]: Uncore 5 GRP0_CHA16-23 Device
> +        Package() { 0x000CFFFF, 0, 0, 16 },
> +        Package() { 0x000CFFFF, 1, 0, 17 },
> +        Package() { 0x000CFFFF, 2, 0, 18 },
> +        Package() { 0x000CFFFF, 3, 0, 19 },
> +        // [CA02]: Uncore 5 CHAALL0-1 Device
> +        Package() { 0x001DFFFF, 0, 0, 16 },
> +        Package() { 0x001DFFFF, 1, 0, 17 },
> +        Package() { 0x001DFFFF, 2, 0, 18 },
> +        Package() { 0x001DFFFF, 3, 0, 19 },
> +        // [PUC2]: Uncore 5 CHASIS_PUINT0-7 Device
> +        Package() { 0x001EFFFF, 0, 0, 16 },
> +        Package() { 0x001EFFFF, 1, 0, 17 },
> +        Package() { 0x001EFFFF, 2, 0, 18 },
> +        Package() { 0x001EFFFF, 3, 0, 19 },
> +        // [GN32]: Uncore 5 Gen3Phy Device
> +        Package() { 0x001FFFFF, 0, 0, 16 },
> +        Package() { 0x001FFFFF, 1, 0, 17 },
> +        Package() { 0x001FFFFF, 2, 0, 18 },
> +        Package() { 0x001FFFFF, 3, 0, 19 },
> +    })
> +#endif
> +
> +#if MAX_SOCKET > 3
> +    Name (AR6C, Package() {
> +        // [IIM3]: IIOMISC on PC18
> +        Package() { 0x0000FFFF, 0, 0, 16 },
> +        Package() { 0x0000FFFF, 1, 0, 17 },
> +        Package() { 0x0000FFFF, 2, 0, 18 },
> +        Package() { 0x0000FFFF, 3, 0, 19 },
> +        // [CB3A]: CB3DMA on PC18
> +        // [CB3E]: CB3DMA on PC18
> +        Package() { 0x0001FFFF, 0, 0, 16 },
> +        // [CB3B]: CB3DMA on PC18
> +        // [CB3F]: CB3DMA on PC18
> +        Package() { 0x0001FFFF, 1, 0, 17 },
> +        // [CB3C]: CB3DMA on PC18
> +        // [CB3G]: CB3DMA on PC18
> +        Package() { 0x0001FFFF, 2, 0, 18 },
> +        // [CB3D]: CB3DMA on PC18
> +        // [CB3H]: CB3DMA on PC18
> +        Package() { 0x0001FFFF, 3, 0, 19 },
> +        // NorthPeak
> +        Package() { 0x0002FFFF, 0, 0, 18 },
> +    })
> +
> +    Name (AR6D, Package() {
> +        // [SR1A]: PCI Express Port 1A on PC19
> +        Package() { 0x0002FFFF, 0, 0, 18 },
> +        Package() { 0x0002FFFF, 1, 0, 19 },
> +        Package() { 0x0002FFFF, 2, 0, 16 },
> +        Package() { 0x0002FFFF, 3, 0, 17 },
> +        // [SR1B]: PCI Express Port 1B on PC19
> +        Package() { 0x0003FFFF, 0, 0, 19 },
> +        Package() { 0x0003FFFF, 1, 0, 16 },
> +        Package() { 0x0003FFFF, 2, 0, 17 },
> +        Package() { 0x0003FFFF, 3, 0, 18 },
> +        // [SR1C]: PCI Express Port 1C on PC19
> +        Package() { 0x0004FFFF, 0, 0, 16 },
> +        Package() { 0x0004FFFF, 1, 0, 17 },
> +        Package() { 0x0004FFFF, 2, 0, 18 },
> +        Package() { 0x0004FFFF, 3, 0, 19 },
> +        // [SR1D]: PCI Express Port 1D on PC19
> +        Package() { 0x0005FFFF, 0, 0, 17 },
> +        Package() { 0x0005FFFF, 1, 0, 18 },
> +        Package() { 0x0005FFFF, 2, 0, 19 },
> +        Package() { 0x0005FFFF, 3, 0, 16 },
> +    })
> +
> +    Name (AR6E, Package() {
> +        // [SL40]: PCI Express Slot 64 on 1A on PC19
> +        Package() { 0x0000FFFF, 0, 0, 18 },
> +        Package() { 0x0000FFFF, 1, 0, 19 },
> +        Package() { 0x0000FFFF, 2, 0, 16 },
> +        Package() { 0x0000FFFF, 3, 0, 17 },
> +    })
> +
> +    Name (AR6F, Package() {
> +        // [SL41]: PCI Express Slot 65 on 1B on  PC19
> +        Package() { 0x0000FFFF, 0, 0, 19 },
> +        Package() { 0x0000FFFF, 1, 0, 16 },
> +        Package() { 0x0000FFFF, 2, 0, 17 },
> +        Package() { 0x0000FFFF, 3, 0, 18 },
> +    })
> +
> +    Name (AR70, Package() {
> +        // [SL42]: PCI Express Slot 66 on 1C on  PC19
> +        Package() { 0x0000FFFF, 0, 0, 16 },
> +        Package() { 0x0000FFFF, 1, 0, 17 },
> +        Package() { 0x0000FFFF, 2, 0, 18 },
> +        Package() { 0x0000FFFF, 3, 0, 19 },
> +    })
> +
> +    Name (AR71, Package() {
> +        // [SL43]: PCI Express Slot 67 on 1D on  PC19
> +        Package() { 0x0000FFFF, 0, 0, 17 },
> +        Package() { 0x0000FFFF, 1, 0, 18 },
> +        Package() { 0x0000FFFF, 2, 0, 19 },
> +        Package() { 0x0000FFFF, 3, 0, 16 },
> +    })
> +
> +    Name (AR72, Package() {
> +        // [SR2A]: PCI Express Port 2A on  PC20
> +        Package() { 0x0002FFFF, 0, 0, 18 },
> +        Package() { 0x0002FFFF, 1, 0, 19 },
> +        Package() { 0x0002FFFF, 2, 0, 16 },
> +        Package() { 0x0002FFFF, 3, 0, 17 },
> +        // [SR2B]: PCI Express Port 2B on PC20
> +        Package() { 0x0003FFFF, 0, 0, 19 },
> +        Package() { 0x0003FFFF, 1, 0, 16 },
> +        Package() { 0x0003FFFF, 2, 0, 17 },
> +        Package() { 0x0003FFFF, 3, 0, 18 },
> +        // [SR2C]: PCI Express Port 2C on PC20
> +        Package() { 0x0004FFFF, 0, 0, 16 },
> +        Package() { 0x0004FFFF, 1, 0, 17 },
> +        Package() { 0x0004FFFF, 2, 0, 18 },
> +        Package() { 0x0004FFFF, 3, 0, 19 },
> +        // [SR2D]: PCI Express Port 2D on PC20
> +        Package() { 0x0005FFFF, 0, 0, 17 },
> +        Package() { 0x0005FFFF, 1, 0, 18 },
> +        Package() { 0x0005FFFF, 2, 0, 19 },
> +        Package() { 0x0005FFFF, 3, 0, 16 },
> +    })
> +
> +    Name (AR73, Package() {
> +        // [SL44]: PCI Express Slot 68 on 2A on PC20
> +        Package() { 0x0000FFFF, 0, 0, 18 },
> +        Package() { 0x0000FFFF, 1, 0, 19 },
> +        Package() { 0x0000FFFF, 2, 0, 16 },
> +        Package() { 0x0000FFFF, 3, 0, 17 },
> +    })
> +
> +    Name (AR74, Package() {
> +        // [SL45]: PCI Express Slot 69 on 2B on PC20
> +        Package() { 0x0000FFFF, 0, 0, 19 },
> +        Package() { 0x0000FFFF, 1, 0, 16 },
> +        Package() { 0x0000FFFF, 2, 0, 17 },
> +        Package() { 0x0000FFFF, 3, 0, 18 },
> +    })
> +
> +    Name (AR75, Package() {
> +        // [SL46]: PCI Express Slot 70 on 2C on PC20
> +        Package() { 0x0000FFFF, 0, 0, 16 },
> +        Package() { 0x0000FFFF, 1, 0, 17 },
> +        Package() { 0x0000FFFF, 2, 0, 18 },
> +        Package() { 0x0000FFFF, 3, 0, 19 },
> +    })
> +
> +    Name (AR76, Package() {
> +        // [SL47]: PCI Express Slot 71 on 2D on PC20
> +        Package() { 0x0000FFFF, 0, 0, 17 },
> +        Package() { 0x0000FFFF, 1, 0, 18 },
> +        Package() { 0x0000FFFF, 2, 0, 19 },
> +        Package() { 0x0000FFFF, 3, 0, 16 },
> +    })
> +
> +    Name (AR77, Package() {
> +        // [SR3A]: PCI Express Port 3A on PC21
> +        Package() { 0x0002FFFF, 0, 0, 18 },
> +        Package() { 0x0002FFFF, 1, 0, 19 },
> +        Package() { 0x0002FFFF, 2, 0, 16 },
> +        Package() { 0x0002FFFF, 3, 0, 17 },
> +        // [SR3B]: PCI Express Port 3B on PC21
> +        Package() { 0x0003FFFF, 0, 0, 19 },
> +        Package() { 0x0003FFFF, 1, 0, 16 },
> +        Package() { 0x0003FFFF, 2, 0, 17 },
> +        Package() { 0x0003FFFF, 3, 0, 18 },
> +        // [SR3C]: PCI Express Port 3C on PC21
> +        Package() { 0x0004FFFF, 0, 0, 16 },
> +        Package() { 0x0004FFFF, 1, 0, 17 },
> +        Package() { 0x0004FFFF, 2, 0, 18 },
> +        Package() { 0x0004FFFF, 3, 0, 19 },
> +        // [SR3D]: PCI Express Port 3D on PC21
> +        Package() { 0x0005FFFF, 0, 0, 17 },
> +        Package() { 0x0005FFFF, 1, 0, 18 },
> +        Package() { 0x0005FFFF, 2, 0, 19 },
> +        Package() { 0x0005FFFF, 3, 0, 16 },
> +    })
> +
> +    Name (AR78, Package() {
> +        // [SL48]: PCI Express Slot 72 on 3A on PC21
> +        Package() { 0x0000FFFF, 0, 0, 18 },
> +        Package() { 0x0000FFFF, 1, 0, 19 },
> +        Package() { 0x0000FFFF, 2, 0, 16 },
> +        Package() { 0x0000FFFF, 3, 0, 17 },
> +    })
> +
> +    Name (AR79, Package() {
> +        // [SL49]: PCI Express Slot 73 on 3B on PC21
> +        Package() { 0x0000FFFF, 0, 0, 19 },
> +        Package() { 0x0000FFFF, 1, 0, 16 },
> +        Package() { 0x0000FFFF, 2, 0, 17 },
> +        Package() { 0x0000FFFF, 3, 0, 18 },
> +    })
> +
> +    Name (AR7A, Package() {
> +        // [SL4A]: PCI Express Slot 74 on 3C on PC21
> +        Package() { 0x0000FFFF, 0, 0, 16 },
> +        Package() { 0x0000FFFF, 1, 0, 17 },
> +        Package() { 0x0000FFFF, 2, 0, 18 },
> +        Package() { 0x0000FFFF, 3, 0, 19 },
> +    })
> +
> +    Name (AR7B, Package() {
> +        // [SL4B]: PCI Express Slot 75 on 3D on PC21
> +        Package() { 0x0000FFFF, 0, 0, 17 },
> +        Package() { 0x0000FFFF, 1, 0, 18 },
> +        Package() { 0x0000FFFF, 2, 0, 19 },
> +        Package() { 0x0000FFFF, 3, 0, 16 },
> +    })
> +
> +    Name (AR7C, Package() {
> +        // [SR4A]: PCI Express Port 4A on PC22
> +        Package() { 0x0002FFFF, 0, 0, 18 },
> +        Package() { 0x0002FFFF, 1, 0, 19 },
> +        Package() { 0x0002FFFF, 2, 0, 16 },
> +        Package() { 0x0002FFFF, 3, 0, 17 },
> +        // [SR4B]: PCI Express Port 4B on PC22
> +        Package() { 0x0003FFFF, 0, 0, 19 },
> +        Package() { 0x0003FFFF, 1, 0, 16 },
> +        Package() { 0x0003FFFF, 2, 0, 17 },
> +        Package() { 0x0003FFFF, 3, 0, 18 },
> +        // [SR4C]: PCI Express Port 4C on PC22
> +        Package() { 0x0004FFFF, 0, 0, 16 },
> +        Package() { 0x0004FFFF, 1, 0, 17 },
> +        Package() { 0x0004FFFF, 2, 0, 18 },
> +        Package() { 0x0004FFFF, 3, 0, 19 },
> +        // [SR4D]: PCI Express Port 4D on PC22
> +        Package() { 0x0005FFFF, 0, 0, 17 },
> +        Package() { 0x0005FFFF, 1, 0, 18 },
> +        Package() { 0x0005FFFF, 2, 0, 19 },
> +        Package() { 0x0005FFFF, 3, 0, 16 },
> +    })
> +
> +    Name (AR7D, Package() {
> +        // [SL4C]: PCI Express Slot 76 on 4A on PC22
> +        Package() { 0x0000FFFF, 0, 0, 18 },
> +        Package() { 0x0000FFFF, 1, 0, 19 },
> +        Package() { 0x0000FFFF, 2, 0, 16 },
> +        Package() { 0x0000FFFF, 3, 0, 17 },
> +    })
> +
> +    Name (AR7E, Package() {
> +        // [SL4D]: PCI Express Slot 77 on 4B on PC22
> +        Package() { 0x0000FFFF, 0, 0, 19 },
> +        Package() { 0x0000FFFF, 1, 0, 16 },
> +        Package() { 0x0000FFFF, 2, 0, 17 },
> +        Package() { 0x0000FFFF, 3, 0, 18 },
> +    })
> +
> +    Name (AR7F, Package() {
> +        // [SL4D]: PCI Express Slot 78 on 4C on PC22
> +        Package() { 0x0000FFFF, 0, 0, 16 },
> +        Package() { 0x0000FFFF, 1, 0, 17 },
> +        Package() { 0x0000FFFF, 2, 0, 18 },
> +        Package() { 0x0000FFFF, 3, 0, 19 },
> +    })
> +
> +    Name (AR80, Package() {
> +        // [SL4E]: PCI Express Slot 79 on 4D on PC22
> +        Package() { 0x0000FFFF, 0, 0, 17 },
> +        Package() { 0x0000FFFF, 1, 0, 18 },
> +        Package() { 0x0000FFFF, 2, 0, 19 },
> +        Package() { 0x0000FFFF, 3, 0, 16 },
> +    })
> +
> +    Name (AR81, Package() {
> +        // [SR5A]: PCI Express Port 5A on PC23
> +        Package() { 0x0002FFFF, 0, 0, 18 },
> +        Package() { 0x0002FFFF, 1, 0, 19 },
> +        Package() { 0x0002FFFF, 2, 0, 16 },
> +        Package() { 0x0002FFFF, 3, 0, 17 },
> +        // [SR5B]: PCI Express Port 5B on PC23
> +        Package() { 0x0003FFFF, 0, 0, 19 },
> +        Package() { 0x0003FFFF, 1, 0, 16 },
> +        Package() { 0x0003FFFF, 2, 0, 17 },
> +        Package() { 0x0003FFFF, 3, 0, 18 },
> +        // [SR5C]: PCI Express Port 5C on PC23
> +        Package() { 0x0004FFFF, 0, 0, 16 },
> +        Package() { 0x0004FFFF, 1, 0, 17 },
> +        Package() { 0x0004FFFF, 2, 0, 18 },
> +        Package() { 0x0004FFFF, 3, 0, 19 },
> +        // [SR5D]: PCI Express Port 5D on PC23
> +        Package() { 0x0005FFFF, 0, 0, 17 },
> +        Package() { 0x0005FFFF, 1, 0, 18 },
> +        Package() { 0x0005FFFF, 2, 0, 19 },
> +        Package() { 0x0005FFFF, 3, 0, 16 },
> +    })
> +
> +    Name (AR82, Package() {
> +        // [SL4F]: PCI Express Slot 80 on 5A on PC23
> +        Package() { 0x0000FFFF, 0, 0, 18 },
> +        Package() { 0x0000FFFF, 1, 0, 19 },
> +        Package() { 0x0000FFFF, 2, 0, 16 },
> +        Package() { 0x0000FFFF, 3, 0, 17 },
> +    })
> +
> +    Name (AR83, Package() {
> +        // [SL50]: PCI Express Slot 81 on 5B on PC23
> +        Package() { 0x0000FFFF, 0, 0, 19 },
> +        Package() { 0x0000FFFF, 1, 0, 16 },
> +        Package() { 0x0000FFFF, 2, 0, 17 },
> +        Package() { 0x0000FFFF, 3, 0, 18 },
> +    })
> +
> +    Name (AR84, Package() {
> +        // [SL51]: PCI Express Slot 82 on 5C on PC23
> +        Package() { 0x0000FFFF, 0, 0, 16 },
> +        Package() { 0x0000FFFF, 1, 0, 17 },
> +        Package() { 0x0000FFFF, 2, 0, 18 },
> +        Package() { 0x0000FFFF, 3, 0, 19 },
> +    })
> +
> +    Name (AR85, Package() {
> +        // [SL52]: PCI Express Slot 83 on 5D on PC23
> +        Package() { 0x0000FFFF, 0, 0, 17 },
> +        Package() { 0x0000FFFF, 1, 0, 18 },
> +        Package() { 0x0000FFFF, 2, 0, 19 },
> +        Package() { 0x0000FFFF, 3, 0, 16 },
> +    })
> +
> +    Name (AR86, Package() {
> +        // [UBX3]: Uncore 6 UBOX Device
> +        Package() { 0x0000FFFF, 0, 0, 16 },
> +        Package() { 0x0000FFFF, 1, 0, 17 },
> +        Package() { 0x0000FFFF, 2, 0, 18 },
> +        Package() { 0x0000FFFF, 3, 0, 19 },
> +        // [UP06]: Uncore 6 Misc 2 UPI 0-7 Device
> +        Package() { 0x0002FFFF, 0, 0, 16 },
> +        Package() { 0x0002FFFF, 1, 0, 17 },
> +        Package() { 0x0002FFFF, 2, 0, 18 },
> +        Package() { 0x0002FFFF, 3, 0, 19 },
> +        // [UP07]: Uncore 6 Misc 1 UPI 0-7 Device
> +        Package() { 0x0003FFFF, 0, 0, 16 },
> +        Package() { 0x0003FFFF, 1, 0, 17 },
> +        Package() { 0x0003FFFF, 2, 0, 18 },
> +        Package() { 0x0003FFFF, 3, 0, 19 },
> +        // [M2U9]: Uncore 6 M2UPI0 Device
> +        Package() { 0x0005FFFF, 0, 0, 16 },
> +        Package() { 0x0005FFFF, 1, 0, 17 },
> +        Package() { 0x0005FFFF, 2, 0, 18 },
> +        Package() { 0x0005FFFF, 3, 0, 19 },
> +        // [M2UA]: Uncore 6 M2UPI1 Device
> +        Package() { 0x0006FFFF, 0, 0, 16 },
> +        Package() { 0x0006FFFF, 1, 0, 17 },
> +        Package() { 0x0006FFFF, 2, 0, 18 },
> +        Package() { 0x0006FFFF, 3, 0, 19 },
> +        // [M2UB]: Uncore 6 M2UPI2 Device
> +        Package() { 0x0007FFFF, 0, 0, 16 },
> +        Package() { 0x0007FFFF, 1, 0, 17 },
> +        Package() { 0x0007FFFF, 2, 0, 18 },
> +        Package() { 0x0007FFFF, 3, 0, 19 },
> +        // [CSM3]: Uncore 6 CHASIS_SMBUS Devices
> +        Package() { 0x000BFFFF, 0, 0, 16 },
> +        Package() { 0x000BFFFF, 1, 0, 17 },
> +        Package() { 0x000BFFFF, 2, 0, 18 },
> +        Package() { 0x000BFFFF, 3, 0, 19 },
> +        // [M2M6]: Uncore 6 MS2MEM_SCF_MS2MEM0 Device
> +        Package() { 0x000CFFFF, 0, 0, 16 },
> +        Package() { 0x000CFFFF, 1, 0, 17 },
> +        Package() { 0x000CFFFF, 2, 0, 18 },
> +        Package() { 0x000CFFFF, 3, 0, 19 },
> +        // [M2M7]: Uncore 6 MS2MEM_SCF_MS2MEM1 Device
> +        Package() { 0x000DFFFF, 0, 0, 16 },
> +        Package() { 0x000DFFFF, 1, 0, 17 },
> +        Package() { 0x000DFFFF, 2, 0, 18 },
> +        Package() { 0x000DFFFF, 3, 0, 19 },
> +        // [MCD6]: Uncore 6 MCDDR0 Device
> +        Package() { 0x001AFFFF, 0, 0, 16 },
> +        Package() { 0x001AFFFF, 1, 0, 17 },
> +        Package() { 0x001AFFFF, 2, 0, 18 },
> +        Package() { 0x001AFFFF, 3, 0, 19 },
> +        // [MCD7]: Uncore 6 MCDDR1 Device
> +        Package() { 0x001BFFFF, 0, 0, 16 },
> +        Package() { 0x001BFFFF, 1, 0, 17 },
> +        Package() { 0x001BFFFF, 2, 0, 18 },
> +        Package() { 0x001BFFFF, 3, 0, 19 },
> +    })
> +
> +    Name (AR87, Package() {
> +        // [FHA0]: Uncore 7 GRP1_CHA0-7 Device
> +        Package() { 0x0000FFFF, 0, 0, 16 },
> +        Package() { 0x0000FFFF, 1, 0, 17 },
> +        Package() { 0x0000FFFF, 2, 0, 18 },
> +        Package() { 0x0000FFFF, 3, 0, 19 },
> +        // [FHA1]: Uncore 7 GRP1_CHA8-15 Device
> +        Package() { 0x0001FFFF, 0, 0, 16 },
> +        Package() { 0x0001FFFF, 1, 0, 17 },
> +        Package() { 0x0001FFFF, 2, 0, 18 },
> +        Package() { 0x0001FFFF, 3, 0, 19 },
> +        // [FHA2]: Uncore 7 GRP1_CHA16-23 Device
> +        Package() { 0x0002FFFF, 0, 0, 16 },
> +        Package() { 0x0002FFFF, 1, 0, 17 },
> +        Package() { 0x0002FFFF, 2, 0, 18 },
> +        Package() { 0x0002FFFF, 3, 0, 19 },
> +        // [FHA3]: Uncore 7 GRP1_CHAU24-31 Device
> +        Package() { 0x0003FFFF, 0, 0, 16 },
> +        Package() { 0x0003FFFF, 1, 0, 17 },
> +        Package() { 0x0003FFFF, 2, 0, 18 },
> +        Package() { 0x0003FFFF, 3, 0, 19 },
> +        // [FHA4]: Uncore 7 GRP1_CHA32-33 Device
> +        Package() { 0x0004FFFF, 0, 0, 16 },
> +        Package() { 0x0004FFFF, 1, 0, 17 },
> +        Package() { 0x0004FFFF, 2, 0, 18 },
> +        Package() { 0x0004FFFF, 3, 0, 19 },
> +        // [FHA5]: Uncore 7 GRP0_CHA0-7 Device
> +        Package() { 0x000AFFFF, 0, 0, 16 },
> +        Package() { 0x000AFFFF, 1, 0, 17 },
> +        Package() { 0x000AFFFF, 2, 0, 18 },
> +        Package() { 0x000AFFFF, 3, 0, 19 },
> +        // [FHA8]: Uncore 7 GRP0_CHA24-31 Device
> +        Package() { 0x000DFFFF, 0, 0, 16 },
> +        Package() { 0x000DFFFF, 1, 0, 17 },
> +        Package() { 0x000DFFFF, 2, 0, 18 },
> +        Package() { 0x000DFFFF, 3, 0, 19 },
> +        // [FHA9]: Uncore 7 GRP0_CHA32-33 Device
> +        Package() { 0x000EFFFF, 0, 0, 16 },
> +        Package() { 0x000EFFFF, 1, 0, 17 },
> +        Package() { 0x000EFFFF, 2, 0, 18 },
> +        Package() { 0x000EFFFF, 3, 0, 19 },
> +        // [FHA6]: Uncore 7 GRP0_CHA8-15 Device
> +        Package() { 0x00B0FFFF, 0, 0, 16 },
> +        Package() { 0x00B0FFFF, 1, 0, 17 },
> +        Package() { 0x00B0FFFF, 2, 0, 18 },
> +        Package() { 0x00B0FFFF, 3, 0, 19 },
> +        // [FHA7]: Uncore 7 GRP0_CHA16-23 Device
> +        Package() { 0x000CFFFF, 0, 0, 16 },
> +        Package() { 0x000CFFFF, 1, 0, 17 },
> +        Package() { 0x000CFFFF, 2, 0, 18 },
> +        Package() { 0x000CFFFF, 3, 0, 19 },
> +        // [CA03]: Uncore 7 CHAALL0-1 Device
> +        Package() { 0x001DFFFF, 0, 0, 16 },
> +        Package() { 0x001DFFFF, 1, 0, 17 },
> +        Package() { 0x001DFFFF, 2, 0, 18 },
> +        Package() { 0x001DFFFF, 3, 0, 19 },
> +        // [PUC3]: Uncore 7 CHASIS_PUINT0-7 Device
> +        Package() { 0x001EFFFF, 0, 0, 16 },
> +        Package() { 0x001EFFFF, 1, 0, 17 },
> +        Package() { 0x001EFFFF, 2, 0, 18 },
> +        Package() { 0x001EFFFF, 3, 0, 19 },
> +        // [GN33]: Uncore 7 Gen3Phy Device
> +        Package() { 0x001FFFFF, 0, 0, 16 },
> +        Package() { 0x001FFFFF, 1, 0, 17 },
> +        Package() { 0x001FFFFF, 2, 0, 18 },
> +        Package() { 0x001FFFFF, 3, 0, 19 },
> +    })
> +#endif
> +    Name (AR88, Package() {
> +        // [FPG0]: FPGA Device
> +        Package() { 0x0000FFFF, 0, 0, 16 },
> +    })
> +
> +#if MAX_SOCKET > 1
> +    Name (AR89, Package() {
> +        // [FPG1]: FPGA Device
> +        Package() { 0x0000FFFF, 1, 0, 17 },
> +    })
> +#endif
> +
> +#if MAX_SOCKET > 2
> +    Name (AR8A, Package() {
> +        // [FPG2]: FPGA Device
> +        Package() { 0x0000FFFF, 2, 0, 18 },
> +    })
> +#endif
> +
> +#if MAX_SOCKET > 3
> +    Name (AR8B, Package() {
> +        // [FPG3]: FPGA Device
> +        Package() { 0x0000FFFF, 3, 0, 19 },
> +    })
> +#endif
> +    //
> +    // Socket 0 Root bridge (Stack 0)
> +    //
> +#undef SOCKET
> +#undef STACK
> +#define SOCKET 0
> +#define STACK  0
> +    Device (PC00) {
> +        Name   (_HID, EISAID("PNP0A08"))
> +        Name   (_CID, EISAID("PNP0A03"))
> +        Name   (_UID, 0x00)
> +
> +        //
> +        // _PRT is ACPI method called by OS to read PCI Routing Table.
> +        //
> +        Method (_PRT, 0)
> +        {
> +          Return (AR00)
> +        }
> +
> +        #include "PC0010nm.asi"
> +
> +        // IIOMISC on PC00
> +        Device (IIM0) {
> +            Name   (_ADR, 0x00000000)
> +        }
> +
> +        // CB3DMA on PC00
> +        Device (CB0A) {
> +            Name   (_ADR, 0x00010000)
> +        }
> +
> +        // CB3DMA on PC00
> +        Device (CB0B) {
> +            Name   (_ADR, 0x00010001)
> +        }
> +
> +        // CB3DMA on PC00
> +        Device (CB0C) {
> +            Name   (_ADR, 0x00010002)
> +        }
> +
> +        // CB3DMA on PC00
> +        Device (CB0D) {
> +            Name   (_ADR, 0x00010003)
> +        }
> +
> +        // CB3DMA on PC00
> +        Device (CB0E) {
> +            Name   (_ADR, 0x00010004)
> +        }
> +
> +        // CB3DMA on PC00
> +        Device (CB0F) {
> +            Name   (_ADR, 0x00010005)
> +        }
> +
> +        // CB3DMA on PC00
> +        Device (CB0G) {
> +            Name   (_ADR, 0x00010006)
> +        }
> +
> +        // CB3DMA on PC00
> +        Device (CB0H) {
> +            Name   (_ADR, 0x00010007)
> +        }
> +
> +        // MSM on PC00
> +        Device (MSM1) {
> +            Name   (_ADR, 0x00020000)
> +        }
> +
> +        // PMON MSM on PC00
> +        Device (PMON) {
> +            Name   (_ADR, 0x00020001)
> +        }
> +
> +        // NorthPeak on PC00
> +        Device (NRPK) {
> +            Name   (_ADR, 0x00020004)
> +        }
> +
> +        // Legacy PCI Express Port 0 on PC00
> +        Device (DMI0) {
> +            Name   (_ADR, 0x00030000)
> +        }
> +
> +        // IE HECI #1
> +        Device (IHC1) {
> +            Name   (_ADR, 0x00100000)
> +        }
> +
> +        // IE HECI #2
> +        Device (IHC2) {
> +            Name   (_ADR, 0x00100001)
> +        }
> +
> +        // IE IDE-Redirection (IDE-R)
> +        Device (IIDR) {
> +            Name   (_ADR, 0x00100002)
> +        }
> +
> +        // IE Keyboard and Text (KT) Redirection
> +        Device (IMKT) {
> +            Name   (_ADR, 0x00100003)
> +        }
> +
> +        // IE HECI #3
> +        Device (IHC3) {
> +            Name   (_ADR, 0x00100004)
> +        }
> +
> +        // MROM 0 function function
> +        Device (MRO0) {
> +            Name   (_ADR, 0x00110000)
> +        }
> +
> +        // MROM 1 function function
> +        Device (MRO1) {
> +            Name   (_ADR, 0x00110001)
> +        }
> +
> +        // sSATA Host controller on PCH
> +        Device (SAT2) {
> +            Name   (_ADR, 0x00110005)
> +        }
> +
> +        // xHCI controller 1 on PCH
> +        Device (XHCI) {
> +            Name   (_ADR, 0x00140000)
> +        }
> +
> +        // Thermal Subsystem on PCH
> +        Device (TERM) {
> +            Name   (_ADR, 0x00140002)
> +        }
> +
> +        // ME HECI #1 on PCH
> +        Device (HEC1) {
> +            Name   (_ADR, 0x00160000)
> +        }
> +
> +        // ME HECI #2 on PCH
> +        Device (HEC2) {
> +            Name   (_ADR, 0x00160001)
> +        }
> +
> +        // ME IDE redirect on PCH
> +        Device (IDER) {
> +            Name   (_ADR, 0x00160002)
> +        }
> +
> +        // MEKT on PCH
> +        Device (MEKT) {
> +            Name   (_ADR, 0x00160003)
> +        }
> +
> +        // ME HECI #3 on PCH
> +        Device (HEC3) {
> +            Name   (_ADR, 0x00160004)
> +        }
> +
> +        // SATA controller 1 on PCH
> +        Device (SAT1) {
> +            Name   (_ADR, 0x00170000)
> +        }
> +
> +        // PCIE PCH Root Port #17
> +        Device (RP17) {
> +            #include "RP17_ADR.asl"
> +            Method (_PRT, 0) {
> +
> +                Return (AR01)
> +            }
> +
> +            // PCIE PCH Slot #17
> +            Device (SLTH) {
> +                Name   (_ADR, 0x00000000)
> +            }
> +        }
> +
> +        // PCIE PCH Root Port #18
> +        Device (RP18) {
> +            #include "RP18_ADR.asl"
> +            Method (_PRT, 0) {
> +
> +                Return (AR02)
> +            }
> +
> +            // PCIE PCH Slot #18
> +            Device (SLTI) {
> +                Name   (_ADR, 0x00000000)
> +            }
> +        }
> +
> +        // PCIE PCH Root Port #19
> +        Device (RP19) {
> +            #include "RP19_ADR.asl"
> +            Method (_PRT, 0) {
> +
> +                Return (AR03)
> +            }
> +
> +            // PCIE PCH Slot #19
> +            Device (SLTJ) {
> +                Name   (_ADR, 0x00000000)
> +            }
> +        }
> +
> +        // PCIE PCH Root Port #20
> +        Device (RP20) {
> +            #include "RP20_ADR.asl"
> +            Method (_PRT, 0) {
> +
> +                Return (AR04)
> +            }
> +
> +            // PCIE PCH Slot #20
> +            Device (SLTK) {
> +                Name   (_ADR, 0x00000000)
> +            }
> +        }
> +
> +        // PCIE PCH Root Port #1
> +        Device (RP01) {
> +            #include "RP01_ADR.asl"
> +            Method (_PRT, 0) {
> +
> +                Return (AR05)
> +            }
> +        }
> +
> +        // PCIE PCH Root Port #2
> +        Device (RP02) {
> +            #include "RP02_ADR.asl"
> +            Method (_PRT, 0) {
> +
> +                Return (AR06)
> +            }
> +        }
> +
> +        // PCIE PCH Root Port #3
> +        Device (RP03) {
> +            #include "RP03_ADR.asl"
> +            Method (_PRT, 0) {
> +
> +                Return (AR07)
> +            }
> +        }
> +
> +        // PCIE PCH Root Port #4
> +        Device (RP04) {
> +            #include "RP04_ADR.asl"
> +            Method (_PRT, 0) {
> +
> +                Return (AR08)
> +            }
> +        }
> +
> +        // PCIE PCH Root Port #5
> +        Device (RP05) {
> +            #include "RP05_ADR.asl"
> +            Method (_PRT, 0) {
> +
> +                Return (AR09)
> +            }
> +        }
> +
> +        // PCIE PCH Root Port #6
> +        Device (RP06) {
> +            #include "RP06_ADR.asl"
> +            Method (_PRT, 0) {
> +
> +                Return (AR0A)
> +            }
> +        }
> +
> +        // PCIE PCH Root Port #7
> +        Device (RP07) {
> +            #include "RP07_ADR.asl"
> +            Method (_PRT, 0) {
> +
> +                Return (AR0B)
> +            }
> +        }
> +
> +        // PCIE PCH Root Port #8
> +        Device (RP08) {
> +            #include "RP08_ADR.asl"
> +            Method (_PRT, 0) {
> +
> +                Return (AR0C)
> +            }
> +        }
> +
> +        // PCIE PCH Root Port #9
> +        Device (RP09) {
> +            #include "RP09_ADR.asl"
> +            Method (_PRT, 0) {
> +
> +                Return (AR0D)
> +            }
> +
> +            // PCIE PCH Slot #9
> +            Device (SLT9) {
> +                Name   (_ADR, 0x00000000)
> +            }
> +        }
> +
> +        // PCIE PCH Root Port #10
> +        Device (RP10) {
> +            #include "RP10_ADR.asl"
> +            Method (_PRT, 0) {
> +
> +                Return (AR0E)
> +            }
> +
> +            // PCIE PCH Slot #10
> +            Device (SLTA) {
> +                Name   (_ADR, 0x00000000)
> +            }
> +        }
> +
> +        // PCIE PCH Root Port #11
> +        Device (RP11) {
> +            #include "RP11_ADR.asl"
> +            Method (_PRT, 0) {
> +
> +                Return (AR0F)
> +            }
> +
> +            // PCIE PCH Slot #11
> +            Device (SLTB) {
> +                Name   (_ADR, 0x00000000)
> +            }
> +        }
> +
> +        // PCIE PCH Root Port #12
> +        Device (RP12) {
> +            #include "RP12_ADR.asl"
> +            Method (_PRT, 0) {
> +
> +                Return (AR10)
> +            }
> +
> +            // PCIE PCH Slot #12
> +            Device (SLTC) {
> +                Name   (_ADR, 0x00000000)
> +            }
> +        }
> +
> +        // PCIE PCH Root Port #13
> +        Device (RP13) {
> +            #include "RP13_ADR.asl"
> +            Method (_PRT, 0) {
> +
> +                Return (AR11)
> +            }
> +
> +            // PCIE PCH Slot #13
> +            Device (SLTD) {
> +                Name   (_ADR, 0x00000000)
> +            }
> +        }
> +
> +        // PCIE PCH Root Port #14
> +        Device (RP14) {
> +            #include "RP14_ADR.asl"
> +            Method (_PRT, 0) {
> +
> +                Return (AR12)
> +            }
> +
> +            // PCIE PCH Slot #14
> +            Device (SLTE) {
> +                Name   (_ADR, 0x00000000)
> +            }
> +        }
> +
> +        // PCIE PCH Root Port #15
> +        Device (RP15) {
> +            #include "RP15_ADR.asl"
> +            Method (_PRT, 0) {
> +
> +                Return (AR13)
> +            }
> +
> +            // PCIE PCH Slot #15
> +            Device (SLTF) {
> +                Name   (_ADR, 0x00000000)
> +            }
> +        }
> +
> +        // PCIE PCH Root Port #16
> +        Device (RP16) {
> +            #include "RP16_ADR.asl"
> +            Method (_PRT, 0) {
> +
> +                Return (AR14)
> +            }
> +
> +            // PCIE PCH Slot #16
> +            Device (SLTG) {
> +                Name   (_ADR, 0x00000000)
> +            }
> +        }
> +
> +        // ISA Bridge on PCH
> +        Device (LPC0) {
> +            Name   (_ADR, 0x001F0000)
> +
> +            #include "Mother.asi"
> +        }
> +
> +        // P2SB
> +        Device (P2SB) {
> +            Name   (_ADR, 0x001F0001)
> +        }
> +
> +        // Power Management Controller on PCH
> +        Device (PMC1) {
> +            Name   (_ADR, 0x001F0002)
> +        }
> +
> +        // HD Audio Subsystem Controller on PCH
> +        Device (CAVS) {
> +            Name   (_ADR, 0x001F0003)
> +        }
> +
> +        // SMBus controller on PCH
> +        Device (SMBS) {
> +            Name   (_ADR, 0x001F0004)
> +        }
> +
> +        // SPI controller on PCH
> +        Device (SPIC) {
> +            Name   (_ADR, 0x001F0005)
> +        }
> +
> +        // GbE Controller on PCH
> +        Device (GBE1) {
> +            Name   (_ADR, 0x001F0006)
> +        }
> +
> +        // Intel Trace Hub on PCH
> +        Device (TRHB) {
> +            Name   (_ADR, 0x001F0007)
> +        }
> +    }
> +
> +    // Socket 0 Root bridge (Stack 1)
> +    //
> +#undef SOCKET
> +#undef STACK
> +#define SOCKET 0
> +#define STACK  1
> +    Device (PC01) {
> +        Name   (_HID, EISAID("PNP0A08"))
> +        Name   (_CID, EISAID("PNP0A03"))
> +        Name   (_UID, 0x01)
> +
> +        //
> +        // _PRT is ACPI method called by OS to read PCI Routing Table.
> +        //
> +        Method (_PRT, 0)
> +        {
> +          Return (AR15)
> +        }
> +
> +        #include "IioRootBridge.asi"
> +
> +        // PCI Express Port 1A on PC01
> +        Device (BR1A) {
> +            Name   (_ADR, 0x00020000)
> +            Method (_PRW, 0) {
> +                Return (Package (0x02) {0x09, 0x04})
> +            }
> +            Method (_PRT, 0) {
> +
> +                Return (AR16)
> +            }
> +
> +            #include "PcieHp.asi"
> +            #include "PcieNonHpDev.asi"
> +        }
> +
> +        // PCI Express Port 1B on PC01
> +        Device (BR1B) {
> +            Name   (_ADR, 0x00030000)
> +            Method (_PRW, 0) {
> +                Return (Package (0x02) {0x09, 0x04})
> +            }
> +            Method (_PRT, 0) {
> +
> +                Return (AR17)
> +            }
> +
> +            #include "PcieHp.asi"
> +            #include "PcieNonHpDev.asi"
> +        }
> +
> +        // PCI Express Port 1C on PC01
> +        Device (BR1C) {
> +            Name   (_ADR, 0x00040000)
> +            Method (_PRW, 0) {
> +                Return (Package (0x02) {0x09, 0x04})
> +            }
> +            Method (_PRT, 0) {
> +
> +                Return (AR18)
> +            }
> +
> +            #include "PcieHp.asi"
> +            #include "PcieNonHpDev.asi"
> +        }
> +
> +        // PCI Express Port 1D on PC01
> +        Device (BR1D) {
> +            Name   (_ADR, 0x00050000)
> +            Method (_PRW, 0) {
> +                Return (Package (0x02) {0x09, 0x04})
> +            }
> +            Method (_PRT, 0) {
> +
> +                Return (AR19)
> +            }
> +
> +            #include "PcieHp.asi"
> +            #include "PcieNonHpDev.asi"
> +        }
> +    }
> +
> +    // Socket 0 Root bridge (Stack 2)
> +    //
> +#undef SOCKET
> +#undef STACK
> +#define SOCKET 0
> +#define STACK  2
> +    Device (PC02) {
> +        Name   (_HID, EISAID("PNP0A08"))
> +        Name   (_CID, EISAID("PNP0A03"))
> +        Name   (_UID, 0x02)
> +
> +        //
> +        // _PRT is ACPI method called by OS to read PCI Routing Table.
> +        //
> +        Method (_PRT, 0)
> +        {
> +          Return (AR1A)
> +        }
> +
> +        #include "IioRootBridge.asi"
> +
> +        // PCI Express Port 2A on PC02
> +        Device (BR2A) {
> +            Name   (_ADR, 0x00020000)
> +            Method (_PRW, 0) {
> +                Return (Package (0x02) {0x09, 0x04})
> +            }
> +            Method (_PRT, 0) {
> +
> +                Return (AR1B)
> +            }
> +
> +            #include "PcieHp.asi"
> +            #include "PcieNonHpDev.asi"
> +
> +            // EVA PCIe Uplink
> +            Device (EPCU) {
> +                Name   (_ADR, 0x00000000)
> +                Method (_PRW, 0) {
> +                    Return (Package (0x02) {0x0B, 0x00})
> +                }
> +                Method (_PRT, 0) {
> +
> +                    Return (AR1C)
> +                }
> +
> +                // EVA Virtual Switch Port 0
> +                Device (VSP0) {
> +                    Name   (_ADR, 0x00000000)
> +                    Method (_PRW, 0) {
> +                        Return (Package (0x02) {0x0B, 0x00})
> +                    }
> +                    Method (_PRT, 0) {
> +
> +                        Return (AR1D)
> +                    }
> +
> +                    // EVA CPM0
> +                    Device (CPM0) {
> +                        Name   (_ADR, 0x00000000)
> +                    }
> +                }
> +
> +                // EVA Virtual Switch Port 1
> +                Device (VSP1) {
> +                    Name   (_ADR, 0x00010000)
> +                    Method (_PRW, 0) {
> +                        Return (Package (0x02) {0x0B, 0x00})
> +                    }
> +                    Method (_PRT, 0) {
> +
> +                        Return (AR1E)
> +                    }
> +
> +                    // EVA CPM1
> +                    Device (CPM1) {
> +                        Name   (_ADR, 0x00000000)
> +                    }
> +                }
> +
> +                // EVA Virtual Switch Port 2
> +                Device (VSP2) {
> +                    Name   (_ADR, 0x00020000)
> +                    Method (_PRW, 0) {
> +                        Return (Package (0x02) {0x0B, 0x00})
> +                    }
> +                    Method (_PRT, 0) {
> +
> +                        Return (AR1F)
> +                    }
> +
> +                    // EVA CPM2
> +                    Device (CPM2) {
> +                        Name   (_ADR, 0x00000000)
> +                    }
> +                }
> +
> +                // EVA Virtual Switch Port 3
> +                Device (VSP3) {
> +                    Name   (_ADR, 0x00030000)
> +                    Method (_PRW, 0) {
> +                        Return (Package (0x02) {0x0B, 0x00})
> +                    }
> +                }
> +            }
> +        }
> +
> +        // PCI Express Port 2B on PC02
> +        Device (BR2B) {
> +            Name   (_ADR, 0x00030000)
> +            Method (_PRW, 0) {
> +                Return (Package (0x02) {0x09, 0x04})
> +            }
> +            Method (_PRT, 0) {
> +
> +                Return (AR20)
> +            }
> +
> +            #include "PcieHp.asi"
> +            #include "PcieNonHpDev.asi"
> +        }
> +
> +        // PCI Express Port 2C on PC02
> +        Device (BR2C) {
> +            Name   (_ADR, 0x00040000)
> +            Method (_PRW, 0) {
> +                Return (Package (0x02) {0x09, 0x04})
> +            }
> +            Method (_PRT, 0) {
> +
> +                Return (AR21)
> +            }
> +
> +            #include "PcieHp.asi"
> +            #include "PcieNonHpDev.asi"
> +        }
> +
> +        // PCI Express Port 2D on PC02
> +        Device (BR2D) {
> +            Name   (_ADR, 0x00050000)
> +            Method (_PRW, 0) {
> +                Return (Package (0x02) {0x09, 0x04})
> +            }
> +            Method (_PRT, 0) {
> +
> +                Return (AR22)
> +            }
> +
> +            #include "PcieHp.asi"
> +            #include "PcieNonHpDev.asi"
> +        }
> +    }
> +
> +    // Socket 0 Root bridge (Stack 3)
> +    //
> +#undef SOCKET
> +#undef STACK
> +#define SOCKET 0
> +#define STACK  3
> +    Device (PC03) {
> +        Name   (_HID, EISAID("PNP0A08"))
> +        Name   (_CID, EISAID("PNP0A03"))
> +        Name   (_UID, 0x03)
> +
> +        //
> +        // _PRT is ACPI method called by OS to read PCI Routing Table.
> +        //
> +        Method (_PRT, 0)
> +        {
> +          Return (AR23)
> +        }
> +
> +        #include "IioRootBridge.asi"
> +
> +        // PCI Express Port 3A on PC03
> +        Device (BR3A) {
> +            Name   (_ADR, 0x00020000)
> +            Method (_PRW, 0) {
> +                Return (Package (0x02) {0x09, 0x04})
> +            }
> +            Method (_PRT, 0) {
> +
> +                Return (AR24)
> +            }
> +
> +            #include "PcieHp.asi"
> +            #include "PcieNonHpDev.asi"
> +        }
> +
> +        // PCI Express Port 3B on PC03
> +        Device (BR3B) {
> +            Name   (_ADR, 0x00030000)
> +            Method (_PRW, 0) {
> +                Return (Package (0x02) {0x09, 0x04})
> +            }
> +            Method (_PRT, 0) {
> +
> +                Return (AR25)
> +            }
> +
> +            #include "PcieHp.asi"
> +            #include "PcieNonHpDev.asi"
> +        }
> +
> +        // PCI Express Port 3C on PC03
> +        Device (BR3C) {
> +            Name   (_ADR, 0x00040000)
> +            Method (_PRW, 0) {
> +                Return (Package (0x02) {0x09, 0x04})
> +            }
> +            Method (_PRT, 0) {
> +
> +                Return (AR26)
> +            }
> +
> +            #include "PcieHp.asi"
> +            #include "PcieNonHpDev.asi"
> +        }
> +
> +        // PCI Express Port 3D on PC03
> +        Device (BR3D) {
> +            Name   (_ADR, 0x00050000)
> +            Method (_PRW, 0) {
> +                Return (Package (0x02) {0x09, 0x04})
> +            }
> +            Method (_PRT, 0) {
> +
> +                Return (AR27)
> +            }
> +
> +            #include "PcieHp.asi"
> +            #include "PcieNonHpDev.asi"
> +        }
> +    }
> +
> +    // Socket 0 Root bridge (Stack 4)
> +    //
> +#undef SOCKET
> +#undef STACK
> +#define SOCKET 0
> +#define STACK  4
> +    Device (PC04) {
> +        Name   (_HID, EISAID("PNP0A08"))
> +        Name   (_CID, EISAID("PNP0A03"))
> +        Name   (_UID, 0x04)
> +
> +        //
> +        // _PRT is ACPI method called by OS to read PCI Routing Table.
> +        //
> +        Method (_PRT, 0)
> +        {
> +            Return (AR28)
> +        }
> +
> +        #include "IioRootBridge.asi"
> +
> +        // PCI Express Port 4A on PC04
> +        Device (BR4A) {
> +            Name   (_ADR, 0x00020000)
> +            Method (_PRW, 0) {
> +                Return (Package (0x02) {0x09, 0x04})
> +            }
> +            Method (_PRT, 0) {
> +
> +                Return (AR29)
> +            }
> +
> +            #include "PcieHp.asi"
> +            #include "PcieHpDev.asi"
> +        }
> +
> +        // PCI Express Port 4B on PC04
> +        Device (BR4B) {
> +            Name   (_ADR, 0x00030000)
> +            Method (_PRW, 0) {
> +                Return (Package (0x02) {0x09, 0x04})
> +            }
> +            Method (_PRT, 0) {
> +
> +                Return (AR2A)
> +            }
> +
> +            #include "PcieHp.asi"
> +            #include "PcieNonHpDev.asi"
> +        }
> +
> +        // PCI Express Port 4C on PC04
> +        Device (BR4C) {
> +            Name   (_ADR, 0x00040000)
> +            Method (_PRW, 0) {
> +                Return (Package (0x02) {0x09, 0x04})
> +            }
> +            Method (_PRT, 0) {
> +
> +                Return (AR2B)
> +            }
> +
> +            #include "PcieHp.asi"
> +            #include "PcieNonHpDev.asi"
> +        }
> +
> +        // PCI Express Port 4D on PC04
> +        Device (BR4D) {
> +            Name   (_ADR, 0x00050000)
> +            Method (_PRW, 0) {
> +                Return (Package (0x02) {0x09, 0x04})
> +            }
> +            Method (_PRT, 0) {
> +
> +                Return (AR2C)
> +            }
> +
> +            #include "PcieHp.asi"
> +            #include "PcieNonHpDev.asi"
> +        }
> +    }
> +
> +    // Socket 0 Root bridge (Stack 5)
> +    //
> +#undef SOCKET
> +#undef STACK
> +#define SOCKET 0
> +#define STACK  5
> +    Device (PC05) {
> +        Name   (_HID, EISAID("PNP0A08"))
> +        Name   (_CID, EISAID("PNP0A03"))
> +        Name   (_UID, 0x05)
> +
> +        //
> +        // _PRT is ACPI method called by OS to read PCI Routing Table.
> +        //
> +        Method (_PRT, 0)
> +        {
> +          Return (AR2D)
> +        }
> +
> +        #include "IioRootBridge.asi"
> +
> +        // PCI Express Port 5A on PC05
> +        Device (BR5A) {
> +            Name   (_ADR, 0x00020000)
> +            Method (_PRW, 0) {
> +                Return (Package (0x02) {0x09, 0x04})
> +            }
> +            Method (_PRT, 0) {
> +
> +                Return (AR2E)
> +            }
> +
> +            #include "PcieHp.asi"
> +            #include "PcieNonHpDev.asi"
> +        }
> +
> +        // PCI Express Port 5B on PC05
> +        Device (BR5B) {
> +            Name   (_ADR, 0x00030000)
> +            Method (_PRW, 0) {
> +                Return (Package (0x02) {0x09, 0x04})
> +            }
> +            Method (_PRT, 0) {
> +
> +                Return (AR2F)
> +            }
> +
> +            #include "PcieHp.asi"
> +            #include "PcieNonHpDev.asi"
> +        }
> +
> +        // PCI Express Port 5C on PC05
> +        Device (BR5C) {
> +            Name   (_ADR, 0x00040000)
> +            Method (_PRW, 0) {
> +                Return (Package (0x02) {0x09, 0x04})
> +            }
> +            Method (_PRT, 0) {
> +
> +                Return (AR30)
> +            }
> +
> +            #include "PcieHp.asi"
> +            #include "PcieNonHpDev.asi"
> +        }
> +
> +        // PCI Express Port 5D on PC05
> +        Device (BR5D) {
> +            Name   (_ADR, 0x00050000)
> +            Method (_PRW, 0) {
> +                Return (Package (0x02) {0x09, 0x04})
> +            }
> +            Method (_PRT, 0) {
> +
> +                Return (AR31)
> +            }
> +
> +            #include "PcieHp.asi"
> +            #include "PcieNonHpDev.asi"
> +        }
> +    }
> +
> +    // Socket 0 Uncore 0
> +    //
> +#undef SOCKET
> +#undef STACK
> +#define SOCKET 0
> +#define STACK  6
> +    Device (CONCATENATE3(UC, SOCKET, STACK)) {
> +        Name   (_HID, EISAID("PNP0A03"))
> +        Name   (_UID, 0x32)
> +
> +        //
> +        // _PRT is ACPI method called by OS to read PCI Routing Table.
> +        //
> +        Method (_PRT, 0)
> +        {
> +          Return (AR32)
> +        }
> +
> +        #include "Uncore.asi"
> +
> +        // Uncore 0 UBOX Device
> +        Device (UBX0) {
> +            Name   (_ADR, 0x00000000)
> +        }
> +
> +        // Uncore 0 Misc 2 UPI 0-7 Device
> +        Device (UP00) {
> +            Name   (_ADR, 0x00020000)
> +        }
> +
> +        // Unocre 0 Misc 1 UPI 0-7 Device
> +        Device (UP01) {
> +            Name   (_ADR, 0x00030000)
> +        }
> +
> +        // Uncore 0 M2UPI0 Device
> +        Device (M2U0) {
> +            Name   (_ADR, 0x00050000)
> +        }
> +
> +        // Uncore 0 M2UPI1 Device
> +        Device (M2U1) {
> +            Name   (_ADR, 0x00060000)
> +        }
> +
> +        // Uncore 0 M2UPI2 Device
> +        Device (M2U2) {
> +            Name   (_ADR, 0x00070000)
> +        }
> +
> +        // Uncore 0 CHASIS_SMBUS Devices
> +        Device (CSM0) {
> +            Name   (_ADR, 0x000B0000)
> +        }
> +
> +        // Uncore 0 MS2MEM_SCF_MS2MEM0 Device
> +        Device (M2M0) {
> +            Name   (_ADR, 0x000C0000)
> +        }
> +
> +        // Uncore 0 MS2MEM_SCF_MS2MEM1 Device
> +        Device (M2M1) {
> +            Name   (_ADR, 0x000D0000)
> +        }
> +
> +        // Uncore 0 MCDDR0 Device
> +        Device (MCD0) {
> +            Name   (_ADR, 0x001A0000)
> +        }
> +
> +        // Uncore 0 MCDDR1 Device
> +        Device (MCD1) {
> +            Name   (_ADR, 0x001B0000)
> +        }
> +    }
> +
> +    // Socket 0 Uncore 1
> +    //
> +#undef SOCKET
> +#undef STACK
> +#define SOCKET 0
> +#define STACK  7
> +    Device (CONCATENATE3(UC, SOCKET, STACK)) {
> +        Name   (_HID, EISAID("PNP0A03"))
> +        Name   (_UID, 0x33)
> +
> +        //
> +        // _PRT is ACPI method called by OS to read PCI Routing Table.
> +        //
> +        Method (_PRT, 0)
> +        {
> +          Return (AR33)
> +        }
> +
> +        #include "Uncore.asi"
> +
> +        // Uncore 1 GRP1_CHA0-7 Device
> +        Device (CHA0) {
> +            Name   (_ADR, 0x00000000)
> +        }
> +
> +        // Uncore 1 GRP1_CHA8-15 Device
> +        Device (CHA1) {
> +            Name   (_ADR, 0x00010000)
> +        }
> +
> +        // Uncore 1 GRP1_CHA16-23 Device
> +        Device (CHA2) {
> +            Name   (_ADR, 0x00020000)
> +        }
> +
> +        // Uncore 1 GRP1_CHAU24-31 Device
> +        Device (CHA3) {
> +            Name   (_ADR, 0x00030000)
> +        }
> +
> +        // Uncore 1 GRP1_CHA32-33 Device
> +        Device (CHA4) {
> +            Name   (_ADR, 0x00040000)
> +        }
> +
> +        // Uncore 1 GRP0_CHA0-7 Device
> +        Device (CHA5) {
> +            Name   (_ADR, 0x000A0000)
> +        }
> +
> +        // Uncore 1 GRP0_CHA24-31 Device
> +        Device (CHA8) {
> +            Name   (_ADR, 0x000D0000)
> +        }
> +
> +        // Uncore 1 GRP0_CHA32-33 Device
> +        Device (CHA9) {
> +            Name   (_ADR, 0x000E0000)
> +        }
> +
> +        // Uncore 1 GRP0_CHA8-15 Device
> +        Device (CHA6) {
> +            Name   (_ADR, 0x00B00000)
> +        }
> +
> +        // Uncore 1 GRP0_CHA16-23 Device
> +        Device (CHA7) {
> +            Name   (_ADR, 0x000C0000)
> +        }
> +
> +        // Uncore 1 CHAALL0-1 Device
> +        Device (CA00) {
> +            Name   (_ADR, 0x001D0000)
> +        }
> +
> +        // Uncore 1 CHASIS_PUINT0-7 Device
> +        Device (PUC0) {
> +            Name   (_ADR, 0x001E0000)
> +        }
> +
> +        // Uncore 1 Gen3Phy Device
> +        Device (GN30) {
> +            Name   (_ADR, 0x001F0000)
> +        }
> +    }
> +
> +#if MAX_SOCKET > 1
> +    //
> +    // Socket 1 Root bridge (Stack 0)
> +    //
> +#undef SOCKET
> +#undef STACK
> +#define SOCKET 1
> +#define STACK  0
> +    Device (PC06) {
> +        Name   (_HID, EISAID("PNP0A08"))
> +        Name   (_CID, EISAID("PNP0A03"))
> +        Name   (_UID, 0x06)
> +
> +        //
> +        // _PRT is ACPI method called by OS to read PCI Routing Table.
> +        //
> +        Method (_PRT, 0)
> +        {
> +          Return (AR34)
> +        }
> +
> +        #include "IioRootBridge.asi"
> +        #include "Sck1Ejd.asi"
> +
> +        // IIOMISC on PC06
> +        Device (IIM1) {
> +            Name   (_ADR, 0x00000000)
> +        }
> +
> +        // CB3DMA on PC06
> +        Device (CB1A) {
> +            Name   (_ADR, 0x00010000)
> +        }
> +
> +        // CB3DMA on PC06
> +        Device (CB1B) {
> +            Name   (_ADR, 0x00010001)
> +        }
> +
> +        // CB3DMA on PC06
> +        Device (CB1C) {
> +            Name   (_ADR, 0x00010002)
> +        }
> +
> +        // CB3DMA on PC06
> +        Device (CB1D) {
> +            Name   (_ADR, 0x00010003)
> +        }
> +
> +        // CB3DMA on PC06
> +        Device (CB1E) {
> +            Name   (_ADR, 0x00010004)
> +        }
> +
> +        // CB3DMA on PC06
> +        Device (CB1F) {
> +            Name   (_ADR, 0x00010005)
> +        }
> +
> +        // CB3DMA on PC06
> +        Device (CB1G) {
> +            Name   (_ADR, 0x00010006)
> +        }
> +
> +        // CB3DMA on PC06
> +        Device (CB1H) {
> +            Name   (_ADR, 0x00010007)
> +        }
> +    }
> +
> +    // Socket 1 Root bridge (Stack 1)
> +    //
> +#undef SOCKET
> +#undef STACK
> +#define SOCKET 1
> +#define STACK  1
> +    Device (PC07) {
> +        Name   (_HID, EISAID("PNP0A08"))
> +        Name   (_CID, EISAID("PNP0A03"))
> +        Name   (_UID, 0x07)
> +
> +        //
> +        // _PRT is ACPI method called by OS to read PCI Routing Table.
> +        //
> +        Method (_PRT, 0)
> +        {
> +          Return (AR35)
> +        }
> +
> +        #include "IioRootBridge.asi"
> +        #include "Sck1Ejd.asi"
> +
> +        // PCI Express Port 1A on PC07
> +        Device (QR1A) {
> +            Name   (_ADR, 0x00020000)
> +            Method (_PRW, 0) {
> +                Return (Package (0x02) {0x09, 0x04})
> +            }
> +            Method (_PRT, 0) {
> +
> +                Return (AR36)
> +            }
> +
> +            #include "PcieHp.asi"
> +            #include "PcieHpDev.asi"
> +            #include "PC0610nmEjd.asi"
> +        }
> +
> +        // PCI Express Port 1B on PC07
> +        Device (QR1B) {
> +            Name   (_ADR, 0x00030000)
> +            Method (_PRW, 0) {
> +                Return (Package (0x02) {0x09, 0x04})
> +            }
> +            Method (_PRT, 0) {
> +
> +                Return (AR37)
> +            }
> +
> +            #include "PcieHp.asi"
> +            #include "PcieHpDev.asi"
> +            #include "PC0610nmEjd.asi"
> +        }
> +
> +        // PCI Express Port 1C on PC07
> +        Device (QR1C) {
> +            Name   (_ADR, 0x00040000)
> +            Method (_PRW, 0) {
> +                Return (Package (0x02) {0x09, 0x04})
> +            }
> +            Method (_PRT, 0) {
> +
> +                Return (AR38)
> +            }
> +
> +            #include "PcieHp.asi"
> +            #include "PcieHpDev.asi"
> +            #include "PC0610nmEjd.asi"
> +        }
> +
> +        // PCI Express Port 1D on PC07
> +        Device (QR1D) {
> +            Name   (_ADR, 0x00050000)
> +            Method (_PRW, 0) {
> +                Return (Package (0x02) {0x09, 0x04})
> +            }
> +            Method (_PRT, 0) {
> +
> +                Return (AR39)
> +            }
> +
> +            #include "PcieHp.asi"
> +            #include "PcieHpDev.asi"
> +            #include "PC0610nmEjd.asi"
> +        }
> +    }
> +
> +    // Socket 1 Root bridge (Stack 2)
> +    //
> +#undef SOCKET
> +#undef STACK
> +#define SOCKET 1
> +#define STACK  2
> +    Device (PC08) {
> +        Name   (_HID, EISAID("PNP0A08"))
> +        Name   (_CID, EISAID("PNP0A03"))
> +        Name   (_UID, 0x08)
> +
> +        //
> +        // _PRT is ACPI method called by OS to read PCI Routing Table.
> +        //
> +        Method (_PRT, 0)
> +        {
> +          Return (AR3A)
> +        }
> +
> +        #include "IioRootBridge.asi"
> +        #include "Sck1Ejd.asi"
> +
> +        // PCI Express Port 2A on PC08
> +        Device (QR2A) {
> +            Name   (_ADR, 0x00020000)
> +            Method (_PRW, 0) {
> +                Return (Package (0x02) {0x09, 0x04})
> +            }
> +            Method (_PRT, 0) {
> +
> +                Return (AR3B)
> +            }
> +
> +            #include "PcieHp.asi"
> +            #include "PcieHpDev.asi"
> +            #include "PC0610nmEjd.asi"
> +        }
> +
> +        // PCI Express Port 2B on PC08
> +        Device (QR2B) {
> +            Name   (_ADR, 0x00030000)
> +            Method (_PRW, 0) {
> +                Return (Package (0x02) {0x09, 0x04})
> +            }
> +            Method (_PRT, 0) {
> +
> +                Return (AR3C)
> +            }
> +
> +            #include "PcieHp.asi"
> +            #include "PcieHpDev.asi"
> +            #include "PC0610nmEjd.asi"
> +        }
> +
> +        // PCI Express Port 2C on PC08
> +        Device (QR2C) {
> +            Name   (_ADR, 0x00040000)
> +            Method (_PRW, 0) {
> +                Return (Package (0x02) {0x09, 0x04})
> +            }
> +            Method (_PRT, 0) {
> +
> +                Return (AR3D)
> +            }
> +
> +            #include "PcieHp.asi"
> +            #include "PcieHpDev.asi"
> +            #include "PC0610nmEjd.asi"
> +        }
> +
> +        // PCI Express Port 2D on PC08
> +        Device (QR2D) {
> +            Name   (_ADR, 0x00050000)
> +            Method (_PRW, 0) {
> +                Return (Package (0x02) {0x09, 0x04})
> +            }
> +            Method (_PRT, 0) {
> +
> +                Return (AR3E)
> +            }
> +
> +            #include "PcieHp.asi"
> +            #include "PcieHpDev.asi"
> +            #include "PC0610nmEjd.asi"
> +        }
> +    }
> +
> +    // Socket 1 Root bridge (Stack 3)
> +    //
> +#undef SOCKET
> +#undef STACK
> +#define SOCKET 1
> +#define STACK  3
> +    Device (PC09) {
> +        Name   (_HID, EISAID("PNP0A08"))
> +        Name   (_CID, EISAID("PNP0A03"))
> +        Name   (_UID, 0x09)
> +
> +        //
> +        // _PRT is ACPI method called by OS to read PCI Routing Table.
> +        //
> +        Method (_PRT, 0)
> +        {
> +          Return (AR3F)
> +        }
> +
> +        #include "IioRootBridge.asi"
> +        #include "Sck1Ejd.asi"
> +
> +        // PCI Express Port 3A on PC09
> +        Device (QR3A) {
> +            Name   (_ADR, 0x00020000)
> +            Method (_PRW, 0) {
> +                Return (Package (0x02) {0x09, 0x04})
> +            }
> +            Method (_PRT, 0) {
> +
> +                Return (AR40)
> +            }
> +
> +            #include "PcieHp.asi"
> +            #include "PcieHpDev.asi"
> +            #include "PC0610nmEjd.asi"
> +        }
> +
> +        // PCI Express Port 3B on PC09
> +        Device (QR3B) {
> +            Name   (_ADR, 0x00030000)
> +            Method (_PRW, 0) {
> +                Return (Package (0x02) {0x09, 0x04})
> +            }
> +            Method (_PRT, 0) {
> +
> +                Return (AR41)
> +            }
> +
> +            #include "PcieHp.asi"
> +            #include "PcieHpDev.asi"
> +            #include "PC0610nmEjd.asi"
> +        }
> +
> +        // PCI Express Port 3C on PC09
> +        Device (QR3C) {
> +            Name   (_ADR, 0x00040000)
> +            Method (_PRW, 0) {
> +                Return (Package (0x02) {0x09, 0x04})
> +            }
> +            Method (_PRT, 0) {
> +
> +                Return (AR42)
> +            }
> +
> +            #include "PcieHp.asi"
> +            #include "PcieHpDev.asi"
> +            #include "PC0610nmEjd.asi"
> +        }
> +
> +        // PCI Express Port 3D on PC09
> +        Device (QR3D) {
> +            Name   (_ADR, 0x00050000)
> +            Method (_PRW, 0) {
> +                Return (Package (0x02) {0x09, 0x04})
> +            }
> +            Method (_PRT, 0) {
> +
> +                Return (AR43)
> +            }
> +
> +            #include "PcieHp.asi"
> +            #include "PcieHpDev.asi"
> +            #include "PC0610nmEjd.asi"
> +        }
> +    }
> +
> +    // Socket 1 Root bridge (Stack 4)
> +    //
> +#undef SOCKET
> +#undef STACK
> +#define SOCKET 1
> +#define STACK  4
> +    Device (PC10) {
> +        Name   (_HID, EISAID("PNP0A08"))
> +        Name   (_CID, EISAID("PNP0A03"))
> +        Name   (_UID, 0x0A)
> +
> +        //
> +        // _PRT is ACPI method called by OS to read PCI Routing Table.
> +        //
> +        Method (_PRT, 0)
> +        {
> +          Return (AR44)
> +        }
> +
> +        #include "IioRootBridge.asi"
> +        #include "Sck1Ejd.asi"
> +
> +        // PCI Express Port 4A on PC10
> +        Device (QR4A) {
> +            Name   (_ADR, 0x00020000)
> +            Method (_PRW, 0) {
> +                Return (Package (0x02) {0x09, 0x04})
> +            }
> +            Method (_PRT, 0) {
> +
> +                Return (AR45)
> +            }
> +
> +            #include "PcieHp.asi"
> +            #include "PcieHpDev.asi"
> +            #include "PC0610nmEjd.asi"
> +        }
> +
> +        // PCI Express Port 4B on PC10
> +        Device (QR4B) {
> +            Name   (_ADR, 0x00030000)
> +            Method (_PRW, 0) {
> +                Return (Package (0x02) {0x09, 0x04})
> +            }
> +            Method (_PRT, 0) {
> +
> +                Return (AR46)
> +            }
> +
> +            #include "PcieHp.asi"
> +            #include "PcieHpDev.asi"
> +            #include "PC0610nmEjd.asi"
> +        }
> +
> +        // PCI Express Port 4C on PC10
> +        Device (QR4C) {
> +            Name   (_ADR, 0x00040000)
> +            Method (_PRW, 0) {
> +                Return (Package (0x02) {0x09, 0x04})
> +            }
> +            Method (_PRT, 0) {
> +
> +                Return (AR47)
> +            }
> +
> +            #include "PcieHp.asi"
> +            #include "PcieHpDev.asi"
> +            #include "PC0610nmEjd.asi"
> +        }
> +
> +        // PCI Express Port 4D on PC10
> +        Device (QR4D) {
> +            Name   (_ADR, 0x00050000)
> +            Method (_PRW, 0) {
> +                Return (Package (0x02) {0x09, 0x04})
> +            }
> +            Method (_PRT, 0) {
> +
> +                Return (AR48)
> +            }
> +
> +            #include "PcieHp.asi"
> +            #include "PcieHpDev.asi"
> +            #include "PC0610nmEjd.asi"
> +        }
> +    }
> +
> +    // Socket 1 Root bridge (Stack 5)
> +    //
> +#undef SOCKET
> +#undef STACK
> +#define SOCKET 1
> +#define STACK  5
> +    Device (PC11) {
> +        Name   (_HID, EISAID("PNP0A08"))
> +        Name   (_CID, EISAID("PNP0A03"))
> +        Name   (_UID, 0x0B)
> +
> +        //
> +        // _PRT is ACPI method called by OS to read PCI Routing Table.
> +        //
> +        Method (_PRT, 0)
> +        {
> +          Return (AR49)
> +        }
> +
> +        #include "IioRootBridge.asi"
> +        #include "Sck1Ejd.asi"
> +
> +        // PCI Express Port 5A on PC11
> +        Device (QR5A) {
> +            Name   (_ADR, 0x00020000)
> +            Method (_PRW, 0) {
> +                Return (Package (0x02) {0x09, 0x04})
> +            }
> +            Method (_PRT, 0) {
> +
> +                Return (AR4A)
> +            }
> +
> +            #include "PcieHp.asi"
> +            #include "PcieHpDev.asi"
> +            #include "PC0610nmEjd.asi"
> +        }
> +
> +        // PCI Express Port 5B on PC11
> +        Device (QR5B) {
> +            Name   (_ADR, 0x00030000)
> +            Method (_PRW, 0) {
> +                Return (Package (0x02) {0x09, 0x04})
> +            }
> +            Method (_PRT, 0) {
> +
> +                Return (AR4B)
> +            }
> +
> +            #include "PcieHp.asi"
> +            #include "PcieHpDev.asi"
> +            #include "PC0610nmEjd.asi"
> +        }
> +
> +        // PCI Express Port 5C on PC11
> +        Device (QR5C) {
> +            Name   (_ADR, 0x00040000)
> +            Method (_PRW, 0) {
> +                Return (Package (0x02) {0x09, 0x04})
> +            }
> +            Method (_PRT, 0) {
> +
> +                Return (AR4C)
> +            }
> +
> +            #include "PcieHp.asi"
> +            #include "PcieHpDev.asi"
> +            #include "PC0610nmEjd.asi"
> +        }
> +
> +        // PCI Express Port 5D on PC11
> +        Device (QR5D) {
> +            Name   (_ADR, 0x00050000)
> +            Method (_PRW, 0) {
> +                Return (Package (0x02) {0x09, 0x04})
> +            }
> +            Method (_PRT, 0) {
> +
> +                Return (AR4D)
> +            }
> +
> +            #include "PcieHp.asi"
> +            #include "PcieHpDev.asi"
> +            #include "PC0610nmEjd.asi"
> +        }
> +    }
> +
> +    // Socket 1 Uncore 0
> +    //
> +#undef SOCKET
> +#undef STACK
> +#define SOCKET 1
> +#define STACK  6
> +    Device (CONCATENATE3(UC, SOCKET, STACK)) {
> +        Name   (_HID, EISAID("PNP0A03"))
> +        Name   (_UID, 0x34)
> +
> +        //
> +        // _PRT is ACPI method called by OS to read PCI Routing Table.
> +        //
> +        Method (_PRT, 0)
> +        {
> +          Return (AR4E)
> +        }
> +
> +        #include "Uncore.asi"
> +
> +        // Uncore 2 UBOX Device
> +        Device (UBX1) {
> +            Name   (_ADR, 0x00000000)
> +        }
> +
> +        // Uncore 2 Misc 2 UPI 0-7 Device
> +        Device (UP02) {
> +            Name   (_ADR, 0x00020000)
> +        }
> +
> +        // Uncore 2 Misc 1 UPI 0-7 Device
> +        Device (UP03) {
> +            Name   (_ADR, 0x00030000)
> +        }
> +
> +        // Uncore 2 M2UPI0 Device
> +        Device (M2U3) {
> +            Name   (_ADR, 0x00050000)
> +        }
> +
> +        // Uncore 2 M2UPI1 Device
> +        Device (M2U4) {
> +            Name   (_ADR, 0x00060000)
> +        }
> +
> +        // Uncore 2 M2UPI2 Device
> +        Device (M2U5) {
> +            Name   (_ADR, 0x00070000)
> +        }
> +
> +        // Uncore 2 CHASIS_SMBUS Devices
> +        Device (CSM1) {
> +            Name   (_ADR, 0x000B0000)
> +        }
> +
> +        // Uncore 2 MS2MEM_SCF_MS2MEM0 Device
> +        Device (M2M2) {
> +            Name   (_ADR, 0x000C0000)
> +        }
> +
> +        // Uncore 2 MS2MEM_SCF_MS2MEM1 Device
> +        Device (M2M3) {
> +            Name   (_ADR, 0x000D0000)
> +        }
> +
> +        // Uncore 2 MCDDR0 Device
> +        Device (MCD2) {
> +            Name   (_ADR, 0x001A0000)
> +        }
> +
> +        // Uncore 2 MCDDR1 Device
> +        Device (MCD3) {
> +            Name   (_ADR, 0x001B0000)
> +        }
> +    }
> +
> +    // Socket 1 Uncore 1
> +    //
> +#undef SOCKET
> +#undef STACK
> +#define SOCKET 1
> +#define STACK  7
> +    Device (CONCATENATE3(UC, SOCKET, STACK)) {
> +        Name   (_HID, EISAID("PNP0A03"))
> +        Name   (_UID, 0x35)
> +
> +        //
> +        // _PRT is ACPI method called by OS to read PCI Routing Table.
> +        //
> +        Method (_PRT, 0)
> +        {
> +          Return (AR4F)
> +        }
> +
> +        #include "Uncore.asi"
> +
> +        // Uncore 3 GRP1_CHA0-7 Device
> +        Device (DHA0) {
> +            Name   (_ADR, 0x00000000)
> +        }
> +
> +        // Uncore 3 GRP1_CHA8-15 Device
> +        Device (DHA1) {
> +            Name   (_ADR, 0x00010000)
> +        }
> +
> +        // Uncore 3 GRP1_CHA16-23 Device
> +        Device (DHA2) {
> +            Name   (_ADR, 0x00020000)
> +        }
> +
> +        // Uncore 3 GRP1_CHAU24-31 Device
> +        Device (DHA3) {
> +            Name   (_ADR, 0x00030000)
> +        }
> +
> +        // Uncore 3 GRP1_CHA32-33 Device
> +        Device (DHA4) {
> +            Name   (_ADR, 0x00040000)
> +        }
> +
> +        // Uncore 3 GRP0_CHA0-7 Device
> +        Device (DHA5) {
> +            Name   (_ADR, 0x000A0000)
> +        }
> +
> +        // Uncore 3 GRP0_CHA24-31 Device
> +        Device (DHA8) {
> +            Name   (_ADR, 0x000D0000)
> +        }
> +
> +        // Uncore 3 GRP0_CHA32-33 Device
> +        Device (DHA9) {
> +            Name   (_ADR, 0x000E0000)
> +        }
> +
> +        // Uncore 3 GRP0_CHA8-15 Device
> +        Device (DHA6) {
> +            Name   (_ADR, 0x00B00000)
> +        }
> +
> +        // Uncore 3 GRP0_CHA16-23 Device
> +        Device (DHA7) {
> +            Name   (_ADR, 0x000C0000)
> +        }
> +
> +        // Uncore 3 CHAALL0-1 Device
> +        Device (CA01) {
> +            Name   (_ADR, 0x001D0000)
> +        }
> +
> +        // Uncore 3 CHASIS_PUINT0-7 Device
> +        Device (PUC1) {
> +            Name   (_ADR, 0x001E0000)
> +        }
> +
> +        // Uncore 3 Gen3Phy Device
> +        Device (GN31) {
> +            Name   (_ADR, 0x001F0000)
> +        }
> +    }
> +#endif
> +
> +#if MAX_SOCKET > 2
> +    // Socket 2 Root bridge (Stack 0)
> +    //
> +#undef SOCKET
> +#undef STACK
> +#define SOCKET 2
> +#define STACK  0
> +    Device (PC12) {
> +        Name   (_HID, EISAID("PNP0A08"))
> +        Name   (_CID, EISAID("PNP0A03"))
> +        Name   (_UID, 0x0C)
> +
> +        //
> +        // _PRT is ACPI method called by OS to read PCI Routing Table.
> +        //
> +        Method (_PRT, 0)
> +        {
> +          Return (AR50)
> +        }
> +
> +        #include "IioRootBridge.asi"
> +        #include "Sck2Ejd.asi"
> +
> +        // IIOMISC on PC12
> +        Device (IIM2) {
> +            Name   (_ADR, 0x00000000)
> +        }
> +
> +        // CB3DMA on PC12
> +        Device (CB2A) {
> +            Name   (_ADR, 0x00010000)
> +        }
> +
> +        // CB3DMA on PC12
> +        Device (CB2B) {
> +            Name   (_ADR, 0x00010001)
> +        }
> +
> +        // CB3DMA on PC12
> +        Device (CB2C) {
> +            Name   (_ADR, 0x00010002)
> +        }
> +
> +        // CB3DMA on PC12
> +        Device (CB2D) {
> +            Name   (_ADR, 0x00010003)
> +        }
> +
> +        // CB3DMA on PC12
> +        Device (CB2E) {
> +            Name   (_ADR, 0x00010004)
> +        }
> +
> +        // CB3DMA on PC12
> +        Device (CB2F) {
> +            Name   (_ADR, 0x00010005)
> +        }
> +
> +        // CB3DMA on PC12
> +        Device (CB2G) {
> +            Name   (_ADR, 0x00010006)
> +        }
> +
> +        // CB3DMA on PC12
> +        Device (CB2H) {
> +            Name   (_ADR, 0x00010007)
> +        }
> +    }
> +
> +    // Socket 2 Root bridge (Stack 1)
> +    //
> +#undef SOCKET
> +#undef STACK
> +#define SOCKET 2
> +#define STACK  1
> +    Device (PC13) {
> +        Name   (_HID, EISAID("PNP0A08"))
> +        Name   (_CID, EISAID("PNP0A03"))
> +        Name   (_UID, 0x0D)
> +
> +        //
> +        // _PRT is ACPI method called by OS to read PCI Routing Table.
> +        //
> +        Method (_PRT, 0)
> +        {
> +          Return (AR51)
> +        }
> +
> +        #include "IioRootBridge.asi"
> +        #include "Sck2Ejd.asi"
> +
> +        // PCI Express Port 1A on PC13
> +        Device (RR1A) {
> +            Name   (_ADR, 0x00020000)
> +            Method (_PRW, 0) {
> +                Return (Package (0x02) {0x09, 0x04})
> +            }
> +            Method (_PRT, 0) {
> +
> +                Return (AR52)
> +            }
> +
> +            #include "PcieHp.asi"
> +            #include "PcieHpDev.asi"
> +            #include "PC1210nmEjd.asi"
> +        }
> +
> +        // PCI Express Port 1B on PC13
> +        Device (RR1B) {
> +            Name   (_ADR, 0x00030000)
> +            Method (_PRW, 0) {
> +                Return (Package (0x02) {0x09, 0x04})
> +            }
> +            Method (_PRT, 0) {
> +
> +                Return (AR53)
> +            }
> +
> +            #include "PcieHp.asi"
> +            #include "PcieHpDev.asi"
> +            #include "PC1210nmEjd.asi"
> +        }
> +
> +        // PCI Express Port 1C on PC13
> +        Device (RR1C) {
> +            Name   (_ADR, 0x00040000)
> +            Method (_PRW, 0) {
> +                Return (Package (0x02) {0x09, 0x04})
> +            }
> +            Method (_PRT, 0) {
> +
> +                Return (AR54)
> +            }
> +
> +            #include "PcieHp.asi"
> +            #include "PcieHpDev.asi"
> +            #include "PC1210nmEjd.asi"
> +        }
> +
> +        // PCI Express Port 1D on PC13
> +        Device (RR1D) {
> +            Name   (_ADR, 0x00050000)
> +            Method (_PRW, 0) {
> +                Return (Package (0x02) {0x09, 0x04})
> +            }
> +            Method (_PRT, 0) {
> +
> +                Return (AR55)
> +            }
> +
> +            #include "PcieHp.asi"
> +            #include "PcieHpDev.asi"
> +            #include "PC1210nmEjd.asi"
> +        }
> +    }
> +
> +    // Socket 2 Root bridge (Stack 2)
> +    //
> +#undef SOCKET
> +#undef STACK
> +#define SOCKET 2
> +#define STACK  2
> +    Device (PC14) {
> +        Name   (_HID, EISAID("PNP0A08"))
> +        Name   (_CID, EISAID("PNP0A03"))
> +        Name   (_UID, 0x0E)
> +
> +        //
> +        // _PRT is ACPI method called by OS to read PCI Routing Table.
> +        //
> +        Method (_PRT, 0)
> +        {
> +          Return (AR56)
> +        }
> +
> +        #include "IioRootBridge.asi"
> +        #include "Sck2Ejd.asi"
> +
> +        // PCI Express Port 2A on PC14
> +        Device (RR2A) {
> +            Name   (_ADR, 0x00020000)
> +            Method (_PRW, 0) {
> +                Return (Package (0x02) {0x09, 0x04})
> +            }
> +            Method (_PRT, 0) {
> +
> +                Return (AR57)
> +            }
> +
> +            #include "PcieHp.asi"
> +            #include "PcieHpDev.asi"
> +            #include "PC1210nmEjd.asi"
> +        }
> +
> +        // PCI Express Port 2B on PC14
> +        Device (RR2B) {
> +            Name   (_ADR, 0x00030000)
> +            Method (_PRW, 0) {
> +                Return (Package (0x02) {0x09, 0x04})
> +            }
> +            Method (_PRT, 0) {
> +
> +                Return (AR58)
> +            }
> +
> +            #include "PcieHp.asi"
> +            #include "PcieHpDev.asi"
> +            #include "PC1210nmEjd.asi"
> +        }
> +
> +        // PCI Express Port 2C on PC14
> +        Device (RR2C) {
> +            Name   (_ADR, 0x00040000)
> +            Method (_PRW, 0) {
> +                Return (Package (0x02) {0x09, 0x04})
> +            }
> +            Method (_PRT, 0) {
> +
> +                Return (AR59)
> +            }
> +
> +            #include "PcieHp.asi"
> +            #include "PcieHpDev.asi"
> +            #include "PC1210nmEjd.asi"
> +        }
> +
> +        // PCI Express Port 2D on PC14
> +        Device (RR2D) {
> +            Name   (_ADR, 0x00050000)
> +            Method (_PRW, 0) {
> +                Return (Package (0x02) {0x09, 0x04})
> +            }
> +            Method (_PRT, 0) {
> +
> +                Return (AR5A)
> +            }
> +
> +            #include "PcieHp.asi"
> +            #include "PcieHpDev.asi"
> +            #include "PC1210nmEjd.asi"
> +        }
> +    }
> +
> +    // Socket 2 Root bridge (Stack 3)
> +    //
> +#undef SOCKET
> +#undef STACK
> +#define SOCKET 2
> +#define STACK  3
> +    Device (PC15) {
> +        Name   (_HID, EISAID("PNP0A08"))
> +        Name   (_CID, EISAID("PNP0A03"))
> +        Name   (_UID, 0x0F)
> +
> +        //
> +        // _PRT is ACPI method called by OS to read PCI Routing Table.
> +        //
> +        Method (_PRT, 0)
> +        {
> +          Return (AR5B)
> +        }
> +
> +        #include "IioRootBridge.asi"
> +        #include "Sck2Ejd.asi"
> +
> +        // PCI Express Port 3A on PC15
> +        Device (RR3A) {
> +            Name   (_ADR, 0x00020000)
> +            Method (_PRW, 0) {
> +                Return (Package (0x02) {0x09, 0x04})
> +            }
> +            Method (_PRT, 0) {
> +
> +                Return (AR5C)
> +            }
> +
> +            #include "PcieHp.asi"
> +            #include "PcieHpDev.asi"
> +            #include "PC1210nmEjd.asi"
> +        }
> +
> +        // PCI Express Port 3B on PC15
> +        Device (RR3B) {
> +            Name   (_ADR, 0x00030000)
> +            Method (_PRW, 0) {
> +                Return (Package (0x02) {0x09, 0x04})
> +            }
> +            Method (_PRT, 0) {
> +
> +                Return (AR5D)
> +            }
> +
> +            #include "PcieHp.asi"
> +            #include "PcieHpDev.asi"
> +            #include "PC1210nmEjd.asi"
> +        }
> +
> +        // PCI Express Port 3C on PC15
> +        Device (RR3C) {
> +            Name   (_ADR, 0x00040000)
> +            Method (_PRW, 0) {
> +                Return (Package (0x02) {0x09, 0x04})
> +            }
> +            Method (_PRT, 0) {
> +
> +                Return (AR5E)
> +            }
> +
> +            #include "PcieHp.asi"
> +            #include "PcieHpDev.asi"
> +            #include "PC1210nmEjd.asi"
> +        }
> +
> +        // PCI Express Port 3D on PC15
> +        Device (RR3D) {
> +            Name   (_ADR, 0x00050000)
> +            Method (_PRW, 0) {
> +                Return (Package (0x02) {0x09, 0x04})
> +            }
> +            Method (_PRT, 0) {
> +
> +                Return (AR5F)
> +            }
> +
> +            #include "PcieHp.asi"
> +            #include "PcieHpDev.asi"
> +            #include "PC1210nmEjd.asi"
> +        }
> +    }
> +
> +    // Socket 2 Root bridge (Stack 4)
> +    //
> +#undef SOCKET
> +#undef STACK
> +#define SOCKET 2
> +#define STACK  4
> +    Device (PC16) {
> +        Name   (_HID, EISAID("PNP0A08"))
> +        Name   (_CID, EISAID("PNP0A03"))
> +        Name   (_UID, 0x10)
> +
> +        //
> +        // _PRT is ACPI method called by OS to read PCI Routing Table.
> +        //
> +        Method (_PRT, 0)
> +        {
> +          Return (AR60)
> +        }
> +
> +        #include "IioRootBridge.asi"
> +        #include "Sck2Ejd.asi"
> +
> +        // PCI Express Port 4A on PC16
> +        Device (RR4A) {
> +            Name   (_ADR, 0x00020000)
> +            Method (_PRW, 0) {
> +                Return (Package (0x02) {0x09, 0x04})
> +            }
> +            Method (_PRT, 0) {
> +
> +                Return (AR61)
> +            }
> +
> +            #include "PcieHp.asi"
> +            #include "PcieHpDev.asi"
> +            #include "PC1210nmEjd.asi"
> +        }
> +
> +        // PCI Express Port 4B on PC16
> +        Device (RR4B) {
> +            Name   (_ADR, 0x00030000)
> +            Method (_PRW, 0) {
> +                Return (Package (0x02) {0x09, 0x04})
> +            }
> +            Method (_PRT, 0) {
> +
> +                Return (AR62)
> +            }
> +
> +            #include "PcieHp.asi"
> +            #include "PcieHpDev.asi"
> +            #include "PC1210nmEjd.asi"
> +        }
> +
> +        // PCI Express Port 4C on PC16
> +        Device (RR4C) {
> +            Name   (_ADR, 0x00040000)
> +            Method (_PRW, 0) {
> +                Return (Package (0x02) {0x09, 0x04})
> +            }
> +            Method (_PRT, 0) {
> +
> +                Return (AR63)
> +            }
> +
> +            #include "PcieHp.asi"
> +            #include "PcieHpDev.asi"
> +            #include "PC1210nmEjd.asi"
> +        }
> +
> +        // PCI Express Port 4D on PC16
> +        Device (RR4D) {
> +            Name   (_ADR, 0x00050000)
> +            Method (_PRW, 0) {
> +                Return (Package (0x02) {0x09, 0x04})
> +            }
> +            Method (_PRT, 0) {
> +
> +                Return (AR64)
> +            }
> +
> +            #include "PcieHp.asi"
> +            #include "PcieHpDev.asi"
> +            #include "PC1210nmEjd.asi"
> +        }
> +    }
> +
> +    // Socket 2 Root bridge (Stack 5)
> +    //
> +#undef SOCKET
> +#undef STACK
> +#define SOCKET 2
> +#define STACK  5
> +    Device (PC17) {
> +        Name   (_HID, EISAID("PNP0A08"))
> +        Name   (_CID, EISAID("PNP0A03"))
> +        Name   (_UID, 0x11)
> +
> +        //
> +        // _PRT is ACPI method called by OS to read PCI Routing Table.
> +        //
> +        Method (_PRT, 0)
> +        {
> +          Return (AR65)
> +        }
> +
> +        #include "IioRootBridge.asi"
> +        #include "Sck2Ejd.asi"
> +
> +        // PCI Express Port 5A on PC17
> +        Device (RR5A) {
> +            Name   (_ADR, 0x00020000)
> +            Method (_PRW, 0) {
> +                Return (Package (0x02) {0x09, 0x04})
> +            }
> +            Method (_PRT, 0) {
> +
> +                Return (AR66)
> +            }
> +
> +            #include "PcieHp.asi"
> +            #include "PcieHpDev.asi"
> +            #include "PC1210nmEjd.asi"
> +        }
> +
> +        // PCI Express Port 5B on PC17
> +        Device (RR5B) {
> +            Name   (_ADR, 0x00030000)
> +            Method (_PRW, 0) {
> +                Return (Package (0x02) {0x09, 0x04})
> +            }
> +            Method (_PRT, 0) {
> +
> +                Return (AR67)
> +            }
> +
> +            #include "PcieHp.asi"
> +            #include "PcieHpDev.asi"
> +            #include "PC1210nmEjd.asi"
> +        }
> +
> +        // PCI Express Port 5C on PC17
> +        Device (RR5C) {
> +            Name   (_ADR, 0x00040000)
> +            Method (_PRW, 0) {
> +                Return (Package (0x02) {0x09, 0x04})
> +            }
> +            Method (_PRT, 0) {
> +
> +                Return (AR68)
> +            }
> +
> +            #include "PcieHp.asi"
> +            #include "PcieHpDev.asi"
> +            #include "PC1210nmEjd.asi"
> +        }
> +
> +        // PCI Express Port 5D on PC17
> +        Device (RR5D) {
> +            Name   (_ADR, 0x00050000)
> +            Method (_PRW, 0) {
> +                Return (Package (0x02) {0x09, 0x04})
> +            }
> +            Method (_PRT, 0) {
> +
> +                Return (AR69)
> +            }
> +
> +            #include "PcieHp.asi"
> +            #include "PcieHpDev.asi"
> +            #include "PC1210nmEjd.asi"
> +        }
> +    }
> +
> +    // Socket 2 Uncore 0
> +    //
> +#undef SOCKET
> +#undef STACK
> +#define SOCKET 2
> +#define STACK  6
> +    Device (CONCATENATE3(UC, SOCKET, STACK)) {
> +        Name   (_HID, EISAID("PNP0A03"))
> +        Name   (_UID, 0x36)
> +
> +        //
> +        // _PRT is ACPI method called by OS to read PCI Routing Table.
> +        //
> +        Method (_PRT, 0)
> +        {
> +          Return (AR6A)
> +        }
> +
> +        #include "Uncore.asi"
> +
> +        // Uncore 4 UBOX Device
> +        Device (UBX2) {
> +            Name   (_ADR, 0x00000000)
> +        }
> +
> +        // Uncore 4 Misc 2 UPI 0-7 Device
> +        Device (UP04) {
> +            Name   (_ADR, 0x00020000)
> +        }
> +
> +        // Uncore 4 Misc 1 UPI 0-7 Device
> +        Device (UP05) {
> +            Name   (_ADR, 0x00030000)
> +        }
> +
> +        // Uncore 4 M2UPI Device
> +        Device (M2U6) {
> +            Name   (_ADR, 0x00050000)
> +        }
> +
> +        // Uncore 4 M2UPI Device
> +        Device (M2U7) {
> +            Name   (_ADR, 0x00060000)
> +        }
> +
> +        // Uncore 4 M2UPI Device
> +        Device (M2U8) {
> +            Name   (_ADR, 0x00070000)
> +        }
> +
> +        // Uncore 4 CHASIS_SMBUS Devices
> +        Device (CSM2) {
> +            Name   (_ADR, 0x000B0000)
> +        }
> +
> +        // Uncore 4 MS2MEM_SCF_MS2MEM0 Device
> +        Device (M2M4) {
> +            Name   (_ADR, 0x000C0000)
> +        }
> +
> +        // Uncore 4 MS2MEM_SCF_MS2MEM1 Device
> +        Device (M2M5) {
> +            Name   (_ADR, 0x000D0000)
> +        }
> +
> +        // Uncore 4 MCDDR0 Device
> +        Device (MCD4) {
> +            Name   (_ADR, 0x001A0000)
> +        }
> +
> +        // Uncore 4 MCDDR1 Device
> +        Device (MCD5) {
> +            Name   (_ADR, 0x001B0000)
> +        }
> +    }
> +
> +    // Socket 2 Uncore 1
> +    //
> +#undef SOCKET
> +#undef STACK
> +#define SOCKET 2
> +#define STACK  7
> +    Device (CONCATENATE3(UC, SOCKET, STACK)) {
> +        Name   (_HID, EISAID("PNP0A03"))
> +        Name   (_UID, 0x37)
> +
> +        //
> +        // _PRT is ACPI method called by OS to read PCI Routing Table.
> +        //
> +        Method (_PRT, 0)
> +        {
> +          Return (AR6B)
> +        }
> +
> +        #include "Uncore.asi"
> +
> +        // Uncore 5 GRP1_CHA0-7 Device
> +        Device (EHA0) {
> +            Name   (_ADR, 0x00000000)
> +        }
> +
> +        // Uncore 5 GRP1_CHA8-15 Device
> +        Device (EHA1) {
> +            Name   (_ADR, 0x00010000)
> +        }
> +
> +        // Uncore 5 GRP1_CHA16-23 Device
> +        Device (EHA2) {
> +            Name   (_ADR, 0x00020000)
> +        }
> +
> +        // Uncore 5 GRP1_CHAU24-31 Device
> +        Device (EHA3) {
> +            Name   (_ADR, 0x00030000)
> +        }
> +
> +        // Uncore 5 GRP1_CHA32-33 Device
> +        Device (EHA4) {
> +            Name   (_ADR, 0x00040000)
> +        }
> +
> +        // Uncore 5 GRP0_CHA0-7 Device
> +        Device (EHA5) {
> +            Name   (_ADR, 0x000A0000)
> +        }
> +
> +        // Uncore 5 GRP0_CHA24-31 Device
> +        Device (EHA8) {
> +            Name   (_ADR, 0x000D0000)
> +        }
> +
> +        // Uncore 5 GRP0_CHA32-33 Device
> +        Device (EHA9) {
> +            Name   (_ADR, 0x000E0000)
> +        }
> +
> +        // Uncore 5 GRP0_CHA8-15 Device
> +        Device (EHA6) {
> +            Name   (_ADR, 0x00B00000)
> +        }
> +
> +        // Uncore 5 GRP0_CHA16-23 Device
> +        Device (EHA7) {
> +            Name   (_ADR, 0x000C0000)
> +        }
> +
> +        // Uncore 5 CHAALL0-1 Device
> +        Device (CA02) {
> +            Name   (_ADR, 0x001D0000)
> +        }
> +
> +        // Uncore 5 CHASIS_PUINT0-7 Device
> +        Device (PUC2) {
> +            Name   (_ADR, 0x001E0000)
> +        }
> +
> +        // Uncore 5 Gen3Phy Device
> +        Device (GN32) {
> +            Name   (_ADR, 0x001F0000)
> +        }
> +    }
> +#endif
> +
> +#if MAX_SOCKET > 3
> +    // Socket 3 Root bridge (Stack 0)
> +    //
> +#undef SOCKET
> +#undef STACK
> +#define SOCKET 3
> +#define STACK  0
> +    Device (PC18) {
> +        Name   (_HID, EISAID("PNP0A08"))
> +        Name   (_CID, EISAID("PNP0A03"))
> +        Name   (_UID, 0x12)
> +
> +        //
> +        // _PRT is ACPI method called by OS to read PCI Routing Table.
> +        //
> +        Method (_PRT, 0)
> +        {
> +          Return (AR6C)
> +        }
> +
> +        #include "IioRootBridge.asi"
> +        #include "Sck3Ejd.asi"
> +
> +        // IIOMISC on PC18
> +        Device (IIM3) {
> +            Name   (_ADR, 0x00000000)
> +        }
> +
> +        // CB3DMA on PC18
> +        Device (CB3A) {
> +            Name   (_ADR, 0x00010000)
> +        }
> +
> +        // CB3DMA on PC18
> +        Device (CB3B) {
> +            Name   (_ADR, 0x00010001)
> +        }
> +
> +        // CB3DMA on PC18
> +        Device (CB3C) {
> +            Name   (_ADR, 0x00010002)
> +        }
> +
> +        // CB3DMA on PC18
> +        Device (CB3D) {
> +            Name   (_ADR, 0x00010003)
> +        }
> +
> +        // CB3DMA on PC18
> +        Device (CB3E) {
> +            Name   (_ADR, 0x00010004)
> +        }
> +
> +        // CB3DMA on PC18
> +        Device (CB3F) {
> +            Name   (_ADR, 0x00010005)
> +        }
> +
> +        // CB3DMA on PC18
> +        Device (CB3G) {
> +            Name   (_ADR, 0x00010006)
> +        }
> +
> +        // CB3DMA on PC18
> +        Device (CB3H) {
> +            Name   (_ADR, 0x00010007)
> +        }
> +    }
> +
> +    // Socket 3 Root bridge (Stack 1)
> +    //
> +#undef SOCKET
> +#undef STACK
> +#define SOCKET 3
> +#define STACK  1
> +    Device (PC19) {
> +        Name   (_HID, EISAID("PNP0A08"))
> +        Name   (_CID, EISAID("PNP0A03"))
> +        Name   (_UID, 0x13)
> +
> +        //
> +        // _PRT is ACPI method called by OS to read PCI Routing Table.
> +        //
> +        Method (_PRT, 0)
> +        {
> +          Return (AR6D)
> +        }
> +
> +        #include "IioRootBridge.asi"
> +        #include "Sck3Ejd.asi"
> +
> +        // PCI Express Port 1A on PC19
> +        Device (SR1A) {
> +            Name   (_ADR, 0x00020000)
> +            Method (_PRW, 0) {
> +                Return (Package (0x02) {0x09, 0x04})
> +            }
> +            Method (_PRT, 0) {
> +
> +                Return (AR6E)
> +            }
> +
> +            #include "PcieHp.asi"
> +            #include "PcieHpDev.asi"
> +            #include "PC1810nmEjd.asi"
> +        }
> +
> +        // PCI Express Port 1B on PC19
> +        Device (SR1B) {
> +            Name   (_ADR, 0x00030000)
> +            Method (_PRW, 0) {
> +                Return (Package (0x02) {0x09, 0x04})
> +            }
> +            Method (_PRT, 0) {
> +
> +                Return (AR6F)
> +            }
> +
> +            #include "PcieHp.asi"
> +            #include "PcieHpDev.asi"
> +            #include "PC1810nmEjd.asi"
> +        }
> +
> +        // PCI Express Port 1C on PC19
> +        Device (SR1C) {
> +            Name   (_ADR, 0x00040000)
> +            Method (_PRW, 0) {
> +                Return (Package (0x02) {0x09, 0x04})
> +            }
> +            Method (_PRT, 0) {
> +
> +                Return (AR70)
> +            }
> +
> +            #include "PcieHp.asi"
> +            #include "PcieHpDev.asi"
> +            #include "PC1810nmEjd.asi"
> +        }
> +
> +        // PCI Express Port 1D on PC19
> +        Device (SR1D) {
> +            Name   (_ADR, 0x00050000)
> +            Method (_PRW, 0) {
> +                Return (Package (0x02) {0x09, 0x04})
> +            }
> +            Method (_PRT, 0) {
> +
> +                Return (AR71)
> +            }
> +
> +            #include "PcieHp.asi"
> +            #include "PcieHpDev.asi"
> +            #include "PC1810nmEjd.asi"
> +        }
> +    }
> +
> +    // Socket 3 Root bridge (Stack 2)
> +    //
> +#undef SOCKET
> +#undef STACK
> +#define SOCKET 3
> +#define STACK  2
> +    Device (PC20) {
> +        Name   (_HID, EISAID("PNP0A08"))
> +        Name   (_CID, EISAID("PNP0A03"))
> +        Name   (_UID, 0x14)
> +
> +        //
> +        // _PRT is ACPI method called by OS to read PCI Routing Table.
> +        //
> +        Method (_PRT, 0)
> +        {
> +          Return (AR72)
> +        }
> +
> +        #include "IioRootBridge.asi"
> +        #include "Sck3Ejd.asi"
> +
> +        // PCI Express Port 2A on  PC20
> +        Device (SR2A) {
> +            Name   (_ADR, 0x00020000)
> +            Method (_PRW, 0) {
> +                Return (Package (0x02) {0x09, 0x04})
> +            }
> +            Method (_PRT, 0) {
> +
> +                Return (AR73)
> +            }
> +
> +            #include "PcieHp.asi"
> +            #include "PcieHpDev.asi"
> +            #include "PC1810nmEjd.asi"
> +        }
> +
> +        // PCI Express Port 2B on PC20
> +        Device (SR2B) {
> +            Name   (_ADR, 0x00030000)
> +            Method (_PRW, 0) {
> +                Return (Package (0x02) {0x09, 0x04})
> +            }
> +            Method (_PRT, 0) {
> +
> +                Return (AR74)
> +            }
> +
> +            #include "PcieHp.asi"
> +            #include "PcieHpDev.asi"
> +            #include "PC1810nmEjd.asi"
> +        }
> +
> +        // PCI Express Port 2C on PC20
> +        Device (SR2C) {
> +            Name   (_ADR, 0x00040000)
> +            Method (_PRW, 0) {
> +                Return (Package (0x02) {0x09, 0x04})
> +            }
> +            Method (_PRT, 0) {
> +
> +                Return (AR75)
> +            }
> +
> +            #include "PcieHp.asi"
> +            #include "PcieHpDev.asi"
> +            #include "PC1810nmEjd.asi"
> +        }
> +
> +        // PCI Express Port 2D on PC20
> +        Device (SR2D) {
> +            Name   (_ADR, 0x00050000)
> +            Method (_PRW, 0) {
> +                Return (Package (0x02) {0x09, 0x04})
> +            }
> +            Method (_PRT, 0) {
> +
> +                Return (AR76)
> +            }
> +
> +            #include "PcieHp.asi"
> +            #include "PcieHpDev.asi"
> +            #include "PC1810nmEjd.asi"
> +        }
> +    }
> +
> +    // Socket 3 Root bridge (Stack 3)
> +    //
> +#undef SOCKET
> +#undef STACK
> +#define SOCKET 3
> +#define STACK  3
> +    Device (PC21) {
> +        Name   (_HID, EISAID("PNP0A08"))
> +        Name   (_CID, EISAID("PNP0A03"))
> +        Name   (_UID, 0x15)
> +
> +        //
> +        // _PRT is ACPI method called by OS to read PCI Routing Table.
> +        //
> +        Method (_PRT, 0)
> +        {
> +          Return (AR77)
> +        }
> +
> +        #include "IioRootBridge.asi"
> +        #include "Sck3Ejd.asi"
> +
> +        // PCI Express Port 3A on PC21
> +        Device (SR3A) {
> +            Name   (_ADR, 0x00020000)
> +            Method (_PRW, 0) {
> +                Return (Package (0x02) {0x09, 0x04})
> +            }
> +            Method (_PRT, 0) {
> +
> +                Return (AR78)
> +            }
> +
> +            #include "PcieHp.asi"
> +            #include "PcieHpDev.asi"
> +            #include "PC1810nmEjd.asi"
> +        }
> +
> +        // PCI Express Port 3B on PC21
> +        Device (SR3B) {
> +            Name   (_ADR, 0x00030000)
> +            Method (_PRW, 0) {
> +                Return (Package (0x02) {0x09, 0x04})
> +            }
> +            Method (_PRT, 0) {
> +
> +                Return (AR79)
> +            }
> +
> +            #include "PcieHp.asi"
> +            #include "PcieHpDev.asi"
> +            #include "PC1810nmEjd.asi"
> +        }
> +
> +        // PCI Express Port 3C on PC21
> +        Device (SR3C) {
> +            Name   (_ADR, 0x00040000)
> +            Method (_PRW, 0) {
> +                Return (Package (0x02) {0x09, 0x04})
> +            }
> +            Method (_PRT, 0) {
> +
> +                Return (AR7A)
> +            }
> +
> +            #include "PcieHp.asi"
> +            #include "PcieHpDev.asi"
> +            #include "PC1810nmEjd.asi"
> +        }
> +
> +        // PCI Express Port 3D on PC21
> +        Device (SR3D) {
> +            Name   (_ADR, 0x00050000)
> +            Method (_PRW, 0) {
> +                Return (Package (0x02) {0x09, 0x04})
> +            }
> +            Method (_PRT, 0) {
> +
> +                Return (AR7B)
> +            }
> +
> +            #include "PcieHp.asi"
> +            #include "PcieHpDev.asi"
> +            #include "PC1810nmEjd.asi"
> +        }
> +    }
> +
> +    // Socket 3 Root bridge (Stack 4)
> +    //
> +#undef SOCKET
> +#undef STACK
> +#define SOCKET 3
> +#define STACK  4
> +    Device (PC22) {
> +        Name   (_HID, EISAID("PNP0A08"))
> +        Name   (_CID, EISAID("PNP0A03"))
> +        Name   (_UID, 0x16)
> +
> +        //
> +        // _PRT is ACPI method called by OS to read PCI Routing Table.
> +        //
> +        Method (_PRT, 0)
> +        {
> +          Return (AR7C)
> +        }
> +
> +        #include "IioRootBridge.asi"
> +        #include "Sck3Ejd.asi"
> +
> +        // PCI Express Port 4A on PC22
> +        Device (SR4A) {
> +            Name   (_ADR, 0x00020000)
> +            Method (_PRW, 0) {
> +                Return (Package (0x02) {0x09, 0x04})
> +            }
> +            Method (_PRT, 0) {
> +
> +                Return (AR7D)
> +            }
> +
> +            #include "PcieHp.asi"
> +            #include "PcieHpDev.asi"
> +            #include "PC1810nmEjd.asi"
> +        }
> +
> +        // PCI Express Port 4B on PC22
> +        Device (SR4B) {
> +            Name   (_ADR, 0x00030000)
> +            Method (_PRW, 0) {
> +                Return (Package (0x02) {0x09, 0x04})
> +            }
> +            Method (_PRT, 0) {
> +
> +                Return (AR7E)
> +            }
> +
> +            #include "PcieHp.asi"
> +            #include "PcieHpDev.asi"
> +            #include "PC1810nmEjd.asi"
> +        }
> +
> +        // PCI Express Port 4C on PC22
> +        Device (SR4C) {
> +            Name   (_ADR, 0x00040000)
> +            Method (_PRW, 0) {
> +                Return (Package (0x02) {0x09, 0x04})
> +            }
> +            Method (_PRT, 0) {
> +
> +                Return (AR7F)
> +            }
> +
> +            #include "PcieHp.asi"
> +            #include "PcieHpDev.asi"
> +            #include "PC1810nmEjd.asi"
> +        }
> +
> +        // PCI Express Port 4D on PC22
> +        Device (SR4D) {
> +            Name   (_ADR, 0x00050000)
> +            Method (_PRW, 0) {
> +                Return (Package (0x02) {0x09, 0x04})
> +            }
> +            Method (_PRT, 0) {
> +
> +                Return (AR80)
> +            }
> +
> +            #include "PcieHp.asi"
> +            #include "PcieHpDev.asi"
> +            #include "PC1810nmEjd.asi"
> +        }
> +    }
> +
> +    // Socket 3 Root bridge (Stack 5)
> +    //
> +#undef SOCKET
> +#undef STACK
> +#define SOCKET 3
> +#define STACK  5
> +    Device (PC23) {
> +        Name   (_HID, EISAID("PNP0A08"))
> +        Name   (_CID, EISAID("PNP0A03"))
> +        Name   (_UID, 0x17)
> +
> +        //
> +        // _PRT is ACPI method called by OS to read PCI Routing Table.
> +        //
> +        Method (_PRT, 0)
> +        {
> +          Return (AR81)
> +        }
> +
> +        #include "IioRootBridge.asi"
> +        #include "Sck3Ejd.asi"
> +
> +        // PCI Express Port 5A on PC23
> +        Device (SR5A) {
> +            Name   (_ADR, 0x00020000)
> +            Method (_PRW, 0) {
> +                Return (Package (0x02) {0x09, 0x04})
> +            }
> +            Method (_PRT, 0) {
> +
> +                Return (AR82)
> +            }
> +
> +            #include "PcieHp.asi"
> +            #include "PcieHpDev.asi"
> +            #include "PC1810nmEjd.asi"
> +        }
> +
> +        // PCI Express Port 5B on PC23
> +        Device (SR5B) {
> +            Name   (_ADR, 0x00030000)
> +            Method (_PRW, 0) {
> +                Return (Package (0x02) {0x09, 0x04})
> +            }
> +            Method (_PRT, 0) {
> +
> +                Return (AR83)
> +            }
> +
> +            #include "PcieHp.asi"
> +            #include "PcieHpDev.asi"
> +            #include "PC1810nmEjd.asi"
> +        }
> +
> +        // PCI Express Port 5C on PC23
> +        Device (SR5C) {
> +            Name   (_ADR, 0x00040000)
> +            Method (_PRW, 0) {
> +                Return (Package (0x02) {0x09, 0x04})
> +            }
> +            Method (_PRT, 0) {
> +
> +                Return (AR84)
> +            }
> +
> +            #include "PcieHp.asi"
> +            #include "PcieHpDev.asi"
> +            #include "PC1810nmEjd.asi"
> +        }
> +
> +        // PCI Express Port 5D on PC23
> +        Device (SR5D) {
> +            Name   (_ADR, 0x00050000)
> +            Method (_PRW, 0) {
> +                Return (Package (0x02) {0x09, 0x04})
> +            }
> +            Method (_PRT, 0) {
> +
> +                Return (AR85)
> +            }
> +
> +            #include "PcieHp.asi"
> +            #include "PcieHpDev.asi"
> +            #include "PC1810nmEjd.asi"
> +        }
> +    }
> +
> +    // Socket 3 Uncore 0
> +    //
> +#undef SOCKET
> +#undef STACK
> +#define SOCKET 3
> +#define STACK  6
> +    Device (CONCATENATE3(UC, SOCKET, STACK)) {
> +        Name   (_HID, EISAID("PNP0A03"))
> +        Name   (_UID, 0x38)
> +
> +        //
> +        // _PRT is ACPI method called by OS to read PCI Routing Table.
> +        //
> +        Method (_PRT, 0)
> +        {
> +          Return (AR86)
> +        }
> +
> +        #include "Uncore.asi"
> +
> +        // Uncore 6 UBOX Device
> +        Device (UBX3) {
> +            Name   (_ADR, 0x00000000)
> +        }
> +
> +        // Uncore 6 Misc 2 UPI 0-7 Device
> +        Device (UP06) {
> +            Name   (_ADR, 0x00020000)
> +        }
> +
> +        // Uncore 6 Misc 1 UPI 0-7 Device
> +        Device (UP07) {
> +            Name   (_ADR, 0x00030000)
> +        }
> +
> +        // Uncore 6 M2UPI0 Device
> +        Device (M2U9) {
> +            Name   (_ADR, 0x00050000)
> +        }
> +
> +        // Uncore 6 M2UPI1 Device
> +        Device (M2UA) {
> +            Name   (_ADR, 0x00060000)
> +        }
> +
> +        // Uncore 6 M2UPI2 Device
> +        Device (M2UB) {
> +            Name   (_ADR, 0x00070000)
> +        }
> +
> +        // Uncore 6 CHASIS_SMBUS Devices
> +        Device (CSM3) {
> +            Name   (_ADR, 0x000B0000)
> +        }
> +
> +        // Uncore 6 MS2MEM_SCF_MS2MEM0 Device
> +        Device (M2M6) {
> +            Name   (_ADR, 0x000C0000)
> +        }
> +
> +        // Uncore 6 MS2MEM_SCF_MS2MEM1 Device
> +        Device (M2M7) {
> +            Name   (_ADR, 0x000D0000)
> +        }
> +
> +        // Uncore 6 MCDDR0 Device
> +        Device (MCD6) {
> +            Name   (_ADR, 0x001A0000)
> +        }
> +
> +        // Uncore 6 MCDDR1 Device
> +        Device (MCD7) {
> +            Name   (_ADR, 0x001B0000)
> +        }
> +    }
> +
> +    // Socket 3 Uncore 1
> +    //
> +#undef SOCKET
> +#undef STACK
> +#define SOCKET 3
> +#define STACK  7
> +    Device (CONCATENATE3(UC, SOCKET, STACK)) {
> +        Name   (_HID, EISAID("PNP0A03"))
> +        Name   (_UID, 0x39)
> +
> +        //
> +        // _PRT is ACPI method called by OS to read PCI Routing Table.
> +        //
> +        Method (_PRT, 0)
> +        {
> +          Return (AR87)
> +        }
> +
> +        #include "Uncore.asi"
> +
> +        // Uncore 7 GRP1_CHA0-7 Device
> +        Device (FHA0) {
> +            Name   (_ADR, 0x00000000)
> +        }
> +
> +        // Uncore 7 GRP1_CHA8-15 Device
> +        Device (FHA1) {
> +            Name   (_ADR, 0x00010000)
> +        }
> +
> +        // Uncore 7 GRP1_CHA16-23 Device
> +        Device (FHA2) {
> +            Name   (_ADR, 0x00020000)
> +        }
> +
> +        // Uncore 7 GRP1_CHAU24-31 Device
> +        Device (FHA3) {
> +            Name   (_ADR, 0x00030000)
> +        }
> +
> +        // Uncore 7 GRP1_CHA32-33 Device
> +        Device (FHA4) {
> +            Name   (_ADR, 0x00040000)
> +        }
> +
> +        // Uncore 7 GRP0_CHA0-7 Device
> +        Device (FHA5) {
> +            Name   (_ADR, 0x000A0000)
> +        }
> +
> +        // Uncore 7 GRP0_CHA24-31 Device
> +        Device (FHA8) {
> +            Name   (_ADR, 0x000D0000)
> +        }
> +
> +        // Uncore 7 GRP0_CHA32-33 Device
> +        Device (FHA9) {
> +            Name   (_ADR, 0x000E0000)
> +        }
> +
> +        // Uncore 7 GRP0_CHA8-15 Device
> +        Device (FHA6) {
> +            Name   (_ADR, 0x00B00000)
> +        }
> +
> +        // Uncore 7 GRP0_CHA16-23 Device
> +        Device (FHA7) {
> +            Name   (_ADR, 0x000C0000)
> +        }
> +
> +        // Uncore 7 CHAALL0-1 Device
> +        Device (CA03) {
> +            Name   (_ADR, 0x001D0000)
> +        }
> +
> +        // Uncore 7 CHASIS_PUINT0-7 Device
> +        Device (PUC3) {
> +            Name   (_ADR, 0x001E0000)
> +        }
> +
> +        // Uncore 7 Gen3Phy Device
> +        Device (GN33) {
> +            Name   (_ADR, 0x001F0000)
> +        }
> +    }
> +#endif
> +
> +    // Virtual FPGA Bridge on Socket 0
> +    Device (VFP0) {
> +        Name   (_HID, EISAID("PNP0A08"))
> +        Name   (_CID, EISAID("PNP0A03"))
> +        Name   (_UID, 0x18)
> +        Method (_BBN, 0, NotSerialized) {
> +            return (FBB0)
> +        }
> +
> +        Method (_PRT, 0) {
> +
> +            Return (AR88)
> +        }
> +
> +        #include "FpgaBus00.asi"
> +
> +        // FPGA Device
> +        Device (FPG0) {
> +            Name   (_ADR, 0x00000000)
> +        }
> +    }
> +#if MAX_SOCKET > 1
> +
> +    // Virtual FPGA Bridge on Socket 1
> +    Device (VFP1) {
> +        Name   (_HID, EISAID("PNP0A08"))
> +        Name   (_CID, EISAID("PNP0A03"))
> +        Name   (_UID, 0x19)
> +        Method (_BBN, 0, NotSerialized) {
> +            return (FBB1)
> +        }
> +
> +        Method (_PRT, 0) {
> +
> +            Return (AR89)
> +        }
> +
> +        #include "FpgaBus01.asi"
> +
> +        // FPGA Device
> +        Device (FPG1) {
> +            Name   (_ADR, 0x00000000)
> +        }
> +    }
> +#endif
> +
> +#if MAX_SOCKET > 2
> +    // Virtual FPGA Bridge on Socket 2
> +    Device (VFP2) {
> +        Name   (_HID, EISAID("PNP0A08"))
> +        Name   (_CID, EISAID("PNP0A03"))
> +        Name   (_UID, 0x1A)
> +        Method (_BBN, 0, NotSerialized) {
> +            return (FBB2)
> +        }
> +
> +        Method (_PRT, 0) {
> +
> +            Return (AR8A)
> +        }
> +
> +        #include "FpgaBus02.asi"
> +
> +        // FPGA Device
> +        Device (FPG2) {
> +            Name   (_ADR, 0x00000000)
> +        }
> +    }
> +#endif
> +
> +#if MAX_SOCKET > 3
> +    // Virtual FPGA Bridge on Socket 3
> +    Device (VFP3) {
> +        Name   (_HID, EISAID("PNP0A08"))
> +        Name   (_CID, EISAID("PNP0A03"))
> +        Name   (_UID, 0x1B)
> +        Method (_BBN, 0, NotSerialized) {
> +            return (FBB3)
> +        }
> +
> +        Method (_PRT, 0) {
> +
> +            Return (AR8B)
> +        }
> +
> +        #include "FpgaBus03.asi"
> +
> +        // FPGA Device
> +        Device (FPG3) {
> +            Name   (_ADR, 0x00000000)
> +        }
> +    }
> +#endif
> +}
> +
> +Scope (\_GPE) {
> +    // [BR1A]: PCI Express Port 1A on PC01
> +    // [BR1B]: PCI Express Port 1B on PC01
> +    // [BR1C]: PCI Express Port 1C on PC01
> +    // [BR1D]: PCI Express Port 1D on PC01
> +    // [BR2A]: PCI Express Port 2A on PC02
> +    // [BR2B]: PCI Express Port 2B on PC02
> +    // [BR2C]: PCI Express Port 2C on PC02
> +    // [BR2D]: PCI Express Port 2D on PC02
> +    // [BR3A]: PCI Express Port 3A on PC03
> +    // [BR3B]: PCI Express Port 3B on PC03
> +    // [BR3C]: PCI Express Port 3C on PC03
> +    // [BR3D]: PCI Express Port 3D on PC03
> +    // [BR4A]: PCI Express Port 4A on PC04
> +    // [BR4B]: PCI Express Port 4B on PC04
> +    // [BR4C]: PCI Express Port 4C on PC04
> +    // [BR4D]: PCI Express Port 4D on PC04
> +    // [BR5A]: PCI Express Port 5A on PC05
> +    // [BR5B]: PCI Express Port 5B on PC05
> +    // [BR5C]: PCI Express Port 5C on PC05
> +    // [BR5D]: PCI Express Port 5D on PC05
> +    // [QR1A]: PCI Express Port 1A on PC07
> +    // [QR1B]: PCI Express Port 1B on PC07
> +    // [QR1C]: PCI Express Port 1C on PC07
> +    // [QR1D]: PCI Express Port 1D on PC07
> +    // [QR2A]: PCI Express Port 2A on PC08
> +    // [QR2B]: PCI Express Port 2B on PC08
> +    // [QR2C]: PCI Express Port 2C on PC08
> +    // [QR2D]: PCI Express Port 2D on PC08
> +    // [QR3A]: PCI Express Port 3A on PC09
> +    // [QR3B]: PCI Express Port 3B on PC09
> +    // [QR3C]: PCI Express Port 3C on PC09
> +    // [QR3D]: PCI Express Port 3D on PC09
> +    // [QR4A]: PCI Express Port 4A on PC10
> +    // [QR4B]: PCI Express Port 4B on PC10
> +    // [QR4C]: PCI Express Port 4C on PC10
> +    // [QR4D]: PCI Express Port 4D on PC10
> +    // [QR5A]: PCI Express Port 5A on PC11
> +    // [QR5B]: PCI Express Port 5B on PC11
> +    // [QR5C]: PCI Express Port 5C on PC11
> +    // [QR5D]: PCI Express Port 5D on PC11
> +    // [RR1A]: PCI Express Port 1A on PC13
> +    // [RR1B]: PCI Express Port 1B on PC13
> +    // [RR1C]: PCI Express Port 1C on PC13
> +    // [RR1D]: PCI Express Port 1D on PC13
> +    // [RR2A]: PCI Express Port 2A on PC14
> +    // [RR2B]: PCI Express Port 2B on PC14
> +    // [RR2C]: PCI Express Port 2C on PC14
> +    // [RR2D]: PCI Express Port 2D on PC14
> +    // [RR3A]: PCI Express Port 3A on PC15
> +    // [RR3B]: PCI Express Port 3B on PC15
> +    // [RR3C]: PCI Express Port 3C on PC15
> +    // [RR3D]: PCI Express Port 3D on PC15
> +    // [RR4A]: PCI Express Port 4A on PC16
> +    // [RR4B]: PCI Express Port 4B on PC16
> +    // [RR4C]: PCI Express Port 4C on PC16
> +    // [RR4D]: PCI Express Port 4D on PC16
> +    // [RR5A]: PCI Express Port 5A on PC17
> +    // [RR5B]: PCI Express Port 5B on PC17
> +    // [RR5C]: PCI Express Port 5C on PC17
> +    // [RR5D]: PCI Express Port 5D on PC17
> +    // [SR1A]: PCI Express Port 1A on PC19
> +    // [SR1B]: PCI Express Port 1B on PC19
> +    // [SR1C]: PCI Express Port 1C on PC19
> +    // [SR1D]: PCI Express Port 1D on PC19
> +    // [SR2A]: PCI Express Port 2A on  PC20
> +    // [SR2B]: PCI Express Port 2B on PC20
> +    // [SR2C]: PCI Express Port 2C on PC20
> +    // [SR2D]: PCI Express Port 2D on PC20
> +    // [SR3A]: PCI Express Port 3A on PC21
> +    // [SR3B]: PCI Express Port 3B on PC21
> +    // [SR3C]: PCI Express Port 3C on PC21
> +    // [SR3D]: PCI Express Port 3D on PC21
> +    // [SR4A]: PCI Express Port 4A on PC22
> +    // [SR4B]: PCI Express Port 4B on PC22
> +    // [SR4C]: PCI Express Port 4C on PC22
> +    // [SR4D]: PCI Express Port 4D on PC22
> +    // [SR5A]: PCI Express Port 5A on PC23
> +    // [SR5B]: PCI Express Port 5B on PC23
> +    // [SR5C]: PCI Express Port 5C on PC23
> +    // [SR5D]: PCI Express Port 5D on PC23
> +    Method (_L09, 0x0, NotSerialized) {
> +        #include "Gpe.asi"
> +        Notify (\_SB.PC01.BR1A, 0x02)
> +        Notify (\_SB.PC01.BR1B, 0x02)
> +        Notify (\_SB.PC01.BR1C, 0x02)
> +        Notify (\_SB.PC01.BR1D, 0x02)
> +        Notify (\_SB.PC02.BR2A, 0x02)
> +        Notify (\_SB.PC02.BR2B, 0x02)
> +        Notify (\_SB.PC02.BR2C, 0x02)
> +        Notify (\_SB.PC02.BR2D, 0x02)
> +        Notify (\_SB.PC03.BR3A, 0x02)
> +        Notify (\_SB.PC03.BR3B, 0x02)
> +        Notify (\_SB.PC03.BR3C, 0x02)
> +        Notify (\_SB.PC03.BR3D, 0x02)
> +        Notify (\_SB.PC04.BR4A, 0x02)
> +        Notify (\_SB.PC04.BR4B, 0x02)
> +        Notify (\_SB.PC04.BR4C, 0x02)
> +        Notify (\_SB.PC04.BR4D, 0x02)
> +        Notify (\_SB.PC05.BR5A, 0x02)
> +        Notify (\_SB.PC05.BR5B, 0x02)
> +        Notify (\_SB.PC05.BR5C, 0x02)
> +        Notify (\_SB.PC05.BR5D, 0x02)
> +#if MAX_SOCKET > 1
> +        Notify (\_SB.PC07.QR1A, 0x02)
> +        Notify (\_SB.PC07.QR1B, 0x02)
> +        Notify (\_SB.PC07.QR1C, 0x02)
> +        Notify (\_SB.PC07.QR1D, 0x02)
> +        Notify (\_SB.PC08.QR2A, 0x02)
> +        Notify (\_SB.PC08.QR2B, 0x02)
> +        Notify (\_SB.PC08.QR2C, 0x02)
> +        Notify (\_SB.PC08.QR2D, 0x02)
> +        Notify (\_SB.PC09.QR3A, 0x02)
> +        Notify (\_SB.PC09.QR3B, 0x02)
> +        Notify (\_SB.PC09.QR3C, 0x02)
> +        Notify (\_SB.PC09.QR3D, 0x02)
> +        Notify (\_SB.PC10.QR4A, 0x02)
> +        Notify (\_SB.PC10.QR4B, 0x02)
> +        Notify (\_SB.PC10.QR4C, 0x02)
> +        Notify (\_SB.PC10.QR4D, 0x02)
> +        Notify (\_SB.PC11.QR5A, 0x02)
> +        Notify (\_SB.PC11.QR5B, 0x02)
> +        Notify (\_SB.PC11.QR5C, 0x02)
> +        Notify (\_SB.PC11.QR5D, 0x02)
> +#endif
> +#if MAX_SOCKET > 2
> +        Notify (\_SB.PC13.RR1A, 0x02)
> +        Notify (\_SB.PC13.RR1B, 0x02)
> +        Notify (\_SB.PC13.RR1C, 0x02)
> +        Notify (\_SB.PC13.RR1D, 0x02)
> +        Notify (\_SB.PC14.RR2A, 0x02)
> +        Notify (\_SB.PC14.RR2B, 0x02)
> +        Notify (\_SB.PC14.RR2C, 0x02)
> +        Notify (\_SB.PC14.RR2D, 0x02)
> +        Notify (\_SB.PC15.RR3A, 0x02)
> +        Notify (\_SB.PC15.RR3B, 0x02)
> +        Notify (\_SB.PC15.RR3C, 0x02)
> +        Notify (\_SB.PC15.RR3D, 0x02)
> +        Notify (\_SB.PC16.RR4A, 0x02)
> +        Notify (\_SB.PC16.RR4B, 0x02)
> +        Notify (\_SB.PC16.RR4C, 0x02)
> +        Notify (\_SB.PC16.RR4D, 0x02)
> +        Notify (\_SB.PC17.RR5A, 0x02)
> +        Notify (\_SB.PC17.RR5B, 0x02)
> +        Notify (\_SB.PC17.RR5C, 0x02)
> +        Notify (\_SB.PC17.RR5D, 0x02)
> +#endif
> +#if MAX_SOCKET > 3
> +        Notify (\_SB.PC19.SR1A, 0x02)
> +        Notify (\_SB.PC19.SR1B, 0x02)
> +        Notify (\_SB.PC19.SR1C, 0x02)
> +        Notify (\_SB.PC19.SR1D, 0x02)
> +        Notify (\_SB.PC20.SR2A, 0x02)
> +        Notify (\_SB.PC20.SR2B, 0x02)
> +        Notify (\_SB.PC20.SR2C, 0x02)
> +        Notify (\_SB.PC20.SR2D, 0x02)
> +        Notify (\_SB.PC21.SR3A, 0x02)
> +        Notify (\_SB.PC21.SR3B, 0x02)
> +        Notify (\_SB.PC21.SR3C, 0x02)
> +        Notify (\_SB.PC21.SR3D, 0x02)
> +        Notify (\_SB.PC22.SR4A, 0x02)
> +        Notify (\_SB.PC22.SR4B, 0x02)
> +        Notify (\_SB.PC22.SR4C, 0x02)
> +        Notify (\_SB.PC22.SR4D, 0x02)
> +        Notify (\_SB.PC23.SR5A, 0x02)
> +        Notify (\_SB.PC23.SR5B, 0x02)
> +        Notify (\_SB.PC23.SR5C, 0x02)
> +        Notify (\_SB.PC23.SR5D, 0x02)
> +#endif
> +    }
> +
> +    // [EPCU]: EVA PCIe Uplink
> +    // [VSP0]: EVA Virtual Switch Port 0
> +    // [VSP1]: EVA Virtual Switch Port 1
> +    // [VSP2]: EVA Virtual Switch Port 2
> +    // [VSP3]: EVA Virtual Switch Port 3
> +    Method (_L0B, 0x0, NotSerialized) {
> +        Notify (\_SB.PC02.BR2A.EPCU, 0x02)
> +        Notify (\_SB.PC02.BR2A.EPCU.VSP0, 0x02)
> +        Notify (\_SB.PC02.BR2A.EPCU.VSP1, 0x02)
> +        Notify (\_SB.PC02.BR2A.EPCU.VSP2, 0x02)
> +        Notify (\_SB.PC02.BR2A.EPCU.VSP3, 0x02)
> +    }
> +}
> +
> diff --git
> a/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/Sck
> 1Ejd.asi
> b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/Sck
> 1Ejd.asi
> new file mode 100644
> index 0000000000..5c5c5fbade
> --- /dev/null
> +++
> b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/Sck
> 1Ejd.asi
> @@ -0,0 +1,10 @@
> +/** @file
> +
> +  @copyright
> +  Copyright 2001 - 2012 Intel Corporation. <BR>
> +
> +  SPDX-License-Identifier: BSD-2-Clause-Patent
> +**/
> +
> +  // Eject device if SCK1 is removed.
> +  Name(_EJD,"\\_SB.SCK1")   // Dependent on SCK1
> diff --git
> a/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/Sck
> 2Ejd.asi
> b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/Sck
> 2Ejd.asi
> new file mode 100644
> index 0000000000..f8b0cd107d
> --- /dev/null
> +++
> b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/Sck
> 2Ejd.asi
> @@ -0,0 +1,10 @@
> +/** @file
> +
> +  @copyright
> +  Copyright 2001 - 2012 Intel Corporation. <BR>
> +
> +  SPDX-License-Identifier: BSD-2-Clause-Patent
> +**/
> +
> +  // Eject device if SCK2 is removed.
> +  Name(_EJD,"\\_SB.SCK2")   // Dependent on SCK2
> diff --git
> a/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/Sck
> 3Ejd.asi
> b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/Sck
> 3Ejd.asi
> new file mode 100644
> index 0000000000..175d5d871b
> --- /dev/null
> +++
> b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/Sck
> 3Ejd.asi
> @@ -0,0 +1,10 @@
> +/** @file
> +
> +  @copyright
> +  Copyright 2001 - 2012 Intel Corporation. <BR>
> +
> +  SPDX-License-Identifier: BSD-2-Clause-Patent
> +**/
> +
> +  // Eject device if SCK3 is removed.
> +  Name(_EJD,"\\_SB.SCK3")   // Dependent on SCK3
> diff --git
> a/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/Sgx
> .asi
> b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/Sgx
> .asi
> new file mode 100644
> index 0000000000..d6a1e5da71
> --- /dev/null
> +++
> b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/Sgx
> .asi
> @@ -0,0 +1,219 @@
> +/** @file
> +
> +  @copyright
> +  Copyright 2007 - 2017 Intel Corporation. <BR>
> +
> +  SPDX-License-Identifier: BSD-2-Clause-Patent
> +**/
> +
> +Device (EPC) {
> +  Name (_HID, EISAID ("INT0E0C"))
> +  Name (_STR, Unicode ("Enclave Page Cache 1.0"))
> +  Name (_MLS, Package () {Package (2) { "en", Unicode ("Enclave Page
> Cache 1.0")}})
> +
> +  Name (RBUF, ResourceTemplate () {
> +    QWordMemory (
> +      ResourceConsumer,    // ResourceUsage
> +      PosDecode,           // Decode               _DEC
> +      MinNotFixed,         // IsMinFixed           _MIF
> +      MaxNotFixed,         // IsMaxFixed           _MAF
> +      NonCacheable,        // Cacheable            _MEM
> +      ReadWrite,           // ReadAndWrite         _RW
> +      0,                   // AddressGranularity   _GRA
> +      0,                   // AddressMinimum       _MIN  <= To be patched in Runtime
> +      0,                   // AddressMaximum       _MAX  <= To be patched in Runtime
> +      0,                   // AddressTranslation   _TRA
> +      0,                   // RangeLength          _LEN  <= To be patched in Runtime
> +      ,                    // ResourceSourceIndex
> +      ,                    // ResourceSource
> +      EPC0                 // DescriptorName
> +      )
> +    QWordMemory (
> +      ResourceConsumer,    // ResourceUsage
> +      PosDecode,           // Decode               _DEC
> +      MinNotFixed,         // IsMinFixed           _MIF
> +      MaxNotFixed,         // IsMaxFixed           _MAF
> +      NonCacheable,        // Cacheable            _MEM
> +      ReadWrite,           // ReadAndWrite         _RW
> +      0,                   // AddressGranularity   _GRA
> +      0,                   // AddressMinimum       _MIN  <= To be patched in Runtime
> +      0,                   // AddressMaximum       _MAX  <= To be patched in Runtime
> +      0,                   // AddressTranslation   _TRA
> +      0,                   // RangeLength          _LEN  <= To be patched in Runtime
> +      ,                    // ResourceSourceIndex
> +      ,                    // ResourceSource
> +      EPC1                 // DescriptorName
> +      )
> +    QWordMemory (
> +      ResourceConsumer,    // ResourceUsage
> +      PosDecode,           // Decode               _DEC
> +      MinNotFixed,         // IsMinFixed           _MIF
> +      MaxNotFixed,         // IsMaxFixed           _MAF
> +      NonCacheable,        // Cacheable            _MEM
> +      ReadWrite,           // ReadAndWrite         _RW
> +      0,                   // AddressGranularity   _GRA
> +      0,                   // AddressMinimum       _MIN  <= To be patched in Runtime
> +      0,                   // AddressMaximum       _MAX  <= To be patched in Runtime
> +      0,                   // AddressTranslation   _TRA
> +      0,                   // RangeLength          _LEN  <= To be patched in Runtime
> +      ,                    // ResourceSourceIndex
> +      ,                    // ResourceSource
> +      EPC2                 // DescriptorName
> +      )
> +    QWordMemory (
> +      ResourceConsumer,    // ResourceUsage
> +      PosDecode,           // Decode               _DEC
> +      MinNotFixed,         // IsMinFixed           _MIF
> +      MaxNotFixed,         // IsMaxFixed           _MAF
> +      NonCacheable,        // Cacheable            _MEM
> +      ReadWrite,           // ReadAndWrite         _RW
> +      0,                   // AddressGranularity   _GRA
> +      0,                   // AddressMinimum       _MIN  <= To be patched in Runtime
> +      0,                   // AddressMaximum       _MAX  <= To be patched in Runtime
> +      0,                   // AddressTranslation   _TRA
> +      0,                   // RangeLength          _LEN  <= To be patched in Runtime
> +      ,                    // ResourceSourceIndex
> +      ,                    // ResourceSource
> +      EPC3                 // DescriptorName
> +      )
> +    QWordMemory (
> +      ResourceConsumer,    // ResourceUsage
> +      PosDecode,           // Decode               _DEC
> +      MinNotFixed,         // IsMinFixed           _MIF
> +      MaxNotFixed,         // IsMaxFixed           _MAF
> +      NonCacheable,        // Cacheable            _MEM
> +      ReadWrite,           // ReadAndWrite         _RW
> +      0,                   // AddressGranularity   _GRA
> +      0,                   // AddressMinimum       _MIN  <= To be patched in Runtime
> +      0,                   // AddressMaximum       _MAX  <= To be patched in Runtime
> +      0,                   // AddressTranslation   _TRA
> +      0,                   // RangeLength          _LEN  <= To be patched in Runtime
> +      ,                    // ResourceSourceIndex
> +      ,                    // ResourceSource
> +      EPC4                 // DescriptorName
> +      )
> +    QWordMemory (
> +      ResourceConsumer,    // ResourceUsage
> +      PosDecode,           // Decode               _DEC
> +      MinNotFixed,         // IsMinFixed           _MIF
> +      MaxNotFixed,         // IsMaxFixed           _MAF
> +      NonCacheable,        // Cacheable            _MEM
> +      ReadWrite,           // ReadAndWrite         _RW
> +      0,                   // AddressGranularity   _GRA
> +      0,                   // AddressMinimum       _MIN  <= To be patched in Runtime
> +      0,                   // AddressMaximum       _MAX  <= To be patched in Runtime
> +      0,                   // AddressTranslation   _TRA
> +      0,                   // RangeLength          _LEN  <= To be patched in Runtime
> +      ,                    // ResourceSourceIndex
> +      ,                    // ResourceSource
> +      EPC5                 // DescriptorName
> +      )
> +    QWordMemory (
> +      ResourceConsumer,    // ResourceUsage
> +      PosDecode,           // Decode               _DEC
> +      MinNotFixed,         // IsMinFixed           _MIF
> +      MaxNotFixed,         // IsMaxFixed           _MAF
> +      NonCacheable,        // Cacheable            _MEM
> +      ReadWrite,           // ReadAndWrite         _RW
> +      0,                   // AddressGranularity   _GRA
> +      0,                   // AddressMinimum       _MIN  <= To be patched in Runtime
> +      0,                   // AddressMaximum       _MAX  <= To be patched in Runtime
> +      0,                   // AddressTranslation   _TRA
> +      0,                   // RangeLength          _LEN  <= To be patched in Runtime
> +      ,                    // ResourceSourceIndex
> +      ,                    // ResourceSource
> +      EPC6                 // DescriptorName
> +      )
> +    QWordMemory (
> +      ResourceConsumer,    // ResourceUsage
> +      PosDecode,           // Decode               _DEC
> +      MinNotFixed,         // IsMinFixed           _MIF
> +      MaxNotFixed,         // IsMaxFixed           _MAF
> +      NonCacheable,        // Cacheable            _MEM
> +      ReadWrite,           // ReadAndWrite         _RW
> +      0,                   // AddressGranularity   _GRA
> +      0,                   // AddressMinimum       _MIN  <= To be patched in Runtime
> +      0,                   // AddressMaximum       _MAX  <= To be patched in Runtime
> +      0,                   // AddressTranslation   _TRA
> +      0,                   // RangeLength          _LEN  <= To be patched in Runtime
> +      ,                    // ResourceSourceIndex
> +      ,                    // ResourceSource
> +      EPC7                 // DescriptorName
> +      )
> +    })
> +
> +  Method (_CRS, 0x0, NotSerialized) {
> +    If (LNotEqual (EBA0, 0)) {
> +      CreateQwordField (RBUF, ^EPC0._MIN, MIN0)
> +      CreateQwordField (RBUF, ^EPC0._MAX, MAX0)
> +      CreateQwordField (RBUF, ^EPC0._LEN, LEN0)
> +      Store (EBA0, MIN0)
> +      Store (ELN0, LEN0)
> +      Subtract (Add (EBA0, ELN0), 1, MAX0)
> +    }
> +    If (LNotEqual (EBA1, 0)) {
> +      CreateQwordField (RBUF, ^EPC1._MIN, MIN1)
> +      CreateQwordField (RBUF, ^EPC1._MAX, MAX1)
> +      CreateQwordField (RBUF, ^EPC1._LEN, LEN1)
> +      Store (EBA1, MIN1)
> +      Store (ELN1, LEN1)
> +      Subtract (Add (EBA1, ELN1), 1, MAX1)
> +    }
> +    If (LNotEqual (EBA2, 0)) {
> +      CreateQwordField (RBUF, ^EPC2._MIN, MIN2)
> +      CreateQwordField (RBUF, ^EPC2._MAX, MAX2)
> +      CreateQwordField (RBUF, ^EPC2._LEN, LEN2)
> +      Store (EBA2, MIN2)
> +      Store (ELN2, LEN2)
> +      Subtract (Add (EBA2, ELN2), 1, MAX2)
> +    }
> +    If (LNotEqual (EBA3, 0)) {
> +      CreateQwordField (RBUF, ^EPC3._MIN, MIN3)
> +      CreateQwordField (RBUF, ^EPC3._MAX, MAX3)
> +      CreateQwordField (RBUF, ^EPC3._LEN, LEN3)
> +      Store (EBA3, MIN3)
> +      Store (ELN3, LEN3)
> +      Subtract (Add (EBA3, ELN3), 1, MAX3)
> +    }
> +    If (LNotEqual (EBA4, 0)) {
> +      CreateQwordField (RBUF, ^EPC4._MIN, MIN4)
> +      CreateQwordField (RBUF, ^EPC4._MAX, MAX4)
> +      CreateQwordField (RBUF, ^EPC4._LEN, LEN4)
> +      Store (EBA4, MIN4)
> +      Store (ELN4, LEN4)
> +      Subtract (Add (EBA4, ELN4), 1, MAX4)
> +    }
> +    If (LNotEqual (EBA5, 0)) {
> +      CreateQwordField (RBUF, ^EPC5._MIN, MIN5)
> +      CreateQwordField (RBUF, ^EPC5._MAX, MAX5)
> +      CreateQwordField (RBUF, ^EPC5._LEN, LEN5)
> +      Store (EBA5, MIN5)
> +      Store (ELN5, LEN5)
> +      Subtract (Add (EBA5, ELN5), 1, MAX5)
> +    }
> +    If (LNotEqual (EBA6, 0)) {
> +      CreateQwordField (RBUF, ^EPC6._MIN, MIN6)
> +      CreateQwordField (RBUF, ^EPC6._MAX, MAX6)
> +      CreateQwordField (RBUF, ^EPC6._LEN, LEN6)
> +      Store (EBA6, MIN6)
> +      Store (ELN6, LEN6)
> +      Subtract (Add (EBA6, ELN6), 1, MAX6)
> +    }
> +    If (LNotEqual (EBA7, 0)) {
> +      CreateQwordField (RBUF, ^EPC7._MIN, MIN7)
> +      CreateQwordField (RBUF, ^EPC7._MAX, MAX7)
> +      CreateQwordField (RBUF, ^EPC7._LEN, LEN7)
> +      Store (EBA7, MIN7)
> +      Store (ELN7, LEN7)
> +      Subtract (Add (EBA7, ELN7), 1, MAX7)
> +    }
> +    Return (RBUF)
> +  }
> +
> +  Method (_STA, 0x0, NotSerialized) {
> +    If (LNotEqual (EPCS, 0)) {
> +      Return (0xF)
> +    }
> +    Return (0x0)
> +  }
> +} // end EPC Device
> diff --git
> a/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/Un
> core.asi
> b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/Un
> core.asi
> new file mode 100644
> index 0000000000..bfda78432c
> --- /dev/null
> +++
> b/Platform/Intel/WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/Dsdt/Un
> core.asi
> @@ -0,0 +1,163 @@
> +/** @file
> +
> +  @copyright
> +  Copyright 2016 - 2020 Intel Corporation. <BR>
> +
> +  SPDX-License-Identifier: BSD-2-Clause-Patent
> +**/
> +
> +  //
> +  // _BBN is ACPI method called by OS to read PCI base bus number for IIO
> stack.
> +  //
> +  Method(_BBN, 0, NotSerialized)
> +  {
> +    Return(CONCATENATE3(BB, SOCKET, STACK))
> +  }
> +
> +  //
> +  // _PXM is ACPI method called by OS to read Proximity Domain (aka NUMA
> Node) where IIO stack belongs to.
> +  //
> +  Method(_PXM, 0, NotSerialized)
> +  {
> +    Store(SOCKET, Local0)
> +    If (CLOD) {
> +      //
> +      // If Sub-NUMA Cluster (SNC) enabled report PCI in the first of SNC
> domains of a socket,
> +      // so multiplicate socket number by the number of SNC domains.
> +      //
> +      Multiply(Local0, CLOD, Local0)
> +    }
> +    Return(Local0)
> +  }
> +
> +  //
> +  // _SEG is ACPI method called by OS to read PCI segment of IIO stack.
> +  //
> +  Method(_SEG, 0, NotSerialized)
> +  {
> +    Return(CONCATENATE2(SG0, SOCKET))
> +  }
> +
> +  //
> +  // _STA is a ACPI method called by OS to read status of ACPI device, IIO
> stack in this case.
> +  //
> +  Method(_STA, 0, NotSerialized)
> +  { //
> +    // Check in processor present bitmap (PRBM) if processor is present, then
> +    // in stack present bitmap of given processor (SPBx) if stack is present.
> +    //
> +    ShiftLeft(1, SOCKET, Local0)
> +    If (And(PRBM, Local0)) {
> +
> +      ShiftLeft(1, CONCATENATE2(0x,STACK), Local1)
> +      if (And(CONCATENATE2(SPB, SOCKET), Local1)) {
> +        Return(0x0F)
> +      }
> +    }
> +    Return(0x00)
> +  }
> +
> +  External (DBGM, FieldUnitObj)
> +  Name (SUPP, 0)
> +  Name (CTRL, 0)
> +
> +  Method(_OSC,4) {
> +      //
> +      // Create DWord-addressable fields from the capabilities Buffer
> +      //
> +      CreateDWordField(Arg3,0,CDW1)
> +      If (LEqual(Arg0,ToUUID("33DB4D5B-1FF7-401C-9657-7441C03DD766"))) {
> +
> +        //
> +        // Create DWord-addressable fields from the capabilities Buffer
> +        //
> +        CreateDWordField(Arg3,4,CDW2)
> +
> +        //
> +        // Fill 3rd capability DWORD only if the count is greater than 2.
> +        //
> +        If(LGreater(Arg2,2)) {
> +          CreateDWordField(Arg3,8,CDW3)
> +        }
> +
> +        //
> +        // Save Capabilities DWord2 & 3
> +        //
> +        Store(CDW2,SUPP)
> +        Store(CDW3,CTRL)
> +
> +        //
> +        // Only allow native hot plug control if OS supports
> +        // * ASPM
> +        // * MSI/MSI-X
> +        //
> +        If (LOr(AHPE, LNotEqual(And(SUPP, 0x16), 0x16))) { // Conditions not
> met?
> +          And(CTRL, 0x1E, CTRL) // Mask bit 0 to deny.
> +          Sleep(1000)
> +        }
> +
> +        //
> +        // Never allow SHPC (no SHPC controller in system)
> +        //
> +        And(CTRL, 0x1D, CTRL)
> +        //
> +        // Disable Native PCIe AER handling from OS so that it uses Firmware
> First model in WHEA
> +        //
> +        And (CTRL, 0x17, CTRL)
> +        If (Not(And(CDW1,1))) { // Query Flag Clear?
> +          //
> +          // Disable GPEs for Features granted native control
> +          //
> +          If (And(CTRL, 0x01)) { // Native Hot plug control granted?
> +            Store (0x01, GPSH)                // Clear Hotplug SCI Enable in GPE0
> +          }
> +        }
> +
> +        If (LNotEqual(Arg1,one)) { // unknown revision
> +          Or(CDW1,0x08,CDW1)
> +        }
> +
> +        If(LNotEqual(CDW3,CTRL)) { // capabilities bits were masked
> +          Or(CDW1,0x10,CDW1)
> +        }
> +        //
> +        // update DWORD3 in the buffer
> +        //
> +        Store(CTRL,CDW3)
> +        Return(Arg3)
> +
> +      } Else {
> +        //
> +        // Just indicate unrecognized UUID
> +        // Leave it at that
> +        //
> +        Or (CDW1,4,CDW1)
> +        if(LEqual(DBGM, 0x01)){
> +          Store (0xEE, IO80)
> +        }
> +        Return(Arg3)
> +      }
> +  } // End _OSC
> +
> +  Name (UNRS, ResourceTemplate() {
> +      WORDBusNumber (     // Bus number resource (0); the bridge produces
> bus numbers for its subsequent buses
> +        ResourceProducer, // bit 0 of general flags is 1
> +        MinFixed,         // Range is fixed
> +        MaxFixed,         // Range is fixed
> +        PosDecode,        // PosDecode
> +        0x0000,           // Granularity (FIX9 - Patched by ACPI Platform Driver
> during POST)
> +        0x0000,           // Min         (FIX9 - Patched by ACPI Platform Driver during
> POST)
> +        0x0000,           // Max         (FIX9 - Patched by ACPI Platform Driver during
> POST)
> +        0x0000,           // Translation
> +        0x0001,           // Range Length = Max-Min+1 (FIX9 - Patched by ACPI
> Platform Driver during POST)
> +              ,
> +              ,
> +        FIX9              // DescriptorName populated so iASL outputs offset for it in
> a .h file
> +      )
> +  })
> +
> +    // Current resource template return
> +  Method(_CRS, 0x0, NotSerialized)
> +  {
> +    Return(UNRS)
> +  }
> diff --git a/Platform/Intel/WhitleyOpenBoardPkg/PlatformPkg.dsc
> b/Platform/Intel/WhitleyOpenBoardPkg/PlatformPkg.dsc
> index 42680254d1..9c2b8a1048 100644
> --- a/Platform/Intel/WhitleyOpenBoardPkg/PlatformPkg.dsc
> +++ b/Platform/Intel/WhitleyOpenBoardPkg/PlatformPkg.dsc
> @@ -805,6 +805,7 @@
> 
>    $(RP_PKG)/Features/Pci/Dxe/PciPlatform/PciPlatform.inf
> 
> +  $(RP_PKG)/Features/Acpi/AcpiTables/AcpiTables10nm.inf
>    $(RP_PKG)/Features/AcpiVtd/AcpiVtd.inf
> 
>    $(PLATFORM_PKG)/Acpi/AcpiSmm/AcpiSmm.inf
> diff --git a/Platform/Intel/WhitleyOpenBoardPkg/PlatformPkg.fdf
> b/Platform/Intel/WhitleyOpenBoardPkg/PlatformPkg.fdf
> index 45460570d9..ca3514b8ba 100644
> --- a/Platform/Intel/WhitleyOpenBoardPkg/PlatformPkg.fdf
> +++ b/Platform/Intel/WhitleyOpenBoardPkg/PlatformPkg.fdf
> @@ -671,6 +671,7 @@ SET
> gMinPlatformPkgTokenSpaceGuid.PcdFlashAreaSize         = 0x01000000
>    INF  BoardModulePkg/LegacySioDxe/LegacySioDxe.inf
>    INF  MdeModulePkg/Universal/Console/TerminalDxe/TerminalDxe.inf
> 
> +  INF  RuleOverride = ACPITABLE
> WhitleyOpenBoardPkg/Features/Acpi/AcpiTables/AcpiTables10nm.inf
>    INF  WhitleyOpenBoardPkg/Features/AcpiVtd/AcpiVtd.inf
>    INF  MinPlatformPkg/Acpi/AcpiSmm/AcpiSmm.inf
> 
> --
> 2.27.0.windows.1


^ permalink raw reply	[flat|nested] 17+ messages in thread

end of thread, other threads:[~2022-02-09  3:21 UTC | newest]

Thread overview: 17+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2022-02-07 19:02 [edk2-devel][edk2-platforms][PATCH V1 0/8] Whitley ACPI Tables Oram, Isaac W
2022-02-07 19:02 ` [edk2-devel][edk2-platforms][PATCH V1 1/8] MinPlatformPkg/AmlGenOffset: Update for python 3 Oram, Isaac W
2022-02-09  3:20   ` Nate DeSimone
2022-02-07 19:02 ` [edk2-devel][edk2-platforms][PATCH V1 2/8] WhitleyOpenBoardPkg/AcpiTables: Add ACPI Table definitions Oram, Isaac W
2022-02-09  3:20   ` Nate DeSimone
2022-02-07 19:02 ` [edk2-devel][edk2-platforms][PATCH V1 3/8] WhitleyOpenBoardPkg/AcpiTables: South Cluster ASL Oram, Isaac W
2022-02-09  3:21   ` Nate DeSimone
2022-02-07 19:02 ` [edk2-devel][edk2-platforms][PATCH V1 4/8] WhitleyOpenBoardPkg/AcpiTables10nm: Add Static ACPI tables Oram, Isaac W
2022-02-09  3:21   ` Nate DeSimone
2022-02-07 19:02 ` [edk2-devel][edk2-platforms][PATCH V1 5/8] WhitleyOpenBoardPkg/AcpiTables10nm: Add DSDT ACPI table Oram, Isaac W
2022-02-09  3:21   ` Nate DeSimone
2022-02-07 19:02 ` [edk2-devel][edk2-platforms][PATCH V1 6/8] WhitleyOpenBoardPkg/Build: Enable includable build options Oram, Isaac W
2022-02-09  3:21   ` Nate DeSimone
2022-02-07 19:02 ` [edk2-devel][edk2-platforms][PATCH V1 7/8] WhitleyOpenBoardPkg/WilsonCityRvp: Generate AML offset table Oram, Isaac W
2022-02-09  3:21   ` Nate DeSimone
2022-02-07 19:02 ` [edk2-devel][edk2-platforms][PATCH V1 8/8] WhitleyOpenBoardPkg/StaticSkuDataDxe: Add open source driver Oram, Isaac W
2022-02-09  3:20   ` Nate DeSimone

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox