ReactOS Fundraising Campaign 2012
 
€ 4,410 / € 30,000

Information | Donate

Home | Info | Community | Development | myReactOS | Contact Us

  1. Home
  2. Community
  3. Development
  4. myReactOS
  5. Fundraiser 2012

  1. Main Page
  2. Alphabetical List
  3. Data Structures
  4. Directories
  5. File List
  6. Data Fields
  7. Globals
  8. Related Pages

ReactOS Development > Doxygen

ke.h
Go to the documentation of this file.
00001 $if (_WDMDDK_)
00004 /* Interrupt request levels */
00005 #define PASSIVE_LEVEL           0
00006 #define LOW_LEVEL               0
00007 #define APC_LEVEL               1
00008 #define DISPATCH_LEVEL          2
00009 #define CMCI_LEVEL              5
00010 #define PROFILE_LEVEL           27
00011 #define CLOCK1_LEVEL            28
00012 #define CLOCK2_LEVEL            28
00013 #define IPI_LEVEL               29
00014 #define POWER_LEVEL             30
00015 #define HIGH_LEVEL              31
00016 #define CLOCK_LEVEL             CLOCK2_LEVEL
00017 
00018 #define KIP0PCRADDRESS          0xffdff000
00019 #define KI_USER_SHARED_DATA     0xffdf0000
00020 #define SharedUserData          ((KUSER_SHARED_DATA * CONST)KI_USER_SHARED_DATA)
00021 
00022 #define PAGE_SIZE               0x1000
00023 #define PAGE_SHIFT              12L
00024 #define KeGetDcacheFillSize()   1L
00025 
00026 #define EFLAG_SIGN              0x8000
00027 #define EFLAG_ZERO              0x4000
00028 #define EFLAG_SELECT            (EFLAG_SIGN | EFLAG_ZERO)
00029 
00030 #define RESULT_NEGATIVE         ((EFLAG_SIGN & ~EFLAG_ZERO) & EFLAG_SELECT)
00031 #define RESULT_ZERO             ((~EFLAG_SIGN & EFLAG_ZERO) & EFLAG_SELECT)
00032 #define RESULT_POSITIVE         ((~EFLAG_SIGN & ~EFLAG_ZERO) & EFLAG_SELECT)
00033 
00034 
00035 typedef struct _KFLOATING_SAVE {
00036   ULONG ControlWord;
00037   ULONG StatusWord;
00038   ULONG ErrorOffset;
00039   ULONG ErrorSelector;
00040   ULONG DataOffset;
00041   ULONG DataSelector;
00042   ULONG Cr0NpxState;
00043   ULONG Spare1;
00044 } KFLOATING_SAVE, *PKFLOATING_SAVE;
00045 
00046 extern NTKERNELAPI volatile KSYSTEM_TIME KeTickCount;
00047 
00048 #define YieldProcessor _mm_pause
00049 
00050 FORCEINLINE
00051 VOID
00052 KeMemoryBarrier(VOID)
00053 {
00054   LONG Barrier, *Dummy = &Barrier;
00055   UNREFERENCED_LOCAL_VARIABLE(Dummy);
00056 
00057 #if defined(__GNUC__)
00058   __asm__ __volatile__ ("xchg %%eax, %0" : : "m" (Barrier) : "%eax");
00059 #elif defined(_MSC_VER)
00060   __asm xchg [Barrier], eax
00061 #endif
00062 }
00063 
00064 #define KeMemoryBarrierWithoutFence() _ReadWriteBarrier()
00065 
00066 _IRQL_requires_max_(HIGH_LEVEL)
00067 _IRQL_saves_
00068 NTHALAPI
00069 KIRQL
00070 NTAPI
00071 KeGetCurrentIrql(VOID);
00072 
00073 _IRQL_requires_max_(HIGH_LEVEL)
00074 NTHALAPI
00075 VOID
00076 FASTCALL
00077 KfLowerIrql(
00078   _In_ _IRQL_restores_ _Notliteral_ KIRQL NewIrql);
00079 #define KeLowerIrql(a) KfLowerIrql(a)
00080 
00081 _IRQL_requires_max_(HIGH_LEVEL)
00082 _IRQL_raises_(NewIrql)
00083 _IRQL_saves_
00084 NTHALAPI
00085 KIRQL
00086 FASTCALL
00087 KfRaiseIrql(
00088   _In_ KIRQL NewIrql);
00089 #define KeRaiseIrql(a,b) *(b) = KfRaiseIrql(a)
00090 
00091 _IRQL_requires_max_(DISPATCH_LEVEL)
00092 _IRQL_saves_
00093 _IRQL_raises_(DISPATCH_LEVEL)
00094 NTHALAPI
00095 KIRQL
00096 NTAPI
00097 KeRaiseIrqlToDpcLevel(VOID);
00098 
00099 NTHALAPI
00100 KIRQL
00101 NTAPI
00102 KeRaiseIrqlToSynchLevel(VOID);
00103 
00104 _Requires_lock_not_held_(*SpinLock)
00105 _Acquires_lock_(*SpinLock)
00106 _IRQL_requires_max_(DISPATCH_LEVEL)
00107 _IRQL_saves_
00108 _IRQL_raises_(DISPATCH_LEVEL)
00109 NTHALAPI
00110 KIRQL
00111 FASTCALL
00112 KfAcquireSpinLock(
00113   _Inout_ PKSPIN_LOCK SpinLock);
00114 #define KeAcquireSpinLock(a,b) *(b) = KfAcquireSpinLock(a)
00115 
00116 _Requires_lock_held_(*SpinLock)
00117 _Releases_lock_(*SpinLock)
00118 _IRQL_requires_(DISPATCH_LEVEL)
00119 NTHALAPI
00120 VOID
00121 FASTCALL
00122 KfReleaseSpinLock(
00123   _Inout_ PKSPIN_LOCK SpinLock,
00124   _In_ _IRQL_restores_ KIRQL NewIrql);
00125 #define KeReleaseSpinLock(a,b) KfReleaseSpinLock(a,b)
00126 
00127 _Requires_lock_not_held_(*SpinLock)
00128 _Acquires_lock_(*SpinLock)
00129 _IRQL_requires_min_(DISPATCH_LEVEL)
00130 NTKERNELAPI
00131 VOID
00132 FASTCALL
00133 KefAcquireSpinLockAtDpcLevel(
00134   _Inout_ PKSPIN_LOCK SpinLock);
00135 #define KeAcquireSpinLockAtDpcLevel(SpinLock) KefAcquireSpinLockAtDpcLevel(SpinLock)
00136 
00137 _Requires_lock_held_(*SpinLock)
00138 _Releases_lock_(*SpinLock)
00139 _IRQL_requires_min_(DISPATCH_LEVEL)
00140 NTKERNELAPI
00141 VOID
00142 FASTCALL
00143 KefReleaseSpinLockFromDpcLevel(
00144   _Inout_ PKSPIN_LOCK SpinLock);
00145 #define KeReleaseSpinLockFromDpcLevel(SpinLock) KefReleaseSpinLockFromDpcLevel(SpinLock)
00146 
00147 NTSYSAPI
00148 PKTHREAD
00149 NTAPI
00150 KeGetCurrentThread(VOID);
00151 
00152 _Always_(_Post_satisfies_(return<=0))
00153 _Must_inspect_result_
00154 _IRQL_requires_max_(DISPATCH_LEVEL)
00155 _Kernel_float_saved_
00156 _At_(*FloatSave, _Kernel_requires_resource_not_held_(FloatState) _Kernel_acquires_resource_(FloatState))
00157 NTKERNELAPI
00158 NTSTATUS
00159 NTAPI
00160 KeSaveFloatingPointState(
00161   _Out_ PKFLOATING_SAVE FloatSave);
00162 
00163 _Success_(1)
00164 _Kernel_float_restored_
00165 _At_(*FloatSave, _Kernel_requires_resource_held_(FloatState) _Kernel_releases_resource_(FloatState))
00166 NTKERNELAPI
00167 NTSTATUS
00168 NTAPI
00169 KeRestoreFloatingPointState(
00170   _In_ PKFLOATING_SAVE FloatSave);
00171 
00172 /* VOID
00173  * KeFlushIoBuffers(
00174  *   IN PMDL Mdl,
00175  *   IN BOOLEAN ReadOperation,
00176  *   IN BOOLEAN DmaOperation)
00177  */
00178 #define KeFlushIoBuffers(_Mdl, _ReadOperation, _DmaOperation)
00179 
00180 /* x86 and x64 performs a 0x2C interrupt */
00181 #define DbgRaiseAssertionFailure __int2c
00182 
00183 FORCEINLINE
00184 VOID
00185 _KeQueryTickCount(
00186   OUT PLARGE_INTEGER CurrentCount)
00187 {
00188   for (;;) {
00189 #ifdef NONAMELESSUNION
00190     CurrentCount->s.HighPart = KeTickCount.High1Time;
00191     CurrentCount->s.LowPart = KeTickCount.LowPart;
00192     if (CurrentCount->s.HighPart == KeTickCount.High2Time) break;
00193 #else
00194     CurrentCount->HighPart = KeTickCount.High1Time;
00195     CurrentCount->LowPart = KeTickCount.LowPart;
00196     if (CurrentCount->HighPart == KeTickCount.High2Time) break;
00197 #endif
00198     YieldProcessor();
00199   }
00200 }
00201 #define KeQueryTickCount(CurrentCount) _KeQueryTickCount(CurrentCount)
00202 
00203 $endif (_WDMDDK_)
00204 $if (_NTDDK_)
00205 
00206 #define PAUSE_PROCESSOR YieldProcessor();
00207 
00208 #define KERNEL_STACK_SIZE                   12288
00209 #define KERNEL_LARGE_STACK_SIZE             61440
00210 #define KERNEL_LARGE_STACK_COMMIT           12288
00211 
00212 #define SIZE_OF_80387_REGISTERS   80
00213 
00214 #if !defined(RC_INVOKED)
00215 
00216 #define CONTEXT_i386               0x10000
00217 #define CONTEXT_i486               0x10000
00218 #define CONTEXT_CONTROL            (CONTEXT_i386|0x00000001L)
00219 #define CONTEXT_INTEGER            (CONTEXT_i386|0x00000002L)
00220 #define CONTEXT_SEGMENTS           (CONTEXT_i386|0x00000004L)
00221 #define CONTEXT_FLOATING_POINT     (CONTEXT_i386|0x00000008L)
00222 #define CONTEXT_DEBUG_REGISTERS    (CONTEXT_i386|0x00000010L)
00223 #define CONTEXT_EXTENDED_REGISTERS (CONTEXT_i386|0x00000020L)
00224 
00225 #define CONTEXT_FULL (CONTEXT_CONTROL|CONTEXT_INTEGER|CONTEXT_SEGMENTS)
00226 #define CONTEXT_ALL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_SEGMENTS |  \
00227                      CONTEXT_FLOATING_POINT | CONTEXT_DEBUG_REGISTERS |      \
00228                      CONTEXT_EXTENDED_REGISTERS)
00229 
00230 #define CONTEXT_XSTATE          (CONTEXT_i386 | 0x00000040L)
00231 
00232 #endif /* !defined(RC_INVOKED) */
00233 
00234 typedef struct _FLOATING_SAVE_AREA {
00235   ULONG ControlWord;
00236   ULONG StatusWord;
00237   ULONG TagWord;
00238   ULONG ErrorOffset;
00239   ULONG ErrorSelector;
00240   ULONG DataOffset;
00241   ULONG DataSelector;
00242   UCHAR RegisterArea[SIZE_OF_80387_REGISTERS];
00243   ULONG Cr0NpxState;
00244 } FLOATING_SAVE_AREA, *PFLOATING_SAVE_AREA;
00245 
00246 #include "pshpack4.h"
00247 typedef struct _CONTEXT {
00248   ULONG ContextFlags;
00249   ULONG Dr0;
00250   ULONG Dr1;
00251   ULONG Dr2;
00252   ULONG Dr3;
00253   ULONG Dr6;
00254   ULONG Dr7;
00255   FLOATING_SAVE_AREA FloatSave;
00256   ULONG SegGs;
00257   ULONG SegFs;
00258   ULONG SegEs;
00259   ULONG SegDs;
00260   ULONG Edi;
00261   ULONG Esi;
00262   ULONG Ebx;
00263   ULONG Edx;
00264   ULONG Ecx;
00265   ULONG Eax;
00266   ULONG Ebp;
00267   ULONG Eip;
00268   ULONG SegCs;
00269   ULONG EFlags;
00270   ULONG Esp;
00271   ULONG SegSs;
00272   UCHAR ExtendedRegisters[MAXIMUM_SUPPORTED_EXTENSION];
00273 } CONTEXT;
00274 #include "poppack.h"
00275 
00276 #define KeGetPcr()                      PCR
00277 
00278 #define PCR_MINOR_VERSION 1
00279 #define PCR_MAJOR_VERSION 1
00280 
00281 typedef struct _KPCR {
00282   union {
00283     NT_TIB NtTib;
00284     struct {
00285       struct _EXCEPTION_REGISTRATION_RECORD *Used_ExceptionList;
00286       PVOID Used_StackBase;
00287       PVOID Spare2;
00288       PVOID TssCopy;
00289       ULONG ContextSwitches;
00290       KAFFINITY SetMemberCopy;
00291       PVOID Used_Self;
00292     };
00293   };
00294   struct _KPCR *SelfPcr;
00295   struct _KPRCB *Prcb;
00296   KIRQL Irql;
00297   ULONG IRR;
00298   ULONG IrrActive;
00299   ULONG IDR;
00300   PVOID KdVersionBlock;
00301   struct _KIDTENTRY *IDT;
00302   struct _KGDTENTRY *GDT;
00303   struct _KTSS *TSS;
00304   USHORT MajorVersion;
00305   USHORT MinorVersion;
00306   KAFFINITY SetMember;
00307   ULONG StallScaleFactor;
00308   UCHAR SpareUnused;
00309   UCHAR Number;
00310   UCHAR Spare0;
00311   UCHAR SecondLevelCacheAssociativity;
00312   ULONG VdmAlert;
00313   ULONG KernelReserved[14];
00314   ULONG SecondLevelCacheSize;
00315   ULONG HalReserved[16];
00316 } KPCR, *PKPCR;
00317 
00318 FORCEINLINE
00319 ULONG
00320 KeGetCurrentProcessorNumber(VOID)
00321 {
00322     return (ULONG)__readfsbyte(FIELD_OFFSET(KPCR, Number));
00323 }
00324 
00325 $endif (_NTDDK_)
00326 
00327 
00328 
00329 

Generated on Sat May 26 2012 04:32:13 for ReactOS by doxygen 1.7.6.1

ReactOS is a registered trademark or a trademark of ReactOS Foundation in the United States and other countries.