First snapshot of FIO for Windows
[fio.git] / os / os-windows.h
CommitLineData
03e20d68
BC
1#ifndef FIO_OS_WINDOWS_H\r
2#define FIO_OS_WINDOWS_H\r
3\r
4\r
5#include <sys/types.h>\r
6#include <errno.h>\r
7\r
8\r
9#define FIO_HAVE_ODIRECT\r
10#define FIO_USE_GENERIC_RAND\r
11#define FIO_HAVE_CHARDEV_SIZE\r
12#define FIO_USE_GENERIC_RAND\r
13\r
14#define FIO_HAVE_FALLOCATE\r
15#define FIO_HAVE_FDATASYNC\r
16#define FIO_HAVE_WINDOWSAIO\r
17\r
18/* TODO add support for FIO_HAVE_CPU_AFFINITY */\r
19\r
20#define OS_MAP_ANON MAP_ANON\r
21\r
22typedef off_t off64_t;\r
23\r
24\r
25#define FIO_NOTUNIX\r
26\r
27#include <windows.h>\r
28#include <io.h>\r
29\r
30typedef void* HANDLE;\r
31\r
32BOOL WINAPI GetFileSizeEx(\r
33 HANDLE hFile,\r
34 PLARGE_INTEGER lpFileSize\r
35);\r
36\r
37long _get_osfhandle(\r
38 int fd\r
39);\r
40\r
41typedef struct {\r
42 LARGE_INTEGER Length;\r
43} GET_LENGTH_INFORMATION;\r
44\r
45#define IOCTL_DISK_GET_LENGTH_INFO 0x7405C\r
46\r
47\r
48static inline int blockdev_size(int fd, unsigned long long *bytes)\r
49{\r
50 int rc = 0;\r
51 HANDLE hFile = (HANDLE)_get_osfhandle(fd);\r
52 if (hFile != INVALID_HANDLE_VALUE)\r
53 {\r
54 GET_LENGTH_INFORMATION info;\r
55 DWORD outBytes;\r
56 LARGE_INTEGER size;\r
57 size.QuadPart = 0;\r
58 if (DeviceIoControl(hFile, IOCTL_DISK_GET_LENGTH_INFO, NULL, 0, &info, sizeof(info), &outBytes, NULL))\r
59 *bytes = info.Length.QuadPart;\r
60 else\r
61 rc = EIO;\r
62 }\r
63\r
64 return 0;\r
65}\r
66\r
67static inline int chardev_size(int fd, unsigned long long *bytes)\r
68{\r
69 return blockdev_size(fd, bytes);\r
70}\r
71\r
72static inline int blockdev_invalidate_cache(int fd)\r
73{\r
74 int rc = 0;\r
75 HANDLE hFile = (HANDLE)_get_osfhandle(fd);\r
76\r
77 if (hFile != INVALID_HANDLE_VALUE)\r
78 FlushFileBuffers(hFile);\r
79 else\r
80 rc = EIO;\r
81\r
82 return rc;\r
83}\r
84\r
85static inline unsigned long long os_phys_mem(void)\r
86{\r
87 SYSTEM_INFO sysInfo;\r
88 unsigned long addr;\r
89 GetSystemInfo(&sysInfo);\r
90 addr = (unsigned long)sysInfo.lpMaximumApplicationAddress;\r
91 return addr;\r
92}\r
93\r
94static inline void os_get_tmpdir(char *path, int len)\r
95{\r
96 GetTempPath(len, path);\r
97}\r
98\r
99#ifdef MADV_FREE\r
100#define FIO_MADV_FREE MADV_FREE\r
101#endif\r
102\r
103\r
104#endif /* FIO_OS_WINDOWS_H */\r