xref: /dpdk/drivers/crypto/virtio/virtqueue.c (revision 06c047b680615678bb8773faaec53156ade94770)
1*25500d4bSJay Zhou /* SPDX-License-Identifier: BSD-3-Clause
2*25500d4bSJay Zhou  * Copyright(c) 2018 HUAWEI TECHNOLOGIES CO., LTD.
3*25500d4bSJay Zhou  */
4*25500d4bSJay Zhou 
5*25500d4bSJay Zhou #include <stdint.h>
6*25500d4bSJay Zhou 
7*25500d4bSJay Zhou #include <rte_mbuf.h>
8*25500d4bSJay Zhou #include <rte_crypto.h>
9*25500d4bSJay Zhou #include <rte_malloc.h>
10*25500d4bSJay Zhou 
11*25500d4bSJay Zhou #include "virtqueue.h"
12*25500d4bSJay Zhou 
13*25500d4bSJay Zhou void
virtqueue_disable_intr(struct virtqueue * vq)14*25500d4bSJay Zhou virtqueue_disable_intr(struct virtqueue *vq)
15*25500d4bSJay Zhou {
16*25500d4bSJay Zhou 	/*
17*25500d4bSJay Zhou 	 * Set VRING_AVAIL_F_NO_INTERRUPT to hint host
18*25500d4bSJay Zhou 	 * not to interrupt when it consumes packets
19*25500d4bSJay Zhou 	 * Note: this is only considered a hint to the host
20*25500d4bSJay Zhou 	 */
21*25500d4bSJay Zhou 	vq->vq_ring.avail->flags |= VRING_AVAIL_F_NO_INTERRUPT;
22*25500d4bSJay Zhou }
23*25500d4bSJay Zhou 
24*25500d4bSJay Zhou void
virtqueue_detatch_unused(struct virtqueue * vq)25*25500d4bSJay Zhou virtqueue_detatch_unused(struct virtqueue *vq)
26*25500d4bSJay Zhou {
27*25500d4bSJay Zhou 	struct rte_crypto_op *cop = NULL;
28*25500d4bSJay Zhou 
29*25500d4bSJay Zhou 	int idx;
30*25500d4bSJay Zhou 
31*25500d4bSJay Zhou 	if (vq != NULL)
32*25500d4bSJay Zhou 		for (idx = 0; idx < vq->vq_nentries; idx++) {
33*25500d4bSJay Zhou 			cop = vq->vq_descx[idx].crypto_op;
34*25500d4bSJay Zhou 			if (cop) {
35*25500d4bSJay Zhou 				rte_pktmbuf_free(cop->sym->m_src);
36*25500d4bSJay Zhou 				rte_pktmbuf_free(cop->sym->m_dst);
37*25500d4bSJay Zhou 				rte_crypto_op_free(cop);
38*25500d4bSJay Zhou 				vq->vq_descx[idx].crypto_op = NULL;
39*25500d4bSJay Zhou 			}
40*25500d4bSJay Zhou 		}
41*25500d4bSJay Zhou }
42