5484ee35c6f2af6d34c6fdec017da1afeff835ee
[reactos.git] / include / xdk / extypes.h
1 /******************************************************************************
2 * Executive Types *
3 ******************************************************************************/
4
5 $if (_WDMDDK_)
6 #define EX_RUNDOWN_ACTIVE 0x1
7 #define EX_RUNDOWN_COUNT_SHIFT 0x1
8 #define EX_RUNDOWN_COUNT_INC (1 << EX_RUNDOWN_COUNT_SHIFT)
9
10 typedef struct _FAST_MUTEX {
11 volatile LONG Count;
12 PKTHREAD Owner;
13 ULONG Contention;
14 KEVENT Event;
15 ULONG OldIrql;
16 } FAST_MUTEX, *PFAST_MUTEX;
17
18 typedef enum _SUITE_TYPE {
19 SmallBusiness,
20 Enterprise,
21 BackOffice,
22 CommunicationServer,
23 TerminalServer,
24 SmallBusinessRestricted,
25 EmbeddedNT,
26 DataCenter,
27 SingleUserTS,
28 Personal,
29 Blade,
30 EmbeddedRestricted,
31 SecurityAppliance,
32 StorageServer,
33 ComputeServer,
34 WHServer,
35 MaxSuiteType
36 } SUITE_TYPE;
37
38 typedef enum _EX_POOL_PRIORITY {
39 LowPoolPriority,
40 LowPoolPrioritySpecialPoolOverrun = 8,
41 LowPoolPrioritySpecialPoolUnderrun = 9,
42 NormalPoolPriority = 16,
43 NormalPoolPrioritySpecialPoolOverrun = 24,
44 NormalPoolPrioritySpecialPoolUnderrun = 25,
45 HighPoolPriority = 32,
46 HighPoolPrioritySpecialPoolOverrun = 40,
47 HighPoolPrioritySpecialPoolUnderrun = 41
48 } EX_POOL_PRIORITY;
49
50 #if !defined(_WIN64) && (defined(_NTDDK_) || defined(_NTIFS_) || defined(_NDIS_))
51 #define LOOKASIDE_ALIGN
52 #else
53 #define LOOKASIDE_ALIGN /* FIXME: DECLSPEC_CACHEALIGN */
54 #endif
55
56 typedef struct _LOOKASIDE_LIST_EX *PLOOKASIDE_LIST_EX;
57
58 typedef PVOID
59 (NTAPI *PALLOCATE_FUNCTION)(
60 IN POOL_TYPE PoolType,
61 IN SIZE_T NumberOfBytes,
62 IN ULONG Tag);
63
64 typedef PVOID
65 (NTAPI *PALLOCATE_FUNCTION_EX)(
66 IN POOL_TYPE PoolType,
67 IN SIZE_T NumberOfBytes,
68 IN ULONG Tag,
69 IN OUT PLOOKASIDE_LIST_EX Lookaside);
70
71 typedef VOID
72 (NTAPI *PFREE_FUNCTION)(
73 IN PVOID Buffer);
74
75 typedef VOID
76 (NTAPI *PFREE_FUNCTION_EX)(
77 IN PVOID Buffer,
78 IN OUT PLOOKASIDE_LIST_EX Lookaside);
79
80 typedef VOID
81 (NTAPI *PCALLBACK_FUNCTION)(
82 IN PVOID CallbackContext,
83 IN PVOID Argument1,
84 IN PVOID Argument2);
85
86 #define GENERAL_LOOKASIDE_LAYOUT \
87 union { \
88 SLIST_HEADER ListHead; \
89 SINGLE_LIST_ENTRY SingleListHead; \
90 } DUMMYUNIONNAME; \
91 USHORT Depth; \
92 USHORT MaximumDepth; \
93 ULONG TotalAllocates; \
94 union { \
95 ULONG AllocateMisses; \
96 ULONG AllocateHits; \
97 } DUMMYUNIONNAME2; \
98 \
99 ULONG TotalFrees; \
100 union { \
101 ULONG FreeMisses; \
102 ULONG FreeHits; \
103 } DUMMYUNIONNAME3; \
104 \
105 POOL_TYPE Type; \
106 ULONG Tag; \
107 ULONG Size; \
108 union { \
109 PALLOCATE_FUNCTION_EX AllocateEx; \
110 PALLOCATE_FUNCTION Allocate; \
111 } DUMMYUNIONNAME4; \
112 \
113 union { \
114 PFREE_FUNCTION_EX FreeEx; \
115 PFREE_FUNCTION Free; \
116 } DUMMYUNIONNAME5; \
117 \
118 LIST_ENTRY ListEntry; \
119 ULONG LastTotalAllocates; \
120 union { \
121 ULONG LastAllocateMisses; \
122 ULONG LastAllocateHits; \
123 } DUMMYUNIONNAME6; \
124 ULONG Future[2];
125
126 typedef struct LOOKASIDE_ALIGN _GENERAL_LOOKASIDE {
127 GENERAL_LOOKASIDE_LAYOUT
128 } GENERAL_LOOKASIDE, *PGENERAL_LOOKASIDE;
129
130 typedef struct _GENERAL_LOOKASIDE_POOL {
131 GENERAL_LOOKASIDE_LAYOUT
132 } GENERAL_LOOKASIDE_POOL, *PGENERAL_LOOKASIDE_POOL;
133
134 #define LOOKASIDE_CHECK(f) \
135 C_ASSERT(FIELD_OFFSET(GENERAL_LOOKASIDE,f) == FIELD_OFFSET(GENERAL_LOOKASIDE_POOL,f))
136
137 LOOKASIDE_CHECK(TotalFrees);
138 LOOKASIDE_CHECK(Tag);
139 LOOKASIDE_CHECK(Future);
140
141 typedef struct _PAGED_LOOKASIDE_LIST {
142 GENERAL_LOOKASIDE L;
143 #if !defined(_AMD64_) && !defined(_IA64_)
144 FAST_MUTEX Lock__ObsoleteButDoNotDelete;
145 #endif
146 } PAGED_LOOKASIDE_LIST, *PPAGED_LOOKASIDE_LIST;
147
148 typedef struct LOOKASIDE_ALIGN _NPAGED_LOOKASIDE_LIST {
149 GENERAL_LOOKASIDE L;
150 #if !defined(_AMD64_) && !defined(_IA64_)
151 KSPIN_LOCK Lock__ObsoleteButDoNotDelete;
152 #endif
153 } NPAGED_LOOKASIDE_LIST, *PNPAGED_LOOKASIDE_LIST;
154
155 typedef struct _LOOKASIDE_LIST_EX {
156 GENERAL_LOOKASIDE_POOL L;
157 } LOOKASIDE_LIST_EX;
158
159 typedef struct _EX_RUNDOWN_REF {
160 __GNU_EXTENSION union {
161 volatile ULONG_PTR Count;
162 volatile PVOID Ptr;
163 };
164 } EX_RUNDOWN_REF, *PEX_RUNDOWN_REF;
165
166 typedef struct _EX_RUNDOWN_REF_CACHE_AWARE *PEX_RUNDOWN_REF_CACHE_AWARE;
167
168 typedef VOID
169 (NTAPI *PWORKER_THREAD_ROUTINE)(
170 IN PVOID Parameter);
171
172 typedef struct _WORK_QUEUE_ITEM {
173 LIST_ENTRY List;
174 PWORKER_THREAD_ROUTINE WorkerRoutine;
175 volatile PVOID Parameter;
176 } WORK_QUEUE_ITEM, *PWORK_QUEUE_ITEM;
177
178 $endif
179
180