1c00a22894b82ff53b42c1e741a7b4828199a1388Jens Axboe#ifndef FIO_OS_HPUX_H
2c00a22894b82ff53b42c1e741a7b4828199a1388Jens Axboe#define FIO_OS_HPUX_H
3c00a22894b82ff53b42c1e741a7b4828199a1388Jens Axboe
4cca84643cc10cd72b0b453ff92ccb8643ba51493Jens Axboe#define	FIO_OS	os_hpux
5cca84643cc10cd72b0b453ff92ccb8643ba51493Jens Axboe
6c00a22894b82ff53b42c1e741a7b4828199a1388Jens Axboe#include <errno.h>
7c00a22894b82ff53b42c1e741a7b4828199a1388Jens Axboe#include <unistd.h>
8c00a22894b82ff53b42c1e741a7b4828199a1388Jens Axboe#include <sys/ioctl.h>
9c00a22894b82ff53b42c1e741a7b4828199a1388Jens Axboe#include <sys/fcntl.h>
10c00a22894b82ff53b42c1e741a7b4828199a1388Jens Axboe#include <sys/fadvise.h>
11c00a22894b82ff53b42c1e741a7b4828199a1388Jens Axboe#include <sys/mman.h>
12c00a22894b82ff53b42c1e741a7b4828199a1388Jens Axboe#include <sys/mpctl.h>
130ec15d6ca9fee3c2b0f19b3520f5b77fb2378d51Jens Axboe#include <sys/diskio.h>
148c9ca2e6fe5a400fcba3a7dd45a33effea8298e0Jens Axboe#include <sys/param.h>
158c9ca2e6fe5a400fcba3a7dd45a33effea8298e0Jens Axboe#include <sys/pstat.h>
16d48a9799a3d3cbe3c41658d6e41d6791b33e926cJens Axboe#include <time.h>
17d48a9799a3d3cbe3c41658d6e41d6791b33e926cJens Axboe#include <aio.h>
186e675fcb0886d989b327bdb6a0a8717f345221cbJens Axboe#include <arm.h>
19c00a22894b82ff53b42c1e741a7b4828199a1388Jens Axboe
20c00a22894b82ff53b42c1e741a7b4828199a1388Jens Axboe#include "../file.h"
21c00a22894b82ff53b42c1e741a7b4828199a1388Jens Axboe
22c00a22894b82ff53b42c1e741a7b4828199a1388Jens Axboe#define FIO_HAVE_ODIRECT
23c00a22894b82ff53b42c1e741a7b4828199a1388Jens Axboe#define FIO_USE_GENERIC_RAND
2493bcfd20e37cef8cec350fe06d3a086724c9f257Bruce Cran#define FIO_USE_GENERIC_INIT_RANDOM_STATE
25c00a22894b82ff53b42c1e741a7b4828199a1388Jens Axboe#define FIO_HAVE_PSHARED_MUTEX
260ec15d6ca9fee3c2b0f19b3520f5b77fb2378d51Jens Axboe#define FIO_HAVE_CHARDEV_SIZE
27c00a22894b82ff53b42c1e741a7b4828199a1388Jens Axboe
28c00a22894b82ff53b42c1e741a7b4828199a1388Jens Axboe#define OS_MAP_ANON		MAP_ANONYMOUS
29c00a22894b82ff53b42c1e741a7b4828199a1388Jens Axboe#define OS_MSG_DONTWAIT		0
30c00a22894b82ff53b42c1e741a7b4828199a1388Jens Axboe
31c00a22894b82ff53b42c1e741a7b4828199a1388Jens Axboe#define POSIX_MADV_DONTNEED	MADV_DONTNEED
32c00a22894b82ff53b42c1e741a7b4828199a1388Jens Axboe#define POSIX_MADV_SEQUENTIAL	MADV_SEQUENTIAL
33c00a22894b82ff53b42c1e741a7b4828199a1388Jens Axboe#define POSIX_MADV_RANDOM	MADV_RANDOM
34c00a22894b82ff53b42c1e741a7b4828199a1388Jens Axboe#define posix_madvise(ptr, sz, hint)	madvise((ptr), (sz), (hint))
35c00a22894b82ff53b42c1e741a7b4828199a1388Jens Axboe
36d48a9799a3d3cbe3c41658d6e41d6791b33e926cJens Axboe#ifndef MSG_WAITALL
37d48a9799a3d3cbe3c41658d6e41d6791b33e926cJens Axboe#define MSG_WAITALL	0x40
38d48a9799a3d3cbe3c41658d6e41d6791b33e926cJens Axboe#endif
39d48a9799a3d3cbe3c41658d6e41d6791b33e926cJens Axboe
40901ebe18bdca90032e2fe107a1410385da80d18bJens Axboe#define FIO_USE_GENERIC_SWAP
41901ebe18bdca90032e2fe107a1410385da80d18bJens Axboe
42e97c14423a5688d7adfb342c16363c263cb741f9Jens Axboe#define FIO_OS_HAVE_AIOCB_TYPEDEF
43e97c14423a5688d7adfb342c16363c263cb741f9Jens Axboetypedef struct aiocb64 os_aiocb_t;
44e97c14423a5688d7adfb342c16363c263cb741f9Jens Axboe
45c00a22894b82ff53b42c1e741a7b4828199a1388Jens Axboestatic inline int blockdev_invalidate_cache(struct fio_file *f)
46c00a22894b82ff53b42c1e741a7b4828199a1388Jens Axboe{
47c00a22894b82ff53b42c1e741a7b4828199a1388Jens Axboe	return EINVAL;
48c00a22894b82ff53b42c1e741a7b4828199a1388Jens Axboe}
49c00a22894b82ff53b42c1e741a7b4828199a1388Jens Axboe
50c00a22894b82ff53b42c1e741a7b4828199a1388Jens Axboestatic inline int blockdev_size(struct fio_file *f, unsigned long long *bytes)
51c00a22894b82ff53b42c1e741a7b4828199a1388Jens Axboe{
520ec15d6ca9fee3c2b0f19b3520f5b77fb2378d51Jens Axboe	disk_describe_type_ext_t dext;
53c00a22894b82ff53b42c1e741a7b4828199a1388Jens Axboe
540ec15d6ca9fee3c2b0f19b3520f5b77fb2378d51Jens Axboe	if (!ioctl(f->fd, DIOC_DESCRIBE_EXT, &dext)) {
550ec15d6ca9fee3c2b0f19b3520f5b77fb2378d51Jens Axboe		unsigned long long lba;
560ec15d6ca9fee3c2b0f19b3520f5b77fb2378d51Jens Axboe
570ec15d6ca9fee3c2b0f19b3520f5b77fb2378d51Jens Axboe		lba = ((uint64_t) dext.maxsva_high << 32) | dext.maxsva_low;
580ec15d6ca9fee3c2b0f19b3520f5b77fb2378d51Jens Axboe		*bytes = lba * dext.lgblksz;
59c00a22894b82ff53b42c1e741a7b4828199a1388Jens Axboe		return 0;
60c00a22894b82ff53b42c1e741a7b4828199a1388Jens Axboe	}
61c00a22894b82ff53b42c1e741a7b4828199a1388Jens Axboe
62564e49f329dd526842a29f4086fff727bc4d0ba0Jens Axboe	*bytes = 0;
63c00a22894b82ff53b42c1e741a7b4828199a1388Jens Axboe	return errno;
64c00a22894b82ff53b42c1e741a7b4828199a1388Jens Axboe}
65c00a22894b82ff53b42c1e741a7b4828199a1388Jens Axboe
660ec15d6ca9fee3c2b0f19b3520f5b77fb2378d51Jens Axboestatic inline int chardev_size(struct fio_file *f, unsigned long long *bytes)
670ec15d6ca9fee3c2b0f19b3520f5b77fb2378d51Jens Axboe{
680ec15d6ca9fee3c2b0f19b3520f5b77fb2378d51Jens Axboe	return blockdev_size(f, bytes);
690ec15d6ca9fee3c2b0f19b3520f5b77fb2378d51Jens Axboe}
700ec15d6ca9fee3c2b0f19b3520f5b77fb2378d51Jens Axboe
71c00a22894b82ff53b42c1e741a7b4828199a1388Jens Axboestatic inline unsigned long long os_phys_mem(void)
72c00a22894b82ff53b42c1e741a7b4828199a1388Jens Axboe{
738c9ca2e6fe5a400fcba3a7dd45a33effea8298e0Jens Axboe	unsigned long long ret;
748c9ca2e6fe5a400fcba3a7dd45a33effea8298e0Jens Axboe	struct pst_static pst;
758c9ca2e6fe5a400fcba3a7dd45a33effea8298e0Jens Axboe	union pstun pu;
76c00a22894b82ff53b42c1e741a7b4828199a1388Jens Axboe
778c9ca2e6fe5a400fcba3a7dd45a33effea8298e0Jens Axboe	pu.pst_static = &pst;
788c9ca2e6fe5a400fcba3a7dd45a33effea8298e0Jens Axboe	if (pstat(PSTAT_STATIC, pu, sizeof(pst), 0, 0) == -1)
79c00a22894b82ff53b42c1e741a7b4828199a1388Jens Axboe		return 0;
80c00a22894b82ff53b42c1e741a7b4828199a1388Jens Axboe
818c9ca2e6fe5a400fcba3a7dd45a33effea8298e0Jens Axboe	ret = pst.physical_memory;
828c9ca2e6fe5a400fcba3a7dd45a33effea8298e0Jens Axboe	ret *= pst.page_size;
838c9ca2e6fe5a400fcba3a7dd45a33effea8298e0Jens Axboe	return ret;
84c00a22894b82ff53b42c1e741a7b4828199a1388Jens Axboe}
85c00a22894b82ff53b42c1e741a7b4828199a1388Jens Axboe
86c00a22894b82ff53b42c1e741a7b4828199a1388Jens Axboe#define FIO_HAVE_CPU_ONLINE_SYSCONF
87c00a22894b82ff53b42c1e741a7b4828199a1388Jens Axboe
88c00a22894b82ff53b42c1e741a7b4828199a1388Jens Axboestatic inline unsigned int cpus_online(void)
89c00a22894b82ff53b42c1e741a7b4828199a1388Jens Axboe{
90c00a22894b82ff53b42c1e741a7b4828199a1388Jens Axboe	return mpctl(MPC_GETNUMSPUS, 0, NULL);
91c00a22894b82ff53b42c1e741a7b4828199a1388Jens Axboe}
92c00a22894b82ff53b42c1e741a7b4828199a1388Jens Axboe
93c00a22894b82ff53b42c1e741a7b4828199a1388Jens Axboe#endif
94