[edk2-devel] [PATCH v5 09/38] ArmPkg/CpuDxe: Expose unified region-to-EFI attribute conversion

Ard Biesheuvel posted 38 patches 1 year, 3 months ago
[edk2-devel] [PATCH v5 09/38] ArmPkg/CpuDxe: Expose unified region-to-EFI attribute conversion
Posted by Ard Biesheuvel 1 year, 3 months ago
In preparation for introducing an implementation of the EFI memory
attributes protocol that is shared between ARM and AArch64, unify the
existing code that converts a page table descriptor into a
EFI_MEMORY_xxx bitfield, so it can be called from the generic code.

Signed-off-by: Ard Biesheuvel <ardb@kernel.org>
---
 ArmPkg/Drivers/CpuDxe/AArch64/Mmu.c | 17 +++++++++
 ArmPkg/Drivers/CpuDxe/Arm/Mmu.c     | 38 ++++++++++++++++++++
 ArmPkg/Drivers/CpuDxe/CpuDxe.h      | 14 ++++++++
 3 files changed, 69 insertions(+)

diff --git a/ArmPkg/Drivers/CpuDxe/AArch64/Mmu.c b/ArmPkg/Drivers/CpuDxe/AArch64/Mmu.c
index 8bda11f08a30..4a416743fb8a 100644
--- a/ArmPkg/Drivers/CpuDxe/AArch64/Mmu.c
+++ b/ArmPkg/Drivers/CpuDxe/AArch64/Mmu.c
@@ -83,6 +83,23 @@ PageAttributeToGcdAttribute (
   return GcdAttributes;
 }
 
