[NTOSKRNL/PPC]
[reactos.git] / reactos / ntoskrnl / ke / powerpc / cpu.c
1 /*
2 * PROJECT: ReactOS Kernel
3 * LICENSE: GPL - See COPYING in the top level directory
4 * FILE: ntoskrnl/ke/i386/cpu.c
5 * PURPOSE: Routines for CPU-level support
6 * PROGRAMMERS: Alex Ionescu (alex.ionescu@reactos.org)
7 */
8
9 /* INCLUDES *****************************************************************/
10
11 #include <ntoskrnl.h>
12 #define NDEBUG
13 #include <debug.h>
14
15 /* GLOBALS *******************************************************************/
16
17 /* CPU Features and Flags */
18 ULONG KeProcessorArchitecture;
19 ULONG KeProcessorLevel;
20 ULONG KeProcessorRevision;
21 ULONG KeFeatureBits;
22 ULONG KeLargestCacheLine = 0x40;
23 ULONG KeDcacheFlushCount = 0;
24 ULONG KeIcacheFlushCount = 0;
25 ULONG KiDmaIoCoherency = 0;
26 CHAR KeNumberProcessors;
27 KAFFINITY KeActiveProcessors = 1;
28 BOOLEAN KiSMTProcessorsPresent;
29
30 /* CPU Signatures */
31 #if 0
32 CHAR CmpIntelID[] = "GenuineIntel";
33 CHAR CmpAmdID[] = "AuthenticAMD";
34 CHAR CmpCyrixID[] = "CyrixInstead";
35 CHAR CmpTransmetaID[] = "GenuineTMx86";
36 CHAR CmpCentaurID[] = "CentaurHauls";
37 CHAR CmpRiseID[] = "RiseRiseRise";
38 #endif
39
40 /* SUPPORT ROUTINES FOR MSVC COMPATIBILITY ***********************************/
41
42 VOID
43 NTAPI
44 CPUID(IN ULONG CpuInfo[4],
45 IN ULONG InfoType)
46 {
47 RtlZeroMemory(CpuInfo, 4 * sizeof(ULONG));
48 }
49
50 VOID
51 WRMSR(IN ULONG Register,
52 IN LONGLONG Value)
53 {
54 }
55
56 LONGLONG
57 RDMSR(IN ULONG Register)
58 {
59 LARGE_INTEGER LargeVal;
60 LargeVal.QuadPart = 0;
61 return LargeVal.QuadPart;
62 }
63
64 /* FUNCTIONS *****************************************************************/
65
66 VOID
67 NTAPI
68 KiSetProcessorType(VOID)
69 {
70 }
71
72 ULONG
73 NTAPI
74 KiGetCpuVendor(VOID)
75 {
76 return 0;
77 }
78
79 ULONG
80 NTAPI
81 KiGetFeatureBits(VOID)
82 {
83 ULONG FeatureBits = 0;
84 /* Return the Feature Bits */
85 return FeatureBits;
86 }
87
88 VOID
89 NTAPI
90 KiGetCacheInformation(VOID)
91 {
92 }
93
94 VOID
95 NTAPI
96 KiSetCR0Bits(VOID)
97 {
98 }
99
100 VOID
101 NTAPI
102 KiInitializeTSS2(IN PKTSS Tss,
103 IN PKGDTENTRY TssEntry OPTIONAL)
104 {
105 }
106
107 VOID
108 NTAPI
109 KiInitializeTSS(IN PKTSS Tss)
110 {
111 }
112
113 VOID
114 FASTCALL
115 Ki386InitializeTss(IN PKTSS Tss,
116 IN PKIDTENTRY Idt,
117 IN PKGDTENTRY Gdt)
118 {
119 }
120
121 VOID
122 NTAPI
123 KeFlushCurrentTb(VOID)
124 {
125 }
126
127 VOID
128 NTAPI
129 KiSaveProcessorControlState(OUT PKPROCESSOR_STATE ProcessorState)
130 {
131 }
132
133 VOID
134 NTAPI
135 KiInitializeMachineType(VOID)
136 {
137 }
138
139 ULONG_PTR
140 NTAPI
141 KiLoadFastSyscallMachineSpecificRegisters(IN ULONG_PTR Context)
142 {
143 return 0;
144 }
145
146 VOID
147 NTAPI
148 KiRestoreFastSyscallReturnState(VOID)
149 {
150 }
151
152 ULONG_PTR
153 NTAPI
154 Ki386EnableDE(IN ULONG_PTR Context)
155 {
156 return 0;
157 }
158
159 ULONG_PTR
160 NTAPI
161 Ki386EnableFxsr(IN ULONG_PTR Context)
162 {
163 return 0;
164 }
165
166 ULONG_PTR
167 NTAPI
168 Ki386EnableXMMIExceptions(IN ULONG_PTR Context)
169 {
170 /* FIXME: Support this */
171 DPRINT1("Your machine supports XMMI exceptions but ReactOS doesn't\n");
172 return 0;
173 }
174
175 VOID
176 NTAPI
177 KiI386PentiumLockErrataFixup(VOID)
178 {
179 /* FIXME: Support this */
180 DPRINT1("WARNING: Your machine has a CPU bug that ReactOS can't bypass!\n");
181 }
182
183 /* PUBLIC FUNCTIONS **********************************************************/
184
185 /*
186 * @implemented
187 */
188 NTSTATUS
189 NTAPI
190 KeSaveFloatingPointState(OUT PKFLOATING_SAVE Save)
191 {
192 return STATUS_SUCCESS;
193 }
194
195 /*
196 * @implemented
197 */
198 NTSTATUS
199 NTAPI
200 KeRestoreFloatingPointState(IN PKFLOATING_SAVE Save)
201 {
202 return STATUS_SUCCESS;
203 }
204
205 /*
206 * @implemented
207 */
208 ULONG
209 NTAPI
210 KeGetRecommendedSharedDataAlignment(VOID)
211 {
212 /* Return the global variable */
213 return KeLargestCacheLine;
214 }
215
216 /*
217 * @implemented
218 */
219 VOID
220 NTAPI
221 KeFlushEntireTb(IN BOOLEAN Invalid,
222 IN BOOLEAN AllProcessors)
223 {
224 KIRQL OldIrql;
225
226 /* Raise the IRQL for the TB Flush */
227 OldIrql = KeRaiseIrqlToSynchLevel();
228
229 #ifdef CONFIG_SMP
230 /* FIXME: Support IPI Flush */
231 #error Not yet implemented!
232 #endif
233
234 /* Flush the TB for the Current CPU */
235 //KeFlushCurrentTb();
236
237 /* Return to Original IRQL */
238 KeLowerIrql(OldIrql);
239 }
240
241 /*
242 * @implemented
243 */
244 VOID
245 NTAPI
246 KeSetDmaIoCoherency(IN ULONG Coherency)
247 {
248 /* Save the coherency globally */
249 KiDmaIoCoherency = Coherency;
250 }
251
252 /*
253 * @implemented
254 */
255 KAFFINITY
256 NTAPI
257 KeQueryActiveProcessors(VOID)
258 {
259 PAGED_CODE();
260
261 /* Simply return the number of active processors */
262 return KeActiveProcessors;
263 }
264
265 /*
266 * @implemented
267 */
268 VOID
269 __cdecl
270 KeSaveStateForHibernate(IN PKPROCESSOR_STATE State)
271 {
272 /* Capture the context */
273 RtlCaptureContext(&State->ContextFrame);
274
275 /* Capture the control state */
276 KiSaveProcessorControlState(State);
277 }