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
sym_session_clear(int driver_id,struct rte_cryptodev_sym_session * sess)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 rte_mempool *pool;
15 
16 	if (priv == NULL)
17 		return;
18 
19 	memset(priv, 0, cpt_get_session_size());
20 
21 	pool = rte_mempool_from_obj(priv);
22 
23 	set_sym_session_private_data(sess, driver_id, NULL);
24 
25 	rte_mempool_put(pool, priv);
26 }
27 
28 static __rte_always_inline uint8_t
otx2_cpt_compcode_get(struct cpt_request_info * req)29 otx2_cpt_compcode_get(struct cpt_request_info *req)
30 {
31 	volatile struct cpt_res_s_9s *res;
32 	uint8_t ret;
33 
34 	res = (volatile struct cpt_res_s_9s *)req->completion_addr;
35 
36 	if (unlikely(res->compcode == CPT_9X_COMP_E_NOTDONE)) {
37 		if (rte_get_timer_cycles() < req->time_out)
38 			return ERR_REQ_PENDING;
39 
40 		CPT_LOG_DP_ERR("Request timed out");
41 		return ERR_REQ_TIMEOUT;
42 	}
43 
44 	if (likely(res->compcode == CPT_9X_COMP_E_GOOD)) {
45 		ret = NO_ERR;
46 		if (unlikely(res->uc_compcode)) {
47 			ret = res->uc_compcode;
48 			CPT_LOG_DP_DEBUG("Request failed with microcode error");
49 			CPT_LOG_DP_DEBUG("MC completion code 0x%x",
50 					 res->uc_compcode);
51 		}
52 	} else {
53 		CPT_LOG_DP_DEBUG("HW completion code 0x%x", res->compcode);
54 
55 		ret = res->compcode;
56 		switch (res->compcode) {
57 		case CPT_9X_COMP_E_INSTERR:
58 			CPT_LOG_DP_ERR("Request failed with instruction error");
59 			break;
60 		case CPT_9X_COMP_E_FAULT:
61 			CPT_LOG_DP_ERR("Request failed with DMA fault");
62 			break;
63 		case CPT_9X_COMP_E_HWERR:
64 			CPT_LOG_DP_ERR("Request failed with hardware error");
65 			break;
66 		default:
67 			CPT_LOG_DP_ERR("Request failed with unknown completion code");
68 		}
69 	}
70 
71 	return ret;
72 }
73 
74 #endif /* _OTX2_CRYPTODEV_OPS_HELPER_H_ */
75