]> git.proxmox.com Git - mirror_edk2.git/blame - EmulatorPkg/CpuRuntimeDxe/CpuDriver.h
BaseTools: Library hashing fix and optimization for --hash feature
[mirror_edk2.git] / EmulatorPkg / CpuRuntimeDxe / CpuDriver.h
CommitLineData
949f388f 1/*++ @file\r
2\r
10d1be3e 3Copyright (c) 2006 - 2011, Intel Corporation. All rights reserved.<BR>\r
949f388f 4Portions copyright (c) 2011, Apple Inc. All rights reserved.\r
10d1be3e 5\r
e3ba31da 6SPDX-License-Identifier: BSD-2-Clause-Patent\r
949f388f 7\r
8**/\r
9\r
10#ifndef _CPU_ARCHITECTURAL_PROTOCOL_DRIVER_H_\r
11#define _CPU_ARCHITECTURAL_PROTOCOL_DRIVER_H_\r
12\r
13\r
a0af6b27 14#include <PiDxe.h>\r
949f388f 15#include <IndustryStandard/SmBios.h>\r
c4671a67 16\r
949f388f 17#include <Protocol/Cpu.h>\r
18#include <Protocol/Smbios.h>\r
c4671a67 19#include <Protocol/MpService.h>\r
10d1be3e 20#include <Protocol/EmuThread.h>\r
949f388f 21#include <Protocol/CpuIo2.h>\r
c4671a67 22\r
57c7d70f 23#include <Guid/IdleLoopEvent.h>\r
c4671a67 24\r
949f388f 25#include <Library/BaseLib.h>\r
26#include <Library/DebugLib.h>\r
949f388f 27#include <Library/UefiDriverEntryPoint.h>\r
28#include <Library/BaseMemoryLib.h>\r
29#include <Library/MemoryAllocationLib.h>\r
30#include <Library/UefiBootServicesTableLib.h>\r
31#include <Library/EmuThunkLib.h>\r
c4671a67 32#include <Library/UefiLib.h>\r
33#include <Library/PcdLib.h>\r
949f388f 34\r
35\r
949f388f 36\r
37//\r
38// Internal Data Structures\r
39//\r
40#define CPU_ARCH_PROT_PRIVATE_SIGNATURE SIGNATURE_32 ('c', 'a', 'p', 'd')\r
41\r
42typedef struct {\r
43 UINTN Signature;\r
44 EFI_HANDLE Handle;\r
45\r
46 EFI_CPU_ARCH_PROTOCOL Cpu;\r
47 EFI_CPU_IO2_PROTOCOL CpuIo;\r
48\r
49 //\r
50 // Local Data for CPU interface goes here\r
51 //\r
52 BOOLEAN InterruptState;\r
53\r
54} CPU_ARCH_PROTOCOL_PRIVATE;\r
55\r
56#define CPU_ARCH_PROTOCOL_PRIVATE_DATA_FROM_THIS(a) \\r
57 CR (a, \\r
58 CPU_ARCH_PROTOCOL_PRIVATE, \\r
59 Cpu, \\r
60 CPU_ARCH_PROT_PRIVATE_SIGNATURE \\r
61 )\r
62\r
c4671a67 63\r
64\r
65typedef enum {\r
66 CPU_STATE_IDLE,\r
67 CPU_STATE_BLOCKED,\r
68 CPU_STATE_READY,\r
69 CPU_STATE_BUSY,\r
70 CPU_STATE_FINISHED\r
71} PROCESSOR_STATE;\r
72\r
73\r
74//\r
75// Define Individual Processor Data block.\r
76//\r
77typedef struct {\r
78 EFI_PROCESSOR_INFORMATION Info;\r
79 EFI_AP_PROCEDURE Procedure;\r
80 VOID *Parameter;\r
81 VOID *StateLock;\r
82 VOID *ProcedureLock;\r
83 PROCESSOR_STATE State;\r
d18d8a1d 84 EFI_EVENT CheckThisAPEvent;\r
c4671a67 85} PROCESSOR_DATA_BLOCK;\r
86\r
87\r
88//\r
89// Define MP data block which consumes individual processor block.\r
90//\r
91typedef struct {\r
92 UINTN NumberOfProcessors;\r
93 UINTN NumberOfEnabledProcessors;\r
94 EFI_EVENT CheckAllAPsEvent;\r
95 EFI_EVENT WaitEvent;\r
96 UINTN FinishCount;\r
97 UINTN StartCount;\r
98 EFI_AP_PROCEDURE Procedure;\r
99 VOID *ProcedureArgument;\r
100 BOOLEAN SingleThread;\r
101 UINTN StartedNumber;\r
102 PROCESSOR_DATA_BLOCK *ProcessorData;\r
8b6d0c05 103 UINTN Timeout;\r
104 UINTN *FailedList;\r
105 UINTN FailedListIndex;\r
106 BOOLEAN TimeoutActive;\r
c4671a67 107} MP_SYSTEM_DATA;\r
108\r
109\r
110\r
111\r
112\r
949f388f 113EFI_STATUS\r
114EFIAPI\r
115CpuMemoryServiceRead (\r
116 IN EFI_CPU_IO2_PROTOCOL *This,\r
117 IN EFI_CPU_IO_PROTOCOL_WIDTH Width,\r
118 IN UINT64 Address,\r
119 IN UINTN Count,\r
120 IN OUT VOID *Buffer\r
121 );\r
122\r
123EFI_STATUS\r
124EFIAPI\r
125CpuMemoryServiceWrite (\r
126 IN EFI_CPU_IO2_PROTOCOL *This,\r
127 IN EFI_CPU_IO_PROTOCOL_WIDTH Width,\r
128 IN UINT64 Address,\r
129 IN UINTN Count,\r
130 IN OUT VOID *Buffer\r
131 );\r
132\r
133EFI_STATUS\r
134EFIAPI\r
135CpuIoServiceRead (\r
136 IN EFI_CPU_IO2_PROTOCOL *This,\r
137 IN EFI_CPU_IO_PROTOCOL_WIDTH Width,\r
138 IN UINT64 UserAddress,\r
139 IN UINTN Count,\r
140 IN OUT VOID *UserBuffer\r
141 );\r
142\r
143EFI_STATUS\r
144EFIAPI\r
145CpuIoServiceWrite (\r
146 IN EFI_CPU_IO2_PROTOCOL *This,\r
147 IN EFI_CPU_IO_PROTOCOL_WIDTH Width,\r
148 IN UINT64 UserAddress,\r
149 IN UINTN Count,\r
150 IN OUT VOID *UserBuffer\r
151 );\r
152\r
153EFI_STATUS\r
154EFIAPI\r
155InitializeCpu (\r
156 IN EFI_HANDLE ImageHandle,\r
157 IN EFI_SYSTEM_TABLE *SystemTable\r
158 );\r
159\r
160EFI_STATUS\r
161EFIAPI\r
162EmuFlushCpuDataCache (\r
163 IN EFI_CPU_ARCH_PROTOCOL *This,\r
164 IN EFI_PHYSICAL_ADDRESS Start,\r
165 IN UINT64 Length,\r
166 IN EFI_CPU_FLUSH_TYPE FlushType\r
167 );\r
168\r
169EFI_STATUS\r
170EFIAPI\r
171EmuEnableInterrupt (\r
172 IN EFI_CPU_ARCH_PROTOCOL *This\r
173 );\r
174\r
175EFI_STATUS\r
176EFIAPI\r
177EmuDisableInterrupt (\r
178 IN EFI_CPU_ARCH_PROTOCOL *This\r
179 );\r
180\r
181EFI_STATUS\r
182EFIAPI\r
183EmuGetInterruptState (\r
184 IN EFI_CPU_ARCH_PROTOCOL *This,\r
185 OUT BOOLEAN *State\r
186 );\r
187\r
188EFI_STATUS\r
189EFIAPI\r
190EmuInit (\r
191 IN EFI_CPU_ARCH_PROTOCOL *This,\r
192 IN EFI_CPU_INIT_TYPE InitType\r
193 );\r
194\r
195EFI_STATUS\r
196EFIAPI\r
197EmuRegisterInterruptHandler (\r
198 IN EFI_CPU_ARCH_PROTOCOL *This,\r
199 IN EFI_EXCEPTION_TYPE InterruptType,\r
200 IN EFI_CPU_INTERRUPT_HANDLER InterruptHandler\r
201 );\r
202\r
203EFI_STATUS\r
204EFIAPI\r
205EmuGetTimerValue (\r
206 IN EFI_CPU_ARCH_PROTOCOL *This,\r
207 IN UINT32 TimerIndex,\r
208 OUT UINT64 *TimerValue,\r
209 OUT UINT64 *TimerPeriod OPTIONAL\r
210 );\r
211\r
212EFI_STATUS\r
213EFIAPI\r
214EmuSetMemoryAttributes (\r
215 IN EFI_CPU_ARCH_PROTOCOL *This,\r
216 IN EFI_PHYSICAL_ADDRESS BaseAddress,\r
217 IN UINT64 Length,\r
218 IN UINT64 Attributes\r
219 );\r
220\r
c4671a67 221EFI_STATUS\r
222CpuMpServicesInit (\r
a0af6b27 223 OUT UINTN *MaxCores\r
c4671a67 224 );\r
225\r
226EFI_STATUS\r
227EFIAPI\r
228CpuMpServicesWhoAmI (\r
229 IN EFI_MP_SERVICES_PROTOCOL *This,\r
230 OUT UINTN *ProcessorNumber\r
231 );\r
232\r
d070eef8 233extern EFI_MP_SERVICES_PROTOCOL mMpServicesTemplate;\r
c4671a67 234\r
235\r
949f388f 236#endif\r