]> git.proxmox.com Git - mirror_edk2.git/commitdiff
DynamicTablesPkg: Add Memory32Fixed function
authorRebecca Cran <quic_rcran@quicinc.com>
Thu, 13 Jan 2022 16:40:50 +0000 (09:40 -0700)
committermergify[bot] <37929162+mergify[bot]@users.noreply.github.com>
Wed, 2 Feb 2022 18:38:55 +0000 (18:38 +0000)
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>
Reviewed-by: Sami Mujawar <sami.mujawar@arm.com>
DynamicTablesPkg/Include/Library/AmlLib/AmlLib.h
DynamicTablesPkg/Library/Common/AmlLib/CodeGen/AmlResourceDataCodeGen.c

index af18bf8e487182739b2a4ec16cea53a2956c12cc..80d05f74ee69e216cd73d8f5524975456458e151 100644 (file)
@@ -592,6 +592,39 @@ AmlCodeGenRdDWordMemory (
   OUT       AML_DATA_NODE_HANDLE    *NewRdNode  OPTIONAL\r
   );\r
 \r
+/** Code generation for the "Memory32Fixed ()" ASL macro.\r
+\r
+  The Resource Data effectively created is a 32-bit Memory Resource\r
+  Data. Cf ACPI 6.4:\r
+   - s19.6.83 "Memory Resource Descriptor Macro".\r
+   - s19.2.8 "Memory32FixedTerm".\r
+\r
+  See ACPI 6.4 spec, s19.2.8 for more.\r
+\r
+  @param [in]  IsReadWrite          ReadAndWrite parameter.\r
+  @param [in]  Address              AddressBase parameter.\r
+  @param [in]  RangeLength          Range length.\r
+  @param [in]  NameOpNode           NameOp object node defining a named object.\r
+                                    If provided, append the new resource data\r
+                                    node to the list of resource data elements\r
+                                    of this node.\r
+  @param [out] NewMemNode           If provided and success,\r
+                                    contain the created node.\r
+\r
+  @retval EFI_SUCCESS             The function completed successfully.\r
+  @retval EFI_INVALID_PARAMETER   Invalid parameter.\r
+  @retval EFI_OUT_OF_RESOURCES    Could not allocate memory.\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+AmlCodeGenRdMemory32Fixed (\r
+  BOOLEAN                 IsReadWrite,\r
+  UINT32                  Address,\r
+  UINT32                  RangeLength,\r
+  AML_OBJECT_NODE_HANDLE  NameOpNode,\r
+  AML_DATA_NODE_HANDLE    *NewMemNode\r
+  );\r
+\r
 /** Code generation for the "WordBusNumber ()" ASL function.\r
 \r
   The Resource Data effectively created is a Word Address Space Resource\r
index 40d8c2b07ae3b5523120a0f2c3e8622b6440451d..dafbd19fde153a9c36aabb03fad7ecf4e62e4e4c 100644 (file)
@@ -609,6 +609,64 @@ AmlCodeGenRdDWordMemory (
            );\r
 }\r
 \r
+/** Code generation for the "Memory32Fixed ()" ASL macro.\r
+\r
+  The Resource Data effectively created is a 32-bit Memory Resource\r
+  Data. Cf ACPI 6.4:\r
+   - s19.6.83 "Memory Resource Descriptor Macro".\r
+   - s19.2.8 "Memory32FixedTerm".\r
+\r
+  See ACPI 6.4 spec, s19.2.8 for more.\r
+\r
+  @param [in]  IsReadWrite          ReadAndWrite parameter.\r
+  @param [in]  Addres               AddressBase parameter.\r
+  @param [in]  RangeLength          Range length.\r
+  @param [in]  NameOpNode           NameOp object node defining a named object.\r
+                                    If provided, append the new resource data\r
+                                    node to the list of resource data elements\r
+                                    of this node.\r
+  @param [out] NewMemNode           If provided and success,\r
+                                    contain the created node.\r
+\r
+  @retval EFI_SUCCESS             The function completed successfully.\r
+  @retval EFI_INVALID_PARAMETER   Invalid parameter.\r
+  @retval EFI_OUT_OF_RESOURCES    Could not allocate memory.\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+AmlCodeGenRdMemory32Fixed (\r
+  BOOLEAN                 IsReadWrite,\r
+  UINT32                  Address,\r
+  UINT32                  RangeLength,\r
+  AML_OBJECT_NODE_HANDLE  NameOpNode,\r
+  AML_DATA_NODE_HANDLE    *NewMemNode\r
+  )\r
+{\r
+  EFI_STATUS                                     Status;\r
+  AML_DATA_NODE                                  *MemNode;\r
+  EFI_ACPI_32_BIT_FIXED_MEMORY_RANGE_DESCRIPTOR  RangeDesc;\r
+\r
+  RangeDesc.Header.Header.Byte = ACPI_32_BIT_FIXED_MEMORY_RANGE_DESCRIPTOR;\r
+  RangeDesc.Header.Length      = sizeof (EFI_ACPI_32_BIT_FIXED_MEMORY_RANGE_DESCRIPTOR) -\r
+                                 sizeof (ACPI_LARGE_RESOURCE_HEADER);\r
+  RangeDesc.Information = IsReadWrite ? BIT0 : 0;\r
+  RangeDesc.BaseAddress = Address;\r
+  RangeDesc.Length      = RangeLength;\r
+\r
+  Status = AmlCreateDataNode (\r
+             EAmlNodeDataTypeResourceData,\r
+             (UINT8 *)&RangeDesc,\r
+             sizeof (RangeDesc),\r
+             &MemNode\r
+             );\r
+  if (EFI_ERROR (Status)) {\r
+    ASSERT (0);\r
+    return Status;\r
+  }\r
+\r
+  return LinkRdNode (MemNode, NameOpNode, NewMemNode);\r
+}\r
+\r
 /** Code generation for the "WordSpace ()" ASL function.\r
 \r
   The Resource Data effectively created is a Word Address Space Resource\r