From: "Sami Mujawar" <sami.mujawar@arm.com>
To: <devel@edk2.groups.io>
Cc: Sami Mujawar <sami.mujawar@arm.com>, <Alexei.Fedorov@arm.com>,
<pierre.gondois@arm.com>, <ard.biesheuvel@arm.com>,
<leif@nuviainc.com>, <Matteo.Carlini@arm.com>,
<Ben.Adderson@arm.com>, <Hemendra.Dassanayake@arm.com>,
<Samer.El-Haj-Mahmoud@arm.com>, <nd@arm.com>
Subject: [PATCH v1 00/30] Add Dynamic AML generation support
Date: Wed, 12 Aug 2020 16:22:06 +0100 [thread overview]
Message-ID: <20200812152236.31164-1-sami.mujawar@arm.com> (raw)
ACPI tables are categorised as Data tables (e.g. MADT, GTDT, etc.) or
Definition Block tables (DSDT or SSDT). The Dynamic Tables Framework
already supports generation of Data tables. Definition Block tables
are written in ACPI Source Language (ASL) and compiled to ACPI Machine
Language (AML). This AML bytecode is processed by the AML interpreter
that runs as part of the Operating System (OS).
AML has a complex grammar, making runtime modifications on an AML byte
stream difficult. Dynamic AML is a solution to simplify the generation
of Definition Block tables.
Dynamic AML introduces an AmlLib library that implements an AML parser
that parses the AML bytecode and represent it as a tree data structure.
This allows to easily modify the AML code by updating/adding/removing
the tree nodes. The modified AML tree is then serialised to a buffer
for installing as a Definition block table.
AmlLib Library provides a rich set of APIs to
- parse AML bytecode to generate an AML tree.
- search, update, traverse and serialise an AML tree.
- enumerate, add, delete nodes of an AML tree.
- generate small segments of AML code in the form of
AML nodes that can be used to form a branch/tree.
Dynamic AML introduces the following techniques:
* AML Fixup
* AML Codegen
* AML Fixup + Codegen
AML Fixup is a technique that involves run-time fixup of sections
of an AML template bytecode. An ASL template file is compiled to
AML bytecode at build time. At runtime, this AML template bytecode
is parsed using the AmlLib library APIs and is represented as an
AML tree. The AML tree nodes can be searched to locate a node that
needs updating and can be fixed up. The AML tree is then serialised
to a buffer representing the Definition Block table.
AML Codegen employs generating small segments of AML code and
populating a small AML tree that can be serialised.
AML Fixup + Codegen is a combination of Fixup and Codegen. Here the
AML template is parsed to generate an AML Tree. Sections of AML code
can be fixed-up as well as new AML nodes/branches can be attached to
the AML tree using the AML Codegen APIs.
A SSDT Serial Port generator has also been introduced to generate
definition block tables describing the serial ports on a platform.
A SSDT Serial Port Fixup library has been provided to generate
description of a serial port in a Definition Block table. This
library is shared by SPCR, DBG2 and the SSDT Serial Port generator
to describe the respective serial ports.
The SPCR and DBG2 table generators have also been updated to
generate the SSDT serial port tables describing the respective
serial ports.
The changes can be seen at:
https://github.com/samimujawar/edk2/tree/675_dynamic_aml_v1
Pierre Gondois (27):
DynamicTablesPkg: AmlLib definitions
DynamicTablesPkg: AML grammar definition
DynamicTablesPkg: AML node definitions
DynamicTablesPkg: AML tree interface
DynamicTablesPkg: AML tree enumerator
DynamicTablesPkg: AML tree traversal
DynamicTablesPkg: AML tree iterator
DynamicTablesPkg: AML tree/node cloning
DynamicTablesPkg: AML utility interfaces
DynamicTablesPkg: AML and ASL string helper
DynamicTablesPkg: AML serialise interface
DynamicTablesPkg: AML debug logging
DynamicTablesPkg: AML ACPI Namespace interface
DynamicTablesPkg: AML Parser
DynamicTablesPkg: AML resource data helper
DynamicTablesPkg: AML resource data parser
DynamicTablesPkg: AML Method parser
DynamicTablesPkg: AML Field list parser
DynamicTablesPkg: AML Codegen
DynamicTablesPkg: AML Resource Data Codegen
DynamicTablesPkg: AML Core interface
DynamicTablesPkg: AmlLib APIs
DynamicTablesPkg: Dynamic AML: Add AmlLib library
DynamicTablesPkg: SSDT Serial Port Fixup library
DynamicTablesPkg: SSDT Serial Port generator
DynamicTablesPkg: Add SSDT Serial port for SPCR
DynamicTablesPkg: Add SSDT Serial port for DBG2
Sami Mujawar (3):
DynamicTablesPkg: Introduction to Dynamic AML
DynamicTablesPkg: AML stream interface
DynamicTablesPkg: Add AsciiFromHex helper function
DynamicTablesPkg/DynamicTables.dsc.inc | 8 +
DynamicTablesPkg/DynamicTablesPkg.ci.yaml | 9 +-
DynamicTablesPkg/DynamicTablesPkg.dec | 8 +-
DynamicTablesPkg/DynamicTablesPkg.dsc | 4 +-
DynamicTablesPkg/Include/AcpiTableGenerator.h | 7 +-
DynamicTablesPkg/Include/ArmNameSpaceObjects.h | 9 +-
DynamicTablesPkg/Include/Library/AmlLib/AmlLib.h | 631 ++++++++
DynamicTablesPkg/Include/Library/SsdtSerialPortFixupLib.h | 68 +
DynamicTablesPkg/Include/Library/TableHelperLib.h | 15 +-
DynamicTablesPkg/Library/Acpi/Arm/AcpiDbg2LibArm/AcpiDbg2LibArm.inf | 3 +-
DynamicTablesPkg/Library/Acpi/Arm/AcpiDbg2LibArm/Dbg2Generator.c | 228 ++-
DynamicTablesPkg/Library/Acpi/Arm/AcpiSpcrLibArm/AcpiSpcrLibArm.inf | 3 +-
DynamicTablesPkg/Library/Acpi/Arm/AcpiSpcrLibArm/SpcrGenerator.c | 219 ++-
DynamicTablesPkg/Library/Acpi/Arm/AcpiSsdtSerialPortLibArm/SsdtSerialPortGenerator.c | 367 +++++
DynamicTablesPkg/Library/Acpi/Arm/AcpiSsdtSerialPortLibArm/SsdtSerialPortLibArm.inf | 33 +
DynamicTablesPkg/Library/Common/AmlLib/AmlCoreInterface.h | 767 ++++++++++
DynamicTablesPkg/Library/Common/AmlLib/AmlDbgPrint/AmlDbgPrint.c | 546 +++++++
DynamicTablesPkg/Library/Common/AmlLib/AmlDbgPrint/AmlDbgPrint.h | 154 ++
DynamicTablesPkg/Library/Common/AmlLib/AmlDefines.h | 188 +++
DynamicTablesPkg/Library/Common/AmlLib/AmlEncoding/Aml.c | 805 +++++++++++
DynamicTablesPkg/Library/Common/AmlLib/AmlEncoding/Aml.h | 330 +++++
DynamicTablesPkg/Library/Common/AmlLib/AmlInclude.h | 18 +
DynamicTablesPkg/Library/Common/AmlLib/AmlLib.inf | 76 +
DynamicTablesPkg/Library/Common/AmlLib/AmlNodeDefines.h | 183 +++
DynamicTablesPkg/Library/Common/AmlLib/Api/AmlApi.c | 382 +++++
DynamicTablesPkg/Library/Common/AmlLib/Api/AmlApiHelper.c | 219 +++
DynamicTablesPkg/Library/Common/AmlLib/Api/AmlApiHelper.h | 93 ++
DynamicTablesPkg/Library/Common/AmlLib/Api/AmlResourceDataApi.c | 320 +++++
DynamicTablesPkg/Library/Common/AmlLib/CodeGen/AmlCodeGen.c | 701 +++++++++
DynamicTablesPkg/Library/Common/AmlLib/CodeGen/AmlResourceDataCodeGen.c | 256 ++++
DynamicTablesPkg/Library/Common/AmlLib/CodeGen/AmlResourceDataCodeGen.h | 59 +
DynamicTablesPkg/Library/Common/AmlLib/NameSpace/AmlNameSpace.c | 1501 ++++++++++++++++++++
DynamicTablesPkg/Library/Common/AmlLib/NameSpace/AmlNameSpace.h | 74 +
DynamicTablesPkg/Library/Common/AmlLib/Parser/AmlFieldListParser.c | 375 +++++
DynamicTablesPkg/Library/Common/AmlLib/Parser/AmlFieldListParser.h | 77 +
DynamicTablesPkg/Library/Common/AmlLib/Parser/AmlMethodParser.c | 1458 +++++++++++++++++++
DynamicTablesPkg/Library/Common/AmlLib/Parser/AmlMethodParser.h | 188 +++
DynamicTablesPkg/Library/Common/AmlLib/Parser/AmlParser.c | 1448 +++++++++++++++++++
DynamicTablesPkg/Library/Common/AmlLib/Parser/AmlParser.h | 72 +
DynamicTablesPkg/Library/Common/AmlLib/Parser/AmlResourceDataParser.c | 328 +++++
DynamicTablesPkg/Library/Common/AmlLib/Parser/AmlResourceDataParser.h | 71 +
DynamicTablesPkg/Library/Common/AmlLib/ResourceData/AmlResourceData.c | 103 ++
DynamicTablesPkg/Library/Common/AmlLib/ResourceData/AmlResourceData.h | 174 +++
DynamicTablesPkg/Library/Common/AmlLib/Serialize/AmlSerialize.c | 324 +++++
DynamicTablesPkg/Library/Common/AmlLib/Stream/AmlStream.c | 665 +++++++++
DynamicTablesPkg/Library/Common/AmlLib/Stream/AmlStream.h | 451 ++++++
DynamicTablesPkg/Library/Common/AmlLib/String/AmlString.c | 1022 +++++++++++++
DynamicTablesPkg/Library/Common/AmlLib/String/AmlString.h | 401 ++++++
DynamicTablesPkg/Library/Common/AmlLib/Tree/AmlClone.c | 205 +++
DynamicTablesPkg/Library/Common/AmlLib/Tree/AmlNode.c | 673 +++++++++
DynamicTablesPkg/Library/Common/AmlLib/Tree/AmlNode.h | 212 +++
DynamicTablesPkg/Library/Common/AmlLib/Tree/AmlNodeInterface.c | 566 ++++++++
DynamicTablesPkg/Library/Common/AmlLib/Tree/AmlTree.c | 1047 ++++++++++++++
DynamicTablesPkg/Library/Common/AmlLib/Tree/AmlTree.h | 127 ++
DynamicTablesPkg/Library/Common/AmlLib/Tree/AmlTreeEnumerator.c | 98 ++
DynamicTablesPkg/Library/Common/AmlLib/Tree/AmlTreeIterator.c | 353 +++++
DynamicTablesPkg/Library/Common/AmlLib/Tree/AmlTreeIterator.h | 220 +++
DynamicTablesPkg/Library/Common/AmlLib/Tree/AmlTreeTraversal.c | 548 +++++++
DynamicTablesPkg/Library/Common/AmlLib/Tree/AmlTreeTraversal.h | 138 ++
DynamicTablesPkg/Library/Common/AmlLib/Utils/AmlUtility.c | 906 ++++++++++++
DynamicTablesPkg/Library/Common/AmlLib/Utils/AmlUtility.h | 95 ++
DynamicTablesPkg/Library/Common/SsdtSerialPortFixupLib/SsdtSerialPortFixupLib.c | 524 +++++++
DynamicTablesPkg/Library/Common/SsdtSerialPortFixupLib/SsdtSerialPortFixupLib.inf | 30 +
DynamicTablesPkg/Library/Common/SsdtSerialPortFixupLib/SsdtSerialPortTemplate.asl | 60 +
DynamicTablesPkg/Library/Common/TableHelperLib/TableHelper.c | 30 +-
DynamicTablesPkg/Readme.md | 128 +-
66 files changed, 21247 insertions(+), 154 deletions(-)
create mode 100644 DynamicTablesPkg/Include/Library/AmlLib/AmlLib.h
create mode 100644 DynamicTablesPkg/Include/Library/SsdtSerialPortFixupLib.h
create mode 100644 DynamicTablesPkg/Library/Acpi/Arm/AcpiSsdtSerialPortLibArm/SsdtSerialPortGenerator.c
create mode 100644 DynamicTablesPkg/Library/Acpi/Arm/AcpiSsdtSerialPortLibArm/SsdtSerialPortLibArm.inf
create mode 100644 DynamicTablesPkg/Library/Common/AmlLib/AmlCoreInterface.h
create mode 100644 DynamicTablesPkg/Library/Common/AmlLib/AmlDbgPrint/AmlDbgPrint.c
create mode 100644 DynamicTablesPkg/Library/Common/AmlLib/AmlDbgPrint/AmlDbgPrint.h
create mode 100644 DynamicTablesPkg/Library/Common/AmlLib/AmlDefines.h
create mode 100644 DynamicTablesPkg/Library/Common/AmlLib/AmlEncoding/Aml.c
create mode 100644 DynamicTablesPkg/Library/Common/AmlLib/AmlEncoding/Aml.h
create mode 100644 DynamicTablesPkg/Library/Common/AmlLib/AmlInclude.h
create mode 100644 DynamicTablesPkg/Library/Common/AmlLib/AmlLib.inf
create mode 100644 DynamicTablesPkg/Library/Common/AmlLib/AmlNodeDefines.h
create mode 100644 DynamicTablesPkg/Library/Common/AmlLib/Api/AmlApi.c
create mode 100644 DynamicTablesPkg/Library/Common/AmlLib/Api/AmlApiHelper.c
create mode 100644 DynamicTablesPkg/Library/Common/AmlLib/Api/AmlApiHelper.h
create mode 100644 DynamicTablesPkg/Library/Common/AmlLib/Api/AmlResourceDataApi.c
create mode 100644 DynamicTablesPkg/Library/Common/AmlLib/CodeGen/AmlCodeGen.c
create mode 100644 DynamicTablesPkg/Library/Common/AmlLib/CodeGen/AmlResourceDataCodeGen.c
create mode 100644 DynamicTablesPkg/Library/Common/AmlLib/CodeGen/AmlResourceDataCodeGen.h
create mode 100644 DynamicTablesPkg/Library/Common/AmlLib/NameSpace/AmlNameSpace.c
create mode 100644 DynamicTablesPkg/Library/Common/AmlLib/NameSpace/AmlNameSpace.h
create mode 100644 DynamicTablesPkg/Library/Common/AmlLib/Parser/AmlFieldListParser.c
create mode 100644 DynamicTablesPkg/Library/Common/AmlLib/Parser/AmlFieldListParser.h
create mode 100644 DynamicTablesPkg/Library/Common/AmlLib/Parser/AmlMethodParser.c
create mode 100644 DynamicTablesPkg/Library/Common/AmlLib/Parser/AmlMethodParser.h
create mode 100644 DynamicTablesPkg/Library/Common/AmlLib/Parser/AmlParser.c
create mode 100644 DynamicTablesPkg/Library/Common/AmlLib/Parser/AmlParser.h
create mode 100644 DynamicTablesPkg/Library/Common/AmlLib/Parser/AmlResourceDataParser.c
create mode 100644 DynamicTablesPkg/Library/Common/AmlLib/Parser/AmlResourceDataParser.h
create mode 100644 DynamicTablesPkg/Library/Common/AmlLib/ResourceData/AmlResourceData.c
create mode 100644 DynamicTablesPkg/Library/Common/AmlLib/ResourceData/AmlResourceData.h
create mode 100644 DynamicTablesPkg/Library/Common/AmlLib/Serialize/AmlSerialize.c
create mode 100644 DynamicTablesPkg/Library/Common/AmlLib/Stream/AmlStream.c
create mode 100644 DynamicTablesPkg/Library/Common/AmlLib/Stream/AmlStream.h
create mode 100644 DynamicTablesPkg/Library/Common/AmlLib/String/AmlString.c
create mode 100644 DynamicTablesPkg/Library/Common/AmlLib/String/AmlString.h
create mode 100644 DynamicTablesPkg/Library/Common/AmlLib/Tree/AmlClone.c
create mode 100644 DynamicTablesPkg/Library/Common/AmlLib/Tree/AmlNode.c
create mode 100644 DynamicTablesPkg/Library/Common/AmlLib/Tree/AmlNode.h
create mode 100644 DynamicTablesPkg/Library/Common/AmlLib/Tree/AmlNodeInterface.c
create mode 100644 DynamicTablesPkg/Library/Common/AmlLib/Tree/AmlTree.c
create mode 100644 DynamicTablesPkg/Library/Common/AmlLib/Tree/AmlTree.h
create mode 100644 DynamicTablesPkg/Library/Common/AmlLib/Tree/AmlTreeEnumerator.c
create mode 100644 DynamicTablesPkg/Library/Common/AmlLib/Tree/AmlTreeIterator.c
create mode 100644 DynamicTablesPkg/Library/Common/AmlLib/Tree/AmlTreeIterator.h
create mode 100644 DynamicTablesPkg/Library/Common/AmlLib/Tree/AmlTreeTraversal.c
create mode 100644 DynamicTablesPkg/Library/Common/AmlLib/Tree/AmlTreeTraversal.h
create mode 100644 DynamicTablesPkg/Library/Common/AmlLib/Utils/AmlUtility.c
create mode 100644 DynamicTablesPkg/Library/Common/AmlLib/Utils/AmlUtility.h
create mode 100644 DynamicTablesPkg/Library/Common/SsdtSerialPortFixupLib/SsdtSerialPortFixupLib.c
create mode 100644 DynamicTablesPkg/Library/Common/SsdtSerialPortFixupLib/SsdtSerialPortFixupLib.inf
create mode 100644 DynamicTablesPkg/Library/Common/SsdtSerialPortFixupLib/SsdtSerialPortTemplate.asl
--
'Guid(CE165669-3EF3-493F-B85D-6190EE5B9759)'
next reply other threads:[~2020-08-12 15:22 UTC|newest]
Thread overview: 32+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-08-12 15:22 Sami Mujawar [this message]
2020-08-12 15:22 ` [PATCH v1 01/30] DynamicTablesPkg: Introduction to Dynamic AML Sami Mujawar
2020-08-12 15:22 ` [PATCH v1 02/30] DynamicTablesPkg: AmlLib definitions Sami Mujawar
2020-08-12 15:22 ` [PATCH v1 03/30] DynamicTablesPkg: AML grammar definition Sami Mujawar
2020-08-12 15:22 ` [PATCH v1 04/30] DynamicTablesPkg: AML node definitions Sami Mujawar
2020-08-12 15:22 ` [PATCH v1 05/30] DynamicTablesPkg: AML tree interface Sami Mujawar
2020-08-12 15:22 ` [PATCH v1 06/30] DynamicTablesPkg: AML tree enumerator Sami Mujawar
2020-08-12 15:22 ` [PATCH v1 07/30] DynamicTablesPkg: AML tree traversal Sami Mujawar
2020-08-12 15:22 ` [PATCH v1 08/30] DynamicTablesPkg: AML tree iterator Sami Mujawar
2020-08-12 15:22 ` [PATCH v1 09/30] DynamicTablesPkg: AML tree/node cloning Sami Mujawar
2020-08-12 15:22 ` [PATCH v1 10/30] DynamicTablesPkg: AML utility interfaces Sami Mujawar
2020-08-12 15:22 ` [PATCH v1 11/30] DynamicTablesPkg: AML and ASL string helper Sami Mujawar
2020-08-12 15:22 ` [PATCH v1 12/30] DynamicTablesPkg: AML stream interface Sami Mujawar
2020-08-12 15:22 ` [PATCH v1 13/30] DynamicTablesPkg: AML serialise interface Sami Mujawar
2020-08-12 15:22 ` [PATCH v1 14/30] DynamicTablesPkg: AML debug logging Sami Mujawar
2020-08-12 15:22 ` [PATCH v1 15/30] DynamicTablesPkg: AML ACPI Namespace interface Sami Mujawar
2020-08-12 15:22 ` [PATCH v1 16/30] DynamicTablesPkg: AML Parser Sami Mujawar
2020-08-12 15:22 ` [PATCH v1 17/30] DynamicTablesPkg: AML resource data helper Sami Mujawar
2020-08-12 15:22 ` [PATCH v1 18/30] DynamicTablesPkg: AML resource data parser Sami Mujawar
2020-08-12 15:22 ` [PATCH v1 19/30] DynamicTablesPkg: AML Method parser Sami Mujawar
2020-08-12 15:22 ` [PATCH v1 20/30] DynamicTablesPkg: AML Field list parser Sami Mujawar
2020-08-12 15:22 ` [PATCH v1 21/30] DynamicTablesPkg: AML Codegen Sami Mujawar
2020-08-12 15:22 ` [PATCH v1 22/30] DynamicTablesPkg: AML Resource Data Codegen Sami Mujawar
2020-08-12 15:22 ` [PATCH v1 23/30] DynamicTablesPkg: AML Core interface Sami Mujawar
2020-08-12 15:22 ` [PATCH v1 24/30] DynamicTablesPkg: AmlLib APIs Sami Mujawar
2020-08-12 15:22 ` [PATCH v1 25/30] DynamicTablesPkg: Dynamic AML: Add AmlLib library Sami Mujawar
2020-08-12 15:22 ` [PATCH v1 26/30] DynamicTablesPkg: Add AsciiFromHex helper function Sami Mujawar
2020-08-12 15:22 ` [PATCH v1 27/30] DynamicTablesPkg: SSDT Serial Port Fixup library Sami Mujawar
2020-08-12 15:22 ` [PATCH v1 28/30] DynamicTablesPkg: SSDT Serial Port generator Sami Mujawar
2020-08-12 15:22 ` [PATCH v1 29/30] DynamicTablesPkg: Add SSDT Serial port for SPCR Sami Mujawar
2020-08-12 15:22 ` [PATCH v1 30/30] DynamicTablesPkg: Add SSDT Serial port for DBG2 Sami Mujawar
2020-08-13 15:16 ` [edk2-devel] [PATCH v1 00/30] Add Dynamic AML generation support Alexei Fedorov
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-list from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20200812152236.31164-1-sami.mujawar@arm.com \
--to=devel@edk2.groups.io \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox