1.. SPDX-License-Identifier: BSD-3-Clause 2 Copyright(c) 2017 Intel Corporation 3 4.. _test_bbdev_application: 5 6dpdk-test-bbdev Application 7=========================== 8 9The ``dpdk-test-bbdev`` tool is a Data Plane Development Kit (DPDK) utility that 10allows measuring performance parameters of PMDs available in the bbdev framework. 11Tests available for execution are: latency, throughput, validation, 12bler and sanity tests. Execution of tests can be customized using various 13parameters passed to a python running script. 14 15 16Running the Application 17----------------------- 18 19The tool application has a number of command line options: 20 21.. code-block:: console 22 23 test-bbdev.py [-h] [-p TESTAPP_PATH] [-e EAL_PARAMS] [-t TIMEOUT] 24 [-c TEST_CASE [TEST_CASE ...]] 25 [-v TEST_VECTOR [TEST_VECTOR...]] [-n NUM_OPS] 26 [-b BURST_SIZE [BURST_SIZE ...]] [-l NUM_LCORES] 27 [-t MAX_ITERS [MAX_ITERS ...]] 28 [-s SNR [SNR ...]] 29 30command-line Options 31~~~~~~~~~~~~~~~~~~~~ 32 33The following are the command-line options: 34 35``-h, --help`` 36 Shows help message and exit. 37 38``-p TESTAPP_PATH, --testapp_path TESTAPP_PATH`` 39 Indicates the path to the bbdev test app. If not specified path is set based 40 on "../.." concatenated with "*/build/app/dpdk-test-bbdev*". 41 42``-e EAL_PARAMS, --eal_params EAL_PARAMS`` 43 Specifies EAL arguments which are passed to the test app. For more details, 44 refer to DPDK documentation at :doc:`../linux_gsg/linux_eal_parameters`. 45 46``-t TIMEOUT, --timeout TIMEOUT`` 47 Specifies timeout in seconds. If not specified timeout is set to 300 seconds. 48 49``-c TEST_CASE [TEST_CASE ...], --test_cases TEST_CASE [TEST_CASE ...]`` 50 Defines test cases to run. If not specified all available tests are run. 51 52 **Example usage:** 53 54 ``./test-bbdev.py -c validation`` 55 Runs validation test suite 56 57 ``./test-bbdev.py -c latency throughput`` 58 Runs latency and throughput test suites 59 60``-v TEST_VECTOR [TEST_VECTOR ...], --test_vector TEST_VECTOR [TEST_VECTOR ...]`` 61 Specifies paths to the test vector files. If not specified path is set based 62 on "../.." concatenated with "*/app/test-bbdev/test_vectors/bbdev_null.data*" 63 and indicates default data file. 64 65 **Example usage:** 66 67 ``./test-bbdev.py -v app/test-bbdev/test_vectors/turbo_dec_test1.data`` 68 Fills vector based on turbo_dec_test1.data file and runs all tests 69 70 ``./test-bbdev.py -v turbo_dec_test1.data turbo_enc_test2.data`` 71 The bbdev test app is executed twice. First time vector is filled based on 72 *turbo_dec_test1.data* file and second time based on 73 *turb_enc_test2.data* file. For both executions all tests are run. 74 75``-n NUM_OPS, --num_ops NUM_OPS`` 76 Specifies number of operations to process on device. If not specified num_ops 77 is set to 32 operations. 78 79``-l NUM_LCORES, --num_lcores NUM_LCORES`` 80 Specifies number of lcores to run. If not specified num_lcores is set 81 according to value from RTE configuration (EAL coremask) 82 83``-b BURST_SIZE [BURST_SIZE ...], --burst-size BURST_SIZE [BURST_SIZE ...]`` 84 Specifies operations enqueue/dequeue burst size. If not specified burst_size is 85 set to 32. Maximum is 512. 86 87``-t MAX_ITERS [MAX_ITERS ...], --iter_max MAX_ITERS [MAX_ITERS ...]`` 88 Specifies LDPC decoder operations maximum number of iterations for throughput 89 and bler tests. If not specified iter_max is set to 6. 90 91``-s SNR [SNR ...], --snr SNR [SNR ...]`` 92 Specifies for LDPC decoder operations the SNR in dB used when generating LLRs 93 for bler tests. If not specified snr is set to 0 dB. 94 95Test Cases 96~~~~~~~~~~ 97 98There are 7 main test cases that can be executed using testbbdev tool: 99 100* Sanity checks [-c unittest] 101 - Performs sanity checks on BBDEV interface, validating basic functionality 102 103* Validation tests [-c validation] 104 - Performs full operation of enqueue and dequeue 105 - Compares the dequeued data buffer with a expected values in the test 106 vector (TV) being used 107 - Fails if any dequeued value does not match the data in the TV 108 109* Offload Cost measurement [-c offload] 110 - Measures the CPU cycles consumed from the receipt of a user enqueue 111 until it is put on the device queue 112 - The test measures 4 metrics 113 (a) *SW Enq Offload Cost*: Software only enqueue offload cost, the cycle 114 counts and time (us) from the point the enqueue API is called until 115 the point the operation is put on the accelerator queue. 116 (b) *Acc Enq Offload Cost*: The cycle count and time (us) from the 117 point the operation is put on the accelerator queue until the return 118 from enqueue. 119 (c) *SW Deq Offload Cost*: Software dequeue cost, the cycle counts and 120 time (us) consumed to dequeue one operation. 121 (d) *Empty Queue Enq Offload Cost*: The cycle count and time (us) 122 consumed to dequeue from an empty queue. 123 124* Latency measurement [-c latency] 125 - Measures the time consumed from the first enqueue until the first 126 appearance of a dequeued result 127 - This measurement represents the full latency of a bbdev operation 128 (encode or decode) to execute 129 130* Poll-mode Throughput measurement [-c throughput] 131 - Performs full operation of enqueue and dequeue 132 - Executes in poll mode 133 - Measures the achieved throughput on a subset or all available CPU cores 134 - Dequeued data is not validated against expected values stored in TV 135 - Results are printed in million operations per second and million bits 136 per second 137 138* BLER measurement [-c bler] 139 - Performs full operation of enqueue and dequeue 140 - Measures the achieved throughput on a subset or all available CPU cores 141 - Computed BLER (Block Error Rate, ratio of blocks not decoded at a given 142 SNR) in % based on the total number of operations. 143 144* Interrupt-mode Throughput [-c interrupt] 145 - Similar to Throughput test case, but using interrupts. No polling. 146 147 148Parameter Globbing 149~~~~~~~~~~~~~~~~~~ 150 151Thanks to the globbing functionality in python test-bbdev.py script allows to 152run tests with different set of vector files without giving all of them explicitly. 153 154**Example usage for 4G:** 155 156.. code-block:: console 157 158 ./test-bbdev.py -v app/test-bbdev/test_vectors/turbo_<enc/dec>_c<c>_k<k>_r<r>_e<e>_<extra-info>.data 159 160It runs all tests with following vectors: 161 162- ``bbdev_null.data`` 163 164- ``turbo_dec_c1_k6144_r0_e34560_sbd_negllr.data`` 165 166- ``turbo_enc_c1_k40_r0_e1196_rm.data`` 167 168- ``turbo_enc_c2_k5952_r0_e17868_crc24b.data`` 169 170- ``turbo_dec_c1_k40_r0_e17280_sbd_negllr.data`` 171 172- ``turbo_dec_c1_k6144_r0_e34560_sbd_posllr.data`` 173 174- ``turbo_enc_c1_k40_r0_e272_rm.data`` 175 176- ``turbo_enc_c3_k4800_r2_e14412_crc24b.data`` 177 178- ``turbo_dec_c1_k6144_r0_e10376_crc24b_sbd_negllr_high_snr.data`` 179 180- ``turbo_dec_c2_k3136_r0_e4920_sbd_negllr_crc24b.data`` 181 182- ``turbo_enc_c1_k6144_r0_e120_rm_rvidx.data`` 183 184- ``turbo_enc_c4_k4800_r2_e14412_crc24b.data`` 185 186- ``turbo_dec_c1_k6144_r0_e10376_crc24b_sbd_negllr_low_snr.data`` 187 188- ``turbo_dec_c2_k3136_r0_e4920_sbd_negllr.data`` 189 190- ``turbo_enc_c1_k6144_r0_e18444.data`` 191 192- ``turbo_dec_c1_k6144_r0_e34560_negllr.data`` 193 194- ``turbo_enc_c1_k40_r0_e1190_rm.data`` 195 196- ``turbo_enc_c1_k6144_r0_e18448_crc24a.data`` 197 198- ``turbo_dec_c1_k6144_r0_e34560_posllr.data`` 199 200- ``turbo_enc_c1_k40_r0_e1194_rm.data`` 201 202- ``turbo_enc_c1_k6144_r0_e32256_crc24b_rm.data`` 203 204.. code-block:: console 205 206 ./test-bbdev.py -v app/test-bbdev/turbo_*_default.data 207 208It runs all tests with "default" vectors. 209 210* ``turbo_dec_default.data`` is a soft link to 211 ``turbo_dec_c1_k6144_r0_e10376_crc24b_sbd_negllr_high_snr.data`` 212 213* ``turbo_enc_default.data`` is a soft link to 214 ``turbo_enc_c1_k6144_r0_e32256_crc24b_rm.data`` 215 216* ``ldpc_dec_default.data`` is a soft link to 217 ``ldpc_dec_v6563.data`` 218 219* ``ldpc_enc_default.data`` is a soft link to 220 ``ldpc_enc_c1_k8148_r0_e9372_rm.data`` 221 222Running Tests 223------------- 224 225All default reference test-vectors are stored in the test_vector 226directory below. 227The prefix trivially defines which type of operation is included : 228turbo_enc, turbo_dec, ldpc_enc, ldpc_dec. 229The details of the configuration are captured in the file but some 230vector name refer more explicitly processing specificity such as 231'HARQ' when HARQ retransmission is used, 'loopback' when the data 232is purely read/written for external DDR, lbrm when limited buffer 233rate matching is expected, or crc_fail when a CRC failure is expected. 234They are chosen to have a good coverage across sizes and processing 235parameters while still keeping their number limited as part of sanity 236regression. 237 238Shortened tree of isg_cid-wireless_dpdk_ae with dpdk compiled and output 239to the build directory: 240 241:: 242 243 |-- app 244 |-- test-bbdev 245 |-- test_vectors 246 247 |-- build 248 |-- app 249 |-- dpdk-test-bbdev 250 251All bbdev devices 252~~~~~~~~~~~~~~~~~ 253 254.. code-block:: console 255 256 ./test-bbdev.py -p ../../build/app/dpdk-test-bbdev 257 -v turbo_dec_default.data 258 259It runs all available tests using the test vector filled based on 260*turbo_dec_default.data* file. 261By default number of operations to process on device is set to 32, timeout is 262set to 300s and operations enqueue/dequeue burst size is set to 32. 263Moreover a bbdev (*baseband_null*) device will be created. 264 265baseband turbo_sw device 266~~~~~~~~~~~~~~~~~~~~~~~~ 267 268.. code-block:: console 269 270 ./test-bbdev.py -p ../../build/app/dpdk-test-bbdev 271 -e="--vdev=baseband_turbo_sw" -t 120 -c validation 272 -v ./test_vectors/* -n 64 -b 8 32 273 274It runs **validation** test for each vector file that matches the given pattern. 275Number of operations to process on device is set to 64 and operations timeout is 276set to 120s and enqueue/dequeue burst size is set to 8 and to 32. 277Moreover a bbdev (*baseband_turbo_sw*) device will be created. 278 279 280bbdev null device 281~~~~~~~~~~~~~~~~~ 282 283Executing bbdev null device with *bbdev_null.data* helps in measuring the 284overhead introduced by the bbdev framework. 285 286.. code-block:: console 287 288 ./test-bbdev.py -e="--vdev=baseband_null0" 289 -v ./test_vectors/bbdev_null.data 290 291**Note:** 292 293baseband_null device does not have to be defined explicitly as it is created by default. 294 295 296 297Test Vector files 298----------------- 299 300Test Vector files contain the data which is used to set turbo decoder/encoder 301parameters and buffers for validation purpose. New test vector files should be 302stored in ``app/test-bbdev/test_vectors/`` directory. Detailed description of 303the syntax of the test vector files is in the following section. 304 305 306Basic principles for test vector files 307~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 308Line started with ``#`` is treated as a comment and is ignored. 309 310If variable is a chain of values, values should be separated by a comma. If 311assignment is split into several lines, each line (except the last one) has to 312be ended with a comma. 313There is no comma after last value in last line. Correct assignment should 314look like the following: 315 316.. parsed-literal:: 317 318 variable = 319 value, value, value, value, 320 value, value 321 322In case where variable is a single value correct assignment looks like the 323following: 324 325.. parsed-literal:: 326 327 variable = 328 value 329 330Length of chain variable is calculated by parser. Can not be defined 331explicitly. 332 333Variable op_type has to be defined as a first variable in file. It specifies 334what type of operations will be executed. For 4G decoder op_type has to be set to 335``RTE_BBDEV_OP_TURBO_DEC`` and for 4G encoder to ``RTE_BBDEV_OP_TURBO_ENC``. 336 337Bbdev-test adjusts the byte endianness based on the PMD capability (data_endianness) 338and all the test vectors input/output data are assumed to be LE by default 339 340Full details of the meaning and valid values for the below fields are 341documented in *rte_bbdev_op.h* 342 343 344Turbo decoder test vectors template 345~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 346 347For turbo decoder it has to be always set to ``RTE_BBDEV_OP_TURBO_DEC`` 348 349.. parsed-literal:: 350 351 op_type = 352 RTE_BBDEV_OP_TURBO_DEC 353 354Chain of uint32_t values. Note that it is possible to define more than one 355input/output entries which will result in chaining two or more data structures 356for *segmented Transport Blocks* 357 358.. parsed-literal:: 359 360 input0 = 361 0x00000000, 0x7f817f00, 0x7f7f8100, 0x817f8100, 0x81008100, 0x7f818100, 0x81817f00, 0x7f818100, 362 0x81007f00, 0x7f818100, 0x817f8100, 0x81817f00, 0x81008100, 0x817f7f00, 0x7f7f8100, 0x81817f00 363 364Chain of uint32_t values 365 366.. parsed-literal:: 367 368 input1 = 369 0x7f7f0000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 370 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 371 372Chain of uint32_t values 373 374.. parsed-literal:: 375 376 input2 = 377 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 378 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 379 380Chain of uint32_t values 381 382.. parsed-literal:: 383 384 hard_output0 = 385 0xa7d6732e 386 387Chain of uint32_t values 388 389.. parsed-literal:: 390 391 hard_output1 = 392 0xa61 393 394Chain of uint32_t values 395 396.. parsed-literal:: 397 398 soft_output0 = 399 0x817f817f, 0x7f817f7f, 0x81818181, 0x817f7f81, 0x7f818181, 0x8181817f, 0x817f817f, 0x8181817f 400 401Chain of uint32_t values 402 403.. parsed-literal:: 404 405 soft_output1 = 406 0x817f7f81, 0x7f7f7f81, 0x7f7f8181 407 408uint32_t value 409 410.. parsed-literal:: 411 412 e = 413 44 414 415uint16_t value 416 417.. parsed-literal:: 418 419 k = 420 40 421 422uint8_t value 423 424.. parsed-literal:: 425 426 rv_index = 427 0 428 429uint8_t value 430 431.. parsed-literal:: 432 433 iter_max = 434 8 435 436uint8_t value 437 438.. parsed-literal:: 439 440 iter_min = 441 4 442 443uint8_t value 444 445.. parsed-literal:: 446 447 expected_iter_count = 448 8 449 450uint8_t value 451 452.. parsed-literal:: 453 454 ext_scale = 455 15 456 457uint8_t value 458 459.. parsed-literal:: 460 461 num_maps = 462 0 463 464Chain of flags for LDPC decoder operation based on the rte_bbdev_op_td_flag_bitmasks: 465 466Example: 467 468 .. parsed-literal:: 469 470 op_flags = 471 RTE_BBDEV_TURBO_SUBBLOCK_DEINTERLEAVE, RTE_BBDEV_TURBO_EQUALIZER, 472 RTE_BBDEV_TURBO_SOFT_OUTPUT 473 474Chain of operation statuses that are expected after operation is performed. 475Following statuses can be used: 476 477- ``DMA`` 478 479- ``FCW`` 480 481- ``CRC`` 482 483- ``OK`` 484 485``OK`` means no errors are expected. Cannot be used with other values. 486 487.. parsed-literal:: 488 489 expected_status = 490 FCW, CRC 491 492 493Turbo encoder test vectors template 494~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 495 496For turbo encoder it has to be always set to ``RTE_BBDEV_OP_TURBO_ENC`` 497 498.. parsed-literal:: 499 500 op_type = 501 RTE_BBDEV_OP_TURBO_ENC 502 503Chain of uint32_t values 504 505.. parsed-literal:: 506 507 input0 = 508 0x11d2bcac, 0x4d 509 510Chain of uint32_t values 511 512.. parsed-literal:: 513 514 output0 = 515 0xd2399179, 0x640eb999, 0x2cbaf577, 0xaf224ae2, 0x9d139927, 0xe6909b29, 516 0xa25b7f47, 0x2aa224ce, 0x79f2 517 518uint32_t value 519 520.. parsed-literal:: 521 522 e = 523 272 524 525uint16_t value 526 527.. parsed-literal:: 528 529 k = 530 40 531 532uint16_t value 533 534.. parsed-literal:: 535 536 ncb = 537 192 538 539uint8_t value 540 541.. parsed-literal:: 542 543 rv_index = 544 0 545 546Chain of flags for LDPC decoder operation based on the rte_bbdev_op_te_flag_bitmasks: 547 548``RTE_BBDEV_TURBO_ENC_SCATTER_GATHER`` is used to indicate the parser to 549force the input data to be memory split and formed as a segmented mbuf. 550 551 552.. parsed-literal:: 553 554 op_flags = 555 RTE_BBDEV_TURBO_RATE_MATCH 556 557Chain of operation statuses that are expected after operation is performed. 558Following statuses can be used: 559 560- ``DMA`` 561 562- ``FCW`` 563 564- ``OK`` 565 566``OK`` means no errors are expected. Cannot be used with other values. 567 568.. parsed-literal:: 569 570 expected_status = 571 OK 572 573LDPC decoder test vectors template 574~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 575 576For LDPC decoder it has to be always set to ``RTE_BBDEV_OP_LDPC_DEC`` 577 578.. parsed-literal:: 579 580 op_type = 581 RTE_BBDEV_OP_LDPC_DEC 582 583Chain of uint32_t values. Note that it is possible to define more than one 584input/output entries which will result in chaining two or more data structures 585for *segmented Transport Blocks* 586 587.. parsed-literal:: 588 589 input0 = 590 0x00000000, 0x7f817f00, 0x7f7f8100, 0x817f8100, 0x81008100, 0x7f818100, 0x81817f00, 0x7f818100, 591 0x81007f00, 0x7f818100, 0x817f8100, 0x81817f00, 0x81008100, 0x817f7f00, 0x7f7f8100, 0x81817f00 592 593.. parsed-literal:: 594 595 output0 = 596 0xa7d6732e 597 598uint8_t value 599 600.. parsed-literal:: 601 602 basegraph= 603 1 604 605uint16_t value 606 607.. parsed-literal:: 608 609 z_c= 610 224 611 612uint16_t value 613 614.. parsed-literal:: 615 616 n_cb= 617 14784 618 619uint8_t value 620 621.. parsed-literal:: 622 623 q_m= 624 1 625 626uint16_t value 627 628.. parsed-literal:: 629 630 n_filler= 631 40 632 633uint32_t value 634 635.. parsed-literal:: 636 637 e= 638 13072 639 640uint8_t value 641 642.. parsed-literal:: 643 644 rv_index= 645 2 646 647uint8_t value 648 649.. parsed-literal:: 650 code_block_mode= 651 1 652 653uint8_t value 654 655.. parsed-literal:: 656 657 iter_max= 658 20 659 660uint8_t value 661 662.. parsed-literal:: 663 664 expected_iter_count= 665 8 666 667 668Chain of flags for LDPC decoder operation based on the rte_bbdev_op_ldpcdec_flag_bitmasks: 669 670Example: 671 672 .. parsed-literal:: 673 674 op_flags = 675 RTE_BBDEV_LDPC_ITERATION_STOP_ENABLE, RTE_BBDEV_LDPC_HQ_COMBINE_OUT_ENABLE, 676 RTE_BBDEV_LDPC_HQ_COMBINE_IN_ENABLE, RTE_BBDEV_LDPC_HARQ_6BIT_COMPRESSION 677 678Chain of operation statuses that are expected after operation is performed. 679Following statuses can be used: 680 681- ``OK`` : No error reported. 682 683- ``SYN`` : LDPC syndrome parity check is failing. 684 685- ``CRC`` : CRC parity check is failing when CRC check operation is included. 686 687- ``SYNCRC`` : Both CRC and LDPC syndromes parity checks are failing. 688 689``OK`` means no errors are expected. Cannot be used with other values. 690 691.. parsed-literal:: 692 693 expected_status = 694 CRC 695 696 697LDPC encoder test vectors template 698~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 699 700For turbo encoder it has to be always set to ``RTE_BBDEV_OP_LDPC_ENC`` 701 702.. parsed-literal:: 703 704 op_type = 705 RTE_BBDEV_OP_LDPC_ENC 706 707Chain of uint32_t values 708 709.. parsed-literal:: 710 711 input0 = 712 0x11d2bcac, 0x4d 713 714Chain of uint32_t values 715 716.. parsed-literal:: 717 718 output0 = 719 0xd2399179, 0x640eb999, 0x2cbaf577, 0xaf224ae2, 0x9d139927, 0xe6909b29, 720 0xa25b7f47, 0x2aa224ce, 0x79f2 721 722 723uint8_t value 724 725.. parsed-literal:: 726 727 basegraph= 728 1 729 730uint16_t value 731 732.. parsed-literal:: 733 734 z_c= 735 52 736 737uint16_t value 738 739.. parsed-literal:: 740 741 n_cb= 742 3432 743 744uint8_t value 745 746.. parsed-literal:: 747 748 q_m= 749 6 750 751uint16_t value 752 753.. parsed-literal:: 754 755 n_filler= 756 0 757 758uint32_t value 759 760.. parsed-literal:: 761 762 e = 763 1380 764 765uint8_t value 766 767.. parsed-literal:: 768 769 rv_index = 770 1 771 772uint8_t value 773 774.. parsed-literal:: 775 776 code_block_mode = 777 1 778 779 780Chain of flags for LDPC encoder operation based on the 781rte_bbdev_op_ldpcenc_flag_bitmasks: 782 783.. parsed-literal:: 784 785 op_flags = 786 RTE_BBDEV_LDPC_RATE_MATCH 787 788Chain of operation statuses that are expected after operation is performed. 789Following statuses can be used: 790 791- ``DMA`` 792 793- ``FCW`` 794 795- ``OK`` 796 797``OK`` means no errors are expected. Cannot be used with other values. 798 799.. parsed-literal:: 800 801 expected_status = 802 OK 803 804 805FFT test vectors template 806~~~~~~~~~~~~~~~~~~~~~~~~~ 807 808For FFT it has to be always set to ``RTE_BBDEV_OP_FFT`` 809 810.. parsed-literal:: 811 812 op_type = 813 RTE_BBDEV_OP_FFT 814 815Chain of uint32_t values 816 817.. parsed-literal:: 818 819 input0 = 820 0x11d2bcac, ... 821 822Chain of uint32_t values 823 824.. parsed-literal:: 825 826 output0 = 827 0xd2399179, ... 828 829uint16_t value 830 831.. parsed-literal:: 832 833 in_sequence_size = 834 60 835 836uint16_t value 837 838.. parsed-literal:: 839 840 in_leading_padding = 841 4 842 843uint16_t value 844 845.. parsed-literal:: 846 847 out_sequence_size = 848 60 849 850uint6_t value 851 852.. parsed-literal:: 853 854 out_leading_depadding = 855 0 856 857List of window indexes 858 859.. parsed-literal:: 860 861 window_index = 862 2, 5, 8, 11, 14, 2, 5, 8, 11, 14, 2, 5 863 864uint8_t value 865 866.. parsed-literal:: 867 868 num_antennas_log2 = 869 3 870 871uint8_t value 872 873.. parsed-literal:: 874 875 ifft_log2 = 876 6 877 878uint8_t value 879 880.. parsed-literal:: 881 882 fft_log2 = 883 6 884 885uint8_t value 886 887.. parsed-literal:: 888 889 cs_time_adjustment = 890 0 891 892uint8_t value 893 894.. parsed-literal:: 895 896 ifft_shift = 897 3 898 899uint8_t value 900 901.. parsed-literal:: 902 903 fft_shift = 904 3 905 906uint16_t value 907 908.. parsed-literal:: 909 910 ncs_reciprocal = 911 5461 912 913Chain of flags for FFT operation based on the 914rte_bbdev_op_fft_flag_bitmasks: 915 916.. parsed-literal:: 917 918 op_flags = 919 RTE_BBDEV_FFT_CS_ADJUSTMENT, RTE_BBDEV_FFT_WINDOWING 920 921Chain of operation statuses that are expected after operation is performed. 922Following statuses can be used: 923 924- ``DMA`` 925 926- ``FCW`` 927 928- ``OK`` 929 930``OK`` means no errors are expected. Cannot be used with other values. 931 932.. parsed-literal:: 933 934 expected_status = 935 OK 936