common/cpt: allocate auth key dynamically
[dpdk.git] / drivers / crypto / octeontx2 / otx2_cryptodev_ops_helper.h
1 /* SPDX-License-Identifier: BSD-3-Clause
2  * Copyright (C) 2020 Marvell International Ltd.
3  */
4
5 #ifndef _OTX2_CRYPTODEV_OPS_HELPER_H_
6 #define _OTX2_CRYPTODEV_OPS_HELPER_H_
7
8 #include "cpt_pmd_logs.h"
9
10 static void
11 sym_session_clear(int driver_id, struct rte_cryptodev_sym_session *sess)
12 {
13         void *priv = get_sym_session_private_data(sess, driver_id);
14         struct cpt_sess_misc *misc;
15         struct rte_mempool *pool;
16         struct cpt_ctx *ctx;
17
18         if (priv == NULL)
19                 return;
20
21         misc = priv;
22         ctx = SESS_PRIV(misc);
23
24         if (ctx->auth_key != NULL)
25                 rte_free(ctx->auth_key);
26
27         memset(priv, 0, cpt_get_session_size());
28
29         pool = rte_mempool_from_obj(priv);
30
31         set_sym_session_private_data(sess, driver_id, NULL);
32
33         rte_mempool_put(pool, priv);
34 }
35
36 static __rte_always_inline uint8_t
37 otx2_cpt_compcode_get(struct cpt_request_info *req)
38 {
39         volatile struct cpt_res_s_9s *res;
40         uint8_t ret;
41
42         res = (volatile struct cpt_res_s_9s *)req->completion_addr;
43
44         if (unlikely(res->compcode == CPT_9X_COMP_E_NOTDONE)) {
45                 if (rte_get_timer_cycles() < req->time_out)
46                         return ERR_REQ_PENDING;
47
48                 CPT_LOG_DP_ERR("Request timed out");
49                 return ERR_REQ_TIMEOUT;
50         }
51
52         if (likely(res->compcode == CPT_9X_COMP_E_GOOD)) {
53                 ret = NO_ERR;
54                 if (unlikely(res->uc_compcode)) {
55                         ret = res->uc_compcode;
56                         CPT_LOG_DP_DEBUG("Request failed with microcode error");
57                         CPT_LOG_DP_DEBUG("MC completion code 0x%x",
58                                          res->uc_compcode);
59                 }
60         } else {
61                 CPT_LOG_DP_DEBUG("HW completion code 0x%x", res->compcode);
62
63                 ret = res->compcode;
64                 switch (res->compcode) {
65                 case CPT_9X_COMP_E_INSTERR:
66                         CPT_LOG_DP_ERR("Request failed with instruction error");
67                         break;
68                 case CPT_9X_COMP_E_FAULT:
69                         CPT_LOG_DP_ERR("Request failed with DMA fault");
70                         break;
71                 case CPT_9X_COMP_E_HWERR:
72                         CPT_LOG_DP_ERR("Request failed with hardware error");
73                         break;
74                 default:
75                         CPT_LOG_DP_ERR("Request failed with unknown completion code");
76                 }
77         }
78
79         return ret;
80 }
81
82 #endif /* _OTX2_CRYPTODEV_OPS_HELPER_H_ */