Branch data Line data Source code
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 15 : 0 : 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 : 0 : val = atoi(value); 21 : : 22 [ # # ]: 0 : if (val < CNXK_MAX_QPS_LIMIT_MIN || val > CNXK_MAX_QPS_LIMIT_MAX) 23 : : return -EINVAL; 24 : : 25 : 0 : *(uint16_t *)extra_args = val; 26 : : 27 : 0 : return 0; 28 : : } 29 : : 30 : : static int 31 : 0 : 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 : 0 : val = atoi(value); 37 : : 38 [ # # ]: 0 : if (val < CNXK_MAX_QPS_LIMIT_MIN || val > CNXK_MAX_QPS_LIMIT_MAX) 39 : : return -EINVAL; 40 : : 41 : 0 : *(uint16_t *)extra_args = val; 42 : : 43 : 0 : return 0; 44 : : } 45 : : 46 : : int 47 : 0 : cnxk_cpt_parse_devargs(struct rte_devargs *devargs, struct cnxk_cpt_vf *vf) 48 : : { 49 : 0 : 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 : 0 : rx_inject_qp = CNXK_MAX_QPS_LIMIT_MAX; 56 : : 57 [ # # ]: 0 : if (devargs == NULL) 58 : 0 : goto null_devargs; 59 : : 60 : 0 : kvlist = rte_kvargs_parse(devargs->args, NULL); 61 [ # # ]: 0 : if (kvlist == NULL) 62 : 0 : goto exit; 63 : : 64 : 0 : rc = rte_kvargs_process(kvlist, CNXK_MAX_QPS_LIMIT, 65 : : &parse_max_qps_limit, &max_qps_limit); 66 [ # # ]: 0 : if (rc < 0) { 67 : 0 : plt_err("max_qps_limit should in the range <%d-%d>", 68 : : CNXK_MAX_QPS_LIMIT_MIN, CNXK_MAX_QPS_LIMIT_MAX); 69 : 0 : rte_kvargs_free(kvlist); 70 : 0 : goto exit; 71 : : } 72 : : 73 : 0 : rc = rte_kvargs_process(kvlist, CNXK_RX_INJECT_QP, parse_rx_inject_qp, &rx_inject_qp); 74 [ # # ]: 0 : if (rc < 0) { 75 : 0 : plt_err("rx_inject_qp should in the range <%d-%d>", CNXK_MAX_QPS_LIMIT_MIN, 76 : : max_qps_limit - 1); 77 : 0 : rte_kvargs_free(kvlist); 78 : 0 : goto exit; 79 : : } 80 : : 81 : 0 : rte_kvargs_free(kvlist); 82 : : 83 : 0 : null_devargs: 84 : 0 : vf->max_qps_limit = max_qps_limit; 85 : 0 : vf->rx_inject_qp = rx_inject_qp; 86 : 0 : return 0; 87 : : 88 : : exit: 89 : : return -EINVAL; 90 : : } 91 : : 92 : : RTE_PMD_REGISTER_PARAM_STRING(crypto_cnxk, CNXK_MAX_QPS_LIMIT "=<1-63>");