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