xref: /dpdk/app/test-bbdev/test_bbdev_vector.c (revision 591d38cc83f3ebe69ba44ce136170299d4825fdf)
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