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