1#ifndef FIO_OS_HPUX_H 2#define FIO_OS_HPUX_H 3 4#define FIO_OS os_hpux 5 6#include <errno.h> 7#include <unistd.h> 8#include <sys/ioctl.h> 9#include <sys/fcntl.h> 10#include <sys/fadvise.h> 11#include <sys/mman.h> 12#include <sys/mpctl.h> 13#include <sys/diskio.h> 14#include <sys/param.h> 15#include <sys/pstat.h> 16#include <time.h> 17#include <aio.h> 18#include <arm.h> 19 20#include "../file.h" 21 22#define FIO_HAVE_ODIRECT 23#define FIO_USE_GENERIC_RAND 24#define FIO_USE_GENERIC_INIT_RANDOM_STATE 25#define FIO_HAVE_CHARDEV_SIZE 26 27#define OS_MAP_ANON MAP_ANONYMOUS 28#define OS_MSG_DONTWAIT 0 29 30#define POSIX_MADV_DONTNEED MADV_DONTNEED 31#define POSIX_MADV_SEQUENTIAL MADV_SEQUENTIAL 32#define POSIX_MADV_RANDOM MADV_RANDOM 33#define posix_madvise(ptr, sz, hint) madvise((ptr), (sz), (hint)) 34 35#ifndef MSG_WAITALL 36#define MSG_WAITALL 0x40 37#endif 38 39#define FIO_USE_GENERIC_SWAP 40 41#define FIO_OS_HAVE_AIOCB_TYPEDEF 42typedef struct aiocb64 os_aiocb_t; 43 44static inline int blockdev_invalidate_cache(struct fio_file *f) 45{ 46 return ENOTSUP; 47} 48 49static inline int blockdev_size(struct fio_file *f, unsigned long long *bytes) 50{ 51 disk_describe_type_ext_t dext; 52 53 if (!ioctl(f->fd, DIOC_DESCRIBE_EXT, &dext)) { 54 unsigned long long lba; 55 56 lba = ((uint64_t) dext.maxsva_high << 32) | dext.maxsva_low; 57 *bytes = lba * dext.lgblksz; 58 return 0; 59 } 60 61 *bytes = 0; 62 return errno; 63} 64 65static inline int chardev_size(struct fio_file *f, unsigned long long *bytes) 66{ 67 return blockdev_size(f, bytes); 68} 69 70static inline unsigned long long os_phys_mem(void) 71{ 72 unsigned long long ret; 73 struct pst_static pst; 74 union pstun pu; 75 76 pu.pst_static = &pst; 77 if (pstat(PSTAT_STATIC, pu, sizeof(pst), 0, 0) == -1) 78 return 0; 79 80 ret = pst.physical_memory; 81 ret *= pst.page_size; 82 return ret; 83} 84 85#define FIO_HAVE_CPU_ONLINE_SYSCONF 86 87static inline unsigned int cpus_online(void) 88{ 89 return mpctl(MPC_GETNUMSPUS, 0, NULL); 90} 91 92#endif 93