1 /*
2  * Copyright © 2009-2016 Inria.  All rights reserved.
3  * Copyright © 2009-2012 Université Bordeaux
4  * See COPYING in top-level directory.
5  */
6 
7 #ifndef HWLOC_PORT_WINDOWS_WINDOWS_H
8 #define HWLOC_PORT_WINDOWS_WINDOWS_H
9 
10 #include <inttypes.h>
11 
12 #define DECLARE_HANDLE(n) typedef struct n##__ {int i;} *n
13 DECLARE_HANDLE(HINSTANCE);
14 typedef HINSTANCE HMODULE;
15 typedef int WINBOOL, BOOL;
16 typedef int64_t LONGLONG;
17 typedef uint64_t DWORDLONG;
18 typedef DWORDLONG ULONGLONG, *PULONGLONG;
19 typedef unsigned char BYTE, UCHAR;
20 typedef unsigned short WORD, USHORT;
21 typedef unsigned int UINT, UINT_PTR, DWORD, *PDWORD, *LPDWORD;
22 typedef unsigned long ULONG_PTR, DWORD_PTR, *PDWORD_PTR;
23 typedef const char *LPCSTR;
24 typedef int (*FARPROC)(void);
25 typedef void *PVOID,*LPVOID;
26 typedef void VOID;
27 typedef ULONG_PTR SIZE_T;
28 
29 /* This is to cope with linux using integers for hwloc_pid_t and hwloc_thread_t
30 typedef PVOID HANDLE; */
31 typedef int HANDLE;
32 
33 #ifdef __GNUC__
34 #define _ANONYMOUS_UNION __extension__
35 #define _ANONYMOUS_STRUCT __extension__
36 #else
37 #define _ANONYMOUS_UNION
38 #define _ANONYMOUS_STRUCT
39 #endif /* __GNUC__ */
40 #define DUMMYUNIONNAME
41 #define WINAPI
42 
43 #define ANYSIZE_ARRAY 1
44 
45 #define ERROR_INSUFFICIENT_BUFFER 122L
46 
47 #define MEM_COMMIT	0x1000
48 #define MEM_RESERVE	0x2000
49 #define MEM_RELEASE	0x8000
50 
51 #define PAGE_EXECUTE_READWRITE	0x0040
52 
53 WINAPI HINSTANCE LoadLibrary(LPCSTR);
54 WINAPI FARPROC GetProcAddress(HINSTANCE, LPCSTR);
55 WINAPI DWORD GetLastError(void);
56 
57 DWORD_PTR WINAPI SetThreadAffinityMask(HANDLE hThread, DWORD_PTR dwThreadAffinityMask);
58 BOOL WINAPI SetProcessAffinityMask(HANDLE hProcess, DWORD_PTR dwProcessAffinityMask);
59 BOOL WINAPI GetProcessAffinityMask(HANDLE hProcess, PDWORD_PTR lpProcessAffinityMask, PDWORD_PTR lpSystemAffinityMask);
60 
61 HANDLE WINAPI GetCurrentThread(void);
62 HANDLE WINAPI GetCurrentProcess(void);
63 
64 PVOID WINAPI VirtualAlloc(PVOID,DWORD,DWORD,DWORD);
65 
66 BOOL GetNumaAvailableMemoryNode(UCHAR Node, PULONGLONG AvailableBytes);
67 
68 typedef struct _SYSTEM_INFO {
69   DWORD dwPageSize;
70   DWORD_PTR dwActiveProcessorMask;
71   DWORD dwNumberOfProcessors;
72 } SYSTEM_INFO, *LPSYSTEM_INFO;
73 
74 void WINAPI GetSystemInfo(LPSYSTEM_INFO lpSystemInfo);
75 
76 /* hide Linux' host disabling _SC_LARGE_PAGESIZE */
77 #undef HAVE_DECL__SC_LARGE_PAGESIZE
78 #define HAVE_DECL__SC_LARGE_PAGESIZE 1
79 #undef _SC_LARGE_PAGESIZE
80 #define _SC_LARGE_PAGESIZE 33
81 
82 #endif /* HWLOC_PORT_WINDOWS_WINDOWS_H */
83