> -----Original Message----- > From: nipun.gu...@nxp.com <nipun.gu...@nxp.com> > Sent: Wednesday, October 6, 2021 4:31 AM > To: dev@dpdk.org; gak...@marvell.com; Chautru, Nicolas > <nicolas.chau...@intel.com> > Cc: david.march...@redhat.com; hemant.agra...@nxp.com; Nipun Gupta > <nipun.gu...@nxp.com> > Subject: [PATCH v8 8/8] app/bbdev: handle endianness of test data > > From: Nipun Gupta <nipun.gu...@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.gu...@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