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