diff options
author | AJFISH <AJFISH@6f19259b-4bc3-4df7-8a09-765794883524> | 2010-01-08 21:12:20 +0000 |
---|---|---|
committer | AJFISH <AJFISH@6f19259b-4bc3-4df7-8a09-765794883524> | 2010-01-08 21:12:20 +0000 |
commit | 8a4d81e693ac9b47eda7dc276f5384f35f921328 (patch) | |
tree | a060ba1f9dc965c96cf7a015c2394150d1933320 /ArmPkg/Drivers/CpuDxe/CpuDxe.c | |
parent | 05d612fd39430f73c44c9ec8ad0aba7fc4170caa (diff) | |
download | edk2-8a4d81e693ac9b47eda7dc276f5384f35f921328.zip edk2-8a4d81e693ac9b47eda7dc276f5384f35f921328.tar.gz edk2-8a4d81e693ac9b47eda7dc276f5384f35f921328.tar.bz2 |
Adding support for a single stack, GCC check in will follow
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@9697 6f19259b-4bc3-4df7-8a09-765794883524
Diffstat (limited to 'ArmPkg/Drivers/CpuDxe/CpuDxe.c')
-rw-r--r-- | ArmPkg/Drivers/CpuDxe/CpuDxe.c | 31 |
1 files changed, 19 insertions, 12 deletions
diff --git a/ArmPkg/Drivers/CpuDxe/CpuDxe.c b/ArmPkg/Drivers/CpuDxe/CpuDxe.c index c57dac2..2b43d2a 100644 --- a/ArmPkg/Drivers/CpuDxe/CpuDxe.c +++ b/ArmPkg/Drivers/CpuDxe/CpuDxe.c @@ -14,6 +14,9 @@ #include "CpuDxe.h"
+BOOLEAN gExceptionContext = FALSE;
+BOOLEAN mInterruptState = FALSE;
+
EFI_STATUS
EFIAPI
CpuFlushCpuDataCache (
@@ -25,13 +28,13 @@ CpuFlushCpuDataCache ( {
switch (FlushType) {
case EfiCpuFlushTypeWriteBack:
- WriteBackDataCacheRange((VOID *)(UINTN)Start, (UINTN)Length);
+ WriteBackDataCacheRange ((VOID *)(UINTN)Start, (UINTN)Length);
break;
case EfiCpuFlushTypeInvalidate:
- InvalidateDataCacheRange((VOID *)(UINTN)Start, (UINTN)Length);
+ InvalidateDataCacheRange ((VOID *)(UINTN)Start, (UINTN)Length);
break;
case EfiCpuFlushTypeWriteBackInvalidate:
- WriteBackInvalidateDataCacheRange((VOID *)(UINTN)Start, (UINTN)Length);
+ WriteBackInvalidateDataCacheRange ((VOID *)(UINTN)Start, (UINTN)Length);
break;
default:
return EFI_INVALID_PARAMETER;
@@ -46,9 +49,11 @@ CpuEnableInterrupt ( IN EFI_CPU_ARCH_PROTOCOL *This
)
{
- if (ArmProcessorMode() != ARM_PROCESSOR_MODE_IRQ) {
- ArmEnableInterrupts();
+ if (!gExceptionContext) {
+ ArmEnableInterrupts ();
}
+
+ mInterruptState = TRUE;
return EFI_SUCCESS;
}
@@ -59,9 +64,11 @@ CpuDisableInterrupt ( IN EFI_CPU_ARCH_PROTOCOL *This
)
{
- if (ArmProcessorMode() != ARM_PROCESSOR_MODE_IRQ) {
- ArmDisableInterrupts();
+ if (!gExceptionContext) {
+ ArmDisableInterrupts ();
}
+
+ mInterruptState = FALSE;
return EFI_SUCCESS;
}
@@ -76,7 +83,7 @@ CpuGetInterruptState ( return EFI_INVALID_PARAMETER;
}
- *State = ArmGetInterruptState();
+ *State = mInterruptState;
return EFI_SUCCESS;
}
@@ -98,7 +105,7 @@ CpuRegisterInterruptHandler ( IN EFI_CPU_INTERRUPT_HANDLER InterruptHandler
)
{
- return RegisterInterruptHandler(InterruptType, InterruptHandler);
+ return RegisterInterruptHandler (InterruptType, InterruptHandler);
}
EFI_STATUS
@@ -147,8 +154,8 @@ CpuDxeInitialize ( IN EFI_HANDLE ImageHandle,
IN EFI_SYSTEM_TABLE *SystemTable
)
-{
- InitializeExceptions(&mCpu);
- return gBS->InstallMultipleProtocolInterfaces(&mCpuHandle, &gEfiCpuArchProtocolGuid, &mCpu, NULL);
+{
+ InitializeExceptions (&mCpu);
+ return gBS->InstallMultipleProtocolInterfaces (&mCpuHandle, &gEfiCpuArchProtocolGuid, &mCpu, NULL);
}
|