3 Copyright (c) 2008-2009, Apple Inc. All rights reserved.
5 All rights reserved. This program and the accompanying materials
6 are licensed and made available under the terms and conditions of the BSD License
7 which accompanies this distribution. The full text of the license may be found at
8 http://opensource.org/licenses/bsd-license.php
10 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
11 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
19 CpuFlushCpuDataCache (
20 IN EFI_CPU_ARCH_PROTOCOL
*This
,
21 IN EFI_PHYSICAL_ADDRESS Start
,
23 IN EFI_CPU_FLUSH_TYPE FlushType
27 case EfiCpuFlushTypeWriteBack
:
28 WriteBackDataCacheRange((VOID
*)(UINTN
)Start
, (UINTN
)Length
);
30 case EfiCpuFlushTypeInvalidate
:
31 InvalidateDataCacheRange((VOID
*)(UINTN
)Start
, (UINTN
)Length
);
33 case EfiCpuFlushTypeWriteBackInvalidate
:
34 WriteBackInvalidateDataCacheRange((VOID
*)(UINTN
)Start
, (UINTN
)Length
);
37 return EFI_INVALID_PARAMETER
;
46 IN EFI_CPU_ARCH_PROTOCOL
*This
49 if (ArmProcessorMode() != ARM_PROCESSOR_MODE_IRQ
) {
50 ArmEnableInterrupts();
59 IN EFI_CPU_ARCH_PROTOCOL
*This
62 if (ArmProcessorMode() != ARM_PROCESSOR_MODE_IRQ
) {
63 ArmDisableInterrupts();
70 CpuGetInterruptState (
71 IN EFI_CPU_ARCH_PROTOCOL
*This
,
76 return EFI_INVALID_PARAMETER
;
79 *State
= ArmGetInterruptState();
86 IN EFI_CPU_ARCH_PROTOCOL
*This
,
87 IN EFI_CPU_INIT_TYPE InitType
90 return EFI_UNSUPPORTED
;
95 CpuRegisterInterruptHandler (
96 IN EFI_CPU_ARCH_PROTOCOL
*This
,
97 IN EFI_EXCEPTION_TYPE InterruptType
,
98 IN EFI_CPU_INTERRUPT_HANDLER InterruptHandler
101 return RegisterInterruptHandler(InterruptType
, InterruptHandler
);
107 IN EFI_CPU_ARCH_PROTOCOL
*This
,
108 IN UINT32 TimerIndex
,
109 OUT UINT64
*TimerValue
,
110 OUT UINT64
*TimerPeriod OPTIONAL
113 return EFI_UNSUPPORTED
;
118 CpuSetMemoryAttributes (
119 IN EFI_CPU_ARCH_PROTOCOL
*This
,
120 IN EFI_PHYSICAL_ADDRESS BaseAddress
,
125 return EFI_UNSUPPORTED
;
129 // Globals used to initialize the protocol
131 EFI_HANDLE mCpuHandle
= NULL
;
132 EFI_CPU_ARCH_PROTOCOL mCpu
= {
133 CpuFlushCpuDataCache
,
136 CpuGetInterruptState
,
138 CpuRegisterInterruptHandler
,
140 CpuSetMemoryAttributes
,
142 4, // DmaBufferAlignment
147 IN EFI_HANDLE ImageHandle
,
148 IN EFI_SYSTEM_TABLE
*SystemTable
151 InitializeExceptions(&mCpu
);
152 return gBS
->InstallMultipleProtocolInterfaces(&mCpuHandle
, &gEfiCpuArchProtocolGuid
, &mCpu
, NULL
);