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