e517ec0f261f5ae618ac1395a52d581c3a15b541
[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
7 #define FIO_HAVE_POSIXAIO
8 #define FIO_HAVE_ODIRECT
9
10 #define OS_MAP_ANON             MAP_ANON
11
12 typedef unsigned long os_cpu_mask_t;
13 typedef unsigned int os_random_state_t;
14
15 /*
16  * FIXME
17  */
18 static inline int blockdev_size(int fd, unsigned long long *bytes)
19 {
20         off_t end = lseek(fd, 0, SEEK_END);
21
22         if (end < 0)
23                 return errno;
24
25         *bytes = end;
26         return 0;
27 }
28
29 static inline int blockdev_invalidate_cache(int fd)
30 {
31         return EINVAL;
32 }
33
34 static inline unsigned long long os_phys_mem(void)
35 {
36         int mib[2] = { CTL_HW, HW_PHYSMEM };
37         unsigned long long mem;
38         size_t len = sizeof(mem);
39
40         sysctl(mib, 2, &mem, &len, NULL, 0);
41         return mem;
42 }
43
44 static inline void os_random_seed(unsigned long seed, os_random_state_t *rs)
45 {
46         srand(seed);
47 }
48
49 static inline long os_random_long(os_random_state_t *rs)
50 {
51         long val;
52
53         val = rand_r(rs);
54         return val;
55 }
56
57 #endif