FIO Windows update
[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
ecc314ba 7#include <windows.h>\r
03e20d68 8\r
ecc314ba
BC
9#include "../smalloc.h"\r
10#include "../file.h"\r
11#include "../log.h"\r
03e20d68
BC
12\r
13#define FIO_HAVE_ODIRECT\r
14#define FIO_USE_GENERIC_RAND\r
15#define FIO_HAVE_CHARDEV_SIZE\r
16#define FIO_USE_GENERIC_RAND\r
17\r
18#define FIO_HAVE_FALLOCATE\r
19#define FIO_HAVE_FDATASYNC\r
20#define FIO_HAVE_WINDOWSAIO\r
21\r
03e20d68
BC
22#define OS_MAP_ANON MAP_ANON\r
23\r
ecc314ba 24#define OS_CLOCK CLOCK_REALTIME\r
03e20d68 25\r
ecc314ba 26typedef off_t off64_t;\r
03e20d68
BC
27\r
28typedef struct {\r
29 LARGE_INTEGER Length;\r
30} GET_LENGTH_INFORMATION;\r
31\r
32#define IOCTL_DISK_GET_LENGTH_INFO 0x7405C\r
33\r
ecc314ba 34static inline int blockdev_size(struct fio_file *f, unsigned long long *bytes)\r
03e20d68
BC
35{\r
36 int rc = 0;\r
ecc314ba
BC
37 HANDLE hFile;\r
38\r
39 if (f->hFile == NULL) {\r
40 hFile = CreateFile(f->file_name, (GENERIC_READ | GENERIC_WRITE),\r
41 (FILE_SHARE_READ | FILE_SHARE_WRITE), NULL, OPEN_EXISTING, 0, NULL);\r
42 } else {\r
43 hFile = f->hFile;\r
03e20d68
BC
44 }\r
45\r
ecc314ba
BC
46 GET_LENGTH_INFORMATION info;\r
47 DWORD outBytes;\r
48 LARGE_INTEGER size;\r
49 size.QuadPart = 0;\r
50 if (DeviceIoControl(hFile, IOCTL_DISK_GET_LENGTH_INFO, NULL, 0, &info, sizeof(info), &outBytes, NULL))\r
51 *bytes = info.Length.QuadPart;\r
52 else\r
53 rc = EIO;\r
54 }\r
55\r
56 /* If we were passed a POSIX fd,\r
57 * close the HANDLE we created via CreateFile */\r
58 if (hFile != INVALID_HANDLE_VALUE && f->hFile == NULL)\r
59 CloseHandle(hFile);\r
60\r
61 return rc;\r
03e20d68
BC
62}\r
63\r
ecc314ba 64static inline int chardev_size(struct fio_file *f, unsigned long long *bytes)\r
03e20d68 65{\r
ecc314ba 66 return blockdev_size(f, bytes);\r
03e20d68
BC
67}\r
68\r
03e20d68 69{\r
03e20d68 70\r
ecc314ba
BC
71static inline int blockdev_invalidate_cache(struct fio_file *f)\r
72{\r
73 BOOL bSuccess = FlushFileBuffers(f->hFile);\r
74 if (!bSuccess)\r
75 log_info("blockdev_invalidate_cache - FlushFileBuffers failed\n");\r
03e20d68 76\r
ecc314ba 77 return 0;\r
03e20d68
BC
78}\r
79\r
80static inline unsigned long long os_phys_mem(void)\r
81{\r
82 SYSTEM_INFO sysInfo;\r
83 unsigned long addr;\r
84 GetSystemInfo(&sysInfo);\r
85 addr = (unsigned long)sysInfo.lpMaximumApplicationAddress;\r
86 return addr;\r
87}\r
88\r
89static inline void os_get_tmpdir(char *path, int len)\r
90{\r
91 GetTempPath(len, path);\r
92}\r
93\r
94#ifdef MADV_FREE\r
95#define FIO_MADV_FREE MADV_FREE\r
96#endif\r
97\r
98\r
99#endif /* FIO_OS_WINDOWS_H */\r