os-aix.h revision cca84643cc10cd72b0b453ff92ccb8643ba51493
1#ifndef FIO_OS_AIX_H
2#define FIO_OS_AIX_H
3
4#define	FIO_OS	os_aix
5
6#include <errno.h>
7#include <unistd.h>
8#include <sys/devinfo.h>
9#include <sys/ioctl.h>
10
11#include "../file.h"
12
13#define FIO_HAVE_POSIXAIO
14#define FIO_HAVE_ODIRECT
15#define FIO_USE_GENERIC_RAND
16#define FIO_HAVE_CLOCK_MONOTONIC
17
18/*
19 * This is broken on AIX if _LARGE_FILES is defined...
20 */
21#if 0
22#define FIO_HAVE_FALLOCATE
23#endif
24
25#define FIO_HAVE_PSHARED_MUTEX
26
27#define OS_MAP_ANON		MAP_ANON
28#define OS_MSG_DONTWAIT		0
29
30#if BYTE_ORDER == BIG_ENDIAN
31#define FIO_BIG_ENDIAN
32#else
33#define FIO_LITTLE_ENDIAN
34#endif
35
36#define FIO_USE_GENERIC_SWAP
37
38#define FIO_OS_HAVE_SOCKLEN_T
39#define fio_socklen_t socklen_t
40
41static inline int blockdev_invalidate_cache(struct fio_file *f)
42{
43	return EINVAL;
44}
45
46static inline int blockdev_size(struct fio_file *f, unsigned long long *bytes)
47{
48	struct devinfo info;
49
50	if (!ioctl(f->fd, IOCINFO, &info)) {
51        	*bytes = (unsigned long long)info.un.scdk.numblks *
52				info.un.scdk.blksize;
53		return 0;
54	}
55
56	return errno;
57}
58
59static inline unsigned long long os_phys_mem(void)
60{
61	long mem = sysconf(_SC_AIX_REALMEM);
62
63	if (mem == -1)
64		return 0;
65
66	return (unsigned long long) mem * 1024;
67}
68
69#endif
70