Files
system76-edk2/DynamicTablesPkg/Include/ConfigurationManagerObject.h
Krzysztof Koch 77db115601 DynamicTablesPkg: Add dynamic PPTT table generation support
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>
2019-06-11 08:36:18 +01:00

191 lines
5.7 KiB
C

/** @file
Copyright (c) 2017 - 2019, ARM Limited. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent
@par Glossary:
- Cm or CM - Configuration Manager
- Obj or OBJ - Object
**/
#ifndef CONFIGURATION_MANAGER_OBJECT_H_
#define CONFIGURATION_MANAGER_OBJECT_H_
#include <ArmNameSpaceObjects.h>
#include <StandardNameSpaceObjects.h>
#pragma pack(1)
/** The CM_OBJECT_ID type is used to identify the Configuration Manager
objects.
Description of Configuration Manager Object ID
_______________________________________________________________________________
|31 |30 |29 |28 || 27 | 26 | 25 | 24 || 23 | 22 | 21 | 20 || 19 | 18 | 17 | 16|
-------------------------------------------------------------------------------
| Name Space ID || 0 | 0 | 0 | 0 || 0 | 0 | 0 | 0 || 0 | 0 | 0 | 0|
_______________________________________________________________________________
Bits: [31:28] - Name Space ID
0000 - Standard
0001 - ARM
1000 - Custom/OEM
All other values are reserved.
Bits: [27:16] - Reserved.
_______________________________________________________________________________
|15 |14 |13 |12 || 11 | 10 | 9 | 8 || 7 | 6 | 5 | 4 || 3 | 2 | 1 | 0|
-------------------------------------------------------------------------------
| 0 | 0 | 0 | 0 || 0 | 0 | 0 | 0 || Object ID |
_______________________________________________________________________________
Bits: [15:8] - Are reserved and must be zero.
Bits: [7:0] - Object ID
Object ID's in the Standard Namespace:
0 - Configuration Manager Revision
1 - ACPI Table List
2 - SMBIOS Table List
Object ID's in the ARM Namespace:
0 - Reserved
1 - Boot Architecture Info
2 - CPU Info
3 - Power Management Profile Info
4 - GICC Info
5 - GICD Info
6 - GIC MSI Frame Info
7 - GIC Redistributor Info
8 - GIC ITS Info
9 - Serial Console Port Info
10 - Serial Debug Port Info
11 - Generic Timer Info
12 - Platform GT Block Info
13 - Generic Timer Block Frame Info
14 - Platform Generic Watchdog
15 - PCI Configuration Space Info
16 - Hypervisor Vendor Id
17 - Fixed feature flags for FADT
18 - ITS Group
19 - Named Component
20 - Root Complex
21 - SMMUv1 or SMMUv2
22 - SMMUv3
23 - PMCG
24 - GIC ITS Identifier Array
25 - ID Mapping Array
26 - SMMU Interrupt Array
27 - Processor Hierarchy Info
28 - Cache Info
29 - Processor Hierarchy Node ID Info
30 - CM Object Reference
*/
typedef UINT32 CM_OBJECT_ID;
/** A mask for Object ID
*/
#define OBJECT_ID_MASK 0xFF
/** A mask for Namespace ID
*/
#define NAMESPACE_ID_MASK 0xF
/** Starting bit position for Namespace ID
*/
#define NAMESPACE_ID_BIT_SHIFT 28
/** The EOBJECT_NAMESPACE_ID enum describes the defined namespaces
for the Configuration Manager Objects.
*/
typedef enum ObjectNameSpaceID {
EObjNameSpaceStandard, ///< Standard Objects Namespace
EObjNameSpaceArm, ///< ARM Objects Namespace
EObjNameSpaceOem = 0x8, ///< OEM Objects Namespace
EObjNameSpaceMax
} EOBJECT_NAMESPACE_ID;
/** A descriptor for Configuration Manager Objects.
The Configuration Manager Protocol interface uses this descriptor
to return the Configuration Manager Objects.
*/
typedef struct CmObjDescriptor {
/// Object Id
CM_OBJECT_ID ObjectId;
/// Size of the described Object or Object List
UINT32 Size;
/// Pointer to the described Object or Object List
VOID * Data;
/// Count of objects in the list
UINT32 Count;
} CM_OBJ_DESCRIPTOR;
#pragma pack()
/** This macro returns the namespace ID from the CmObjectID.
@param [in] CmObjectId The Configuration Manager Object ID.
@retval Returns the Namespace ID corresponding to the CmObjectID.
**/
#define GET_CM_NAMESPACE_ID(CmObjectId) \
(((CmObjectId) >> NAMESPACE_ID_BIT_SHIFT) & \
NAMESPACE_ID_MASK)
/** This macro returns the Object ID from the CmObjectID.
@param [in] CmObjectId The Configuration Manager Object ID.
@retval Returns the Object ID corresponding to the CmObjectID.
**/
#define GET_CM_OBJECT_ID(CmObjectId) ((CmObjectId) & OBJECT_ID_MASK)
/** This macro returns a Configuration Manager Object ID
from the NameSpace ID and the ObjectID.
@param [in] NameSpaceId The namespace ID for the Object.
@param [in] ObjectId The Object ID.
@retval Returns the Configuration Manager Object ID.
**/
#define CREATE_CM_OBJECT_ID(NameSpaceId, ObjectId) \
((((NameSpaceId) & NAMESPACE_ID_MASK) << NAMESPACE_ID_BIT_SHIFT) | \
((ObjectId) & OBJECT_ID_MASK))
/** This macro returns a Configuration Manager Object ID
in the Standard Object Namespace.
@param [in] ObjectId The Object ID.
@retval Returns a Standard Configuration Manager Object ID.
**/
#define CREATE_CM_STD_OBJECT_ID(ObjectId) \
(CREATE_CM_OBJECT_ID (EObjNameSpaceStandard, ObjectId))
/** This macro returns a Configuration Manager Object ID
in the ARM Object Namespace.
@param [in] ObjectId The Object ID.
@retval Returns an ARM Configuration Manager Object ID.
**/
#define CREATE_CM_ARM_OBJECT_ID(ObjectId) \
(CREATE_CM_OBJECT_ID (EObjNameSpaceArm, ObjectId))
/** This macro returns a Configuration Manager Object ID
in the OEM Object Namespace.
@param [in] ObjectId The Object ID.
@retval Returns an OEM Configuration Manager Object ID.
**/
#define CREATE_CM_OEM_OBJECT_ID(ObjectId) \
(CREATE_CM_OBJECT_ID (EObjNameSpaceOem, ObjectId))
#endif // CONFIGURATION_MANAGER_OBJECT_H_