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