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