HP-UX disk query size
[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
58483fa4
JA
25#define FIO_PREFERRED_ENGINE "windowsaio"\r
26\r
ecc314ba 27typedef off_t off64_t;\r
03e20d68
BC
28\r
29typedef struct {\r
30 LARGE_INTEGER Length;\r
31} GET_LENGTH_INFORMATION;\r
32\r
33#define IOCTL_DISK_GET_LENGTH_INFO 0x7405C\r
34\r
ecc314ba 35static inline int blockdev_size(struct fio_file *f, unsigned long long *bytes)\r
03e20d68
BC
36{\r
37 int rc = 0;\r
ecc314ba
BC
38 HANDLE hFile;\r
39\r
40 if (f->hFile == NULL) {\r
9b836561
BC
41 hFile = CreateFile(f->file_name, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE,\r
42 NULL, OPEN_EXISTING, 0, NULL);\r
ecc314ba
BC
43 } else {\r
44 hFile = f->hFile;\r
03e20d68
BC
45 }\r
46\r
ecc314ba
BC
47 GET_LENGTH_INFORMATION info;\r
48 DWORD outBytes;\r
49 LARGE_INTEGER size;\r
50 size.QuadPart = 0;\r
51 if (DeviceIoControl(hFile, IOCTL_DISK_GET_LENGTH_INFO, NULL, 0, &info, sizeof(info), &outBytes, NULL))\r
52 *bytes = info.Length.QuadPart;\r
53 else\r
54 rc = EIO;\r
ecc314ba
BC
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
ecc314ba
BC
69static inline int blockdev_invalidate_cache(struct fio_file *f)\r
70{\r
e4db9fec
BC
71 /* There's no way to invalidate the cache in Windows\r
72 * so just pretend to succeed */\r
ecc314ba 73 return 0;\r
03e20d68
BC
74}\r
75\r
76static inline unsigned long long os_phys_mem(void)\r
77{\r
78 SYSTEM_INFO sysInfo;\r
79 unsigned long addr;\r
80 GetSystemInfo(&sysInfo);\r
81 addr = (unsigned long)sysInfo.lpMaximumApplicationAddress;\r
82 return addr;\r
83}\r
84\r
85static inline void os_get_tmpdir(char *path, int len)\r
86{\r
87 GetTempPath(len, path);\r
88}\r
89\r
90#ifdef MADV_FREE\r
91#define FIO_MADV_FREE MADV_FREE\r
92#endif\r
93\r
03e20d68 94#endif /* FIO_OS_WINDOWS_H */\r