[dpdk-dev] [PATCH v8 8/8] app/bbdev: handle endianness of test data

Chautru, Nicolas nicolas.chautru at intel.com
Wed Oct 6 22:24:04 CEST 2021


> -----Original Message-----
> From: nipun.gupta at nxp.com <nipun.gupta at nxp.com>
> Sent: Wednesday, October 6, 2021 4:31 AM
> To: dev at dpdk.org; gakhil at marvell.com; Chautru, Nicolas
> <nicolas.chautru at intel.com>
> Cc: david.marchand at redhat.com; hemant.agrawal at nxp.com; Nipun Gupta
> <nipun.gupta at nxp.com>
> Subject: [PATCH v8 8/8] app/bbdev: handle endianness of test data
> 
> From: Nipun Gupta <nipun.gupta at nxp.com>
> 
> With data input, output and harq also supported in big endian format, this
> patch updates the testbbdev application to handle the endianness
> conversion as directed by the the driver being used.
> 
> If the driver supports big endian data processing, conversion from little
> endian to big is handled by the testbbdev application.
> 
> Signed-off-by: Nipun Gupta <nipun.gupta at nxp.com>
> ---
>  app/test-bbdev/test_bbdev_perf.c | 43
> ++++++++++++++++++++++++++++++++
>  1 file changed, 43 insertions(+)
> 
> diff --git a/app/test-bbdev/test_bbdev_perf.c b/app/test-
> bbdev/test_bbdev_perf.c
> index 469597b8b3..597c443596 100644
> --- a/app/test-bbdev/test_bbdev_perf.c
> +++ b/app/test-bbdev/test_bbdev_perf.c
> @@ -227,6 +227,45 @@ clear_soft_out_cap(uint32_t *op_flags)
>  	*op_flags &= ~RTE_BBDEV_TURBO_NEG_LLR_1_BIT_SOFT_OUT;
>  }
> 
> +/* This API is to convert all the test vector op data entries
> + * to big endian format. It is used when the device supports
> + * the input in the big endian format.
> + */
> +static inline void
> +convert_op_data_to_be(void)
> +{
> +	struct op_data_entries *op;
> +	enum op_data_type type;
> +	uint8_t nb_segs, *rem_data, temp;
> +	uint32_t *data, len;
> +	int complete, rem, i, j;
> +
> +	for (type = DATA_INPUT; type < DATA_NUM_TYPES; ++type) {
> +		nb_segs = test_vector.entries[DATA_INPUT].nb_segments;

Is there a typo here? Shouldn't it be instead:
nb_segs = test_vector.entries[type].nb_segments;

Also as part of that same commit, please put a comment in the doc that the bbdev-test is adjusting the byte endianness based on the PMD capability and confirming that all vectors input/ouput data are assuming LE by default.  ./doc/guides/tool/testbbdev.rst


> +		op = &test_vector.entries[type];
> +
> +		/* Invert byte endianness for all the segments */
> +		for (i = 0; i < nb_segs; ++i) {
> +			len = op->segments[i].length;
> +			data = op->segments[i].addr;
> +
> +			/* Swap complete u32 bytes */
> +			complete = len / 4;
> +			for (j = 0; j < complete; j++)
> +				data[j] = rte_bswap32(data[j]);
> +
> +			/* Swap any remaining bytes */
> +			rem = len % 4;
> +			rem_data = (uint8_t *)&data[j];
> +			for (j = 0; j < rem/2; j++) {
> +				temp = rem_data[j];
> +				rem_data[j] = rem_data[rem - j - 1];
> +				rem_data[rem - j - 1] = temp;
> +			}
> +		}
> +	}
> +}
> +
>  static int
>  check_dev_cap(const struct rte_bbdev_info *dev_info)  { @@ -234,6 +273,7
> @@ check_dev_cap(const struct rte_bbdev_info *dev_info)
>  	unsigned int nb_inputs, nb_soft_outputs, nb_hard_outputs,
>  		nb_harq_inputs, nb_harq_outputs;
>  	const struct rte_bbdev_op_cap *op_cap = dev_info-
> >drv.capabilities;
> +	uint8_t dev_be_input = dev_info->drv.support_be_data;
> 
>  	nb_inputs = test_vector.entries[DATA_INPUT].nb_segments;
>  	nb_soft_outputs =
> test_vector.entries[DATA_SOFT_OUTPUT].nb_segments;
> @@ -245,6 +285,9 @@ check_dev_cap(const struct rte_bbdev_info
> *dev_info)
>  		if (op_cap->type != test_vector.op_type)
>  			continue;
> 
> +		if (dev_be_input)
> +			convert_op_data_to_be();
> +
>  		if (op_cap->type == RTE_BBDEV_OP_TURBO_DEC) {
>  			const struct rte_bbdev_op_cap_turbo_dec *cap =
>  					&op_cap->cap.turbo_dec;
> --
> 2.17.1



More information about the dev mailing list