summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSami Mujawar <sami.mujawar@arm.com>2018-12-15 11:52:30 +0000
committerSami Mujawar <sami.mujawar@arm.com>2019-02-19 10:37:29 +0000
commit90c1ba92ef2fa29b0d7107b8b1c7a66bc4a47633 (patch)
tree340aef703669d8e98a8b6b44c388f979b4143176
parentdacba2b271262cea833e85ba8e25dc1f208044c5 (diff)
downloadedk2-90c1ba92ef2fa29b0d7107b8b1c7a66bc4a47633.tar.gz
edk2-90c1ba92ef2fa29b0d7107b8b1c7a66bc4a47633.tar.bz2
edk2-90c1ba92ef2fa29b0d7107b8b1c7a66bc4a47633.zip
DynamicTablesPkg: Table Generator definition
A Table generator is a component that implements the logic for building a firmware table. This is typically implemented as a library and registers itself with a table factory. Table generators are further classified based on type of table it generates, a namespace that signifies if the implementation is standard or an OEM specific implementation and a table Id. This patch introduces the definitions used for describing a table generator. Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Sami Mujawar <sami.mujawar@arm.com> Reviewed-by: Alexei Fedorov <alexei.fedorov@arm.com>
-rw-r--r--DynamicTablesPkg/DynamicTablesPkg.dec24
-rw-r--r--DynamicTablesPkg/Include/TableGenerator.h252
2 files changed, 276 insertions, 0 deletions
diff --git a/DynamicTablesPkg/DynamicTablesPkg.dec b/DynamicTablesPkg/DynamicTablesPkg.dec
new file mode 100644
index 0000000000..b1a6c64948
--- /dev/null
+++ b/DynamicTablesPkg/DynamicTablesPkg.dec
@@ -0,0 +1,24 @@
+## @file
+# dec file for Dynamic Tables Framework.
+#
+# Copyright (c) 2017 - 2018, ARM Limited. All rights reserved.<BR>
+#
+# This program and the accompanying materials are licensed and made available under
+# the terms and conditions of the BSD License that accompanies this distribution.
+# The full text of the license may be found at
+# http://opensource.org/licenses/bsd-license.php.
+#
+# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+#
+##
+
+[Defines]
+ DEC_SPECIFICATION = 0x00010005
+ PACKAGE_NAME = DynamicTablesPkg
+ PACKAGE_GUID = 188EB346-8ABA-460E-A105-0F9D76F7324A
+ PACKAGE_VERSION = 1.0
+
+[Includes]
+ Include
+
diff --git a/DynamicTablesPkg/Include/TableGenerator.h b/DynamicTablesPkg/Include/TableGenerator.h
new file mode 100644
index 0000000000..ea99608568
--- /dev/null
+++ b/DynamicTablesPkg/Include/TableGenerator.h
@@ -0,0 +1,252 @@
+/** @file
+
+ Copyright (c) 2017, ARM Limited. All rights reserved.
+
+ This program and the accompanying materials
+ are licensed and made available under the terms and conditions of the BSD License
+ which accompanies this distribution. The full text of the license may be found at
+ http://opensource.org/licenses/bsd-license.php
+
+ THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+ @par Glossary:
+ - ACPI - Advanced Configuration and Power Interface
+ - SMBIOS - System Management BIOS
+ - DT - Device Tree
+**/
+
+#ifndef TABLE_GENERATOR_H_
+#define TABLE_GENERATOR_H_
+
+/** The TABLE_GENERATOR_ID type describes the Table Generator ID
+
+ Table Generator ID
+
+_______________________________________________________________________________
+| 31 | 30 |29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17| 16|
+-------------------------------------------------------------------------------
+|TNSID| 0 | TT | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0| 0|
+_______________________________________________________________________________
+_______________________________________________________________________________
+|15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0|
+-------------------------------------------------------------------------------
+| Table ID |
+_______________________________________________________________________________
+
+ Bit [31] - Table NameSpace ID (TNSID)
+ 0 - Standard
+ 1 - Custom/OEM
+
+ Bit [30] - Reserved, Must be Zero
+
+ Bit [29:28] - Table Type (TT)
+ 0 - ACPI Table
+ 1 - SMBIOS Table
+ 2 - DT (Device Tree) Table
+ 3 - Reserved (INVALID)
+
+ Bit [27:16] - Reserved, Must Be Zero
+
+ Bit [15:0] - Table ID
+
+ Standard ACPI Table IDs:
+ 0 - Reserved
+ 1 - RAW
+ 2 - FADT
+ 3 - DSDT
+ 4 - SSDT
+ 5 - MADT
+ 6 - GTDT
+ 7 - DBG2
+ 8 - SPCR
+ 9 - MCFG
+
+ Standard SMBIOS Table IDs:
+ 0 - Reserved
+ 1 - RAW
+ 2 - Table Type00
+ 3 - Table Type01
+ 4 - Table Type02
+ 5 - Table Type03
+ 6 - Table Type04
+ 7 - Table Type05
+ 8 - Table Type06
+ 9 - Table Type07
+ 10 - Table Type08
+ 11 - Table Type09
+ 12 - Table Type10
+ 13 - Table Type11
+ 14 - Table Type12
+ 15 - Table Type13
+ 16 - Table Type14
+ 17 - Table Type15
+ 18 - Table Type16
+ 19 - Table Type17
+ 20 - Table Type18
+ 21 - Table Type19
+ 22 - Table Type20
+ 23 - Table Type21
+ 24 - Table Type22
+ 25 - Table Type23
+ 26 - Table Type24
+ 27 - Table Type25
+ 28 - Table Type26
+ 29 - Table Type27
+ 30 - Table Type28
+ 31 - Table Type29
+ 32 - Table Type30
+ 33 - Table Type31
+ 34 - Table Type32
+ 35 - Table Type33
+ 36 - Table Type34
+ 37 - Table Type35
+ 38 - Table Type36
+ 39 - Table Type37
+ 40 - Table Type38
+ 41 - Table Type39
+ 42 - Table Type40
+ 43 - Table Type41
+ 44 - Table Type42
+ 45-127 - Reserved
+ 128 - Table Type126
+ 129 - Table Type127
+**/
+typedef UINT32 TABLE_GENERATOR_ID;
+
+/** This enum lists the Table Generator Types.
+*/
+typedef enum TableGeneratorType {
+ ETableGeneratorTypeAcpi = 0, ///< ACPI Table Generator Type.
+ ETableGeneratorTypeSmbios, ///< SMBIOS Table Generator Type.
+ ETableGeneratorTypeDt, ///< Device Tree Table Generator Type.
+ ETableGeneratorTypeReserved
+} ETABLE_GENERATOR_TYPE;
+
+/** This enum lists the namespaces for the Table Generators.
+*/
+typedef enum TableGeneratorNameSpace {
+ ETableGeneratorNameSpaceStd = 0, ///< Standard Namespace.
+ ETableGeneratorNameSpaceOem ///< OEM Namespace.
+} ETABLE_GENERATOR_NAMESPACE;
+
+/** A mask for the Table ID bits of TABLE_GENERATOR_ID.
+*/
+#define TABLE_ID_MASK 0xFF
+
+/** A mask for the Namespace ID bits of TABLE_GENERATOR_ID.
+*/
+#define TABLE_NAMESPACEID_MASK (BIT31)
+
+/** A mask for the Table Type bits of TABLE_GENERATOR_ID.
+*/
+#define TABLE_TYPE_MASK (BIT29 | BIT28)
+
+/** Starting bit position for the Table Type bits
+*/
+#define TABLE_TYPE_BIT_SHIFT 28
+
+/** Starting bit position for the Table Namespace ID bit
+*/
+#define TABLE_NAMESPACE_ID_BIT_SHIFT 31
+
+/** This macro returns the Table ID from the TableGeneratorId.
+
+ @param [in] TableGeneratorId The table generator ID.
+
+ @return the Table ID described by the TableGeneratorId.
+**/
+#define GET_TABLE_ID(TableGeneratorId) \
+ ((TableGeneratorId) & TABLE_ID_MASK)
+
+/** This macro returns the Table type from the TableGeneratorId.
+
+ @param [in] TableGeneratorId The table generator ID.
+
+ @return the Table type described by the TableGeneratorId.
+**/
+#define GET_TABLE_TYPE(TableGeneratorId) \
+ (((TableGeneratorId) & TABLE_TYPE_MASK) >> TABLE_TYPE_BIT_SHIFT)
+
+/** This macro returns the Namespace ID from the TableGeneratorId.
+
+ @param [in] TableGeneratorId The table generator ID.
+
+ @return the Namespace described by the TableGeneratorId.
+**/
+#define GET_TABLE_NAMESPACEID(TableGeneratorId) \
+ (((TableGeneratorId) & TABLE_NAMESPACEID_MASK) >> \
+ TABLE_NAMESPACE_ID_BIT_SHIFT)
+
+/** This macro checks if the TableGeneratorId is in the Standard Namespace.
+
+ @param [in] TableGeneratorId The table generator ID.
+
+ @return TRUE if the TableGeneratorId is in the Standard Namespace.
+**/
+#define IS_GENERATOR_NAMESPACE_STD(TableGeneratorId) \
+ ( \
+ GET_TABLE_NAMESPACEID(TableGeneratorId) == \
+ ETableGeneratorNameSpaceStd \
+ )
+
+/** This macro creates a TableGeneratorId
+
+ @param [in] TableType The table type.
+ @param [in] TableNameSpaceId The namespace ID for the table.
+ @param [in] TableId The table ID.
+
+ @return a TableGeneratorId calculated from the inputs.
+**/
+#define CREATE_TABLE_GEN_ID(TableType, TableNameSpaceId, TableId) \
+ ((((TableType) << TABLE_TYPE_BIT_SHIFT) & TABLE_TYPE_MASK) | \
+ (((TableNameSpaceId) << TABLE_NAMESPACE_ID_BIT_SHIFT) & \
+ TABLE_NAMESPACEID_MASK) | ((TableId) & TABLE_ID_MASK))
+
+/** Starting bit position for MAJOR revision
+*/
+#define MAJOR_REVISION_BIT_SHIFT 16
+
+/** A mask for Major revision.
+*/
+#define MAJOR_REVISION_MASK 0xFFFF
+
+/** A mask for Minor revision.
+*/
+#define MINOR_REVISION_MASK 0xFFFF
+
+/** This macro generates a Major.Minor version
+ where the Major and Minor fields are 16 bit.
+
+ @param [in] Major The Major revision.
+ @param [in] Minor The Minor revision.
+
+ @return a 32 bit representation of the type Major.Minor.
+**/
+#define CREATE_REVISION(Major, Minor) \
+ ((((Major) & MAJOR_REVISION_MASK) << MAJOR_REVISION_BIT_SHIFT) | \
+ ((Minor) & MINOR_REVISION_MASK))
+
+/** This macro returns the Major revision
+
+ Extracts Major from the 32 bit representation of the type Major.Minor
+
+ @param [in] Revision The Revision value which is 32 bit.
+
+ @return the Major part of the revision.
+**/
+#define GET_MAJOR_REVISION(Revision) \
+ (((Revision) >> MAJOR_REVISION_BIT_SHIFT) & MAJOR_REVISION_MASK)
+
+/** This macro returns the Minor revision
+
+ Extracts Minor from the 32 bit representation of the type Major.Minor
+
+ @param [in] Revision The Revision value which is 32 bit.
+
+ @return the Minor part of the revision.
+**/
+#define GET_MINOR_REVISION(Revision) ((Revision) & MINOR_REVISION_MASK)
+
+#endif // TABLE_GENERATOR_H_
+