/** @file Copyright (c) 2017 - 2019, ARM Limited. All rights reserved. SPDX-License-Identifier: BSD-2-Clause-Patent @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 10 - PPTT 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_