ReactOS  0.4.15-dev-3207-ga415bd4
acmsvc.h
Go to the documentation of this file.
1 /******************************************************************************
2  *
3  * Name: acmsvc.h - VC specific defines, etc.
4  *
5  *****************************************************************************/
6 
7 /*
8  * Copyright (C) 2000 - 2021, Intel Corp.
9  * All rights reserved.
10  *
11  * Redistribution and use in source and binary forms, with or without
12  * modification, are permitted provided that the following conditions
13  * are met:
14  * 1. Redistributions of source code must retain the above copyright
15  * notice, this list of conditions, and the following disclaimer,
16  * without modification.
17  * 2. Redistributions in binary form must reproduce at minimum a disclaimer
18  * substantially similar to the "NO WARRANTY" disclaimer below
19  * ("Disclaimer") and any redistribution must be conditioned upon
20  * including a substantially similar Disclaimer requirement for further
21  * binary redistribution.
22  * 3. Neither the names of the above-listed copyright holders nor the names
23  * of any contributors may be used to endorse or promote products derived
24  * from this software without specific prior written permission.
25  *
26  * Alternatively, this software may be distributed under the terms of the
27  * GNU General Public License ("GPL") version 2 as published by the Free
28  * Software Foundation.
29  *
30  * NO WARRANTY
31  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
32  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
33  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
34  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
35  * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
36  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
37  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
38  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
39  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
40  * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
41  * POSSIBILITY OF SUCH DAMAGES.
42  */
43 
44 #ifndef __ACMSVC_H__
45 #define __ACMSVC_H__
46 
47 /* Note: do not include any C library headers here */
48 
49 /*
50  * Note: MSVC project files should define ACPI_DEBUGGER and ACPI_DISASSEMBLER
51  * as appropriate to enable editor functions like "Find all references".
52  * The editor isn't smart enough to dig through the include files to find
53  * out if these are actually defined.
54  */
55 
56 /* Eliminate warnings for "old" (non-secure) versions of clib functions */
57 
58 #ifndef _CRT_SECURE_NO_WARNINGS
59 #define _CRT_SECURE_NO_WARNINGS
60 #endif
61 
62 /* Eliminate warnings for POSIX clib function names (open, write, etc.) */
63 
64 #ifndef _CRT_NONSTDC_NO_DEPRECATE
65 #define _CRT_NONSTDC_NO_DEPRECATE
66 #endif
67 
68 #define COMPILER_DEPENDENT_INT64 __int64
69 #define COMPILER_DEPENDENT_UINT64 unsigned __int64
70 #define ACPI_INLINE __inline
71 
72 /*
73  * Calling conventions:
74  *
75  * ACPI_SYSTEM_XFACE - Interfaces to host OS (handlers, threads)
76  * ACPI_EXTERNAL_XFACE - External ACPI interfaces
77  * ACPI_INTERNAL_XFACE - Internal ACPI interfaces
78  * ACPI_INTERNAL_VAR_XFACE - Internal variable-parameter list interfaces
79  */
80 #define ACPI_SYSTEM_XFACE __cdecl
81 #define ACPI_EXTERNAL_XFACE
82 #define ACPI_INTERNAL_XFACE
83 #define ACPI_INTERNAL_VAR_XFACE __cdecl
84 
85 
86 /* Do not maintain the architecture specific stuffs for the EFI ports */
87 
88 #if defined(__i386__) && !defined(_GNU_EFI) && !defined(_EDK2_EFI)
89 /*
90  * Math helper functions
91  */
92 #ifndef ACPI_DIV_64_BY_32
93 #define ACPI_DIV_64_BY_32(n_hi, n_lo, d32, q32, r32) \
94 { \
95  __asm mov edx, n_hi \
96  __asm mov eax, n_lo \
97  __asm div d32 \
98  __asm mov q32, eax \
99  __asm mov r32, edx \
100 }
101 #endif
102 
103 #ifndef ACPI_MUL_64_BY_32
104 #define ACPI_MUL_64_BY_32(n_hi, n_lo, m32, p32, c32) \
105 { \
106  __asm mov edx, n_hi \
107  __asm mov eax, n_lo \
108  __asm mul m32 \
109  __asm mov p32, eax \
110  __asm mov c32, edx \
111 }
112 #endif
113 
114 #ifndef ACPI_SHIFT_LEFT_64_BY_32
115 #define ACPI_SHIFT_LEFT_64_BY_32(n_hi, n_lo, s32) \
116 { \
117  __asm mov edx, n_hi \
118  __asm mov eax, n_lo \
119  __asm mov ecx, s32 \
120  __asm and ecx, 31 \
121  __asm shld edx, eax, cl \
122  __asm shl eax, cl \
123  __asm mov n_hi, edx \
124  __asm mov n_lo, eax \
125 }
126 #endif
127 
128 #ifndef ACPI_SHIFT_RIGHT_64_BY_32
129 #define ACPI_SHIFT_RIGHT_64_BY_32(n_hi, n_lo, s32) \
130 { \
131  __asm mov edx, n_hi \
132  __asm mov eax, n_lo \
133  __asm mov ecx, s32 \
134  __asm and ecx, 31 \
135  __asm shrd eax, edx, cl \
136  __asm shr edx, cl \
137  __asm mov n_hi, edx \
138  __asm mov n_lo, eax \
139 }
140 #endif
141 
142 #ifndef ACPI_SHIFT_RIGHT_64
143 #define ACPI_SHIFT_RIGHT_64(n_hi, n_lo) \
144 { \
145  __asm shr n_hi, 1 \
146  __asm rcr n_lo, 1 \
147 }
148 #endif
149 #endif
150 
151 #ifdef __REACTOS__
152 #ifdef _M_IX86
153 /* Flush CPU cache - used when going to sleep. Wbinvd or similar. */
154 
155 #ifdef ACPI_APPLICATION
156 #define ACPI_FLUSH_CPU_CACHE()
157 #else
158 #define ACPI_FLUSH_CPU_CACHE() __asm {WBINVD}
159 #endif
160 
161 /*
162  * Global Lock acquire/release code
163  *
164  * Note: Handles case where the FACS pointer is null
165  */
166 #define ACPI_ACQUIRE_GLOBAL_LOCK(FacsPtr, Acq) __asm \
167 { \
168  __asm mov eax, 0xFF \
169  __asm mov ecx, FacsPtr \
170  __asm or ecx, ecx \
171  __asm jz exit_acq \
172  __asm lea ecx, [ecx].GlobalLock \
173  \
174  __asm acq10: \
175  __asm mov eax, [ecx] \
176  __asm mov edx, eax \
177  __asm and edx, 0xFFFFFFFE \
178  __asm bts edx, 1 \
179  __asm adc edx, 0 \
180  __asm lock cmpxchg dword ptr [ecx], edx \
181  __asm jnz acq10 \
182  \
183  __asm cmp dl, 3 \
184  __asm sbb eax, eax \
185  \
186  __asm exit_acq: \
187  __asm mov Acq, al \
188 }
189 
190 #define ACPI_RELEASE_GLOBAL_LOCK(FacsPtr, Pnd) __asm \
191 { \
192  __asm xor eax, eax \
193  __asm mov ecx, FacsPtr \
194  __asm or ecx, ecx \
195  __asm jz exit_rel \
196  __asm lea ecx, [ecx].GlobalLock \
197  \
198  __asm Rel10: \
199  __asm mov eax, [ecx] \
200  __asm mov edx, eax \
201  __asm and edx, 0xFFFFFFFC \
202  __asm lock cmpxchg dword ptr [ecx], edx \
203  __asm jnz Rel10 \
204  \
205  __asm cmp dl, 3 \
206  __asm and eax, 1 \
207  \
208  __asm exit_rel: \
209  __asm mov Pnd, al \
210 }
211 #endif /* _M_IX86 */
212 #endif /* __REACTOS__ */
213 
214 /* warn C4001: use of slash-slash comments */
215 /* NOTE: MSVC 2015 headers use these extensively */
216 #pragma warning(disable:4001)
217 
218 /* warn C4100: unreferenced formal parameter */
219 #pragma warning(disable:4100)
220 
221 /* warn C4127: conditional expression is constant */
222 #pragma warning(disable:4127)
223 
224 /* warn C4706: assignment within conditional expression */
225 #pragma warning(disable:4706)
226 
227 /* warn C4131: uses old-style declarator (iASL compiler only) */
228 #pragma warning(disable:4131)
229 
230 /* warn C4131: uses old-style declarator (iASL compiler only) */
231 #pragma warning(disable:4459)
232 
233 /* warn c4200: allow flexible arrays (of zero length) */
234 #pragma warning(disable:4200)
235 
236 #if _MSC_VER > 1200 /* Versions above VC++ 6 */
237 #pragma warning( disable : 4295 ) /* needed for acpredef.h array */
238 #endif
239 
240 /*
241  * MSVC 2015+
242  */
243 
244  /* warn C4459: xxxx (identifier) hides global declaration */
245 #pragma warning(disable:4459)
246 
247 
248 /* Debug support. */
249 
250 #ifdef _DEBUG
251 
252 /*
253  * Debugging memory corruption issues with windows:
254  * Add #include <crtdbg.h> to accommon.h if necessary.
255  * Add _ASSERTE(_CrtCheckMemory()); where needed to test memory integrity.
256  * This can quickly localize the memory corruption.
257  */
258 #define ACPI_DEBUG_INITIALIZE() \
259  _CrtSetDbgFlag (\
260  _CRTDBG_CHECK_ALWAYS_DF | \
261  _CRTDBG_ALLOC_MEM_DF | \
262  _CRTDBG_DELAY_FREE_MEM_DF | \
263  _CRTDBG_LEAK_CHECK_DF | \
264  _CrtSetDbgFlag(_CRTDBG_REPORT_FLAG));
265 
266 #if 0
267 /*
268  * _CrtSetBreakAlloc can be used to set a breakpoint at a particular
269  * memory leak, add to the macro above.
270  */
271 Detected memory leaks!
272 Dumping objects ->
273 ..\..\source\os_specific\service_layers\oswinxf.c(701) : {937} normal block at 0x002E9190, 40 bytes long.
274  Data: < > 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
275 
276 _CrtSetBreakAlloc (937);
277 #endif
278 
279 #endif
280 
281 #if _MSC_VER > 1200 /* Versions above VC++ 6 */
282 #define COMPILER_VA_MACRO 1
283 #else
284 #endif
285 
286 /* Begin standard headers */
287 
288 /*
289  * warn C4001: nonstandard extension 'single line comment' was used
290  *
291  * We need to enable this for ACPICA internal files, but disable it for
292  * buggy MS runtime headers.
293  */
294 #pragma warning(push)
295 #pragma warning(disable:4001)
296 
297 #endif /* __ACMSVC_H__ */
static unsigned int block
Definition: xmlmemory.c:118
_Must_inspect_result_ _In_ WDFDEVICE _In_ PWDF_DEVICE_PROPERTY_DATA _In_ DEVPROPTYPE _In_ ULONG _In_opt_ PVOID Data
Definition: wdfdevice.h:4527
static char memory[1024 *256]
Definition: process.c:116
#define _CrtSetBreakAlloc(a)
Definition: crtdbg.h:236
static const CLSID * objects[]
Definition: apphelp.c:112
static unsigned char bytes[4]
Definition: adnsresfilter.c:74
unsigned char c[8]
Definition: mstsclib_i.c:55