16BOOLEAN mIsFlushingGCD;
19STATIC BOOLEAN mInterruptsEnabled;
20STATIC VOID *mHardwareInterruptProtocolNotifyEventRegistration;
32 mInterruptsEnabled =
TRUE;
47 mInterruptsEnabled =
FALSE;
64 return EFI_INVALID_PARAMETER;
67 *State = mInterruptsEnabled;
109 case EfiCpuFlushTypeWriteBack:
112 case EfiCpuFlushTypeInvalidate:
115 case EfiCpuFlushTypeWriteBackInvalidate:
119 return EFI_INVALID_PARAMETER;
141 ArmEnableInterrupts ();
162 ArmDisableInterrupts ();
189 return EFI_INVALID_PARAMETER;
192 *State = ArmGetInterruptState ();
220 return EFI_UNSUPPORTED;
240 IN UINT32 TimerIndex,
241 OUT UINT64 *TimerValue,
242 OUT UINT64 *TimerPeriod OPTIONAL
245 return EFI_UNSUPPORTED;
289 CpuArchProtocol->DmaBufferAlignment = ArmCacheWritebackGranule ();
307 UINTN DescriptorSize;
308 UINT32 DescriptorVersion;
315 if ((
PcdGet64 (PcdDxeNxMemoryProtectionPolicy) & TestBit) == 0) {
322 Status =
gBS->GetMemoryMap (
329 ASSERT (Status == EFI_BUFFER_TOO_SMALL);
332 ASSERT (MemoryMap !=
NULL);
333 Status =
gBS->GetMemoryMap (
340 if (EFI_ERROR (Status)) {
343 }
while (Status == EFI_BUFFER_TOO_SMALL);
347 MemoryMapEntry = MemoryMap;
349 while ((
UINTN)MemoryMapEntry < (
UINTN)MemoryMapEnd) {
359 MemoryMapEntry = NEXT_MEMORY_DESCRIPTOR (MemoryMapEntry, DescriptorSize);
366HardwareInterruptProtocolNotify (
374 Status =
gBS->LocateProtocol (&gHardwareInterruptProtocolGuid,
NULL, &Protocol);
375 if (EFI_ERROR (Status)) {
390 if (mInterruptsEnabled) {
391 ArmEnableInterrupts ();
394 gBS->CloseEvent (Event);
407 ArmDisableInterrupts ();
408 InitializeExceptions ();
410 InitializeDma (&mCpu);
428 Status =
gBS->InstallMultipleProtocolInterfaces (
430 &gEfiCpuArchProtocolGuid,
432 &gEfiMemoryAttributeProtocolGuid,
436 if (EFI_ERROR (Status)) {
446 mIsFlushingGCD =
TRUE;
447 SyncCacheConfig (&mCpu);
448 mIsFlushingGCD =
FALSE;
453 Status =
gBS->CreateEventEx (
469 &gHardwareInterruptProtocolGuid,
471 HardwareInterruptProtocolNotify,
473 &mHardwareInterruptProtocolNotifyEventRegistration
VOID *EFIAPI WriteBackDataCacheRange(IN VOID *Address, IN UINTN Length)
VOID *EFIAPI InvalidateDataCacheRange(IN VOID *Address, IN UINTN Length)
VOID *EFIAPI WriteBackInvalidateDataCacheRange(IN VOID *Address, IN UINTN Length)
EFI_STATUS ArmSetMemoryAttributes(IN EFI_PHYSICAL_ADDRESS BaseAddress, IN UINT64 Length, IN UINT64 Attributes, IN UINT64 AttributeMask)
STATIC EFI_STATUS EFIAPI CpuDisableInterrupt(IN EFI_CPU_ARCH_PROTOCOL *This)
STATIC EFI_STATUS EFIAPI CpuFlushCpuDataCache(IN EFI_CPU_ARCH_PROTOCOL *This, IN EFI_PHYSICAL_ADDRESS Start, IN UINT64 Length, IN EFI_CPU_FLUSH_TYPE FlushType)
STATIC EFI_STATUS EFIAPI CpuRegisterInterruptHandler(IN EFI_CPU_ARCH_PROTOCOL *This, IN EFI_EXCEPTION_TYPE InterruptType, IN EFI_CPU_INTERRUPT_HANDLER InterruptHandler)
STATIC EFI_STATUS EFIAPI CpuShadowDisableInterrupt(IN EFI_CPU_ARCH_PROTOCOL *This)
STATIC VOID EFIAPI IdleLoopEventCallback(IN EFI_EVENT Event, IN VOID *Context)
STATIC EFI_STATUS EFIAPI CpuEnableInterrupt(IN EFI_CPU_ARCH_PROTOCOL *This)
STATIC EFI_STATUS EFIAPI CpuGetInterruptState(IN EFI_CPU_ARCH_PROTOCOL *This, OUT BOOLEAN *State)
STATIC VOID RemapUnusedMemoryNx(VOID)
STATIC EFI_STATUS EFIAPI CpuShadowGetInterruptState(IN EFI_CPU_ARCH_PROTOCOL *This, OUT BOOLEAN *State)
STATIC EFI_STATUS EFIAPI CpuShadowEnableInterrupt(IN EFI_CPU_ARCH_PROTOCOL *This)
STATIC EFI_STATUS EFIAPI CpuInit(IN EFI_CPU_ARCH_PROTOCOL *This, IN EFI_CPU_INIT_TYPE InitType)
STATIC EFI_STATUS EFIAPI CpuGetTimerValue(IN EFI_CPU_ARCH_PROTOCOL *This, IN UINT32 TimerIndex, OUT UINT64 *TimerValue, OUT UINT64 *TimerPeriod OPTIONAL)
EFI_STATUS EFIAPI CpuSetMemoryAttributes(IN EFI_CPU_ARCH_PROTOCOL *This, IN EFI_PHYSICAL_ADDRESS BaseAddress, IN UINT64 Length, IN UINT64 Attributes)
EFI_STATUS RegisterInterruptHandler(IN EFI_EXCEPTION_TYPE InterruptType, IN EFI_CPU_INTERRUPT_HANDLER InterruptHandler)
UINT64 EFIAPI LShiftU64(IN UINT64 Operand, IN UINTN Count)
VOID(EFIAPI * EFI_CPU_INTERRUPT_HANDLER)(IN CONST EFI_EXCEPTION_TYPE InterruptType, IN CONST EFI_SYSTEM_CONTEXT SystemContext)
VOID EFIAPI CpuSleep(VOID)
VOID EFIAPI FreePool(IN VOID *Buffer)
#define ASSERT_EFI_ERROR(StatusParameter)
#define PcdGet64(TokenName)
#define FeaturePcdGet(TokenName)
VOID *EFIAPI AllocatePool(IN UINTN AllocationSize)
UINT64 EFI_PHYSICAL_ADDRESS
#define EFI_PAGES_TO_SIZE(Pages)
EFI_EVENT EFIAPI EfiCreateProtocolNotifyEvent(IN EFI_GUID *ProtocolGuid, IN EFI_TPL NotifyTpl, IN EFI_EVENT_NOTIFY NotifyFunction, IN VOID *NotifyContext OPTIONAL, OUT VOID **Registration)
EFI_PHYSICAL_ADDRESS PhysicalStart