]> git.proxmox.com Git - mirror_edk2.git/blame - EmulatorPkg/CpuRuntimeDxe/CpuDriver.h
BaseTools/BinToPcd: Fix Python 2.7.x compatibility issue
[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
d18d8a1d 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
949f388f 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
a0af6b27 20#include <PiDxe.h>\r
949f388f 21#include <IndustryStandard/SmBios.h>\r
c4671a67 22\r
949f388f 23#include <Protocol/Cpu.h>\r
24#include <Protocol/Smbios.h>\r
c4671a67 25#include <Protocol/MpService.h>\r
10d1be3e 26#include <Protocol/EmuThread.h>\r
949f388f 27#include <Protocol/CpuIo2.h>\r
c4671a67 28\r
57c7d70f 29#include <Guid/IdleLoopEvent.h>\r
c4671a67 30\r
949f388f 31#include <Library/BaseLib.h>\r
32#include <Library/DebugLib.h>\r
949f388f 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
c4671a67 38#include <Library/UefiLib.h>\r
39#include <Library/PcdLib.h>\r
949f388f 40\r
41\r
949f388f 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
c4671a67 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
d18d8a1d 90 EFI_EVENT CheckThisAPEvent;\r
c4671a67 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
8b6d0c05 109 UINTN Timeout;\r
110 UINTN *FailedList;\r
111 UINTN FailedListIndex;\r
112 BOOLEAN TimeoutActive;\r
c4671a67 113} MP_SYSTEM_DATA;\r
114\r
115\r
116\r
117\r
118\r
949f388f 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
c4671a67 227EFI_STATUS\r
228CpuMpServicesInit (\r
a0af6b27 229 OUT UINTN *MaxCores\r
c4671a67 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
d070eef8 239extern EFI_MP_SERVICES_PROTOCOL mMpServicesTemplate;\r
c4671a67 240\r
241\r
949f388f 242#endif\r