2018-12-15 13:31:47 +01:00
|
|
|
/** @file
|
|
|
|
|
DynamicTablesPkg: IORT generator updates for Rev E.d spec
Bugzilla: 3458 - Add support IORT Rev E.d specification updates
(https://bugzilla.tianocore.org/show_bug.cgi?id=3458)
The IO Remapping Table, Platform Design Document, Revision E.d,
Feb 2022 (https://developer.arm.com/documentation/den0049/)
introduces the following updates, collectively including the
updates and errata fixes to Rev E, Rev E.a, Rev E.b, Rev E.c:
- increments the IORT table revision to 5.
- updates the node definition to add an 'Identifier' field.
- adds definition of node type 6 - Reserved Memory Range node.
- adds definition for Memory Range Descriptors.
- adds flag to indicate PRI support for root complexes.
- adds flag to indicate if the root complex supports forwarding
of PASID information on translated transactions to the SMMU.
- adds flag to indicate if the root complex supports PASID.
- adds flags to define access privilege and attributes for the
memory ranges.
Therefore, update the IORT generator to:
- increment IORT table revision count to 5.
- populate Identifier filed if revision is greater than 4.
- add support to populate Reserved Memory Range nodes and
the Memory range descriptors.
- add validation to check that the Identifier field is
unique.
- Populate the PASID capabilities and Flags field of the
Root complex node.
- Added checks to not generate IORT Rev E, Rev E.<a,b,c>.
Signed-off-by: Sami Mujawar <sami.mujawar@arm.com>
Reviewed-by: Pierre Gondois <pierre.gondois@arm.com>
2022-07-14 18:50:31 +02:00
|
|
|
Copyright (c) 2018 - 2022, Arm Limited. All rights reserved.
|
2018-12-15 13:31:47 +01:00
|
|
|
|
2019-04-04 01:03:32 +02:00
|
|
|
SPDX-License-Identifier: BSD-2-Clause-Patent
|
2018-12-15 13:31:47 +01:00
|
|
|
|
|
|
|
@par Glossary:
|
|
|
|
- Cm or CM - Configuration Manager
|
|
|
|
- Obj or OBJ - Object
|
|
|
|
- Std or STD - Standard
|
|
|
|
**/
|
|
|
|
|
|
|
|
#ifndef IORT_GENERATOR_H_
|
|
|
|
#define IORT_GENERATOR_H_
|
|
|
|
|
|
|
|
#pragma pack(1)
|
|
|
|
|
|
|
|
/** A structure that describes the Node indexer
|
|
|
|
used for indexing the IORT nodes.
|
|
|
|
*/
|
|
|
|
typedef struct IortNodeIndexer {
|
|
|
|
/// Index token for the Node
|
|
|
|
CM_OBJECT_TOKEN Token;
|
|
|
|
/// Pointer to the node
|
|
|
|
VOID *Object;
|
|
|
|
/// Node offset from the start of the IORT table
|
|
|
|
UINT32 Offset;
|
DynamicTablesPkg: IORT generator updates for Rev E.d spec
Bugzilla: 3458 - Add support IORT Rev E.d specification updates
(https://bugzilla.tianocore.org/show_bug.cgi?id=3458)
The IO Remapping Table, Platform Design Document, Revision E.d,
Feb 2022 (https://developer.arm.com/documentation/den0049/)
introduces the following updates, collectively including the
updates and errata fixes to Rev E, Rev E.a, Rev E.b, Rev E.c:
- increments the IORT table revision to 5.
- updates the node definition to add an 'Identifier' field.
- adds definition of node type 6 - Reserved Memory Range node.
- adds definition for Memory Range Descriptors.
- adds flag to indicate PRI support for root complexes.
- adds flag to indicate if the root complex supports forwarding
of PASID information on translated transactions to the SMMU.
- adds flag to indicate if the root complex supports PASID.
- adds flags to define access privilege and attributes for the
memory ranges.
Therefore, update the IORT generator to:
- increment IORT table revision count to 5.
- populate Identifier filed if revision is greater than 4.
- add support to populate Reserved Memory Range nodes and
the Memory range descriptors.
- add validation to check that the Identifier field is
unique.
- Populate the PASID capabilities and Flags field of the
Root complex node.
- Added checks to not generate IORT Rev E, Rev E.<a,b,c>.
Signed-off-by: Sami Mujawar <sami.mujawar@arm.com>
Reviewed-by: Pierre Gondois <pierre.gondois@arm.com>
2022-07-14 18:50:31 +02:00
|
|
|
|
|
|
|
/// Unique identifier for the Node
|
|
|
|
UINT32 Identifier;
|
2018-12-15 13:31:47 +01:00
|
|
|
} IORT_NODE_INDEXER;
|
|
|
|
|
|
|
|
typedef struct AcpiIortGenerator {
|
|
|
|
/// ACPI Table generator header
|
|
|
|
ACPI_TABLE_GENERATOR Header;
|
|
|
|
|
|
|
|
// IORT Generator private data
|
|
|
|
|
|
|
|
/// IORT node count
|
|
|
|
UINT32 IortNodeCount;
|
|
|
|
/// Pointer to the node indexer array
|
|
|
|
IORT_NODE_INDEXER *NodeIndexer;
|
|
|
|
} ACPI_IORT_GENERATOR;
|
|
|
|
|
|
|
|
#pragma pack()
|
|
|
|
|
|
|
|
#endif // IORT_GENERATOR_H_
|