* [PATCH v3 0/3] Add Memory32Fixed and AmlCodeGenMethodRetInteger functions
@ 2022-01-13 16:40 Rebecca Cran
2022-01-13 16:40 ` [PATCH v3 1/3] DynamicTablesPkg: Add Memory32Fixed function Rebecca Cran
` (3 more replies)
0 siblings, 4 replies; 10+ messages in thread
From: Rebecca Cran @ 2022-01-13 16:40 UTC (permalink / raw)
To: devel, Sami Mujawar, PierreGondois, Alexei Fedorov, Leif Lindholm
Cc: Rebecca Cran
Add functions to generate code for the Memory32Fixed ASL macro and a
method returning an Integer.
Remove a redundant cast from AmlCodeGenReturn.
Changes from v2 to v3:
o Rename function to AmlCodeGenRdMemory32Fixed.
o Use define ACPI_32_BIT_FIXED_MEMORY_RANGE_DESCRIPTOR.
Rebecca Cran (3):
DynamicTablesPkg: Add Memory32Fixed function
DynamicTablesPkg: Remove redundant cast in AmlCodeGenReturn
DynamicTablesPkg: Add AmlCodeGenMethodRetInteger function
DynamicTablesPkg/Include/Library/AmlLib/AmlLib.h | 80 ++++++++++
DynamicTablesPkg/Library/Common/AmlLib/CodeGen/AmlCodeGen.c | 158 +++++++++++++++++++-
DynamicTablesPkg/Library/Common/AmlLib/CodeGen/AmlResourceDataCodeGen.c | 57 +++++++
3 files changed, 294 insertions(+), 1 deletion(-)
--
2.31.1
^ permalink raw reply [flat|nested] 10+ messages in thread
* [PATCH v3 1/3] DynamicTablesPkg: Add Memory32Fixed function
2022-01-13 16:40 [PATCH v3 0/3] Add Memory32Fixed and AmlCodeGenMethodRetInteger functions Rebecca Cran
@ 2022-01-13 16:40 ` Rebecca Cran
2022-02-02 14:52 ` Sami Mujawar
2022-01-13 16:40 ` [PATCH v3 2/3] DynamicTablesPkg: Remove redundant cast in AmlCodeGenReturn Rebecca Cran
` (2 subsequent siblings)
3 siblings, 1 reply; 10+ messages in thread
From: Rebecca Cran @ 2022-01-13 16:40 UTC (permalink / raw)
To: devel, Sami Mujawar, PierreGondois, Alexei Fedorov, Leif Lindholm
Cc: Rebecca Cran
Add a Memory32Fixed function to generate code for the corresponding
Memory32Fixed macro in AML.
Signed-off-by: Rebecca Cran <quic_rcran@quicinc.com>
Reviewed-by: Pierre Gondois <pierre.gondois@arm.com>
---
DynamicTablesPkg/Include/Library/AmlLib/AmlLib.h | 33 ++++++++++++
DynamicTablesPkg/Library/Common/AmlLib/CodeGen/AmlResourceDataCodeGen.c | 57 ++++++++++++++++++++
2 files changed, 90 insertions(+)
diff --git a/DynamicTablesPkg/Include/Library/AmlLib/AmlLib.h b/DynamicTablesPkg/Include/Library/AmlLib/AmlLib.h
index af18bf8e4871..80d05f74ee69 100644
--- a/DynamicTablesPkg/Include/Library/AmlLib/AmlLib.h
+++ b/DynamicTablesPkg/Include/Library/AmlLib/AmlLib.h
@@ -592,6 +592,39 @@ AmlCodeGenRdDWordMemory (
OUT AML_DATA_NODE_HANDLE *NewRdNode OPTIONAL
);
+/** Code generation for the "Memory32Fixed ()" ASL macro.
+
+ The Resource Data effectively created is a 32-bit Memory Resource
+ Data. Cf ACPI 6.4:
+ - s19.6.83 "Memory Resource Descriptor Macro".
+ - s19.2.8 "Memory32FixedTerm".
+
+ See ACPI 6.4 spec, s19.2.8 for more.
+
+ @param [in] IsReadWrite ReadAndWrite parameter.
+ @param [in] Address AddressBase parameter.
+ @param [in] RangeLength Range length.
+ @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] NewMemNode 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
+AmlCodeGenRdMemory32Fixed (
+ BOOLEAN IsReadWrite,
+ UINT32 Address,
+ UINT32 RangeLength,
+ AML_OBJECT_NODE_HANDLE NameOpNode,
+ AML_DATA_NODE_HANDLE *NewMemNode
+ );
+
/** Code generation for the "WordBusNumber ()" ASL function.
The Resource Data effectively created is a Word Address Space Resource
diff --git a/DynamicTablesPkg/Library/Common/AmlLib/CodeGen/AmlResourceDataCodeGen.c b/DynamicTablesPkg/Library/Common/AmlLib/CodeGen/AmlResourceDataCodeGen.c
index 40d8c2b07ae3..fb18c5a77e2f 100644
--- a/DynamicTablesPkg/Library/Common/AmlLib/CodeGen/AmlResourceDataCodeGen.c
+++ b/DynamicTablesPkg/Library/Common/AmlLib/CodeGen/AmlResourceDataCodeGen.c
@@ -609,6 +609,63 @@ AmlCodeGenRdDWordMemory (
);
}
+/** Code generation for the "Memory32Fixed ()" ASL macro.
+
+ The Resource Data effectively created is a 32-bit Memory Resource
+ Data. Cf ACPI 6.4:
+ - s19.6.83 "Memory Resource Descriptor Macro".
+ - s19.2.8 "Memory32FixedTerm".
+
+ See ACPI 6.4 spec, s19.2.8 for more.
+
+ @param [in] IsReadWrite ReadAndWrite parameter.
+ @param [in] Addres AddressBase parameter.
+ @param [in] RangeLength Range length.
+ @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] NewMemNode 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
+AmlCodeGenRdMemory32Fixed (
+ BOOLEAN IsReadWrite,
+ UINT32 Address,
+ UINT32 RangeLength,
+ AML_OBJECT_NODE_HANDLE NameOpNode,
+ AML_DATA_NODE_HANDLE *NewMemNode
+ )
+{
+ EFI_STATUS Status;
+ AML_DATA_NODE *MemNode;
+ EFI_ACPI_32_BIT_FIXED_MEMORY_RANGE_DESCRIPTOR RangeDesc;
+
+ RangeDesc.Header.Header.Byte = ACPI_32_BIT_FIXED_MEMORY_RANGE_DESCRIPTOR;
+ RangeDesc.Header.Length = 0x09;
+ RangeDesc.Information = IsReadWrite ? BIT0 : 0;
+ RangeDesc.BaseAddress = Address;
+ RangeDesc.Length = RangeLength;
+
+ Status = AmlCreateDataNode (
+ EAmlNodeDataTypeResourceData,
+ (UINT8 *)&RangeDesc,
+ sizeof (RangeDesc),
+ &MemNode
+ );
+ if (EFI_ERROR (Status)) {
+ ASSERT (0);
+ return Status;
+ }
+
+ return LinkRdNode (MemNode, NameOpNode, NewMemNode);
+}
+
/** Code generation for the "WordSpace ()" ASL function.
The Resource Data effectively created is a Word Address Space Resource
--
2.31.1
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [PATCH v3 2/3] DynamicTablesPkg: Remove redundant cast in AmlCodeGenReturn
2022-01-13 16:40 [PATCH v3 0/3] Add Memory32Fixed and AmlCodeGenMethodRetInteger functions Rebecca Cran
2022-01-13 16:40 ` [PATCH v3 1/3] DynamicTablesPkg: Add Memory32Fixed function Rebecca Cran
@ 2022-01-13 16:40 ` Rebecca Cran
2022-02-02 14:53 ` Sami Mujawar
2022-01-13 16:40 ` [PATCH v3 3/3] DynamicTablesPkg: Add AmlCodeGenMethodRetInteger function Rebecca Cran
2022-02-02 19:41 ` [PATCH v3 0/3] Add Memory32Fixed and AmlCodeGenMethodRetInteger functions Sami Mujawar
3 siblings, 1 reply; 10+ messages in thread
From: Rebecca Cran @ 2022-01-13 16:40 UTC (permalink / raw)
To: devel, Sami Mujawar, PierreGondois, Alexei Fedorov, Leif Lindholm
Cc: Rebecca Cran
In AmlCodeGenReturn, the cast to AML_NODE_HEADER* in the call to
AmlSetFixedArgument is redundant because ReturnNode is already a
AML_NODE_HEADER* .
Signed-off-by: Rebecca Cran <quic_rcran@quicinc.com>
Reviewed-by: Pierre Gondois <pierre.gondois@arm.com>
---
DynamicTablesPkg/Library/Common/AmlLib/CodeGen/AmlCodeGen.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/DynamicTablesPkg/Library/Common/AmlLib/CodeGen/AmlCodeGen.c b/DynamicTablesPkg/Library/Common/AmlLib/CodeGen/AmlCodeGen.c
index d245848ce3fa..838a892c6b58 100644
--- a/DynamicTablesPkg/Library/Common/AmlLib/CodeGen/AmlCodeGen.c
+++ b/DynamicTablesPkg/Library/Common/AmlLib/CodeGen/AmlCodeGen.c
@@ -1564,7 +1564,7 @@ AmlCodeGenReturn (
Status = AmlSetFixedArgument (
ObjectNode,
EAmlParseIndexTerm0,
- (AML_NODE_HEADER *)ReturnNode
+ ReturnNode
);
if (EFI_ERROR (Status)) {
ASSERT (0);
--
2.31.1
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [PATCH v3 3/3] DynamicTablesPkg: Add AmlCodeGenMethodRetInteger function
2022-01-13 16:40 [PATCH v3 0/3] Add Memory32Fixed and AmlCodeGenMethodRetInteger functions Rebecca Cran
2022-01-13 16:40 ` [PATCH v3 1/3] DynamicTablesPkg: Add Memory32Fixed function Rebecca Cran
2022-01-13 16:40 ` [PATCH v3 2/3] DynamicTablesPkg: Remove redundant cast in AmlCodeGenReturn Rebecca Cran
@ 2022-01-13 16:40 ` Rebecca Cran
2022-02-02 14:53 ` Sami Mujawar
2022-02-02 19:41 ` [PATCH v3 0/3] Add Memory32Fixed and AmlCodeGenMethodRetInteger functions Sami Mujawar
3 siblings, 1 reply; 10+ messages in thread
From: Rebecca Cran @ 2022-01-13 16:40 UTC (permalink / raw)
To: devel, Sami Mujawar, PierreGondois, Alexei Fedorov, Leif Lindholm
Cc: Rebecca Cran
Add AmlCodeGenMethodRetInteger function to generate AML code for
a Method returning an Integer.
Signed-off-by: Rebecca Cran <quic_rcran@quicinc.com>
Reviewed-by: Pierre Gondois <pierre.gondois@arm.com>
---
DynamicTablesPkg/Include/Library/AmlLib/AmlLib.h | 47 ++++++
DynamicTablesPkg/Library/Common/AmlLib/CodeGen/AmlCodeGen.c | 156 ++++++++++++++++++++
2 files changed, 203 insertions(+)
diff --git a/DynamicTablesPkg/Include/Library/AmlLib/AmlLib.h b/DynamicTablesPkg/Include/Library/AmlLib/AmlLib.h
index 80d05f74ee69..6f214c0dfad2 100644
--- a/DynamicTablesPkg/Include/Library/AmlLib/AmlLib.h
+++ b/DynamicTablesPkg/Include/Library/AmlLib/AmlLib.h
@@ -1118,6 +1118,53 @@ AmlCodeGenMethodRetNameString (
OUT AML_OBJECT_NODE_HANDLE *NewObjectNode OPTIONAL
);
+/** AML code generation for a method returning an Integer.
+
+ AmlCodeGenMethodRetInteger (
+ "_CBA", 0, 1, TRUE, 3, ParentNode, NewObjectNode
+ );
+ is equivalent of the following ASL code:
+ Method(_CBA, 1, Serialized, 3) {
+ Return (0)
+ }
+
+ The ASL parameters "ReturnType" and "ParameterTypes" are not asked
+ in this function. They are optional parameters in ASL.
+
+ @param [in] MethodNameString The new Method's name.
+ Must be a NULL-terminated ASL NameString
+ e.g.: "MET0", "_SB.MET0", etc.
+ The input string is copied.
+ @param [in] ReturnedInteger The value of the integer returned by the
+ method.
+ @param [in] NumArgs Number of arguments.
+ Must be 0 <= NumArgs <= 6.
+ @param [in] IsSerialized TRUE is equivalent to Serialized.
+ FALSE is equivalent to NotSerialized.
+ Default is NotSerialized in ASL spec.
+ @param [in] SyncLevel Synchronization level for the method.
+ Must be 0 <= SyncLevel <= 15.
+ Default is 0 in ASL.
+ @param [in] ParentNode If provided, set ParentNode as the parent
+ of the node created.
+ @param [out] NewObjectNode If success, contains the created node.
+
+ @retval EFI_SUCCESS Success.
+ @retval EFI_INVALID_PARAMETER Invalid parameter.
+ @retval EFI_OUT_OF_RESOURCES Failed to allocate memory.
+**/
+EFI_STATUS
+EFIAPI
+AmlCodeGenMethodRetInteger (
+ IN CONST CHAR8 *MethodNameString,
+ IN UINT64 ReturnedInteger,
+ IN UINT8 NumArgs,
+ IN BOOLEAN IsSerialized,
+ IN UINT8 SyncLevel,
+ IN AML_NODE_HANDLE ParentNode OPTIONAL,
+ OUT AML_OBJECT_NODE_HANDLE *NewObjectNode OPTIONAL
+ );
+
/** Create a _LPI name.
AmlCreateLpiNode ("_LPI", 0, 1, ParentNode, &LpiNode) is
diff --git a/DynamicTablesPkg/Library/Common/AmlLib/CodeGen/AmlCodeGen.c b/DynamicTablesPkg/Library/Common/AmlLib/CodeGen/AmlCodeGen.c
index 838a892c6b58..07822ead5b70 100644
--- a/DynamicTablesPkg/Library/Common/AmlLib/CodeGen/AmlCodeGen.c
+++ b/DynamicTablesPkg/Library/Common/AmlLib/CodeGen/AmlCodeGen.c
@@ -1685,6 +1685,61 @@ exit_handler:
return Status;
}
+/** AML code generation for a Return object node,
+ returning an Integer.
+
+ AmlCodeGenReturn (0), ParentNode, NewObjectNode) is
+ equivalent of the following ASL code:
+ Return (0)
+
+ The ACPI 6.3 specification, 20.2.8 "Statement Opcodes Encoding" states:
+ DefReturn := ReturnOp ArgObject
+ ReturnOp := 0xA4
+ ArgObject := TermArg => DataRefObject
+
+ Thus, the ReturnNode must be evaluated as a DataRefObject.
+
+ The ReturnNode must be generated inside a Method body scope.
+
+ @param [in] Integer The integer is returned by the Return
+ ASL statement.
+ @param [in] ParentNode If provided, set ParentNode as the parent
+ of the node created.
+ Must be a MethodOp node.
+ @param [out] NewObjectNode If success, contains the created node.
+
+ @retval EFI_SUCCESS Success.
+ @retval EFI_INVALID_PARAMETER Invalid parameter.
+ @retval EFI_OUT_OF_RESOURCES Failed to allocate memory.
+**/
+STATIC
+EFI_STATUS
+EFIAPI
+AmlCodeGenReturnInteger (
+ IN UINT64 Integer,
+ IN AML_NODE_HEADER *ParentNode OPTIONAL,
+ OUT AML_OBJECT_NODE **NewObjectNode OPTIONAL
+ )
+{
+ EFI_STATUS Status;
+ AML_OBJECT_NODE *IntNode;
+
+ IntNode = NULL;
+
+ Status = AmlCodeGenInteger (Integer, &IntNode);
+ ASSERT_EFI_ERROR (Status);
+
+ // AmlCodeGenReturn() deletes DataNode if error.
+ Status = AmlCodeGenReturn (
+ (AML_NODE_HEADER *)IntNode,
+ ParentNode,
+ NewObjectNode
+ );
+ ASSERT_EFI_ERROR (Status);
+
+ return Status;
+}
+
/** AML code generation for a method returning a NameString.
AmlCodeGenMethodRetNameString (
@@ -1793,6 +1848,107 @@ error_handler:
return Status;
}
+/** AML code generation for a method returning an Integer.
+
+ AmlCodeGenMethodRetInteger (
+ "_CBA", 0, 1, TRUE, 3, ParentNode, NewObjectNode
+ );
+ is equivalent of the following ASL code:
+ Method(_CBA, 1, Serialized, 3) {
+ Return (0)
+ }
+
+ The ASL parameters "ReturnType" and "ParameterTypes" are not asked
+ in this function. They are optional parameters in ASL.
+
+ @param [in] MethodNameString The new Method's name.
+ Must be a NULL-terminated ASL NameString
+ e.g.: "MET0", "_SB.MET0", etc.
+ The input string is copied.
+ @param [in] ReturnedInteger The value of the integer returned by the
+ method.
+ @param [in] NumArgs Number of arguments.
+ Must be 0 <= NumArgs <= 6.
+ @param [in] IsSerialized TRUE is equivalent to Serialized.
+ FALSE is equivalent to NotSerialized.
+ Default is NotSerialized in ASL spec.
+ @param [in] SyncLevel Synchronization level for the method.
+ Must be 0 <= SyncLevel <= 15.
+ Default is 0 in ASL.
+ @param [in] ParentNode If provided, set ParentNode as the parent
+ of the node created.
+ @param [out] NewObjectNode If success, contains the created node.
+
+ @retval EFI_SUCCESS Success.
+ @retval EFI_INVALID_PARAMETER Invalid parameter.
+ @retval EFI_OUT_OF_RESOURCES Failed to allocate memory.
+**/
+EFI_STATUS
+EFIAPI
+AmlCodeGenMethodRetInteger (
+ IN CONST CHAR8 *MethodNameString,
+ IN UINT64 ReturnedInteger,
+ IN UINT8 NumArgs,
+ IN BOOLEAN IsSerialized,
+ IN UINT8 SyncLevel,
+ IN AML_NODE_HANDLE ParentNode OPTIONAL,
+ OUT AML_OBJECT_NODE_HANDLE *NewObjectNode OPTIONAL
+ )
+{
+ EFI_STATUS Status;
+ AML_OBJECT_NODE_HANDLE MethodNode;
+
+ if ((MethodNameString == NULL) ||
+ ((ParentNode == NULL) && (NewObjectNode == NULL)))
+ {
+ ASSERT (0);
+ return EFI_INVALID_PARAMETER;
+ }
+
+ // Create a Method named MethodNameString.
+ Status = AmlCodeGenMethod (
+ MethodNameString,
+ NumArgs,
+ IsSerialized,
+ SyncLevel,
+ NULL,
+ &MethodNode
+ );
+ if (EFI_ERROR (Status)) {
+ ASSERT (0);
+ return Status;
+ }
+
+ Status = AmlCodeGenReturnInteger (
+ ReturnedInteger,
+ (AML_NODE_HANDLE)MethodNode,
+ NULL
+ );
+ if (EFI_ERROR (Status)) {
+ ASSERT (0);
+ goto error_handler;
+ }
+
+ Status = LinkNode (
+ MethodNode,
+ ParentNode,
+ NewObjectNode
+ );
+ if (EFI_ERROR (Status)) {
+ ASSERT (0);
+ goto error_handler;
+ }
+
+ return Status;
+
+error_handler:
+ if (MethodNode != NULL) {
+ AmlDeleteTree ((AML_NODE_HANDLE)MethodNode);
+ }
+
+ return Status;
+}
+
/** Create a _LPI name.
AmlCreateLpiNode ("_LPI", 0, 1, ParentNode, &LpiNode) is
--
2.31.1
^ permalink raw reply related [flat|nested] 10+ messages in thread
* Re: [PATCH v3 1/3] DynamicTablesPkg: Add Memory32Fixed function
2022-01-13 16:40 ` [PATCH v3 1/3] DynamicTablesPkg: Add Memory32Fixed function Rebecca Cran
@ 2022-02-02 14:52 ` Sami Mujawar
2022-02-02 15:03 ` [edk2-devel] " Rebecca Cran
0 siblings, 1 reply; 10+ messages in thread
From: Sami Mujawar @ 2022-02-02 14:52 UTC (permalink / raw)
To: Rebecca Cran, devel, PierreGondois, Alexei Fedorov, Leif Lindholm,
nd
[-- Attachment #1: Type: text/plain, Size: 5872 bytes --]
Hi Rebecca,
Thank you for this patch.
I have a minor suggestion marked inline as [SAMI].
Otherwise this patch looks good to me.
Regards,
Sami Mujawar
On 13/01/2022 04:40 PM, Rebecca Cran wrote:
Add a Memory32Fixed function to generate code for the corresponding
Memory32Fixed macro in AML.
Signed-off-by: Rebecca Cran <quic_rcran@quicinc.com><mailto:quic_rcran@quicinc.com>
Reviewed-by: Pierre Gondois <pierre.gondois@arm.com><mailto:pierre.gondois@arm.com>
---
DynamicTablesPkg/Include/Library/AmlLib/AmlLib.h | 33 ++++++++++++
DynamicTablesPkg/Library/Common/AmlLib/CodeGen/AmlResourceDataCodeGen.c | 57 ++++++++++++++++++++
2 files changed, 90 insertions(+)
diff --git a/DynamicTablesPkg/Include/Library/AmlLib/AmlLib.h b/DynamicTablesPkg/Include/Library/AmlLib/AmlLib.h
index af18bf8e4871..80d05f74ee69 100644
--- a/DynamicTablesPkg/Include/Library/AmlLib/AmlLib.h
+++ b/DynamicTablesPkg/Include/Library/AmlLib/AmlLib.h
@@ -592,6 +592,39 @@ AmlCodeGenRdDWordMemory (
OUT AML_DATA_NODE_HANDLE *NewRdNode OPTIONAL
);
+/** Code generation for the "Memory32Fixed ()" ASL macro.
+
+ The Resource Data effectively created is a 32-bit Memory Resource
+ Data. Cf ACPI 6.4:
+ - s19.6.83 "Memory Resource Descriptor Macro".
+ - s19.2.8 "Memory32FixedTerm".
+
+ See ACPI 6.4 spec, s19.2.8 for more.
+
+ @param [in] IsReadWrite ReadAndWrite parameter.
+ @param [in] Address AddressBase parameter.
+ @param [in] RangeLength Range length.
+ @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] NewMemNode 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
+AmlCodeGenRdMemory32Fixed (
+ BOOLEAN IsReadWrite,
+ UINT32 Address,
+ UINT32 RangeLength,
+ AML_OBJECT_NODE_HANDLE NameOpNode,
+ AML_DATA_NODE_HANDLE *NewMemNode
+ );
+
/** Code generation for the "WordBusNumber ()" ASL function.
The Resource Data effectively created is a Word Address Space Resource
diff --git a/DynamicTablesPkg/Library/Common/AmlLib/CodeGen/AmlResourceDataCodeGen.c b/DynamicTablesPkg/Library/Common/AmlLib/CodeGen/AmlResourceDataCodeGen.c
index 40d8c2b07ae3..fb18c5a77e2f 100644
--- a/DynamicTablesPkg/Library/Common/AmlLib/CodeGen/AmlResourceDataCodeGen.c
+++ b/DynamicTablesPkg/Library/Common/AmlLib/CodeGen/AmlResourceDataCodeGen.c
@@ -609,6 +609,63 @@ AmlCodeGenRdDWordMemory (
);
}
+/** Code generation for the "Memory32Fixed ()" ASL macro.
+
+ The Resource Data effectively created is a 32-bit Memory Resource
+ Data. Cf ACPI 6.4:
+ - s19.6.83 "Memory Resource Descriptor Macro".
+ - s19.2.8 "Memory32FixedTerm".
+
+ See ACPI 6.4 spec, s19.2.8 for more.
+
+ @param [in] IsReadWrite ReadAndWrite parameter.
+ @param [in] Addres AddressBase parameter.
+ @param [in] RangeLength Range length.
+ @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] NewMemNode 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
+AmlCodeGenRdMemory32Fixed (
+ BOOLEAN IsReadWrite,
+ UINT32 Address,
+ UINT32 RangeLength,
+ AML_OBJECT_NODE_HANDLE NameOpNode,
+ AML_DATA_NODE_HANDLE *NewMemNode
+ )
+{
+ EFI_STATUS Status;
+ AML_DATA_NODE *MemNode;
+ EFI_ACPI_32_BIT_FIXED_MEMORY_RANGE_DESCRIPTOR RangeDesc;
+
+ RangeDesc.Header.Header.Byte = ACPI_32_BIT_FIXED_MEMORY_RANGE_DESCRIPTOR;
+ RangeDesc.Header.Length = 0x09;
[SAMI] Would it be ok if I change the above line to
RangeDesc.Header.Length = sizeof (EFI_ACPI_32_BIT_FIXED_MEMORY_RANGE_DESCRIPTOR) -
sizeof (ACPI_LARGE_RESOURCE_HEADER);
before merging?
[/SAMI]
+ RangeDesc.Information = IsReadWrite ? BIT0 : 0;
+ RangeDesc.BaseAddress = Address;
+ RangeDesc.Length = RangeLength;
+
+ Status = AmlCreateDataNode (
+ EAmlNodeDataTypeResourceData,
+ (UINT8 *)&RangeDesc,
+ sizeof (RangeDesc),
+ &MemNode
+ );
+ if (EFI_ERROR (Status)) {
+ ASSERT (0);
+ return Status;
+ }
+
+ return LinkRdNode (MemNode, NameOpNode, NewMemNode);
+}
+
/** Code generation for the "WordSpace ()" ASL function.
The Resource Data effectively created is a Word Address Space Resource
IMPORTANT NOTICE: The contents of this email and any attachments are confidential and may also be privileged. If you are not the intended recipient, please notify the sender immediately and do not disclose the contents to any other person, use it for any purpose, or store or copy the information in any medium. Thank you.
[-- Attachment #2: Type: text/html, Size: 8632 bytes --]
^ permalink raw reply related [flat|nested] 10+ messages in thread
* Re: [PATCH v3 2/3] DynamicTablesPkg: Remove redundant cast in AmlCodeGenReturn
2022-01-13 16:40 ` [PATCH v3 2/3] DynamicTablesPkg: Remove redundant cast in AmlCodeGenReturn Rebecca Cran
@ 2022-02-02 14:53 ` Sami Mujawar
0 siblings, 0 replies; 10+ messages in thread
From: Sami Mujawar @ 2022-02-02 14:53 UTC (permalink / raw)
To: Rebecca Cran, devel, PierreGondois, Alexei Fedorov, Leif Lindholm,
nd
Hi Rebecca,
Thank you for this patch.
This change looks good to me.
Reviewed-by: Sami Mujawar <sami.mujawar@arm.com>
Regards,
Sami Mujawar
On 13/01/2022 04:40 PM, Rebecca Cran wrote:
> In AmlCodeGenReturn, the cast to AML_NODE_HEADER* in the call to
> AmlSetFixedArgument is redundant because ReturnNode is already a
> AML_NODE_HEADER* .
>
> Signed-off-by: Rebecca Cran <quic_rcran@quicinc.com>
> Reviewed-by: Pierre Gondois <pierre.gondois@arm.com>
> ---
> DynamicTablesPkg/Library/Common/AmlLib/CodeGen/AmlCodeGen.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/DynamicTablesPkg/Library/Common/AmlLib/CodeGen/AmlCodeGen.c b/DynamicTablesPkg/Library/Common/AmlLib/CodeGen/AmlCodeGen.c
> index d245848ce3fa..838a892c6b58 100644
> --- a/DynamicTablesPkg/Library/Common/AmlLib/CodeGen/AmlCodeGen.c
> +++ b/DynamicTablesPkg/Library/Common/AmlLib/CodeGen/AmlCodeGen.c
> @@ -1564,7 +1564,7 @@ AmlCodeGenReturn (
> Status = AmlSetFixedArgument (
> ObjectNode,
> EAmlParseIndexTerm0,
> - (AML_NODE_HEADER *)ReturnNode
> + ReturnNode
> );
> if (EFI_ERROR (Status)) {
> ASSERT (0);
IMPORTANT NOTICE: The contents of this email and any attachments are confidential and may also be privileged. If you are not the intended recipient, please notify the sender immediately and do not disclose the contents to any other person, use it for any purpose, or store or copy the information in any medium. Thank you.
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH v3 3/3] DynamicTablesPkg: Add AmlCodeGenMethodRetInteger function
2022-01-13 16:40 ` [PATCH v3 3/3] DynamicTablesPkg: Add AmlCodeGenMethodRetInteger function Rebecca Cran
@ 2022-02-02 14:53 ` Sami Mujawar
2022-02-02 15:03 ` [edk2-devel] " Rebecca Cran
0 siblings, 1 reply; 10+ messages in thread
From: Sami Mujawar @ 2022-02-02 14:53 UTC (permalink / raw)
To: Rebecca Cran, devel, PierreGondois, Alexei Fedorov, Leif Lindholm,
nd
Hi Rebecca,
Thank you for this patch.
Please find my response inline marked [SAMI].
Regards,
Sami Mujawar
On 13/01/2022 04:40 PM, Rebecca Cran wrote:
> Add AmlCodeGenMethodRetInteger function to generate AML code for
> a Method returning an Integer.
>
> Signed-off-by: Rebecca Cran <quic_rcran@quicinc.com>
> Reviewed-by: Pierre Gondois <pierre.gondois@arm.com>
> ---
> DynamicTablesPkg/Include/Library/AmlLib/AmlLib.h | 47 ++++++
> DynamicTablesPkg/Library/Common/AmlLib/CodeGen/AmlCodeGen.c | 156 ++++++++++++++++++++
> 2 files changed, 203 insertions(+)
>
> diff --git a/DynamicTablesPkg/Include/Library/AmlLib/AmlLib.h b/DynamicTablesPkg/Include/Library/AmlLib/AmlLib.h
> index 80d05f74ee69..6f214c0dfad2 100644
> --- a/DynamicTablesPkg/Include/Library/AmlLib/AmlLib.h
> +++ b/DynamicTablesPkg/Include/Library/AmlLib/AmlLib.h
> @@ -1118,6 +1118,53 @@ AmlCodeGenMethodRetNameString (
> OUT AML_OBJECT_NODE_HANDLE *NewObjectNode OPTIONAL
> );
>
> +/** AML code generation for a method returning an Integer.
> +
> + AmlCodeGenMethodRetInteger (
> + "_CBA", 0, 1, TRUE, 3, ParentNode, NewObjectNode
> + );
> + is equivalent of the following ASL code:
> + Method(_CBA, 1, Serialized, 3) {
> + Return (0)
> + }
> +
> + The ASL parameters "ReturnType" and "ParameterTypes" are not asked
> + in this function. They are optional parameters in ASL.
> +
> + @param [in] MethodNameString The new Method's name.
> + Must be a NULL-terminated ASL NameString
> + e.g.: "MET0", "_SB.MET0", etc.
> + The input string is copied.
> + @param [in] ReturnedInteger The value of the integer returned by the
> + method.
> + @param [in] NumArgs Number of arguments.
> + Must be 0 <= NumArgs <= 6.
> + @param [in] IsSerialized TRUE is equivalent to Serialized.
> + FALSE is equivalent to NotSerialized.
> + Default is NotSerialized in ASL spec.
> + @param [in] SyncLevel Synchronization level for the method.
> + Must be 0 <= SyncLevel <= 15.
> + Default is 0 in ASL.
> + @param [in] ParentNode If provided, set ParentNode as the parent
> + of the node created.
> + @param [out] NewObjectNode If success, contains the created node.
> +
> + @retval EFI_SUCCESS Success.
> + @retval EFI_INVALID_PARAMETER Invalid parameter.
> + @retval EFI_OUT_OF_RESOURCES Failed to allocate memory.
> +**/
> +EFI_STATUS
> +EFIAPI
> +AmlCodeGenMethodRetInteger (
> + IN CONST CHAR8 *MethodNameString,
> + IN UINT64 ReturnedInteger,
> + IN UINT8 NumArgs,
> + IN BOOLEAN IsSerialized,
> + IN UINT8 SyncLevel,
> + IN AML_NODE_HANDLE ParentNode OPTIONAL,
> + OUT AML_OBJECT_NODE_HANDLE *NewObjectNode OPTIONAL
> + );
> +
> /** Create a _LPI name.
>
> AmlCreateLpiNode ("_LPI", 0, 1, ParentNode, &LpiNode) is
> diff --git a/DynamicTablesPkg/Library/Common/AmlLib/CodeGen/AmlCodeGen.c b/DynamicTablesPkg/Library/Common/AmlLib/CodeGen/AmlCodeGen.c
> index 838a892c6b58..07822ead5b70 100644
> --- a/DynamicTablesPkg/Library/Common/AmlLib/CodeGen/AmlCodeGen.c
> +++ b/DynamicTablesPkg/Library/Common/AmlLib/CodeGen/AmlCodeGen.c
> @@ -1685,6 +1685,61 @@ exit_handler:
> return Status;
> }
>
> +/** AML code generation for a Return object node,
> + returning an Integer.
> +
> + AmlCodeGenReturn (0), ParentNode, NewObjectNode) is
> + equivalent of the following ASL code:
> + Return (0)
> +
> + The ACPI 6.3 specification, 20.2.8 "Statement Opcodes Encoding" states:
> + DefReturn := ReturnOp ArgObject
> + ReturnOp := 0xA4
> + ArgObject := TermArg => DataRefObject
> +
> + Thus, the ReturnNode must be evaluated as a DataRefObject.
> +
> + The ReturnNode must be generated inside a Method body scope.
> +
> + @param [in] Integer The integer is returned by the Return
> + ASL statement.
> + @param [in] ParentNode If provided, set ParentNode as the parent
> + of the node created.
> + Must be a MethodOp node.
> + @param [out] NewObjectNode If success, contains the created node.
> +
> + @retval EFI_SUCCESS Success.
> + @retval EFI_INVALID_PARAMETER Invalid parameter.
> + @retval EFI_OUT_OF_RESOURCES Failed to allocate memory.
> +**/
> +STATIC
> +EFI_STATUS
> +EFIAPI
> +AmlCodeGenReturnInteger (
> + IN UINT64 Integer,
> + IN AML_NODE_HEADER *ParentNode OPTIONAL,
> + OUT AML_OBJECT_NODE **NewObjectNode OPTIONAL
> + )
> +{
> + EFI_STATUS Status;
> + AML_OBJECT_NODE *IntNode;
> +
> + IntNode = NULL;
> +
> + Status = AmlCodeGenInteger (Integer, &IntNode);
> + ASSERT_EFI_ERROR (Status);
[SAMI] In release builds, ASSERT_EFI_ERROR() would vanish and we could
end up accessing an invalid pointer.
If you agree, I will change this to check the status and return the
error code, before merging.
[/SAMI]
> +
> + // AmlCodeGenReturn() deletes DataNode if error.
> + Status = AmlCodeGenReturn (
> + (AML_NODE_HEADER *)IntNode,
> + ParentNode,
> + NewObjectNode
> + );
> + ASSERT_EFI_ERROR (Status);
> +
> + return Status;
> +}
> +
> /** AML code generation for a method returning a NameString.
>
> AmlCodeGenMethodRetNameString (
> @@ -1793,6 +1848,107 @@ error_handler:
> return Status;
> }
>
> +/** AML code generation for a method returning an Integer.
> +
> + AmlCodeGenMethodRetInteger (
> + "_CBA", 0, 1, TRUE, 3, ParentNode, NewObjectNode
> + );
> + is equivalent of the following ASL code:
> + Method(_CBA, 1, Serialized, 3) {
> + Return (0)
> + }
> +
> + The ASL parameters "ReturnType" and "ParameterTypes" are not asked
> + in this function. They are optional parameters in ASL.
> +
> + @param [in] MethodNameString The new Method's name.
> + Must be a NULL-terminated ASL NameString
> + e.g.: "MET0", "_SB.MET0", etc.
> + The input string is copied.
> + @param [in] ReturnedInteger The value of the integer returned by the
> + method.
> + @param [in] NumArgs Number of arguments.
> + Must be 0 <= NumArgs <= 6.
> + @param [in] IsSerialized TRUE is equivalent to Serialized.
> + FALSE is equivalent to NotSerialized.
> + Default is NotSerialized in ASL spec.
> + @param [in] SyncLevel Synchronization level for the method.
> + Must be 0 <= SyncLevel <= 15.
> + Default is 0 in ASL.
> + @param [in] ParentNode If provided, set ParentNode as the parent
> + of the node created.
> + @param [out] NewObjectNode If success, contains the created node.
> +
> + @retval EFI_SUCCESS Success.
> + @retval EFI_INVALID_PARAMETER Invalid parameter.
> + @retval EFI_OUT_OF_RESOURCES Failed to allocate memory.
> +**/
> +EFI_STATUS
> +EFIAPI
> +AmlCodeGenMethodRetInteger (
> + IN CONST CHAR8 *MethodNameString,
> + IN UINT64 ReturnedInteger,
> + IN UINT8 NumArgs,
> + IN BOOLEAN IsSerialized,
> + IN UINT8 SyncLevel,
> + IN AML_NODE_HANDLE ParentNode OPTIONAL,
> + OUT AML_OBJECT_NODE_HANDLE *NewObjectNode OPTIONAL
> + )
> +{
> + EFI_STATUS Status;
> + AML_OBJECT_NODE_HANDLE MethodNode;
> +
> + if ((MethodNameString == NULL) ||
> + ((ParentNode == NULL) && (NewObjectNode == NULL)))
> + {
> + ASSERT (0);
> + return EFI_INVALID_PARAMETER;
> + }
> +
> + // Create a Method named MethodNameString.
> + Status = AmlCodeGenMethod (
> + MethodNameString,
> + NumArgs,
> + IsSerialized,
> + SyncLevel,
> + NULL,
> + &MethodNode
> + );
> + if (EFI_ERROR (Status)) {
> + ASSERT (0);
> + return Status;
> + }
> +
> + Status = AmlCodeGenReturnInteger (
> + ReturnedInteger,
> + (AML_NODE_HANDLE)MethodNode,
> + NULL
> + );
> + if (EFI_ERROR (Status)) {
> + ASSERT (0);
> + goto error_handler;
> + }
> +
> + Status = LinkNode (
> + MethodNode,
> + ParentNode,
> + NewObjectNode
> + );
> + if (EFI_ERROR (Status)) {
> + ASSERT (0);
> + goto error_handler;
> + }
> +
> + return Status;
> +
> +error_handler:
> + if (MethodNode != NULL) {
> + AmlDeleteTree ((AML_NODE_HANDLE)MethodNode);
> + }
> +
> + return Status;
> +}
> +
> /** Create a _LPI name.
>
> AmlCreateLpiNode ("_LPI", 0, 1, ParentNode, &LpiNode) is
IMPORTANT NOTICE: The contents of this email and any attachments are confidential and may also be privileged. If you are not the intended recipient, please notify the sender immediately and do not disclose the contents to any other person, use it for any purpose, or store or copy the information in any medium. Thank you.
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [edk2-devel] [PATCH v3 1/3] DynamicTablesPkg: Add Memory32Fixed function
2022-02-02 14:52 ` Sami Mujawar
@ 2022-02-02 15:03 ` Rebecca Cran
0 siblings, 0 replies; 10+ messages in thread
From: Rebecca Cran @ 2022-02-02 15:03 UTC (permalink / raw)
To: devel, sami.mujawar, PierreGondois, Alexei Fedorov, Leif Lindholm,
nd
[-- Attachment #1: Type: text/plain, Size: 948 bytes --]
On 2/2/22 07:52, Sami Mujawar wrote:
>> +AmlCodeGenRdMemory32Fixed (
>> + BOOLEAN IsReadWrite,
>> + UINT32 Address,
>> + UINT32 RangeLength,
>> + AML_OBJECT_NODE_HANDLE NameOpNode,
>> + AML_DATA_NODE_HANDLE *NewMemNode
>> + )
>> +{
>> + EFI_STATUS Status;
>> + AML_DATA_NODE *MemNode;
>> + EFI_ACPI_32_BIT_FIXED_MEMORY_RANGE_DESCRIPTOR RangeDesc;
>> +
>> + RangeDesc.Header.Header.Byte = ACPI_32_BIT_FIXED_MEMORY_RANGE_DESCRIPTOR;
>> + RangeDesc.Header.Length = 0x09;
> [SAMI] Would it be ok if I change the above line to
> RangeDesc.Header.Length = sizeof
> (EFI_ACPI_32_BIT_FIXED_MEMORY_RANGE_DESCRIPTOR) -
> sizeof (ACPI_LARGE_RESOURCE_HEADER);
> before merging?
> [/SAMI]
Yes, that would be good.
Thanks.
Rebecca Cran
[-- Attachment #2: Type: text/html, Size: 3420 bytes --]
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [edk2-devel] [PATCH v3 3/3] DynamicTablesPkg: Add AmlCodeGenMethodRetInteger function
2022-02-02 14:53 ` Sami Mujawar
@ 2022-02-02 15:03 ` Rebecca Cran
0 siblings, 0 replies; 10+ messages in thread
From: Rebecca Cran @ 2022-02-02 15:03 UTC (permalink / raw)
To: devel, sami.mujawar, PierreGondois, Alexei Fedorov, Leif Lindholm,
nd
On 2/2/22 07:53, Sami Mujawar wrote:
>> + Status = AmlCodeGenInteger (Integer, &IntNode);
>> + ASSERT_EFI_ERROR (Status);
> [SAMI] In release builds, ASSERT_EFI_ERROR() would vanish and we could
> end up accessing an invalid pointer.
> If you agree, I will change this to check the status and return the
> error code, before merging.
> [/SAMI]
Yes, please do.
Thanks.
Rebecca Cran
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH v3 0/3] Add Memory32Fixed and AmlCodeGenMethodRetInteger functions
2022-01-13 16:40 [PATCH v3 0/3] Add Memory32Fixed and AmlCodeGenMethodRetInteger functions Rebecca Cran
` (2 preceding siblings ...)
2022-01-13 16:40 ` [PATCH v3 3/3] DynamicTablesPkg: Add AmlCodeGenMethodRetInteger function Rebecca Cran
@ 2022-02-02 19:41 ` Sami Mujawar
3 siblings, 0 replies; 10+ messages in thread
From: Sami Mujawar @ 2022-02-02 19:41 UTC (permalink / raw)
To: Rebecca Cran, devel, PierreGondois, Alexei Fedorov, Leif Lindholm,
nd
For this series,
Reviewed-by: Sami Mujawar <sami.mujawar@arm.com>
Merged as 017564d637e9..33189f052783
Regards,
Sami Mujawar
On 13/01/2022 04:40 PM, Rebecca Cran wrote:
> Add functions to generate code for the Memory32Fixed ASL macro and a
> method returning an Integer.
>
> Remove a redundant cast from AmlCodeGenReturn.
>
>
> Changes from v2 to v3:
>
> o Rename function to AmlCodeGenRdMemory32Fixed.
> o Use define ACPI_32_BIT_FIXED_MEMORY_RANGE_DESCRIPTOR.
>
> Rebecca Cran (3):
> DynamicTablesPkg: Add Memory32Fixed function
> DynamicTablesPkg: Remove redundant cast in AmlCodeGenReturn
> DynamicTablesPkg: Add AmlCodeGenMethodRetInteger function
>
> DynamicTablesPkg/Include/Library/AmlLib/AmlLib.h | 80 ++++++++++
> DynamicTablesPkg/Library/Common/AmlLib/CodeGen/AmlCodeGen.c | 158 +++++++++++++++++++-
> DynamicTablesPkg/Library/Common/AmlLib/CodeGen/AmlResourceDataCodeGen.c | 57 +++++++
> 3 files changed, 294 insertions(+), 1 deletion(-)
>
IMPORTANT NOTICE: The contents of this email and any attachments are confidential and may also be privileged. If you are not the intended recipient, please notify the sender immediately and do not disclose the contents to any other person, use it for any purpose, or store or copy the information in any medium. Thank you.
^ permalink raw reply [flat|nested] 10+ messages in thread
end of thread, other threads:[~2022-02-02 19:41 UTC | newest]
Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2022-01-13 16:40 [PATCH v3 0/3] Add Memory32Fixed and AmlCodeGenMethodRetInteger functions Rebecca Cran
2022-01-13 16:40 ` [PATCH v3 1/3] DynamicTablesPkg: Add Memory32Fixed function Rebecca Cran
2022-02-02 14:52 ` Sami Mujawar
2022-02-02 15:03 ` [edk2-devel] " Rebecca Cran
2022-01-13 16:40 ` [PATCH v3 2/3] DynamicTablesPkg: Remove redundant cast in AmlCodeGenReturn Rebecca Cran
2022-02-02 14:53 ` Sami Mujawar
2022-01-13 16:40 ` [PATCH v3 3/3] DynamicTablesPkg: Add AmlCodeGenMethodRetInteger function Rebecca Cran
2022-02-02 14:53 ` Sami Mujawar
2022-02-02 15:03 ` [edk2-devel] " Rebecca Cran
2022-02-02 19:41 ` [PATCH v3 0/3] Add Memory32Fixed and AmlCodeGenMethodRetInteger functions Sami Mujawar
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox