1*54e60f84SAndroid Build Coastguard Worker /*
2*54e60f84SAndroid Build Coastguard Worker * Copyright © Microsoft Corporation
3*54e60f84SAndroid Build Coastguard Worker *
4*54e60f84SAndroid Build Coastguard Worker * Permission is hereby granted, free of charge, to any person obtaining a
5*54e60f84SAndroid Build Coastguard Worker * copy of this software and associated documentation files (the "Software"),
6*54e60f84SAndroid Build Coastguard Worker * to deal in the Software without restriction, including without limitation
7*54e60f84SAndroid Build Coastguard Worker * the rights to use, copy, modify, merge, publish, distribute, sublicense,
8*54e60f84SAndroid Build Coastguard Worker * and/or sell copies of the Software, and to permit persons to whom the
9*54e60f84SAndroid Build Coastguard Worker * Software is furnished to do so, subject to the following conditions:
10*54e60f84SAndroid Build Coastguard Worker *
11*54e60f84SAndroid Build Coastguard Worker * The above copyright notice and this permission notice (including the next
12*54e60f84SAndroid Build Coastguard Worker * paragraph) shall be included in all copies or substantial portions of the
13*54e60f84SAndroid Build Coastguard Worker * Software.
14*54e60f84SAndroid Build Coastguard Worker *
15*54e60f84SAndroid Build Coastguard Worker * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16*54e60f84SAndroid Build Coastguard Worker * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17*54e60f84SAndroid Build Coastguard Worker * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
18*54e60f84SAndroid Build Coastguard Worker * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19*54e60f84SAndroid Build Coastguard Worker * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20*54e60f84SAndroid Build Coastguard Worker * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
21*54e60f84SAndroid Build Coastguard Worker * IN THE SOFTWARE.
22*54e60f84SAndroid Build Coastguard Worker */
23*54e60f84SAndroid Build Coastguard Worker
24*54e60f84SAndroid Build Coastguard Worker #ifndef _COMPAT_WIN32_H_
25*54e60f84SAndroid Build Coastguard Worker #define _COMPAT_WIN32_H_
26*54e60f84SAndroid Build Coastguard Worker
27*54e60f84SAndroid Build Coastguard Worker #include <windows.h>
28*54e60f84SAndroid Build Coastguard Worker #include <winsock.h>
29*54e60f84SAndroid Build Coastguard Worker #include <io.h>
30*54e60f84SAndroid Build Coastguard Worker #include <time.h>
31*54e60f84SAndroid Build Coastguard Worker
32*54e60f84SAndroid Build Coastguard Worker // Include stdlib.h here to make sure we
33*54e60f84SAndroid Build Coastguard Worker // always replace MSVC getenv definition
34*54e60f84SAndroid Build Coastguard Worker // with the macro / _getenv inline below
35*54e60f84SAndroid Build Coastguard Worker #include <stdlib.h>
36*54e60f84SAndroid Build Coastguard Worker
37*54e60f84SAndroid Build Coastguard Worker #ifdef __cplusplus
38*54e60f84SAndroid Build Coastguard Worker extern "C" {
39*54e60f84SAndroid Build Coastguard Worker #endif
40*54e60f84SAndroid Build Coastguard Worker
41*54e60f84SAndroid Build Coastguard Worker #define F_OK 0
42*54e60f84SAndroid Build Coastguard Worker #define RTLD_NOW 0
43*54e60f84SAndroid Build Coastguard Worker #define RTLD_GLOBAL 0
44*54e60f84SAndroid Build Coastguard Worker
45*54e60f84SAndroid Build Coastguard Worker #ifndef NTSTATUS
46*54e60f84SAndroid Build Coastguard Worker typedef LONG NTSTATUS;
47*54e60f84SAndroid Build Coastguard Worker #define STATUS_SUCCESS ((NTSTATUS)0x00000000L)
48*54e60f84SAndroid Build Coastguard Worker #define STATUS_BUFFER_TOO_SMALL ((NTSTATUS)0xC0000023)
49*54e60f84SAndroid Build Coastguard Worker #define NT_SUCCESS(status) (((NTSTATUS)(status)) >= 0)
50*54e60f84SAndroid Build Coastguard Worker #endif
51*54e60f84SAndroid Build Coastguard Worker
52*54e60f84SAndroid Build Coastguard Worker typedef unsigned int __uid_t;
53*54e60f84SAndroid Build Coastguard Worker
54*54e60f84SAndroid Build Coastguard Worker #if _MSC_VER
55*54e60f84SAndroid Build Coastguard Worker #define getenv _getenv
56*54e60f84SAndroid Build Coastguard Worker #define secure_getenv _getenv
57*54e60f84SAndroid Build Coastguard Worker #define HAVE_SECURE_GETENV
_getenv(const char * varname)58*54e60f84SAndroid Build Coastguard Worker inline char* _getenv(const char *varname)
59*54e60f84SAndroid Build Coastguard Worker {
60*54e60f84SAndroid Build Coastguard Worker static char _getenv_buf[32767];
61*54e60f84SAndroid Build Coastguard Worker return GetEnvironmentVariableA(varname, &_getenv_buf[0], sizeof(_getenv_buf)) ? &_getenv_buf[0] : NULL;
62*54e60f84SAndroid Build Coastguard Worker }
63*54e60f84SAndroid Build Coastguard Worker #endif
64*54e60f84SAndroid Build Coastguard Worker
65*54e60f84SAndroid Build Coastguard Worker #ifdef _MSC_VER
strtok_r(char * s,const char * delim,char ** save_ptr)66*54e60f84SAndroid Build Coastguard Worker inline char* strtok_r(char *s, const char *delim, char **save_ptr)
67*54e60f84SAndroid Build Coastguard Worker {
68*54e60f84SAndroid Build Coastguard Worker return strtok_s(s, delim, save_ptr);
69*54e60f84SAndroid Build Coastguard Worker }
70*54e60f84SAndroid Build Coastguard Worker #endif
71*54e60f84SAndroid Build Coastguard Worker
dlopen(const char * file,int mode)72*54e60f84SAndroid Build Coastguard Worker inline void* dlopen(const char *file, int mode)
73*54e60f84SAndroid Build Coastguard Worker {
74*54e60f84SAndroid Build Coastguard Worker return LoadLibrary(file);
75*54e60f84SAndroid Build Coastguard Worker }
76*54e60f84SAndroid Build Coastguard Worker
dlclose(void * handle)77*54e60f84SAndroid Build Coastguard Worker inline int dlclose(void *handle)
78*54e60f84SAndroid Build Coastguard Worker {
79*54e60f84SAndroid Build Coastguard Worker return FreeLibrary(handle);
80*54e60f84SAndroid Build Coastguard Worker }
81*54e60f84SAndroid Build Coastguard Worker
dlsym(void * handle,const char * name)82*54e60f84SAndroid Build Coastguard Worker inline void *dlsym(void *handle, const char *name)
83*54e60f84SAndroid Build Coastguard Worker {
84*54e60f84SAndroid Build Coastguard Worker return GetProcAddress(handle, name);
85*54e60f84SAndroid Build Coastguard Worker }
86*54e60f84SAndroid Build Coastguard Worker
dlerror()87*54e60f84SAndroid Build Coastguard Worker inline static char* dlerror()
88*54e60f84SAndroid Build Coastguard Worker {
89*54e60f84SAndroid Build Coastguard Worker static char last_err_string[512];
90*54e60f84SAndroid Build Coastguard Worker memset(last_err_string, '\0', 512);
91*54e60f84SAndroid Build Coastguard Worker FormatMessageA(FORMAT_MESSAGE_FROM_SYSTEM, NULL, GetLastError(),
92*54e60f84SAndroid Build Coastguard Worker MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), last_err_string, (512 - 1), NULL);
93*54e60f84SAndroid Build Coastguard Worker return last_err_string;
94*54e60f84SAndroid Build Coastguard Worker }
95*54e60f84SAndroid Build Coastguard Worker
geteuid()96*54e60f84SAndroid Build Coastguard Worker inline __uid_t geteuid()
97*54e60f84SAndroid Build Coastguard Worker {
98*54e60f84SAndroid Build Coastguard Worker return 0;
99*54e60f84SAndroid Build Coastguard Worker };
100*54e60f84SAndroid Build Coastguard Worker
getuid()101*54e60f84SAndroid Build Coastguard Worker inline __uid_t getuid()
102*54e60f84SAndroid Build Coastguard Worker {
103*54e60f84SAndroid Build Coastguard Worker return 0;
104*54e60f84SAndroid Build Coastguard Worker };
105*54e60f84SAndroid Build Coastguard Worker
106*54e60f84SAndroid Build Coastguard Worker typedef DWORD pid_t;
107*54e60f84SAndroid Build Coastguard Worker typedef CRITICAL_SECTION pthread_mutex_t;
108*54e60f84SAndroid Build Coastguard Worker
pthread_mutex_lock(pthread_mutex_t * a)109*54e60f84SAndroid Build Coastguard Worker inline void pthread_mutex_lock(pthread_mutex_t* a)
110*54e60f84SAndroid Build Coastguard Worker {
111*54e60f84SAndroid Build Coastguard Worker EnterCriticalSection(a);
112*54e60f84SAndroid Build Coastguard Worker }
113*54e60f84SAndroid Build Coastguard Worker
pthread_mutex_unlock(pthread_mutex_t * a)114*54e60f84SAndroid Build Coastguard Worker inline void pthread_mutex_unlock(pthread_mutex_t* a)
115*54e60f84SAndroid Build Coastguard Worker {
116*54e60f84SAndroid Build Coastguard Worker LeaveCriticalSection(a);
117*54e60f84SAndroid Build Coastguard Worker }
118*54e60f84SAndroid Build Coastguard Worker
pthread_mutex_init(pthread_mutex_t * a,void * attr)119*54e60f84SAndroid Build Coastguard Worker inline void pthread_mutex_init(pthread_mutex_t* a, void* attr)
120*54e60f84SAndroid Build Coastguard Worker {
121*54e60f84SAndroid Build Coastguard Worker InitializeCriticalSection(a);
122*54e60f84SAndroid Build Coastguard Worker }
123*54e60f84SAndroid Build Coastguard Worker
pthread_mutex_destroy(pthread_mutex_t * a)124*54e60f84SAndroid Build Coastguard Worker inline void pthread_mutex_destroy(pthread_mutex_t* a)
125*54e60f84SAndroid Build Coastguard Worker {
126*54e60f84SAndroid Build Coastguard Worker DeleteCriticalSection(a);
127*54e60f84SAndroid Build Coastguard Worker }
128*54e60f84SAndroid Build Coastguard Worker
gettimeofday(struct timeval * tv,struct timezone * tz)129*54e60f84SAndroid Build Coastguard Worker inline int gettimeofday(struct timeval *tv, struct timezone* tz)
130*54e60f84SAndroid Build Coastguard Worker {
131*54e60f84SAndroid Build Coastguard Worker SYSTEMTIME st;
132*54e60f84SAndroid Build Coastguard Worker GetSystemTime(&st);
133*54e60f84SAndroid Build Coastguard Worker tv->tv_sec = st.wSecond;
134*54e60f84SAndroid Build Coastguard Worker tv->tv_usec = st.wMilliseconds * 1000; /* milli to micro sec */
135*54e60f84SAndroid Build Coastguard Worker return 0;
136*54e60f84SAndroid Build Coastguard Worker }
137*54e60f84SAndroid Build Coastguard Worker
138*54e60f84SAndroid Build Coastguard Worker #ifdef _MSC_VER
139*54e60f84SAndroid Build Coastguard Worker #include <d3dkmthk.h>
140*54e60f84SAndroid Build Coastguard Worker #include <d3dukmdt.h>
141*54e60f84SAndroid Build Coastguard Worker #else
142*54e60f84SAndroid Build Coastguard Worker //
143*54e60f84SAndroid Build Coastguard Worker // DDI level handle that represents a kernel mode object (allocation, device, etc)
144*54e60f84SAndroid Build Coastguard Worker //
145*54e60f84SAndroid Build Coastguard Worker typedef UINT D3DKMT_HANDLE;
146*54e60f84SAndroid Build Coastguard Worker
147*54e60f84SAndroid Build Coastguard Worker typedef struct _D3DKMT_CLOSEADAPTER {
148*54e60f84SAndroid Build Coastguard Worker D3DKMT_HANDLE hAdapter; // in: adapter handle
149*54e60f84SAndroid Build Coastguard Worker } D3DKMT_CLOSEADAPTER;
150*54e60f84SAndroid Build Coastguard Worker
151*54e60f84SAndroid Build Coastguard Worker typedef struct _D3DKMT_OPENADAPTERFROMLUID {
152*54e60f84SAndroid Build Coastguard Worker LUID AdapterLuid;
153*54e60f84SAndroid Build Coastguard Worker D3DKMT_HANDLE hAdapter;
154*54e60f84SAndroid Build Coastguard Worker } D3DKMT_OPENADAPTERFROMLUID;
155*54e60f84SAndroid Build Coastguard Worker
156*54e60f84SAndroid Build Coastguard Worker typedef enum _KMTQUERYADAPTERINFOTYPE {
157*54e60f84SAndroid Build Coastguard Worker KMTQAITYPE_QUERYREGISTRY = 48,
158*54e60f84SAndroid Build Coastguard Worker } KMTQUERYADAPTERINFOTYPE;
159*54e60f84SAndroid Build Coastguard Worker
160*54e60f84SAndroid Build Coastguard Worker typedef struct _D3DKMT_QUERYADAPTERINFO {
161*54e60f84SAndroid Build Coastguard Worker D3DKMT_HANDLE hAdapter;
162*54e60f84SAndroid Build Coastguard Worker KMTQUERYADAPTERINFOTYPE Type;
163*54e60f84SAndroid Build Coastguard Worker VOID* pPrivateDriverData;
164*54e60f84SAndroid Build Coastguard Worker UINT PrivateDriverDataSize;
165*54e60f84SAndroid Build Coastguard Worker } D3DKMT_QUERYADAPTERINFO;
166*54e60f84SAndroid Build Coastguard Worker
167*54e60f84SAndroid Build Coastguard Worker typedef struct _D3DDDI_QUERYREGISTRY_FLAGS {
168*54e60f84SAndroid Build Coastguard Worker union {
169*54e60f84SAndroid Build Coastguard Worker struct {
170*54e60f84SAndroid Build Coastguard Worker UINT TranslatePath : 1;
171*54e60f84SAndroid Build Coastguard Worker UINT MutableValue : 1;
172*54e60f84SAndroid Build Coastguard Worker UINT Reserved : 30;
173*54e60f84SAndroid Build Coastguard Worker };
174*54e60f84SAndroid Build Coastguard Worker UINT Value;
175*54e60f84SAndroid Build Coastguard Worker };
176*54e60f84SAndroid Build Coastguard Worker } D3DDDI_QUERYREGISTRY_FLAGS;
177*54e60f84SAndroid Build Coastguard Worker
178*54e60f84SAndroid Build Coastguard Worker typedef enum _D3DDDI_QUERYREGISTRY_TYPE {
179*54e60f84SAndroid Build Coastguard Worker D3DDDI_QUERYREGISTRY_ADAPTERKEY = 1,
180*54e60f84SAndroid Build Coastguard Worker } D3DDDI_QUERYREGISTRY_TYPE;
181*54e60f84SAndroid Build Coastguard Worker
182*54e60f84SAndroid Build Coastguard Worker typedef enum _D3DDDI_QUERYREGISTRY_STATUS {
183*54e60f84SAndroid Build Coastguard Worker D3DDDI_QUERYREGISTRY_STATUS_SUCCESS = 0,
184*54e60f84SAndroid Build Coastguard Worker D3DDDI_QUERYREGISTRY_STATUS_BUFFER_OVERFLOW = 1,
185*54e60f84SAndroid Build Coastguard Worker } D3DDDI_QUERYREGISTRY_STATUS;
186*54e60f84SAndroid Build Coastguard Worker
187*54e60f84SAndroid Build Coastguard Worker typedef struct _D3DDDI_QUERYREGISTRY_INFO {
188*54e60f84SAndroid Build Coastguard Worker D3DDDI_QUERYREGISTRY_TYPE QueryType; // In
189*54e60f84SAndroid Build Coastguard Worker D3DDDI_QUERYREGISTRY_FLAGS QueryFlags; // In
190*54e60f84SAndroid Build Coastguard Worker WCHAR ValueName[MAX_PATH]; // In
191*54e60f84SAndroid Build Coastguard Worker ULONG ValueType; // In
192*54e60f84SAndroid Build Coastguard Worker ULONG PhysicalAdapterIndex; // In
193*54e60f84SAndroid Build Coastguard Worker ULONG OutputValueSize; // Out. Number of bytes written to the output value or required in case of D3DDDI_QUERYREGISTRY_STATUS_BUFFER_OVERFLOW.
194*54e60f84SAndroid Build Coastguard Worker D3DDDI_QUERYREGISTRY_STATUS Status; // Out
195*54e60f84SAndroid Build Coastguard Worker union {
196*54e60f84SAndroid Build Coastguard Worker DWORD OutputDword; // Out
197*54e60f84SAndroid Build Coastguard Worker UINT64 OutputQword; // Out
198*54e60f84SAndroid Build Coastguard Worker WCHAR OutputString[1]; // Out. Dynamic array
199*54e60f84SAndroid Build Coastguard Worker BYTE OutputBinary[1]; // Out. Dynamic array
200*54e60f84SAndroid Build Coastguard Worker };
201*54e60f84SAndroid Build Coastguard Worker } D3DDDI_QUERYREGISTRY_INFO;
202*54e60f84SAndroid Build Coastguard Worker
203*54e60f84SAndroid Build Coastguard Worker typedef _Check_return_ NTSTATUS(APIENTRY *PFND3DKMT_CLOSEADAPTER)(_In_ CONST D3DKMT_CLOSEADAPTER*);
204*54e60f84SAndroid Build Coastguard Worker typedef _Check_return_ NTSTATUS(APIENTRY *PFND3DKMT_OPENADAPTERFROMLUID)(_Inout_ D3DKMT_OPENADAPTERFROMLUID*);
205*54e60f84SAndroid Build Coastguard Worker typedef _Check_return_ NTSTATUS(APIENTRY *PFND3DKMT_QUERYADAPTERINFO)(_Inout_ CONST D3DKMT_QUERYADAPTERINFO*);
206*54e60f84SAndroid Build Coastguard Worker
207*54e60f84SAndroid Build Coastguard Worker #endif
208*54e60f84SAndroid Build Coastguard Worker
209*54e60f84SAndroid Build Coastguard Worker #ifdef __cplusplus
210*54e60f84SAndroid Build Coastguard Worker }
211*54e60f84SAndroid Build Coastguard Worker #endif
212*54e60f84SAndroid Build Coastguard Worker
213*54e60f84SAndroid Build Coastguard Worker #endif /* _COMPAT_WIN32_H_ */
214