xref: /dpdk/drivers/crypto/cnxk/cnxk_cryptodev_devargs.c (revision d029f35384d0844e9aeb5dbc46fbe1b063d649f7)
1135e0b71SAnkur Dwivedi /* SPDX-License-Identifier: BSD-3-Clause
2135e0b71SAnkur Dwivedi  * Copyright(C) 2021 Marvell.
3135e0b71SAnkur Dwivedi  */
4135e0b71SAnkur Dwivedi 
5135e0b71SAnkur Dwivedi #include <rte_devargs.h>
6135e0b71SAnkur Dwivedi 
7135e0b71SAnkur Dwivedi #include "cnxk_cryptodev.h"
8135e0b71SAnkur Dwivedi 
9135e0b71SAnkur Dwivedi #define CNXK_MAX_QPS_LIMIT     "max_qps_limit"
10135e0b71SAnkur Dwivedi #define CNXK_MAX_QPS_LIMIT_MIN 1
11135e0b71SAnkur Dwivedi #define CNXK_MAX_QPS_LIMIT_MAX (ROC_CPT_MAX_LFS - 1)
12*d029f353SVidya Sagar Velumuri #define CNXK_RX_INJECT_QP      "rx_inject_qp"
13*d029f353SVidya Sagar Velumuri 
14*d029f353SVidya Sagar Velumuri static int
parse_rx_inject_qp(const char * key,const char * value,void * extra_args)15*d029f353SVidya Sagar Velumuri parse_rx_inject_qp(const char *key, const char *value, void *extra_args)
16*d029f353SVidya Sagar Velumuri {
17*d029f353SVidya Sagar Velumuri 	RTE_SET_USED(key);
18*d029f353SVidya Sagar Velumuri 	uint32_t val;
19*d029f353SVidya Sagar Velumuri 
20*d029f353SVidya Sagar Velumuri 	val = atoi(value);
21*d029f353SVidya Sagar Velumuri 
22*d029f353SVidya Sagar Velumuri 	if (val < CNXK_MAX_QPS_LIMIT_MIN || val > CNXK_MAX_QPS_LIMIT_MAX)
23*d029f353SVidya Sagar Velumuri 		return -EINVAL;
24*d029f353SVidya Sagar Velumuri 
25*d029f353SVidya Sagar Velumuri 	*(uint16_t *)extra_args = val;
26*d029f353SVidya Sagar Velumuri 
27*d029f353SVidya Sagar Velumuri 	return 0;
28*d029f353SVidya Sagar Velumuri }
29135e0b71SAnkur Dwivedi 
30135e0b71SAnkur Dwivedi static int
parse_max_qps_limit(const char * key,const char * value,void * extra_args)31135e0b71SAnkur Dwivedi parse_max_qps_limit(const char *key, const char *value, void *extra_args)
32135e0b71SAnkur Dwivedi {
33135e0b71SAnkur Dwivedi 	RTE_SET_USED(key);
34135e0b71SAnkur Dwivedi 	uint32_t val;
35135e0b71SAnkur Dwivedi 
36135e0b71SAnkur Dwivedi 	val = atoi(value);
37135e0b71SAnkur Dwivedi 
38135e0b71SAnkur Dwivedi 	if (val < CNXK_MAX_QPS_LIMIT_MIN || val > CNXK_MAX_QPS_LIMIT_MAX)
39135e0b71SAnkur Dwivedi 		return -EINVAL;
40135e0b71SAnkur Dwivedi 
41135e0b71SAnkur Dwivedi 	*(uint16_t *)extra_args = val;
42135e0b71SAnkur Dwivedi 
43135e0b71SAnkur Dwivedi 	return 0;
44135e0b71SAnkur Dwivedi }
45135e0b71SAnkur Dwivedi 
46135e0b71SAnkur Dwivedi int
cnxk_cpt_parse_devargs(struct rte_devargs * devargs,struct cnxk_cpt_vf * vf)47135e0b71SAnkur Dwivedi cnxk_cpt_parse_devargs(struct rte_devargs *devargs, struct cnxk_cpt_vf *vf)
48135e0b71SAnkur Dwivedi {
49135e0b71SAnkur Dwivedi 	uint16_t max_qps_limit = CNXK_MAX_QPS_LIMIT_MAX;
50135e0b71SAnkur Dwivedi 	struct rte_kvargs *kvlist;
51*d029f353SVidya Sagar Velumuri 	uint16_t rx_inject_qp;
52135e0b71SAnkur Dwivedi 	int rc;
53135e0b71SAnkur Dwivedi 
54*d029f353SVidya Sagar Velumuri 	/* Set to max value as default so that the feature is disabled by default. */
55*d029f353SVidya Sagar Velumuri 	rx_inject_qp = CNXK_MAX_QPS_LIMIT_MAX;
56*d029f353SVidya Sagar Velumuri 
57135e0b71SAnkur Dwivedi 	if (devargs == NULL)
58135e0b71SAnkur Dwivedi 		goto null_devargs;
59135e0b71SAnkur Dwivedi 
60135e0b71SAnkur Dwivedi 	kvlist = rte_kvargs_parse(devargs->args, NULL);
61135e0b71SAnkur Dwivedi 	if (kvlist == NULL)
62135e0b71SAnkur Dwivedi 		goto exit;
63135e0b71SAnkur Dwivedi 
64135e0b71SAnkur Dwivedi 	rc = rte_kvargs_process(kvlist, CNXK_MAX_QPS_LIMIT,
65135e0b71SAnkur Dwivedi 				&parse_max_qps_limit, &max_qps_limit);
66135e0b71SAnkur Dwivedi 	if (rc < 0) {
67135e0b71SAnkur Dwivedi 		plt_err("max_qps_limit should in the range <%d-%d>",
68135e0b71SAnkur Dwivedi 			CNXK_MAX_QPS_LIMIT_MIN, CNXK_MAX_QPS_LIMIT_MAX);
69135e0b71SAnkur Dwivedi 		rte_kvargs_free(kvlist);
70135e0b71SAnkur Dwivedi 		goto exit;
71135e0b71SAnkur Dwivedi 	}
72*d029f353SVidya Sagar Velumuri 
73*d029f353SVidya Sagar Velumuri 	rc = rte_kvargs_process(kvlist, CNXK_RX_INJECT_QP, parse_rx_inject_qp, &rx_inject_qp);
74*d029f353SVidya Sagar Velumuri 	if (rc < 0) {
75*d029f353SVidya Sagar Velumuri 		plt_err("rx_inject_qp should in the range <%d-%d>", CNXK_MAX_QPS_LIMIT_MIN,
76*d029f353SVidya Sagar Velumuri 			max_qps_limit - 1);
77*d029f353SVidya Sagar Velumuri 		rte_kvargs_free(kvlist);
78*d029f353SVidya Sagar Velumuri 		goto exit;
79*d029f353SVidya Sagar Velumuri 	}
80*d029f353SVidya Sagar Velumuri 
81135e0b71SAnkur Dwivedi 	rte_kvargs_free(kvlist);
82135e0b71SAnkur Dwivedi 
83135e0b71SAnkur Dwivedi null_devargs:
84135e0b71SAnkur Dwivedi 	vf->max_qps_limit = max_qps_limit;
85*d029f353SVidya Sagar Velumuri 	vf->rx_inject_qp = rx_inject_qp;
86135e0b71SAnkur Dwivedi 	return 0;
87135e0b71SAnkur Dwivedi 
88135e0b71SAnkur Dwivedi exit:
89135e0b71SAnkur Dwivedi 	return -EINVAL;
90135e0b71SAnkur Dwivedi }
91135e0b71SAnkur Dwivedi 
92135e0b71SAnkur Dwivedi RTE_PMD_REGISTER_PARAM_STRING(crypto_cnxk, CNXK_MAX_QPS_LIMIT "=<1-63>");
93