--- /dev/null
+Dynamic Tables Framework\r
+------------------------\r
+\r
+Dynamic Tables Framework provides mechanisms to reduce the amount\r
+of effort required in porting firmware to new platforms. The aim is\r
+to provide an implementation capable of generating the firmware\r
+tables from an external source. This is potentially a management\r
+node, either local or remote, or, where suitable, a file that might\r
+be generated from the system construction. This initial release\r
+does not fully implement that - the configuration is held in local\r
+UEFI modules.\r
+\r
+Feature Summary\r
+---------------\r
+The dynamic tables framework is designed to generate standardised\r
+firmware tables that describe the hardware information at\r
+run-time. A goal of standardised firmware is to have a common\r
+firmware for a platform capable of booting both Windows and Linux\r
+operating systems.\r
+\r
+Traditionally the firmware tables are handcrafted using ACPI\r
+Source Language (ASL), Table Definition Language (TDL) and\r
+C-code. This approach can be error prone and involves time\r
+consuming debugging. In addition, it may be desirable to configure\r
+platform hardware at runtime such as: configuring the number of\r
+cores available for use by the OS, or turning SoC features ON or\r
+OFF.\r
+\r
+The dynamic tables framework simplifies this by providing a set\r
+of standard table generators, that are implemented as libraries.\r
+These generators query a platform specific component, the\r
+'Configuration Manager', to collate the information required\r
+for generating the tables at run-time.\r
+\r
+The framework also provides the ability to implement custom/OEM\r
+generators; thereby facilitating support for custom tables. The\r
+custom generators can also utilize the existing standard generators\r
+and override any functionality if needed.\r
+\r
+The framework currently implements a set of standard ACPI table\r
+generators for ARM architecture, that can generate Server Base Boot\r
+Requirement (SBBR) compliant tables. Although, the set of standard\r
+generators implement the functionality required for ARM architecture;\r
+the framework is extensible, and support for other architectures can\r
+be added easily.\r
+\r
+The framework currently supports the following table generators for ARM:\r
+* DBG2 - Debug Port Table 2\r
+* DSDT - Differentiated system description table. This is essentially\r
+ a RAW table generator.\r
+* FADT - Fixed ACPI Description Table\r
+* GTDT - Generic Timer Description Table\r
+* IORT - IO Remapping Table\r
+* MADT - Multiple APIC Description Table\r
+* MCFG - PCI Express memory mapped configuration space base address\r
+ Description Table\r
+* SPCR - Serial Port Console Redirection Table\r
+* SSDT - Secondary System Description Table. This is essentially\r
+ a RAW table generator.\r
+\r
+Roadmap\r
+-------\r
+The current implementation of the Configuration Manager populates the\r
+platform information statically as a C structure. Further enhancements\r
+to introduce runtime loading of platform information from a platform\r
+information file is planned.\r
+\r
+Also support for generating SMBIOS tables is planned and will be added\r
+subsequently.\r
+\r
+Related Modules\r
+---------------\r
+\r
+### ACPICA iASL compiler\r
+The RAW table generator, used to process the DSDT/SSDT files depends on\r
+the iASL compiler to convert the DSDT/SSDT ASL files to a C array containing\r
+the hex AML code. The "-tc" option of the iASL compiler has been enhanced to\r
+support generation of an AML hex file (C header) with a unique symbol name\r
+so that it is suitable for inclusion from a C source file.\r
+\r
+Related Links\r
+--------------\r
+\r
+<https://github.com/acpica/acpica.git>\r
+\r
+\r
+Supported Platforms\r
+-------------------\r
+1. Juno\r
+2. FVP Models\r
+\r
+Build Instructions\r
+------------------\r
+1. Set path for the iASL compiler with support for generating a C header\r
+ file as output.\r
+\r
+2. Set PACKAGES_PATH to point to the locations of the following repositories:\r
+\r
+Example:\r
+\r
+> set PACKAGES_PATH=%CD%\edk2;%CD%\edk2-platforms;\r
+\r
+ or\r
+\r
+> export PACKAGES_PATH=$PWD/edk2:$PWD/edk2-platforms\r
+\r
+3. To enable Dynamic tables framework the *'DYNAMIC_TABLES_FRAMEWORK'*\r
+option must be defined. This can be passed as a command line\r
+parameter to the edk2 build system.\r
+\r
+Example:\r
+\r
+>build -a AARCH64 -p Platform\ARM\JunoPkg\ArmJuno.dsc\r
+ -t GCC5 **-D DYNAMIC_TABLES_FRAMEWORK**\r
+\r
+or\r
+\r
+>build -a AARCH64 -p Platform\ARM\VExpressPkg\ArmVExpress-FVP-AArch64.dsc\r
+ -t GCC5 **-D DYNAMIC_TABLES_FRAMEWORK**\r
+\r
+Prerequisites\r
+-------------\r
+ACPICA iASL compiler with the enhanced "-tc" option to support generation of\r
+AML hex (C header) files with unique symbol names.\r
+\r
+A patch *'[iASL: Enhance the -tc option (create AML hex file in C)](https://github.com/acpica/acpica/commit/f9a88a4c1cd020b6a5475d63b29626852a0b5f37)'*, dated 16 March 2018 (2018-03-16),\r
+to enable this support has been integrated to the ACPICA source repository.\r
+\r
+Ensure that the iASL compiler used for building *Dynamic Tables Framework* has this feature enabled.\r
+\r
+This feature was made available in the *ACPICA Compiler update\r
+[Version 20180508](https://www.acpica.org/node/156)*, dated 8 May 2018 (2018-05-08).\r
+\r
+Documentation\r
+-------------\r
+\r
+Refer to the following presentation from *UEFI Plugfest Seattle 2018*:\r
+\r
+[Dynamic Tables Framework: A Step Towards Automatic Generation of Advanced Configuration and Power Interface (ACPI) & System Management BIOS (SMBIOS) Tables – Sami Mujawar (Arm).](http://www.uefi.org/sites/default/files/resources/Arm_Dynamic%20Tables%20Framework%20A%20Step%20Towards%20Automatic%20Generation%20of%20Advanced%20Configuration%20and%20Power%20Interface%20%28ACPI%29%20%26%20System%20Management%20BIOS%20%28SMBIOS%29%20Tables%20_0.pdf)\r