DynamicTablesPkg: AML Code generation to add _PRT entries

_PRT entries can describe interrupt mapping for Pci devices. The
object is described in ACPI 6.4 s6.2.13 "_PRT (PCI Routing Table)".

Add AmlCodeGenPrtEntry() helper function to add _PRT entries
to an existing _PRT object.

To: Sami Mujawar <sami.mujawar@arm.com>
To: Alexei Fedorov <Alexei.Fedorov@arm.com>
Signed-off-by: Pierre Gondois <Pierre.Gondois@arm.com>
Reviewed-by: Sami Mujawar <sami.mujawar@arm.com>
This commit is contained in:
Pierre Gondois
2021-12-09 10:25:01 +01:00
committed by mergify[bot]
parent fd5fc4bbb7
commit b2b8def4e3
2 changed files with 266 additions and 0 deletions

View File

@@ -891,6 +891,58 @@ AmlCodeGenNameResourceTemplate (
OUT AML_OBJECT_NODE_HANDLE *NewObjectNode OPTIONAL
);
/** Add a _PRT entry.
AmlCodeGenPrtEntry (0x0FFFF, 0, "LNKA", 0, PrtNameNode) is
equivalent of the following ASL code:
Package (4) {
0x0FFFF, // Address: Device address (([Device Id] << 16) | 0xFFFF).
0, // Pin: PCI pin number of the device (0-INTA, ...).
LNKA // Source: Name of the device that allocates the interrupt
// to which the above pin is connected.
0 // Source Index: Source is assumed to only describe one
// interrupt, so let it to index 0.
}
The package is added at the tail of the list of the input _PRT node
name:
Name (_PRT, Package () {
[Pre-existing _PRT entries],
[Newly created _PRT entry]
})
Cf. ACPI 6.4, s6.2.13 "_PRT (PCI Routing Table)"
@ingroup CodeGenApis
@param [in] Address Address. Cf ACPI 6.4 specification, Table 6.2:
"ADR Object Address Encodings":
High word-Device #, Low word-Function #. (for
example, device 3, function 2 is 0x00030002).
To refer to all the functions on a device #,
use a function number of FFFF).
@param [in] Pin PCI pin number of the device (0-INTA ... 3-INTD).
Must be between 0-3.
@param [in] LinkName Link Name, i.e. device in the AML NameSpace
describing the interrupt used.
The input string is copied.
@param [in] SourceIndex Source index or GSIV.
@param [in] PrtNameNode Prt Named node to add the object to ....
@retval EFI_SUCCESS Success.
@retval EFI_INVALID_PARAMETER Invalid parameter.
@retval EFI_OUT_OF_RESOURCES Failed to allocate memory.
**/
EFI_STATUS
EFIAPI
AmlAddPrtEntry (
IN UINT32 Address,
IN UINT8 Pin,
IN CONST CHAR8 *LinkName,
IN UINT32 SourceIndex,
IN AML_OBJECT_NODE_HANDLE PrtNameNode
);
/** AML code generation for a Device object node.
AmlCodeGenDevice ("COM0", ParentNode, NewObjectNode) is