}\r
}\r
\r
+VOID\r
+EFIAPI\r
+ArmGicSetInterruptPriority (\r
+ IN UINTN GicDistributorBase,\r
+ IN UINTN GicRedistributorBase,\r
+ IN UINTN Source,\r
+ IN UINTN Priority\r
+ )\r
+{\r
+ UINT32 RegOffset;\r
+ UINTN RegShift;\r
+ ARM_GIC_ARCH_REVISION Revision;\r
+ UINTN GicCpuRedistributorBase;\r
+\r
+ // Calculate register offset and bit position\r
+ RegOffset = Source / 4;\r
+ RegShift = (Source % 4) * 8;\r
+\r
+ Revision = ArmGicGetSupportedArchRevision ();\r
+ if ((Revision == ARM_GIC_ARCH_REVISION_2) ||\r
+ FeaturePcdGet (PcdArmGicV3WithV2Legacy) ||\r
+ SourceIsSpi (Source)) {\r
+ MmioAndThenOr32 (\r
+ GicDistributorBase + ARM_GIC_ICDIPR + (4 * RegOffset),\r
+ ~(0xff << RegShift),\r
+ Priority << RegShift\r
+ );\r
+ } else {\r
+ GicCpuRedistributorBase = GicGetCpuRedistributorBase (\r
+ GicRedistributorBase,\r
+ Revision\r
+ );\r
+ if (GicCpuRedistributorBase == 0) {\r
+ return;\r
+ }\r
+\r
+ MmioAndThenOr32 (\r
+ GicCpuRedistributorBase + ARM_GIC_ICDIPR + (4 * RegOffset),\r
+ ~(0xff << RegShift),\r
+ Priority << RegShift\r
+ );\r
+ }\r
+}\r
+\r
VOID\r
EFIAPI\r
ArmGicEnableInterrupt (\r
IN INTN PriorityMask\r
);\r
\r
+VOID\r
+EFIAPI\r
+ArmGicSetInterruptPriority (\r
+ IN UINTN GicDistributorBase,\r
+ IN UINTN GicRedistributorBase,\r
+ IN UINTN Source,\r
+ IN UINTN Priority\r
+ );\r
+\r
VOID\r
EFIAPI\r
ArmGicEnableInterrupt (\r