+/**
+  Convert a arch specific set of page attributes into a mask
+  of EFI_MEMORY_xx constants.
+
+  @param  PageAttributes  The set of page attributes.
+
+  @retval The mask of EFI_MEMORY_xx constants.
+
+**/
+UINT64
+RegionAttributeToGcdAttribute (
+  IN UINTN  PageAttributes
+  )
+{
+  return PageAttributeToGcdAttribute (PageAttributes);
+}
+
 STATIC
 UINT64
 GetFirstPageAttribute (
diff --git a/ArmPkg/Drivers/CpuDxe/Arm/Mmu.c b/ArmPkg/Drivers/CpuDxe/Arm/Mmu.c
index 07faab8216ec..8e0dd5d2aaca 100644
--- a/ArmPkg/Drivers/CpuDxe/Arm/Mmu.c
+++ b/ArmPkg/Drivers/CpuDxe/Arm/Mmu.c
@@ -13,6 +13,15 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
 #include <Library/MemoryAllocationLib.h>
 #include "CpuDxe.h"
 
+/**
+  Convert a set of ARM short descriptor section attributes into a mask
+  of EFI_MEMORY_xx constants.
+
+  @param  SectionAttributes   The set of page attributes.
+  @param  GcdAttributes       Pointer to the return value.
+
+**/
+STATIC
 EFI_STATUS
 SectionToGcdAttributes (
   IN  UINT32  SectionAttributes,
@@ -74,6 +83,35 @@ SectionToGcdAttributes (
   return EFI_SUCCESS;
 }
 
+/**
+  Convert a arch specific set of page attributes into a mask
+  of EFI_MEMORY_xx constants.
+
+  @param  PageAttributes  The set of page attributes.
+
+  @retval The mask of EFI_MEMORY_xx constants.
+
+**/
+UINT64
+RegionAttributeToGcdAttribute (
+  IN UINTN  PageAttributes
+  )
+{
+  UINT64  Result;
+
+  SectionToGcdAttributes (PageAttributes, &Result);
+  return Result;
+}
+
+/**
+  Convert a set of ARM short descriptor page attributes into a mask
+  of EFI_MEMORY_xx constants.
+
+  @param  PageAttributes      The set of page attributes.
+  @param  GcdAttributes       Pointer to the return value.
+
+**/
+STATIC
 EFI_STATUS
 PageToGcdAttributes (
   IN  UINT32  PageAttributes,
diff --git a/ArmPkg/Drivers/CpuDxe/CpuDxe.h b/ArmPkg/Drivers/CpuDxe/CpuDxe.h
index ff672390ce51..8cb105dcc841 100644
--- a/ArmPkg/Drivers/CpuDxe/CpuDxe.h
+++ b/ArmPkg/Drivers/CpuDxe/CpuDxe.h
@@ -126,4 +126,18 @@ SetGcdMemorySpaceAttributes (
   IN UINT64                           Attributes
   );
 
+/**
+  Convert a arch specific set of page attributes into a mask
+  of EFI_MEMORY_xx constants.
+
+  @param  PageAttributes  The set of page attributes.
+
+  @retval The mask of EFI_MEMORY_xx constants.
+
+**/
+UINT64
+RegionAttributeToGcdAttribute (
+  IN UINTN  PageAttributes
+  );
+
 #endif // CPU_DXE_H_
-- 
2.39.2



-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#101113): https://edk2.groups.io/g/devel/message/101113
Mute This Topic: https://groups.io/mt/97585996/1787277
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org]
-=-=-=-=-=-=-=-=-=-=-=-
Re: [edk2-devel] [PATCH v5 09/38] ArmPkg/CpuDxe: Expose unified region-to-EFI attribute conversion
Posted by Leif Lindholm 1 year, 3 months ago
On Mon, Mar 13, 2023 at 18:16:45 +0100, Ard Biesheuvel wrote:
> In preparation for introducing an implementation of the EFI memory
> attributes protocol that is shared between ARM and AArch64, unify the
> existing code that converts a page table descriptor into a
> EFI_MEMORY_xxx bitfield, so it can be called from the generic code.

Two bits of nitpicking:
1) You use _xxx from here and _xx in the comments below.

> 
> Signed-off-by: Ard Biesheuvel <ardb@kernel.org>
> ---
>  ArmPkg/Drivers/CpuDxe/AArch64/Mmu.c | 17 +++++++++
>  ArmPkg/Drivers/CpuDxe/Arm/Mmu.c     | 38 ++++++++++++++++++++
>  ArmPkg/Drivers/CpuDxe/CpuDxe.h      | 14 ++++++++
>  3 files changed, 69 insertions(+)
> 
> diff --git a/ArmPkg/Drivers/CpuDxe/AArch64/Mmu.c b/ArmPkg/Drivers/CpuDxe/AArch64/Mmu.c
> index 8bda11f08a30..4a416743fb8a 100644
> --- a/ArmPkg/Drivers/CpuDxe/AArch64/Mmu.c
> +++ b/ArmPkg/Drivers/CpuDxe/AArch64/Mmu.c
> @@ -83,6 +83,23 @@ PageAttributeToGcdAttribute (
>    return GcdAttributes;
>  }
>  
> +/**
> +  Convert a arch specific set of page attributes into a mask

"an arch"
(and again x2 below)

Reviewed-by: Leif Lindholm <quic_llindhol@quicinc.com>

> +  of EFI_MEMORY_xx constants.
> +
> +  @param  PageAttributes  The set of page attributes.
> +
> +  @retval The mask of EFI_MEMORY_xx constants.
> +
> +**/
> +UINT64
> +RegionAttributeToGcdAttribute (
> +  IN UINTN  PageAttributes
> +  )
> +{
> +  return PageAttributeToGcdAttribute (PageAttributes);
> +}
> +
>  STATIC
>  UINT64
>  GetFirstPageAttribute (
> diff --git a/ArmPkg/Drivers/CpuDxe/Arm/Mmu.c b/ArmPkg/Drivers/CpuDxe/Arm/Mmu.c
> index 07faab8216ec..8e0dd5d2aaca 100644
> --- a/ArmPkg/Drivers/CpuDxe/Arm/Mmu.c
> +++ b/ArmPkg/Drivers/CpuDxe/Arm/Mmu.c
> @@ -13,6 +13,15 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
>  #include <Library/MemoryAllocationLib.h>
>  #include "CpuDxe.h"
>  
> +/**
> +  Convert a set of ARM short descriptor section attributes into a mask
> +  of EFI_MEMORY_xx constants.
> +
> +  @param  SectionAttributes   The set of page attributes.
> +  @param  GcdAttributes       Pointer to the return value.
> +
> +**/
> +STATIC
>  EFI_STATUS
>  SectionToGcdAttributes (
>    IN  UINT32  SectionAttributes,
> @@ -74,6 +83,35 @@ SectionToGcdAttributes (
>    return EFI_SUCCESS;
>  }
>  
> +/**
> +  Convert a arch specific set of page attributes into a mask
> +  of EFI_MEMORY_xx constants.
> +
> +  @param  PageAttributes  The set of page attributes.
> +
> +  @retval The mask of EFI_MEMORY_xx constants.
> +
> +**/
> +UINT64
> +RegionAttributeToGcdAttribute (
> +  IN UINTN  PageAttributes
> +  )
> +{
> +  UINT64  Result;
> +
> +  SectionToGcdAttributes (PageAttributes, &Result);
> +  return Result;
> +}
> +
> +/**
> +  Convert a set of ARM short descriptor page attributes into a mask
> +  of EFI_MEMORY_xx constants.
> +
> +  @param  PageAttributes      The set of page attributes.
> +  @param  GcdAttributes       Pointer to the return value.
> +
> +**/
> +STATIC
>  EFI_STATUS
>  PageToGcdAttributes (
>    IN  UINT32  PageAttributes,
> diff --git a/ArmPkg/Drivers/CpuDxe/CpuDxe.h b/ArmPkg/Drivers/CpuDxe/CpuDxe.h
> index ff672390ce51..8cb105dcc841 100644
> --- a/ArmPkg/Drivers/CpuDxe/CpuDxe.h
> +++ b/ArmPkg/Drivers/CpuDxe/CpuDxe.h
> @@ -126,4 +126,18 @@ SetGcdMemorySpaceAttributes (
>    IN UINT64                           Attributes
>    );
>  
> +/**
> +  Convert a arch specific set of page attributes into a mask
> +  of EFI_MEMORY_xx constants.
> +
> +  @param  PageAttributes  The set of page attributes.
> +
> +  @retval The mask of EFI_MEMORY_xx constants.
> +
> +**/
> +UINT64
> +RegionAttributeToGcdAttribute (
> +  IN UINTN  PageAttributes
> +  );
> +
>  #endif // CPU_DXE_H_
> -- 
> 2.39.2
> 
> 
> 
> 
> 
> 


-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#101241): https://edk2.groups.io/g/devel/message/101241
Mute This Topic: https://groups.io/mt/97585996/1787277
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/leave/3901457/1787277/102458076/xyzzy [importer@patchew.org]
-=-=-=-=-=-=-=-=-=-=-=-