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