b5ee5bb35e6a38f73c25bc05df8d3b0a0ed0ace1
[fio.git] / os / os-aix.h
1 #ifndef FIO_OS_AIX_H
2 #define FIO_OS_AIX_H
3
4 #include <errno.h>
5 #include <unistd.h>
6 #include <sys/devinfo.h>
7 #include <sys/ioctl.h>
8
9 #define FIO_HAVE_POSIXAIO
10 #define FIO_HAVE_ODIRECT
11 #define FIO_USE_GENERIC_RAND
12 #define FIO_HAVE_CLOCK_MONOTONIC
13
14 /*
15  * This is broken on AIX if _LARGE_FILES is defined...
16  */
17 #if 0
18 #define FIO_HAVE_FALLOCATE
19 #endif
20
21 #define FIO_HAVE_PSHARED_MUTEX
22
23 #define OS_MAP_ANON             MAP_ANON
24 #define OS_MSG_DONTWAIT         0
25
26 static inline int blockdev_invalidate_cache(struct fio_file fio_unused *f)
27 {
28         return EINVAL;
29 }
30
31 static inline int blockdev_size(struct fio_file *f, unsigned long long *bytes)
32 {
33         struct devinfo info;
34
35         if (!ioctl(f->fd, IOCINFO, &info)) {
36                 *bytes = (unsigned long long)info.un.scdk.numblks *
37                                 info.un.scdk.blksize;
38                 return 0;
39         }
40
41         return errno;
42 }
43
44 static inline unsigned long long os_phys_mem(void)
45 {
46         long mem = sysconf(_SC_AIX_REALMEM);
47
48         if (mem == -1)
49                 return 0;
50
51         return (unsigned long long) mem * 1024;
52 }
53
54 #endif