]> git.proxmox.com Git - mirror_edk2.git/blame - ArmPkg/Drivers/CpuDxe/CpuDxe.c
Adding support for BeagleBoard.
[mirror_edk2.git] / ArmPkg / Drivers / CpuDxe / CpuDxe.c
CommitLineData
2ef2b01e
A
1/** @file\r
2\r
3 Copyright (c) 2008-2009, Apple Inc. All rights reserved.\r
4 \r
5 All rights reserved. This program and the accompanying materials\r
6 are licensed and made available under the terms and conditions of the BSD License\r
7 which accompanies this distribution. The full text of the license may be found at\r
8 http://opensource.org/licenses/bsd-license.php\r
9\r
10 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
11 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
12\r
13**/\r
14\r
15#include "CpuDxe.h"\r
16\r
17EFI_STATUS\r
18EFIAPI\r
19CpuFlushCpuDataCache (\r
20 IN EFI_CPU_ARCH_PROTOCOL *This,\r
21 IN EFI_PHYSICAL_ADDRESS Start,\r
22 IN UINT64 Length,\r
23 IN EFI_CPU_FLUSH_TYPE FlushType\r
24 )\r
25{\r
26 switch (FlushType) {\r
27 case EfiCpuFlushTypeWriteBack:\r
28 WriteBackDataCacheRange((VOID *)(UINTN)Start, (UINTN)Length);\r
29 break;\r
30 case EfiCpuFlushTypeInvalidate:\r
31 InvalidateDataCacheRange((VOID *)(UINTN)Start, (UINTN)Length);\r
32 break;\r
33 case EfiCpuFlushTypeWriteBackInvalidate:\r
34 WriteBackInvalidateDataCacheRange((VOID *)(UINTN)Start, (UINTN)Length);\r
35 break;\r
36 default:\r
37 return EFI_INVALID_PARAMETER;\r
38 }\r
39 \r
40 return EFI_SUCCESS;\r
41}\r
42\r
43EFI_STATUS\r
44EFIAPI\r
45CpuEnableInterrupt (\r
46 IN EFI_CPU_ARCH_PROTOCOL *This\r
47 )\r
48{\r
49 if (ArmProcessorMode() != ARM_PROCESSOR_MODE_IRQ) {\r
50 ArmEnableInterrupts(); \r
51 }\r
52 return EFI_SUCCESS;\r
53}\r
54\r
55\r
56EFI_STATUS\r
57EFIAPI\r
58CpuDisableInterrupt (\r
59 IN EFI_CPU_ARCH_PROTOCOL *This\r
60 )\r
61{\r
62 if (ArmProcessorMode() != ARM_PROCESSOR_MODE_IRQ) {\r
63 ArmDisableInterrupts();\r
64 }\r
65 return EFI_SUCCESS;\r
66}\r
67\r
68EFI_STATUS\r
69EFIAPI\r
70CpuGetInterruptState (\r
71 IN EFI_CPU_ARCH_PROTOCOL *This,\r
72 OUT BOOLEAN *State\r
73 )\r
74{\r
75 if (State == NULL) {\r
76 return EFI_INVALID_PARAMETER;\r
77 }\r
78\r
79 *State = ArmGetInterruptState();\r
80 return EFI_SUCCESS;\r
81}\r
82\r
83EFI_STATUS\r
84EFIAPI\r
85CpuInit (\r
86 IN EFI_CPU_ARCH_PROTOCOL *This,\r
87 IN EFI_CPU_INIT_TYPE InitType\r
88 )\r
89{\r
90 return EFI_UNSUPPORTED;\r
91}\r
92\r
93EFI_STATUS\r
94EFIAPI\r
95CpuRegisterInterruptHandler (\r
96 IN EFI_CPU_ARCH_PROTOCOL *This,\r
97 IN EFI_EXCEPTION_TYPE InterruptType,\r
98 IN EFI_CPU_INTERRUPT_HANDLER InterruptHandler\r
99 )\r
100{\r
101 return RegisterInterruptHandler(InterruptType, InterruptHandler);\r
102}\r
103\r
104EFI_STATUS\r
105EFIAPI\r
106CpuGetTimerValue (\r
107 IN EFI_CPU_ARCH_PROTOCOL *This,\r
108 IN UINT32 TimerIndex,\r
109 OUT UINT64 *TimerValue,\r
110 OUT UINT64 *TimerPeriod OPTIONAL\r
111 )\r
112{\r
113 return EFI_UNSUPPORTED;\r
114}\r
115\r
116EFI_STATUS\r
117EFIAPI\r
118CpuSetMemoryAttributes (\r
119 IN EFI_CPU_ARCH_PROTOCOL *This,\r
120 IN EFI_PHYSICAL_ADDRESS BaseAddress,\r
121 IN UINT64 Length,\r
122 IN UINT64 Attributes\r
123 )\r
124{\r
125 return EFI_UNSUPPORTED;\r
126}\r
127\r
128//\r
129// Globals used to initialize the protocol\r
130//\r
131EFI_HANDLE mCpuHandle = NULL;\r
132EFI_CPU_ARCH_PROTOCOL mCpu = {\r
133 CpuFlushCpuDataCache,\r
134 CpuEnableInterrupt,\r
135 CpuDisableInterrupt,\r
136 CpuGetInterruptState,\r
137 CpuInit,\r
138 CpuRegisterInterruptHandler,\r
139 CpuGetTimerValue,\r
140 CpuSetMemoryAttributes,\r
141 0, // NumberOfTimers\r
142 4, // DmaBufferAlignment\r
143};\r
144\r
145EFI_STATUS\r
146CpuDxeInitialize (\r
147 IN EFI_HANDLE ImageHandle,\r
148 IN EFI_SYSTEM_TABLE *SystemTable\r
149 )\r
150{\r
151 InitializeExceptions(&mCpu); \r
152 return gBS->InstallMultipleProtocolInterfaces(&mCpuHandle, &gEfiCpuArchProtocolGuid, &mCpu, NULL);\r
153}\r
154\r