Instead of inferring the GIC revision from the CPU id registers
and the presence/availability of the system register interface
upon each invocation, move the logic to a constructor and cache
the result.
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
Reviewed-by: Laszlo Ersek <lersek@redhat.com>
Reviewed-by: Leif Lindholm <leif.lindholm@linaro.org>
Tested-by: Leif Lindholm <leif.lindholm@linaro.org>
git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@18100
6f19259b-4bc3-4df7-8a09-
765794883524
#include <Library/ArmLib.h>\r
#include <Library/ArmGicLib.h>\r
\r
-ARM_GIC_ARCH_REVISION\r
+STATIC ARM_GIC_ARCH_REVISION mGicArchRevision;\r
+\r
+RETURN_STATUS\r
EFIAPI\r
-ArmGicGetSupportedArchRevision (\r
+ArmGicArchLibInitialize (\r
VOID\r
)\r
{\r
IccSre = ArmGicV3GetControlSystemRegisterEnable ();\r
}\r
if (IccSre & ICC_SRE_EL2_SRE) {\r
- return ARM_GIC_ARCH_REVISION_3;\r
+ mGicArchRevision = ARM_GIC_ARCH_REVISION_3;\r
+ goto Done;\r
}\r
}\r
\r
- return ARM_GIC_ARCH_REVISION_2;\r
+ mGicArchRevision = ARM_GIC_ARCH_REVISION_2;\r
+\r
+Done:\r
+ return RETURN_SUCCESS;\r
+}\r
+\r
+ARM_GIC_ARCH_REVISION\r
+EFIAPI\r
+ArmGicGetSupportedArchRevision (\r
+ VOID\r
+ )\r
+{\r
+ return mGicArchRevision;\r
}\r
#include <Library/ArmLib.h>\r
#include <Library/ArmGicLib.h>\r
\r
-ARM_GIC_ARCH_REVISION\r
+STATIC ARM_GIC_ARCH_REVISION mGicArchRevision;\r
+\r
+RETURN_STATUS\r
EFIAPI\r
-ArmGicGetSupportedArchRevision (\r
+ArmGicArchLibInitialize (\r
VOID\r
)\r
{\r
IccSre = ArmGicV3GetControlSystemRegisterEnable ();\r
}\r
if (IccSre & ICC_SRE_EL2_SRE) {\r
- return ARM_GIC_ARCH_REVISION_3;\r
+ mGicArchRevision = ARM_GIC_ARCH_REVISION_3;\r
+ goto Done;\r
}\r
}\r
\r
- return ARM_GIC_ARCH_REVISION_2;\r
+ mGicArchRevision = ARM_GIC_ARCH_REVISION_2;\r
+\r
+Done:\r
+ return RETURN_SUCCESS;\r
+}\r
+\r
+ARM_GIC_ARCH_REVISION\r
+EFIAPI\r
+ArmGicGetSupportedArchRevision (\r
+ VOID\r
+ )\r
+{\r
+ return mGicArchRevision;\r
}\r
FILE_GUID = cd67f41a-26e9-4482-90c9-a9aff803382a\r
MODULE_TYPE = BASE\r
VERSION_STRING = 1.0\r
- LIBRARY_CLASS = ArmGicArchLib\r
+ LIBRARY_CLASS = ArmGicArchLib|DXE_DRIVER UEFI_DRIVER UEFI_APPLICATION\r
+ CONSTRUCTOR = ArmGicArchLibInitialize\r
\r
[Sources.ARM]\r
Arm/ArmGicArchLib.c\r