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 
13 static int
parse_max_qps_limit(const char * key,const char * value,void * extra_args)14 parse_max_qps_limit(const char *key, const char *value, void *extra_args)
15 {
16 	RTE_SET_USED(key);
17 	uint32_t val;
18 
19 	val = atoi(value);
20 
21 	if (val < CNXK_MAX_QPS_LIMIT_MIN || val > CNXK_MAX_QPS_LIMIT_MAX)
22 		return -EINVAL;
23 
24 	*(uint16_t *)extra_args = val;
25 
26 	return 0;
27 }
28 
29 int
cnxk_cpt_parse_devargs(struct rte_devargs * devargs,struct cnxk_cpt_vf * vf)30 cnxk_cpt_parse_devargs(struct rte_devargs *devargs, struct cnxk_cpt_vf *vf)
31 {
32 	uint16_t max_qps_limit = CNXK_MAX_QPS_LIMIT_MAX;
33 	struct rte_kvargs *kvlist;
34 	int rc;
35 
36 	if (devargs == NULL)
37 		goto null_devargs;
38 
39 	kvlist = rte_kvargs_parse(devargs->args, NULL);
40 	if (kvlist == NULL)
41 		goto exit;
42 
43 	rc = rte_kvargs_process(kvlist, CNXK_MAX_QPS_LIMIT,
44 				&parse_max_qps_limit, &max_qps_limit);
45 	if (rc < 0) {
46 		plt_err("max_qps_limit should in the range <%d-%d>",
47 			CNXK_MAX_QPS_LIMIT_MIN, CNXK_MAX_QPS_LIMIT_MAX);
48 		rte_kvargs_free(kvlist);
49 		goto exit;
50 	}
51 	rte_kvargs_free(kvlist);
52 
53 null_devargs:
54 	vf->max_qps_limit = max_qps_limit;
55 	return 0;
56 
57 exit:
58 	return -EINVAL;
59 }
60 
61 RTE_PMD_REGISTER_PARAM_STRING(crypto_cnxk, CNXK_MAX_QPS_LIMIT "=<1-63>");
62