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 Zhouvirtqueue_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 Zhouvirtqueue_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