1 /* SPDX-License-Identifier: BSD-3-Clause
2 * Copyright(C) 2021 Marvell.
3 */
4
5 #include <rte_devargs.h>
6
7 #include "cnxk_cryptodev.h"
8
9 #define CNXK_MAX_QPS_LIMIT "max_qps_limit"
10 #define CNXK_MAX_QPS_LIMIT_MIN 1
11 #define CNXK_MAX_QPS_LIMIT_MAX (ROC_CPT_MAX_LFS - 1)
12 #define CNXK_RX_INJECT_QP "rx_inject_qp"
13
14 static int
parse_rx_inject_qp(const char * key,const char * value,void * extra_args)15 parse_rx_inject_qp(const char *key, const char *value, void *extra_args)
16 {
17 RTE_SET_USED(key);
18 uint32_t val;
19
20 val = atoi(value);
21
22 if (val < CNXK_MAX_QPS_LIMIT_MIN || val > CNXK_MAX_QPS_LIMIT_MAX)
23 return -EINVAL;
24
25 *(uint16_t *)extra_args = val;
26
27 return 0;
28 }
29
30 static int
parse_max_qps_limit(const char * key,const char * value,void * extra_args)31 parse_max_qps_limit(const char *key, const char *value, void *extra_args)
32 {
33 RTE_SET_USED(key);
34 uint32_t val;
35
36 val = atoi(value);
37
38 if (val < CNXK_MAX_QPS_LIMIT_MIN || val > CNXK_MAX_QPS_LIMIT_MAX)
39 return -EINVAL;
40
41 *(uint16_t *)extra_args = val;
42
43 return 0;
44 }
45
46 int
cnxk_cpt_parse_devargs(struct rte_devargs * devargs,struct cnxk_cpt_vf * vf)47 cnxk_cpt_parse_devargs(struct rte_devargs *devargs, struct cnxk_cpt_vf *vf)
48 {
49 uint16_t max_qps_limit = CNXK_MAX_QPS_LIMIT_MAX;
50 struct rte_kvargs *kvlist;
51 uint16_t rx_inject_qp;
52 int rc;
53
54 /* Set to max value as default so that the feature is disabled by default. */
55 rx_inject_qp = CNXK_MAX_QPS_LIMIT_MAX;
56
57 if (devargs == NULL)
58 goto null_devargs;
59
60 kvlist = rte_kvargs_parse(devargs->args, NULL);
61 if (kvlist == NULL)
62 goto exit;
63
64 rc = rte_kvargs_process(kvlist, CNXK_MAX_QPS_LIMIT,
65 &parse_max_qps_limit, &max_qps_limit);
66 if (rc < 0) {
67 plt_err("max_qps_limit should in the range <%d-%d>",
68 CNXK_MAX_QPS_LIMIT_MIN, CNXK_MAX_QPS_LIMIT_MAX);
69 rte_kvargs_free(kvlist);
70 goto exit;
71 }
72
73 rc = rte_kvargs_process(kvlist, CNXK_RX_INJECT_QP, parse_rx_inject_qp, &rx_inject_qp);
74 if (rc < 0) {
75 plt_err("rx_inject_qp should in the range <%d-%d>", CNXK_MAX_QPS_LIMIT_MIN,
76 max_qps_limit - 1);
77 rte_kvargs_free(kvlist);
78 goto exit;
79 }
80
81 rte_kvargs_free(kvlist);
82
83 null_devargs:
84 vf->max_qps_limit = max_qps_limit;
85 vf->rx_inject_qp = rx_inject_qp;
86 return 0;
87
88 exit:
89 return -EINVAL;
90 }
91
92 RTE_PMD_REGISTER_PARAM_STRING(crypto_cnxk, CNXK_MAX_QPS_LIMIT "=<1-63>");
93