mirror of https://github.com/acidanthera/audk.git
DynamicTablesPkg: AML Code generation for Register()
Add AmlCodeGenRegister() to generate AML code for the Generic Register Resource Descriptor. This function is equivalent to the ASL macro Register(). Reviewed-by: Sami Mujawar <sami.mujawar@arm.com> Signed-off-by: Pierre Gondois <Pierre.Gondois@arm.com>
This commit is contained in:
parent
6d2777d85f
commit
f995f8672b
|
@ -193,6 +193,93 @@ AmlCodeGenRdInterrupt (
|
|||
return LinkRdNode (RdNode, NameOpNode, NewRdNode);
|
||||
}
|
||||
|
||||
/** Code generation for the "Register ()" ASL function.
|
||||
|
||||
The Resource Data effectively created is a Generic Register Descriptor.
|
||||
Data. Cf ACPI 6.4:
|
||||
- s6.4.3.7 "Generic Register Descriptor".
|
||||
- s19.6.114 "Register".
|
||||
|
||||
The created resource data node can be:
|
||||
- appended to the list of resource data elements of the NameOpNode.
|
||||
In such case NameOpNode must be defined by a the "Name ()" ASL statement
|
||||
and initially contain a "ResourceTemplate ()".
|
||||
- returned through the NewRdNode parameter.
|
||||
|
||||
@param [in] AddressSpace Address space where the register exists.
|
||||
Can be one of I/O space, System Memory, etc.
|
||||
@param [in] BitWidth Number of bits in the register.
|
||||
@param [in] BitOffset Offset in bits from the start of the register
|
||||
indicated by the Address.
|
||||
@param [in] Address Register address.
|
||||
@param [in] AccessSize Size of data values used when accessing the
|
||||
address space. Can be one of:
|
||||
0 - Undefined, legacy (EFI_ACPI_6_4_UNDEFINED)
|
||||
1 - Byte access (EFI_ACPI_6_4_BYTE)
|
||||
2 - Word access (EFI_ACPI_6_4_WORD)
|
||||
3 - DWord access (EFI_ACPI_6_4_DWORD)
|
||||
4 - QWord access (EFI_ACPI_6_4_QWORD)
|
||||
@param [in] NameOpNode NameOp object node defining a named object.
|
||||
If provided, append the new resource data node
|
||||
to the list of resource data elements of this
|
||||
node.
|
||||
@param [out] NewRdNode If provided and success,
|
||||
contain the created node.
|
||||
|
||||
@retval EFI_SUCCESS The function completed successfully.
|
||||
@retval EFI_INVALID_PARAMETER Invalid parameter.
|
||||
@retval EFI_OUT_OF_RESOURCES Could not allocate memory.
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
AmlCodeGenRdRegister (
|
||||
IN UINT8 AddressSpace,
|
||||
IN UINT8 BitWidth,
|
||||
IN UINT8 BitOffset,
|
||||
IN UINT64 Address,
|
||||
IN UINT8 AccessSize,
|
||||
IN AML_OBJECT_NODE_HANDLE NameOpNode, OPTIONAL
|
||||
OUT AML_DATA_NODE_HANDLE *NewRdNode OPTIONAL
|
||||
)
|
||||
{
|
||||
EFI_STATUS Status;
|
||||
AML_DATA_NODE * RdNode;
|
||||
EFI_ACPI_GENERIC_REGISTER_DESCRIPTOR RdRegister;
|
||||
|
||||
if ((AccessSize > EFI_ACPI_6_4_QWORD) ||
|
||||
((NameOpNode == NULL) && (NewRdNode == NULL))) {
|
||||
ASSERT (0);
|
||||
return EFI_INVALID_PARAMETER;
|
||||
}
|
||||
|
||||
// Header
|
||||
RdRegister.Header.Header.Bits.Name =
|
||||
ACPI_LARGE_GENERIC_REGISTER_DESCRIPTOR_NAME;
|
||||
RdRegister.Header.Header.Bits.Type = ACPI_LARGE_ITEM_FLAG;
|
||||
RdRegister.Header.Length = sizeof (EFI_ACPI_GENERIC_REGISTER_DESCRIPTOR) -
|
||||
sizeof (ACPI_LARGE_RESOURCE_HEADER);
|
||||
|
||||
// Body
|
||||
RdRegister.AddressSpaceId = AddressSpace;
|
||||
RdRegister.RegisterBitWidth = BitWidth;
|
||||
RdRegister.RegisterBitOffset = BitOffset;
|
||||
RdRegister.AddressSize = AccessSize;
|
||||
RdRegister.RegisterAddress = Address;
|
||||
|
||||
Status = AmlCreateDataNode (
|
||||
EAmlNodeDataTypeResourceData,
|
||||
(UINT8*)&RdRegister,
|
||||
sizeof (EFI_ACPI_GENERIC_REGISTER_DESCRIPTOR),
|
||||
&RdNode
|
||||
);
|
||||
if (EFI_ERROR (Status)) {
|
||||
ASSERT (0);
|
||||
return Status;
|
||||
}
|
||||
|
||||
return LinkRdNode (RdNode, NameOpNode, NewRdNode);
|
||||
}
|
||||
|
||||
// DEPRECATED APIS
|
||||
#ifndef DISABLE_NEW_DEPRECATED_INTERFACES
|
||||
|
||||
|
|
|
@ -55,4 +55,53 @@ AmlCodeGenRdInterrupt (
|
|||
OUT AML_DATA_NODE_HANDLE *NewRdNode OPTIONAL
|
||||
);
|
||||
|
||||
/** Code generation for the "Register ()" ASL function.
|
||||
|
||||
The Resource Data effectively created is a Generic Register Descriptor.
|
||||
Data. Cf ACPI 6.4:
|
||||
- s6.4.3.7 "Generic Register Descriptor".
|
||||
- s19.6.114 "Register".
|
||||
|
||||
The created resource data node can be:
|
||||
- appended to the list of resource data elements of the NameOpNode.
|
||||
In such case NameOpNode must be defined by a the "Name ()" ASL statement
|
||||
and initially contain a "ResourceTemplate ()".
|
||||
- returned through the NewRdNode parameter.
|
||||
|
||||
@param [in] AddressSpace Address space where the register exists.
|
||||
Can be one of I/O space, System Memory, etc.
|
||||
@param [in] BitWidth Number of bits in the register.
|
||||
@param [in] BitOffset Offset in bits from the start of the register
|
||||
indicated by the Address.
|
||||
@param [in] Address Register address.
|
||||
@param [in] AccessSize Size of data values used when accessing the
|
||||
address space. Can be one of:
|
||||
0 - Undefined, legacy (EFI_ACPI_6_4_UNDEFINED)
|
||||
1 - Byte access (EFI_ACPI_6_4_BYTE)
|
||||
2 - Word access (EFI_ACPI_6_4_WORD)
|
||||
3 - DWord access (EFI_ACPI_6_4_DWORD)
|
||||
4 - QWord access (EFI_ACPI_6_4_QWORD)
|
||||
@param [in] NameOpNode NameOp object node defining a named object.
|
||||
If provided, append the new resource data node
|
||||
to the list of resource data elements of this
|
||||
node.
|
||||
@param [out] NewRdNode If provided and success,
|
||||
contain the created node.
|
||||
|
||||
@retval EFI_SUCCESS The function completed successfully.
|
||||
@retval EFI_INVALID_PARAMETER Invalid parameter.
|
||||
@retval EFI_OUT_OF_RESOURCES Could not allocate memory.
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
AmlCodeGenRdRegister (
|
||||
IN UINT8 AddressSpace,
|
||||
IN UINT8 BitWidth,
|
||||
IN UINT8 BitOffset,
|
||||
IN UINT64 Address,
|
||||
IN UINT8 AccessSize,
|
||||
IN AML_OBJECT_NODE_HANDLE NameOpNode, OPTIONAL
|
||||
OUT AML_DATA_NODE_HANDLE *NewRdNode OPTIONAL
|
||||
);
|
||||
|
||||
#endif // AML_RESOURCE_DATA_CODE_GEN_H_
|
||||
|
|
Loading…
Reference in New Issue