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