xref: /dpdk/drivers/crypto/cnxk/cnxk_cryptodev_devargs.c (revision d029f35384d0844e9aeb5dbc46fbe1b063d649f7)
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