From: Sami Mujawar Date: Sat, 15 Dec 2018 11:52:30 +0000 (+0000) Subject: DynamicTablesPkg: Table Generator definition X-Git-Tag: edk2-stable201903~120 X-Git-Url: https://git.proxmox.com/?p=mirror_edk2.git;a=commitdiff_plain;h=90c1ba92ef2fa29b0d7107b8b1c7a66bc4a47633 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 Reviewed-by: Alexei Fedorov --- 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.
+# +# 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_ +