42d67317c7542b7eebbd214a708e4737e926d256
[dpdk.git] / drivers / crypto / nitrox / nitrox_sym_reqmgr.c
1 /* SPDX-License-Identifier: BSD-3-Clause
2  * Copyright(C) 2019 Marvell International Ltd.
3  */
4
5 #include <rte_crypto.h>
6 #include <rte_cryptodev.h>
7 #include <rte_errno.h>
8
9 #include "nitrox_sym_reqmgr.h"
10 #include "nitrox_logs.h"
11
12 struct nitrox_softreq {
13         rte_iova_t iova;
14 };
15
16 static void
17 softreq_init(struct nitrox_softreq *sr, rte_iova_t iova)
18 {
19         memset(sr, 0, sizeof(*sr));
20         sr->iova = iova;
21 }
22
23 static void
24 req_pool_obj_init(__rte_unused struct rte_mempool *mp,
25                   __rte_unused void *opaque, void *obj,
26                   __rte_unused unsigned int obj_idx)
27 {
28         softreq_init(obj, rte_mempool_virt2iova(obj));
29 }
30
31 struct rte_mempool *
32 nitrox_sym_req_pool_create(struct rte_cryptodev *cdev, uint32_t nobjs,
33                            uint16_t qp_id, int socket_id)
34 {
35         char softreq_pool_name[RTE_RING_NAMESIZE];
36         struct rte_mempool *mp;
37
38         snprintf(softreq_pool_name, RTE_RING_NAMESIZE, "%s_sr_%d",
39                  cdev->data->name, qp_id);
40         mp = rte_mempool_create(softreq_pool_name,
41                                 RTE_ALIGN_MUL_CEIL(nobjs, 64),
42                                 sizeof(struct nitrox_softreq),
43                                 64, 0, NULL, NULL, req_pool_obj_init, NULL,
44                                 socket_id, 0);
45         if (unlikely(!mp))
46                 NITROX_LOG(ERR, "Failed to create req pool, qid %d, err %d\n",
47                            qp_id, rte_errno);
48
49         return mp;
50 }
51
52 void
53 nitrox_sym_req_pool_free(struct rte_mempool *mp)
54 {
55         rte_mempool_free(mp);
56 }