]> git.proxmox.com Git - mirror_edk2.git/blobdiff - ArmPkg/Drivers/CpuDxe/CpuDxe.c
Fixed a bug in the HardwareInterrupt handler that would blow the stack if you reenabl...
[mirror_edk2.git] / ArmPkg / Drivers / CpuDxe / CpuDxe.c
index c57dac2f74fdffcd38b7f8922c9d7a1a279fba68..d3f0ff505dc98442b8fae8baf2c602f79c345d2c 100644 (file)
@@ -14,6 +14,8 @@
 \r
 #include "CpuDxe.h"\r
 \r
+BOOLEAN mInterruptState   = FALSE;\r
+\r
 EFI_STATUS\r
 EFIAPI\r
 CpuFlushCpuDataCache (\r
@@ -25,13 +27,13 @@ CpuFlushCpuDataCache (
 {\r
   switch (FlushType) {\r
     case EfiCpuFlushTypeWriteBack:\r
-      WriteBackDataCacheRange((VOID *)(UINTN)Start, (UINTN)Length);\r
+      WriteBackDataCacheRange ((VOID *)(UINTN)Start, (UINTN)Length);\r
       break;\r
     case EfiCpuFlushTypeInvalidate:\r
-      InvalidateDataCacheRange((VOID *)(UINTN)Start, (UINTN)Length);\r
+      InvalidateDataCacheRange ((VOID *)(UINTN)Start, (UINTN)Length);\r
       break;\r
     case EfiCpuFlushTypeWriteBackInvalidate:\r
-      WriteBackInvalidateDataCacheRange((VOID *)(UINTN)Start, (UINTN)Length);\r
+      WriteBackInvalidateDataCacheRange ((VOID *)(UINTN)Start, (UINTN)Length);\r
       break;\r
     default:\r
       return EFI_INVALID_PARAMETER;\r
@@ -46,9 +48,9 @@ CpuEnableInterrupt (
   IN EFI_CPU_ARCH_PROTOCOL          *This\r
   )\r
 {\r
-  if (ArmProcessorMode() != ARM_PROCESSOR_MODE_IRQ) {\r
-    ArmEnableInterrupts(); \r
-  }\r
+  ArmEnableInterrupts ();\r
+\r
+  mInterruptState  = TRUE;\r
   return EFI_SUCCESS;\r
 }\r
 \r
@@ -59,9 +61,9 @@ CpuDisableInterrupt (
   IN EFI_CPU_ARCH_PROTOCOL          *This\r
   )\r
 {\r
-  if (ArmProcessorMode() != ARM_PROCESSOR_MODE_IRQ) {\r
-    ArmDisableInterrupts();\r
-  }\r
+  ArmDisableInterrupts ();\r
+\r
+  mInterruptState = FALSE;\r
   return EFI_SUCCESS;\r
 }\r
 \r
@@ -76,7 +78,7 @@ CpuGetInterruptState (
     return EFI_INVALID_PARAMETER;\r
   }\r
 \r
-  *State = ArmGetInterruptState();\r
+  *State = mInterruptState;\r
   return EFI_SUCCESS;\r
 }\r
 \r
@@ -98,7 +100,7 @@ CpuRegisterInterruptHandler (
   IN EFI_CPU_INTERRUPT_HANDLER      InterruptHandler\r
   )\r
 {\r
-  return RegisterInterruptHandler(InterruptType, InterruptHandler);\r
+  return RegisterInterruptHandler (InterruptType, InterruptHandler);\r
 }\r
 \r
 EFI_STATUS\r
@@ -147,8 +149,8 @@ CpuDxeInitialize (
   IN EFI_HANDLE         ImageHandle,\r
   IN EFI_SYSTEM_TABLE   *SystemTable\r
   )\r
-{\r
-  InitializeExceptions(&mCpu);  \r
-  return gBS->InstallMultipleProtocolInterfaces(&mCpuHandle, &gEfiCpuArchProtocolGuid, &mCpu, NULL);\r
+{ \r
+  InitializeExceptions (&mCpu);  \r
+  return gBS->InstallMultipleProtocolInterfaces (&mCpuHandle, &gEfiCpuArchProtocolGuid, &mCpu, NULL);\r
 }\r
 \r