os-freebsd.h revision 4ccdccd149d82c94ec6ccdb4118d9e27479b8516
1ebac4655dd3624f3296ff83be48e0cdc02852f1Jens Axboe#ifndef FIO_OS_FREEBSD_H
2ebac4655dd3624f3296ff83be48e0cdc02852f1Jens Axboe#define FIO_OS_FREEBSD_H
3ebac4655dd3624f3296ff83be48e0cdc02852f1Jens Axboe
4690dec6e4ec7297a477b809fa24ee23dc02348c9Jens Axboe#include <errno.h>
55c4e1dbc4ec6ee963220c5f4e64a04cd6130dc81Jens Axboe#include <sys/sysctl.h>
6aa5e69b26d16ae4c1680d05b25149f3198036714Jens Axboe#include <sys/disk.h>
75c4e1dbc4ec6ee963220c5f4e64a04cd6130dc81Jens Axboe
8ebac4655dd3624f3296ff83be48e0cdc02852f1Jens Axboe#define FIO_HAVE_POSIXAIO
92c0ecd28459b6a1b236c865defb5ef76ce8bfa02Jens Axboe#define FIO_HAVE_ODIRECT
10535313705d69dc16f27ca38acf2f9bf7205e410dJens Axboe#define FIO_USE_GENERIC_RAND
114ccdccd149d82c94ec6ccdb4118d9e27479b8516Jens Axboe#define FIO_HAVE_CHARDEV_SIZE
12ebac4655dd3624f3296ff83be48e0cdc02852f1Jens Axboe
13dc873b6f4a536c332b72cce268d5a7ccd356a891Jens Axboe#define OS_MAP_ANON		MAP_ANON
14ebac4655dd3624f3296ff83be48e0cdc02852f1Jens Axboe
15907249cffbdfa26de688c127abb5483154a4eae6Jens Axboetypedef off_t off64_t;
16907249cffbdfa26de688c127abb5483154a4eae6Jens Axboe
17aa5e69b26d16ae4c1680d05b25149f3198036714Jens Axboestatic inline int blockdev_size(int fd, unsigned long long *bytes)
18aa5e69b26d16ae4c1680d05b25149f3198036714Jens Axboe{
19aa5e69b26d16ae4c1680d05b25149f3198036714Jens Axboe	off_t size;
20aa5e69b26d16ae4c1680d05b25149f3198036714Jens Axboe
21aa5e69b26d16ae4c1680d05b25149f3198036714Jens Axboe	if (!ioctl(fd, DIOCGMEDIASIZE, &size)) {
22aa5e69b26d16ae4c1680d05b25149f3198036714Jens Axboe		*bytes = size;
23aa5e69b26d16ae4c1680d05b25149f3198036714Jens Axboe		return 0;
24aa5e69b26d16ae4c1680d05b25149f3198036714Jens Axboe	}
25aa5e69b26d16ae4c1680d05b25149f3198036714Jens Axboe
262fa55e93d8895e0645df3e50baae82d15d9beea4Jens Axboe	*bytes = 0;
27aa5e69b26d16ae4c1680d05b25149f3198036714Jens Axboe	return errno;
28aa5e69b26d16ae4c1680d05b25149f3198036714Jens Axboe}
29aa5e69b26d16ae4c1680d05b25149f3198036714Jens Axboe
304ccdccd149d82c94ec6ccdb4118d9e27479b8516Jens Axboestatic inline int chardev_size(int fd, unsigned long long *bytes)
314ccdccd149d82c94ec6ccdb4118d9e27479b8516Jens Axboe{
324ccdccd149d82c94ec6ccdb4118d9e27479b8516Jens Axboe	return blockdev_size(fd, bytes);
334ccdccd149d82c94ec6ccdb4118d9e27479b8516Jens Axboe}
344ccdccd149d82c94ec6ccdb4118d9e27479b8516Jens Axboe
35e5b401d4bf67a1704f28872d3abe09eaf65cdabeJens Axboestatic inline int blockdev_invalidate_cache(int fd)
36e5b401d4bf67a1704f28872d3abe09eaf65cdabeJens Axboe{
37e5b401d4bf67a1704f28872d3abe09eaf65cdabeJens Axboe	return EINVAL;
38ebac4655dd3624f3296ff83be48e0cdc02852f1Jens Axboe}
39ebac4655dd3624f3296ff83be48e0cdc02852f1Jens Axboe
4032cd46a085ac60f4f8b085e2d65ebfc6100bb8c5Jens Axboestatic inline unsigned long long os_phys_mem(void)
4132cd46a085ac60f4f8b085e2d65ebfc6100bb8c5Jens Axboe{
4232cd46a085ac60f4f8b085e2d65ebfc6100bb8c5Jens Axboe	int mib[2] = { CTL_HW, HW_PHYSMEM };
4332cd46a085ac60f4f8b085e2d65ebfc6100bb8c5Jens Axboe	unsigned long long mem;
4432cd46a085ac60f4f8b085e2d65ebfc6100bb8c5Jens Axboe	size_t len = sizeof(mem);
4532cd46a085ac60f4f8b085e2d65ebfc6100bb8c5Jens Axboe
4632cd46a085ac60f4f8b085e2d65ebfc6100bb8c5Jens Axboe	sysctl(mib, 2, &mem, &len, NULL, 0);
4732cd46a085ac60f4f8b085e2d65ebfc6100bb8c5Jens Axboe	return mem;
4832cd46a085ac60f4f8b085e2d65ebfc6100bb8c5Jens Axboe}
4932cd46a085ac60f4f8b085e2d65ebfc6100bb8c5Jens Axboe
50a1c58075279454a91ec43366846b93e8dcf9753cJens Axboe#ifdef MADV_FREE
51a1c58075279454a91ec43366846b93e8dcf9753cJens Axboe#define FIO_MADV_FREE	MADV_FREE
52a1c58075279454a91ec43366846b93e8dcf9753cJens Axboe#endif
53a1c58075279454a91ec43366846b93e8dcf9753cJens Axboe
54ebac4655dd3624f3296ff83be48e0cdc02852f1Jens Axboe#endif
55