1 #ifndef FIO_OS_WINDOWS_H
\r
2 #define FIO_OS_WINDOWS_H
\r
5 #include <sys/types.h>
\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
14 #define FIO_HAVE_FALLOCATE
\r
15 #define FIO_HAVE_FDATASYNC
\r
16 #define FIO_HAVE_WINDOWSAIO
\r
18 /* TODO add support for FIO_HAVE_CPU_AFFINITY */
\r
20 #define OS_MAP_ANON MAP_ANON
\r
22 typedef off_t off64_t;
\r
27 #include <windows.h>
\r
30 typedef void* HANDLE;
\r
32 BOOL WINAPI GetFileSizeEx(
\r
34 PLARGE_INTEGER lpFileSize
\r
37 long _get_osfhandle(
\r
42 LARGE_INTEGER Length;
\r
43 } GET_LENGTH_INFORMATION;
\r
45 #define IOCTL_DISK_GET_LENGTH_INFO 0x7405C
\r
48 static inline int blockdev_size(int fd, unsigned long long *bytes)
\r
51 HANDLE hFile = (HANDLE)_get_osfhandle(fd);
\r
52 if (hFile != INVALID_HANDLE_VALUE)
\r
54 GET_LENGTH_INFORMATION info;
\r
58 if (DeviceIoControl(hFile, IOCTL_DISK_GET_LENGTH_INFO, NULL, 0, &info, sizeof(info), &outBytes, NULL))
\r
59 *bytes = info.Length.QuadPart;
\r
67 static inline int chardev_size(int fd, unsigned long long *bytes)
\r
69 return blockdev_size(fd, bytes);
\r
72 static inline int blockdev_invalidate_cache(int fd)
\r
75 HANDLE hFile = (HANDLE)_get_osfhandle(fd);
\r
77 if (hFile != INVALID_HANDLE_VALUE)
\r
78 FlushFileBuffers(hFile);
\r
85 static inline unsigned long long os_phys_mem(void)
\r
87 SYSTEM_INFO sysInfo;
\r
89 GetSystemInfo(&sysInfo);
\r
90 addr = (unsigned long)sysInfo.lpMaximumApplicationAddress;
\r
94 static inline void os_get_tmpdir(char *path, int len)
\r
96 GetTempPath(len, path);
\r
100 #define FIO_MADV_FREE MADV_FREE
\r
104 #endif /* FIO_OS_WINDOWS_H */
\r