0cb7ae5e5ca079380e20a514f1f0f1b9df3748c2
[fio.git] / os / os-freebsd.h
1 #ifndef FIO_OS_FREEBSD_H
2 #define FIO_OS_FREEBSD_H
3
4 #include <errno.h>
5 #include <sys/sysctl.h>
6 #include <sys/disk.h>
7
8 #define FIO_HAVE_POSIXAIO
9 #define FIO_HAVE_ODIRECT
10 #define FIO_HAVE_IOPRIO
11 #define FIO_HAVE_STRSEP
12 #define FIO_USE_GENERIC_RAND
13 #define FIO_HAVE_CHARDEV_SIZE
14 #define FIO_HAVE_CLOCK_MONOTONIC
15
16 #define OS_MAP_ANON             MAP_ANON
17
18 typedef off_t off64_t;
19
20 static inline int blockdev_size(struct fio_file *f, unsigned long long *bytes)
21 {
22         off_t size;
23
24         if (!ioctl(f->fd, DIOCGMEDIASIZE, &size)) {
25                 *bytes = size;
26                 return 0;
27         }
28
29         *bytes = 0;
30         return errno;
31 }
32
33 static inline int chardev_size(struct fio_file *f, unsigned long long *bytes)
34 {
35         return blockdev_size(f->fd, bytes);
36 }
37
38 static inline int blockdev_invalidate_cache(struct fio_file *f)
39 {
40         return EINVAL;
41 }
42
43 static inline unsigned long long os_phys_mem(void)
44 {
45         int mib[2] = { CTL_HW, HW_PHYSMEM };
46         unsigned long long mem;
47         size_t len = sizeof(mem);
48
49         sysctl(mib, 2, &mem, &len, NULL, 0);
50         return mem;
51 }
52
53 #ifdef MADV_FREE
54 #define FIO_MADV_FREE   MADV_FREE
55 #endif
56
57 #endif