1e0ab0865SAnkur Dwivedi /* SPDX-License-Identifier: BSD-3-Clause
2e0ab0865SAnkur Dwivedi * Copyright(C) 2021 Marvell.
3e0ab0865SAnkur Dwivedi */
4e0ab0865SAnkur Dwivedi
5e0ab0865SAnkur Dwivedi #ifndef _CN10K_CRYPTODEV_OPS_H_
6e0ab0865SAnkur Dwivedi #define _CN10K_CRYPTODEV_OPS_H_
7e0ab0865SAnkur Dwivedi
8af668035SAkhil Goyal #include <cryptodev_pmd.h>
9*57af6052SAnoob Joseph #include <rte_compat.h>
10661aeb25SVolodymyr Fialko #include <rte_cryptodev.h>
11661aeb25SVolodymyr Fialko #include <rte_eventdev.h>
12e0ab0865SAnkur Dwivedi
13*57af6052SAnoob Joseph #if defined(__aarch64__)
14*57af6052SAnoob Joseph #include "roc_io.h"
15*57af6052SAnoob Joseph #else
16*57af6052SAnoob Joseph #include "roc_io_generic.h"
17*57af6052SAnoob Joseph #endif
18*57af6052SAnoob Joseph
197c19abddSTejasree Kondoj #include "cnxk_cryptodev.h"
207c19abddSTejasree Kondoj
21*57af6052SAnoob Joseph #define CN10K_PKTS_PER_STEORL 32
22*57af6052SAnoob Joseph #define CN10K_LMTLINES_PER_STEORL 16
2326bb5c4dSAnoob Joseph
24e0ab0865SAnkur Dwivedi extern struct rte_cryptodev_ops cn10k_cpt_ops;
25e0ab0865SAnkur Dwivedi
267c19abddSTejasree Kondoj void cn10k_cpt_set_enqdeq_fns(struct rte_cryptodev *dev, struct cnxk_cpt_vf *vf);
2775ee5745SAnoob Joseph
28a200e7a9SShijith Thotton __rte_internal
29d029f353SVidya Sagar Velumuri uint16_t __rte_hot cn10k_cryptodev_sec_inb_rx_inject(void *dev, struct rte_mbuf **pkts,
30d029f353SVidya Sagar Velumuri struct rte_security_session **sess,
31d029f353SVidya Sagar Velumuri uint16_t nb_pkts);
32d029f353SVidya Sagar Velumuri
33d029f353SVidya Sagar Velumuri __rte_internal
34d029f353SVidya Sagar Velumuri int cn10k_cryptodev_sec_rx_inject_configure(void *device, uint16_t port_id, bool enable);
35d029f353SVidya Sagar Velumuri
36d029f353SVidya Sagar Velumuri __rte_internal
377c19abddSTejasree Kondoj uint16_t __rte_hot cn10k_cpt_sg_ver1_crypto_adapter_enqueue(void *ws, struct rte_event ev[],
387c19abddSTejasree Kondoj uint16_t nb_events);
397c19abddSTejasree Kondoj __rte_internal
407c19abddSTejasree Kondoj uint16_t __rte_hot cn10k_cpt_sg_ver2_crypto_adapter_enqueue(void *ws, struct rte_event ev[],
41661aeb25SVolodymyr Fialko uint16_t nb_events);
42a200e7a9SShijith Thotton
43*57af6052SAnoob Joseph static __rte_always_inline void __rte_hot
cn10k_cpt_lmtst_dual_submit(uint64_t * io_addr,const uint16_t lmt_id,int * i)44*57af6052SAnoob Joseph cn10k_cpt_lmtst_dual_submit(uint64_t *io_addr, const uint16_t lmt_id, int *i)
45*57af6052SAnoob Joseph {
46*57af6052SAnoob Joseph uint64_t lmt_arg;
47*57af6052SAnoob Joseph
48*57af6052SAnoob Joseph /* Check if the total number of instructions is odd or even. */
49*57af6052SAnoob Joseph const int flag_odd = *i & 0x1;
50*57af6052SAnoob Joseph
51*57af6052SAnoob Joseph /* Reduce i by 1 when odd number of instructions.*/
52*57af6052SAnoob Joseph *i -= flag_odd;
53*57af6052SAnoob Joseph
54*57af6052SAnoob Joseph if (*i > CN10K_PKTS_PER_STEORL) {
55*57af6052SAnoob Joseph lmt_arg = ROC_CN10K_DUAL_CPT_LMT_ARG | (CN10K_LMTLINES_PER_STEORL - 1) << 12 |
56*57af6052SAnoob Joseph (uint64_t)lmt_id;
57*57af6052SAnoob Joseph roc_lmt_submit_steorl(lmt_arg, *io_addr);
58*57af6052SAnoob Joseph lmt_arg = ROC_CN10K_DUAL_CPT_LMT_ARG |
59*57af6052SAnoob Joseph (*i / 2 - CN10K_LMTLINES_PER_STEORL - 1) << 12 |
60*57af6052SAnoob Joseph (uint64_t)(lmt_id + CN10K_LMTLINES_PER_STEORL);
61*57af6052SAnoob Joseph roc_lmt_submit_steorl(lmt_arg, *io_addr);
62*57af6052SAnoob Joseph if (flag_odd) {
63*57af6052SAnoob Joseph *io_addr = (*io_addr & ~(uint64_t)(0x7 << 4)) |
64*57af6052SAnoob Joseph (ROC_CN10K_CPT_INST_DW_M1 << 4);
65*57af6052SAnoob Joseph lmt_arg = (uint64_t)(lmt_id + *i / 2);
66*57af6052SAnoob Joseph roc_lmt_submit_steorl(lmt_arg, *io_addr);
67*57af6052SAnoob Joseph *io_addr = (*io_addr & ~(uint64_t)(0x7 << 4)) |
68*57af6052SAnoob Joseph (ROC_CN10K_TWO_CPT_INST_DW_M1 << 4);
69*57af6052SAnoob Joseph *i += 1;
70*57af6052SAnoob Joseph }
71*57af6052SAnoob Joseph } else {
72*57af6052SAnoob Joseph if (*i != 0) {
73*57af6052SAnoob Joseph lmt_arg =
74*57af6052SAnoob Joseph ROC_CN10K_DUAL_CPT_LMT_ARG | (*i / 2 - 1) << 12 | (uint64_t)lmt_id;
75*57af6052SAnoob Joseph roc_lmt_submit_steorl(lmt_arg, *io_addr);
76*57af6052SAnoob Joseph }
77*57af6052SAnoob Joseph
78*57af6052SAnoob Joseph if (flag_odd) {
79*57af6052SAnoob Joseph *io_addr = (*io_addr & ~(uint64_t)(0x7 << 4)) |
80*57af6052SAnoob Joseph (ROC_CN10K_CPT_INST_DW_M1 << 4);
81*57af6052SAnoob Joseph lmt_arg = (uint64_t)(lmt_id + *i / 2);
82*57af6052SAnoob Joseph roc_lmt_submit_steorl(lmt_arg, *io_addr);
83*57af6052SAnoob Joseph *io_addr = (*io_addr & ~(uint64_t)(0x7 << 4)) |
84*57af6052SAnoob Joseph (ROC_CN10K_TWO_CPT_INST_DW_M1 << 4);
85*57af6052SAnoob Joseph *i += 1;
86*57af6052SAnoob Joseph }
87*57af6052SAnoob Joseph }
88*57af6052SAnoob Joseph
89*57af6052SAnoob Joseph rte_io_wmb();
90*57af6052SAnoob Joseph }
91e0ab0865SAnkur Dwivedi #endif /* _CN10K_CRYPTODEV_OPS_H_ */
92