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.muja...@arm.com>
---
 DynamicTablesPkg/DynamicTablesPkg.dec     |  24 ++
 DynamicTablesPkg/Include/TableGenerator.h | 252 ++++++++++++++++++++
 2 files changed, 276 insertions(+)

diff --git a/DynamicTablesPkg/DynamicTablesPkg.dec 
b/DynamicTablesPkg/DynamicTablesPkg.dec
new file mode 100644
index 
0000000000000000000000000000000000000000..b1a6c64948d01426fc95b8599fc17adaa8c35f3d
--- /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 
0000000000000000000000000000000000000000..ea996085683ff6a783ec9a676efce6604b956d8e
--- /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_
+
-- 
'Guid(CE165669-3EF3-493F-B85D-6190EE5B9759)'


_______________________________________________
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel

Reply via email to