Assume AIX is big endian
[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 #warning "Assuming big endian on AIX, fix me up"
29 #define FIO_BIG_ENDIAN
30 #define FIO_USE_GENERIC_SWAP
31
32 static inline int blockdev_invalidate_cache(struct fio_file *f)
33 {
34         return EINVAL;
35 }
36
37 static inline int blockdev_size(struct fio_file *f, unsigned long long *bytes)
38 {
39         struct devinfo info;
40
41         if (!ioctl(f->fd, IOCINFO, &info)) {
42                 *bytes = (unsigned long long)info.un.scdk.numblks *
43                                 info.un.scdk.blksize;
44                 return 0;
45         }
46
47         return errno;
48 }
49
50 static inline unsigned long long os_phys_mem(void)
51 {
52         long mem = sysconf(_SC_AIX_REALMEM);
53
54         if (mem == -1)
55                 return 0;
56
57         return (unsigned long long) mem * 1024;
58 }
59
60 #endif