]> git.proxmox.com Git - mirror_edk2.git/blame - InOsEmuPkg/CpuRuntimeDxe/CpuDriver.h
Add InOsEmuPkg. Like UnixPkg and Nt32Pkg, but EFI code can be common and does not...
[mirror_edk2.git] / InOsEmuPkg / CpuRuntimeDxe / CpuDriver.h
CommitLineData
949f388f 1/*++ @file\r
2\r
3Copyright (c) 2006, Intel Corporation. All rights reserved.<BR>\r
4Portions copyright (c) 2011, Apple Inc. All rights reserved.\r
5This program and the accompanying materials \r
6are licensed and made available under the terms and conditions of the BSD License \r
7which accompanies this distribution. The full text of the license may be found at \r
8http://opensource.org/licenses/bsd-license.php \r
9 \r
10THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, \r
11WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. \r
12\r
13**/\r
14\r
15#ifndef _CPU_ARCHITECTURAL_PROTOCOL_DRIVER_H_\r
16#define _CPU_ARCHITECTURAL_PROTOCOL_DRIVER_H_\r
17\r
18\r
19#include <FrameworkDxe.h>\r
20#include <IndustryStandard/SmBios.h>\r
21#include <Protocol/Cpu.h>\r
22#include <Protocol/Smbios.h>\r
23#include <Protocol/FrameworkHii.h>\r
24#include <Guid/DataHubRecords.h>\r
25#include <Protocol/CpuIo2.h>\r
26#include <Library/BaseLib.h>\r
27#include <Library/DebugLib.h>\r
28#include <Library/HiiLib.h>\r
29#include <Library/UefiDriverEntryPoint.h>\r
30#include <Library/BaseMemoryLib.h>\r
31#include <Library/MemoryAllocationLib.h>\r
32#include <Library/UefiBootServicesTableLib.h>\r
33#include <Library/EmuThunkLib.h>\r
34\r
35\r
36extern UINT8 CpuStrings[];\r
37\r
38//\r
39// Internal Data Structures\r
40//\r
41#define CPU_ARCH_PROT_PRIVATE_SIGNATURE SIGNATURE_32 ('c', 'a', 'p', 'd')\r
42\r
43typedef struct {\r
44 UINTN Signature;\r
45 EFI_HANDLE Handle;\r
46\r
47 EFI_CPU_ARCH_PROTOCOL Cpu;\r
48 EFI_CPU_IO2_PROTOCOL CpuIo;\r
49\r
50 //\r
51 // Local Data for CPU interface goes here\r
52 //\r
53 BOOLEAN InterruptState;\r
54\r
55} CPU_ARCH_PROTOCOL_PRIVATE;\r
56\r
57#define CPU_ARCH_PROTOCOL_PRIVATE_DATA_FROM_THIS(a) \\r
58 CR (a, \\r
59 CPU_ARCH_PROTOCOL_PRIVATE, \\r
60 Cpu, \\r
61 CPU_ARCH_PROT_PRIVATE_SIGNATURE \\r
62 )\r
63\r
64EFI_STATUS\r
65EFIAPI\r
66CpuMemoryServiceRead (\r
67 IN EFI_CPU_IO2_PROTOCOL *This,\r
68 IN EFI_CPU_IO_PROTOCOL_WIDTH Width,\r
69 IN UINT64 Address,\r
70 IN UINTN Count,\r
71 IN OUT VOID *Buffer\r
72 );\r
73\r
74EFI_STATUS\r
75EFIAPI\r
76CpuMemoryServiceWrite (\r
77 IN EFI_CPU_IO2_PROTOCOL *This,\r
78 IN EFI_CPU_IO_PROTOCOL_WIDTH Width,\r
79 IN UINT64 Address,\r
80 IN UINTN Count,\r
81 IN OUT VOID *Buffer\r
82 );\r
83\r
84EFI_STATUS\r
85EFIAPI\r
86CpuIoServiceRead (\r
87 IN EFI_CPU_IO2_PROTOCOL *This,\r
88 IN EFI_CPU_IO_PROTOCOL_WIDTH Width,\r
89 IN UINT64 UserAddress,\r
90 IN UINTN Count,\r
91 IN OUT VOID *UserBuffer\r
92 );\r
93\r
94EFI_STATUS\r
95EFIAPI\r
96CpuIoServiceWrite (\r
97 IN EFI_CPU_IO2_PROTOCOL *This,\r
98 IN EFI_CPU_IO_PROTOCOL_WIDTH Width,\r
99 IN UINT64 UserAddress,\r
100 IN UINTN Count,\r
101 IN OUT VOID *UserBuffer\r
102 );\r
103\r
104EFI_STATUS\r
105EFIAPI\r
106InitializeCpu (\r
107 IN EFI_HANDLE ImageHandle,\r
108 IN EFI_SYSTEM_TABLE *SystemTable\r
109 );\r
110\r
111EFI_STATUS\r
112EFIAPI\r
113EmuFlushCpuDataCache (\r
114 IN EFI_CPU_ARCH_PROTOCOL *This,\r
115 IN EFI_PHYSICAL_ADDRESS Start,\r
116 IN UINT64 Length,\r
117 IN EFI_CPU_FLUSH_TYPE FlushType\r
118 );\r
119\r
120EFI_STATUS\r
121EFIAPI\r
122EmuEnableInterrupt (\r
123 IN EFI_CPU_ARCH_PROTOCOL *This\r
124 );\r
125\r
126EFI_STATUS\r
127EFIAPI\r
128EmuDisableInterrupt (\r
129 IN EFI_CPU_ARCH_PROTOCOL *This\r
130 );\r
131\r
132EFI_STATUS\r
133EFIAPI\r
134EmuGetInterruptState (\r
135 IN EFI_CPU_ARCH_PROTOCOL *This,\r
136 OUT BOOLEAN *State\r
137 );\r
138\r
139EFI_STATUS\r
140EFIAPI\r
141EmuInit (\r
142 IN EFI_CPU_ARCH_PROTOCOL *This,\r
143 IN EFI_CPU_INIT_TYPE InitType\r
144 );\r
145\r
146EFI_STATUS\r
147EFIAPI\r
148EmuRegisterInterruptHandler (\r
149 IN EFI_CPU_ARCH_PROTOCOL *This,\r
150 IN EFI_EXCEPTION_TYPE InterruptType,\r
151 IN EFI_CPU_INTERRUPT_HANDLER InterruptHandler\r
152 );\r
153\r
154EFI_STATUS\r
155EFIAPI\r
156EmuGetTimerValue (\r
157 IN EFI_CPU_ARCH_PROTOCOL *This,\r
158 IN UINT32 TimerIndex,\r
159 OUT UINT64 *TimerValue,\r
160 OUT UINT64 *TimerPeriod OPTIONAL\r
161 );\r
162\r
163EFI_STATUS\r
164EFIAPI\r
165EmuSetMemoryAttributes (\r
166 IN EFI_CPU_ARCH_PROTOCOL *This,\r
167 IN EFI_PHYSICAL_ADDRESS BaseAddress,\r
168 IN UINT64 Length,\r
169 IN UINT64 Attributes\r
170 );\r
171\r
172#endif\r