1 /* SPDX-License-Identifier: BSD-3-Clause
2 * Copyright (c) 2017 Red Hat, Inc.
3 */
4
5 #ifndef _VHOST_IOTLB_H_
6 #define _VHOST_IOTLB_H_
7
8 #include <stdbool.h>
9
10 #include "vhost.h"
11
12 static __rte_always_inline void
vhost_user_iotlb_rd_lock(struct vhost_virtqueue * vq)13 vhost_user_iotlb_rd_lock(struct vhost_virtqueue *vq)
14 {
15 rte_rwlock_read_lock(&vq->iotlb_lock);
16 }
17
18 static __rte_always_inline void
vhost_user_iotlb_rd_unlock(struct vhost_virtqueue * vq)19 vhost_user_iotlb_rd_unlock(struct vhost_virtqueue *vq)
20 {
21 rte_rwlock_read_unlock(&vq->iotlb_lock);
22 }
23
24 static __rte_always_inline void
vhost_user_iotlb_wr_lock(struct vhost_virtqueue * vq)25 vhost_user_iotlb_wr_lock(struct vhost_virtqueue *vq)
26 {
27 rte_rwlock_write_lock(&vq->iotlb_lock);
28 }
29
30 static __rte_always_inline void
vhost_user_iotlb_wr_unlock(struct vhost_virtqueue * vq)31 vhost_user_iotlb_wr_unlock(struct vhost_virtqueue *vq)
32 {
33 rte_rwlock_write_unlock(&vq->iotlb_lock);
34 }
35
36 void vhost_user_iotlb_cache_insert(struct virtio_net *dev, struct vhost_virtqueue *vq,
37 uint64_t iova, uint64_t uaddr,
38 uint64_t size, uint8_t perm);
39 void vhost_user_iotlb_cache_remove(struct vhost_virtqueue *vq,
40 uint64_t iova, uint64_t size);
41 uint64_t vhost_user_iotlb_cache_find(struct vhost_virtqueue *vq, uint64_t iova,
42 uint64_t *size, uint8_t perm);
43 bool vhost_user_iotlb_pending_miss(struct vhost_virtqueue *vq, uint64_t iova,
44 uint8_t perm);
45 void vhost_user_iotlb_pending_insert(struct virtio_net *dev, struct vhost_virtqueue *vq,
46 uint64_t iova, uint8_t perm);
47 void vhost_user_iotlb_pending_remove(struct vhost_virtqueue *vq, uint64_t iova,
48 uint64_t size, uint8_t perm);
49 void vhost_user_iotlb_flush_all(struct vhost_virtqueue *vq);
50 int vhost_user_iotlb_init(struct virtio_net *dev, int vq_index);
51
52 #endif /* _VHOST_IOTLB_H_ */
53