Home | Info | Community | Development | myReactOS | Contact Us
ReactOS Development > Doxygencpu.c
Go to the documentation of this file.
00001 /* 00002 * PROJECT: ReactOS Kernel 00003 * LICENSE: GPL - See COPYING in the top level directory 00004 * FILE: ntoskrnl/ke/i386/cpu.c 00005 * PURPOSE: Routines for CPU-level support 00006 * PROGRAMMERS: Alex Ionescu (alex.ionescu@reactos.org) 00007 */ 00008 00009 /* INCLUDES *****************************************************************/ 00010 00011 #include <ntoskrnl.h> 00012 #define NDEBUG 00013 #include <debug.h> 00014 00015 /* GLOBALS *******************************************************************/ 00016 00017 /* CPU Features and Flags */ 00018 ULONG KeLargestCacheLine = 0x40; 00019 ULONG KeDcacheFlushCount = 0; 00020 ULONG KeIcacheFlushCount = 0; 00021 ULONG KiDmaIoCoherency = 0; 00022 BOOLEAN KiSMTProcessorsPresent; 00023 00024 /* CPU Signatures */ 00025 #if 0 00026 CHAR CmpIntelID[] = "GenuineIntel"; 00027 CHAR CmpAmdID[] = "AuthenticAMD"; 00028 CHAR CmpCyrixID[] = "CyrixInstead"; 00029 CHAR CmpTransmetaID[] = "GenuineTMx86"; 00030 CHAR CmpCentaurID[] = "CentaurHauls"; 00031 CHAR CmpRiseID[] = "RiseRiseRise"; 00032 #endif 00033 00034 /* SUPPORT ROUTINES FOR MSVC COMPATIBILITY ***********************************/ 00035 00036 VOID 00037 NTAPI 00038 CPUID(IN ULONG CpuInfo[4], 00039 IN ULONG InfoType) 00040 { 00041 RtlZeroMemory(CpuInfo, 4 * sizeof(ULONG)); 00042 } 00043 00044 VOID 00045 WRMSR(IN ULONG Register, 00046 IN LONGLONG Value) 00047 { 00048 } 00049 00050 LONGLONG 00051 RDMSR(IN ULONG Register) 00052 { 00053 LARGE_INTEGER LargeVal; 00054 LargeVal.QuadPart = 0; 00055 return LargeVal.QuadPart; 00056 } 00057 00058 /* FUNCTIONS *****************************************************************/ 00059 00060 VOID 00061 NTAPI 00062 KiSetProcessorType(VOID) 00063 { 00064 } 00065 00066 ULONG 00067 NTAPI 00068 KiGetCpuVendor(VOID) 00069 { 00070 return 0; 00071 } 00072 00073 ULONG 00074 NTAPI 00075 KiGetFeatureBits(VOID) 00076 { 00077 ULONG FeatureBits = 0; 00078 /* Return the Feature Bits */ 00079 return FeatureBits; 00080 } 00081 00082 VOID 00083 NTAPI 00084 KiGetCacheInformation(VOID) 00085 { 00086 } 00087 00088 VOID 00089 NTAPI 00090 KiSetCR0Bits(VOID) 00091 { 00092 } 00093 00094 VOID 00095 NTAPI 00096 KiInitializeTSS2(IN PKTSS Tss, 00097 IN PKGDTENTRY TssEntry OPTIONAL) 00098 { 00099 } 00100 00101 VOID 00102 NTAPI 00103 KiInitializeTSS(IN PKTSS Tss) 00104 { 00105 } 00106 00107 VOID 00108 FASTCALL 00109 Ki386InitializeTss(IN PKTSS Tss, 00110 IN PKIDTENTRY Idt, 00111 IN PKGDTENTRY Gdt) 00112 { 00113 } 00114 00115 VOID 00116 NTAPI 00117 KeFlushCurrentTb(VOID) 00118 { 00119 } 00120 00121 VOID 00122 NTAPI 00123 KiSaveProcessorControlState(OUT PKPROCESSOR_STATE ProcessorState) 00124 { 00125 } 00126 00127 VOID 00128 NTAPI 00129 KiInitializeMachineType(VOID) 00130 { 00131 } 00132 00133 ULONG_PTR 00134 NTAPI 00135 KiLoadFastSyscallMachineSpecificRegisters(IN ULONG_PTR Context) 00136 { 00137 return 0; 00138 } 00139 00140 VOID 00141 NTAPI 00142 KiRestoreFastSyscallReturnState(VOID) 00143 { 00144 } 00145 00146 ULONG_PTR 00147 NTAPI 00148 Ki386EnableDE(IN ULONG_PTR Context) 00149 { 00150 return 0; 00151 } 00152 00153 ULONG_PTR 00154 NTAPI 00155 Ki386EnableFxsr(IN ULONG_PTR Context) 00156 { 00157 return 0; 00158 } 00159 00160 ULONG_PTR 00161 NTAPI 00162 Ki386EnableXMMIExceptions(IN ULONG_PTR Context) 00163 { 00164 /* FIXME: Support this */ 00165 DPRINT1("Your machine supports XMMI exceptions but ReactOS doesn't\n"); 00166 return 0; 00167 } 00168 00169 VOID 00170 NTAPI 00171 KiI386PentiumLockErrataFixup(VOID) 00172 { 00173 /* FIXME: Support this */ 00174 DPRINT1("WARNING: Your machine has a CPU bug that ReactOS can't bypass!\n"); 00175 } 00176 00177 /* PUBLIC FUNCTIONS **********************************************************/ 00178 00179 /* 00180 * @implemented 00181 */ 00182 NTSTATUS 00183 NTAPI 00184 KeSaveFloatingPointState(OUT PKFLOATING_SAVE Save) 00185 { 00186 return STATUS_SUCCESS; 00187 } 00188 00189 /* 00190 * @implemented 00191 */ 00192 NTSTATUS 00193 NTAPI 00194 KeRestoreFloatingPointState(IN PKFLOATING_SAVE Save) 00195 { 00196 return STATUS_SUCCESS; 00197 } 00198 00199 /* 00200 * @implemented 00201 */ 00202 ULONG 00203 NTAPI 00204 KeGetRecommendedSharedDataAlignment(VOID) 00205 { 00206 /* Return the global variable */ 00207 return KeLargestCacheLine; 00208 } 00209 00210 /* 00211 * @implemented 00212 */ 00213 VOID 00214 NTAPI 00215 KeFlushEntireTb(IN BOOLEAN Invalid, 00216 IN BOOLEAN AllProcessors) 00217 { 00218 KIRQL OldIrql; 00219 00220 /* Raise the IRQL for the TB Flush */ 00221 OldIrql = KeRaiseIrqlToSynchLevel(); 00222 00223 #ifdef CONFIG_SMP 00224 /* FIXME: Support IPI Flush */ 00225 #error Not yet implemented! 00226 #endif 00227 00228 /* Flush the TB for the Current CPU */ 00229 //KeFlushCurrentTb(); 00230 00231 /* Return to Original IRQL */ 00232 KeLowerIrql(OldIrql); 00233 } 00234 00235 /* 00236 * @implemented 00237 */ 00238 VOID 00239 NTAPI 00240 KeSetDmaIoCoherency(IN ULONG Coherency) 00241 { 00242 /* Save the coherency globally */ 00243 KiDmaIoCoherency = Coherency; 00244 } 00245 00246 /* 00247 * @implemented 00248 */ 00249 KAFFINITY 00250 NTAPI 00251 KeQueryActiveProcessors(VOID) 00252 { 00253 PAGED_CODE(); 00254 00255 /* Simply return the number of active processors */ 00256 return KeActiveProcessors; 00257 } 00258 00259 /* 00260 * @implemented 00261 */ 00262 VOID 00263 __cdecl 00264 KeSaveStateForHibernate(IN PKPROCESSOR_STATE State) 00265 { 00266 /* Capture the context */ 00267 RtlCaptureContext(&State->ContextFrame); 00268 00269 /* Capture the control state */ 00270 KiSaveProcessorControlState(State); 00271 } Generated on Sat May 26 2012 04:36:18 for ReactOS by
1.7.6.1
|