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; | |
59dfe4f1 | 20 | void *opaque; |
0bbe3066 JW |
21 | }; |
22 | ||
23 | #define VHOST_IOTLB_FLAG_RETIRE 0x1 | |
24 | ||
25 | struct vhost_iotlb { | |
26 | struct rb_root_cached root; | |
27 | struct list_head list; | |
28 | unsigned int limit; | |
29 | unsigned int nmaps; | |
30 | unsigned int flags; | |
31 | }; | |
32 | ||
59dfe4f1 XY |
33 | int vhost_iotlb_add_range_ctx(struct vhost_iotlb *iotlb, u64 start, u64 last, |
34 | u64 addr, unsigned int perm, void *opaque); | |
0bbe3066 JW |
35 | int vhost_iotlb_add_range(struct vhost_iotlb *iotlb, u64 start, u64 last, |
36 | u64 addr, unsigned int perm); | |
37 | void vhost_iotlb_del_range(struct vhost_iotlb *iotlb, u64 start, u64 last); | |
38 | ||
1cb10899 GD |
39 | void vhost_iotlb_init(struct vhost_iotlb *iotlb, unsigned int limit, |
40 | unsigned int flags); | |
0bbe3066 JW |
41 | struct vhost_iotlb *vhost_iotlb_alloc(unsigned int limit, unsigned int flags); |
42 | void vhost_iotlb_free(struct vhost_iotlb *iotlb); | |
43 | void vhost_iotlb_reset(struct vhost_iotlb *iotlb); | |
44 | ||
45 | struct vhost_iotlb_map * | |
46 | vhost_iotlb_itree_first(struct vhost_iotlb *iotlb, u64 start, u64 last); | |
47 | struct vhost_iotlb_map * | |
48 | vhost_iotlb_itree_next(struct vhost_iotlb_map *map, u64 start, u64 last); | |
49 | ||
50 | void vhost_iotlb_map_free(struct vhost_iotlb *iotlb, | |
51 | struct vhost_iotlb_map *map); | |
52 | #endif |