1f714a188SAmr Mokhtar /* SPDX-License-Identifier: BSD-3-Clause 2f714a188SAmr Mokhtar * Copyright(c) 2017 Intel Corporation 3f714a188SAmr Mokhtar */ 4f714a188SAmr Mokhtar 55fbc1d49SBruce Richardson #ifdef RTE_EXEC_ENV_FREEBSD 6f714a188SAmr Mokhtar #define _WITH_GETLINE 7f714a188SAmr Mokhtar #endif 872b452c5SDmitry Kozlyuk #include <ctype.h> 9f714a188SAmr Mokhtar #include <stdio.h> 1072b452c5SDmitry Kozlyuk #include <stdlib.h> 11f714a188SAmr Mokhtar #include <stdbool.h> 12f714a188SAmr Mokhtar #include <rte_malloc.h> 13f714a188SAmr Mokhtar 14f714a188SAmr Mokhtar #include "test_bbdev_vector.h" 15f714a188SAmr Mokhtar 16f714a188SAmr Mokhtar #define VALUE_DELIMITER "," 17f714a188SAmr Mokhtar #define ENTRY_DELIMITER "=" 180acdb986SNicolas Chautru #define FFT_WIN_SIZE 12 19f714a188SAmr Mokhtar 20f714a188SAmr Mokhtar const char *op_data_prefixes[] = { 21f714a188SAmr Mokhtar "input", 22f714a188SAmr Mokhtar "soft_output", 23f714a188SAmr Mokhtar "hard_output", 24d819c083SNicolas Chautru "harq_input", 25d819c083SNicolas Chautru "harq_output", 26f714a188SAmr Mokhtar }; 27f714a188SAmr Mokhtar 28f714a188SAmr Mokhtar /* trim leading and trailing spaces */ 29f714a188SAmr Mokhtar static void 30f714a188SAmr Mokhtar trim_space(char *str) 31f714a188SAmr Mokhtar { 32f714a188SAmr Mokhtar char *start, *end; 33f714a188SAmr Mokhtar 34f714a188SAmr Mokhtar for (start = str; *start; start++) { 35f714a188SAmr Mokhtar if (!isspace((unsigned char) start[0])) 36f714a188SAmr Mokhtar break; 37f714a188SAmr Mokhtar } 38f714a188SAmr Mokhtar 39f714a188SAmr Mokhtar for (end = start + strlen(start); end > start + 1; end--) { 40f714a188SAmr Mokhtar if (!isspace((unsigned char) end[-1])) 41f714a188SAmr Mokhtar break; 42f714a188SAmr Mokhtar } 43f714a188SAmr Mokhtar 44f714a188SAmr Mokhtar *end = 0; 45f714a188SAmr Mokhtar 46f714a188SAmr Mokhtar /* Shift from "start" to the beginning of the string */ 47f714a188SAmr Mokhtar if (start > str) 48f714a188SAmr Mokhtar memmove(str, start, (end - start) + 1); 49f714a188SAmr Mokhtar } 50f714a188SAmr Mokhtar 51f714a188SAmr Mokhtar static bool 52f714a188SAmr Mokhtar starts_with(const char *str, const char *pre) 53f714a188SAmr Mokhtar { 54f714a188SAmr Mokhtar return strncmp(pre, str, strlen(pre)) == 0; 55f714a188SAmr Mokhtar } 56f714a188SAmr Mokhtar 57f714a188SAmr Mokhtar /* tokenization test values separated by a comma */ 58f714a188SAmr Mokhtar static int 59f714a188SAmr Mokhtar parse_values(char *tokens, uint32_t **data, uint32_t *data_length) 60f714a188SAmr Mokhtar { 61f714a188SAmr Mokhtar uint32_t n_tokens = 0; 62f714a188SAmr Mokhtar uint32_t data_size = 32; 63f714a188SAmr Mokhtar 64f714a188SAmr Mokhtar uint32_t *values, *values_resized; 65f714a188SAmr Mokhtar char *tok, *error = NULL; 66f714a188SAmr Mokhtar 67f714a188SAmr Mokhtar tok = strtok(tokens, VALUE_DELIMITER); 68f714a188SAmr Mokhtar if (tok == NULL) 69f714a188SAmr Mokhtar return -1; 70f714a188SAmr Mokhtar 71f714a188SAmr Mokhtar values = (uint32_t *) 72f714a188SAmr Mokhtar rte_zmalloc(NULL, sizeof(uint32_t) * data_size, 0); 73f714a188SAmr Mokhtar if (values == NULL) 74f714a188SAmr Mokhtar return -1; 75f714a188SAmr Mokhtar 76f714a188SAmr Mokhtar while (tok != NULL) { 77f714a188SAmr Mokhtar values_resized = NULL; 78f714a188SAmr Mokhtar 79f714a188SAmr Mokhtar if (n_tokens >= data_size) { 80f714a188SAmr Mokhtar data_size *= 2; 81f714a188SAmr Mokhtar 82f714a188SAmr Mokhtar values_resized = (uint32_t *) rte_realloc(values, 83f714a188SAmr Mokhtar sizeof(uint32_t) * data_size, 0); 84f714a188SAmr Mokhtar if (values_resized == NULL) { 85f714a188SAmr Mokhtar rte_free(values); 86f714a188SAmr Mokhtar return -1; 87f714a188SAmr Mokhtar } 88f714a188SAmr Mokhtar values = values_resized; 89f714a188SAmr Mokhtar } 90f714a188SAmr Mokhtar 91f714a188SAmr Mokhtar values[n_tokens] = (uint32_t) strtoul(tok, &error, 0); 92d819c083SNicolas Chautru 93f714a188SAmr Mokhtar if ((error == NULL) || (*error != '\0')) { 94f714a188SAmr Mokhtar printf("Failed with convert '%s'\n", tok); 95f714a188SAmr Mokhtar rte_free(values); 96f714a188SAmr Mokhtar return -1; 97f714a188SAmr Mokhtar } 98f714a188SAmr Mokhtar 99f714a188SAmr Mokhtar *data_length = *data_length + (strlen(tok) - strlen("0x"))/2; 100f714a188SAmr Mokhtar 101f714a188SAmr Mokhtar tok = strtok(NULL, VALUE_DELIMITER); 102f714a188SAmr Mokhtar if (tok == NULL) 103f714a188SAmr Mokhtar break; 104f714a188SAmr Mokhtar 105f714a188SAmr Mokhtar n_tokens++; 106f714a188SAmr Mokhtar } 107f714a188SAmr Mokhtar 108f714a188SAmr Mokhtar values_resized = (uint32_t *) rte_realloc(values, 109f714a188SAmr Mokhtar sizeof(uint32_t) * (n_tokens + 1), 0); 110f714a188SAmr Mokhtar 111f714a188SAmr Mokhtar if (values_resized == NULL) { 112f714a188SAmr Mokhtar rte_free(values); 113f714a188SAmr Mokhtar return -1; 114f714a188SAmr Mokhtar } 115f714a188SAmr Mokhtar 116f714a188SAmr Mokhtar *data = values_resized; 117f714a188SAmr Mokhtar 118f714a188SAmr Mokhtar return 0; 119f714a188SAmr Mokhtar } 120f714a188SAmr Mokhtar 121f714a188SAmr Mokhtar /* convert turbo decoder flag from string to unsigned long int*/ 122f714a188SAmr Mokhtar static int 123f714a188SAmr Mokhtar op_decoder_flag_strtoul(char *token, uint32_t *op_flag_value) 124f714a188SAmr Mokhtar { 125f714a188SAmr Mokhtar if (!strcmp(token, "RTE_BBDEV_TURBO_SUBBLOCK_DEINTERLEAVE")) 126f714a188SAmr Mokhtar *op_flag_value = RTE_BBDEV_TURBO_SUBBLOCK_DEINTERLEAVE; 127f714a188SAmr Mokhtar else if (!strcmp(token, "RTE_BBDEV_TURBO_CRC_TYPE_24B")) 128f714a188SAmr Mokhtar *op_flag_value = RTE_BBDEV_TURBO_CRC_TYPE_24B; 129f714a188SAmr Mokhtar else if (!strcmp(token, "RTE_BBDEV_TURBO_EQUALIZER")) 130f714a188SAmr Mokhtar *op_flag_value = RTE_BBDEV_TURBO_EQUALIZER; 131f714a188SAmr Mokhtar else if (!strcmp(token, "RTE_BBDEV_TURBO_SOFT_OUT_SATURATE")) 132f714a188SAmr Mokhtar *op_flag_value = RTE_BBDEV_TURBO_SOFT_OUT_SATURATE; 133f714a188SAmr Mokhtar else if (!strcmp(token, "RTE_BBDEV_TURBO_HALF_ITERATION_EVEN")) 134f714a188SAmr Mokhtar *op_flag_value = RTE_BBDEV_TURBO_HALF_ITERATION_EVEN; 135f714a188SAmr Mokhtar else if (!strcmp(token, "RTE_BBDEV_TURBO_CONTINUE_CRC_MATCH")) 136f714a188SAmr Mokhtar *op_flag_value = RTE_BBDEV_TURBO_CONTINUE_CRC_MATCH; 137f714a188SAmr Mokhtar else if (!strcmp(token, "RTE_BBDEV_TURBO_SOFT_OUTPUT")) 138f714a188SAmr Mokhtar *op_flag_value = RTE_BBDEV_TURBO_SOFT_OUTPUT; 139f714a188SAmr Mokhtar else if (!strcmp(token, "RTE_BBDEV_TURBO_EARLY_TERMINATION")) 140f714a188SAmr Mokhtar *op_flag_value = RTE_BBDEV_TURBO_EARLY_TERMINATION; 141f714a188SAmr Mokhtar else if (!strcmp(token, "RTE_BBDEV_TURBO_POS_LLR_1_BIT_IN")) 142f714a188SAmr Mokhtar *op_flag_value = RTE_BBDEV_TURBO_POS_LLR_1_BIT_IN; 143f714a188SAmr Mokhtar else if (!strcmp(token, "RTE_BBDEV_TURBO_NEG_LLR_1_BIT_IN")) 144f714a188SAmr Mokhtar *op_flag_value = RTE_BBDEV_TURBO_NEG_LLR_1_BIT_IN; 145f714a188SAmr Mokhtar else if (!strcmp(token, "RTE_BBDEV_TURBO_POS_LLR_1_BIT_SOFT_OUT")) 146f714a188SAmr Mokhtar *op_flag_value = RTE_BBDEV_TURBO_POS_LLR_1_BIT_SOFT_OUT; 147f714a188SAmr Mokhtar else if (!strcmp(token, "RTE_BBDEV_TURBO_NEG_LLR_1_BIT_SOFT_OUT")) 148f714a188SAmr Mokhtar *op_flag_value = RTE_BBDEV_TURBO_NEG_LLR_1_BIT_SOFT_OUT; 149f714a188SAmr Mokhtar else if (!strcmp(token, "RTE_BBDEV_TURBO_MAP_DEC")) 150f714a188SAmr Mokhtar *op_flag_value = RTE_BBDEV_TURBO_MAP_DEC; 151f714a188SAmr Mokhtar else if (!strcmp(token, "RTE_BBDEV_TURBO_DEC_SCATTER_GATHER")) 152f714a188SAmr Mokhtar *op_flag_value = RTE_BBDEV_TURBO_DEC_SCATTER_GATHER; 153795ae2dfSKamil Chalupnik else if (!strcmp(token, "RTE_BBDEV_TURBO_DEC_TB_CRC_24B_KEEP")) 154795ae2dfSKamil Chalupnik *op_flag_value = RTE_BBDEV_TURBO_DEC_TB_CRC_24B_KEEP; 15510ea15e3SNicolas Chautru else if (!strcmp(token, "RTE_BBDEV_TURBO_DEC_CRC_24B_DROP")) 15610ea15e3SNicolas Chautru *op_flag_value = RTE_BBDEV_TURBO_DEC_CRC_24B_DROP; 157f714a188SAmr Mokhtar else { 158f714a188SAmr Mokhtar printf("The given value is not a turbo decoder flag\n"); 159f714a188SAmr Mokhtar return -1; 160f714a188SAmr Mokhtar } 161f714a188SAmr Mokhtar 162f714a188SAmr Mokhtar return 0; 163f714a188SAmr Mokhtar } 164f714a188SAmr Mokhtar 165d819c083SNicolas Chautru /* convert LDPC flag from string to unsigned long int*/ 166d819c083SNicolas Chautru static int 167d819c083SNicolas Chautru op_ldpc_decoder_flag_strtoul(char *token, uint32_t *op_flag_value) 168d819c083SNicolas Chautru { 169d819c083SNicolas Chautru if (!strcmp(token, "RTE_BBDEV_LDPC_CRC_TYPE_24A_CHECK")) 170d819c083SNicolas Chautru *op_flag_value = RTE_BBDEV_LDPC_CRC_TYPE_24A_CHECK; 171d819c083SNicolas Chautru else if (!strcmp(token, "RTE_BBDEV_LDPC_CRC_TYPE_24B_CHECK")) 172d819c083SNicolas Chautru *op_flag_value = RTE_BBDEV_LDPC_CRC_TYPE_24B_CHECK; 173d819c083SNicolas Chautru else if (!strcmp(token, "RTE_BBDEV_LDPC_CRC_TYPE_24B_DROP")) 174d819c083SNicolas Chautru *op_flag_value = RTE_BBDEV_LDPC_CRC_TYPE_24B_DROP; 175cc360fd3SNicolas Chautru else if (!strcmp(token, "RTE_BBDEV_LDPC_CRC_TYPE_16_CHECK")) 176cc360fd3SNicolas Chautru *op_flag_value = RTE_BBDEV_LDPC_CRC_TYPE_16_CHECK; 177d819c083SNicolas Chautru else if (!strcmp(token, "RTE_BBDEV_LDPC_DEINTERLEAVER_BYPASS")) 178d819c083SNicolas Chautru *op_flag_value = RTE_BBDEV_LDPC_DEINTERLEAVER_BYPASS; 179d819c083SNicolas Chautru else if (!strcmp(token, "RTE_BBDEV_LDPC_HQ_COMBINE_IN_ENABLE")) 180d819c083SNicolas Chautru *op_flag_value = RTE_BBDEV_LDPC_HQ_COMBINE_IN_ENABLE; 181d819c083SNicolas Chautru else if (!strcmp(token, "RTE_BBDEV_LDPC_HQ_COMBINE_OUT_ENABLE")) 182d819c083SNicolas Chautru *op_flag_value = RTE_BBDEV_LDPC_HQ_COMBINE_OUT_ENABLE; 183d819c083SNicolas Chautru else if (!strcmp(token, "RTE_BBDEV_LDPC_DECODE_BYPASS")) 184d819c083SNicolas Chautru *op_flag_value = RTE_BBDEV_LDPC_DECODE_BYPASS; 185d819c083SNicolas Chautru else if (!strcmp(token, "RTE_BBDEV_LDPC_SOFT_OUT_ENABLE")) 186d819c083SNicolas Chautru *op_flag_value = RTE_BBDEV_LDPC_SOFT_OUT_ENABLE; 187d819c083SNicolas Chautru else if (!strcmp(token, "RTE_BBDEV_LDPC_SOFT_OUT_RM_BYPASS")) 188d819c083SNicolas Chautru *op_flag_value = RTE_BBDEV_LDPC_SOFT_OUT_RM_BYPASS; 189d819c083SNicolas Chautru else if (!strcmp(token, "RTE_BBDEV_LDPC_SOFT_OUT_DEINTERLEAVER_BYPASS")) 190d819c083SNicolas Chautru *op_flag_value = RTE_BBDEV_LDPC_SOFT_OUT_DEINTERLEAVER_BYPASS; 191d819c083SNicolas Chautru else if (!strcmp(token, "RTE_BBDEV_LDPC_ITERATION_STOP_ENABLE")) 192d819c083SNicolas Chautru *op_flag_value = RTE_BBDEV_LDPC_ITERATION_STOP_ENABLE; 193d819c083SNicolas Chautru else if (!strcmp(token, "RTE_BBDEV_LDPC_DEC_INTERRUPTS")) 194d819c083SNicolas Chautru *op_flag_value = RTE_BBDEV_LDPC_DEC_INTERRUPTS; 195d819c083SNicolas Chautru else if (!strcmp(token, "RTE_BBDEV_LDPC_DEC_SCATTER_GATHER")) 196d819c083SNicolas Chautru *op_flag_value = RTE_BBDEV_LDPC_DEC_SCATTER_GATHER; 197d819c083SNicolas Chautru else if (!strcmp(token, "RTE_BBDEV_LDPC_HARQ_6BIT_COMPRESSION")) 198d819c083SNicolas Chautru *op_flag_value = RTE_BBDEV_LDPC_HARQ_6BIT_COMPRESSION; 199a591b77fSHernan Vargas else if (!strcmp(token, "RTE_BBDEV_LDPC_HARQ_4BIT_COMPRESSION")) 200a591b77fSHernan Vargas *op_flag_value = RTE_BBDEV_LDPC_HARQ_4BIT_COMPRESSION; 201d819c083SNicolas Chautru else if (!strcmp(token, "RTE_BBDEV_LDPC_LLR_COMPRESSION")) 202d819c083SNicolas Chautru *op_flag_value = RTE_BBDEV_LDPC_LLR_COMPRESSION; 203d819c083SNicolas Chautru else if (!strcmp(token, 204d819c083SNicolas Chautru "RTE_BBDEV_LDPC_INTERNAL_HARQ_MEMORY_IN_ENABLE")) 205d819c083SNicolas Chautru *op_flag_value = RTE_BBDEV_LDPC_INTERNAL_HARQ_MEMORY_IN_ENABLE; 206d819c083SNicolas Chautru else if (!strcmp(token, 207d819c083SNicolas Chautru "RTE_BBDEV_LDPC_INTERNAL_HARQ_MEMORY_OUT_ENABLE")) 208d819c083SNicolas Chautru *op_flag_value = RTE_BBDEV_LDPC_INTERNAL_HARQ_MEMORY_OUT_ENABLE; 209335c11fdSNicolas Chautru else if (!strcmp(token, 210335c11fdSNicolas Chautru "RTE_BBDEV_LDPC_INTERNAL_HARQ_MEMORY_LOOPBACK")) 211335c11fdSNicolas Chautru *op_flag_value = RTE_BBDEV_LDPC_INTERNAL_HARQ_MEMORY_LOOPBACK; 212d819c083SNicolas Chautru else { 213d819c083SNicolas Chautru printf("The given value is not a LDPC decoder flag\n"); 214d819c083SNicolas Chautru return -1; 215d819c083SNicolas Chautru } 216d819c083SNicolas Chautru 217d819c083SNicolas Chautru return 0; 218d819c083SNicolas Chautru } 219d819c083SNicolas Chautru 2200acdb986SNicolas Chautru /* Convert FFT flag from string to unsigned long int. */ 2210acdb986SNicolas Chautru static int 2220acdb986SNicolas Chautru op_fft_flag_strtoul(char *token, uint32_t *op_flag_value) 2230acdb986SNicolas Chautru { 2240acdb986SNicolas Chautru if (!strcmp(token, "RTE_BBDEV_FFT_WINDOWING")) 2250acdb986SNicolas Chautru *op_flag_value = RTE_BBDEV_FFT_WINDOWING; 2260acdb986SNicolas Chautru else if (!strcmp(token, "RTE_BBDEV_FFT_CS_ADJUSTMENT")) 2270acdb986SNicolas Chautru *op_flag_value = RTE_BBDEV_FFT_CS_ADJUSTMENT; 2280acdb986SNicolas Chautru else if (!strcmp(token, "RTE_BBDEV_FFT_DFT_BYPASS")) 2290acdb986SNicolas Chautru *op_flag_value = RTE_BBDEV_FFT_DFT_BYPASS; 2300acdb986SNicolas Chautru else if (!strcmp(token, "RTE_BBDEV_FFT_IDFT_BYPASS")) 2310acdb986SNicolas Chautru *op_flag_value = RTE_BBDEV_FFT_IDFT_BYPASS; 2320acdb986SNicolas Chautru else if (!strcmp(token, "RTE_BBDEV_FFT_WINDOWING_BYPASS")) 2330acdb986SNicolas Chautru *op_flag_value = RTE_BBDEV_FFT_WINDOWING_BYPASS; 2340acdb986SNicolas Chautru else if (!strcmp(token, "RTE_BBDEV_FFT_POWER_MEAS")) 2350acdb986SNicolas Chautru *op_flag_value = RTE_BBDEV_FFT_POWER_MEAS; 2360acdb986SNicolas Chautru else if (!strcmp(token, "RTE_BBDEV_FFT_FP16_INPUT")) 2370acdb986SNicolas Chautru *op_flag_value = RTE_BBDEV_FFT_FP16_INPUT; 2380acdb986SNicolas Chautru else if (!strcmp(token, "RTE_BBDEV_FFT_FP16_OUTPUT")) 2390acdb986SNicolas Chautru *op_flag_value = RTE_BBDEV_FFT_FP16_OUTPUT; 2400ed76d66SHernan Vargas else if (!strcmp(token, "RTE_BBDEV_FFT_TIMING_OFFSET_PER_CS")) 2410ed76d66SHernan Vargas *op_flag_value = RTE_BBDEV_FFT_TIMING_OFFSET_PER_CS; 2420ed76d66SHernan Vargas else if (!strcmp(token, "RTE_BBDEV_FFT_TIMING_ERROR")) 2430ed76d66SHernan Vargas *op_flag_value = RTE_BBDEV_FFT_TIMING_ERROR; 2440ed76d66SHernan Vargas else if (!strcmp(token, "RTE_BBDEV_FFT_DEWINDOWING")) 2450ed76d66SHernan Vargas *op_flag_value = RTE_BBDEV_FFT_DEWINDOWING; 2460ed76d66SHernan Vargas else if (!strcmp(token, "RTE_BBDEV_FFT_FREQ_RESAMPLING")) 2470ed76d66SHernan Vargas *op_flag_value = RTE_BBDEV_FFT_FREQ_RESAMPLING; 2480acdb986SNicolas Chautru else { 2490acdb986SNicolas Chautru printf("The given value is not a FFT flag\n"); 2500acdb986SNicolas Chautru return -1; 2510acdb986SNicolas Chautru } 2520acdb986SNicolas Chautru 2530acdb986SNicolas Chautru return 0; 2540acdb986SNicolas Chautru } 2550acdb986SNicolas Chautru 25695f192a4SHernan Vargas /* convert MLD flag from string to unsigned long int*/ 25795f192a4SHernan Vargas static int 25895f192a4SHernan Vargas op_mld_flag_strtoul(char *token, uint32_t *op_flag_value) 25995f192a4SHernan Vargas { 26095f192a4SHernan Vargas if (!strcmp(token, "RTE_BBDEV_MLDTS_REP")) 26195f192a4SHernan Vargas *op_flag_value = RTE_BBDEV_MLDTS_REP; 26295f192a4SHernan Vargas else { 26395f192a4SHernan Vargas printf("The given value is not a MLD flag\n"); 26495f192a4SHernan Vargas return -1; 26595f192a4SHernan Vargas } 26695f192a4SHernan Vargas 26795f192a4SHernan Vargas return 0; 26895f192a4SHernan Vargas } 26995f192a4SHernan Vargas 270f714a188SAmr Mokhtar /* convert turbo encoder flag from string to unsigned long int*/ 271f714a188SAmr Mokhtar static int 272f714a188SAmr Mokhtar op_encoder_flag_strtoul(char *token, uint32_t *op_flag_value) 273f714a188SAmr Mokhtar { 274f714a188SAmr Mokhtar if (!strcmp(token, "RTE_BBDEV_TURBO_RV_INDEX_BYPASS")) 275f714a188SAmr Mokhtar *op_flag_value = RTE_BBDEV_TURBO_RV_INDEX_BYPASS; 276f714a188SAmr Mokhtar else if (!strcmp(token, "RTE_BBDEV_TURBO_RATE_MATCH")) 277f714a188SAmr Mokhtar *op_flag_value = RTE_BBDEV_TURBO_RATE_MATCH; 278f714a188SAmr Mokhtar else if (!strcmp(token, "RTE_BBDEV_TURBO_CRC_24B_ATTACH")) 279f714a188SAmr Mokhtar *op_flag_value = RTE_BBDEV_TURBO_CRC_24B_ATTACH; 280f714a188SAmr Mokhtar else if (!strcmp(token, "RTE_BBDEV_TURBO_CRC_24A_ATTACH")) 281f714a188SAmr Mokhtar *op_flag_value = RTE_BBDEV_TURBO_CRC_24A_ATTACH; 282f714a188SAmr Mokhtar else if (!strcmp(token, "RTE_BBDEV_TURBO_ENC_SCATTER_GATHER")) 283f714a188SAmr Mokhtar *op_flag_value = RTE_BBDEV_TURBO_ENC_SCATTER_GATHER; 284f714a188SAmr Mokhtar else { 285f714a188SAmr Mokhtar printf("The given value is not a turbo encoder flag\n"); 286f714a188SAmr Mokhtar return -1; 287f714a188SAmr Mokhtar } 288f714a188SAmr Mokhtar 289f714a188SAmr Mokhtar return 0; 290f714a188SAmr Mokhtar } 291f714a188SAmr Mokhtar 292d819c083SNicolas Chautru /* convert LDPC encoder flag from string to unsigned long int*/ 293d819c083SNicolas Chautru static int 294d819c083SNicolas Chautru op_ldpc_encoder_flag_strtoul(char *token, uint32_t *op_flag_value) 295d819c083SNicolas Chautru { 296d819c083SNicolas Chautru if (!strcmp(token, "RTE_BBDEV_LDPC_INTERLEAVER_BYPASS")) 297d819c083SNicolas Chautru *op_flag_value = RTE_BBDEV_LDPC_INTERLEAVER_BYPASS; 298d819c083SNicolas Chautru else if (!strcmp(token, "RTE_BBDEV_LDPC_RATE_MATCH")) 299d819c083SNicolas Chautru *op_flag_value = RTE_BBDEV_LDPC_RATE_MATCH; 300d819c083SNicolas Chautru else if (!strcmp(token, "RTE_BBDEV_LDPC_CRC_24A_ATTACH")) 301d819c083SNicolas Chautru *op_flag_value = RTE_BBDEV_LDPC_CRC_24A_ATTACH; 302d819c083SNicolas Chautru else if (!strcmp(token, "RTE_BBDEV_LDPC_CRC_24B_ATTACH")) 303d819c083SNicolas Chautru *op_flag_value = RTE_BBDEV_LDPC_CRC_24B_ATTACH; 304d819c083SNicolas Chautru else if (!strcmp(token, "RTE_BBDEV_LDPC_CRC_16_ATTACH")) 305d819c083SNicolas Chautru *op_flag_value = RTE_BBDEV_LDPC_CRC_16_ATTACH; 306d819c083SNicolas Chautru else if (!strcmp(token, "RTE_BBDEV_LDPC_ENC_INTERRUPTS")) 307d819c083SNicolas Chautru *op_flag_value = RTE_BBDEV_LDPC_ENC_INTERRUPTS; 308d819c083SNicolas Chautru else if (!strcmp(token, "RTE_BBDEV_LDPC_ENC_SCATTER_GATHER")) 309d819c083SNicolas Chautru *op_flag_value = RTE_BBDEV_LDPC_ENC_SCATTER_GATHER; 31072cfe69fSHernan Vargas else if (!strcmp(token, "RTE_BBDEV_LDPC_ENC_CONCATENATION")) 31172cfe69fSHernan Vargas *op_flag_value = RTE_BBDEV_LDPC_ENC_CONCATENATION; 312d819c083SNicolas Chautru else { 31372cfe69fSHernan Vargas printf("The given value is not a LDPC encoder flag - %s\n", token); 314d819c083SNicolas Chautru return -1; 315d819c083SNicolas Chautru } 316d819c083SNicolas Chautru 317d819c083SNicolas Chautru return 0; 318d819c083SNicolas Chautru } 319d819c083SNicolas Chautru 320f714a188SAmr Mokhtar /* tokenization turbo decoder/encoder flags values separated by a comma */ 321f714a188SAmr Mokhtar static int 322f714a188SAmr Mokhtar parse_turbo_flags(char *tokens, uint32_t *op_flags, 323f714a188SAmr Mokhtar enum rte_bbdev_op_type op_type) 324f714a188SAmr Mokhtar { 325f714a188SAmr Mokhtar char *tok = NULL; 326f714a188SAmr Mokhtar uint32_t op_flag_value = 0; 327f714a188SAmr Mokhtar 328f714a188SAmr Mokhtar tok = strtok(tokens, VALUE_DELIMITER); 329f714a188SAmr Mokhtar if (tok == NULL) 330f714a188SAmr Mokhtar return -1; 331f714a188SAmr Mokhtar 332f714a188SAmr Mokhtar while (tok != NULL) { 333f714a188SAmr Mokhtar trim_space(tok); 334f714a188SAmr Mokhtar if (op_type == RTE_BBDEV_OP_TURBO_DEC) { 335f714a188SAmr Mokhtar if (op_decoder_flag_strtoul(tok, &op_flag_value) == -1) 336f714a188SAmr Mokhtar return -1; 337f714a188SAmr Mokhtar } else if (op_type == RTE_BBDEV_OP_TURBO_ENC) { 338f714a188SAmr Mokhtar if (op_encoder_flag_strtoul(tok, &op_flag_value) == -1) 339f714a188SAmr Mokhtar return -1; 340d819c083SNicolas Chautru } else if (op_type == RTE_BBDEV_OP_LDPC_ENC) { 341d819c083SNicolas Chautru if (op_ldpc_encoder_flag_strtoul(tok, &op_flag_value) 342d819c083SNicolas Chautru == -1) 343d819c083SNicolas Chautru return -1; 344d819c083SNicolas Chautru } else if (op_type == RTE_BBDEV_OP_LDPC_DEC) { 345d819c083SNicolas Chautru if (op_ldpc_decoder_flag_strtoul(tok, &op_flag_value) 346d819c083SNicolas Chautru == -1) 347d819c083SNicolas Chautru return -1; 3480acdb986SNicolas Chautru } else if (op_type == RTE_BBDEV_OP_FFT) { 3490acdb986SNicolas Chautru if (op_fft_flag_strtoul(tok, &op_flag_value) 3500acdb986SNicolas Chautru == -1) 3510acdb986SNicolas Chautru return -1; 35295f192a4SHernan Vargas } else if (op_type == RTE_BBDEV_OP_MLDTS) { 35395f192a4SHernan Vargas if (op_mld_flag_strtoul(tok, &op_flag_value) 35495f192a4SHernan Vargas == -1) 35595f192a4SHernan Vargas return -1; 356f714a188SAmr Mokhtar } else { 357f714a188SAmr Mokhtar return -1; 358f714a188SAmr Mokhtar } 359f714a188SAmr Mokhtar 360f714a188SAmr Mokhtar *op_flags = *op_flags | op_flag_value; 361f714a188SAmr Mokhtar 362f714a188SAmr Mokhtar tok = strtok(NULL, VALUE_DELIMITER); 363f714a188SAmr Mokhtar if (tok == NULL) 364f714a188SAmr Mokhtar break; 365f714a188SAmr Mokhtar } 366f714a188SAmr Mokhtar 367f714a188SAmr Mokhtar return 0; 368f714a188SAmr Mokhtar } 369f714a188SAmr Mokhtar 370f714a188SAmr Mokhtar /* convert turbo encoder/decoder op_type from string to enum*/ 371f714a188SAmr Mokhtar static int 372f714a188SAmr Mokhtar op_turbo_type_strtol(char *token, enum rte_bbdev_op_type *op_type) 373f714a188SAmr Mokhtar { 374f714a188SAmr Mokhtar trim_space(token); 375f714a188SAmr Mokhtar if (!strcmp(token, "RTE_BBDEV_OP_TURBO_DEC")) 376f714a188SAmr Mokhtar *op_type = RTE_BBDEV_OP_TURBO_DEC; 377f714a188SAmr Mokhtar else if (!strcmp(token, "RTE_BBDEV_OP_TURBO_ENC")) 378f714a188SAmr Mokhtar *op_type = RTE_BBDEV_OP_TURBO_ENC; 379d819c083SNicolas Chautru else if (!strcmp(token, "RTE_BBDEV_OP_LDPC_ENC")) 380d819c083SNicolas Chautru *op_type = RTE_BBDEV_OP_LDPC_ENC; 381d819c083SNicolas Chautru else if (!strcmp(token, "RTE_BBDEV_OP_LDPC_DEC")) 382d819c083SNicolas Chautru *op_type = RTE_BBDEV_OP_LDPC_DEC; 3830acdb986SNicolas Chautru else if (!strcmp(token, "RTE_BBDEV_OP_FFT")) 3840acdb986SNicolas Chautru *op_type = RTE_BBDEV_OP_FFT; 38595f192a4SHernan Vargas else if (!strcmp(token, "RTE_BBDEV_OP_MLDTS")) 38695f192a4SHernan Vargas *op_type = RTE_BBDEV_OP_MLDTS; 387f714a188SAmr Mokhtar else if (!strcmp(token, "RTE_BBDEV_OP_NONE")) 388f714a188SAmr Mokhtar *op_type = RTE_BBDEV_OP_NONE; 389f714a188SAmr Mokhtar else { 390f714a188SAmr Mokhtar printf("Not valid turbo op_type: '%s'\n", token); 391f714a188SAmr Mokhtar return -1; 392f714a188SAmr Mokhtar } 393f714a188SAmr Mokhtar 394f714a188SAmr Mokhtar return 0; 395f714a188SAmr Mokhtar } 396f714a188SAmr Mokhtar 397f714a188SAmr Mokhtar /* tokenization expected status values separated by a comma */ 398f714a188SAmr Mokhtar static int 399f714a188SAmr Mokhtar parse_expected_status(char *tokens, int *status, enum rte_bbdev_op_type op_type) 400f714a188SAmr Mokhtar { 401f714a188SAmr Mokhtar char *tok = NULL; 402f714a188SAmr Mokhtar bool status_ok = false; 403f714a188SAmr Mokhtar 404f714a188SAmr Mokhtar tok = strtok(tokens, VALUE_DELIMITER); 405f714a188SAmr Mokhtar if (tok == NULL) 406f714a188SAmr Mokhtar return -1; 407f714a188SAmr Mokhtar 408f714a188SAmr Mokhtar while (tok != NULL) { 409f714a188SAmr Mokhtar trim_space(tok); 410f714a188SAmr Mokhtar if (!strcmp(tok, "OK")) 411f714a188SAmr Mokhtar status_ok = true; 412f714a188SAmr Mokhtar else if (!strcmp(tok, "DMA")) 413f714a188SAmr Mokhtar *status = *status | (1 << RTE_BBDEV_DRV_ERROR); 414f714a188SAmr Mokhtar else if (!strcmp(tok, "FCW")) 415f714a188SAmr Mokhtar *status = *status | (1 << RTE_BBDEV_DATA_ERROR); 416d819c083SNicolas Chautru else if (!strcmp(tok, "SYNCRC")) { 417d819c083SNicolas Chautru *status = *status | (1 << RTE_BBDEV_SYNDROME_ERROR); 418d819c083SNicolas Chautru *status = *status | (1 << RTE_BBDEV_CRC_ERROR); 419d819c083SNicolas Chautru } else if (!strcmp(tok, "SYN")) 420d819c083SNicolas Chautru *status = *status | (1 << RTE_BBDEV_SYNDROME_ERROR); 421f714a188SAmr Mokhtar else if (!strcmp(tok, "CRC")) { 422d819c083SNicolas Chautru if ((op_type == RTE_BBDEV_OP_TURBO_DEC) || 423d819c083SNicolas Chautru (op_type == RTE_BBDEV_OP_LDPC_DEC)) 424f714a188SAmr Mokhtar *status = *status | (1 << RTE_BBDEV_CRC_ERROR); 425f714a188SAmr Mokhtar else { 426f714a188SAmr Mokhtar printf( 427d819c083SNicolas Chautru "CRC is only a valid value for decoder\n"); 428f714a188SAmr Mokhtar return -1; 429f714a188SAmr Mokhtar } 430f714a188SAmr Mokhtar } else { 431f714a188SAmr Mokhtar printf("Not valid status: '%s'\n", tok); 432f714a188SAmr Mokhtar return -1; 433f714a188SAmr Mokhtar } 434f714a188SAmr Mokhtar 435f714a188SAmr Mokhtar tok = strtok(NULL, VALUE_DELIMITER); 436f714a188SAmr Mokhtar if (tok == NULL) 437f714a188SAmr Mokhtar break; 438f714a188SAmr Mokhtar } 439f714a188SAmr Mokhtar 440f714a188SAmr Mokhtar if (status_ok && *status != 0) { 441f714a188SAmr Mokhtar printf( 442f714a188SAmr Mokhtar "Not valid status values. Cannot be OK and ERROR at the same time.\n"); 443f714a188SAmr Mokhtar return -1; 444f714a188SAmr Mokhtar } 445f714a188SAmr Mokhtar 446f714a188SAmr Mokhtar return 0; 447f714a188SAmr Mokhtar } 448f714a188SAmr Mokhtar 449f714a188SAmr Mokhtar /* parse ops data entry (there can be more than 1 input entry, each will be 450f714a188SAmr Mokhtar * contained in a separate op_data_buf struct) 451f714a188SAmr Mokhtar */ 452f714a188SAmr Mokhtar static int 453f714a188SAmr Mokhtar parse_data_entry(const char *key_token, char *token, 454f714a188SAmr Mokhtar struct test_bbdev_vector *vector, enum op_data_type type, 455f714a188SAmr Mokhtar const char *prefix) 456f714a188SAmr Mokhtar { 457f714a188SAmr Mokhtar int ret; 458f714a188SAmr Mokhtar uint32_t data_length = 0; 459f714a188SAmr Mokhtar uint32_t *data = NULL; 460f714a188SAmr Mokhtar unsigned int id; 461f714a188SAmr Mokhtar struct op_data_buf *op_data; 462f714a188SAmr Mokhtar unsigned int *nb_ops; 463f714a188SAmr Mokhtar 46421820350SAmr Mokhtar if (type >= DATA_NUM_TYPES) { 465f714a188SAmr Mokhtar printf("Unknown op type: %d!\n", type); 466f714a188SAmr Mokhtar return -1; 467f714a188SAmr Mokhtar } 468f714a188SAmr Mokhtar 469f714a188SAmr Mokhtar op_data = vector->entries[type].segments; 470f714a188SAmr Mokhtar nb_ops = &vector->entries[type].nb_segments; 471f714a188SAmr Mokhtar 472c4b0d663SNicolas Chautru if (*nb_ops >= RTE_BBDEV_TURBO_MAX_CODE_BLOCKS) { 473f714a188SAmr Mokhtar printf("Too many segments (code blocks defined): %u, max %d!\n", 474c4b0d663SNicolas Chautru *nb_ops, RTE_BBDEV_TURBO_MAX_CODE_BLOCKS); 475f714a188SAmr Mokhtar return -1; 476f714a188SAmr Mokhtar } 477f714a188SAmr Mokhtar 478f714a188SAmr Mokhtar if (sscanf(key_token + strlen(prefix), "%u", &id) != 1) { 479f714a188SAmr Mokhtar printf("Missing ID of %s\n", prefix); 480f714a188SAmr Mokhtar return -1; 481f714a188SAmr Mokhtar } 482f714a188SAmr Mokhtar if (id != *nb_ops) { 483f714a188SAmr Mokhtar printf( 484f714a188SAmr Mokhtar "Please order data entries sequentially, i.e. %s0, %s1, ...\n", 485f714a188SAmr Mokhtar prefix, prefix); 486f714a188SAmr Mokhtar return -1; 487f714a188SAmr Mokhtar } 488f714a188SAmr Mokhtar 489f714a188SAmr Mokhtar /* Clear new op data struct */ 490f714a188SAmr Mokhtar memset(op_data + *nb_ops, 0, sizeof(struct op_data_buf)); 491f714a188SAmr Mokhtar 492f714a188SAmr Mokhtar ret = parse_values(token, &data, &data_length); 493f714a188SAmr Mokhtar if (!ret) { 494f714a188SAmr Mokhtar op_data[*nb_ops].addr = data; 495f714a188SAmr Mokhtar op_data[*nb_ops].length = data_length; 496f714a188SAmr Mokhtar ++(*nb_ops); 497f714a188SAmr Mokhtar } 498f714a188SAmr Mokhtar 499f714a188SAmr Mokhtar return ret; 500f714a188SAmr Mokhtar } 501f714a188SAmr Mokhtar 502f714a188SAmr Mokhtar /* parses turbo decoder parameters and assigns to global variable */ 503f714a188SAmr Mokhtar static int 504f714a188SAmr Mokhtar parse_decoder_params(const char *key_token, char *token, 505f714a188SAmr Mokhtar struct test_bbdev_vector *vector) 506f714a188SAmr Mokhtar { 507f714a188SAmr Mokhtar int ret = 0, status = 0; 508f714a188SAmr Mokhtar uint32_t op_flags = 0; 509f714a188SAmr Mokhtar char *err = NULL; 510f714a188SAmr Mokhtar 511f714a188SAmr Mokhtar struct rte_bbdev_op_turbo_dec *turbo_dec = &vector->turbo_dec; 512f714a188SAmr Mokhtar 513f714a188SAmr Mokhtar /* compare keys */ 514f714a188SAmr Mokhtar if (starts_with(key_token, op_data_prefixes[DATA_INPUT])) 515f714a188SAmr Mokhtar ret = parse_data_entry(key_token, token, vector, 516f714a188SAmr Mokhtar DATA_INPUT, op_data_prefixes[DATA_INPUT]); 517f714a188SAmr Mokhtar 518f714a188SAmr Mokhtar else if (starts_with(key_token, op_data_prefixes[DATA_SOFT_OUTPUT])) 519f714a188SAmr Mokhtar ret = parse_data_entry(key_token, token, vector, 520f714a188SAmr Mokhtar DATA_SOFT_OUTPUT, 521f714a188SAmr Mokhtar op_data_prefixes[DATA_SOFT_OUTPUT]); 522f714a188SAmr Mokhtar 523f714a188SAmr Mokhtar else if (starts_with(key_token, op_data_prefixes[DATA_HARD_OUTPUT])) 524f714a188SAmr Mokhtar ret = parse_data_entry(key_token, token, vector, 525f714a188SAmr Mokhtar DATA_HARD_OUTPUT, 526f714a188SAmr Mokhtar op_data_prefixes[DATA_HARD_OUTPUT]); 527f714a188SAmr Mokhtar else if (!strcmp(key_token, "e")) { 528f714a188SAmr Mokhtar vector->mask |= TEST_BBDEV_VF_E; 529f714a188SAmr Mokhtar turbo_dec->cb_params.e = (uint32_t) strtoul(token, &err, 0); 530f714a188SAmr Mokhtar } else if (!strcmp(key_token, "ea")) { 531f714a188SAmr Mokhtar vector->mask |= TEST_BBDEV_VF_EA; 532f714a188SAmr Mokhtar turbo_dec->tb_params.ea = (uint32_t) strtoul(token, &err, 0); 533f714a188SAmr Mokhtar ret = ((err == NULL) || (*err != '\0')) ? -1 : 0; 534f714a188SAmr Mokhtar } else if (!strcmp(key_token, "eb")) { 535f714a188SAmr Mokhtar vector->mask |= TEST_BBDEV_VF_EB; 536f714a188SAmr Mokhtar turbo_dec->tb_params.eb = (uint32_t) strtoul(token, &err, 0); 537f714a188SAmr Mokhtar ret = ((err == NULL) || (*err != '\0')) ? -1 : 0; 538f714a188SAmr Mokhtar } else if (!strcmp(key_token, "k")) { 539f714a188SAmr Mokhtar vector->mask |= TEST_BBDEV_VF_K; 540f714a188SAmr Mokhtar turbo_dec->cb_params.k = (uint16_t) strtoul(token, &err, 0); 541f714a188SAmr Mokhtar ret = ((err == NULL) || (*err != '\0')) ? -1 : 0; 542f714a188SAmr Mokhtar } else if (!strcmp(key_token, "k_pos")) { 543f714a188SAmr Mokhtar vector->mask |= TEST_BBDEV_VF_K_POS; 544f714a188SAmr Mokhtar turbo_dec->tb_params.k_pos = (uint16_t) strtoul(token, &err, 0); 545f714a188SAmr Mokhtar ret = ((err == NULL) || (*err != '\0')) ? -1 : 0; 546f714a188SAmr Mokhtar } else if (!strcmp(key_token, "k_neg")) { 547f714a188SAmr Mokhtar vector->mask |= TEST_BBDEV_VF_K_NEG; 548f714a188SAmr Mokhtar turbo_dec->tb_params.k_neg = (uint16_t) strtoul(token, &err, 0); 549f714a188SAmr Mokhtar ret = ((err == NULL) || (*err != '\0')) ? -1 : 0; 550f714a188SAmr Mokhtar } else if (!strcmp(key_token, "c")) { 551f714a188SAmr Mokhtar vector->mask |= TEST_BBDEV_VF_C; 552f714a188SAmr Mokhtar turbo_dec->tb_params.c = (uint16_t) strtoul(token, &err, 0); 553f714a188SAmr Mokhtar ret = ((err == NULL) || (*err != '\0')) ? -1 : 0; 554f714a188SAmr Mokhtar } else if (!strcmp(key_token, "c_neg")) { 555f714a188SAmr Mokhtar vector->mask |= TEST_BBDEV_VF_C_NEG; 556f714a188SAmr Mokhtar turbo_dec->tb_params.c_neg = (uint16_t) strtoul(token, &err, 0); 557f714a188SAmr Mokhtar ret = ((err == NULL) || (*err != '\0')) ? -1 : 0; 558f714a188SAmr Mokhtar } else if (!strcmp(key_token, "cab")) { 559f714a188SAmr Mokhtar vector->mask |= TEST_BBDEV_VF_CAB; 560f714a188SAmr Mokhtar turbo_dec->tb_params.cab = (uint8_t) strtoul(token, &err, 0); 561f714a188SAmr Mokhtar ret = ((err == NULL) || (*err != '\0')) ? -1 : 0; 562f714a188SAmr Mokhtar } else if (!strcmp(key_token, "rv_index")) { 563f714a188SAmr Mokhtar vector->mask |= TEST_BBDEV_VF_RV_INDEX; 564f714a188SAmr Mokhtar turbo_dec->rv_index = (uint8_t) strtoul(token, &err, 0); 565f714a188SAmr Mokhtar ret = ((err == NULL) || (*err != '\0')) ? -1 : 0; 566f714a188SAmr Mokhtar } else if (!strcmp(key_token, "iter_min")) { 567f714a188SAmr Mokhtar vector->mask |= TEST_BBDEV_VF_ITER_MIN; 568f714a188SAmr Mokhtar turbo_dec->iter_min = (uint8_t) strtoul(token, &err, 0); 569f714a188SAmr Mokhtar ret = ((err == NULL) || (*err != '\0')) ? -1 : 0; 570f714a188SAmr Mokhtar } else if (!strcmp(key_token, "expected_iter_count")) { 571f714a188SAmr Mokhtar vector->mask |= TEST_BBDEV_VF_EXPECTED_ITER_COUNT; 572f714a188SAmr Mokhtar turbo_dec->iter_count = (uint8_t) strtoul(token, &err, 0); 573f714a188SAmr Mokhtar ret = ((err == NULL) || (*err != '\0')) ? -1 : 0; 574f714a188SAmr Mokhtar } else if (!strcmp(key_token, "ext_scale")) { 575f714a188SAmr Mokhtar vector->mask |= TEST_BBDEV_VF_EXT_SCALE; 576f714a188SAmr Mokhtar turbo_dec->ext_scale = (uint8_t) strtoul(token, &err, 0); 577f714a188SAmr Mokhtar ret = ((err == NULL) || (*err != '\0')) ? -1 : 0; 578f714a188SAmr Mokhtar } else if (!strcmp(key_token, "num_maps")) { 579f714a188SAmr Mokhtar vector->mask |= TEST_BBDEV_VF_NUM_MAPS; 580f714a188SAmr Mokhtar turbo_dec->num_maps = (uint8_t) strtoul(token, &err, 0); 581f714a188SAmr Mokhtar ret = ((err == NULL) || (*err != '\0')) ? -1 : 0; 5820b98d574SKamil Chalupnik } else if (!strcmp(key_token, "r")) { 5830b98d574SKamil Chalupnik vector->mask |= TEST_BBDEV_VF_R; 5840b98d574SKamil Chalupnik turbo_dec->tb_params.r = (uint8_t)strtoul(token, &err, 0); 5850b98d574SKamil Chalupnik ret = ((err == NULL) || (*err != '\0')) ? -1 : 0; 586f714a188SAmr Mokhtar } else if (!strcmp(key_token, "code_block_mode")) { 587f714a188SAmr Mokhtar vector->mask |= TEST_BBDEV_VF_CODE_BLOCK_MODE; 588f714a188SAmr Mokhtar turbo_dec->code_block_mode = (uint8_t) strtoul(token, &err, 0); 589f714a188SAmr Mokhtar ret = ((err == NULL) || (*err != '\0')) ? -1 : 0; 590f714a188SAmr Mokhtar } else if (!strcmp(key_token, "op_flags")) { 591f714a188SAmr Mokhtar vector->mask |= TEST_BBDEV_VF_OP_FLAGS; 592f714a188SAmr Mokhtar ret = parse_turbo_flags(token, &op_flags, 593f714a188SAmr Mokhtar vector->op_type); 594f714a188SAmr Mokhtar if (!ret) 595f714a188SAmr Mokhtar turbo_dec->op_flags = op_flags; 596f714a188SAmr Mokhtar } else if (!strcmp(key_token, "expected_status")) { 597f714a188SAmr Mokhtar vector->mask |= TEST_BBDEV_VF_EXPECTED_STATUS; 598f714a188SAmr Mokhtar ret = parse_expected_status(token, &status, vector->op_type); 599f714a188SAmr Mokhtar if (!ret) 600f714a188SAmr Mokhtar vector->expected_status = status; 601f714a188SAmr Mokhtar } else { 602f714a188SAmr Mokhtar printf("Not valid dec key: '%s'\n", key_token); 603f714a188SAmr Mokhtar return -1; 604f714a188SAmr Mokhtar } 605f714a188SAmr Mokhtar 606f714a188SAmr Mokhtar if (ret != 0) { 607f714a188SAmr Mokhtar printf("Failed with convert '%s\t%s'\n", key_token, token); 608f714a188SAmr Mokhtar return -1; 609f714a188SAmr Mokhtar } 610f714a188SAmr Mokhtar 611f714a188SAmr Mokhtar return 0; 612f714a188SAmr Mokhtar } 613f714a188SAmr Mokhtar 614f714a188SAmr Mokhtar /* parses turbo encoder parameters and assigns to global variable */ 615f714a188SAmr Mokhtar static int 616f714a188SAmr Mokhtar parse_encoder_params(const char *key_token, char *token, 617f714a188SAmr Mokhtar struct test_bbdev_vector *vector) 618f714a188SAmr Mokhtar { 619f714a188SAmr Mokhtar int ret = 0, status = 0; 620f714a188SAmr Mokhtar uint32_t op_flags = 0; 621f714a188SAmr Mokhtar char *err = NULL; 622f714a188SAmr Mokhtar 623f714a188SAmr Mokhtar 624f714a188SAmr Mokhtar struct rte_bbdev_op_turbo_enc *turbo_enc = &vector->turbo_enc; 625f714a188SAmr Mokhtar 626f714a188SAmr Mokhtar if (starts_with(key_token, op_data_prefixes[DATA_INPUT])) 627f714a188SAmr Mokhtar ret = parse_data_entry(key_token, token, vector, 628f714a188SAmr Mokhtar DATA_INPUT, op_data_prefixes[DATA_INPUT]); 629f714a188SAmr Mokhtar else if (starts_with(key_token, "output")) 630f714a188SAmr Mokhtar ret = parse_data_entry(key_token, token, vector, 631f714a188SAmr Mokhtar DATA_HARD_OUTPUT, "output"); 632f714a188SAmr Mokhtar else if (!strcmp(key_token, "e")) { 633f714a188SAmr Mokhtar vector->mask |= TEST_BBDEV_VF_E; 634f714a188SAmr Mokhtar turbo_enc->cb_params.e = (uint32_t) strtoul(token, &err, 0); 635f714a188SAmr Mokhtar ret = ((err == NULL) || (*err != '\0')) ? -1 : 0; 636f714a188SAmr Mokhtar } else if (!strcmp(key_token, "ea")) { 637f714a188SAmr Mokhtar vector->mask |= TEST_BBDEV_VF_EA; 638f714a188SAmr Mokhtar turbo_enc->tb_params.ea = (uint32_t) strtoul(token, &err, 0); 639f714a188SAmr Mokhtar ret = ((err == NULL) || (*err != '\0')) ? -1 : 0; 640f714a188SAmr Mokhtar } else if (!strcmp(key_token, "eb")) { 641f714a188SAmr Mokhtar vector->mask |= TEST_BBDEV_VF_EB; 642f714a188SAmr Mokhtar turbo_enc->tb_params.eb = (uint32_t) strtoul(token, &err, 0); 643f714a188SAmr Mokhtar ret = ((err == NULL) || (*err != '\0')) ? -1 : 0; 644f714a188SAmr Mokhtar } else if (!strcmp(key_token, "k")) { 645f714a188SAmr Mokhtar vector->mask |= TEST_BBDEV_VF_K; 646f714a188SAmr Mokhtar turbo_enc->cb_params.k = (uint16_t) strtoul(token, &err, 0); 647f714a188SAmr Mokhtar ret = ((err == NULL) || (*err != '\0')) ? -1 : 0; 648f714a188SAmr Mokhtar } else if (!strcmp(key_token, "k_neg")) { 649f714a188SAmr Mokhtar vector->mask |= TEST_BBDEV_VF_K_NEG; 650f714a188SAmr Mokhtar turbo_enc->tb_params.k_neg = (uint16_t) strtoul(token, &err, 0); 651f714a188SAmr Mokhtar ret = ((err == NULL) || (*err != '\0')) ? -1 : 0; 652f714a188SAmr Mokhtar } else if (!strcmp(key_token, "k_pos")) { 653f714a188SAmr Mokhtar vector->mask |= TEST_BBDEV_VF_K_POS; 654f714a188SAmr Mokhtar turbo_enc->tb_params.k_pos = (uint16_t) strtoul(token, &err, 0); 655f714a188SAmr Mokhtar ret = ((err == NULL) || (*err != '\0')) ? -1 : 0; 656f714a188SAmr Mokhtar } else if (!strcmp(key_token, "c_neg")) { 657f714a188SAmr Mokhtar vector->mask |= TEST_BBDEV_VF_C_NEG; 658f714a188SAmr Mokhtar turbo_enc->tb_params.c_neg = (uint8_t) strtoul(token, &err, 0); 659f714a188SAmr Mokhtar ret = ((err == NULL) || (*err != '\0')) ? -1 : 0; 660f714a188SAmr Mokhtar } else if (!strcmp(key_token, "c")) { 661f714a188SAmr Mokhtar vector->mask |= TEST_BBDEV_VF_C; 662f714a188SAmr Mokhtar turbo_enc->tb_params.c = (uint8_t) strtoul(token, &err, 0); 663f714a188SAmr Mokhtar ret = ((err == NULL) || (*err != '\0')) ? -1 : 0; 664f714a188SAmr Mokhtar } else if (!strcmp(key_token, "cab")) { 665f714a188SAmr Mokhtar vector->mask |= TEST_BBDEV_VF_CAB; 666f714a188SAmr Mokhtar turbo_enc->tb_params.cab = (uint8_t) strtoul(token, &err, 0); 667f714a188SAmr Mokhtar ret = ((err == NULL) || (*err != '\0')) ? -1 : 0; 668f714a188SAmr Mokhtar } else if (!strcmp(key_token, "rv_index")) { 669f714a188SAmr Mokhtar vector->mask |= TEST_BBDEV_VF_RV_INDEX; 670f714a188SAmr Mokhtar turbo_enc->rv_index = (uint8_t) strtoul(token, &err, 0); 671f714a188SAmr Mokhtar ret = ((err == NULL) || (*err != '\0')) ? -1 : 0; 672f714a188SAmr Mokhtar } else if (!strcmp(key_token, "ncb")) { 673f714a188SAmr Mokhtar vector->mask |= TEST_BBDEV_VF_NCB; 674f714a188SAmr Mokhtar turbo_enc->cb_params.ncb = (uint16_t) strtoul(token, &err, 0); 675f714a188SAmr Mokhtar ret = ((err == NULL) || (*err != '\0')) ? -1 : 0; 676f714a188SAmr Mokhtar } else if (!strcmp(key_token, "ncb_neg")) { 677f714a188SAmr Mokhtar vector->mask |= TEST_BBDEV_VF_NCB_NEG; 678f714a188SAmr Mokhtar turbo_enc->tb_params.ncb_neg = 679f714a188SAmr Mokhtar (uint16_t) strtoul(token, &err, 0); 680f714a188SAmr Mokhtar ret = ((err == NULL) || (*err != '\0')) ? -1 : 0; 681f714a188SAmr Mokhtar } else if (!strcmp(key_token, "ncb_pos")) { 682f714a188SAmr Mokhtar vector->mask |= TEST_BBDEV_VF_NCB_POS; 683f714a188SAmr Mokhtar turbo_enc->tb_params.ncb_pos = 684f714a188SAmr Mokhtar (uint16_t) strtoul(token, &err, 0); 685f714a188SAmr Mokhtar ret = ((err == NULL) || (*err != '\0')) ? -1 : 0; 686f714a188SAmr Mokhtar } else if (!strcmp(key_token, "r")) { 687f714a188SAmr Mokhtar vector->mask |= TEST_BBDEV_VF_R; 688f714a188SAmr Mokhtar turbo_enc->tb_params.r = (uint8_t) strtoul(token, &err, 0); 689f714a188SAmr Mokhtar ret = ((err == NULL) || (*err != '\0')) ? -1 : 0; 690f714a188SAmr Mokhtar } else if (!strcmp(key_token, "code_block_mode")) { 691f714a188SAmr Mokhtar vector->mask |= TEST_BBDEV_VF_CODE_BLOCK_MODE; 692f714a188SAmr Mokhtar turbo_enc->code_block_mode = (uint8_t) strtoul(token, &err, 0); 693f714a188SAmr Mokhtar ret = ((err == NULL) || (*err != '\0')) ? -1 : 0; 694f714a188SAmr Mokhtar } else if (!strcmp(key_token, "op_flags")) { 695f714a188SAmr Mokhtar vector->mask |= TEST_BBDEV_VF_OP_FLAGS; 696f714a188SAmr Mokhtar ret = parse_turbo_flags(token, &op_flags, 697f714a188SAmr Mokhtar vector->op_type); 698f714a188SAmr Mokhtar if (!ret) 699f714a188SAmr Mokhtar turbo_enc->op_flags = op_flags; 700f714a188SAmr Mokhtar } else if (!strcmp(key_token, "expected_status")) { 701f714a188SAmr Mokhtar vector->mask |= TEST_BBDEV_VF_EXPECTED_STATUS; 702f714a188SAmr Mokhtar ret = parse_expected_status(token, &status, vector->op_type); 703f714a188SAmr Mokhtar if (!ret) 704f714a188SAmr Mokhtar vector->expected_status = status; 705f714a188SAmr Mokhtar } else { 706f714a188SAmr Mokhtar printf("Not valid enc key: '%s'\n", key_token); 707f714a188SAmr Mokhtar return -1; 708f714a188SAmr Mokhtar } 709f714a188SAmr Mokhtar 710f714a188SAmr Mokhtar if (ret != 0) { 711f714a188SAmr Mokhtar printf("Failed with convert '%s\t%s'\n", key_token, token); 712f714a188SAmr Mokhtar return -1; 713f714a188SAmr Mokhtar } 714f714a188SAmr Mokhtar 715f714a188SAmr Mokhtar return 0; 716f714a188SAmr Mokhtar } 717f714a188SAmr Mokhtar 718d819c083SNicolas Chautru 719d819c083SNicolas Chautru /* parses LDPC encoder parameters and assigns to global variable */ 720d819c083SNicolas Chautru static int 721d819c083SNicolas Chautru parse_ldpc_encoder_params(const char *key_token, char *token, 722d819c083SNicolas Chautru struct test_bbdev_vector *vector) 723d819c083SNicolas Chautru { 724d819c083SNicolas Chautru int ret = 0, status = 0; 725d819c083SNicolas Chautru uint32_t op_flags = 0; 726d819c083SNicolas Chautru char *err = NULL; 727d819c083SNicolas Chautru 728d819c083SNicolas Chautru struct rte_bbdev_op_ldpc_enc *ldpc_enc = &vector->ldpc_enc; 729d819c083SNicolas Chautru 730d819c083SNicolas Chautru if (starts_with(key_token, op_data_prefixes[DATA_INPUT])) 731d819c083SNicolas Chautru ret = parse_data_entry(key_token, token, vector, 732d819c083SNicolas Chautru DATA_INPUT, 733d819c083SNicolas Chautru op_data_prefixes[DATA_INPUT]); 734d819c083SNicolas Chautru else if (starts_with(key_token, "output")) 735d819c083SNicolas Chautru ret = parse_data_entry(key_token, token, vector, 736d819c083SNicolas Chautru DATA_HARD_OUTPUT, 737d819c083SNicolas Chautru "output"); 738d819c083SNicolas Chautru else if (!strcmp(key_token, "e")) { 739d819c083SNicolas Chautru vector->mask |= TEST_BBDEV_VF_E; 740d819c083SNicolas Chautru ldpc_enc->cb_params.e = (uint32_t) strtoul(token, &err, 0); 741d819c083SNicolas Chautru ret = ((err == NULL) || (*err != '\0')) ? -1 : 0; 742d819c083SNicolas Chautru } else if (!strcmp(key_token, "ea")) { 743d819c083SNicolas Chautru vector->mask |= TEST_BBDEV_VF_EA; 744d819c083SNicolas Chautru ldpc_enc->tb_params.ea = (uint32_t) strtoul(token, &err, 0); 745d819c083SNicolas Chautru ret = ((err == NULL) || (*err != '\0')) ? -1 : 0; 746d819c083SNicolas Chautru } else if (!strcmp(key_token, "eb")) { 747d819c083SNicolas Chautru vector->mask |= TEST_BBDEV_VF_EB; 748d819c083SNicolas Chautru ldpc_enc->tb_params.eb = (uint32_t) strtoul(token, &err, 0); 749d819c083SNicolas Chautru ret = ((err == NULL) || (*err != '\0')) ? -1 : 0; 750d819c083SNicolas Chautru } else if (!strcmp(key_token, "c")) { 751d819c083SNicolas Chautru vector->mask |= TEST_BBDEV_VF_C; 752d819c083SNicolas Chautru ldpc_enc->tb_params.c = (uint8_t) strtoul(token, &err, 0); 753d819c083SNicolas Chautru ret = ((err == NULL) || (*err != '\0')) ? -1 : 0; 754d819c083SNicolas Chautru } else if (!strcmp(key_token, "cab")) { 755d819c083SNicolas Chautru vector->mask |= TEST_BBDEV_VF_CAB; 756d819c083SNicolas Chautru ldpc_enc->tb_params.cab = (uint8_t) strtoul(token, &err, 0); 757d819c083SNicolas Chautru ret = ((err == NULL) || (*err != '\0')) ? -1 : 0; 758d819c083SNicolas Chautru } else if (!strcmp(key_token, "rv_index")) { 759d819c083SNicolas Chautru vector->mask |= TEST_BBDEV_VF_RV_INDEX; 760d819c083SNicolas Chautru ldpc_enc->rv_index = (uint8_t) strtoul(token, &err, 0); 761d819c083SNicolas Chautru ret = ((err == NULL) || (*err != '\0')) ? -1 : 0; 762d819c083SNicolas Chautru } else if (!strcmp(key_token, "n_cb")) { 763d819c083SNicolas Chautru vector->mask |= TEST_BBDEV_VF_NCB; 764d819c083SNicolas Chautru ldpc_enc->n_cb = (uint16_t) strtoul(token, &err, 0); 765d819c083SNicolas Chautru ret = ((err == NULL) || (*err != '\0')) ? -1 : 0; 766d819c083SNicolas Chautru } else if (!strcmp(key_token, "r")) { 767d819c083SNicolas Chautru vector->mask |= TEST_BBDEV_VF_R; 768d819c083SNicolas Chautru ldpc_enc->tb_params.r = (uint8_t) strtoul(token, &err, 0); 769d819c083SNicolas Chautru ret = ((err == NULL) || (*err != '\0')) ? -1 : 0; 770d819c083SNicolas Chautru } else if (!strcmp(key_token, "q_m")) { 771d819c083SNicolas Chautru vector->mask |= TEST_BBDEV_VF_QM; 772d819c083SNicolas Chautru ldpc_enc->q_m = (uint8_t) strtoul(token, &err, 0); 773d819c083SNicolas Chautru ret = ((err == NULL) || (*err != '\0')) ? -1 : 0; 774d819c083SNicolas Chautru } else if (!strcmp(key_token, "basegraph")) { 775d819c083SNicolas Chautru vector->mask |= TEST_BBDEV_VF_BG; 776d819c083SNicolas Chautru ldpc_enc->basegraph = (uint8_t) strtoul(token, &err, 0); 777d819c083SNicolas Chautru ret = ((err == NULL) || (*err != '\0')) ? -1 : 0; 778d819c083SNicolas Chautru } else if (!strcmp(key_token, "z_c")) { 779d819c083SNicolas Chautru vector->mask |= TEST_BBDEV_VF_ZC; 780d819c083SNicolas Chautru ldpc_enc->z_c = (uint16_t) strtoul(token, &err, 0); 781d819c083SNicolas Chautru ret = ((err == NULL) || (*err != '\0')) ? -1 : 0; 782d819c083SNicolas Chautru } else if (!strcmp(key_token, "n_filler")) { 783d819c083SNicolas Chautru vector->mask |= TEST_BBDEV_VF_F; 784d819c083SNicolas Chautru ldpc_enc->n_filler = (uint16_t) strtoul(token, &err, 0); 785d819c083SNicolas Chautru ret = ((err == NULL) || (*err != '\0')) ? -1 : 0; 786d819c083SNicolas Chautru } else if (!strcmp(key_token, "code_block_mode")) { 787d819c083SNicolas Chautru vector->mask |= TEST_BBDEV_VF_CODE_BLOCK_MODE; 788d819c083SNicolas Chautru ldpc_enc->code_block_mode = (uint8_t) strtoul(token, &err, 0); 789d819c083SNicolas Chautru ret = ((err == NULL) || (*err != '\0')) ? -1 : 0; 790d819c083SNicolas Chautru } else if (!strcmp(key_token, "op_flags")) { 791d819c083SNicolas Chautru vector->mask |= TEST_BBDEV_VF_OP_FLAGS; 792d819c083SNicolas Chautru ret = parse_turbo_flags(token, &op_flags, vector->op_type); 793d819c083SNicolas Chautru if (!ret) 794d819c083SNicolas Chautru ldpc_enc->op_flags = op_flags; 795d819c083SNicolas Chautru } else if (!strcmp(key_token, "expected_status")) { 796d819c083SNicolas Chautru vector->mask |= TEST_BBDEV_VF_EXPECTED_STATUS; 797d819c083SNicolas Chautru ret = parse_expected_status(token, &status, vector->op_type); 798d819c083SNicolas Chautru if (!ret) 799d819c083SNicolas Chautru vector->expected_status = status; 800d819c083SNicolas Chautru } else { 801d819c083SNicolas Chautru printf("Not valid ldpc enc key: '%s'\n", key_token); 802d819c083SNicolas Chautru return -1; 803d819c083SNicolas Chautru } 804d819c083SNicolas Chautru 805d819c083SNicolas Chautru if (ret != 0) { 806d819c083SNicolas Chautru printf("Failed with convert '%s\t%s'\n", key_token, token); 807d819c083SNicolas Chautru return -1; 808d819c083SNicolas Chautru } 809d819c083SNicolas Chautru 810d819c083SNicolas Chautru return 0; 811d819c083SNicolas Chautru } 812d819c083SNicolas Chautru 813d819c083SNicolas Chautru /* parses LDPC decoder parameters and assigns to global variable */ 814d819c083SNicolas Chautru static int 815d819c083SNicolas Chautru parse_ldpc_decoder_params(const char *key_token, char *token, 816d819c083SNicolas Chautru struct test_bbdev_vector *vector) 817d819c083SNicolas Chautru { 818d819c083SNicolas Chautru int ret = 0, status = 0; 819d819c083SNicolas Chautru uint32_t op_flags = 0; 820d819c083SNicolas Chautru char *err = NULL; 821d819c083SNicolas Chautru 822d819c083SNicolas Chautru struct rte_bbdev_op_ldpc_dec *ldpc_dec = &vector->ldpc_dec; 823d819c083SNicolas Chautru 824d819c083SNicolas Chautru if (starts_with(key_token, op_data_prefixes[DATA_INPUT])) 825d819c083SNicolas Chautru ret = parse_data_entry(key_token, token, vector, 826d819c083SNicolas Chautru DATA_INPUT, 827d819c083SNicolas Chautru op_data_prefixes[DATA_INPUT]); 828d819c083SNicolas Chautru else if (starts_with(key_token, "output")) 829d819c083SNicolas Chautru ret = parse_data_entry(key_token, token, vector, 830d819c083SNicolas Chautru DATA_HARD_OUTPUT, 831d819c083SNicolas Chautru "output"); 832d819c083SNicolas Chautru else if (starts_with(key_token, op_data_prefixes[DATA_HARQ_INPUT])) 833d819c083SNicolas Chautru ret = parse_data_entry(key_token, token, vector, 834d819c083SNicolas Chautru DATA_HARQ_INPUT, 835d819c083SNicolas Chautru op_data_prefixes[DATA_HARQ_INPUT]); 836d819c083SNicolas Chautru else if (starts_with(key_token, op_data_prefixes[DATA_HARQ_OUTPUT])) 837d819c083SNicolas Chautru ret = parse_data_entry(key_token, token, vector, 838d819c083SNicolas Chautru DATA_HARQ_OUTPUT, 839d819c083SNicolas Chautru op_data_prefixes[DATA_HARQ_OUTPUT]); 8408fb0d3bbSHernan Vargas else if (starts_with(key_token, op_data_prefixes[DATA_SOFT_OUTPUT])) 8418fb0d3bbSHernan Vargas ret = parse_data_entry(key_token, token, vector, 8428fb0d3bbSHernan Vargas DATA_SOFT_OUTPUT, 8438fb0d3bbSHernan Vargas op_data_prefixes[DATA_SOFT_OUTPUT]); 844d819c083SNicolas Chautru else if (!strcmp(key_token, "e")) { 845d819c083SNicolas Chautru vector->mask |= TEST_BBDEV_VF_E; 846d819c083SNicolas Chautru ldpc_dec->cb_params.e = (uint32_t) strtoul(token, &err, 0); 847d819c083SNicolas Chautru ret = ((err == NULL) || (*err != '\0')) ? -1 : 0; 848d819c083SNicolas Chautru } else if (!strcmp(key_token, "ea")) { 849d819c083SNicolas Chautru vector->mask |= TEST_BBDEV_VF_EA; 850d819c083SNicolas Chautru ldpc_dec->tb_params.ea = (uint32_t) strtoul(token, &err, 0); 851d819c083SNicolas Chautru ret = ((err == NULL) || (*err != '\0')) ? -1 : 0; 852d819c083SNicolas Chautru } else if (!strcmp(key_token, "eb")) { 853d819c083SNicolas Chautru vector->mask |= TEST_BBDEV_VF_EB; 854d819c083SNicolas Chautru ldpc_dec->tb_params.eb = (uint32_t) strtoul(token, &err, 0); 855d819c083SNicolas Chautru ret = ((err == NULL) || (*err != '\0')) ? -1 : 0; 856d819c083SNicolas Chautru } else if (!strcmp(key_token, "c")) { 857d819c083SNicolas Chautru vector->mask |= TEST_BBDEV_VF_C; 858d819c083SNicolas Chautru ldpc_dec->tb_params.c = (uint8_t) strtoul(token, &err, 0); 859d819c083SNicolas Chautru ret = ((err == NULL) || (*err != '\0')) ? -1 : 0; 860d819c083SNicolas Chautru } else if (!strcmp(key_token, "cab")) { 861d819c083SNicolas Chautru vector->mask |= TEST_BBDEV_VF_CAB; 862d819c083SNicolas Chautru ldpc_dec->tb_params.cab = (uint8_t) strtoul(token, &err, 0); 863d819c083SNicolas Chautru ret = ((err == NULL) || (*err != '\0')) ? -1 : 0; 864d819c083SNicolas Chautru } else if (!strcmp(key_token, "rv_index")) { 865d819c083SNicolas Chautru vector->mask |= TEST_BBDEV_VF_RV_INDEX; 866d819c083SNicolas Chautru ldpc_dec->rv_index = (uint8_t) strtoul(token, &err, 0); 867d819c083SNicolas Chautru ret = ((err == NULL) || (*err != '\0')) ? -1 : 0; 868*591d38ccSNicolas Chautru } else if (!strcmp(key_token, "k0")) { 869*591d38ccSNicolas Chautru vector->mask |= TEST_BBDEV_VF_K0; 870*591d38ccSNicolas Chautru ldpc_dec->k0 = (uint16_t) strtoul(token, &err, 0); 871*591d38ccSNicolas Chautru ret = ((err == NULL) || (*err != '\0')) ? -1 : 0; 872d819c083SNicolas Chautru } else if (!strcmp(key_token, "n_cb")) { 873d819c083SNicolas Chautru vector->mask |= TEST_BBDEV_VF_NCB; 874d819c083SNicolas Chautru ldpc_dec->n_cb = (uint16_t) strtoul(token, &err, 0); 875d819c083SNicolas Chautru ret = ((err == NULL) || (*err != '\0')) ? -1 : 0; 876d819c083SNicolas Chautru } else if (!strcmp(key_token, "r")) { 877d819c083SNicolas Chautru vector->mask |= TEST_BBDEV_VF_R; 878d819c083SNicolas Chautru ldpc_dec->tb_params.r = (uint8_t) strtoul(token, &err, 0); 879d819c083SNicolas Chautru ret = ((err == NULL) || (*err != '\0')) ? -1 : 0; 880d819c083SNicolas Chautru } else if (!strcmp(key_token, "q_m")) { 881d819c083SNicolas Chautru vector->mask |= TEST_BBDEV_VF_QM; 882d819c083SNicolas Chautru ldpc_dec->q_m = (uint8_t) strtoul(token, &err, 0); 883d819c083SNicolas Chautru ret = ((err == NULL) || (*err != '\0')) ? -1 : 0; 884d819c083SNicolas Chautru } else if (!strcmp(key_token, "basegraph")) { 885d819c083SNicolas Chautru vector->mask |= TEST_BBDEV_VF_BG; 886d819c083SNicolas Chautru ldpc_dec->basegraph = (uint8_t) strtoul(token, &err, 0); 887d819c083SNicolas Chautru ret = ((err == NULL) || (*err != '\0')) ? -1 : 0; 888d819c083SNicolas Chautru } else if (!strcmp(key_token, "z_c")) { 889d819c083SNicolas Chautru vector->mask |= TEST_BBDEV_VF_ZC; 890d819c083SNicolas Chautru ldpc_dec->z_c = (uint16_t) strtoul(token, &err, 0); 891d819c083SNicolas Chautru ret = ((err == NULL) || (*err != '\0')) ? -1 : 0; 892d819c083SNicolas Chautru } else if (!strcmp(key_token, "n_filler")) { 893d819c083SNicolas Chautru vector->mask |= TEST_BBDEV_VF_F; 894d819c083SNicolas Chautru ldpc_dec->n_filler = (uint16_t) strtoul(token, &err, 0); 895d819c083SNicolas Chautru ret = ((err == NULL) || (*err != '\0')) ? -1 : 0; 896d819c083SNicolas Chautru } else if (!strcmp(key_token, "expected_iter_count")) { 897d819c083SNicolas Chautru vector->mask |= TEST_BBDEV_VF_EXPECTED_ITER_COUNT; 898d819c083SNicolas Chautru ldpc_dec->iter_count = (uint8_t) strtoul(token, &err, 0); 899d819c083SNicolas Chautru ret = ((err == NULL) || (*err != '\0')) ? -1 : 0; 900d819c083SNicolas Chautru } else if (!strcmp(key_token, "code_block_mode")) { 901d819c083SNicolas Chautru vector->mask |= TEST_BBDEV_VF_CODE_BLOCK_MODE; 902d819c083SNicolas Chautru ldpc_dec->code_block_mode = (uint8_t) strtoul(token, &err, 0); 903d819c083SNicolas Chautru ret = ((err == NULL) || (*err != '\0')) ? -1 : 0; 904d819c083SNicolas Chautru } else if (!strcmp(key_token, "op_flags")) { 905d819c083SNicolas Chautru vector->mask |= TEST_BBDEV_VF_OP_FLAGS; 906d819c083SNicolas Chautru ret = parse_turbo_flags(token, &op_flags, vector->op_type); 907d819c083SNicolas Chautru if (!ret) 908d819c083SNicolas Chautru ldpc_dec->op_flags = op_flags; 909d819c083SNicolas Chautru } else if (!strcmp(key_token, "expected_status")) { 910d819c083SNicolas Chautru vector->mask |= TEST_BBDEV_VF_EXPECTED_STATUS; 911d819c083SNicolas Chautru ret = parse_expected_status(token, &status, vector->op_type); 912d819c083SNicolas Chautru if (!ret) 913d819c083SNicolas Chautru vector->expected_status = status; 914d819c083SNicolas Chautru } else { 915d819c083SNicolas Chautru printf("Not valid ldpc dec key: '%s'\n", key_token); 916d819c083SNicolas Chautru return -1; 917d819c083SNicolas Chautru } 918d819c083SNicolas Chautru 919d819c083SNicolas Chautru if (ret != 0) { 920d819c083SNicolas Chautru printf("Failed with convert '%s\t%s'\n", key_token, token); 921d819c083SNicolas Chautru return -1; 922d819c083SNicolas Chautru } 923d819c083SNicolas Chautru 924d819c083SNicolas Chautru return 0; 925d819c083SNicolas Chautru } 926d819c083SNicolas Chautru 9270ed76d66SHernan Vargas /* Parses FFT parameters and assigns to global variable. */ 9280acdb986SNicolas Chautru static int 9290acdb986SNicolas Chautru parse_fft_params(const char *key_token, char *token, 9300acdb986SNicolas Chautru struct test_bbdev_vector *vector) 9310acdb986SNicolas Chautru { 9320acdb986SNicolas Chautru int ret = 0, status = 0, i, shift; 9330acdb986SNicolas Chautru uint32_t op_flags = 0; 9340acdb986SNicolas Chautru char *tok, *err = NULL; 9350acdb986SNicolas Chautru 9360acdb986SNicolas Chautru struct rte_bbdev_op_fft *fft = &vector->fft; 9370acdb986SNicolas Chautru 9380acdb986SNicolas Chautru if (starts_with(key_token, op_data_prefixes[DATA_INPUT])) { 9390acdb986SNicolas Chautru ret = parse_data_entry(key_token, token, vector, 9400acdb986SNicolas Chautru DATA_INPUT, 9410acdb986SNicolas Chautru op_data_prefixes[DATA_INPUT]); 9420ed76d66SHernan Vargas } else if (starts_with(key_token, "dewin_input")) { 9430ed76d66SHernan Vargas ret = parse_data_entry(key_token, token, vector, 9440ed76d66SHernan Vargas DATA_HARQ_INPUT, 9450ed76d66SHernan Vargas "dewin_input"); 9460acdb986SNicolas Chautru } else if (starts_with(key_token, "output")) { 9470acdb986SNicolas Chautru ret = parse_data_entry(key_token, token, vector, 9480acdb986SNicolas Chautru DATA_HARD_OUTPUT, 9490acdb986SNicolas Chautru "output"); 9500acdb986SNicolas Chautru } else if (starts_with(key_token, "power_output")) { 9510acdb986SNicolas Chautru ret = parse_data_entry(key_token, token, vector, 9520acdb986SNicolas Chautru DATA_SOFT_OUTPUT, 9530acdb986SNicolas Chautru "power_output"); 9540acdb986SNicolas Chautru } else if (!strcmp(key_token, "in_sequence_size")) { 9550acdb986SNicolas Chautru fft->input_sequence_size = (uint32_t) strtoul(token, &err, 0); 9560acdb986SNicolas Chautru ret = ((err == NULL) || (*err != '\0')) ? -1 : 0; 9570acdb986SNicolas Chautru } else if (!strcmp(key_token, "in_leading_padding")) { 9580acdb986SNicolas Chautru fft->input_leading_padding = (uint32_t) strtoul(token, &err, 0); 9590acdb986SNicolas Chautru ret = ((err == NULL) || (*err != '\0')) ? -1 : 0; 9600acdb986SNicolas Chautru } else if (!strcmp(key_token, "out_sequence_size")) { 9610acdb986SNicolas Chautru fft->output_sequence_size = (uint32_t) strtoul(token, &err, 0); 9620acdb986SNicolas Chautru ret = ((err == NULL) || (*err != '\0')) ? -1 : 0; 9630acdb986SNicolas Chautru } else if (!strcmp(key_token, "out_leading_depadding")) { 9640acdb986SNicolas Chautru fft->output_leading_depadding = (uint32_t) strtoul(token, &err, 0); 9650acdb986SNicolas Chautru ret = ((err == NULL) || (*err != '\0')) ? -1 : 0; 9660acdb986SNicolas Chautru } else if (!strcmp(key_token, "window_index")) { 9670acdb986SNicolas Chautru tok = strtok(token, VALUE_DELIMITER); 9680acdb986SNicolas Chautru if (tok == NULL) 9690acdb986SNicolas Chautru return -1; 9700acdb986SNicolas Chautru for (i = 0; i < FFT_WIN_SIZE; i++) { 9710acdb986SNicolas Chautru shift = (i % 2) ? 4 : 0; 9720acdb986SNicolas Chautru fft->window_index[i / 2] |= (uint32_t) strtoul(tok, &err, 0) 9730acdb986SNicolas Chautru << shift; 9740acdb986SNicolas Chautru if (i < (FFT_WIN_SIZE - 1)) { 9750acdb986SNicolas Chautru tok = strtok(NULL, VALUE_DELIMITER); 9760acdb986SNicolas Chautru if (tok == NULL) 9770acdb986SNicolas Chautru return -1; 9780acdb986SNicolas Chautru } 9790acdb986SNicolas Chautru } 9800acdb986SNicolas Chautru ret = ((err == NULL) || (*err != '\0')) ? -1 : 0; 9810acdb986SNicolas Chautru } else if (!strcmp(key_token, "cs_bitmap")) { 9820acdb986SNicolas Chautru fft->cs_bitmap = (uint32_t) strtoul(token, &err, 0); 9830acdb986SNicolas Chautru ret = ((err == NULL) || (*err != '\0')) ? -1 : 0; 9840acdb986SNicolas Chautru } else if (!strcmp(key_token, "num_antennas_log2")) { 9850acdb986SNicolas Chautru fft->num_antennas_log2 = (uint32_t) strtoul(token, &err, 0); 9860acdb986SNicolas Chautru ret = ((err == NULL) || (*err != '\0')) ? -1 : 0; 9870acdb986SNicolas Chautru } else if (!strcmp(key_token, "ifft_log2")) { 9880acdb986SNicolas Chautru fft->idft_log2 = (uint32_t) strtoul(token, &err, 0); 9890acdb986SNicolas Chautru ret = ((err == NULL) || (*err != '\0')) ? -1 : 0; 9900acdb986SNicolas Chautru } else if (!strcmp(key_token, "fft_log2")) { 9910acdb986SNicolas Chautru fft->dft_log2 = (uint32_t) strtoul(token, &err, 0); 9920acdb986SNicolas Chautru ret = ((err == NULL) || (*err != '\0')) ? -1 : 0; 9930acdb986SNicolas Chautru } else if (!strcmp(key_token, "cs_time_adjustment")) { 9940acdb986SNicolas Chautru fft->cs_time_adjustment = (uint32_t) strtoul(token, &err, 0); 9950acdb986SNicolas Chautru ret = ((err == NULL) || (*err != '\0')) ? -1 : 0; 9960acdb986SNicolas Chautru } else if (!strcmp(key_token, "ifft_shift")) { 9970acdb986SNicolas Chautru fft->idft_shift = (uint32_t) strtoul(token, &err, 0); 9980acdb986SNicolas Chautru ret = ((err == NULL) || (*err != '\0')) ? -1 : 0; 9990acdb986SNicolas Chautru } else if (!strcmp(key_token, "fft_shift")) { 10000acdb986SNicolas Chautru fft->dft_shift = (uint32_t) strtoul(token, &err, 0); 10010acdb986SNicolas Chautru ret = ((err == NULL) || (*err != '\0')) ? -1 : 0; 10020acdb986SNicolas Chautru } else if (!strcmp(key_token, "ncs_reciprocal")) { 10030acdb986SNicolas Chautru fft->ncs_reciprocal = (uint32_t) strtoul(token, &err, 0); 10040acdb986SNicolas Chautru ret = ((err == NULL) || (*err != '\0')) ? -1 : 0; 10050acdb986SNicolas Chautru } else if (!strcmp(key_token, "power_shift")) { 10060acdb986SNicolas Chautru fft->power_shift = (uint32_t) strtoul(token, &err, 0); 10070acdb986SNicolas Chautru ret = ((err == NULL) || (*err != '\0')) ? -1 : 0; 10080acdb986SNicolas Chautru } else if (!strcmp(key_token, "fp16_exponent_adjust")) { 10090acdb986SNicolas Chautru fft->fp16_exp_adjust = (uint32_t) strtoul(token, &err, 0); 10100acdb986SNicolas Chautru printf("%d\n", fft->fp16_exp_adjust); 10110acdb986SNicolas Chautru ret = ((err == NULL) || (*err != '\0')) ? -1 : 0; 10120ed76d66SHernan Vargas } else if (!strcmp(key_token, "freq_resample_mode")) { 10130ed76d66SHernan Vargas fft->freq_resample_mode = (uint32_t) strtoul(token, &err, 0); 10140ed76d66SHernan Vargas ret = ((err == NULL) || (*err != '\0')) ? -1 : 0; 10150ed76d66SHernan Vargas } else if (!strcmp(key_token, "out_depadded_size")) { 10160ed76d66SHernan Vargas fft->output_depadded_size = (uint32_t) strtoul(token, &err, 0); 10170ed76d66SHernan Vargas ret = ((err == NULL) || (*err != '\0')) ? -1 : 0; 10180ed76d66SHernan Vargas } else if (!strcmp(key_token, "cs_theta_0")) { 10190ed76d66SHernan Vargas tok = strtok(token, VALUE_DELIMITER); 10200ed76d66SHernan Vargas if (tok == NULL) 10210ed76d66SHernan Vargas return -1; 10220ed76d66SHernan Vargas for (i = 0; i < FFT_WIN_SIZE; i++) { 10230ed76d66SHernan Vargas fft->cs_theta_0[i] = (uint32_t) strtoul(tok, &err, 0); 10240ed76d66SHernan Vargas if (i < (FFT_WIN_SIZE - 1)) { 10250ed76d66SHernan Vargas tok = strtok(NULL, VALUE_DELIMITER); 10260ed76d66SHernan Vargas if (tok == NULL) 10270ed76d66SHernan Vargas return -1; 10280ed76d66SHernan Vargas } 10290ed76d66SHernan Vargas } 10300ed76d66SHernan Vargas ret = ((err == NULL) || (*err != '\0')) ? -1 : 0; 10310ed76d66SHernan Vargas } else if (!strcmp(key_token, "cs_theta_d")) { 10320ed76d66SHernan Vargas tok = strtok(token, VALUE_DELIMITER); 10330ed76d66SHernan Vargas if (tok == NULL) 10340ed76d66SHernan Vargas return -1; 10350ed76d66SHernan Vargas for (i = 0; i < FFT_WIN_SIZE; i++) { 10360ed76d66SHernan Vargas fft->cs_theta_d[i] = (uint32_t) strtoul(tok, &err, 0); 10370ed76d66SHernan Vargas if (i < (FFT_WIN_SIZE - 1)) { 10380ed76d66SHernan Vargas tok = strtok(NULL, VALUE_DELIMITER); 10390ed76d66SHernan Vargas if (tok == NULL) 10400ed76d66SHernan Vargas return -1; 10410ed76d66SHernan Vargas } 10420ed76d66SHernan Vargas } 10430ed76d66SHernan Vargas ret = ((err == NULL) || (*err != '\0')) ? -1 : 0; 10440ed76d66SHernan Vargas } else if (!strcmp(key_token, "time_offset")) { 10450ed76d66SHernan Vargas tok = strtok(token, VALUE_DELIMITER); 10460ed76d66SHernan Vargas if (tok == NULL) 10470ed76d66SHernan Vargas return -1; 10480ed76d66SHernan Vargas for (i = 0; i < FFT_WIN_SIZE; i++) { 10490ed76d66SHernan Vargas fft->time_offset[i] = (uint32_t) strtoul(tok, &err, 0); 10500ed76d66SHernan Vargas if (i < (FFT_WIN_SIZE - 1)) { 10510ed76d66SHernan Vargas tok = strtok(NULL, VALUE_DELIMITER); 10520ed76d66SHernan Vargas if (tok == NULL) 10530ed76d66SHernan Vargas return -1; 10540ed76d66SHernan Vargas } 10550ed76d66SHernan Vargas } 10560ed76d66SHernan Vargas ret = ((err == NULL) || (*err != '\0')) ? -1 : 0; 1057a2ea86cbSHernan Vargas } else if (!strcmp(key_token, "fft_window_width")) { 1058a2ea86cbSHernan Vargas tok = strtok(token, VALUE_DELIMITER); 1059a2ea86cbSHernan Vargas if (tok == NULL) 1060a2ea86cbSHernan Vargas return -1; 1061a2ea86cbSHernan Vargas for (i = 0; i < FFT_WIN_SIZE; i++) { 1062a2ea86cbSHernan Vargas if (i == 0) 1063a2ea86cbSHernan Vargas vector->fft_window_width_vec = (uint32_t) strtoul(tok, &err, 0); 1064a2ea86cbSHernan Vargas if (i < (FFT_WIN_SIZE - 1)) { 1065a2ea86cbSHernan Vargas tok = strtok(NULL, VALUE_DELIMITER); 1066a2ea86cbSHernan Vargas if (tok == NULL) 1067a2ea86cbSHernan Vargas return -1; 1068a2ea86cbSHernan Vargas } 1069a2ea86cbSHernan Vargas } 1070a2ea86cbSHernan Vargas ret = ((err == NULL) || (*err != '\0')) ? -1 : 0; 10710acdb986SNicolas Chautru } else if (!strcmp(key_token, "op_flags")) { 10720acdb986SNicolas Chautru vector->mask |= TEST_BBDEV_VF_OP_FLAGS; 10730acdb986SNicolas Chautru ret = parse_turbo_flags(token, &op_flags, vector->op_type); 10740acdb986SNicolas Chautru if (!ret) 10750acdb986SNicolas Chautru fft->op_flags = op_flags; 10760acdb986SNicolas Chautru } else if (!strcmp(key_token, "expected_status")) { 10770acdb986SNicolas Chautru vector->mask |= TEST_BBDEV_VF_EXPECTED_STATUS; 10780acdb986SNicolas Chautru ret = parse_expected_status(token, &status, vector->op_type); 10790acdb986SNicolas Chautru if (!ret) 10800acdb986SNicolas Chautru vector->expected_status = status; 10810acdb986SNicolas Chautru } else { 10820acdb986SNicolas Chautru printf("Not valid fft key: '%s'\n", key_token); 10830acdb986SNicolas Chautru return -1; 10840acdb986SNicolas Chautru } 10850acdb986SNicolas Chautru 10860acdb986SNicolas Chautru if (ret != 0) { 10870acdb986SNicolas Chautru printf("Failed with convert '%s\t%s'\n", key_token, token); 10880acdb986SNicolas Chautru return -1; 10890acdb986SNicolas Chautru } 10900acdb986SNicolas Chautru 10910acdb986SNicolas Chautru return 0; 10920acdb986SNicolas Chautru } 10930acdb986SNicolas Chautru 109495f192a4SHernan Vargas /* parses MLD parameters and assigns to global variable */ 109595f192a4SHernan Vargas static int 109695f192a4SHernan Vargas parse_mld_params(const char *key_token, char *token, 109795f192a4SHernan Vargas struct test_bbdev_vector *vector) 109895f192a4SHernan Vargas { 109995f192a4SHernan Vargas int ret = 0, status = 0; 110095f192a4SHernan Vargas uint32_t op_flags = 0; 110195f192a4SHernan Vargas char *err = NULL; 110295f192a4SHernan Vargas 110395f192a4SHernan Vargas struct rte_bbdev_op_mldts *mld = &vector->mldts; 110495f192a4SHernan Vargas 110595f192a4SHernan Vargas if (starts_with(key_token, "qhy_input")) { 110695f192a4SHernan Vargas ret = parse_data_entry(key_token, token, vector, 110795f192a4SHernan Vargas DATA_INPUT, "qhy_input"); 110895f192a4SHernan Vargas } else if (starts_with(key_token, "r_input")) { 110995f192a4SHernan Vargas ret = parse_data_entry(key_token, token, vector, 111095f192a4SHernan Vargas DATA_HARQ_INPUT, "r_input"); 111195f192a4SHernan Vargas } else if (starts_with(key_token, "output")) { 111295f192a4SHernan Vargas ret = parse_data_entry(key_token, token, vector, 111395f192a4SHernan Vargas DATA_HARD_OUTPUT, "output"); 111495f192a4SHernan Vargas } else if (!strcmp(key_token, "layers")) { 111595f192a4SHernan Vargas mld->num_layers = (uint32_t) strtoul(token, &err, 0); 111695f192a4SHernan Vargas ret = ((err == NULL) || (*err != '\0')) ? -1 : 0; 111795f192a4SHernan Vargas } else if (!strcmp(key_token, "layer1")) { 111895f192a4SHernan Vargas mld->q_m[0] = (uint32_t) strtoul(token, &err, 0); 111995f192a4SHernan Vargas ret = ((err == NULL) || (*err != '\0')) ? -1 : 0; 112095f192a4SHernan Vargas } else if (!strcmp(key_token, "layer2")) { 112195f192a4SHernan Vargas mld->q_m[1] = (uint32_t) strtoul(token, &err, 0); 112295f192a4SHernan Vargas ret = ((err == NULL) || (*err != '\0')) ? -1 : 0; 112395f192a4SHernan Vargas } else if (!strcmp(key_token, "layer3")) { 112495f192a4SHernan Vargas mld->q_m[2] = (uint32_t) strtoul(token, &err, 0); 112595f192a4SHernan Vargas ret = ((err == NULL) || (*err != '\0')) ? -1 : 0; 112695f192a4SHernan Vargas } else if (!strcmp(key_token, "layer4")) { 112795f192a4SHernan Vargas mld->q_m[3] = (uint32_t) strtoul(token, &err, 0); 112895f192a4SHernan Vargas ret = ((err == NULL) || (*err != '\0')) ? -1 : 0; 112995f192a4SHernan Vargas } else if (!strcmp(key_token, "crep")) { 113095f192a4SHernan Vargas mld->c_rep = (uint32_t) strtoul(token, &err, 0); 113195f192a4SHernan Vargas ret = ((err == NULL) || (*err != '\0')) ? -1 : 0; 113295f192a4SHernan Vargas } else if (!strcmp(key_token, "rrep")) { 113395f192a4SHernan Vargas mld->r_rep = (uint32_t) strtoul(token, &err, 0); 113495f192a4SHernan Vargas ret = ((err == NULL) || (*err != '\0')) ? -1 : 0; 113595f192a4SHernan Vargas } else if (!strcmp(key_token, "rbs")) { 113695f192a4SHernan Vargas mld->num_rbs = (uint32_t) strtoul(token, &err, 0); 113795f192a4SHernan Vargas ret = ((err == NULL) || (*err != '\0')) ? -1 : 0; 113895f192a4SHernan Vargas } else if (!strcmp(key_token, "op_flags")) { 113995f192a4SHernan Vargas vector->mask |= TEST_BBDEV_VF_OP_FLAGS; 114095f192a4SHernan Vargas ret = parse_turbo_flags(token, &op_flags, vector->op_type); 114195f192a4SHernan Vargas if (!ret) 114295f192a4SHernan Vargas mld->op_flags = op_flags; 114395f192a4SHernan Vargas } else if (!strcmp(key_token, "expected_status")) { 114495f192a4SHernan Vargas vector->mask |= TEST_BBDEV_VF_EXPECTED_STATUS; 114595f192a4SHernan Vargas ret = parse_expected_status(token, &status, vector->op_type); 114695f192a4SHernan Vargas if (!ret) 114795f192a4SHernan Vargas vector->expected_status = status; 114895f192a4SHernan Vargas } else { 114995f192a4SHernan Vargas printf("Not valid mld key: '%s'\n", key_token); 115095f192a4SHernan Vargas return -1; 115195f192a4SHernan Vargas } 115295f192a4SHernan Vargas 115395f192a4SHernan Vargas if (ret != 0) { 115495f192a4SHernan Vargas printf("Failed with convert '%s\t%s'\n", key_token, token); 115595f192a4SHernan Vargas return -1; 115695f192a4SHernan Vargas } 115795f192a4SHernan Vargas 115895f192a4SHernan Vargas return 0; 115995f192a4SHernan Vargas } 116095f192a4SHernan Vargas 1161f714a188SAmr Mokhtar /* checks the type of key and assigns data */ 1162f714a188SAmr Mokhtar static int 1163f714a188SAmr Mokhtar parse_entry(char *entry, struct test_bbdev_vector *vector) 1164f714a188SAmr Mokhtar { 1165f714a188SAmr Mokhtar int ret = 0; 1166f714a188SAmr Mokhtar char *token, *key_token; 1167f714a188SAmr Mokhtar enum rte_bbdev_op_type op_type = RTE_BBDEV_OP_NONE; 1168f714a188SAmr Mokhtar 1169f714a188SAmr Mokhtar if (entry == NULL) { 1170f714a188SAmr Mokhtar printf("Expected entry value\n"); 1171f714a188SAmr Mokhtar return -1; 1172f714a188SAmr Mokhtar } 1173f714a188SAmr Mokhtar 1174f714a188SAmr Mokhtar /* get key */ 1175f714a188SAmr Mokhtar token = strtok(entry, ENTRY_DELIMITER); 1176f714a188SAmr Mokhtar key_token = token; 1177f714a188SAmr Mokhtar /* get values for key */ 1178f714a188SAmr Mokhtar token = strtok(NULL, ENTRY_DELIMITER); 1179f714a188SAmr Mokhtar 1180f714a188SAmr Mokhtar if (key_token == NULL || token == NULL) { 1181f714a188SAmr Mokhtar printf("Expected 'key = values' but was '%.40s'..\n", entry); 1182f714a188SAmr Mokhtar return -1; 1183f714a188SAmr Mokhtar } 1184f714a188SAmr Mokhtar trim_space(key_token); 1185f714a188SAmr Mokhtar 1186f714a188SAmr Mokhtar /* first key_token has to specify type of operation */ 1187f714a188SAmr Mokhtar if (vector->op_type == RTE_BBDEV_OP_NONE) { 1188f714a188SAmr Mokhtar if (!strcmp(key_token, "op_type")) { 1189f714a188SAmr Mokhtar ret = op_turbo_type_strtol(token, &op_type); 1190f714a188SAmr Mokhtar if (!ret) 1191f714a188SAmr Mokhtar vector->op_type = op_type; 1192f714a188SAmr Mokhtar return (!ret) ? 0 : -1; 1193f714a188SAmr Mokhtar } 1194f714a188SAmr Mokhtar printf("First key_token (%s) does not specify op_type\n", 1195f714a188SAmr Mokhtar key_token); 1196f714a188SAmr Mokhtar return -1; 1197f714a188SAmr Mokhtar } 1198f714a188SAmr Mokhtar 1199f714a188SAmr Mokhtar /* compare keys */ 1200f714a188SAmr Mokhtar if (vector->op_type == RTE_BBDEV_OP_TURBO_DEC) { 1201f714a188SAmr Mokhtar if (parse_decoder_params(key_token, token, vector) == -1) 1202f714a188SAmr Mokhtar return -1; 1203f714a188SAmr Mokhtar } else if (vector->op_type == RTE_BBDEV_OP_TURBO_ENC) { 1204f714a188SAmr Mokhtar if (parse_encoder_params(key_token, token, vector) == -1) 1205f714a188SAmr Mokhtar return -1; 1206d819c083SNicolas Chautru } else if (vector->op_type == RTE_BBDEV_OP_LDPC_ENC) { 1207d819c083SNicolas Chautru if (parse_ldpc_encoder_params(key_token, token, vector) == -1) 1208d819c083SNicolas Chautru return -1; 1209d819c083SNicolas Chautru } else if (vector->op_type == RTE_BBDEV_OP_LDPC_DEC) { 1210d819c083SNicolas Chautru if (parse_ldpc_decoder_params(key_token, token, vector) == -1) 1211d819c083SNicolas Chautru return -1; 12120acdb986SNicolas Chautru } else if (vector->op_type == RTE_BBDEV_OP_FFT) { 12130acdb986SNicolas Chautru if (parse_fft_params(key_token, token, vector) == -1) 12140acdb986SNicolas Chautru return -1; 121595f192a4SHernan Vargas } else if (vector->op_type == RTE_BBDEV_OP_MLDTS) { 121695f192a4SHernan Vargas if (parse_mld_params(key_token, token, vector) == -1) 121795f192a4SHernan Vargas return -1; 1218f714a188SAmr Mokhtar } 1219f714a188SAmr Mokhtar 1220f714a188SAmr Mokhtar return 0; 1221f714a188SAmr Mokhtar } 1222f714a188SAmr Mokhtar 1223f714a188SAmr Mokhtar static int 1224f714a188SAmr Mokhtar check_decoder_segments(struct test_bbdev_vector *vector) 1225f714a188SAmr Mokhtar { 1226f714a188SAmr Mokhtar unsigned char i; 1227f714a188SAmr Mokhtar struct rte_bbdev_op_turbo_dec *turbo_dec = &vector->turbo_dec; 1228f714a188SAmr Mokhtar 1229f714a188SAmr Mokhtar if (vector->entries[DATA_INPUT].nb_segments == 0) 1230f714a188SAmr Mokhtar return -1; 1231f714a188SAmr Mokhtar 1232f714a188SAmr Mokhtar for (i = 0; i < vector->entries[DATA_INPUT].nb_segments; i++) 1233f714a188SAmr Mokhtar if (vector->entries[DATA_INPUT].segments[i].addr == NULL) 1234f714a188SAmr Mokhtar return -1; 1235f714a188SAmr Mokhtar 1236f714a188SAmr Mokhtar if (vector->entries[DATA_HARD_OUTPUT].nb_segments == 0) 1237f714a188SAmr Mokhtar return -1; 1238f714a188SAmr Mokhtar 1239f714a188SAmr Mokhtar for (i = 0; i < vector->entries[DATA_HARD_OUTPUT].nb_segments; 1240f714a188SAmr Mokhtar i++) 1241f714a188SAmr Mokhtar if (vector->entries[DATA_HARD_OUTPUT].segments[i].addr == NULL) 1242f714a188SAmr Mokhtar return -1; 1243f714a188SAmr Mokhtar 1244f714a188SAmr Mokhtar if ((turbo_dec->op_flags & RTE_BBDEV_TURBO_SOFT_OUTPUT) && 1245f714a188SAmr Mokhtar (vector->entries[DATA_SOFT_OUTPUT].nb_segments == 0)) 1246f714a188SAmr Mokhtar return -1; 1247f714a188SAmr Mokhtar 1248f714a188SAmr Mokhtar for (i = 0; i < vector->entries[DATA_SOFT_OUTPUT].nb_segments; 1249f714a188SAmr Mokhtar i++) 1250f714a188SAmr Mokhtar if (vector->entries[DATA_SOFT_OUTPUT].segments[i].addr == NULL) 1251f714a188SAmr Mokhtar return -1; 1252f714a188SAmr Mokhtar 1253f714a188SAmr Mokhtar return 0; 1254f714a188SAmr Mokhtar } 1255f714a188SAmr Mokhtar 1256f714a188SAmr Mokhtar static int 1257d819c083SNicolas Chautru check_ldpc_decoder_segments(struct test_bbdev_vector *vector) 1258d819c083SNicolas Chautru { 1259d819c083SNicolas Chautru unsigned char i; 1260d819c083SNicolas Chautru struct rte_bbdev_op_ldpc_dec *ldpc_dec = &vector->ldpc_dec; 1261d819c083SNicolas Chautru 1262d819c083SNicolas Chautru for (i = 0; i < vector->entries[DATA_INPUT].nb_segments; i++) 1263d819c083SNicolas Chautru if (vector->entries[DATA_INPUT].segments[i].addr == NULL) 1264d819c083SNicolas Chautru return -1; 1265d819c083SNicolas Chautru 1266d819c083SNicolas Chautru for (i = 0; i < vector->entries[DATA_HARD_OUTPUT].nb_segments; i++) 1267d819c083SNicolas Chautru if (vector->entries[DATA_HARD_OUTPUT].segments[i].addr == NULL) 1268d819c083SNicolas Chautru return -1; 1269d819c083SNicolas Chautru 1270d819c083SNicolas Chautru if ((ldpc_dec->op_flags & RTE_BBDEV_LDPC_SOFT_OUT_ENABLE) && 1271d819c083SNicolas Chautru (vector->entries[DATA_SOFT_OUTPUT].nb_segments == 0)) 1272d819c083SNicolas Chautru return -1; 1273d819c083SNicolas Chautru 1274d819c083SNicolas Chautru for (i = 0; i < vector->entries[DATA_SOFT_OUTPUT].nb_segments; i++) 1275d819c083SNicolas Chautru if (vector->entries[DATA_SOFT_OUTPUT].segments[i].addr == NULL) 1276d819c083SNicolas Chautru return -1; 1277d819c083SNicolas Chautru 1278d819c083SNicolas Chautru if ((ldpc_dec->op_flags & RTE_BBDEV_LDPC_HQ_COMBINE_OUT_ENABLE) && 1279d819c083SNicolas Chautru (vector->entries[DATA_HARQ_OUTPUT].nb_segments == 0)) 1280d819c083SNicolas Chautru return -1; 1281d819c083SNicolas Chautru 1282d819c083SNicolas Chautru for (i = 0; i < vector->entries[DATA_HARQ_OUTPUT].nb_segments; i++) 1283d819c083SNicolas Chautru if (vector->entries[DATA_HARQ_OUTPUT].segments[i].addr == NULL) 1284d819c083SNicolas Chautru return -1; 1285d819c083SNicolas Chautru 1286d819c083SNicolas Chautru return 0; 1287d819c083SNicolas Chautru } 1288d819c083SNicolas Chautru 1289d819c083SNicolas Chautru static int 12900acdb986SNicolas Chautru check_fft_segments(struct test_bbdev_vector *vector) 12910acdb986SNicolas Chautru { 12920acdb986SNicolas Chautru unsigned char i; 12930acdb986SNicolas Chautru 12940acdb986SNicolas Chautru for (i = 0; i < vector->entries[DATA_INPUT].nb_segments; i++) 12950acdb986SNicolas Chautru if (vector->entries[DATA_INPUT].segments[i].addr == NULL) 12960acdb986SNicolas Chautru return -1; 12970acdb986SNicolas Chautru 12980acdb986SNicolas Chautru for (i = 0; i < vector->entries[DATA_HARD_OUTPUT].nb_segments; i++) 12990acdb986SNicolas Chautru if (vector->entries[DATA_HARD_OUTPUT].segments[i].addr == NULL) 13000acdb986SNicolas Chautru return -1; 13010acdb986SNicolas Chautru return 0; 13020acdb986SNicolas Chautru } 13030acdb986SNicolas Chautru 13040acdb986SNicolas Chautru static int 130595f192a4SHernan Vargas check_mld_segments(struct test_bbdev_vector *vector) 130695f192a4SHernan Vargas { 130795f192a4SHernan Vargas unsigned char i; 130895f192a4SHernan Vargas 130995f192a4SHernan Vargas for (i = 0; i < vector->entries[DATA_INPUT].nb_segments; i++) 131095f192a4SHernan Vargas if (vector->entries[DATA_INPUT].segments[i].addr == NULL) 131195f192a4SHernan Vargas return -1; 131295f192a4SHernan Vargas 131395f192a4SHernan Vargas for (i = 0; i < vector->entries[DATA_HARQ_INPUT].nb_segments; i++) 131495f192a4SHernan Vargas if (vector->entries[DATA_HARQ_INPUT].segments[i].addr == NULL) 131595f192a4SHernan Vargas return -1; 131695f192a4SHernan Vargas 131795f192a4SHernan Vargas for (i = 0; i < vector->entries[DATA_HARD_OUTPUT].nb_segments; i++) 131895f192a4SHernan Vargas if (vector->entries[DATA_HARD_OUTPUT].segments[i].addr == NULL) 131995f192a4SHernan Vargas return -1; 132095f192a4SHernan Vargas return 0; 132195f192a4SHernan Vargas } 132295f192a4SHernan Vargas 132395f192a4SHernan Vargas static int 1324f714a188SAmr Mokhtar check_decoder_llr_spec(struct test_bbdev_vector *vector) 1325f714a188SAmr Mokhtar { 1326f714a188SAmr Mokhtar struct rte_bbdev_op_turbo_dec *turbo_dec = &vector->turbo_dec; 1327f714a188SAmr Mokhtar 1328f714a188SAmr Mokhtar /* Check input LLR sign formalism specification */ 1329f714a188SAmr Mokhtar if ((turbo_dec->op_flags & RTE_BBDEV_TURBO_POS_LLR_1_BIT_IN) && 1330f714a188SAmr Mokhtar (turbo_dec->op_flags & 1331f714a188SAmr Mokhtar RTE_BBDEV_TURBO_NEG_LLR_1_BIT_IN)) { 1332f714a188SAmr Mokhtar printf( 1333f714a188SAmr Mokhtar "Both positive and negative LLR input flags were set!\n"); 1334f714a188SAmr Mokhtar return -1; 1335f714a188SAmr Mokhtar } 1336f714a188SAmr Mokhtar if (!(turbo_dec->op_flags & RTE_BBDEV_TURBO_POS_LLR_1_BIT_IN) && 1337f714a188SAmr Mokhtar !(turbo_dec->op_flags & 1338f714a188SAmr Mokhtar RTE_BBDEV_TURBO_NEG_LLR_1_BIT_IN)) { 1339f714a188SAmr Mokhtar printf( 1340d819c083SNicolas Chautru "INFO: input LLR sign formalism was not specified and will be set to negative LLR for '1' bit\n"); 1341f714a188SAmr Mokhtar turbo_dec->op_flags |= RTE_BBDEV_TURBO_NEG_LLR_1_BIT_IN; 1342f714a188SAmr Mokhtar } 1343f714a188SAmr Mokhtar 1344f714a188SAmr Mokhtar if (!(turbo_dec->op_flags & RTE_BBDEV_TURBO_SOFT_OUTPUT)) 1345f714a188SAmr Mokhtar return 0; 1346f714a188SAmr Mokhtar 1347f714a188SAmr Mokhtar /* Check output LLR sign formalism specification */ 1348f714a188SAmr Mokhtar if ((turbo_dec->op_flags & RTE_BBDEV_TURBO_POS_LLR_1_BIT_SOFT_OUT) && 1349f714a188SAmr Mokhtar (turbo_dec->op_flags & 1350f714a188SAmr Mokhtar RTE_BBDEV_TURBO_NEG_LLR_1_BIT_SOFT_OUT)) { 1351f714a188SAmr Mokhtar printf( 1352f714a188SAmr Mokhtar "Both positive and negative LLR output flags were set!\n"); 1353f714a188SAmr Mokhtar return -1; 1354f714a188SAmr Mokhtar } 1355f714a188SAmr Mokhtar if (!(turbo_dec->op_flags & RTE_BBDEV_TURBO_POS_LLR_1_BIT_SOFT_OUT) && 1356f714a188SAmr Mokhtar !(turbo_dec->op_flags & 1357f714a188SAmr Mokhtar RTE_BBDEV_TURBO_NEG_LLR_1_BIT_SOFT_OUT)) { 1358f714a188SAmr Mokhtar printf( 1359d819c083SNicolas Chautru "INFO: soft output LLR sign formalism was not specified and will be set to negative LLR for '1' bit\n"); 1360f714a188SAmr Mokhtar turbo_dec->op_flags |= 1361f714a188SAmr Mokhtar RTE_BBDEV_TURBO_NEG_LLR_1_BIT_SOFT_OUT; 1362f714a188SAmr Mokhtar } 1363f714a188SAmr Mokhtar 1364f714a188SAmr Mokhtar return 0; 1365f714a188SAmr Mokhtar } 1366f714a188SAmr Mokhtar 1367d819c083SNicolas Chautru static int 1368d819c083SNicolas Chautru check_decoder_op_flags(struct test_bbdev_vector *vector) 1369d819c083SNicolas Chautru { 1370d819c083SNicolas Chautru struct rte_bbdev_op_turbo_dec *turbo_dec = &vector->turbo_dec; 1371d819c083SNicolas Chautru 1372d819c083SNicolas Chautru if ((turbo_dec->op_flags & RTE_BBDEV_TURBO_DEC_TB_CRC_24B_KEEP) && 1373d819c083SNicolas Chautru !(turbo_dec->op_flags & RTE_BBDEV_TURBO_CRC_TYPE_24B)) { 1374d819c083SNicolas Chautru printf( 1375d819c083SNicolas Chautru "WARNING: RTE_BBDEV_TURBO_DEC_TB_CRC_24B_KEEP flag is missing RTE_BBDEV_TURBO_CRC_TYPE_24B\n"); 1376d819c083SNicolas Chautru return -1; 1377d819c083SNicolas Chautru } 1378d819c083SNicolas Chautru 1379d819c083SNicolas Chautru return 0; 1380d819c083SNicolas Chautru } 1381d819c083SNicolas Chautru 1382f714a188SAmr Mokhtar /* checks decoder parameters */ 1383f714a188SAmr Mokhtar static int 1384f714a188SAmr Mokhtar check_decoder(struct test_bbdev_vector *vector) 1385f714a188SAmr Mokhtar { 1386f714a188SAmr Mokhtar struct rte_bbdev_op_turbo_dec *turbo_dec = &vector->turbo_dec; 1387f714a188SAmr Mokhtar const int mask = vector->mask; 1388f714a188SAmr Mokhtar 1389f714a188SAmr Mokhtar if (check_decoder_segments(vector) < 0) 1390f714a188SAmr Mokhtar return -1; 1391f714a188SAmr Mokhtar 1392f714a188SAmr Mokhtar if (check_decoder_llr_spec(vector) < 0) 1393f714a188SAmr Mokhtar return -1; 1394f714a188SAmr Mokhtar 1395d819c083SNicolas Chautru if (check_decoder_op_flags(vector) < 0) 1396d819c083SNicolas Chautru return -1; 1397d819c083SNicolas Chautru 1398f714a188SAmr Mokhtar /* Check which params were set */ 1399f714a188SAmr Mokhtar if (!(mask & TEST_BBDEV_VF_CODE_BLOCK_MODE)) { 1400f714a188SAmr Mokhtar printf( 1401f714a188SAmr Mokhtar "WARNING: code_block_mode was not specified in vector file and will be set to 1 (0 - TB Mode, 1 - CB mode)\n"); 140248fc315fSNicolas Chautru turbo_dec->code_block_mode = RTE_BBDEV_CODE_BLOCK; 1403f714a188SAmr Mokhtar } 140448fc315fSNicolas Chautru if (turbo_dec->code_block_mode == RTE_BBDEV_TRANSPORT_BLOCK) { 1405f714a188SAmr Mokhtar if (!(mask & TEST_BBDEV_VF_EA)) 1406f714a188SAmr Mokhtar printf( 1407f714a188SAmr Mokhtar "WARNING: ea was not specified in vector file and will be set to 0\n"); 1408f714a188SAmr Mokhtar if (!(mask & TEST_BBDEV_VF_EB)) 1409f714a188SAmr Mokhtar printf( 1410f714a188SAmr Mokhtar "WARNING: eb was not specified in vector file and will be set to 0\n"); 1411f714a188SAmr Mokhtar if (!(mask & TEST_BBDEV_VF_K_NEG)) 1412f714a188SAmr Mokhtar printf( 1413f714a188SAmr Mokhtar "WARNING: k_neg was not specified in vector file and will be set to 0\n"); 1414f714a188SAmr Mokhtar if (!(mask & TEST_BBDEV_VF_K_POS)) 1415f714a188SAmr Mokhtar printf( 1416f714a188SAmr Mokhtar "WARNING: k_pos was not specified in vector file and will be set to 0\n"); 1417f714a188SAmr Mokhtar if (!(mask & TEST_BBDEV_VF_C_NEG)) 1418f714a188SAmr Mokhtar printf( 1419f714a188SAmr Mokhtar "WARNING: c_neg was not specified in vector file and will be set to 0\n"); 1420f714a188SAmr Mokhtar if (!(mask & TEST_BBDEV_VF_C)) { 1421f714a188SAmr Mokhtar printf( 1422f714a188SAmr Mokhtar "WARNING: c was not specified in vector file and will be set to 1\n"); 1423f714a188SAmr Mokhtar turbo_dec->tb_params.c = 1; 1424f714a188SAmr Mokhtar } 1425f714a188SAmr Mokhtar if (!(mask & TEST_BBDEV_VF_CAB)) 1426f714a188SAmr Mokhtar printf( 1427f714a188SAmr Mokhtar "WARNING: cab was not specified in vector file and will be set to 0\n"); 14280b98d574SKamil Chalupnik if (!(mask & TEST_BBDEV_VF_R)) 14290b98d574SKamil Chalupnik printf( 14300b98d574SKamil Chalupnik "WARNING: r was not specified in vector file and will be set to 0\n"); 1431f714a188SAmr Mokhtar } else { 1432f714a188SAmr Mokhtar if (!(mask & TEST_BBDEV_VF_E)) 1433f714a188SAmr Mokhtar printf( 1434f714a188SAmr Mokhtar "WARNING: e was not specified in vector file and will be set to 0\n"); 1435f714a188SAmr Mokhtar if (!(mask & TEST_BBDEV_VF_K)) 1436f714a188SAmr Mokhtar printf( 1437f714a188SAmr Mokhtar "WARNING: k was not specified in vector file and will be set to 0\n"); 1438f714a188SAmr Mokhtar } 1439f714a188SAmr Mokhtar if (!(mask & TEST_BBDEV_VF_RV_INDEX)) 1440f714a188SAmr Mokhtar printf( 1441d819c083SNicolas Chautru "INFO: rv_index was not specified in vector file and will be set to 0\n"); 1442f714a188SAmr Mokhtar if (!(mask & TEST_BBDEV_VF_ITER_MIN)) 1443f714a188SAmr Mokhtar printf( 1444f714a188SAmr Mokhtar "WARNING: iter_min was not specified in vector file and will be set to 0\n"); 1445f714a188SAmr Mokhtar if (!(mask & TEST_BBDEV_VF_EXPECTED_ITER_COUNT)) 1446f714a188SAmr Mokhtar printf( 1447f714a188SAmr Mokhtar "WARNING: expected_iter_count was not specified in vector file and iter_count will not be validated\n"); 1448f714a188SAmr Mokhtar if (!(mask & TEST_BBDEV_VF_EXT_SCALE)) 1449f714a188SAmr Mokhtar printf( 1450f714a188SAmr Mokhtar "WARNING: ext_scale was not specified in vector file and will be set to 0\n"); 1451f714a188SAmr Mokhtar if (!(mask & TEST_BBDEV_VF_OP_FLAGS)) { 1452f714a188SAmr Mokhtar printf( 1453f714a188SAmr Mokhtar "WARNING: op_flags was not specified in vector file and capabilities will not be validated\n"); 1454f714a188SAmr Mokhtar turbo_dec->num_maps = 0; 1455f714a188SAmr Mokhtar } else if (!(turbo_dec->op_flags & RTE_BBDEV_TURBO_MAP_DEC) && 1456f714a188SAmr Mokhtar mask & TEST_BBDEV_VF_NUM_MAPS) { 1457f714a188SAmr Mokhtar printf( 1458d819c083SNicolas Chautru "INFO: RTE_BBDEV_TURBO_MAP_DEC was not set in vector file and num_maps will be set to 0\n"); 1459f714a188SAmr Mokhtar turbo_dec->num_maps = 0; 1460f714a188SAmr Mokhtar } 1461f714a188SAmr Mokhtar if (!(mask & TEST_BBDEV_VF_EXPECTED_STATUS)) 1462f714a188SAmr Mokhtar printf( 1463f714a188SAmr Mokhtar "WARNING: expected_status was not specified in vector file and will be set to 0\n"); 1464f714a188SAmr Mokhtar return 0; 1465f714a188SAmr Mokhtar } 1466f714a188SAmr Mokhtar 1467d819c083SNicolas Chautru /* checks LDPC decoder parameters */ 1468d819c083SNicolas Chautru static int 1469d819c083SNicolas Chautru check_ldpc_decoder(struct test_bbdev_vector *vector) 1470d819c083SNicolas Chautru { 1471d819c083SNicolas Chautru struct rte_bbdev_op_ldpc_dec *ldpc_dec = &vector->ldpc_dec; 1472d819c083SNicolas Chautru const int mask = vector->mask; 1473d819c083SNicolas Chautru 1474d819c083SNicolas Chautru if (check_ldpc_decoder_segments(vector) < 0) 1475d819c083SNicolas Chautru return -1; 1476d819c083SNicolas Chautru 1477d819c083SNicolas Chautru /* 1478d819c083SNicolas Chautru * if (check_ldpc_decoder_llr_spec(vector) < 0) 1479d819c083SNicolas Chautru * return -1; 1480d819c083SNicolas Chautru * 1481d819c083SNicolas Chautru * if (check_ldpc_decoder_op_flags(vector) < 0) 1482d819c083SNicolas Chautru * return -1; 1483d819c083SNicolas Chautru */ 1484d819c083SNicolas Chautru 1485d819c083SNicolas Chautru /* Check which params were set */ 1486d819c083SNicolas Chautru if (!(mask & TEST_BBDEV_VF_CODE_BLOCK_MODE)) { 1487d819c083SNicolas Chautru printf( 1488d819c083SNicolas Chautru "WARNING: code_block_mode was not specified in vector file and will be set to 1 (0 - TB Mode, 1 - CB mode)\n"); 148948fc315fSNicolas Chautru ldpc_dec->code_block_mode = RTE_BBDEV_CODE_BLOCK; 1490d819c083SNicolas Chautru } 149148fc315fSNicolas Chautru if (ldpc_dec->code_block_mode == RTE_BBDEV_TRANSPORT_BLOCK) { 1492d819c083SNicolas Chautru if (!(mask & TEST_BBDEV_VF_EA)) 1493d819c083SNicolas Chautru printf( 1494d819c083SNicolas Chautru "WARNING: ea was not specified in vector file and will be set to 0\n"); 1495d819c083SNicolas Chautru if (!(mask & TEST_BBDEV_VF_EB)) 1496d819c083SNicolas Chautru printf( 1497d819c083SNicolas Chautru "WARNING: eb was not specified in vector file and will be set to 0\n"); 1498d819c083SNicolas Chautru if (!(mask & TEST_BBDEV_VF_C)) { 1499d819c083SNicolas Chautru printf( 1500d819c083SNicolas Chautru "WARNING: c was not specified in vector file and will be set to 1\n"); 1501d819c083SNicolas Chautru ldpc_dec->tb_params.c = 1; 1502d819c083SNicolas Chautru } 1503d819c083SNicolas Chautru if (!(mask & TEST_BBDEV_VF_CAB)) 1504d819c083SNicolas Chautru printf( 1505d819c083SNicolas Chautru "WARNING: cab was not specified in vector file and will be set to 0\n"); 1506d819c083SNicolas Chautru if (!(mask & TEST_BBDEV_VF_R)) 1507d819c083SNicolas Chautru printf( 1508d819c083SNicolas Chautru "WARNING: r was not specified in vector file and will be set to 0\n"); 1509d819c083SNicolas Chautru } else { 1510d819c083SNicolas Chautru if (!(mask & TEST_BBDEV_VF_E)) 1511d819c083SNicolas Chautru printf( 1512d819c083SNicolas Chautru "WARNING: e was not specified in vector file and will be set to 0\n"); 1513d819c083SNicolas Chautru } 1514d819c083SNicolas Chautru if (!(mask & TEST_BBDEV_VF_RV_INDEX)) 1515d819c083SNicolas Chautru printf( 1516d819c083SNicolas Chautru "INFO: rv_index was not specified in vector file and will be set to 0\n"); 1517d819c083SNicolas Chautru if (!(mask & TEST_BBDEV_VF_EXPECTED_ITER_COUNT)) 1518d819c083SNicolas Chautru printf( 1519d819c083SNicolas Chautru "WARNING: expected_iter_count was not specified in vector file and iter_count will not be validated\n"); 1520d819c083SNicolas Chautru if (!(mask & TEST_BBDEV_VF_OP_FLAGS)) { 1521d819c083SNicolas Chautru printf( 1522d819c083SNicolas Chautru "WARNING: op_flags was not specified in vector file and capabilities will not be validated\n"); 1523d819c083SNicolas Chautru } 1524d819c083SNicolas Chautru if (!(mask & TEST_BBDEV_VF_EXPECTED_STATUS)) 1525d819c083SNicolas Chautru printf( 1526d819c083SNicolas Chautru "WARNING: expected_status was not specified in vector file and will be set to 0\n"); 1527d819c083SNicolas Chautru return 0; 1528d819c083SNicolas Chautru } 1529d819c083SNicolas Chautru 15300acdb986SNicolas Chautru /* Checks fft parameters. */ 15310acdb986SNicolas Chautru static int 15320acdb986SNicolas Chautru check_fft(struct test_bbdev_vector *vector) 15330acdb986SNicolas Chautru { 15340acdb986SNicolas Chautru const int mask = vector->mask; 15350acdb986SNicolas Chautru 15360acdb986SNicolas Chautru if (check_fft_segments(vector) < 0) 15370acdb986SNicolas Chautru return -1; 15380acdb986SNicolas Chautru 15390acdb986SNicolas Chautru /* Check which params were set. */ 15400acdb986SNicolas Chautru if (!(mask & TEST_BBDEV_VF_OP_FLAGS)) { 15410acdb986SNicolas Chautru printf( 15420acdb986SNicolas Chautru "WARNING: op_flags was not specified in vector file and capabilities will not be validated\n"); 15430acdb986SNicolas Chautru } 15440acdb986SNicolas Chautru if (!(mask & TEST_BBDEV_VF_EXPECTED_STATUS)) 15450acdb986SNicolas Chautru printf( 15460acdb986SNicolas Chautru "WARNING: expected_status was not specified in vector file and will be set to 0\n"); 15470acdb986SNicolas Chautru return 0; 15480acdb986SNicolas Chautru } 15490acdb986SNicolas Chautru 155095f192a4SHernan Vargas /* checks mld parameters */ 155195f192a4SHernan Vargas static int 155295f192a4SHernan Vargas check_mld(struct test_bbdev_vector *vector) 155395f192a4SHernan Vargas { 155495f192a4SHernan Vargas const int mask = vector->mask; 155595f192a4SHernan Vargas 155695f192a4SHernan Vargas if (check_mld_segments(vector) < 0) 155795f192a4SHernan Vargas return -1; 155895f192a4SHernan Vargas 155995f192a4SHernan Vargas /* Check which params were set */ 156095f192a4SHernan Vargas if (!(mask & TEST_BBDEV_VF_OP_FLAGS)) { 156195f192a4SHernan Vargas printf( 156295f192a4SHernan Vargas "WARNING: op_flags was not specified in vector file and capabilities will not be validated\n"); 156395f192a4SHernan Vargas } 156495f192a4SHernan Vargas if (!(mask & TEST_BBDEV_VF_EXPECTED_STATUS)) 156595f192a4SHernan Vargas printf( 156695f192a4SHernan Vargas "WARNING: expected_status was not specified in vector file and will be set to 0\n"); 156795f192a4SHernan Vargas return 0; 156895f192a4SHernan Vargas } 156995f192a4SHernan Vargas 1570f714a188SAmr Mokhtar /* checks encoder parameters */ 1571f714a188SAmr Mokhtar static int 1572f714a188SAmr Mokhtar check_encoder(struct test_bbdev_vector *vector) 1573f714a188SAmr Mokhtar { 1574f714a188SAmr Mokhtar unsigned char i; 1575f714a188SAmr Mokhtar const int mask = vector->mask; 1576f714a188SAmr Mokhtar 1577f714a188SAmr Mokhtar if (vector->entries[DATA_INPUT].nb_segments == 0) 1578f714a188SAmr Mokhtar return -1; 1579f714a188SAmr Mokhtar 1580f714a188SAmr Mokhtar for (i = 0; i < vector->entries[DATA_INPUT].nb_segments; i++) 1581f714a188SAmr Mokhtar if (vector->entries[DATA_INPUT].segments[i].addr == NULL) 1582f714a188SAmr Mokhtar return -1; 1583f714a188SAmr Mokhtar 1584f714a188SAmr Mokhtar if (vector->entries[DATA_HARD_OUTPUT].nb_segments == 0) 1585f714a188SAmr Mokhtar return -1; 1586f714a188SAmr Mokhtar 1587f714a188SAmr Mokhtar for (i = 0; i < vector->entries[DATA_HARD_OUTPUT].nb_segments; i++) 1588f714a188SAmr Mokhtar if (vector->entries[DATA_HARD_OUTPUT].segments[i].addr == NULL) 1589f714a188SAmr Mokhtar return -1; 1590f714a188SAmr Mokhtar 1591f714a188SAmr Mokhtar if (!(mask & TEST_BBDEV_VF_CODE_BLOCK_MODE)) { 1592f714a188SAmr Mokhtar printf( 1593f714a188SAmr Mokhtar "WARNING: code_block_mode was not specified in vector file and will be set to 1\n"); 159448fc315fSNicolas Chautru vector->turbo_enc.code_block_mode = RTE_BBDEV_CODE_BLOCK; 1595f714a188SAmr Mokhtar } 159648fc315fSNicolas Chautru if (vector->turbo_enc.code_block_mode == RTE_BBDEV_TRANSPORT_BLOCK) { 1597f714a188SAmr Mokhtar if (!(mask & TEST_BBDEV_VF_EA) && (vector->turbo_enc.op_flags & 1598f714a188SAmr Mokhtar RTE_BBDEV_TURBO_RATE_MATCH)) 1599f714a188SAmr Mokhtar printf( 1600f714a188SAmr Mokhtar "WARNING: ea was not specified in vector file and will be set to 0\n"); 1601f714a188SAmr Mokhtar if (!(mask & TEST_BBDEV_VF_EB) && (vector->turbo_enc.op_flags & 1602f714a188SAmr Mokhtar RTE_BBDEV_TURBO_RATE_MATCH)) 1603f714a188SAmr Mokhtar printf( 1604f714a188SAmr Mokhtar "WARNING: eb was not specified in vector file and will be set to 0\n"); 1605f714a188SAmr Mokhtar if (!(mask & TEST_BBDEV_VF_K_NEG)) 1606f714a188SAmr Mokhtar printf( 1607f714a188SAmr Mokhtar "WARNING: k_neg was not specified in vector file and will be set to 0\n"); 1608f714a188SAmr Mokhtar if (!(mask & TEST_BBDEV_VF_K_POS)) 1609f714a188SAmr Mokhtar printf( 1610f714a188SAmr Mokhtar "WARNING: k_pos was not specified in vector file and will be set to 0\n"); 1611f714a188SAmr Mokhtar if (!(mask & TEST_BBDEV_VF_C_NEG)) 1612f714a188SAmr Mokhtar printf( 1613f714a188SAmr Mokhtar "WARNING: c_neg was not specified in vector file and will be set to 0\n"); 1614f714a188SAmr Mokhtar if (!(mask & TEST_BBDEV_VF_C)) { 1615f714a188SAmr Mokhtar printf( 1616f714a188SAmr Mokhtar "WARNING: c was not specified in vector file and will be set to 1\n"); 1617f714a188SAmr Mokhtar vector->turbo_enc.tb_params.c = 1; 1618f714a188SAmr Mokhtar } 1619f714a188SAmr Mokhtar if (!(mask & TEST_BBDEV_VF_CAB) && (vector->turbo_enc.op_flags & 1620f714a188SAmr Mokhtar RTE_BBDEV_TURBO_RATE_MATCH)) 1621f714a188SAmr Mokhtar printf( 1622f714a188SAmr Mokhtar "WARNING: cab was not specified in vector file and will be set to 0\n"); 1623f714a188SAmr Mokhtar if (!(mask & TEST_BBDEV_VF_NCB_NEG)) 1624f714a188SAmr Mokhtar printf( 1625f714a188SAmr Mokhtar "WARNING: ncb_neg was not specified in vector file and will be set to 0\n"); 1626f714a188SAmr Mokhtar if (!(mask & TEST_BBDEV_VF_NCB_POS)) 1627f714a188SAmr Mokhtar printf( 1628f714a188SAmr Mokhtar "WARNING: ncb_pos was not specified in vector file and will be set to 0\n"); 1629f714a188SAmr Mokhtar if (!(mask & TEST_BBDEV_VF_R)) 1630f714a188SAmr Mokhtar printf( 1631f714a188SAmr Mokhtar "WARNING: r was not specified in vector file and will be set to 0\n"); 1632f714a188SAmr Mokhtar } else { 1633f714a188SAmr Mokhtar if (!(mask & TEST_BBDEV_VF_E) && (vector->turbo_enc.op_flags & 1634f714a188SAmr Mokhtar RTE_BBDEV_TURBO_RATE_MATCH)) 1635f714a188SAmr Mokhtar printf( 1636f714a188SAmr Mokhtar "WARNING: e was not specified in vector file and will be set to 0\n"); 1637f714a188SAmr Mokhtar if (!(mask & TEST_BBDEV_VF_K)) 1638f714a188SAmr Mokhtar printf( 1639f714a188SAmr Mokhtar "WARNING: k was not specified in vector file and will be set to 0\n"); 1640f714a188SAmr Mokhtar if (!(mask & TEST_BBDEV_VF_NCB)) 1641f714a188SAmr Mokhtar printf( 1642f714a188SAmr Mokhtar "WARNING: ncb was not specified in vector file and will be set to 0\n"); 1643f714a188SAmr Mokhtar } 1644f714a188SAmr Mokhtar if (!(mask & TEST_BBDEV_VF_RV_INDEX)) 1645f714a188SAmr Mokhtar printf( 1646d819c083SNicolas Chautru "INFO: rv_index was not specified in vector file and will be set to 0\n"); 1647f714a188SAmr Mokhtar if (!(mask & TEST_BBDEV_VF_OP_FLAGS)) 1648f714a188SAmr Mokhtar printf( 1649d819c083SNicolas Chautru "INFO: op_flags was not specified in vector file and capabilities will not be validated\n"); 1650d819c083SNicolas Chautru if (!(mask & TEST_BBDEV_VF_EXPECTED_STATUS)) 1651d819c083SNicolas Chautru printf( 1652d819c083SNicolas Chautru "WARNING: expected_status was not specified in vector file and will be set to 0\n"); 1653d819c083SNicolas Chautru 1654d819c083SNicolas Chautru return 0; 1655d819c083SNicolas Chautru } 1656d819c083SNicolas Chautru 1657d819c083SNicolas Chautru 1658d819c083SNicolas Chautru /* checks encoder parameters */ 1659d819c083SNicolas Chautru static int 1660d819c083SNicolas Chautru check_ldpc_encoder(struct test_bbdev_vector *vector) 1661d819c083SNicolas Chautru { 1662d819c083SNicolas Chautru unsigned char i; 1663d819c083SNicolas Chautru const int mask = vector->mask; 1664d819c083SNicolas Chautru 1665d819c083SNicolas Chautru if (vector->entries[DATA_INPUT].nb_segments == 0) 1666d819c083SNicolas Chautru return -1; 1667d819c083SNicolas Chautru 1668d819c083SNicolas Chautru for (i = 0; i < vector->entries[DATA_INPUT].nb_segments; i++) 1669d819c083SNicolas Chautru if (vector->entries[DATA_INPUT].segments[i].addr == NULL) 1670d819c083SNicolas Chautru return -1; 1671d819c083SNicolas Chautru 1672d819c083SNicolas Chautru if (vector->entries[DATA_HARD_OUTPUT].nb_segments == 0) 1673d819c083SNicolas Chautru return -1; 1674d819c083SNicolas Chautru 1675d819c083SNicolas Chautru for (i = 0; i < vector->entries[DATA_HARD_OUTPUT].nb_segments; i++) 1676d819c083SNicolas Chautru if (vector->entries[DATA_HARD_OUTPUT].segments[i].addr == NULL) 1677d819c083SNicolas Chautru return -1; 1678d819c083SNicolas Chautru 1679d819c083SNicolas Chautru if (!(mask & TEST_BBDEV_VF_CODE_BLOCK_MODE)) { 1680d819c083SNicolas Chautru printf( 1681d819c083SNicolas Chautru "WARNING: code_block_mode was not specified in vector file and will be set to 1\n"); 168248fc315fSNicolas Chautru vector->turbo_enc.code_block_mode = RTE_BBDEV_CODE_BLOCK; 1683d819c083SNicolas Chautru } 168448fc315fSNicolas Chautru if (vector->turbo_enc.code_block_mode == RTE_BBDEV_TRANSPORT_BLOCK) { 1685d819c083SNicolas Chautru } else { 1686d819c083SNicolas Chautru if (!(mask & TEST_BBDEV_VF_E) && (vector->turbo_enc.op_flags & 1687d819c083SNicolas Chautru RTE_BBDEV_TURBO_RATE_MATCH)) 1688d819c083SNicolas Chautru printf( 1689d819c083SNicolas Chautru "WARNING: e was not specified in vector file and will be set to 0\n"); 1690d819c083SNicolas Chautru if (!(mask & TEST_BBDEV_VF_NCB)) 1691d819c083SNicolas Chautru printf( 1692d819c083SNicolas Chautru "WARNING: ncb was not specified in vector file and will be set to 0\n"); 1693d819c083SNicolas Chautru } 1694d819c083SNicolas Chautru if (!(mask & TEST_BBDEV_VF_BG)) 1695d819c083SNicolas Chautru printf( 1696d819c083SNicolas Chautru "WARNING: BG was not specified in vector file and will be set to 0\n"); 1697d819c083SNicolas Chautru if (!(mask & TEST_BBDEV_VF_ZC)) 1698d819c083SNicolas Chautru printf( 1699d819c083SNicolas Chautru "WARNING: Zc was not specified in vector file and will be set to 0\n"); 1700d819c083SNicolas Chautru if (!(mask & TEST_BBDEV_VF_RV_INDEX)) 1701d819c083SNicolas Chautru printf( 1702d819c083SNicolas Chautru "INFO: rv_index was not specified in vector file and will be set to 0\n"); 1703d819c083SNicolas Chautru if (!(mask & TEST_BBDEV_VF_OP_FLAGS)) 1704d819c083SNicolas Chautru printf( 1705d819c083SNicolas Chautru "INFO: op_flags was not specified in vector file and capabilities will not be validated\n"); 1706f714a188SAmr Mokhtar if (!(mask & TEST_BBDEV_VF_EXPECTED_STATUS)) 1707f714a188SAmr Mokhtar printf( 1708f714a188SAmr Mokhtar "WARNING: expected_status was not specified in vector file and will be set to 0\n"); 1709f714a188SAmr Mokhtar 1710f714a188SAmr Mokhtar return 0; 1711f714a188SAmr Mokhtar } 1712f714a188SAmr Mokhtar 1713f714a188SAmr Mokhtar static int 1714f714a188SAmr Mokhtar bbdev_check_vector(struct test_bbdev_vector *vector) 1715f714a188SAmr Mokhtar { 1716f714a188SAmr Mokhtar if (vector->op_type == RTE_BBDEV_OP_TURBO_DEC) { 1717f714a188SAmr Mokhtar if (check_decoder(vector) == -1) 1718f714a188SAmr Mokhtar return -1; 1719f714a188SAmr Mokhtar } else if (vector->op_type == RTE_BBDEV_OP_TURBO_ENC) { 1720f714a188SAmr Mokhtar if (check_encoder(vector) == -1) 1721f714a188SAmr Mokhtar return -1; 1722d819c083SNicolas Chautru } else if (vector->op_type == RTE_BBDEV_OP_LDPC_ENC) { 1723d819c083SNicolas Chautru if (check_ldpc_encoder(vector) == -1) 1724d819c083SNicolas Chautru return -1; 1725d819c083SNicolas Chautru } else if (vector->op_type == RTE_BBDEV_OP_LDPC_DEC) { 1726d819c083SNicolas Chautru if (check_ldpc_decoder(vector) == -1) 1727d819c083SNicolas Chautru return -1; 17280acdb986SNicolas Chautru } else if (vector->op_type == RTE_BBDEV_OP_FFT) { 17290acdb986SNicolas Chautru if (check_fft(vector) == -1) 17300acdb986SNicolas Chautru return -1; 173195f192a4SHernan Vargas } else if (vector->op_type == RTE_BBDEV_OP_MLDTS) { 173295f192a4SHernan Vargas if (check_mld(vector) == -1) 173395f192a4SHernan Vargas return -1; 1734f714a188SAmr Mokhtar } else if (vector->op_type != RTE_BBDEV_OP_NONE) { 1735f714a188SAmr Mokhtar printf("Vector was not filled\n"); 1736f714a188SAmr Mokhtar return -1; 1737f714a188SAmr Mokhtar } 1738f714a188SAmr Mokhtar 1739f714a188SAmr Mokhtar return 0; 1740f714a188SAmr Mokhtar } 1741f714a188SAmr Mokhtar 1742f714a188SAmr Mokhtar int 1743f714a188SAmr Mokhtar test_bbdev_vector_read(const char *filename, 1744f714a188SAmr Mokhtar struct test_bbdev_vector *vector) 1745f714a188SAmr Mokhtar { 1746f714a188SAmr Mokhtar int ret = 0; 1747f714a188SAmr Mokhtar size_t len = 0; 1748f714a188SAmr Mokhtar 1749f714a188SAmr Mokhtar FILE *fp = NULL; 1750f714a188SAmr Mokhtar char *line = NULL; 1751f714a188SAmr Mokhtar char *entry = NULL; 1752f714a188SAmr Mokhtar 1753f714a188SAmr Mokhtar fp = fopen(filename, "r"); 1754f714a188SAmr Mokhtar if (fp == NULL) { 1755f714a188SAmr Mokhtar printf("File %s does not exist\n", filename); 1756f714a188SAmr Mokhtar return -1; 1757f714a188SAmr Mokhtar } 1758f714a188SAmr Mokhtar 1759f714a188SAmr Mokhtar while (getline(&line, &len, fp) != -1) { 1760f714a188SAmr Mokhtar 1761f714a188SAmr Mokhtar /* ignore comments and new lines */ 1762f714a188SAmr Mokhtar if (line[0] == '#' || line[0] == '/' || line[0] == '\n' 1763f714a188SAmr Mokhtar || line[0] == '\r') 1764f714a188SAmr Mokhtar continue; 1765f714a188SAmr Mokhtar 1766f714a188SAmr Mokhtar trim_space(line); 1767f714a188SAmr Mokhtar 1768f714a188SAmr Mokhtar /* buffer for multiline */ 1769f714a188SAmr Mokhtar entry = realloc(entry, strlen(line) + 1); 1770f714a188SAmr Mokhtar if (entry == NULL) { 1771f714a188SAmr Mokhtar printf("Fail to realloc %zu bytes\n", strlen(line) + 1); 1772f714a188SAmr Mokhtar ret = -ENOMEM; 1773f714a188SAmr Mokhtar goto exit; 1774f714a188SAmr Mokhtar } 1775f714a188SAmr Mokhtar 1776f2790f9cSAndy Green strcpy(entry, line); 1777f714a188SAmr Mokhtar 1778f714a188SAmr Mokhtar /* check if entry ends with , or = */ 1779f714a188SAmr Mokhtar if (entry[strlen(entry) - 1] == ',' 1780f714a188SAmr Mokhtar || entry[strlen(entry) - 1] == '=') { 1781f714a188SAmr Mokhtar while (getline(&line, &len, fp) != -1) { 1782f714a188SAmr Mokhtar trim_space(line); 1783f714a188SAmr Mokhtar 1784f714a188SAmr Mokhtar /* extend entry about length of new line */ 1785f714a188SAmr Mokhtar char *entry_extended = realloc(entry, 1786f714a188SAmr Mokhtar strlen(line) + 1787f714a188SAmr Mokhtar strlen(entry) + 1); 1788f714a188SAmr Mokhtar 1789f714a188SAmr Mokhtar if (entry_extended == NULL) { 1790f714a188SAmr Mokhtar printf("Fail to allocate %zu bytes\n", 1791f714a188SAmr Mokhtar strlen(line) + 1792f714a188SAmr Mokhtar strlen(entry) + 1); 1793f714a188SAmr Mokhtar ret = -ENOMEM; 1794f714a188SAmr Mokhtar goto exit; 1795f714a188SAmr Mokhtar } 1796f714a188SAmr Mokhtar 1797f714a188SAmr Mokhtar entry = entry_extended; 1798f2790f9cSAndy Green /* entry has been allocated accordingly */ 1799f2790f9cSAndy Green strcpy(&entry[strlen(entry)], line); 1800f714a188SAmr Mokhtar 1801f714a188SAmr Mokhtar if (entry[strlen(entry) - 1] != ',') 1802f714a188SAmr Mokhtar break; 1803f714a188SAmr Mokhtar } 1804f714a188SAmr Mokhtar } 1805f714a188SAmr Mokhtar ret = parse_entry(entry, vector); 1806f714a188SAmr Mokhtar if (ret != 0) { 1807f714a188SAmr Mokhtar printf("An error occurred while parsing!\n"); 1808f714a188SAmr Mokhtar goto exit; 1809f714a188SAmr Mokhtar } 1810f714a188SAmr Mokhtar } 1811f714a188SAmr Mokhtar ret = bbdev_check_vector(vector); 1812f714a188SAmr Mokhtar if (ret != 0) 1813f714a188SAmr Mokhtar printf("An error occurred while checking!\n"); 1814f714a188SAmr Mokhtar 1815f714a188SAmr Mokhtar exit: 1816f714a188SAmr Mokhtar fclose(fp); 1817f714a188SAmr Mokhtar free(line); 1818f714a188SAmr Mokhtar free(entry); 1819f714a188SAmr Mokhtar 1820f714a188SAmr Mokhtar return ret; 1821f714a188SAmr Mokhtar } 1822