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