Commit | Line | Data |
---|---|---|
0bbe3066 JW |
1 | /* SPDX-License-Identifier: GPL-2.0 */ |
2 | #ifndef _LINUX_VHOST_IOTLB_H | |
3 | #define _LINUX_VHOST_IOTLB_H | |
4 | ||
5 | #include <linux/interval_tree_generic.h> | |
6 | ||
7 | struct vhost_iotlb_map { | |
8 | struct rb_node rb; | |
9 | struct list_head link; | |
10 | u64 start; | |
11 | u64 last; | |
12 | u64 size; | |
13 | u64 addr; | |
14 | #define VHOST_MAP_RO 0x1 | |
15 | #define VHOST_MAP_WO 0x2 | |
16 | #define VHOST_MAP_RW 0x3 | |
17 | u32 perm; | |
18 | u32 flags_padding; | |
19 | u64 __subtree_last; | |
20 | }; | |
21 | ||
22 | #define VHOST_IOTLB_FLAG_RETIRE 0x1 | |
23 | ||
24 | struct vhost_iotlb { | |
25 | struct rb_root_cached root; | |
26 | struct list_head list; | |
27 | unsigned int limit; | |
28 | unsigned int nmaps; | |
29 | unsigned int flags; | |
30 | }; | |
31 | ||
32 | int vhost_iotlb_add_range(struct vhost_iotlb *iotlb, u64 start, u64 last, | |
33 | u64 addr, unsigned int perm); | |
34 | void vhost_iotlb_del_range(struct vhost_iotlb *iotlb, u64 start, u64 last); | |
35 | ||
36 | struct vhost_iotlb *vhost_iotlb_alloc(unsigned int limit, unsigned int flags); | |
37 | void vhost_iotlb_free(struct vhost_iotlb *iotlb); | |
38 | void vhost_iotlb_reset(struct vhost_iotlb *iotlb); | |
39 | ||
40 | struct vhost_iotlb_map * | |
41 | vhost_iotlb_itree_first(struct vhost_iotlb *iotlb, u64 start, u64 last); | |
42 | struct vhost_iotlb_map * | |
43 | vhost_iotlb_itree_next(struct vhost_iotlb_map *map, u64 start, u64 last); | |
44 | ||
45 | void vhost_iotlb_map_free(struct vhost_iotlb *iotlb, | |
46 | struct vhost_iotlb_map *map); | |
47 | #endif |