1*d30ea906Sjfb8856606 /* SPDX-License-Identifier: BSD-3-Clause 2*d30ea906Sjfb8856606 * Copyright(c) 2017 Intel Corporation 3*d30ea906Sjfb8856606 */ 4*d30ea906Sjfb8856606 5*d30ea906Sjfb8856606 #include <rte_common.h> 6*d30ea906Sjfb8856606 #include <rte_hexdump.h> 7*d30ea906Sjfb8856606 #include <rte_mbuf.h> 8*d30ea906Sjfb8856606 #include <rte_malloc.h> 9*d30ea906Sjfb8856606 #include <rte_memcpy.h> 10*d30ea906Sjfb8856606 #include <rte_cycles.h> 11*d30ea906Sjfb8856606 12*d30ea906Sjfb8856606 #include <rte_bus_vdev.h> 13*d30ea906Sjfb8856606 14*d30ea906Sjfb8856606 #include <rte_bbdev.h> 15*d30ea906Sjfb8856606 #include <rte_bbdev_op.h> 16*d30ea906Sjfb8856606 #include <rte_bbdev_pmd.h> 17*d30ea906Sjfb8856606 18*d30ea906Sjfb8856606 #include "main.h" 19*d30ea906Sjfb8856606 20*d30ea906Sjfb8856606 21*d30ea906Sjfb8856606 #define BBDEV_NAME_NULL ("bbdev_null") 22*d30ea906Sjfb8856606 23*d30ea906Sjfb8856606 struct bbdev_testsuite_params { 24*d30ea906Sjfb8856606 struct rte_bbdev_queue_conf qconf; 25*d30ea906Sjfb8856606 }; 26*d30ea906Sjfb8856606 27*d30ea906Sjfb8856606 static struct bbdev_testsuite_params testsuite_params; 28*d30ea906Sjfb8856606 29*d30ea906Sjfb8856606 static uint8_t null_dev_id; 30*d30ea906Sjfb8856606 31*d30ea906Sjfb8856606 static int 32*d30ea906Sjfb8856606 testsuite_setup(void) 33*d30ea906Sjfb8856606 { 34*d30ea906Sjfb8856606 uint8_t nb_devs; 35*d30ea906Sjfb8856606 int ret; 36*d30ea906Sjfb8856606 char buf[RTE_BBDEV_NAME_MAX_LEN]; 37*d30ea906Sjfb8856606 38*d30ea906Sjfb8856606 /* Create test device */ 39*d30ea906Sjfb8856606 snprintf(buf, sizeof(buf), "%s_unittest", BBDEV_NAME_NULL); 40*d30ea906Sjfb8856606 ret = rte_vdev_init(buf, NULL); 41*d30ea906Sjfb8856606 TEST_ASSERT(ret == 0, "Failed to create instance of pmd: %s", buf); 42*d30ea906Sjfb8856606 43*d30ea906Sjfb8856606 nb_devs = rte_bbdev_count(); 44*d30ea906Sjfb8856606 TEST_ASSERT(nb_devs != 0, "No devices found"); 45*d30ea906Sjfb8856606 46*d30ea906Sjfb8856606 /* Most recently created device is our device */ 47*d30ea906Sjfb8856606 null_dev_id = nb_devs - 1; 48*d30ea906Sjfb8856606 49*d30ea906Sjfb8856606 return TEST_SUCCESS; 50*d30ea906Sjfb8856606 } 51*d30ea906Sjfb8856606 52*d30ea906Sjfb8856606 static void 53*d30ea906Sjfb8856606 testsuite_teardown(void) 54*d30ea906Sjfb8856606 { 55*d30ea906Sjfb8856606 char buf[RTE_BBDEV_NAME_MAX_LEN]; 56*d30ea906Sjfb8856606 57*d30ea906Sjfb8856606 snprintf(buf, sizeof(buf), "%s_unittest", BBDEV_NAME_NULL); 58*d30ea906Sjfb8856606 rte_vdev_uninit(buf); 59*d30ea906Sjfb8856606 } 60*d30ea906Sjfb8856606 61*d30ea906Sjfb8856606 static int 62*d30ea906Sjfb8856606 ut_setup(void) 63*d30ea906Sjfb8856606 { 64*d30ea906Sjfb8856606 struct bbdev_testsuite_params *ts_params = &testsuite_params; 65*d30ea906Sjfb8856606 uint8_t num_queues; 66*d30ea906Sjfb8856606 67*d30ea906Sjfb8856606 /* Valid queue configuration */ 68*d30ea906Sjfb8856606 ts_params->qconf.priority = 0; 69*d30ea906Sjfb8856606 ts_params->qconf.socket = SOCKET_ID_ANY; 70*d30ea906Sjfb8856606 ts_params->qconf.deferred_start = 1; 71*d30ea906Sjfb8856606 72*d30ea906Sjfb8856606 num_queues = 1; 73*d30ea906Sjfb8856606 TEST_ASSERT_SUCCESS(rte_bbdev_setup_queues(null_dev_id, num_queues, 74*d30ea906Sjfb8856606 SOCKET_ID_ANY), "Failed to setup queues for bbdev %u", 75*d30ea906Sjfb8856606 0); 76*d30ea906Sjfb8856606 77*d30ea906Sjfb8856606 /* Start the device */ 78*d30ea906Sjfb8856606 TEST_ASSERT_SUCCESS(rte_bbdev_start(null_dev_id), 79*d30ea906Sjfb8856606 "Failed to start bbdev %u", 0); 80*d30ea906Sjfb8856606 81*d30ea906Sjfb8856606 return TEST_SUCCESS; 82*d30ea906Sjfb8856606 } 83*d30ea906Sjfb8856606 84*d30ea906Sjfb8856606 static void 85*d30ea906Sjfb8856606 ut_teardown(void) 86*d30ea906Sjfb8856606 { 87*d30ea906Sjfb8856606 rte_bbdev_close(null_dev_id); 88*d30ea906Sjfb8856606 } 89*d30ea906Sjfb8856606 90*d30ea906Sjfb8856606 static int 91*d30ea906Sjfb8856606 test_bbdev_configure_invalid_dev_id(void) 92*d30ea906Sjfb8856606 { 93*d30ea906Sjfb8856606 uint8_t dev_id; 94*d30ea906Sjfb8856606 uint8_t num_queues; 95*d30ea906Sjfb8856606 96*d30ea906Sjfb8856606 num_queues = 1; 97*d30ea906Sjfb8856606 for (dev_id = 0; dev_id < RTE_BBDEV_MAX_DEVS; dev_id++) { 98*d30ea906Sjfb8856606 if (!rte_bbdev_is_valid(dev_id)) { 99*d30ea906Sjfb8856606 TEST_ASSERT_FAIL(rte_bbdev_setup_queues(dev_id, 100*d30ea906Sjfb8856606 num_queues, SOCKET_ID_ANY), 101*d30ea906Sjfb8856606 "Failed test for rte_bbdev_setup_queues: " 102*d30ea906Sjfb8856606 "invalid dev_num %u", dev_id); 103*d30ea906Sjfb8856606 TEST_ASSERT(rte_bbdev_intr_enable(dev_id) == -ENODEV, 104*d30ea906Sjfb8856606 "Failed test for rte_bbdev_intr_enable: " 105*d30ea906Sjfb8856606 "invalid dev_num %u", dev_id); 106*d30ea906Sjfb8856606 break; 107*d30ea906Sjfb8856606 } 108*d30ea906Sjfb8856606 } 109*d30ea906Sjfb8856606 110*d30ea906Sjfb8856606 return TEST_SUCCESS; 111*d30ea906Sjfb8856606 } 112*d30ea906Sjfb8856606 113*d30ea906Sjfb8856606 static int 114*d30ea906Sjfb8856606 test_bbdev_configure_invalid_num_queues(void) 115*d30ea906Sjfb8856606 { 116*d30ea906Sjfb8856606 struct rte_bbdev_info info; 117*d30ea906Sjfb8856606 uint8_t dev_id, num_devs; 118*d30ea906Sjfb8856606 uint8_t num_queues; 119*d30ea906Sjfb8856606 int return_value; 120*d30ea906Sjfb8856606 121*d30ea906Sjfb8856606 TEST_ASSERT((num_devs = rte_bbdev_count()) >= 1, 122*d30ea906Sjfb8856606 "Need at least %d devices for test", 1); 123*d30ea906Sjfb8856606 124*d30ea906Sjfb8856606 /* valid num_queues values */ 125*d30ea906Sjfb8856606 num_queues = 8; 126*d30ea906Sjfb8856606 127*d30ea906Sjfb8856606 /* valid dev_id values */ 128*d30ea906Sjfb8856606 dev_id = null_dev_id; 129*d30ea906Sjfb8856606 130*d30ea906Sjfb8856606 /* Stop the device in case it's started so it can be configured */ 131*d30ea906Sjfb8856606 rte_bbdev_stop(dev_id); 132*d30ea906Sjfb8856606 133*d30ea906Sjfb8856606 TEST_ASSERT_FAIL(rte_bbdev_setup_queues(dev_id, 0, SOCKET_ID_ANY), 134*d30ea906Sjfb8856606 "Failed test for rte_bbdev_setup_queues: " 135*d30ea906Sjfb8856606 "invalid num_queues %d", 0); 136*d30ea906Sjfb8856606 137*d30ea906Sjfb8856606 TEST_ASSERT_SUCCESS(rte_bbdev_setup_queues(dev_id, num_queues, 138*d30ea906Sjfb8856606 SOCKET_ID_ANY), 139*d30ea906Sjfb8856606 "Failed test for rte_bbdev_setup_queues: " 140*d30ea906Sjfb8856606 "invalid dev_num %u", dev_id); 141*d30ea906Sjfb8856606 142*d30ea906Sjfb8856606 TEST_ASSERT_FAIL(return_value = rte_bbdev_info_get(dev_id, NULL), 143*d30ea906Sjfb8856606 "Failed test for rte_bbdev_info_get: " 144*d30ea906Sjfb8856606 "returned value:%i", return_value); 145*d30ea906Sjfb8856606 146*d30ea906Sjfb8856606 TEST_ASSERT_SUCCESS(return_value = rte_bbdev_info_get(dev_id, &info), 147*d30ea906Sjfb8856606 "Failed test for rte_bbdev_info_get: " 148*d30ea906Sjfb8856606 "invalid return value:%i", return_value); 149*d30ea906Sjfb8856606 150*d30ea906Sjfb8856606 TEST_ASSERT(info.num_queues == num_queues, 151*d30ea906Sjfb8856606 "Failed test for rte_bbdev_info_get: " 152*d30ea906Sjfb8856606 "invalid num_queues:%u", info.num_queues); 153*d30ea906Sjfb8856606 154*d30ea906Sjfb8856606 num_queues = info.drv.max_num_queues; 155*d30ea906Sjfb8856606 TEST_ASSERT_SUCCESS(rte_bbdev_setup_queues(dev_id, num_queues, 156*d30ea906Sjfb8856606 SOCKET_ID_ANY), 157*d30ea906Sjfb8856606 "Failed test for rte_bbdev_setup_queues: " 158*d30ea906Sjfb8856606 "invalid num_queues: %u", num_queues); 159*d30ea906Sjfb8856606 160*d30ea906Sjfb8856606 num_queues++; 161*d30ea906Sjfb8856606 TEST_ASSERT_FAIL(rte_bbdev_setup_queues(dev_id, num_queues, 162*d30ea906Sjfb8856606 SOCKET_ID_ANY), 163*d30ea906Sjfb8856606 "Failed test for rte_bbdev_setup_queues: " 164*d30ea906Sjfb8856606 "invalid num_queues: %u", num_queues); 165*d30ea906Sjfb8856606 166*d30ea906Sjfb8856606 return TEST_SUCCESS; 167*d30ea906Sjfb8856606 } 168*d30ea906Sjfb8856606 169*d30ea906Sjfb8856606 static int 170*d30ea906Sjfb8856606 test_bbdev_configure_stop_device(void) 171*d30ea906Sjfb8856606 { 172*d30ea906Sjfb8856606 struct rte_bbdev_info info; 173*d30ea906Sjfb8856606 uint8_t dev_id; 174*d30ea906Sjfb8856606 int return_value; 175*d30ea906Sjfb8856606 176*d30ea906Sjfb8856606 /* valid dev_id values */ 177*d30ea906Sjfb8856606 dev_id = null_dev_id; 178*d30ea906Sjfb8856606 179*d30ea906Sjfb8856606 /* Stop the device so it can be configured */ 180*d30ea906Sjfb8856606 rte_bbdev_stop(dev_id); 181*d30ea906Sjfb8856606 182*d30ea906Sjfb8856606 TEST_ASSERT_SUCCESS(return_value = rte_bbdev_info_get(dev_id, &info), 183*d30ea906Sjfb8856606 "Failed test for rte_bbdev_info_get: " 184*d30ea906Sjfb8856606 "invalid return value from " 185*d30ea906Sjfb8856606 "rte_bbdev_info_get function: %i", return_value); 186*d30ea906Sjfb8856606 187*d30ea906Sjfb8856606 TEST_ASSERT_SUCCESS(info.started, "Failed test for rte_bbdev_info_get: " 188*d30ea906Sjfb8856606 "started value: %u", info.started); 189*d30ea906Sjfb8856606 190*d30ea906Sjfb8856606 TEST_ASSERT_SUCCESS(rte_bbdev_setup_queues(dev_id, 191*d30ea906Sjfb8856606 info.drv.max_num_queues, SOCKET_ID_ANY), 192*d30ea906Sjfb8856606 "Failed test for rte_bbdev_setup_queues: " 193*d30ea906Sjfb8856606 "device should be stopped, dev_id: %u", dev_id); 194*d30ea906Sjfb8856606 195*d30ea906Sjfb8856606 return_value = rte_bbdev_intr_enable(dev_id); 196*d30ea906Sjfb8856606 TEST_ASSERT(return_value != -EBUSY, 197*d30ea906Sjfb8856606 "Failed test for rte_bbdev_intr_enable: device should be stopped, dev_id: %u", 198*d30ea906Sjfb8856606 dev_id); 199*d30ea906Sjfb8856606 200*d30ea906Sjfb8856606 /* Start the device so it cannot be configured */ 201*d30ea906Sjfb8856606 TEST_ASSERT_FAIL(rte_bbdev_start(RTE_BBDEV_MAX_DEVS), 202*d30ea906Sjfb8856606 "Failed to start bbdev %u", dev_id); 203*d30ea906Sjfb8856606 204*d30ea906Sjfb8856606 TEST_ASSERT_SUCCESS(rte_bbdev_start(dev_id), 205*d30ea906Sjfb8856606 "Failed to start bbdev %u", dev_id); 206*d30ea906Sjfb8856606 207*d30ea906Sjfb8856606 TEST_ASSERT_SUCCESS(return_value = rte_bbdev_info_get(dev_id, &info), 208*d30ea906Sjfb8856606 "Failed test for rte_bbdev_info_get: " 209*d30ea906Sjfb8856606 "invalid return value from " 210*d30ea906Sjfb8856606 "rte_bbdev_info_get function: %i", return_value); 211*d30ea906Sjfb8856606 212*d30ea906Sjfb8856606 TEST_ASSERT_FAIL(info.started, "Failed test for rte_bbdev_info_get: " 213*d30ea906Sjfb8856606 "started value: %u", info.started); 214*d30ea906Sjfb8856606 215*d30ea906Sjfb8856606 TEST_ASSERT_FAIL(rte_bbdev_setup_queues(dev_id, 216*d30ea906Sjfb8856606 info.drv.max_num_queues, SOCKET_ID_ANY), 217*d30ea906Sjfb8856606 "Failed test for rte_bbdev_setup_queues: " 218*d30ea906Sjfb8856606 "device should be started, dev_id: %u", dev_id); 219*d30ea906Sjfb8856606 220*d30ea906Sjfb8856606 return_value = rte_bbdev_intr_enable(dev_id); 221*d30ea906Sjfb8856606 TEST_ASSERT(return_value == -EBUSY, 222*d30ea906Sjfb8856606 "Failed test for rte_bbdev_intr_enable: device should be started, dev_id: %u", 223*d30ea906Sjfb8856606 dev_id); 224*d30ea906Sjfb8856606 225*d30ea906Sjfb8856606 /* Stop again the device so it can be once again configured */ 226*d30ea906Sjfb8856606 TEST_ASSERT_FAIL(rte_bbdev_stop(RTE_BBDEV_MAX_DEVS), 227*d30ea906Sjfb8856606 "Failed to start bbdev %u", dev_id); 228*d30ea906Sjfb8856606 229*d30ea906Sjfb8856606 TEST_ASSERT_SUCCESS(rte_bbdev_stop(dev_id), "Failed to stop bbdev %u", 230*d30ea906Sjfb8856606 dev_id); 231*d30ea906Sjfb8856606 232*d30ea906Sjfb8856606 TEST_ASSERT_SUCCESS(return_value = rte_bbdev_info_get(dev_id, &info), 233*d30ea906Sjfb8856606 "Failed test for rte_bbdev_info_get: " 234*d30ea906Sjfb8856606 "invalid return value from " 235*d30ea906Sjfb8856606 "rte_bbdev_info_get function: %i", return_value); 236*d30ea906Sjfb8856606 237*d30ea906Sjfb8856606 TEST_ASSERT_SUCCESS(info.started, "Failed test for rte_bbdev_info_get: " 238*d30ea906Sjfb8856606 "started value: %u", info.started); 239*d30ea906Sjfb8856606 240*d30ea906Sjfb8856606 TEST_ASSERT_SUCCESS(rte_bbdev_setup_queues(dev_id, 241*d30ea906Sjfb8856606 info.drv.max_num_queues, SOCKET_ID_ANY), 242*d30ea906Sjfb8856606 "Failed test for rte_bbdev_setup_queues: " 243*d30ea906Sjfb8856606 "device should be stopped, dev_id: %u", dev_id); 244*d30ea906Sjfb8856606 245*d30ea906Sjfb8856606 return_value = rte_bbdev_intr_enable(dev_id); 246*d30ea906Sjfb8856606 TEST_ASSERT(return_value != -EBUSY, 247*d30ea906Sjfb8856606 "Failed test for rte_bbdev_intr_enable: device should be stopped, dev_id: %u", 248*d30ea906Sjfb8856606 dev_id); 249*d30ea906Sjfb8856606 250*d30ea906Sjfb8856606 return TEST_SUCCESS; 251*d30ea906Sjfb8856606 } 252*d30ea906Sjfb8856606 253*d30ea906Sjfb8856606 static int 254*d30ea906Sjfb8856606 test_bbdev_configure_stop_queue(void) 255*d30ea906Sjfb8856606 { 256*d30ea906Sjfb8856606 struct bbdev_testsuite_params *ts_params = &testsuite_params; 257*d30ea906Sjfb8856606 struct rte_bbdev_info info; 258*d30ea906Sjfb8856606 struct rte_bbdev_queue_info qinfo; 259*d30ea906Sjfb8856606 uint8_t dev_id; 260*d30ea906Sjfb8856606 uint16_t queue_id; 261*d30ea906Sjfb8856606 int return_value; 262*d30ea906Sjfb8856606 263*d30ea906Sjfb8856606 /* Valid dev_id values */ 264*d30ea906Sjfb8856606 dev_id = null_dev_id; 265*d30ea906Sjfb8856606 266*d30ea906Sjfb8856606 /* Valid queue_id values */ 267*d30ea906Sjfb8856606 queue_id = 0; 268*d30ea906Sjfb8856606 269*d30ea906Sjfb8856606 rte_bbdev_stop(dev_id); 270*d30ea906Sjfb8856606 TEST_ASSERT_SUCCESS(return_value = rte_bbdev_info_get(dev_id, &info), 271*d30ea906Sjfb8856606 "Failed test for rte_bbdev_info_get: " 272*d30ea906Sjfb8856606 "invalid return value:%i", return_value); 273*d30ea906Sjfb8856606 274*d30ea906Sjfb8856606 /* Valid queue configuration */ 275*d30ea906Sjfb8856606 ts_params->qconf.queue_size = info.drv.queue_size_lim; 276*d30ea906Sjfb8856606 ts_params->qconf.priority = info.drv.max_ul_queue_priority; 277*d30ea906Sjfb8856606 278*d30ea906Sjfb8856606 /* Device - started; queue - started */ 279*d30ea906Sjfb8856606 rte_bbdev_start(dev_id); 280*d30ea906Sjfb8856606 281*d30ea906Sjfb8856606 TEST_ASSERT_FAIL(rte_bbdev_queue_configure(dev_id, queue_id, 282*d30ea906Sjfb8856606 &ts_params->qconf), 283*d30ea906Sjfb8856606 "Failed test for rte_bbdev_queue_configure: " 284*d30ea906Sjfb8856606 "queue:%u on device:%u should be stopped", 285*d30ea906Sjfb8856606 queue_id, dev_id); 286*d30ea906Sjfb8856606 287*d30ea906Sjfb8856606 /* Device - stopped; queue - started */ 288*d30ea906Sjfb8856606 rte_bbdev_stop(dev_id); 289*d30ea906Sjfb8856606 290*d30ea906Sjfb8856606 TEST_ASSERT_FAIL(rte_bbdev_queue_configure(dev_id, queue_id, 291*d30ea906Sjfb8856606 &ts_params->qconf), 292*d30ea906Sjfb8856606 "Failed test for rte_bbdev_queue_configure: " 293*d30ea906Sjfb8856606 "queue:%u on device:%u should be stopped", 294*d30ea906Sjfb8856606 queue_id, dev_id); 295*d30ea906Sjfb8856606 296*d30ea906Sjfb8856606 TEST_ASSERT_FAIL(rte_bbdev_queue_stop(RTE_BBDEV_MAX_DEVS, queue_id), 297*d30ea906Sjfb8856606 "Failed test for rte_bbdev_queue_stop " 298*d30ea906Sjfb8856606 "invalid dev_id "); 299*d30ea906Sjfb8856606 300*d30ea906Sjfb8856606 TEST_ASSERT_FAIL(rte_bbdev_queue_stop(dev_id, RTE_MAX_QUEUES_PER_PORT), 301*d30ea906Sjfb8856606 "Failed test for rte_bbdev_queue_stop " 302*d30ea906Sjfb8856606 "invalid queue_id "); 303*d30ea906Sjfb8856606 304*d30ea906Sjfb8856606 /* Device - stopped; queue - stopped */ 305*d30ea906Sjfb8856606 rte_bbdev_queue_stop(dev_id, queue_id); 306*d30ea906Sjfb8856606 307*d30ea906Sjfb8856606 TEST_ASSERT_SUCCESS(rte_bbdev_queue_configure(dev_id, queue_id, 308*d30ea906Sjfb8856606 &ts_params->qconf), 309*d30ea906Sjfb8856606 "Failed test for rte_bbdev_queue_configure: " 310*d30ea906Sjfb8856606 "queue:%u on device:%u should be stopped", queue_id, 311*d30ea906Sjfb8856606 dev_id); 312*d30ea906Sjfb8856606 313*d30ea906Sjfb8856606 TEST_ASSERT_SUCCESS(return_value = rte_bbdev_queue_info_get(dev_id, 314*d30ea906Sjfb8856606 queue_id, &qinfo), 315*d30ea906Sjfb8856606 "Failed test for rte_bbdev_info_get: " 316*d30ea906Sjfb8856606 "invalid return value from " 317*d30ea906Sjfb8856606 "rte_bbdev_queue_info_get function: %i", return_value); 318*d30ea906Sjfb8856606 319*d30ea906Sjfb8856606 TEST_ASSERT(qinfo.conf.socket == ts_params->qconf.socket, 320*d30ea906Sjfb8856606 "Failed test for rte_bbdev_queue_info_get: " 321*d30ea906Sjfb8856606 "invalid queue_size:%u", qinfo.conf.socket); 322*d30ea906Sjfb8856606 323*d30ea906Sjfb8856606 TEST_ASSERT(qinfo.conf.queue_size == ts_params->qconf.queue_size, 324*d30ea906Sjfb8856606 "Failed test for rte_bbdev_queue_info_get: " 325*d30ea906Sjfb8856606 "invalid queue_size:%u", qinfo.conf.queue_size); 326*d30ea906Sjfb8856606 327*d30ea906Sjfb8856606 TEST_ASSERT(qinfo.conf.priority == ts_params->qconf.priority, 328*d30ea906Sjfb8856606 "Failed test for rte_bbdev_queue_info_get: " 329*d30ea906Sjfb8856606 "invalid queue_size:%u", qinfo.conf.priority); 330*d30ea906Sjfb8856606 331*d30ea906Sjfb8856606 TEST_ASSERT(qinfo.conf.deferred_start == 332*d30ea906Sjfb8856606 ts_params->qconf.deferred_start, 333*d30ea906Sjfb8856606 "Failed test for rte_bbdev_queue_info_get: " 334*d30ea906Sjfb8856606 "invalid queue_size:%u", qinfo.conf.deferred_start); 335*d30ea906Sjfb8856606 336*d30ea906Sjfb8856606 /* Device - started; queue - stopped */ 337*d30ea906Sjfb8856606 rte_bbdev_start(dev_id); 338*d30ea906Sjfb8856606 rte_bbdev_queue_stop(dev_id, queue_id); 339*d30ea906Sjfb8856606 340*d30ea906Sjfb8856606 TEST_ASSERT_FAIL(rte_bbdev_queue_configure(dev_id, queue_id, 341*d30ea906Sjfb8856606 &ts_params->qconf), 342*d30ea906Sjfb8856606 "Failed test for rte_bbdev_queue_configure: " 343*d30ea906Sjfb8856606 "queue:%u on device:%u should be stopped", queue_id, 344*d30ea906Sjfb8856606 dev_id); 345*d30ea906Sjfb8856606 346*d30ea906Sjfb8856606 rte_bbdev_stop(dev_id); 347*d30ea906Sjfb8856606 348*d30ea906Sjfb8856606 /* After rte_bbdev_start(dev_id): 349*d30ea906Sjfb8856606 * - queue should be still stopped if deferred_start == 350*d30ea906Sjfb8856606 */ 351*d30ea906Sjfb8856606 rte_bbdev_start(dev_id); 352*d30ea906Sjfb8856606 353*d30ea906Sjfb8856606 TEST_ASSERT_SUCCESS(return_value = rte_bbdev_queue_info_get(dev_id, 354*d30ea906Sjfb8856606 queue_id, &qinfo), 355*d30ea906Sjfb8856606 "Failed test for rte_bbdev_info_get: " 356*d30ea906Sjfb8856606 "invalid return value from " 357*d30ea906Sjfb8856606 "rte_bbdev_queue_info_get function: %i", return_value); 358*d30ea906Sjfb8856606 359*d30ea906Sjfb8856606 TEST_ASSERT(qinfo.started == 0, 360*d30ea906Sjfb8856606 "Failed test for rte_bbdev_queue_info_get: " 361*d30ea906Sjfb8856606 "invalid value for qinfo.started:%u", qinfo.started); 362*d30ea906Sjfb8856606 363*d30ea906Sjfb8856606 rte_bbdev_stop(dev_id); 364*d30ea906Sjfb8856606 365*d30ea906Sjfb8856606 /* After rte_bbdev_start(dev_id): 366*d30ea906Sjfb8856606 * - queue should be started if deferred_start == 367*d30ea906Sjfb8856606 */ 368*d30ea906Sjfb8856606 ts_params->qconf.deferred_start = 0; 369*d30ea906Sjfb8856606 rte_bbdev_queue_configure(dev_id, queue_id, &ts_params->qconf); 370*d30ea906Sjfb8856606 rte_bbdev_start(dev_id); 371*d30ea906Sjfb8856606 372*d30ea906Sjfb8856606 TEST_ASSERT_SUCCESS(return_value = rte_bbdev_queue_info_get(dev_id, 373*d30ea906Sjfb8856606 queue_id, &qinfo), 374*d30ea906Sjfb8856606 "Failed test for rte_bbdev_info_get: " 375*d30ea906Sjfb8856606 "invalid return value from " 376*d30ea906Sjfb8856606 "rte_bbdev_queue_info_get function: %i", return_value); 377*d30ea906Sjfb8856606 378*d30ea906Sjfb8856606 TEST_ASSERT(qinfo.started == 1, 379*d30ea906Sjfb8856606 "Failed test for rte_bbdev_queue_info_get: " 380*d30ea906Sjfb8856606 "invalid value for qinfo.started:%u", qinfo.started); 381*d30ea906Sjfb8856606 382*d30ea906Sjfb8856606 return TEST_SUCCESS; 383*d30ea906Sjfb8856606 } 384*d30ea906Sjfb8856606 385*d30ea906Sjfb8856606 static int 386*d30ea906Sjfb8856606 test_bbdev_configure_invalid_queue_configure(void) 387*d30ea906Sjfb8856606 { 388*d30ea906Sjfb8856606 struct bbdev_testsuite_params *ts_params = &testsuite_params; 389*d30ea906Sjfb8856606 int return_value; 390*d30ea906Sjfb8856606 struct rte_bbdev_info info; 391*d30ea906Sjfb8856606 uint8_t dev_id; 392*d30ea906Sjfb8856606 uint16_t queue_id; 393*d30ea906Sjfb8856606 394*d30ea906Sjfb8856606 /* Valid dev_id values */ 395*d30ea906Sjfb8856606 dev_id = null_dev_id; 396*d30ea906Sjfb8856606 397*d30ea906Sjfb8856606 /* Valid queue_id values */ 398*d30ea906Sjfb8856606 queue_id = 0; 399*d30ea906Sjfb8856606 400*d30ea906Sjfb8856606 rte_bbdev_stop(dev_id); 401*d30ea906Sjfb8856606 402*d30ea906Sjfb8856606 TEST_ASSERT_SUCCESS(return_value = rte_bbdev_info_get(dev_id, &info), 403*d30ea906Sjfb8856606 "Failed test for rte_bbdev_info_get: " 404*d30ea906Sjfb8856606 "invalid return value:%i", return_value); 405*d30ea906Sjfb8856606 406*d30ea906Sjfb8856606 rte_bbdev_queue_stop(dev_id, queue_id); 407*d30ea906Sjfb8856606 408*d30ea906Sjfb8856606 ts_params->qconf.queue_size = info.drv.queue_size_lim + 1; 409*d30ea906Sjfb8856606 TEST_ASSERT_FAIL(rte_bbdev_queue_configure(dev_id, queue_id, 410*d30ea906Sjfb8856606 &ts_params->qconf), 411*d30ea906Sjfb8856606 "Failed test for rte_bbdev_queue_configure: " 412*d30ea906Sjfb8856606 "invalid value qconf.queue_size: %u", 413*d30ea906Sjfb8856606 ts_params->qconf.queue_size); 414*d30ea906Sjfb8856606 415*d30ea906Sjfb8856606 ts_params->qconf.queue_size = info.drv.queue_size_lim; 416*d30ea906Sjfb8856606 ts_params->qconf.priority = info.drv.max_ul_queue_priority; 417*d30ea906Sjfb8856606 queue_id = info.num_queues; 418*d30ea906Sjfb8856606 TEST_ASSERT_FAIL(rte_bbdev_queue_configure(dev_id, queue_id, 419*d30ea906Sjfb8856606 &ts_params->qconf), 420*d30ea906Sjfb8856606 "Failed test for rte_bbdev_queue_configure: " 421*d30ea906Sjfb8856606 "invalid value queue_id: %u", queue_id); 422*d30ea906Sjfb8856606 423*d30ea906Sjfb8856606 queue_id = 0; 424*d30ea906Sjfb8856606 TEST_ASSERT_SUCCESS(rte_bbdev_queue_configure(dev_id, queue_id, NULL), 425*d30ea906Sjfb8856606 "Failed test for rte_bbdev_queue_configure: " 426*d30ea906Sjfb8856606 "NULL qconf structure "); 427*d30ea906Sjfb8856606 428*d30ea906Sjfb8856606 ts_params->qconf.socket = RTE_MAX_NUMA_NODES; 429*d30ea906Sjfb8856606 TEST_ASSERT_FAIL(rte_bbdev_queue_configure(dev_id, queue_id, 430*d30ea906Sjfb8856606 &ts_params->qconf), 431*d30ea906Sjfb8856606 "Failed test for rte_bbdev_queue_configure: " 432*d30ea906Sjfb8856606 "invalid socket number "); 433*d30ea906Sjfb8856606 434*d30ea906Sjfb8856606 ts_params->qconf.socket = SOCKET_ID_ANY; 435*d30ea906Sjfb8856606 TEST_ASSERT_SUCCESS(rte_bbdev_queue_configure(dev_id, queue_id, 436*d30ea906Sjfb8856606 &ts_params->qconf), 437*d30ea906Sjfb8856606 "Failed test for rte_bbdev_queue_configure: " 438*d30ea906Sjfb8856606 "invalid value qconf.queue_size: %u", 439*d30ea906Sjfb8856606 ts_params->qconf.queue_size); 440*d30ea906Sjfb8856606 441*d30ea906Sjfb8856606 TEST_ASSERT_FAIL(rte_bbdev_queue_configure(RTE_BBDEV_MAX_DEVS, queue_id, 442*d30ea906Sjfb8856606 &ts_params->qconf), 443*d30ea906Sjfb8856606 "Failed test for rte_bbdev_queue_configure: " 444*d30ea906Sjfb8856606 "invalid dev_id"); 445*d30ea906Sjfb8856606 446*d30ea906Sjfb8856606 TEST_ASSERT_SUCCESS(rte_bbdev_queue_configure(dev_id, queue_id, NULL), 447*d30ea906Sjfb8856606 "Failed test for rte_bbdev_queue_configure: " 448*d30ea906Sjfb8856606 "invalid value qconf.queue_size: %u", 449*d30ea906Sjfb8856606 ts_params->qconf.queue_size); 450*d30ea906Sjfb8856606 451*d30ea906Sjfb8856606 return TEST_SUCCESS; 452*d30ea906Sjfb8856606 } 453*d30ea906Sjfb8856606 454*d30ea906Sjfb8856606 static int 455*d30ea906Sjfb8856606 test_bbdev_op_pool(void) 456*d30ea906Sjfb8856606 { 457*d30ea906Sjfb8856606 struct rte_mempool *mp; 458*d30ea906Sjfb8856606 459*d30ea906Sjfb8856606 unsigned int dec_size = sizeof(struct rte_bbdev_dec_op); 460*d30ea906Sjfb8856606 unsigned int enc_size = sizeof(struct rte_bbdev_enc_op); 461*d30ea906Sjfb8856606 462*d30ea906Sjfb8856606 const char *pool_dec = "Test_DEC"; 463*d30ea906Sjfb8856606 const char *pool_enc = "Test_ENC"; 464*d30ea906Sjfb8856606 465*d30ea906Sjfb8856606 /* Valid pool configuration */ 466*d30ea906Sjfb8856606 uint32_t size = 256; 467*d30ea906Sjfb8856606 uint32_t cache_size = 128; 468*d30ea906Sjfb8856606 469*d30ea906Sjfb8856606 TEST_ASSERT(rte_bbdev_op_pool_create(NULL, 470*d30ea906Sjfb8856606 RTE_BBDEV_OP_TURBO_DEC, size, cache_size, 0) == NULL, 471*d30ea906Sjfb8856606 "Failed test for rte_bbdev_op_pool_create: " 472*d30ea906Sjfb8856606 "NULL name parameter"); 473*d30ea906Sjfb8856606 474*d30ea906Sjfb8856606 TEST_ASSERT((mp = rte_bbdev_op_pool_create(pool_dec, 475*d30ea906Sjfb8856606 RTE_BBDEV_OP_TURBO_DEC, size, cache_size, 0)) != NULL, 476*d30ea906Sjfb8856606 "Failed test for rte_bbdev_op_pool_create: " 477*d30ea906Sjfb8856606 "returned value is empty"); 478*d30ea906Sjfb8856606 479*d30ea906Sjfb8856606 TEST_ASSERT(mp->size == size, 480*d30ea906Sjfb8856606 "Failed test for rte_bbdev_op_pool_create: " 481*d30ea906Sjfb8856606 "invalid size of the mempool, mp->size: %u", mp->size); 482*d30ea906Sjfb8856606 483*d30ea906Sjfb8856606 TEST_ASSERT(mp->cache_size == cache_size, 484*d30ea906Sjfb8856606 "Failed test for rte_bbdev_op_pool_create: " 485*d30ea906Sjfb8856606 "invalid size of the mempool, mp->size: %u", 486*d30ea906Sjfb8856606 mp->cache_size); 487*d30ea906Sjfb8856606 488*d30ea906Sjfb8856606 TEST_ASSERT_SUCCESS(strcmp(mp->name, pool_dec), 489*d30ea906Sjfb8856606 "Failed test for rte_bbdev_op_pool_create: " 490*d30ea906Sjfb8856606 "invalid name of mempool, mp->name: %s", mp->name); 491*d30ea906Sjfb8856606 492*d30ea906Sjfb8856606 TEST_ASSERT(mp->elt_size == dec_size, 493*d30ea906Sjfb8856606 "Failed test for rte_bbdev_op_pool_create: " 494*d30ea906Sjfb8856606 "invalid element size for RTE_BBDEV_OP_TURBO_DEC, " 495*d30ea906Sjfb8856606 "mp->elt_size: %u", mp->elt_size); 496*d30ea906Sjfb8856606 497*d30ea906Sjfb8856606 rte_mempool_free(mp); 498*d30ea906Sjfb8856606 499*d30ea906Sjfb8856606 TEST_ASSERT((mp = rte_bbdev_op_pool_create(pool_enc, 500*d30ea906Sjfb8856606 RTE_BBDEV_OP_TURBO_ENC, size, cache_size, 0)) != NULL, 501*d30ea906Sjfb8856606 "Failed test for rte_bbdev_op_pool_create: " 502*d30ea906Sjfb8856606 "returned value is empty"); 503*d30ea906Sjfb8856606 504*d30ea906Sjfb8856606 TEST_ASSERT(mp->elt_size == enc_size, 505*d30ea906Sjfb8856606 "Failed test for rte_bbdev_op_pool_create: " 506*d30ea906Sjfb8856606 "invalid element size for RTE_BBDEV_OP_TURBO_ENC, " 507*d30ea906Sjfb8856606 "mp->elt_size: %u", mp->elt_size); 508*d30ea906Sjfb8856606 509*d30ea906Sjfb8856606 rte_mempool_free(mp); 510*d30ea906Sjfb8856606 511*d30ea906Sjfb8856606 TEST_ASSERT((mp = rte_bbdev_op_pool_create("Test_NONE", 512*d30ea906Sjfb8856606 RTE_BBDEV_OP_NONE, size, cache_size, 0)) != NULL, 513*d30ea906Sjfb8856606 "Failed test for rte_bbdev_op_pool_create: " 514*d30ea906Sjfb8856606 "returned value is empty for RTE_BBDEV_OP_NONE"); 515*d30ea906Sjfb8856606 516*d30ea906Sjfb8856606 TEST_ASSERT(mp->elt_size == (enc_size > dec_size ? enc_size : dec_size), 517*d30ea906Sjfb8856606 "Failed test for rte_bbdev_op_pool_create: " 518*d30ea906Sjfb8856606 "invalid size for RTE_BBDEV_OP_NONE, mp->elt_size: %u", 519*d30ea906Sjfb8856606 mp->elt_size); 520*d30ea906Sjfb8856606 521*d30ea906Sjfb8856606 rte_mempool_free(mp); 522*d30ea906Sjfb8856606 523*d30ea906Sjfb8856606 TEST_ASSERT((mp = rte_bbdev_op_pool_create("Test_INV", 524*d30ea906Sjfb8856606 RTE_BBDEV_OP_TYPE_COUNT, size, cache_size, 0)) == NULL, 525*d30ea906Sjfb8856606 "Failed test for rte_bbdev_op_pool_create: " 526*d30ea906Sjfb8856606 "returned value is not NULL for invalid type"); 527*d30ea906Sjfb8856606 528*d30ea906Sjfb8856606 /* Invalid pool configuration */ 529*d30ea906Sjfb8856606 size = 128; 530*d30ea906Sjfb8856606 cache_size = 256; 531*d30ea906Sjfb8856606 532*d30ea906Sjfb8856606 TEST_ASSERT((mp = rte_bbdev_op_pool_create("Test_InvSize", 533*d30ea906Sjfb8856606 RTE_BBDEV_OP_NONE, size, cache_size, 0)) == NULL, 534*d30ea906Sjfb8856606 "Failed test for rte_bbdev_op_pool_create: " 535*d30ea906Sjfb8856606 "returned value should be empty " 536*d30ea906Sjfb8856606 "because size of per-lcore local cache " 537*d30ea906Sjfb8856606 "is greater than size of the mempool."); 538*d30ea906Sjfb8856606 539*d30ea906Sjfb8856606 return TEST_SUCCESS; 540*d30ea906Sjfb8856606 } 541*d30ea906Sjfb8856606 542*d30ea906Sjfb8856606 /** 543*d30ea906Sjfb8856606 * Create pool of OP types RTE_BBDEV_OP_NONE, RTE_BBDEV_OP_TURBO_DEC and 544*d30ea906Sjfb8856606 * RTE_BBDEV_OP_TURBO_ENC and check that only ops of that type can be 545*d30ea906Sjfb8856606 * allocated 546*d30ea906Sjfb8856606 */ 547*d30ea906Sjfb8856606 static int 548*d30ea906Sjfb8856606 test_bbdev_op_type(void) 549*d30ea906Sjfb8856606 { 550*d30ea906Sjfb8856606 struct rte_mempool *mp_dec; 551*d30ea906Sjfb8856606 552*d30ea906Sjfb8856606 const unsigned int OPS_COUNT = 32; 553*d30ea906Sjfb8856606 struct rte_bbdev_dec_op *dec_ops_arr[OPS_COUNT]; 554*d30ea906Sjfb8856606 struct rte_bbdev_enc_op *enc_ops_arr[OPS_COUNT]; 555*d30ea906Sjfb8856606 556*d30ea906Sjfb8856606 const char *pool_dec = "Test_op_dec"; 557*d30ea906Sjfb8856606 558*d30ea906Sjfb8856606 /* Valid pool configuration */ 559*d30ea906Sjfb8856606 uint32_t num_elements = 256; 560*d30ea906Sjfb8856606 uint32_t cache_size = 128; 561*d30ea906Sjfb8856606 562*d30ea906Sjfb8856606 /* mempool type : RTE_BBDEV_OP_TURBO_DEC */ 563*d30ea906Sjfb8856606 mp_dec = rte_bbdev_op_pool_create(pool_dec, 564*d30ea906Sjfb8856606 RTE_BBDEV_OP_TURBO_DEC, num_elements, cache_size, 0); 565*d30ea906Sjfb8856606 TEST_ASSERT(mp_dec != NULL, "Failed to create %s mempool", pool_dec); 566*d30ea906Sjfb8856606 567*d30ea906Sjfb8856606 TEST_ASSERT(rte_bbdev_dec_op_alloc_bulk(mp_dec, dec_ops_arr, 1) == 0, 568*d30ea906Sjfb8856606 "Failed test for rte_bbdev_op_alloc_bulk TURBO_DEC: " 569*d30ea906Sjfb8856606 "OPs type: RTE_BBDEV_OP_TURBO_DEC"); 570*d30ea906Sjfb8856606 571*d30ea906Sjfb8856606 TEST_ASSERT(rte_bbdev_enc_op_alloc_bulk(mp_dec, enc_ops_arr, 1) != 0, 572*d30ea906Sjfb8856606 "Failed test for rte_bbdev_op_alloc_bulk TURBO_DEC: " 573*d30ea906Sjfb8856606 "OPs type: RTE_BBDEV_OP_TURBO_ENC"); 574*d30ea906Sjfb8856606 575*d30ea906Sjfb8856606 rte_mempool_free(mp_dec); 576*d30ea906Sjfb8856606 577*d30ea906Sjfb8856606 return TEST_SUCCESS; 578*d30ea906Sjfb8856606 } 579*d30ea906Sjfb8856606 580*d30ea906Sjfb8856606 static int 581*d30ea906Sjfb8856606 test_bbdev_op_pool_size(void) 582*d30ea906Sjfb8856606 { 583*d30ea906Sjfb8856606 struct rte_mempool *mp_none; 584*d30ea906Sjfb8856606 585*d30ea906Sjfb8856606 const unsigned int OPS_COUNT = 128; 586*d30ea906Sjfb8856606 struct rte_bbdev_enc_op *ops_enc_arr[OPS_COUNT]; 587*d30ea906Sjfb8856606 struct rte_bbdev_enc_op *ops_ext_arr[OPS_COUNT]; 588*d30ea906Sjfb8856606 struct rte_bbdev_enc_op *ops_ext2_arr[OPS_COUNT]; 589*d30ea906Sjfb8856606 590*d30ea906Sjfb8856606 const char *pool_none = "Test_pool_size"; 591*d30ea906Sjfb8856606 592*d30ea906Sjfb8856606 /* Valid pool configuration */ 593*d30ea906Sjfb8856606 uint32_t num_elements = 256; 594*d30ea906Sjfb8856606 uint32_t cache_size = 0; 595*d30ea906Sjfb8856606 596*d30ea906Sjfb8856606 /* Create mempool type : RTE_BBDEV_OP_TURBO_ENC, size : 256 */ 597*d30ea906Sjfb8856606 mp_none = rte_bbdev_op_pool_create(pool_none, RTE_BBDEV_OP_TURBO_ENC, 598*d30ea906Sjfb8856606 num_elements, cache_size, 0); 599*d30ea906Sjfb8856606 TEST_ASSERT(mp_none != NULL, "Failed to create %s mempool", pool_none); 600*d30ea906Sjfb8856606 601*d30ea906Sjfb8856606 /* Add 128 RTE_BBDEV_OP_TURBO_ENC ops */ 602*d30ea906Sjfb8856606 rte_bbdev_enc_op_alloc_bulk(mp_none, ops_enc_arr, OPS_COUNT); 603*d30ea906Sjfb8856606 604*d30ea906Sjfb8856606 /* Add 128 RTE_BBDEV_OP_TURBO_ENC ops */ 605*d30ea906Sjfb8856606 TEST_ASSERT(rte_bbdev_enc_op_alloc_bulk(mp_none, ops_ext_arr, 606*d30ea906Sjfb8856606 OPS_COUNT) == 0, 607*d30ea906Sjfb8856606 "Failed test for allocating bbdev ops: " 608*d30ea906Sjfb8856606 "Mempool size: 256, Free : 128, Attempted to add: 128"); 609*d30ea906Sjfb8856606 610*d30ea906Sjfb8856606 /* Try adding 128 more RTE_BBDEV_OP_TURBO_ENC ops, this should fail */ 611*d30ea906Sjfb8856606 TEST_ASSERT(rte_bbdev_enc_op_alloc_bulk(mp_none, ops_ext2_arr, 612*d30ea906Sjfb8856606 OPS_COUNT) != 0, 613*d30ea906Sjfb8856606 "Failed test for allocating bbdev ops: " 614*d30ea906Sjfb8856606 "Mempool size: 256, Free : 0, Attempted to add: 128"); 615*d30ea906Sjfb8856606 616*d30ea906Sjfb8856606 /* Free-up 128 RTE_BBDEV_OP_TURBO_ENC ops */ 617*d30ea906Sjfb8856606 rte_bbdev_enc_op_free_bulk(ops_enc_arr, OPS_COUNT); 618*d30ea906Sjfb8856606 619*d30ea906Sjfb8856606 /* Try adding 128 RTE_BBDEV_OP_TURBO_DEC ops, this should succeed */ 620*d30ea906Sjfb8856606 /* Cache size > 0 causes reallocation of ops size > 127 fail */ 621*d30ea906Sjfb8856606 TEST_ASSERT(rte_bbdev_enc_op_alloc_bulk(mp_none, ops_ext2_arr, 622*d30ea906Sjfb8856606 OPS_COUNT) == 0, 623*d30ea906Sjfb8856606 "Failed test for allocating ops after mempool freed: " 624*d30ea906Sjfb8856606 "Mempool size: 256, Free : 128, Attempted to add: 128"); 625*d30ea906Sjfb8856606 626*d30ea906Sjfb8856606 rte_mempool_free(mp_none); 627*d30ea906Sjfb8856606 628*d30ea906Sjfb8856606 return TEST_SUCCESS; 629*d30ea906Sjfb8856606 } 630*d30ea906Sjfb8856606 631*d30ea906Sjfb8856606 static int 632*d30ea906Sjfb8856606 test_bbdev_count(void) 633*d30ea906Sjfb8856606 { 634*d30ea906Sjfb8856606 uint8_t num_devs, num_valid_devs = 0; 635*d30ea906Sjfb8856606 636*d30ea906Sjfb8856606 for (num_devs = 0; num_devs < RTE_BBDEV_MAX_DEVS; num_devs++) { 637*d30ea906Sjfb8856606 if (rte_bbdev_is_valid(num_devs)) 638*d30ea906Sjfb8856606 num_valid_devs++; 639*d30ea906Sjfb8856606 } 640*d30ea906Sjfb8856606 641*d30ea906Sjfb8856606 num_devs = rte_bbdev_count(); 642*d30ea906Sjfb8856606 TEST_ASSERT(num_valid_devs == num_devs, 643*d30ea906Sjfb8856606 "Failed test for rte_bbdev_is_valid: " 644*d30ea906Sjfb8856606 "invalid num_devs %u ", num_devs); 645*d30ea906Sjfb8856606 646*d30ea906Sjfb8856606 return TEST_SUCCESS; 647*d30ea906Sjfb8856606 } 648*d30ea906Sjfb8856606 649*d30ea906Sjfb8856606 static int 650*d30ea906Sjfb8856606 test_bbdev_stats(void) 651*d30ea906Sjfb8856606 { 652*d30ea906Sjfb8856606 uint8_t dev_id = null_dev_id; 653*d30ea906Sjfb8856606 uint16_t queue_id = 0; 654*d30ea906Sjfb8856606 struct rte_bbdev_dec_op *dec_ops[4096] = { 0 }; 655*d30ea906Sjfb8856606 struct rte_bbdev_dec_op *dec_proc_ops[4096] = { 0 }; 656*d30ea906Sjfb8856606 struct rte_bbdev_enc_op *enc_ops[4096] = { 0 }; 657*d30ea906Sjfb8856606 struct rte_bbdev_enc_op *enc_proc_ops[4096] = { 0 }; 658*d30ea906Sjfb8856606 uint16_t num_ops = 236; 659*d30ea906Sjfb8856606 struct rte_bbdev_stats stats; 660*d30ea906Sjfb8856606 struct bbdev_testsuite_params *ts_params = &testsuite_params; 661*d30ea906Sjfb8856606 662*d30ea906Sjfb8856606 TEST_ASSERT_SUCCESS(rte_bbdev_queue_stop(dev_id, queue_id), 663*d30ea906Sjfb8856606 "Failed to stop queue %u on device %u ", queue_id, 664*d30ea906Sjfb8856606 dev_id); 665*d30ea906Sjfb8856606 TEST_ASSERT_SUCCESS(rte_bbdev_stop(dev_id), 666*d30ea906Sjfb8856606 "Failed to stop bbdev %u ", dev_id); 667*d30ea906Sjfb8856606 668*d30ea906Sjfb8856606 TEST_ASSERT_SUCCESS(rte_bbdev_queue_configure(dev_id, queue_id, 669*d30ea906Sjfb8856606 &ts_params->qconf), 670*d30ea906Sjfb8856606 "Failed to configure queue %u on device %u ", 671*d30ea906Sjfb8856606 queue_id, dev_id); 672*d30ea906Sjfb8856606 673*d30ea906Sjfb8856606 TEST_ASSERT_SUCCESS(rte_bbdev_start(dev_id), 674*d30ea906Sjfb8856606 "Failed to start bbdev %u ", dev_id); 675*d30ea906Sjfb8856606 676*d30ea906Sjfb8856606 TEST_ASSERT_SUCCESS(rte_bbdev_queue_start(dev_id, queue_id), 677*d30ea906Sjfb8856606 "Failed to start queue %u on device %u ", queue_id, 678*d30ea906Sjfb8856606 dev_id); 679*d30ea906Sjfb8856606 680*d30ea906Sjfb8856606 TEST_ASSERT_SUCCESS(rte_bbdev_queue_start(dev_id, queue_id), 681*d30ea906Sjfb8856606 "Failed to start queue %u on device %u ", queue_id, 682*d30ea906Sjfb8856606 dev_id); 683*d30ea906Sjfb8856606 684*d30ea906Sjfb8856606 /* Tests after enqueue operation */ 685*d30ea906Sjfb8856606 rte_bbdev_enqueue_enc_ops(dev_id, queue_id, enc_ops, num_ops); 686*d30ea906Sjfb8856606 rte_bbdev_enqueue_dec_ops(dev_id, queue_id, dec_ops, num_ops); 687*d30ea906Sjfb8856606 688*d30ea906Sjfb8856606 TEST_ASSERT_FAIL(rte_bbdev_stats_get(RTE_BBDEV_MAX_DEVS, &stats), 689*d30ea906Sjfb8856606 "Failed test for rte_bbdev_stats_get on device %u ", 690*d30ea906Sjfb8856606 dev_id); 691*d30ea906Sjfb8856606 692*d30ea906Sjfb8856606 TEST_ASSERT_FAIL(rte_bbdev_stats_get(dev_id, NULL), 693*d30ea906Sjfb8856606 "Failed test for rte_bbdev_stats_get on device %u ", 694*d30ea906Sjfb8856606 dev_id); 695*d30ea906Sjfb8856606 696*d30ea906Sjfb8856606 TEST_ASSERT_SUCCESS(rte_bbdev_stats_get(dev_id, &stats), 697*d30ea906Sjfb8856606 "Failed test for rte_bbdev_stats_get on device %u ", 698*d30ea906Sjfb8856606 dev_id); 699*d30ea906Sjfb8856606 700*d30ea906Sjfb8856606 TEST_ASSERT(stats.enqueued_count == 2 * num_ops, 701*d30ea906Sjfb8856606 "Failed test for rte_bbdev_enqueue_ops: " 702*d30ea906Sjfb8856606 "invalid enqueued_count %" PRIu64 " ", 703*d30ea906Sjfb8856606 stats.enqueued_count); 704*d30ea906Sjfb8856606 705*d30ea906Sjfb8856606 TEST_ASSERT(stats.dequeued_count == 0, 706*d30ea906Sjfb8856606 "Failed test for rte_bbdev_stats_reset: " 707*d30ea906Sjfb8856606 "invalid dequeued_count %" PRIu64 " ", 708*d30ea906Sjfb8856606 stats.dequeued_count); 709*d30ea906Sjfb8856606 710*d30ea906Sjfb8856606 /* Tests after dequeue operation */ 711*d30ea906Sjfb8856606 rte_bbdev_dequeue_enc_ops(dev_id, queue_id, enc_proc_ops, num_ops); 712*d30ea906Sjfb8856606 rte_bbdev_dequeue_dec_ops(dev_id, queue_id, dec_proc_ops, num_ops); 713*d30ea906Sjfb8856606 714*d30ea906Sjfb8856606 TEST_ASSERT_SUCCESS(rte_bbdev_stats_get(dev_id, &stats), 715*d30ea906Sjfb8856606 "Failed test for rte_bbdev_stats_get on device %u ", 716*d30ea906Sjfb8856606 dev_id); 717*d30ea906Sjfb8856606 718*d30ea906Sjfb8856606 TEST_ASSERT(stats.dequeued_count == 2 * num_ops, 719*d30ea906Sjfb8856606 "Failed test for rte_bbdev_dequeue_ops: " 720*d30ea906Sjfb8856606 "invalid enqueued_count %" PRIu64 " ", 721*d30ea906Sjfb8856606 stats.dequeued_count); 722*d30ea906Sjfb8856606 723*d30ea906Sjfb8856606 TEST_ASSERT(stats.enqueue_err_count == 0, 724*d30ea906Sjfb8856606 "Failed test for rte_bbdev_stats_reset: " 725*d30ea906Sjfb8856606 "invalid enqueue_err_count %" PRIu64 " ", 726*d30ea906Sjfb8856606 stats.enqueue_err_count); 727*d30ea906Sjfb8856606 728*d30ea906Sjfb8856606 TEST_ASSERT(stats.dequeue_err_count == 0, 729*d30ea906Sjfb8856606 "Failed test for rte_bbdev_stats_reset: " 730*d30ea906Sjfb8856606 "invalid dequeue_err_count %" PRIu64 " ", 731*d30ea906Sjfb8856606 stats.dequeue_err_count); 732*d30ea906Sjfb8856606 733*d30ea906Sjfb8856606 /* Tests after reset operation */ 734*d30ea906Sjfb8856606 TEST_ASSERT_FAIL(rte_bbdev_stats_reset(RTE_BBDEV_MAX_DEVS), 735*d30ea906Sjfb8856606 "Failed to reset statistic for device %u ", dev_id); 736*d30ea906Sjfb8856606 737*d30ea906Sjfb8856606 TEST_ASSERT_SUCCESS(rte_bbdev_stats_reset(dev_id), 738*d30ea906Sjfb8856606 "Failed to reset statistic for device %u ", dev_id); 739*d30ea906Sjfb8856606 TEST_ASSERT_SUCCESS(rte_bbdev_stats_get(dev_id, &stats), 740*d30ea906Sjfb8856606 "Failed test for rte_bbdev_stats_get on device %u ", 741*d30ea906Sjfb8856606 dev_id); 742*d30ea906Sjfb8856606 743*d30ea906Sjfb8856606 TEST_ASSERT(stats.enqueued_count == 0, 744*d30ea906Sjfb8856606 "Failed test for rte_bbdev_stats_reset: " 745*d30ea906Sjfb8856606 "invalid enqueued_count %" PRIu64 " ", 746*d30ea906Sjfb8856606 stats.enqueued_count); 747*d30ea906Sjfb8856606 748*d30ea906Sjfb8856606 TEST_ASSERT(stats.dequeued_count == 0, 749*d30ea906Sjfb8856606 "Failed test for rte_bbdev_stats_reset: " 750*d30ea906Sjfb8856606 "invalid dequeued_count %" PRIu64 " ", 751*d30ea906Sjfb8856606 stats.dequeued_count); 752*d30ea906Sjfb8856606 753*d30ea906Sjfb8856606 TEST_ASSERT(stats.enqueue_err_count == 0, 754*d30ea906Sjfb8856606 "Failed test for rte_bbdev_stats_reset: " 755*d30ea906Sjfb8856606 "invalid enqueue_err_count %" PRIu64 " ", 756*d30ea906Sjfb8856606 stats.enqueue_err_count); 757*d30ea906Sjfb8856606 758*d30ea906Sjfb8856606 TEST_ASSERT(stats.dequeue_err_count == 0, 759*d30ea906Sjfb8856606 "Failed test for rte_bbdev_stats_reset: " 760*d30ea906Sjfb8856606 "invalid dequeue_err_count %" PRIu64 " ", 761*d30ea906Sjfb8856606 stats.dequeue_err_count); 762*d30ea906Sjfb8856606 763*d30ea906Sjfb8856606 return TEST_SUCCESS; 764*d30ea906Sjfb8856606 } 765*d30ea906Sjfb8856606 766*d30ea906Sjfb8856606 static int 767*d30ea906Sjfb8856606 test_bbdev_driver_init(void) 768*d30ea906Sjfb8856606 { 769*d30ea906Sjfb8856606 struct rte_bbdev *dev1, *dev2; 770*d30ea906Sjfb8856606 const char *name = "dev_name"; 771*d30ea906Sjfb8856606 char name_tmp[16]; 772*d30ea906Sjfb8856606 int num_devs, num_devs_tmp; 773*d30ea906Sjfb8856606 774*d30ea906Sjfb8856606 dev1 = rte_bbdev_allocate(NULL); 775*d30ea906Sjfb8856606 TEST_ASSERT(dev1 == NULL, 776*d30ea906Sjfb8856606 "Failed initialize bbdev driver with NULL name"); 777*d30ea906Sjfb8856606 778*d30ea906Sjfb8856606 dev1 = rte_bbdev_allocate(name); 779*d30ea906Sjfb8856606 TEST_ASSERT(dev1 != NULL, "Failed to initialize bbdev driver"); 780*d30ea906Sjfb8856606 781*d30ea906Sjfb8856606 dev2 = rte_bbdev_allocate(name); 782*d30ea906Sjfb8856606 TEST_ASSERT(dev2 == NULL, 783*d30ea906Sjfb8856606 "Failed to initialize bbdev driver: " 784*d30ea906Sjfb8856606 "driver with the same name has been initialized before"); 785*d30ea906Sjfb8856606 786*d30ea906Sjfb8856606 num_devs = rte_bbdev_count() - 1; 787*d30ea906Sjfb8856606 num_devs_tmp = num_devs; 788*d30ea906Sjfb8856606 789*d30ea906Sjfb8856606 /* Initialize the maximum amount of devices */ 790*d30ea906Sjfb8856606 do { 791*d30ea906Sjfb8856606 sprintf(name_tmp, "%s%i", "name_", num_devs); 792*d30ea906Sjfb8856606 dev2 = rte_bbdev_allocate(name_tmp); 793*d30ea906Sjfb8856606 TEST_ASSERT(dev2 != NULL, 794*d30ea906Sjfb8856606 "Failed to initialize bbdev driver"); 795*d30ea906Sjfb8856606 ++num_devs; 796*d30ea906Sjfb8856606 } while (num_devs < (RTE_BBDEV_MAX_DEVS - 1)); 797*d30ea906Sjfb8856606 798*d30ea906Sjfb8856606 sprintf(name_tmp, "%s%i", "name_", num_devs); 799*d30ea906Sjfb8856606 dev2 = rte_bbdev_allocate(name_tmp); 800*d30ea906Sjfb8856606 TEST_ASSERT(dev2 == NULL, "Failed to initialize bbdev driver number %d " 801*d30ea906Sjfb8856606 "more drivers than RTE_BBDEV_MAX_DEVS: %d ", num_devs, 802*d30ea906Sjfb8856606 RTE_BBDEV_MAX_DEVS); 803*d30ea906Sjfb8856606 804*d30ea906Sjfb8856606 num_devs--; 805*d30ea906Sjfb8856606 806*d30ea906Sjfb8856606 while (num_devs >= num_devs_tmp) { 807*d30ea906Sjfb8856606 sprintf(name_tmp, "%s%i", "name_", num_devs); 808*d30ea906Sjfb8856606 dev2 = rte_bbdev_get_named_dev(name_tmp); 809*d30ea906Sjfb8856606 TEST_ASSERT_SUCCESS(rte_bbdev_release(dev2), 810*d30ea906Sjfb8856606 "Failed to uninitialize bbdev driver %s ", 811*d30ea906Sjfb8856606 name_tmp); 812*d30ea906Sjfb8856606 num_devs--; 813*d30ea906Sjfb8856606 } 814*d30ea906Sjfb8856606 815*d30ea906Sjfb8856606 TEST_ASSERT(dev1->data->dev_id < RTE_BBDEV_MAX_DEVS, 816*d30ea906Sjfb8856606 "Failed test rte_bbdev_allocate: " 817*d30ea906Sjfb8856606 "invalid dev_id %" PRIu8 ", max number of devices %d ", 818*d30ea906Sjfb8856606 dev1->data->dev_id, RTE_BBDEV_MAX_DEVS); 819*d30ea906Sjfb8856606 820*d30ea906Sjfb8856606 TEST_ASSERT(dev1->state == RTE_BBDEV_INITIALIZED, 821*d30ea906Sjfb8856606 "Failed test rte_bbdev_allocate: " 822*d30ea906Sjfb8856606 "invalid state %d (0 - RTE_BBDEV_UNUSED, 1 - RTE_BBDEV_INITIALIZED", 823*d30ea906Sjfb8856606 dev1->state); 824*d30ea906Sjfb8856606 825*d30ea906Sjfb8856606 TEST_ASSERT_FAIL(rte_bbdev_release(NULL), 826*d30ea906Sjfb8856606 "Failed to uninitialize bbdev driver with NULL bbdev"); 827*d30ea906Sjfb8856606 828*d30ea906Sjfb8856606 sprintf(name_tmp, "%s", "invalid_name"); 829*d30ea906Sjfb8856606 dev2 = rte_bbdev_get_named_dev(name_tmp); 830*d30ea906Sjfb8856606 TEST_ASSERT_FAIL(rte_bbdev_release(dev2), 831*d30ea906Sjfb8856606 "Failed to uninitialize bbdev driver with invalid name"); 832*d30ea906Sjfb8856606 833*d30ea906Sjfb8856606 dev2 = rte_bbdev_get_named_dev(name); 834*d30ea906Sjfb8856606 TEST_ASSERT_SUCCESS(rte_bbdev_release(dev2), 835*d30ea906Sjfb8856606 "Failed to uninitialize bbdev driver: %s ", name); 836*d30ea906Sjfb8856606 837*d30ea906Sjfb8856606 return TEST_SUCCESS; 838*d30ea906Sjfb8856606 } 839*d30ea906Sjfb8856606 840*d30ea906Sjfb8856606 static void 841*d30ea906Sjfb8856606 event_callback(uint16_t dev_id, enum rte_bbdev_event_type type, void *param, 842*d30ea906Sjfb8856606 void *ret_param) 843*d30ea906Sjfb8856606 { 844*d30ea906Sjfb8856606 RTE_SET_USED(dev_id); 845*d30ea906Sjfb8856606 RTE_SET_USED(ret_param); 846*d30ea906Sjfb8856606 847*d30ea906Sjfb8856606 if (param == NULL) 848*d30ea906Sjfb8856606 return; 849*d30ea906Sjfb8856606 850*d30ea906Sjfb8856606 if (type == RTE_BBDEV_EVENT_UNKNOWN || 851*d30ea906Sjfb8856606 type == RTE_BBDEV_EVENT_ERROR || 852*d30ea906Sjfb8856606 type == RTE_BBDEV_EVENT_MAX) 853*d30ea906Sjfb8856606 *(int *)param = type; 854*d30ea906Sjfb8856606 } 855*d30ea906Sjfb8856606 856*d30ea906Sjfb8856606 static int 857*d30ea906Sjfb8856606 test_bbdev_callback(void) 858*d30ea906Sjfb8856606 { 859*d30ea906Sjfb8856606 struct rte_bbdev *dev1, *dev2; 860*d30ea906Sjfb8856606 const char *name = "dev_name1"; 861*d30ea906Sjfb8856606 const char *name2 = "dev_name2"; 862*d30ea906Sjfb8856606 int event_status; 863*d30ea906Sjfb8856606 uint8_t invalid_dev_id = RTE_BBDEV_MAX_DEVS; 864*d30ea906Sjfb8856606 enum rte_bbdev_event_type invalid_event_type = RTE_BBDEV_EVENT_MAX; 865*d30ea906Sjfb8856606 uint8_t dev_id; 866*d30ea906Sjfb8856606 867*d30ea906Sjfb8856606 dev1 = rte_bbdev_allocate(name); 868*d30ea906Sjfb8856606 TEST_ASSERT(dev1 != NULL, "Failed to initialize bbdev driver"); 869*d30ea906Sjfb8856606 870*d30ea906Sjfb8856606 /* 871*d30ea906Sjfb8856606 * RTE_BBDEV_EVENT_UNKNOWN - unregistered 872*d30ea906Sjfb8856606 * RTE_BBDEV_EVENT_ERROR - unregistered 873*d30ea906Sjfb8856606 */ 874*d30ea906Sjfb8856606 event_status = -1; 875*d30ea906Sjfb8856606 rte_bbdev_pmd_callback_process(dev1, RTE_BBDEV_EVENT_UNKNOWN, NULL); 876*d30ea906Sjfb8856606 rte_bbdev_pmd_callback_process(dev1, RTE_BBDEV_EVENT_ERROR, NULL); 877*d30ea906Sjfb8856606 TEST_ASSERT(event_status == -1, 878*d30ea906Sjfb8856606 "Failed test for rte_bbdev_pmd_callback_process: " 879*d30ea906Sjfb8856606 "events were not registered "); 880*d30ea906Sjfb8856606 881*d30ea906Sjfb8856606 TEST_ASSERT_FAIL(rte_bbdev_callback_register(dev1->data->dev_id, 882*d30ea906Sjfb8856606 RTE_BBDEV_EVENT_MAX, event_callback, NULL), 883*d30ea906Sjfb8856606 "Failed to callback register for RTE_BBDEV_EVENT_MAX "); 884*d30ea906Sjfb8856606 885*d30ea906Sjfb8856606 TEST_ASSERT_FAIL(rte_bbdev_callback_unregister(dev1->data->dev_id, 886*d30ea906Sjfb8856606 RTE_BBDEV_EVENT_MAX, event_callback, NULL), 887*d30ea906Sjfb8856606 "Failed to unregister RTE_BBDEV_EVENT_MAX "); 888*d30ea906Sjfb8856606 889*d30ea906Sjfb8856606 /* 890*d30ea906Sjfb8856606 * RTE_BBDEV_EVENT_UNKNOWN - registered 891*d30ea906Sjfb8856606 * RTE_BBDEV_EVENT_ERROR - unregistered 892*d30ea906Sjfb8856606 */ 893*d30ea906Sjfb8856606 TEST_ASSERT_SUCCESS(rte_bbdev_callback_register(dev1->data->dev_id, 894*d30ea906Sjfb8856606 RTE_BBDEV_EVENT_UNKNOWN, event_callback, &event_status), 895*d30ea906Sjfb8856606 "Failed to callback rgstr for RTE_BBDEV_EVENT_UNKNOWN"); 896*d30ea906Sjfb8856606 897*d30ea906Sjfb8856606 rte_bbdev_pmd_callback_process(dev1, RTE_BBDEV_EVENT_UNKNOWN, NULL); 898*d30ea906Sjfb8856606 TEST_ASSERT(event_status == (int) RTE_BBDEV_EVENT_UNKNOWN, 899*d30ea906Sjfb8856606 "Failed test for rte_bbdev_pmd_callback_process " 900*d30ea906Sjfb8856606 "for RTE_BBDEV_EVENT_UNKNOWN "); 901*d30ea906Sjfb8856606 902*d30ea906Sjfb8856606 rte_bbdev_pmd_callback_process(dev1, RTE_BBDEV_EVENT_ERROR, NULL); 903*d30ea906Sjfb8856606 TEST_ASSERT(event_status == (int) RTE_BBDEV_EVENT_UNKNOWN, 904*d30ea906Sjfb8856606 "Failed test for rte_bbdev_pmd_callback_process: " 905*d30ea906Sjfb8856606 "event RTE_BBDEV_EVENT_ERROR was not registered "); 906*d30ea906Sjfb8856606 907*d30ea906Sjfb8856606 /* 908*d30ea906Sjfb8856606 * RTE_BBDEV_EVENT_UNKNOWN - registered 909*d30ea906Sjfb8856606 * RTE_BBDEV_EVENT_ERROR - registered 910*d30ea906Sjfb8856606 */ 911*d30ea906Sjfb8856606 TEST_ASSERT_SUCCESS(rte_bbdev_callback_register(dev1->data->dev_id, 912*d30ea906Sjfb8856606 RTE_BBDEV_EVENT_ERROR, event_callback, &event_status), 913*d30ea906Sjfb8856606 "Failed to callback rgstr for RTE_BBDEV_EVENT_ERROR "); 914*d30ea906Sjfb8856606 915*d30ea906Sjfb8856606 TEST_ASSERT_SUCCESS(rte_bbdev_callback_register(dev1->data->dev_id, 916*d30ea906Sjfb8856606 RTE_BBDEV_EVENT_ERROR, event_callback, &event_status), 917*d30ea906Sjfb8856606 "Failed to callback register for RTE_BBDEV_EVENT_ERROR" 918*d30ea906Sjfb8856606 "(re-registration) "); 919*d30ea906Sjfb8856606 920*d30ea906Sjfb8856606 event_status = -1; 921*d30ea906Sjfb8856606 rte_bbdev_pmd_callback_process(dev1, RTE_BBDEV_EVENT_UNKNOWN, NULL); 922*d30ea906Sjfb8856606 TEST_ASSERT(event_status == (int) RTE_BBDEV_EVENT_UNKNOWN, 923*d30ea906Sjfb8856606 "Failed test for rte_bbdev_pmd_callback_process " 924*d30ea906Sjfb8856606 "for RTE_BBDEV_EVENT_UNKNOWN "); 925*d30ea906Sjfb8856606 926*d30ea906Sjfb8856606 rte_bbdev_pmd_callback_process(dev1, RTE_BBDEV_EVENT_ERROR, NULL); 927*d30ea906Sjfb8856606 TEST_ASSERT(event_status == (int) RTE_BBDEV_EVENT_ERROR, 928*d30ea906Sjfb8856606 "Failed test for rte_bbdev_pmd_callback_process " 929*d30ea906Sjfb8856606 "for RTE_BBDEV_EVENT_ERROR "); 930*d30ea906Sjfb8856606 931*d30ea906Sjfb8856606 /* 932*d30ea906Sjfb8856606 * RTE_BBDEV_EVENT_UNKNOWN - registered 933*d30ea906Sjfb8856606 * RTE_BBDEV_EVENT_ERROR - unregistered 934*d30ea906Sjfb8856606 */ 935*d30ea906Sjfb8856606 TEST_ASSERT_SUCCESS(rte_bbdev_callback_unregister(dev1->data->dev_id, 936*d30ea906Sjfb8856606 RTE_BBDEV_EVENT_ERROR, event_callback, &event_status), 937*d30ea906Sjfb8856606 "Failed to unregister RTE_BBDEV_EVENT_ERROR "); 938*d30ea906Sjfb8856606 939*d30ea906Sjfb8856606 event_status = -1; 940*d30ea906Sjfb8856606 rte_bbdev_pmd_callback_process(dev1, RTE_BBDEV_EVENT_UNKNOWN, NULL); 941*d30ea906Sjfb8856606 TEST_ASSERT(event_status == (int) RTE_BBDEV_EVENT_UNKNOWN, 942*d30ea906Sjfb8856606 "Failed test for rte_bbdev_pmd_callback_process " 943*d30ea906Sjfb8856606 "for RTE_BBDEV_EVENT_UNKNOWN "); 944*d30ea906Sjfb8856606 945*d30ea906Sjfb8856606 rte_bbdev_pmd_callback_process(dev1, RTE_BBDEV_EVENT_ERROR, NULL); 946*d30ea906Sjfb8856606 TEST_ASSERT(event_status == (int) RTE_BBDEV_EVENT_UNKNOWN, 947*d30ea906Sjfb8856606 "Failed test for rte_bbdev_pmd_callback_process: " 948*d30ea906Sjfb8856606 "event RTE_BBDEV_EVENT_ERROR was unregistered "); 949*d30ea906Sjfb8856606 950*d30ea906Sjfb8856606 /* rte_bbdev_callback_register with invalid inputs */ 951*d30ea906Sjfb8856606 TEST_ASSERT_FAIL(rte_bbdev_callback_register(invalid_dev_id, 952*d30ea906Sjfb8856606 RTE_BBDEV_EVENT_ERROR, event_callback, &event_status), 953*d30ea906Sjfb8856606 "Failed test for rte_bbdev_callback_register " 954*d30ea906Sjfb8856606 "for invalid_dev_id "); 955*d30ea906Sjfb8856606 956*d30ea906Sjfb8856606 TEST_ASSERT_FAIL(rte_bbdev_callback_register(dev1->data->dev_id, 957*d30ea906Sjfb8856606 invalid_event_type, event_callback, &event_status), 958*d30ea906Sjfb8856606 "Failed to callback register for invalid event type "); 959*d30ea906Sjfb8856606 960*d30ea906Sjfb8856606 TEST_ASSERT_FAIL(rte_bbdev_callback_register(dev1->data->dev_id, 961*d30ea906Sjfb8856606 RTE_BBDEV_EVENT_ERROR, NULL, &event_status), 962*d30ea906Sjfb8856606 "Failed to callback register - no callback function "); 963*d30ea906Sjfb8856606 964*d30ea906Sjfb8856606 /* The impact of devices on each other */ 965*d30ea906Sjfb8856606 dev2 = rte_bbdev_allocate(name2); 966*d30ea906Sjfb8856606 TEST_ASSERT(dev2 != NULL, 967*d30ea906Sjfb8856606 "Failed to initialize bbdev driver"); 968*d30ea906Sjfb8856606 969*d30ea906Sjfb8856606 /* 970*d30ea906Sjfb8856606 * dev2: 971*d30ea906Sjfb8856606 * RTE_BBDEV_EVENT_UNKNOWN - unregistered 972*d30ea906Sjfb8856606 * RTE_BBDEV_EVENT_ERROR - unregistered 973*d30ea906Sjfb8856606 */ 974*d30ea906Sjfb8856606 event_status = -1; 975*d30ea906Sjfb8856606 rte_bbdev_pmd_callback_process(dev2, RTE_BBDEV_EVENT_UNKNOWN, NULL); 976*d30ea906Sjfb8856606 rte_bbdev_pmd_callback_process(dev2, RTE_BBDEV_EVENT_ERROR, NULL); 977*d30ea906Sjfb8856606 TEST_ASSERT(event_status == -1, 978*d30ea906Sjfb8856606 "Failed test for rte_bbdev_pmd_callback_process: " 979*d30ea906Sjfb8856606 "events were not registered "); 980*d30ea906Sjfb8856606 981*d30ea906Sjfb8856606 /* 982*d30ea906Sjfb8856606 * dev1: RTE_BBDEV_EVENT_ERROR - unregistered 983*d30ea906Sjfb8856606 * dev2: RTE_BBDEV_EVENT_ERROR - registered 984*d30ea906Sjfb8856606 */ 985*d30ea906Sjfb8856606 TEST_ASSERT_SUCCESS(rte_bbdev_callback_register(dev2->data->dev_id, 986*d30ea906Sjfb8856606 RTE_BBDEV_EVENT_ERROR, event_callback, &event_status), 987*d30ea906Sjfb8856606 "Failed to callback rgstr for RTE_BBDEV_EVENT_ERROR"); 988*d30ea906Sjfb8856606 989*d30ea906Sjfb8856606 rte_bbdev_pmd_callback_process(dev1, RTE_BBDEV_EVENT_ERROR, NULL); 990*d30ea906Sjfb8856606 TEST_ASSERT(event_status == -1, 991*d30ea906Sjfb8856606 "Failed test for rte_bbdev_pmd_callback_process in dev1 " 992*d30ea906Sjfb8856606 "for RTE_BBDEV_EVENT_ERROR "); 993*d30ea906Sjfb8856606 994*d30ea906Sjfb8856606 rte_bbdev_pmd_callback_process(dev2, RTE_BBDEV_EVENT_ERROR, NULL); 995*d30ea906Sjfb8856606 TEST_ASSERT(event_status == (int) RTE_BBDEV_EVENT_ERROR, 996*d30ea906Sjfb8856606 "Failed test for rte_bbdev_pmd_callback_process in dev2 " 997*d30ea906Sjfb8856606 "for RTE_BBDEV_EVENT_ERROR "); 998*d30ea906Sjfb8856606 999*d30ea906Sjfb8856606 /* 1000*d30ea906Sjfb8856606 * dev1: RTE_BBDEV_EVENT_UNKNOWN - registered 1001*d30ea906Sjfb8856606 * dev2: RTE_BBDEV_EVENT_UNKNOWN - unregistered 1002*d30ea906Sjfb8856606 */ 1003*d30ea906Sjfb8856606 TEST_ASSERT_SUCCESS(rte_bbdev_callback_register(dev2->data->dev_id, 1004*d30ea906Sjfb8856606 RTE_BBDEV_EVENT_UNKNOWN, event_callback, &event_status), 1005*d30ea906Sjfb8856606 "Failed to callback register for RTE_BBDEV_EVENT_UNKNOWN " 1006*d30ea906Sjfb8856606 "in dev 2 "); 1007*d30ea906Sjfb8856606 1008*d30ea906Sjfb8856606 rte_bbdev_pmd_callback_process(dev2, RTE_BBDEV_EVENT_UNKNOWN, NULL); 1009*d30ea906Sjfb8856606 TEST_ASSERT(event_status == (int) RTE_BBDEV_EVENT_UNKNOWN, 1010*d30ea906Sjfb8856606 "Failed test for rte_bbdev_pmd_callback_process in dev2" 1011*d30ea906Sjfb8856606 " for RTE_BBDEV_EVENT_UNKNOWN "); 1012*d30ea906Sjfb8856606 1013*d30ea906Sjfb8856606 TEST_ASSERT_SUCCESS(rte_bbdev_callback_unregister(dev2->data->dev_id, 1014*d30ea906Sjfb8856606 RTE_BBDEV_EVENT_UNKNOWN, event_callback, &event_status), 1015*d30ea906Sjfb8856606 "Failed to unregister RTE_BBDEV_EVENT_UNKNOWN "); 1016*d30ea906Sjfb8856606 1017*d30ea906Sjfb8856606 TEST_ASSERT_SUCCESS(rte_bbdev_callback_unregister(dev2->data->dev_id, 1018*d30ea906Sjfb8856606 RTE_BBDEV_EVENT_UNKNOWN, event_callback, &event_status), 1019*d30ea906Sjfb8856606 "Failed to unregister RTE_BBDEV_EVENT_UNKNOWN : " 1020*d30ea906Sjfb8856606 "unregister function called once again "); 1021*d30ea906Sjfb8856606 1022*d30ea906Sjfb8856606 event_status = -1; 1023*d30ea906Sjfb8856606 rte_bbdev_pmd_callback_process(dev2, RTE_BBDEV_EVENT_UNKNOWN, NULL); 1024*d30ea906Sjfb8856606 TEST_ASSERT(event_status == -1, 1025*d30ea906Sjfb8856606 "Failed test for rte_bbdev_pmd_callback_process in dev2" 1026*d30ea906Sjfb8856606 " for RTE_BBDEV_EVENT_UNKNOWN "); 1027*d30ea906Sjfb8856606 1028*d30ea906Sjfb8856606 rte_bbdev_pmd_callback_process(dev1, RTE_BBDEV_EVENT_UNKNOWN, NULL); 1029*d30ea906Sjfb8856606 TEST_ASSERT(event_status == (int) RTE_BBDEV_EVENT_UNKNOWN, 1030*d30ea906Sjfb8856606 "Failed test for rte_bbdev_pmd_callback_process in dev2 " 1031*d30ea906Sjfb8856606 "for RTE_BBDEV_EVENT_UNKNOWN "); 1032*d30ea906Sjfb8856606 1033*d30ea906Sjfb8856606 /* rte_bbdev_pmd_callback_process with invalid inputs */ 1034*d30ea906Sjfb8856606 rte_bbdev_pmd_callback_process(NULL, RTE_BBDEV_EVENT_UNKNOWN, NULL); 1035*d30ea906Sjfb8856606 1036*d30ea906Sjfb8856606 event_status = -1; 1037*d30ea906Sjfb8856606 rte_bbdev_pmd_callback_process(dev1, invalid_event_type, NULL); 1038*d30ea906Sjfb8856606 TEST_ASSERT(event_status == -1, 1039*d30ea906Sjfb8856606 "Failed test for rte_bbdev_pmd_callback_process: " 1040*d30ea906Sjfb8856606 "for invalid event type "); 1041*d30ea906Sjfb8856606 1042*d30ea906Sjfb8856606 /* rte_dev_callback_unregister with invalid inputs */ 1043*d30ea906Sjfb8856606 TEST_ASSERT_FAIL(rte_bbdev_callback_unregister(invalid_dev_id, 1044*d30ea906Sjfb8856606 RTE_BBDEV_EVENT_UNKNOWN, event_callback, &event_status), 1045*d30ea906Sjfb8856606 "Failed test for rte_dev_callback_unregister " 1046*d30ea906Sjfb8856606 "for invalid_dev_id "); 1047*d30ea906Sjfb8856606 1048*d30ea906Sjfb8856606 TEST_ASSERT_FAIL(rte_bbdev_callback_unregister(dev1->data->dev_id, 1049*d30ea906Sjfb8856606 invalid_event_type, event_callback, &event_status), 1050*d30ea906Sjfb8856606 "Failed rte_dev_callback_unregister " 1051*d30ea906Sjfb8856606 "for invalid event type "); 1052*d30ea906Sjfb8856606 1053*d30ea906Sjfb8856606 TEST_ASSERT_FAIL(rte_bbdev_callback_unregister(dev1->data->dev_id, 1054*d30ea906Sjfb8856606 invalid_event_type, NULL, &event_status), 1055*d30ea906Sjfb8856606 "Failed rte_dev_callback_unregister " 1056*d30ea906Sjfb8856606 "when no callback function "); 1057*d30ea906Sjfb8856606 1058*d30ea906Sjfb8856606 dev_id = dev1->data->dev_id; 1059*d30ea906Sjfb8856606 1060*d30ea906Sjfb8856606 rte_bbdev_release(dev1); 1061*d30ea906Sjfb8856606 rte_bbdev_release(dev2); 1062*d30ea906Sjfb8856606 1063*d30ea906Sjfb8856606 TEST_ASSERT_FAIL(rte_bbdev_callback_register(dev_id, 1064*d30ea906Sjfb8856606 RTE_BBDEV_EVENT_ERROR, event_callback, &event_status), 1065*d30ea906Sjfb8856606 "Failed test for rte_bbdev_callback_register: " 1066*d30ea906Sjfb8856606 "function called after rte_bbdev_driver_uninit ."); 1067*d30ea906Sjfb8856606 1068*d30ea906Sjfb8856606 TEST_ASSERT_FAIL(rte_bbdev_callback_unregister(dev_id, 1069*d30ea906Sjfb8856606 RTE_BBDEV_EVENT_ERROR, event_callback, &event_status), 1070*d30ea906Sjfb8856606 "Failed test for rte_dev_callback_unregister: " 1071*d30ea906Sjfb8856606 "function called after rte_bbdev_driver_uninit. "); 1072*d30ea906Sjfb8856606 1073*d30ea906Sjfb8856606 event_status = -1; 1074*d30ea906Sjfb8856606 rte_bbdev_pmd_callback_process(dev1, RTE_BBDEV_EVENT_UNKNOWN, NULL); 1075*d30ea906Sjfb8856606 rte_bbdev_pmd_callback_process(dev1, RTE_BBDEV_EVENT_ERROR, NULL); 1076*d30ea906Sjfb8856606 rte_bbdev_pmd_callback_process(dev2, RTE_BBDEV_EVENT_UNKNOWN, NULL); 1077*d30ea906Sjfb8856606 rte_bbdev_pmd_callback_process(dev2, RTE_BBDEV_EVENT_ERROR, NULL); 1078*d30ea906Sjfb8856606 TEST_ASSERT(event_status == -1, 1079*d30ea906Sjfb8856606 "Failed test for rte_bbdev_pmd_callback_process: " 1080*d30ea906Sjfb8856606 "callback function was called after rte_bbdev_driver_uninit"); 1081*d30ea906Sjfb8856606 1082*d30ea906Sjfb8856606 return TEST_SUCCESS; 1083*d30ea906Sjfb8856606 } 1084*d30ea906Sjfb8856606 1085*d30ea906Sjfb8856606 static int 1086*d30ea906Sjfb8856606 test_bbdev_invalid_driver(void) 1087*d30ea906Sjfb8856606 { 1088*d30ea906Sjfb8856606 struct rte_bbdev dev1, *dev2; 1089*d30ea906Sjfb8856606 uint8_t dev_id = null_dev_id; 1090*d30ea906Sjfb8856606 uint16_t queue_id = 0; 1091*d30ea906Sjfb8856606 struct rte_bbdev_stats stats; 1092*d30ea906Sjfb8856606 struct bbdev_testsuite_params *ts_params = &testsuite_params; 1093*d30ea906Sjfb8856606 struct rte_bbdev_queue_info qinfo; 1094*d30ea906Sjfb8856606 struct rte_bbdev_ops dev_ops_tmp; 1095*d30ea906Sjfb8856606 1096*d30ea906Sjfb8856606 TEST_ASSERT_SUCCESS(rte_bbdev_stop(dev_id), "Failed to stop bbdev %u ", 1097*d30ea906Sjfb8856606 dev_id); 1098*d30ea906Sjfb8856606 1099*d30ea906Sjfb8856606 dev1 = rte_bbdev_devices[dev_id]; 1100*d30ea906Sjfb8856606 dev2 = &rte_bbdev_devices[dev_id]; 1101*d30ea906Sjfb8856606 1102*d30ea906Sjfb8856606 /* Tests for rte_bbdev_setup_queues */ 1103*d30ea906Sjfb8856606 dev2->dev_ops = NULL; 1104*d30ea906Sjfb8856606 TEST_ASSERT_FAIL(rte_bbdev_setup_queues(dev_id, 1, SOCKET_ID_ANY), 1105*d30ea906Sjfb8856606 "Failed test for rte_bbdev_setup_queues: " 1106*d30ea906Sjfb8856606 "NULL dev_ops structure "); 1107*d30ea906Sjfb8856606 dev2->dev_ops = dev1.dev_ops; 1108*d30ea906Sjfb8856606 1109*d30ea906Sjfb8856606 dev_ops_tmp = *dev2->dev_ops; 1110*d30ea906Sjfb8856606 dev_ops_tmp.info_get = NULL; 1111*d30ea906Sjfb8856606 dev2->dev_ops = &dev_ops_tmp; 1112*d30ea906Sjfb8856606 TEST_ASSERT_FAIL(rte_bbdev_setup_queues(dev_id, 1, SOCKET_ID_ANY), 1113*d30ea906Sjfb8856606 "Failed test for rte_bbdev_setup_queues: " 1114*d30ea906Sjfb8856606 "NULL info_get "); 1115*d30ea906Sjfb8856606 dev2->dev_ops = dev1.dev_ops; 1116*d30ea906Sjfb8856606 1117*d30ea906Sjfb8856606 dev_ops_tmp = *dev2->dev_ops; 1118*d30ea906Sjfb8856606 dev_ops_tmp.queue_release = NULL; 1119*d30ea906Sjfb8856606 dev2->dev_ops = &dev_ops_tmp; 1120*d30ea906Sjfb8856606 TEST_ASSERT_FAIL(rte_bbdev_setup_queues(dev_id, 1, SOCKET_ID_ANY), 1121*d30ea906Sjfb8856606 "Failed test for rte_bbdev_setup_queues: " 1122*d30ea906Sjfb8856606 "NULL queue_release "); 1123*d30ea906Sjfb8856606 dev2->dev_ops = dev1.dev_ops; 1124*d30ea906Sjfb8856606 1125*d30ea906Sjfb8856606 dev2->data->socket_id = SOCKET_ID_ANY; 1126*d30ea906Sjfb8856606 TEST_ASSERT_SUCCESS(rte_bbdev_setup_queues(dev_id, 1, 1127*d30ea906Sjfb8856606 SOCKET_ID_ANY), "Failed to configure bbdev %u", dev_id); 1128*d30ea906Sjfb8856606 1129*d30ea906Sjfb8856606 /* Test for rte_bbdev_queue_configure */ 1130*d30ea906Sjfb8856606 dev2->dev_ops = NULL; 1131*d30ea906Sjfb8856606 TEST_ASSERT_FAIL(rte_bbdev_queue_configure(dev_id, queue_id, 1132*d30ea906Sjfb8856606 &ts_params->qconf), 1133*d30ea906Sjfb8856606 "Failed to configure queue %u on device %u " 1134*d30ea906Sjfb8856606 "with NULL dev_ops structure ", queue_id, dev_id); 1135*d30ea906Sjfb8856606 dev2->dev_ops = dev1.dev_ops; 1136*d30ea906Sjfb8856606 1137*d30ea906Sjfb8856606 dev_ops_tmp = *dev2->dev_ops; 1138*d30ea906Sjfb8856606 dev_ops_tmp.queue_setup = NULL; 1139*d30ea906Sjfb8856606 dev2->dev_ops = &dev_ops_tmp; 1140*d30ea906Sjfb8856606 TEST_ASSERT_FAIL(rte_bbdev_queue_configure(dev_id, queue_id, 1141*d30ea906Sjfb8856606 &ts_params->qconf), 1142*d30ea906Sjfb8856606 "Failed to configure queue %u on device %u " 1143*d30ea906Sjfb8856606 "with NULL queue_setup ", queue_id, dev_id); 1144*d30ea906Sjfb8856606 dev2->dev_ops = dev1.dev_ops; 1145*d30ea906Sjfb8856606 1146*d30ea906Sjfb8856606 dev_ops_tmp = *dev2->dev_ops; 1147*d30ea906Sjfb8856606 dev_ops_tmp.info_get = NULL; 1148*d30ea906Sjfb8856606 dev2->dev_ops = &dev_ops_tmp; 1149*d30ea906Sjfb8856606 TEST_ASSERT_FAIL(rte_bbdev_queue_configure(dev_id, queue_id, 1150*d30ea906Sjfb8856606 &ts_params->qconf), 1151*d30ea906Sjfb8856606 "Failed to configure queue %u on device %u " 1152*d30ea906Sjfb8856606 "with NULL info_get ", queue_id, dev_id); 1153*d30ea906Sjfb8856606 dev2->dev_ops = dev1.dev_ops; 1154*d30ea906Sjfb8856606 1155*d30ea906Sjfb8856606 TEST_ASSERT_FAIL(rte_bbdev_queue_configure(RTE_BBDEV_MAX_DEVS, 1156*d30ea906Sjfb8856606 queue_id, &ts_params->qconf), 1157*d30ea906Sjfb8856606 "Failed to configure queue %u on device %u ", 1158*d30ea906Sjfb8856606 queue_id, dev_id); 1159*d30ea906Sjfb8856606 1160*d30ea906Sjfb8856606 TEST_ASSERT_SUCCESS(rte_bbdev_queue_configure(dev_id, queue_id, 1161*d30ea906Sjfb8856606 &ts_params->qconf), 1162*d30ea906Sjfb8856606 "Failed to configure queue %u on device %u ", 1163*d30ea906Sjfb8856606 queue_id, dev_id); 1164*d30ea906Sjfb8856606 1165*d30ea906Sjfb8856606 /* Test for rte_bbdev_queue_info_get */ 1166*d30ea906Sjfb8856606 dev2->dev_ops = NULL; 1167*d30ea906Sjfb8856606 TEST_ASSERT_SUCCESS(rte_bbdev_queue_info_get(dev_id, queue_id, &qinfo), 1168*d30ea906Sjfb8856606 "Failed test for rte_bbdev_info_get: " 1169*d30ea906Sjfb8856606 "NULL dev_ops structure "); 1170*d30ea906Sjfb8856606 dev2->dev_ops = dev1.dev_ops; 1171*d30ea906Sjfb8856606 1172*d30ea906Sjfb8856606 TEST_ASSERT_FAIL(rte_bbdev_queue_info_get(RTE_BBDEV_MAX_DEVS, 1173*d30ea906Sjfb8856606 queue_id, &qinfo), 1174*d30ea906Sjfb8856606 "Failed test for rte_bbdev_info_get: " 1175*d30ea906Sjfb8856606 "invalid dev_id "); 1176*d30ea906Sjfb8856606 1177*d30ea906Sjfb8856606 TEST_ASSERT_FAIL(rte_bbdev_queue_info_get(dev_id, 1178*d30ea906Sjfb8856606 RTE_MAX_QUEUES_PER_PORT, &qinfo), 1179*d30ea906Sjfb8856606 "Failed test for rte_bbdev_info_get: " 1180*d30ea906Sjfb8856606 "invalid queue_id "); 1181*d30ea906Sjfb8856606 1182*d30ea906Sjfb8856606 TEST_ASSERT_FAIL(rte_bbdev_queue_info_get(dev_id, queue_id, NULL), 1183*d30ea906Sjfb8856606 "Failed test for rte_bbdev_info_get: " 1184*d30ea906Sjfb8856606 "invalid dev_info "); 1185*d30ea906Sjfb8856606 1186*d30ea906Sjfb8856606 /* Test for rte_bbdev_start */ 1187*d30ea906Sjfb8856606 dev2->dev_ops = NULL; 1188*d30ea906Sjfb8856606 TEST_ASSERT_FAIL(rte_bbdev_start(dev_id), 1189*d30ea906Sjfb8856606 "Failed to start bbdev %u " 1190*d30ea906Sjfb8856606 "with NULL dev_ops structure ", dev_id); 1191*d30ea906Sjfb8856606 dev2->dev_ops = dev1.dev_ops; 1192*d30ea906Sjfb8856606 1193*d30ea906Sjfb8856606 TEST_ASSERT_SUCCESS(rte_bbdev_start(dev_id), 1194*d30ea906Sjfb8856606 "Failed to start bbdev %u ", dev_id); 1195*d30ea906Sjfb8856606 1196*d30ea906Sjfb8856606 /* Test for rte_bbdev_queue_start */ 1197*d30ea906Sjfb8856606 dev2->dev_ops = NULL; 1198*d30ea906Sjfb8856606 TEST_ASSERT_FAIL(rte_bbdev_queue_start(dev_id, queue_id), 1199*d30ea906Sjfb8856606 "Failed to start queue %u on device %u: " 1200*d30ea906Sjfb8856606 "NULL dev_ops structure", queue_id, dev_id); 1201*d30ea906Sjfb8856606 dev2->dev_ops = dev1.dev_ops; 1202*d30ea906Sjfb8856606 1203*d30ea906Sjfb8856606 TEST_ASSERT_SUCCESS(rte_bbdev_queue_start(dev_id, queue_id), 1204*d30ea906Sjfb8856606 "Failed to start queue %u on device %u ", queue_id, 1205*d30ea906Sjfb8856606 dev_id); 1206*d30ea906Sjfb8856606 1207*d30ea906Sjfb8856606 /* Tests for rte_bbdev_stats_get */ 1208*d30ea906Sjfb8856606 dev2->dev_ops = NULL; 1209*d30ea906Sjfb8856606 TEST_ASSERT_FAIL(rte_bbdev_stats_get(dev_id, &stats), 1210*d30ea906Sjfb8856606 "Failed test for rte_bbdev_stats_get on device %u ", 1211*d30ea906Sjfb8856606 dev_id); 1212*d30ea906Sjfb8856606 dev2->dev_ops = dev1.dev_ops; 1213*d30ea906Sjfb8856606 1214*d30ea906Sjfb8856606 dev_ops_tmp = *dev2->dev_ops; 1215*d30ea906Sjfb8856606 dev_ops_tmp.stats_reset = NULL; 1216*d30ea906Sjfb8856606 dev2->dev_ops = &dev_ops_tmp; 1217*d30ea906Sjfb8856606 TEST_ASSERT_SUCCESS(rte_bbdev_stats_get(dev_id, &stats), 1218*d30ea906Sjfb8856606 "Failed test for rte_bbdev_stats_get: " 1219*d30ea906Sjfb8856606 "NULL stats_get "); 1220*d30ea906Sjfb8856606 dev2->dev_ops = dev1.dev_ops; 1221*d30ea906Sjfb8856606 1222*d30ea906Sjfb8856606 TEST_ASSERT_SUCCESS(rte_bbdev_stats_get(dev_id, &stats), 1223*d30ea906Sjfb8856606 "Failed test for rte_bbdev_stats_get on device %u ", 1224*d30ea906Sjfb8856606 dev_id); 1225*d30ea906Sjfb8856606 1226*d30ea906Sjfb8856606 /* 1227*d30ea906Sjfb8856606 * Tests for: 1228*d30ea906Sjfb8856606 * rte_bbdev_callback_register, 1229*d30ea906Sjfb8856606 * rte_bbdev_pmd_callback_process, 1230*d30ea906Sjfb8856606 * rte_dev_callback_unregister 1231*d30ea906Sjfb8856606 */ 1232*d30ea906Sjfb8856606 dev2->dev_ops = NULL; 1233*d30ea906Sjfb8856606 TEST_ASSERT_SUCCESS(rte_bbdev_callback_register(dev_id, 1234*d30ea906Sjfb8856606 RTE_BBDEV_EVENT_UNKNOWN, event_callback, NULL), 1235*d30ea906Sjfb8856606 "Failed to callback rgstr for RTE_BBDEV_EVENT_UNKNOWN"); 1236*d30ea906Sjfb8856606 rte_bbdev_pmd_callback_process(dev2, RTE_BBDEV_EVENT_UNKNOWN, NULL); 1237*d30ea906Sjfb8856606 1238*d30ea906Sjfb8856606 TEST_ASSERT_SUCCESS(rte_bbdev_callback_unregister(dev_id, 1239*d30ea906Sjfb8856606 RTE_BBDEV_EVENT_UNKNOWN, event_callback, NULL), 1240*d30ea906Sjfb8856606 "Failed to unregister RTE_BBDEV_EVENT_ERROR "); 1241*d30ea906Sjfb8856606 dev2->dev_ops = dev1.dev_ops; 1242*d30ea906Sjfb8856606 1243*d30ea906Sjfb8856606 /* Tests for rte_bbdev_stats_reset */ 1244*d30ea906Sjfb8856606 dev2->dev_ops = NULL; 1245*d30ea906Sjfb8856606 TEST_ASSERT_FAIL(rte_bbdev_stats_reset(dev_id), 1246*d30ea906Sjfb8856606 "Failed to reset statistic for device %u ", dev_id); 1247*d30ea906Sjfb8856606 dev2->dev_ops = dev1.dev_ops; 1248*d30ea906Sjfb8856606 1249*d30ea906Sjfb8856606 dev_ops_tmp = *dev2->dev_ops; 1250*d30ea906Sjfb8856606 dev_ops_tmp.stats_reset = NULL; 1251*d30ea906Sjfb8856606 dev2->dev_ops = &dev_ops_tmp; 1252*d30ea906Sjfb8856606 TEST_ASSERT_SUCCESS(rte_bbdev_stats_reset(dev_id), 1253*d30ea906Sjfb8856606 "Failed test for rte_bbdev_stats_reset: " 1254*d30ea906Sjfb8856606 "NULL stats_reset "); 1255*d30ea906Sjfb8856606 dev2->dev_ops = dev1.dev_ops; 1256*d30ea906Sjfb8856606 1257*d30ea906Sjfb8856606 TEST_ASSERT_SUCCESS(rte_bbdev_stats_reset(dev_id), 1258*d30ea906Sjfb8856606 "Failed to reset statistic for device %u ", dev_id); 1259*d30ea906Sjfb8856606 1260*d30ea906Sjfb8856606 /* Tests for rte_bbdev_queue_stop */ 1261*d30ea906Sjfb8856606 dev2->dev_ops = NULL; 1262*d30ea906Sjfb8856606 TEST_ASSERT_FAIL(rte_bbdev_queue_stop(dev_id, queue_id), 1263*d30ea906Sjfb8856606 "Failed to stop queue %u on device %u: " 1264*d30ea906Sjfb8856606 "NULL dev_ops structure", queue_id, dev_id); 1265*d30ea906Sjfb8856606 dev2->dev_ops = dev1.dev_ops; 1266*d30ea906Sjfb8856606 1267*d30ea906Sjfb8856606 TEST_ASSERT_SUCCESS(rte_bbdev_queue_stop(dev_id, queue_id), 1268*d30ea906Sjfb8856606 "Failed to stop queue %u on device %u ", queue_id, 1269*d30ea906Sjfb8856606 dev_id); 1270*d30ea906Sjfb8856606 1271*d30ea906Sjfb8856606 /* Tests for rte_bbdev_stop */ 1272*d30ea906Sjfb8856606 dev2->dev_ops = NULL; 1273*d30ea906Sjfb8856606 TEST_ASSERT_FAIL(rte_bbdev_stop(dev_id), 1274*d30ea906Sjfb8856606 "Failed to stop bbdev %u with NULL dev_ops structure ", 1275*d30ea906Sjfb8856606 dev_id); 1276*d30ea906Sjfb8856606 dev2->dev_ops = dev1.dev_ops; 1277*d30ea906Sjfb8856606 1278*d30ea906Sjfb8856606 TEST_ASSERT_SUCCESS(rte_bbdev_stop(dev_id), 1279*d30ea906Sjfb8856606 "Failed to stop bbdev %u ", dev_id); 1280*d30ea906Sjfb8856606 1281*d30ea906Sjfb8856606 /* Tests for rte_bbdev_close */ 1282*d30ea906Sjfb8856606 TEST_ASSERT_FAIL(rte_bbdev_close(RTE_BBDEV_MAX_DEVS), 1283*d30ea906Sjfb8856606 "Failed to close bbdev with invalid dev_id"); 1284*d30ea906Sjfb8856606 1285*d30ea906Sjfb8856606 dev2->dev_ops = NULL; 1286*d30ea906Sjfb8856606 TEST_ASSERT_FAIL(rte_bbdev_close(dev_id), 1287*d30ea906Sjfb8856606 "Failed to close bbdev %u with NULL dev_ops structure ", 1288*d30ea906Sjfb8856606 dev_id); 1289*d30ea906Sjfb8856606 dev2->dev_ops = dev1.dev_ops; 1290*d30ea906Sjfb8856606 1291*d30ea906Sjfb8856606 TEST_ASSERT_SUCCESS(rte_bbdev_close(dev_id), 1292*d30ea906Sjfb8856606 "Failed to close bbdev %u ", dev_id); 1293*d30ea906Sjfb8856606 1294*d30ea906Sjfb8856606 return TEST_SUCCESS; 1295*d30ea906Sjfb8856606 } 1296*d30ea906Sjfb8856606 1297*d30ea906Sjfb8856606 static int 1298*d30ea906Sjfb8856606 test_bbdev_get_named_dev(void) 1299*d30ea906Sjfb8856606 { 1300*d30ea906Sjfb8856606 struct rte_bbdev *dev, *dev_tmp; 1301*d30ea906Sjfb8856606 const char *name = "name"; 1302*d30ea906Sjfb8856606 1303*d30ea906Sjfb8856606 dev = rte_bbdev_allocate(name); 1304*d30ea906Sjfb8856606 TEST_ASSERT(dev != NULL, "Failed to initialize bbdev driver"); 1305*d30ea906Sjfb8856606 1306*d30ea906Sjfb8856606 dev_tmp = rte_bbdev_get_named_dev(NULL); 1307*d30ea906Sjfb8856606 TEST_ASSERT(dev_tmp == NULL, "Failed test for rte_bbdev_get_named_dev: " 1308*d30ea906Sjfb8856606 "function called with NULL parameter"); 1309*d30ea906Sjfb8856606 1310*d30ea906Sjfb8856606 dev_tmp = rte_bbdev_get_named_dev(name); 1311*d30ea906Sjfb8856606 1312*d30ea906Sjfb8856606 TEST_ASSERT(dev == dev_tmp, "Failed test for rte_bbdev_get_named_dev: " 1313*d30ea906Sjfb8856606 "wrong device was returned "); 1314*d30ea906Sjfb8856606 1315*d30ea906Sjfb8856606 TEST_ASSERT_SUCCESS(rte_bbdev_release(dev), 1316*d30ea906Sjfb8856606 "Failed to uninitialize bbdev driver %s ", name); 1317*d30ea906Sjfb8856606 1318*d30ea906Sjfb8856606 return TEST_SUCCESS; 1319*d30ea906Sjfb8856606 } 1320*d30ea906Sjfb8856606 1321*d30ea906Sjfb8856606 static struct unit_test_suite bbdev_null_testsuite = { 1322*d30ea906Sjfb8856606 .suite_name = "BBDEV NULL Unit Test Suite", 1323*d30ea906Sjfb8856606 .setup = testsuite_setup, 1324*d30ea906Sjfb8856606 .teardown = testsuite_teardown, 1325*d30ea906Sjfb8856606 .unit_test_cases = { 1326*d30ea906Sjfb8856606 1327*d30ea906Sjfb8856606 TEST_CASE(test_bbdev_configure_invalid_dev_id), 1328*d30ea906Sjfb8856606 1329*d30ea906Sjfb8856606 TEST_CASE_ST(ut_setup, ut_teardown, 1330*d30ea906Sjfb8856606 test_bbdev_configure_invalid_num_queues), 1331*d30ea906Sjfb8856606 1332*d30ea906Sjfb8856606 TEST_CASE_ST(ut_setup, ut_teardown, 1333*d30ea906Sjfb8856606 test_bbdev_configure_stop_device), 1334*d30ea906Sjfb8856606 1335*d30ea906Sjfb8856606 TEST_CASE_ST(ut_setup, ut_teardown, 1336*d30ea906Sjfb8856606 test_bbdev_configure_stop_queue), 1337*d30ea906Sjfb8856606 1338*d30ea906Sjfb8856606 TEST_CASE_ST(ut_setup, ut_teardown, 1339*d30ea906Sjfb8856606 test_bbdev_configure_invalid_queue_configure), 1340*d30ea906Sjfb8856606 1341*d30ea906Sjfb8856606 TEST_CASE_ST(ut_setup, ut_teardown, 1342*d30ea906Sjfb8856606 test_bbdev_op_pool), 1343*d30ea906Sjfb8856606 1344*d30ea906Sjfb8856606 TEST_CASE_ST(ut_setup, ut_teardown, 1345*d30ea906Sjfb8856606 test_bbdev_op_type), 1346*d30ea906Sjfb8856606 1347*d30ea906Sjfb8856606 TEST_CASE_ST(ut_setup, ut_teardown, 1348*d30ea906Sjfb8856606 test_bbdev_op_pool_size), 1349*d30ea906Sjfb8856606 1350*d30ea906Sjfb8856606 TEST_CASE_ST(ut_setup, ut_teardown, 1351*d30ea906Sjfb8856606 test_bbdev_stats), 1352*d30ea906Sjfb8856606 1353*d30ea906Sjfb8856606 TEST_CASE_ST(ut_setup, ut_teardown, 1354*d30ea906Sjfb8856606 test_bbdev_driver_init), 1355*d30ea906Sjfb8856606 1356*d30ea906Sjfb8856606 TEST_CASE_ST(ut_setup, ut_teardown, 1357*d30ea906Sjfb8856606 test_bbdev_callback), 1358*d30ea906Sjfb8856606 1359*d30ea906Sjfb8856606 TEST_CASE_ST(ut_setup, ut_teardown, 1360*d30ea906Sjfb8856606 test_bbdev_invalid_driver), 1361*d30ea906Sjfb8856606 1362*d30ea906Sjfb8856606 TEST_CASE_ST(ut_setup, ut_teardown, 1363*d30ea906Sjfb8856606 test_bbdev_get_named_dev), 1364*d30ea906Sjfb8856606 1365*d30ea906Sjfb8856606 TEST_CASE(test_bbdev_count), 1366*d30ea906Sjfb8856606 1367*d30ea906Sjfb8856606 TEST_CASES_END() /**< NULL terminate unit test array */ 1368*d30ea906Sjfb8856606 } 1369*d30ea906Sjfb8856606 }; 1370*d30ea906Sjfb8856606 1371*d30ea906Sjfb8856606 REGISTER_TEST_COMMAND(unittest, bbdev_null_testsuite); 1372