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 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 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