The PPTT generator uses the configuration manager protocol to obtain information about platform's processor topology and caches. This data is then used to generate the PPTT table. The table generator supports ACPI 6.3, PPTT table revision 2. The dynamic PPTT generator also carries out extensive input validation which includes cycle detection and MADT-PPTT cross-validation. A number of architectural compliance checks are also performed. Signed-off-by: Krzysztof Koch <krzysztof.koch@arm.com> Reviewed-by: Alexei Fedorov <Alexei.Fedorov@arm.com> Reviewed-by: Sami Mujawar <sami.mujawar@arm.com>
248 lines
7.5 KiB
C
248 lines
7.5 KiB
C
/** @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_
|
|
|